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();
39 Assert.False(splitContainer.IsPanelInverted); // デフォルト値
41 splitContainer.IsPanelInverted = true;
42 Assert.True(splitContainer.IsPanelInverted);
44 splitContainer.IsPanelInverted = false;
45 Assert.False(splitContainer.IsPanelInverted);
49 public void IsPanelInvertedSetter_InnerControlsTest()
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();
57 splitContainer.Panel1.Controls.AddRange(new[] { buttonA, buttonB });
58 splitContainer.Panel2.Controls.AddRange(new[] { buttonC, buttonD });
60 var baseSplitContainer = (SplitContainer)splitContainer;
62 // 反転前の状態 (通常の SplitContainer と同じ挙動)
63 Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel1.Controls.Cast<Control>());
64 Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel2.Controls.Cast<Control>());
67 splitContainer.IsPanelInverted = true;
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>());
74 splitContainer.IsPanelInverted = false;
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>());
82 public void IsPanelInvertedSetter_Panel1FixedTest()
84 using var splitContainer = new OTSplitContainer();
85 splitContainer.FixedPanel = FixedPanel.Panel1;
87 var baseSplitContainer = (SplitContainer)splitContainer;
89 // 反転前の状態 (通常の SplitContainer と同じ挙動)
90 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
93 splitContainer.IsPanelInverted = true;
94 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
97 splitContainer.IsPanelInverted = false;
98 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
102 public void IsPanelInvertedSetter_Panel2FixedTest()
104 using var splitContainer = new OTSplitContainer();
105 splitContainer.FixedPanel = FixedPanel.Panel2;
107 var baseSplitContainer = (SplitContainer)splitContainer;
109 // 反転前の状態 (通常の SplitContainer と同じ挙動)
110 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
113 splitContainer.IsPanelInverted = true;
114 Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel);
117 splitContainer.IsPanelInverted = false;
118 Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel);
122 public void IsPanelInvertedSetter_NoneFixedTest()
124 using var splitContainer = new OTSplitContainer();
125 splitContainer.FixedPanel = FixedPanel.None;
127 var baseSplitContainer = (SplitContainer)splitContainer;
129 // 反転前の状態 (通常の SplitContainer と同じ挙動)
130 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
133 splitContainer.IsPanelInverted = true;
134 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
137 splitContainer.IsPanelInverted = false;
138 Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel);
142 public void IsPanelInvertedSetter_PanelMinSizeTest()
144 using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
145 splitContainer.Panel1MinSize = 200;
146 splitContainer.Panel2MinSize = 300;
148 var baseSplitContainer = (SplitContainer)splitContainer;
150 // 反転前の状態 (通常の SplitContainer と同じ挙動)
151 Assert.Equal(200, baseSplitContainer.Panel1MinSize);
152 Assert.Equal(300, baseSplitContainer.Panel2MinSize);
155 splitContainer.IsPanelInverted = true;
156 Assert.Equal(300, baseSplitContainer.Panel1MinSize);
157 Assert.Equal(200, baseSplitContainer.Panel2MinSize);
160 splitContainer.IsPanelInverted = false;
161 Assert.Equal(200, baseSplitContainer.Panel1MinSize);
162 Assert.Equal(300, baseSplitContainer.Panel2MinSize);
166 public void IsPanelInvertedSetter_Panel1CollapsedTest()
168 using var splitContainer = new OTSplitContainer();
169 splitContainer.Panel1Collapsed = true;
171 var baseSplitContainer = (SplitContainer)splitContainer;
173 // 反転前の状態 (通常の SplitContainer と同じ挙動)
174 Assert.True(baseSplitContainer.Panel1Collapsed);
175 Assert.False(baseSplitContainer.Panel2Collapsed);
178 splitContainer.IsPanelInverted = true;
179 Assert.False(baseSplitContainer.Panel1Collapsed);
180 Assert.True(baseSplitContainer.Panel2Collapsed);
183 splitContainer.IsPanelInverted = false;
184 Assert.True(baseSplitContainer.Panel1Collapsed);
185 Assert.False(baseSplitContainer.Panel2Collapsed);
189 public void IsPanelInvertedSetter_Panel2CollapsedTest()
191 using var splitContainer = new OTSplitContainer();
192 splitContainer.Panel2Collapsed = true;
194 var baseSplitContainer = (SplitContainer)splitContainer;
196 // 反転前の状態 (通常の SplitContainer と同じ挙動)
197 Assert.False(baseSplitContainer.Panel1Collapsed);
198 Assert.True(baseSplitContainer.Panel2Collapsed);
201 splitContainer.IsPanelInverted = true;
202 Assert.True(baseSplitContainer.Panel1Collapsed);
203 Assert.False(baseSplitContainer.Panel2Collapsed);
206 splitContainer.IsPanelInverted = false;
207 Assert.False(baseSplitContainer.Panel1Collapsed);
208 Assert.True(baseSplitContainer.Panel2Collapsed);
212 public void IsPanelInvertedSetter_SplitterDistanceHorizontalTest()
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)
219 var baseSplitContainer = (SplitContainer)splitContainer;
221 // 反転前の状態 (通常の SplitContainer と同じ挙動)
222 Assert.Equal(500, baseSplitContainer.SplitterDistance);
225 splitContainer.IsPanelInverted = true;
226 Assert.Equal(95, baseSplitContainer.SplitterDistance); // 上から 100px - 5px (下から 500px)
229 splitContainer.IsPanelInverted = false;
230 Assert.Equal(500, baseSplitContainer.SplitterDistance);
234 public void IsPanelInvertedSetter_SplitterDistanceVerticalTest()
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)
241 var baseSplitContainer = (SplitContainer)splitContainer;
243 // 反転前の状態 (通常の SplitContainer と同じ挙動)
244 Assert.Equal(500, baseSplitContainer.SplitterDistance);
247 splitContainer.IsPanelInverted = true;
248 Assert.Equal(295, baseSplitContainer.SplitterDistance); // 左から 300px - 5px (右から 500px)
251 splitContainer.IsPanelInverted = false;
252 Assert.Equal(500, baseSplitContainer.SplitterDistance);
256 public void PanelGetter_InvertedTest()
258 using var splitContainer = new OTSplitContainer();
259 var panel1 = splitContainer.Panel1;
260 var panel2 = splitContainer.Panel2;
262 splitContainer.IsPanelInverted = true;
264 Assert.Same(panel2, splitContainer.Panel1);
265 Assert.Same(panel1, splitContainer.Panel2);
269 [InlineData(FixedPanel.None)]
270 [InlineData(FixedPanel.Panel1)]
271 [InlineData(FixedPanel.Panel2)]
272 public void FixedPanelGetter_InvertedTest(FixedPanel fixedPanel)
274 using var splitContainer = new OTSplitContainer();
275 splitContainer.FixedPanel = fixedPanel;
277 Assert.Equal(fixedPanel, splitContainer.FixedPanel);
279 // 反転した状態でも OTSplitterContainer.FixedPanel の値は外見上変化しない
280 splitContainer.IsPanelInverted = true;
281 Assert.Equal(fixedPanel, splitContainer.FixedPanel);
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)
290 using var splitContainer = new OTSplitContainer();
291 splitContainer.IsPanelInverted = true;
293 // 反転中に FixedPanel を変更する
294 splitContainer.FixedPanel = inputValue;
295 Assert.Equal(internalValue, ((SplitContainer)splitContainer).FixedPanel);
299 public void SplitterDistanceGetter_InvertedVerticalTest()
301 using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
302 splitContainer.Orientation = Orientation.Vertical;
303 splitContainer.SplitterWidth = 5;
304 splitContainer.SplitterDistance = 500;
306 // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Width が一致しているかをテスト
307 Assert.Equal(500, splitContainer.SplitterDistance);
308 Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance);
310 // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない
311 splitContainer.IsPanelInverted = true;
312 Assert.Equal(500, splitContainer.SplitterDistance);
313 Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance);
317 public void SplitterDistanceGetter_InvertedHorizontalTest()
319 using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
320 splitContainer.Orientation = Orientation.Horizontal;
321 splitContainer.SplitterWidth = 5;
322 splitContainer.SplitterDistance = 500;
324 // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Height が一致しているかをテスト
325 Assert.Equal(500, splitContainer.SplitterDistance);
326 Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance);
328 // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない
329 splitContainer.IsPanelInverted = true;
330 Assert.Equal(500, splitContainer.SplitterDistance);
331 Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance);
335 public void SplitterDistanceSetter_InvertedVerticalTest()
337 using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
338 splitContainer.Orientation = Orientation.Vertical;
339 splitContainer.SplitterWidth = 5;
341 splitContainer.IsPanelInverted = true;
343 // 反転中に SplitterDistance を変更する
344 splitContainer.SplitterDistance = 500;
345 Assert.Equal(295, ((SplitContainer)splitContainer).SplitterDistance);
346 Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Width);
350 public void SplitterDistanceSetter_InvertedHorizontalTest()
352 using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
353 splitContainer.Orientation = Orientation.Horizontal;
354 splitContainer.SplitterWidth = 5;
356 splitContainer.IsPanelInverted = true;
358 // 反転中に SplitterDistance を変更する
359 splitContainer.SplitterDistance = 500;
360 Assert.Equal(95, ((SplitContainer)splitContainer).SplitterDistance);
361 Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Height);
365 public void PanelMinSizeGetter_InvertedTest()
367 using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
368 splitContainer.Panel1MinSize = 200;
369 splitContainer.Panel2MinSize = 300;
371 Assert.Equal(200, splitContainer.Panel1MinSize);
372 Assert.Equal(300, splitContainer.Panel2MinSize);
374 // 反転した状態でも OTSplitterContainer.Panel1MinSize, Panel2MinSize の値は外見上変化しない
375 splitContainer.IsPanelInverted = true;
376 Assert.Equal(200, splitContainer.Panel1MinSize);
377 Assert.Equal(300, splitContainer.Panel2MinSize);
381 public void PanelMinSizeSetter_InvertedTest()
383 using var splitContainer = new OTSplitContainer { Width = 800, Height = 600 };
384 splitContainer.IsPanelInverted = true;
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);
394 public void Panel1CollapsedGetter_InvertedTest()
396 using var splitContainer = new OTSplitContainer();
397 splitContainer.Panel1Collapsed = true;
399 Assert.True(splitContainer.Panel1Collapsed);
401 // 反転した状態でも OTSplitterContainer.Panel1Collapsed の値は外見上変化しない
402 splitContainer.IsPanelInverted = true;
403 Assert.True(splitContainer.Panel1Collapsed);
407 public void Panel1CollapsedSetter_InvertedTest()
409 using var splitContainer = new OTSplitContainer();
410 splitContainer.IsPanelInverted = true;
412 // 反転中に Panel1Collapsed を変更する
413 splitContainer.Panel1Collapsed = true;
414 Assert.False(((SplitContainer)splitContainer).Panel1Collapsed);
415 Assert.True(((SplitContainer)splitContainer).Panel2Collapsed);
419 public void Panel2CollapsedGetter_InvertedTest()
421 using var splitContainer = new OTSplitContainer();
422 splitContainer.Panel2Collapsed = true;
424 Assert.True(splitContainer.Panel2Collapsed);
426 // 反転した状態でも OTSplitterContainer.Panel2Collapsed の値は外見上変化しない
427 splitContainer.IsPanelInverted = true;
428 Assert.True(splitContainer.Panel2Collapsed);
432 public void Panel2CollapsedSetter_InvertedTest()
434 using var splitContainer = new OTSplitContainer();
435 splitContainer.IsPanelInverted = true;
437 // 反転中に Panel2Collapsed を変更する
438 splitContainer.Panel2Collapsed = true;
439 Assert.True(((SplitContainer)splitContainer).Panel1Collapsed);
440 Assert.False(((SplitContainer)splitContainer).Panel2Collapsed);