OSDN Git Service

PostClassインスタンスの生成処理をTwitterPostFactoryクラスに分離
[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             Assert.False(splitContainer.IsPanelInverted); // デフォルト値
40
41             splitContainer.IsPanelInverted = true;
42             Assert.True(splitContainer.IsPanelInverted);
43
44             splitContainer.IsPanelInverted = false;
45             Assert.False(splitContainer.IsPanelInverted);
46         }
47
48         [Fact]
49         public void IsPanelInvertedSetter_InnerControlsTest()
50         {
51             using var splitContainer = new OTSplitContainer();
52             using var buttonA = new Button();
53             using var buttonB = new Button();
54             using var buttonC = new Button();
55             using var buttonD = new Button();
56
57             splitContainer.Panel1.Controls.AddRange(new[] { buttonA, buttonB });
58             splitContainer.Panel2.Controls.AddRange(new[] { buttonC, buttonD });
59
60             var baseSplitContainer = (SplitContainer)splitContainer;
61
62             // 反転前の状態 (通常の SplitContainer と同じ挙動)
63             Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel1.Controls.Cast<Control>());
64             Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel2.Controls.Cast<Control>());
65
66             // 上下パネルを反転する
67             splitContainer.IsPanelInverted = true;
68
69             // Panel1, Panel2 内のコントロールが入れ替わる
70             Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel1.Controls.Cast<Control>());
71             Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel2.Controls.Cast<Control>());
72
73             // 元に戻す
74             splitContainer.IsPanelInverted = false;
75
76             // Panel1, Panel2 内のコントロールも元に戻る
77             Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel1.Controls.Cast<Control>());
78             Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel2.Controls.Cast<Control>());
79         }
80
81         [Fact]
82         public void IsPanelInvertedSetter_Panel1FixedTest()
83         {
84             using var splitContainer = new OTSplitContainer();
85             splitContainer.FixedPanel = FixedPanel.Panel1;
86
87             var baseSplitContainer = (SplitContainer)splitContainer;
88
89             // 反転前の状態 (通常の SplitContainer と同じ挙動)
90             Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
91
92             // 上下パネルを反転する
93             splitContainer.IsPanelInverted = true;
94             Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
95
96             // 元に戻す
97             splitContainer.IsPanelInverted = false;
98             Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
99         }
100
101         [Fact]
102         public void IsPanelInvertedSetter_Panel2FixedTest()
103         {
104             using var splitContainer = new OTSplitContainer();
105             splitContainer.FixedPanel = FixedPanel.Panel2;
106
107             var baseSplitContainer = (SplitContainer)splitContainer;
108
109             // 反転前の状態 (通常の SplitContainer と同じ挙動)
110             Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
111
112             // 上下パネルを反転する
113             splitContainer.IsPanelInverted = true;
114             Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
115
116             // 元に戻す
117             splitContainer.IsPanelInverted = false;
118             Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
119         }
120
121         [Fact]
122         public void IsPanelInvertedSetter_NoneFixedTest()
123         {
124             using var splitContainer = new OTSplitContainer();
125             splitContainer.FixedPanel = FixedPanel.None;
126
127             var baseSplitContainer = (SplitContainer)splitContainer;
128
129             // 反転前の状態 (通常の SplitContainer と同じ挙動)
130             Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
131
132             // 上下パネルを反転する
133             splitContainer.IsPanelInverted = true;
134             Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
135
136             // 元に戻す
137             splitContainer.IsPanelInverted = false;
138             Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
139         }
140
141         [Fact]
142         public void IsPanelInvertedSetter_PanelMinSizeTest()
143         {
144             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
145             splitContainer.Panel1MinSize = 200;
146             splitContainer.Panel2MinSize = 300;
147
148             var baseSplitContainer = (SplitContainer)splitContainer;
149
150             // 反転前の状態 (通常の SplitContainer と同じ挙動)
151             Assert.Equal(200, baseSplitContainer.Panel1MinSize);
152             Assert.Equal(300, baseSplitContainer.Panel2MinSize);
153
154             // 上下パネルを反転する
155             splitContainer.IsPanelInverted = true;
156             Assert.Equal(300, baseSplitContainer.Panel1MinSize);
157             Assert.Equal(200, baseSplitContainer.Panel2MinSize);
158
159             // 元に戻す
160             splitContainer.IsPanelInverted = false;
161             Assert.Equal(200, baseSplitContainer.Panel1MinSize);
162             Assert.Equal(300, baseSplitContainer.Panel2MinSize);
163         }
164
165         [Fact]
166         public void IsPanelInvertedSetter_Panel1CollapsedTest()
167         {
168             using var splitContainer = new OTSplitContainer();
169             splitContainer.Panel1Collapsed = true;
170
171             var baseSplitContainer = (SplitContainer)splitContainer;
172
173             // 反転前の状態 (通常の SplitContainer と同じ挙動)
174             Assert.True(baseSplitContainer.Panel1Collapsed);
175             Assert.False(baseSplitContainer.Panel2Collapsed);
176
177             // 上下パネルを反転する
178             splitContainer.IsPanelInverted = true;
179             Assert.False(baseSplitContainer.Panel1Collapsed);
180             Assert.True(baseSplitContainer.Panel2Collapsed);
181
182             // 元に戻す
183             splitContainer.IsPanelInverted = false;
184             Assert.True(baseSplitContainer.Panel1Collapsed);
185             Assert.False(baseSplitContainer.Panel2Collapsed);
186         }
187
188         [Fact]
189         public void IsPanelInvertedSetter_Panel2CollapsedTest()
190         {
191             using var splitContainer = new OTSplitContainer();
192             splitContainer.Panel2Collapsed = true;
193
194             var baseSplitContainer = (SplitContainer)splitContainer;
195
196             // 反転前の状態 (通常の SplitContainer と同じ挙動)
197             Assert.False(baseSplitContainer.Panel1Collapsed);
198             Assert.True(baseSplitContainer.Panel2Collapsed);
199
200             // 上下パネルを反転する
201             splitContainer.IsPanelInverted = true;
202             Assert.True(baseSplitContainer.Panel1Collapsed);
203             Assert.False(baseSplitContainer.Panel2Collapsed);
204
205             // 元に戻す
206             splitContainer.IsPanelInverted = false;
207             Assert.False(baseSplitContainer.Panel1Collapsed);
208             Assert.True(baseSplitContainer.Panel2Collapsed);
209         }
210
211         [Fact]
212         public void IsPanelInvertedSetter_SplitterDistanceHorizontalTest()
213         {
214             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
215             splitContainer.Orientation = Orientation.Horizontal; // 上下に分割された状態
216             splitContainer.SplitterWidth = 5; // 分割線の幅は 5px
217             splitContainer.SplitterDistance = 500; // 上から 500px で分割 (下から 300px - 5px)
218
219             var baseSplitContainer = (SplitContainer)splitContainer;
220
221             // 反転前の状態 (通常の SplitContainer と同じ挙動)
222             Assert.Equal(500, baseSplitContainer.SplitterDistance);
223
224             // 上下パネルを反転する
225             splitContainer.IsPanelInverted = true;
226             Assert.Equal(95, baseSplitContainer.SplitterDistance); // 上から 100px - 5px (下から 500px)
227
228             // 元に戻す
229             splitContainer.IsPanelInverted = false;
230             Assert.Equal(500, baseSplitContainer.SplitterDistance);
231         }
232
233         [Fact]
234         public void IsPanelInvertedSetter_SplitterDistanceVerticalTest()
235         {
236             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
237             splitContainer.Orientation = Orientation.Vertical; // 左右に分割された状態
238             splitContainer.SplitterWidth = 5; // 分割線の幅は 5px
239             splitContainer.SplitterDistance = 500; // 左から 500px で分割 (右から 300px - 5px)
240
241             var baseSplitContainer = (SplitContainer)splitContainer;
242
243             // 反転前の状態 (通常の SplitContainer と同じ挙動)
244             Assert.Equal(500, baseSplitContainer.SplitterDistance);
245
246             // 左右パネルを反転する
247             splitContainer.IsPanelInverted = true;
248             Assert.Equal(295, baseSplitContainer.SplitterDistance); // 左から 300px - 5px (右から 500px)
249
250             // 元に戻す
251             splitContainer.IsPanelInverted = false;
252             Assert.Equal(500, baseSplitContainer.SplitterDistance);
253         }
254
255         [Fact]
256         public void PanelGetter_InvertedTest()
257         {
258             using var splitContainer = new OTSplitContainer();
259             var panel1 = splitContainer.Panel1;
260             var panel2 = splitContainer.Panel2;
261
262             splitContainer.IsPanelInverted = true;
263
264             Assert.Same(panel2, splitContainer.Panel1);
265             Assert.Same(panel1, splitContainer.Panel2);
266         }
267
268         [Theory]
269         [InlineData(FixedPanel.None)]
270         [InlineData(FixedPanel.Panel1)]
271         [InlineData(FixedPanel.Panel2)]
272         public void FixedPanelGetter_InvertedTest(FixedPanel fixedPanel)
273         {
274             using var splitContainer = new OTSplitContainer();
275             splitContainer.FixedPanel = fixedPanel;
276
277             Assert.Equal(fixedPanel, splitContainer.FixedPanel);
278
279             // 反転した状態でも OTSplitterContainer.FixedPanel の値は外見上変化しない
280             splitContainer.IsPanelInverted = true;
281             Assert.Equal(fixedPanel, splitContainer.FixedPanel);
282         }
283
284         [Theory]
285         [InlineData(FixedPanel.None, FixedPanel.None)]
286         [InlineData(FixedPanel.Panel1, FixedPanel.Panel2)]
287         [InlineData(FixedPanel.Panel2, FixedPanel.Panel1)]
288         public void FixedPanelSetter_InvertedTest(FixedPanel inputValue, FixedPanel internalValue)
289         {
290             using var splitContainer = new OTSplitContainer();
291             splitContainer.IsPanelInverted = true;
292
293             // 反転中に FixedPanel を変更する
294             splitContainer.FixedPanel = inputValue;
295             Assert.Equal(internalValue, ((SplitContainer)splitContainer).FixedPanel);
296         }
297
298         [Fact]
299         public void SplitterDistanceGetter_InvertedVerticalTest()
300         {
301             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
302             splitContainer.Orientation = Orientation.Vertical;
303             splitContainer.SplitterWidth = 5;
304             splitContainer.SplitterDistance = 500;
305
306             // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Width が一致しているかをテスト
307             Assert.Equal(500, splitContainer.SplitterDistance);
308             Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance);
309
310             // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない
311             splitContainer.IsPanelInverted = true;
312             Assert.Equal(500, splitContainer.SplitterDistance);
313             Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance);
314         }
315
316         [Fact]
317         public void SplitterDistanceGetter_InvertedHorizontalTest()
318         {
319             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
320             splitContainer.Orientation = Orientation.Horizontal;
321             splitContainer.SplitterWidth = 5;
322             splitContainer.SplitterDistance = 500;
323
324             // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Height が一致しているかをテスト
325             Assert.Equal(500, splitContainer.SplitterDistance);
326             Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance);
327
328             // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない
329             splitContainer.IsPanelInverted = true;
330             Assert.Equal(500, splitContainer.SplitterDistance);
331             Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance);
332         }
333
334         [Fact]
335         public void SplitterDistanceSetter_InvertedVerticalTest()
336         {
337             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
338             splitContainer.Orientation = Orientation.Vertical;
339             splitContainer.SplitterWidth = 5;
340
341             splitContainer.IsPanelInverted = true;
342
343             // 反転中に SplitterDistance を変更する
344             splitContainer.SplitterDistance = 500;
345             Assert.Equal(295, ((SplitContainer)splitContainer).SplitterDistance);
346             Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Width);
347         }
348
349         [Fact]
350         public void SplitterDistanceSetter_InvertedHorizontalTest()
351         {
352             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
353             splitContainer.Orientation = Orientation.Horizontal;
354             splitContainer.SplitterWidth = 5;
355
356             splitContainer.IsPanelInverted = true;
357
358             // 反転中に SplitterDistance を変更する
359             splitContainer.SplitterDistance = 500;
360             Assert.Equal(95, ((SplitContainer)splitContainer).SplitterDistance);
361             Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Height);
362         }
363
364         [Fact]
365         public void PanelMinSizeGetter_InvertedTest()
366         {
367             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
368             splitContainer.Panel1MinSize = 200;
369             splitContainer.Panel2MinSize = 300;
370
371             Assert.Equal(200, splitContainer.Panel1MinSize);
372             Assert.Equal(300, splitContainer.Panel2MinSize);
373
374             // 反転した状態でも OTSplitterContainer.Panel1MinSize, Panel2MinSize の値は外見上変化しない
375             splitContainer.IsPanelInverted = true;
376             Assert.Equal(200, splitContainer.Panel1MinSize);
377             Assert.Equal(300, splitContainer.Panel2MinSize);
378         }
379
380         [Fact]
381         public void PanelMinSizeSetter_InvertedTest()
382         {
383             using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
384             splitContainer.IsPanelInverted = true;
385
386             // 反転中に Panel1MinSize, Panel2MinSize を変更する
387             splitContainer.Panel1MinSize = 200;
388             splitContainer.Panel2MinSize = 300;
389             Assert.Equal(300, ((SplitContainer)splitContainer).Panel1MinSize);
390             Assert.Equal(200, ((SplitContainer)splitContainer).Panel2MinSize);
391         }
392
393         [Fact]
394         public void Panel1CollapsedGetter_InvertedTest()
395         {
396             using var splitContainer = new OTSplitContainer();
397             splitContainer.Panel1Collapsed = true;
398
399             Assert.True(splitContainer.Panel1Collapsed);
400
401             // 反転した状態でも OTSplitterContainer.Panel1Collapsed の値は外見上変化しない
402             splitContainer.IsPanelInverted = true;
403             Assert.True(splitContainer.Panel1Collapsed);
404         }
405
406         [Fact]
407         public void Panel1CollapsedSetter_InvertedTest()
408         {
409             using var splitContainer = new OTSplitContainer();
410             splitContainer.IsPanelInverted = true;
411
412             // 反転中に Panel1Collapsed を変更する
413             splitContainer.Panel1Collapsed = true;
414             Assert.False(((SplitContainer)splitContainer).Panel1Collapsed);
415             Assert.True(((SplitContainer)splitContainer).Panel2Collapsed);
416         }
417
418         [Fact]
419         public void Panel2CollapsedGetter_InvertedTest()
420         {
421             using var splitContainer = new OTSplitContainer();
422             splitContainer.Panel2Collapsed = true;
423
424             Assert.True(splitContainer.Panel2Collapsed);
425
426             // 反転した状態でも OTSplitterContainer.Panel2Collapsed の値は外見上変化しない
427             splitContainer.IsPanelInverted = true;
428             Assert.True(splitContainer.Panel2Collapsed);
429         }
430
431         [Fact]
432         public void Panel2CollapsedSetter_InvertedTest()
433         {
434             using var splitContainer = new OTSplitContainer();
435             splitContainer.IsPanelInverted = true;
436
437             // 反転中に Panel2Collapsed を変更する
438             splitContainer.Panel2Collapsed = true;
439             Assert.True(((SplitContainer)splitContainer).Panel1Collapsed);
440             Assert.False(((SplitContainer)splitContainer).Panel2Collapsed);
441         }
442     }
443 }