1 // OpenTween - Client of Twitter
2 // Copyright (c) 2014 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
3 // All rights reserved.
5 // This file is part of OpenTween.
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)
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
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.
23 using System.Collections.Generic;
26 using System.Threading.Tasks;
27 using System.Windows.Forms;
29 using Xunit.Extensions;
33 public class OTSplitContainerTest
36 public void IsPanelInvertedGetter_Test()
38 using (var splitContainer = new OTSplitContainer())
40 Assert.False(splitContainer.IsPanelInverted); // デフォルト値
42 splitContainer.IsPanelInverted = true;
43 Assert.True(splitContainer.IsPanelInverted);
45 splitContainer.IsPanelInverted = false;
46 Assert.False(splitContainer.IsPanelInverted);
51 public void IsPanelInvertedSetter_InnerControlsTest()
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())
59 splitContainer.Panel1.Controls.AddRange(new[] { buttonA, buttonB });
60 splitContainer.Panel2.Controls.AddRange(new[] { buttonC, buttonD });
62 var baseSplitContainer = (SplitContainer)splitContainer;
64 // 反転前の状態 (通常の SplitContainer と同じ挙動)
65 Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel1.Controls.Cast<Control>());
66 Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel2.Controls.Cast<Control>());
69 splitContainer.IsPanelInverted = true;
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>());
76 splitContainer.IsPanelInverted = false;
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>());
85 public void IsPanelInvertedSetter_Panel1FixedTest()
87 using (var splitContainer = new OTSplitContainer())
89 splitContainer.FixedPanel = FixedPanel.Panel1;
91 var baseSplitContainer = (SplitContainer)splitContainer;
93 // 反転前の状態 (通常の SplitContainer と同じ挙動)
94 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
97 splitContainer.IsPanelInverted = true;
98 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
101 splitContainer.IsPanelInverted = false;
102 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
107 public void IsPanelInvertedSetter_Panel2FixedTest()
109 using (var splitContainer = new OTSplitContainer())
111 splitContainer.FixedPanel = FixedPanel.Panel2;
113 var baseSplitContainer = (SplitContainer)splitContainer;
115 // 反転前の状態 (通常の SplitContainer と同じ挙動)
116 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
119 splitContainer.IsPanelInverted = true;
120 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
123 splitContainer.IsPanelInverted = false;
124 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
129 public void IsPanelInvertedSetter_NoneFixedTest()
131 using (var splitContainer = new OTSplitContainer())
133 splitContainer.FixedPanel = FixedPanel.None;
135 var baseSplitContainer = (SplitContainer)splitContainer;
137 // 反転前の状態 (通常の SplitContainer と同じ挙動)
138 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
141 splitContainer.IsPanelInverted = true;
142 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
145 splitContainer.IsPanelInverted = false;
146 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
151 public void IsPanelInvertedSetter_PanelMinSizeTest()
153 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
155 splitContainer.Panel1MinSize = 200;
156 splitContainer.Panel2MinSize = 300;
158 var baseSplitContainer = (SplitContainer)splitContainer;
160 // 反転前の状態 (通常の SplitContainer と同じ挙動)
161 Assert.Equal(200, baseSplitContainer.Panel1MinSize);
162 Assert.Equal(300, baseSplitContainer.Panel2MinSize);
165 splitContainer.IsPanelInverted = true;
166 Assert.Equal(300, baseSplitContainer.Panel1MinSize);
167 Assert.Equal(200, baseSplitContainer.Panel2MinSize);
170 splitContainer.IsPanelInverted = false;
171 Assert.Equal(200, baseSplitContainer.Panel1MinSize);
172 Assert.Equal(300, baseSplitContainer.Panel2MinSize);
177 public void IsPanelInvertedSetter_Panel1CollapsedTest()
179 using (var splitContainer = new OTSplitContainer())
181 splitContainer.Panel1Collapsed = true;
183 var baseSplitContainer = (SplitContainer)splitContainer;
185 // 反転前の状態 (通常の SplitContainer と同じ挙動)
186 Assert.True(baseSplitContainer.Panel1Collapsed);
187 Assert.False(baseSplitContainer.Panel2Collapsed);
190 splitContainer.IsPanelInverted = true;
191 Assert.False(baseSplitContainer.Panel1Collapsed);
192 Assert.True(baseSplitContainer.Panel2Collapsed);
195 splitContainer.IsPanelInverted = false;
196 Assert.True(baseSplitContainer.Panel1Collapsed);
197 Assert.False(baseSplitContainer.Panel2Collapsed);
202 public void IsPanelInvertedSetter_Panel2CollapsedTest()
204 using (var splitContainer = new OTSplitContainer())
206 splitContainer.Panel2Collapsed = true;
208 var baseSplitContainer = (SplitContainer)splitContainer;
210 // 反転前の状態 (通常の SplitContainer と同じ挙動)
211 Assert.False(baseSplitContainer.Panel1Collapsed);
212 Assert.True(baseSplitContainer.Panel2Collapsed);
215 splitContainer.IsPanelInverted = true;
216 Assert.True(baseSplitContainer.Panel1Collapsed);
217 Assert.False(baseSplitContainer.Panel2Collapsed);
220 splitContainer.IsPanelInverted = false;
221 Assert.False(baseSplitContainer.Panel1Collapsed);
222 Assert.True(baseSplitContainer.Panel2Collapsed);
227 public void IsPanelInvertedSetter_SplitterDistanceHorizontalTest()
229 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
231 splitContainer.Orientation = Orientation.Horizontal; // 上下に分割された状態
232 splitContainer.SplitterWidth = 5; // 分割線の幅は 5px
233 splitContainer.SplitterDistance = 500; // 上から 500px で分割 (下から 300px - 5px)
235 var baseSplitContainer = (SplitContainer)splitContainer;
237 // 反転前の状態 (通常の SplitContainer と同じ挙動)
238 Assert.Equal(500, baseSplitContainer.SplitterDistance);
241 splitContainer.IsPanelInverted = true;
242 Assert.Equal(95, baseSplitContainer.SplitterDistance); // 上から 100px - 5px (下から 500px)
245 splitContainer.IsPanelInverted = false;
246 Assert.Equal(500, baseSplitContainer.SplitterDistance);
251 public void IsPanelInvertedSetter_SplitterDistanceVerticalTest()
253 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
255 splitContainer.Orientation = Orientation.Vertical; // 左右に分割された状態
256 splitContainer.SplitterWidth = 5; // 分割線の幅は 5px
257 splitContainer.SplitterDistance = 500; // 左から 500px で分割 (右から 300px - 5px)
259 var baseSplitContainer = (SplitContainer)splitContainer;
261 // 反転前の状態 (通常の SplitContainer と同じ挙動)
262 Assert.Equal(500, baseSplitContainer.SplitterDistance);
265 splitContainer.IsPanelInverted = true;
266 Assert.Equal(295, baseSplitContainer.SplitterDistance); // 左から 300px - 5px (右から 500px)
269 splitContainer.IsPanelInverted = false;
270 Assert.Equal(500, baseSplitContainer.SplitterDistance);
275 public void PanelGetter_InvertedTest()
277 using (var splitContainer = new OTSplitContainer())
279 var panel1 = splitContainer.Panel1;
280 var panel2 = splitContainer.Panel2;
282 splitContainer.IsPanelInverted = true;
284 Assert.Same(panel2, splitContainer.Panel1);
285 Assert.Same(panel1, splitContainer.Panel2);
290 [InlineData(FixedPanel.None)]
291 [InlineData(FixedPanel.Panel1)]
292 [InlineData(FixedPanel.Panel2)]
293 public void FixedPanelGetter_InvertedTest(FixedPanel fixedPanel)
295 using (var splitContainer = new OTSplitContainer())
297 splitContainer.FixedPanel = fixedPanel;
299 Assert.Equal(fixedPanel, splitContainer.FixedPanel);
301 // 反転した状態でも OTSplitterContainer.FixedPanel の値は外見上変化しない
302 splitContainer.IsPanelInverted = true;
303 Assert.Equal(fixedPanel, splitContainer.FixedPanel);
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)
313 using (var splitContainer = new OTSplitContainer())
315 splitContainer.IsPanelInverted = true;
317 // 反転中に FixedPanel を変更する
318 splitContainer.FixedPanel = inputValue;
319 Assert.Equal(internalValue, ((SplitContainer)splitContainer).FixedPanel);
324 public void SplitterDistanceGetter_InvertedVerticalTest()
326 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
328 splitContainer.Orientation = Orientation.Vertical;
329 splitContainer.SplitterWidth = 5;
330 splitContainer.SplitterDistance = 500;
332 // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Width が一致しているかをテスト
333 Assert.Equal(500, splitContainer.SplitterDistance);
334 Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance);
336 // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない
337 splitContainer.IsPanelInverted = true;
338 Assert.Equal(500, splitContainer.SplitterDistance);
339 Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance);
344 public void SplitterDistanceGetter_InvertedHorizontalTest()
346 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
348 splitContainer.Orientation = Orientation.Horizontal;
349 splitContainer.SplitterWidth = 5;
350 splitContainer.SplitterDistance = 500;
352 // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Height が一致しているかをテスト
353 Assert.Equal(500, splitContainer.SplitterDistance);
354 Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance);
356 // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない
357 splitContainer.IsPanelInverted = true;
358 Assert.Equal(500, splitContainer.SplitterDistance);
359 Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance);
364 public void SplitterDistanceSetter_InvertedVerticalTest()
366 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
368 splitContainer.Orientation = Orientation.Vertical;
369 splitContainer.SplitterWidth = 5;
371 splitContainer.IsPanelInverted = true;
373 // 反転中に SplitterDistance を変更する
374 splitContainer.SplitterDistance = 500;
375 Assert.Equal(295, ((SplitContainer)splitContainer).SplitterDistance);
376 Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Width);
381 public void SplitterDistanceSetter_InvertedHorizontalTest()
383 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
385 splitContainer.Orientation = Orientation.Horizontal;
386 splitContainer.SplitterWidth = 5;
388 splitContainer.IsPanelInverted = true;
390 // 反転中に SplitterDistance を変更する
391 splitContainer.SplitterDistance = 500;
392 Assert.Equal(95, ((SplitContainer)splitContainer).SplitterDistance);
393 Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Height);
398 public void PanelMinSizeGetter_InvertedTest()
400 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
402 splitContainer.Panel1MinSize = 200;
403 splitContainer.Panel2MinSize = 300;
405 Assert.Equal(200, splitContainer.Panel1MinSize);
406 Assert.Equal(300, splitContainer.Panel2MinSize);
408 // 反転した状態でも OTSplitterContainer.Panel1MinSize, Panel2MinSize の値は外見上変化しない
409 splitContainer.IsPanelInverted = true;
410 Assert.Equal(200, splitContainer.Panel1MinSize);
411 Assert.Equal(300, splitContainer.Panel2MinSize);
416 public void PanelMinSizeSetter_InvertedTest()
418 using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 })
420 splitContainer.IsPanelInverted = true;
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);
431 public void Panel1CollapsedGetter_InvertedTest()
433 using (var splitContainer = new OTSplitContainer())
435 splitContainer.Panel1Collapsed = true;
437 Assert.True(splitContainer.Panel1Collapsed);
439 // 反転した状態でも OTSplitterContainer.Panel1Collapsed の値は外見上変化しない
440 splitContainer.IsPanelInverted = true;
441 Assert.True(splitContainer.Panel1Collapsed);
446 public void Panel1CollapsedSetter_InvertedTest()
448 using (var splitContainer = new OTSplitContainer())
450 splitContainer.IsPanelInverted = true;
452 // 反転中に Panel1Collapsed を変更する
453 splitContainer.Panel1Collapsed = true;
454 Assert.False(((SplitContainer)splitContainer).Panel1Collapsed);
455 Assert.True(((SplitContainer)splitContainer).Panel2Collapsed);
460 public void Panel2CollapsedGetter_InvertedTest()
462 using (var splitContainer = new OTSplitContainer())
464 splitContainer.Panel2Collapsed = true;
466 Assert.True(splitContainer.Panel2Collapsed);
468 // 反転した状態でも OTSplitterContainer.Panel2Collapsed の値は外見上変化しない
469 splitContainer.IsPanelInverted = true;
470 Assert.True(splitContainer.Panel2Collapsed);
475 public void Panel2CollapsedSetter_InvertedTest()
477 using (var splitContainer = new OTSplitContainer())
479 splitContainer.IsPanelInverted = true;
481 // 反転中に Panel2Collapsed を変更する
482 splitContainer.Panel2Collapsed = true;
483 Assert.True(((SplitContainer)splitContainer).Panel1Collapsed);
484 Assert.False(((SplitContainer)splitContainer).Panel2Collapsed);