OSDN Git Service

OAuthUtilityでのタイムスタンプの出力にDateTimeUtcを使用する
[opentween/open-tween.git] / OpenTween.Tests / OTSplitContainerTest.cs
1 // OpenTween - Client of Twitter
2 // Copyright (c) 2014 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
3 // All rights reserved.
4 //
5 // This file is part of OpenTween.
6 //
7 // This program is free software; you can redistribute it and/or modify it
8 // under the terms of the GNU General Public License as published by the Free
9 // Software Foundation; either version 3 of the License, or (at your option)
10 // any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 // for more details.
16 //
17 // You should have received a copy of the GNU General Public License along
18 // with this program. If not, see <http://www.gnu.org/licenses/>, or write to
19 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
20 // Boston, MA 02110-1301, USA.
21
22 using System;
23 using System.Collections.Generic;
24 using System.Linq;
25 using System.Text;
26 using System.Threading.Tasks;
27 using System.Windows.Forms;
28 using Xunit;
29 using Xunit.Extensions;
30
31 namespace OpenTween
32 {
33     public class OTSplitContainerTest
34     {
35         [Fact]
36         public void IsPanelInvertedGetter_Test()
37         {
38             using (var splitContainer = new OTSplitContainer())
39             {
40                 Assert.False(splitContainer.IsPanelInverted); // デフォルト値
41
42                 splitContainer.IsPanelInverted = true;
43                 Assert.True(splitContainer.IsPanelInverted);
44
45                 splitContainer.IsPanelInverted = false;
46                 Assert.False(splitContainer.IsPanelInverted);
47             }
48         }
49
50         [Fact]
51         public void IsPanelInvertedSetter_InnerControlsTest()
52         {
53             using (var splitContainer = new OTSplitContainer())
54             using (var buttonA = new Button())
55             using (var buttonB = new Button())
56             using (var buttonC = new Button())
57             using (var buttonD = new Button())
58             {
59                 splitContainer.Panel1.Controls.AddRange(new[] { buttonA, buttonB });
60                 splitContainer.Panel2.Controls.AddRange(new[] { buttonC, buttonD });
61
62                 var baseSplitContainer = (SplitContainer)splitContainer;
63
64                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
65                 Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel1.Controls.Cast<Control>());
66                 Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel2.Controls.Cast<Control>());
67
68                 // 上下パネルを反転する
69                 splitContainer.IsPanelInverted = true;
70
71                 // Panel1, Panel2 内のコントロールが入れ替わる
72                 Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel1.Controls.Cast<Control>());
73                 Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel2.Controls.Cast<Control>());
74
75                 // 元に戻す
76                 splitContainer.IsPanelInverted = false;
77
78                 // Panel1, Panel2 内のコントロールも元に戻る
79                 Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel1.Controls.Cast<Control>());
80                 Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel2.Controls.Cast<Control>());
81             }
82         }
83
84         [Fact]
85         public void IsPanelInvertedSetter_Panel1FixedTest()
86         {
87             using (var splitContainer = new OTSplitContainer())
88             {
89                 splitContainer.FixedPanel = FixedPanel.Panel1;
90
91                 var baseSplitContainer = (SplitContainer)splitContainer;
92
93                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
94                 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
95
96                 // 上下パネルを反転する
97                 splitContainer.IsPanelInverted = true;
98                 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
99
100                 // 元に戻す
101                 splitContainer.IsPanelInverted = false;
102                 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
103             }
104         }
105
106         [Fact]
107         public void IsPanelInvertedSetter_Panel2FixedTest()
108         {
109             using (var splitContainer = new OTSplitContainer())
110             {
111                 splitContainer.FixedPanel = FixedPanel.Panel2;
112
113                 var baseSplitContainer = (SplitContainer)splitContainer;
114
115                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
116                 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
117
118                 // 上下パネルを反転する
119                 splitContainer.IsPanelInverted = true;
120                 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
121
122                 // 元に戻す
123                 splitContainer.IsPanelInverted = false;
124                 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
125             }
126         }
127
128         [Fact]
129         public void IsPanelInvertedSetter_NoneFixedTest()
130         {
131             using (var splitContainer = new OTSplitContainer())
132             {
133                 splitContainer.FixedPanel = FixedPanel.None;
134
135                 var baseSplitContainer = (SplitContainer)splitContainer;
136
137                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
138                 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
139
140                 // 上下パネルを反転する
141                 splitContainer.IsPanelInverted = true;
142                 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
143
144                 // 元に戻す
145                 splitContainer.IsPanelInverted = false;
146                 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
147             }
148         }
149
150         [Fact]
151         public void IsPanelInvertedSetter_PanelMinSizeTest()
152         {
153             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
154             {
155                 splitContainer.Panel1MinSize = 200;
156                 splitContainer.Panel2MinSize = 300;
157
158                 var baseSplitContainer = (SplitContainer)splitContainer;
159
160                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
161                 Assert.Equal(200, baseSplitContainer.Panel1MinSize);
162                 Assert.Equal(300, baseSplitContainer.Panel2MinSize);
163
164                 // 上下パネルを反転する
165                 splitContainer.IsPanelInverted = true;
166                 Assert.Equal(300, baseSplitContainer.Panel1MinSize);
167                 Assert.Equal(200, baseSplitContainer.Panel2MinSize);
168
169                 // 元に戻す
170                 splitContainer.IsPanelInverted = false;
171                 Assert.Equal(200, baseSplitContainer.Panel1MinSize);
172                 Assert.Equal(300, baseSplitContainer.Panel2MinSize);
173             }
174         }
175
176         [Fact]
177         public void IsPanelInvertedSetter_Panel1CollapsedTest()
178         {
179             using (var splitContainer = new OTSplitContainer())
180             {
181                 splitContainer.Panel1Collapsed = true;
182
183                 var baseSplitContainer = (SplitContainer)splitContainer;
184
185                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
186                 Assert.True(baseSplitContainer.Panel1Collapsed);
187                 Assert.False(baseSplitContainer.Panel2Collapsed);
188
189                 // 上下パネルを反転する
190                 splitContainer.IsPanelInverted = true;
191                 Assert.False(baseSplitContainer.Panel1Collapsed);
192                 Assert.True(baseSplitContainer.Panel2Collapsed);
193
194                 // 元に戻す
195                 splitContainer.IsPanelInverted = false;
196                 Assert.True(baseSplitContainer.Panel1Collapsed);
197                 Assert.False(baseSplitContainer.Panel2Collapsed);
198             }
199         }
200
201         [Fact]
202         public void IsPanelInvertedSetter_Panel2CollapsedTest()
203         {
204             using (var splitContainer = new OTSplitContainer())
205             {
206                 splitContainer.Panel2Collapsed = true;
207
208                 var baseSplitContainer = (SplitContainer)splitContainer;
209
210                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
211                 Assert.False(baseSplitContainer.Panel1Collapsed);
212                 Assert.True(baseSplitContainer.Panel2Collapsed);
213
214                 // 上下パネルを反転する
215                 splitContainer.IsPanelInverted = true;
216                 Assert.True(baseSplitContainer.Panel1Collapsed);
217                 Assert.False(baseSplitContainer.Panel2Collapsed);
218
219                 // 元に戻す
220                 splitContainer.IsPanelInverted = false;
221                 Assert.False(baseSplitContainer.Panel1Collapsed);
222                 Assert.True(baseSplitContainer.Panel2Collapsed);
223             }
224         }
225
226         [Fact]
227         public void IsPanelInvertedSetter_SplitterDistanceHorizontalTest()
228         {
229             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
230             {
231                 splitContainer.Orientation = Orientation.Horizontal; // 上下に分割された状態
232                 splitContainer.SplitterWidth = 5; // 分割線の幅は 5px
233                 splitContainer.SplitterDistance = 500; // 上から 500px で分割 (下から 300px - 5px)
234
235                 var baseSplitContainer = (SplitContainer)splitContainer;
236
237                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
238                 Assert.Equal(500, baseSplitContainer.SplitterDistance);
239
240                 // 上下パネルを反転する
241                 splitContainer.IsPanelInverted = true;
242                 Assert.Equal(95, baseSplitContainer.SplitterDistance); // 上から 100px - 5px (下から 500px)
243
244                 // 元に戻す
245                 splitContainer.IsPanelInverted = false;
246                 Assert.Equal(500, baseSplitContainer.SplitterDistance);
247             }
248         }
249
250         [Fact]
251         public void IsPanelInvertedSetter_SplitterDistanceVerticalTest()
252         {
253             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
254             {
255                 splitContainer.Orientation = Orientation.Vertical; // 左右に分割された状態
256                 splitContainer.SplitterWidth = 5; // 分割線の幅は 5px
257                 splitContainer.SplitterDistance = 500; // 左から 500px で分割 (右から 300px - 5px)
258
259                 var baseSplitContainer = (SplitContainer)splitContainer;
260
261                 // 反転前の状態 (通常の SplitContainer と同じ挙動)
262                 Assert.Equal(500, baseSplitContainer.SplitterDistance);
263
264                 // 左右パネルを反転する
265                 splitContainer.IsPanelInverted = true;
266                 Assert.Equal(295, baseSplitContainer.SplitterDistance); // 左から 300px - 5px (右から 500px)
267
268                 // 元に戻す
269                 splitContainer.IsPanelInverted = false;
270                 Assert.Equal(500, baseSplitContainer.SplitterDistance);
271             }
272         }
273
274         [Fact]
275         public void PanelGetter_InvertedTest()
276         {
277             using (var splitContainer = new OTSplitContainer())
278             {
279                 var panel1 = splitContainer.Panel1;
280                 var panel2 = splitContainer.Panel2;
281
282                 splitContainer.IsPanelInverted = true;
283
284                 Assert.Same(panel2, splitContainer.Panel1);
285                 Assert.Same(panel1, splitContainer.Panel2);
286             }
287         }
288
289         [Theory]
290         [InlineData(FixedPanel.None)]
291         [InlineData(FixedPanel.Panel1)]
292         [InlineData(FixedPanel.Panel2)]
293         public void FixedPanelGetter_InvertedTest(FixedPanel fixedPanel)
294         {
295             using (var splitContainer = new OTSplitContainer())
296             {
297                 splitContainer.FixedPanel = fixedPanel;
298
299                 Assert.Equal(fixedPanel, splitContainer.FixedPanel);
300
301                 // 反転した状態でも OTSplitterContainer.FixedPanel の値は外見上変化しない
302                 splitContainer.IsPanelInverted = true;
303                 Assert.Equal(fixedPanel, splitContainer.FixedPanel);
304             }
305         }
306
307         [Theory]
308         [InlineData(FixedPanel.None, FixedPanel.None)]
309         [InlineData(FixedPanel.Panel1, FixedPanel.Panel2)]
310         [InlineData(FixedPanel.Panel2, FixedPanel.Panel1)]
311         public void FixedPanelSetter_InvertedTest(FixedPanel inputValue, FixedPanel internalValue)
312         {
313             using (var splitContainer = new OTSplitContainer())
314             {
315                 splitContainer.IsPanelInverted = true;
316
317                 // 反転中に FixedPanel を変更する
318                 splitContainer.FixedPanel = inputValue;
319                 Assert.Equal(internalValue, ((SplitContainer)splitContainer).FixedPanel);
320             }
321         }
322
323         [Fact]
324         public void SplitterDistanceGetter_InvertedVerticalTest()
325         {
326             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
327             {
328                 splitContainer.Orientation = Orientation.Vertical;
329                 splitContainer.SplitterWidth = 5;
330                 splitContainer.SplitterDistance = 500;
331
332                 // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Width が一致しているかをテスト
333                 Assert.Equal(500, splitContainer.SplitterDistance);
334                 Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance);
335
336                 // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない
337                 splitContainer.IsPanelInverted = true;
338                 Assert.Equal(500, splitContainer.SplitterDistance);
339                 Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance);
340             }
341         }
342
343         [Fact]
344         public void SplitterDistanceGetter_InvertedHorizontalTest()
345         {
346             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
347             {
348                 splitContainer.Orientation = Orientation.Horizontal;
349                 splitContainer.SplitterWidth = 5;
350                 splitContainer.SplitterDistance = 500;
351
352                 // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Height が一致しているかをテスト
353                 Assert.Equal(500, splitContainer.SplitterDistance);
354                 Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance);
355
356                 // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない
357                 splitContainer.IsPanelInverted = true;
358                 Assert.Equal(500, splitContainer.SplitterDistance);
359                 Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance);
360             }
361         }
362
363         [Fact]
364         public void SplitterDistanceSetter_InvertedVerticalTest()
365         {
366             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
367             {
368                 splitContainer.Orientation = Orientation.Vertical;
369                 splitContainer.SplitterWidth = 5;
370
371                 splitContainer.IsPanelInverted = true;
372
373                 // 反転中に SplitterDistance を変更する
374                 splitContainer.SplitterDistance = 500;
375                 Assert.Equal(295, ((SplitContainer)splitContainer).SplitterDistance);
376                 Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Width);
377             }
378         }
379
380         [Fact]
381         public void SplitterDistanceSetter_InvertedHorizontalTest()
382         {
383             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
384             {
385                 splitContainer.Orientation = Orientation.Horizontal;
386                 splitContainer.SplitterWidth = 5;
387
388                 splitContainer.IsPanelInverted = true;
389
390                 // 反転中に SplitterDistance を変更する
391                 splitContainer.SplitterDistance = 500;
392                 Assert.Equal(95, ((SplitContainer)splitContainer).SplitterDistance);
393                 Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Height);
394             }
395         }
396
397         [Fact]
398         public void PanelMinSizeGetter_InvertedTest()
399         {
400             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
401             {
402                 splitContainer.Panel1MinSize = 200;
403                 splitContainer.Panel2MinSize = 300;
404
405                 Assert.Equal(200, splitContainer.Panel1MinSize);
406                 Assert.Equal(300, splitContainer.Panel2MinSize);
407
408                 // 反転した状態でも OTSplitterContainer.Panel1MinSize, Panel2MinSize の値は外見上変化しない
409                 splitContainer.IsPanelInverted = true;
410                 Assert.Equal(200, splitContainer.Panel1MinSize);
411                 Assert.Equal(300, splitContainer.Panel2MinSize);
412             }
413         }
414
415         [Fact]
416         public void PanelMinSizeSetter_InvertedTest()
417         {
418             using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
419             {
420                 splitContainer.IsPanelInverted = true;
421
422                 // 反転中に Panel1MinSize, Panel2MinSize を変更する
423                 splitContainer.Panel1MinSize = 200;
424                 splitContainer.Panel2MinSize = 300;
425                 Assert.Equal(300, ((SplitContainer)splitContainer).Panel1MinSize);
426                 Assert.Equal(200, ((SplitContainer)splitContainer).Panel2MinSize);
427             }
428         }
429
430         [Fact]
431         public void Panel1CollapsedGetter_InvertedTest()
432         {
433             using (var splitContainer = new OTSplitContainer())
434             {
435                 splitContainer.Panel1Collapsed = true;
436
437                 Assert.True(splitContainer.Panel1Collapsed);
438
439                 // 反転した状態でも OTSplitterContainer.Panel1Collapsed の値は外見上変化しない
440                 splitContainer.IsPanelInverted = true;
441                 Assert.True(splitContainer.Panel1Collapsed);
442             }
443         }
444
445         [Fact]
446         public void Panel1CollapsedSetter_InvertedTest()
447         {
448             using (var splitContainer = new OTSplitContainer())
449             {
450                 splitContainer.IsPanelInverted = true;
451
452                 // 反転中に Panel1Collapsed を変更する
453                 splitContainer.Panel1Collapsed = true;
454                 Assert.False(((SplitContainer)splitContainer).Panel1Collapsed);
455                 Assert.True(((SplitContainer)splitContainer).Panel2Collapsed);
456             }
457         }
458
459         [Fact]
460         public void Panel2CollapsedGetter_InvertedTest()
461         {
462             using (var splitContainer = new OTSplitContainer())
463             {
464                 splitContainer.Panel2Collapsed = true;
465
466                 Assert.True(splitContainer.Panel2Collapsed);
467
468                 // 反転した状態でも OTSplitterContainer.Panel2Collapsed の値は外見上変化しない
469                 splitContainer.IsPanelInverted = true;
470                 Assert.True(splitContainer.Panel2Collapsed);
471             }
472         }
473
474         [Fact]
475         public void Panel2CollapsedSetter_InvertedTest()
476         {
477             using (var splitContainer = new OTSplitContainer())
478             {
479                 splitContainer.IsPanelInverted = true;
480
481                 // 反転中に Panel2Collapsed を変更する
482                 splitContainer.Panel2Collapsed = true;
483                 Assert.True(((SplitContainer)splitContainer).Panel1Collapsed);
484                 Assert.False(((SplitContainer)splitContainer).Panel2Collapsed);
485             }
486         }
487     }
488 }