// OpenTween - Client of Twitter // Copyright (c) 2014 kim_upsilon (@kim_upsilon) // All rights reserved. // // This file is part of OpenTween. // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free // Software Foundation; either version 3 of the License, or (at your option) // any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License // for more details. // // You should have received a copy of the GNU General Public License along // with this program. If not, see , or write to // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, // Boston, MA 02110-1301, USA. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Xunit; using Xunit.Extensions; namespace OpenTween { public class OTSplitContainerTest { [Fact] public void IsPanelInvertedGetter_Test() { using (var splitContainer = new OTSplitContainer()) { Assert.False(splitContainer.IsPanelInverted); // デフォルト値 splitContainer.IsPanelInverted = true; Assert.True(splitContainer.IsPanelInverted); splitContainer.IsPanelInverted = false; Assert.False(splitContainer.IsPanelInverted); } } [Fact] public void IsPanelInvertedSetter_InnerControlsTest() { using (var splitContainer = new OTSplitContainer()) using (var buttonA = new Button()) using (var buttonB = new Button()) using (var buttonC = new Button()) using (var buttonD = new Button()) { splitContainer.Panel1.Controls.AddRange(new[] { buttonA, buttonB }); splitContainer.Panel2.Controls.AddRange(new[] { buttonC, buttonD }); var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel1.Controls.Cast()); Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel2.Controls.Cast()); // 上下パネルを反転する splitContainer.IsPanelInverted = true; // Panel1, Panel2 内のコントロールが入れ替わる Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel1.Controls.Cast()); Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel2.Controls.Cast()); // 元に戻す splitContainer.IsPanelInverted = false; // Panel1, Panel2 内のコントロールも元に戻る Assert.Equal(new[] { buttonA, buttonB }, baseSplitContainer.Panel1.Controls.Cast()); Assert.Equal(new[] { buttonC, buttonD }, baseSplitContainer.Panel2.Controls.Cast()); } } [Fact] public void IsPanelInvertedSetter_Panel1FixedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.FixedPanel = FixedPanel.Panel1; var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel); // 上下パネルを反転する splitContainer.IsPanelInverted = true; Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel); // 元に戻す splitContainer.IsPanelInverted = false; Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel); } } [Fact] public void IsPanelInvertedSetter_Panel2FixedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.FixedPanel = FixedPanel.Panel2; var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel); // 上下パネルを反転する splitContainer.IsPanelInverted = true; Assert.Equal(FixedPanel.Panel1, baseSplitContainer.FixedPanel); // 元に戻す splitContainer.IsPanelInverted = false; Assert.Equal(FixedPanel.Panel2, baseSplitContainer.FixedPanel); } } [Fact] public void IsPanelInvertedSetter_NoneFixedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.FixedPanel = FixedPanel.None; var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel); // 上下パネルを反転する splitContainer.IsPanelInverted = true; Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel); // 元に戻す splitContainer.IsPanelInverted = false; Assert.Equal(FixedPanel.None, baseSplitContainer.FixedPanel); } } [Fact] public void IsPanelInvertedSetter_PanelMinSizeTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.Panel1MinSize = 200; splitContainer.Panel2MinSize = 300; var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.Equal(200, baseSplitContainer.Panel1MinSize); Assert.Equal(300, baseSplitContainer.Panel2MinSize); // 上下パネルを反転する splitContainer.IsPanelInverted = true; Assert.Equal(300, baseSplitContainer.Panel1MinSize); Assert.Equal(200, baseSplitContainer.Panel2MinSize); // 元に戻す splitContainer.IsPanelInverted = false; Assert.Equal(200, baseSplitContainer.Panel1MinSize); Assert.Equal(300, baseSplitContainer.Panel2MinSize); } } [Fact] public void IsPanelInvertedSetter_Panel1CollapsedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.Panel1Collapsed = true; var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.True(baseSplitContainer.Panel1Collapsed); Assert.False(baseSplitContainer.Panel2Collapsed); // 上下パネルを反転する splitContainer.IsPanelInverted = true; Assert.False(baseSplitContainer.Panel1Collapsed); Assert.True(baseSplitContainer.Panel2Collapsed); // 元に戻す splitContainer.IsPanelInverted = false; Assert.True(baseSplitContainer.Panel1Collapsed); Assert.False(baseSplitContainer.Panel2Collapsed); } } [Fact] public void IsPanelInvertedSetter_Panel2CollapsedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.Panel2Collapsed = true; var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.False(baseSplitContainer.Panel1Collapsed); Assert.True(baseSplitContainer.Panel2Collapsed); // 上下パネルを反転する splitContainer.IsPanelInverted = true; Assert.True(baseSplitContainer.Panel1Collapsed); Assert.False(baseSplitContainer.Panel2Collapsed); // 元に戻す splitContainer.IsPanelInverted = false; Assert.False(baseSplitContainer.Panel1Collapsed); Assert.True(baseSplitContainer.Panel2Collapsed); } } [Fact] public void IsPanelInvertedSetter_SplitterDistanceHorizontalTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.Orientation = Orientation.Horizontal; // 上下に分割された状態 splitContainer.SplitterWidth = 5; // 分割線の幅は 5px splitContainer.SplitterDistance = 500; // 上から 500px で分割 (下から 300px - 5px) var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.Equal(500, baseSplitContainer.SplitterDistance); // 上下パネルを反転する splitContainer.IsPanelInverted = true; Assert.Equal(95, baseSplitContainer.SplitterDistance); // 上から 100px - 5px (下から 500px) // 元に戻す splitContainer.IsPanelInverted = false; Assert.Equal(500, baseSplitContainer.SplitterDistance); } } [Fact] public void IsPanelInvertedSetter_SplitterDistanceVerticalTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.Orientation = Orientation.Vertical; // 左右に分割された状態 splitContainer.SplitterWidth = 5; // 分割線の幅は 5px splitContainer.SplitterDistance = 500; // 左から 500px で分割 (右から 300px - 5px) var baseSplitContainer = (SplitContainer)splitContainer; // 反転前の状態 (通常の SplitContainer と同じ挙動) Assert.Equal(500, baseSplitContainer.SplitterDistance); // 左右パネルを反転する splitContainer.IsPanelInverted = true; Assert.Equal(295, baseSplitContainer.SplitterDistance); // 左から 300px - 5px (右から 500px) // 元に戻す splitContainer.IsPanelInverted = false; Assert.Equal(500, baseSplitContainer.SplitterDistance); } } [Fact] public void PanelGetter_InvertedTest() { using (var splitContainer = new OTSplitContainer()) { var panel1 = splitContainer.Panel1; var panel2 = splitContainer.Panel2; splitContainer.IsPanelInverted = true; Assert.Same(panel2, splitContainer.Panel1); Assert.Same(panel1, splitContainer.Panel2); } } [Theory] [InlineData(FixedPanel.None)] [InlineData(FixedPanel.Panel1)] [InlineData(FixedPanel.Panel2)] public void FixedPanelGetter_InvertedTest(FixedPanel fixedPanel) { using (var splitContainer = new OTSplitContainer()) { splitContainer.FixedPanel = fixedPanel; Assert.Equal(fixedPanel, splitContainer.FixedPanel); // 反転した状態でも OTSplitterContainer.FixedPanel の値は外見上変化しない splitContainer.IsPanelInverted = true; Assert.Equal(fixedPanel, splitContainer.FixedPanel); } } [Theory] [InlineData(FixedPanel.None, FixedPanel.None)] [InlineData(FixedPanel.Panel1, FixedPanel.Panel2)] [InlineData(FixedPanel.Panel2, FixedPanel.Panel1)] public void FixedPanelSetter_InvertedTest(FixedPanel inputValue, FixedPanel internalValue) { using (var splitContainer = new OTSplitContainer()) { splitContainer.IsPanelInverted = true; // 反転中に FixedPanel を変更する splitContainer.FixedPanel = inputValue; Assert.Equal(internalValue, ((SplitContainer)splitContainer).FixedPanel); } } [Fact] public void SplitterDistanceGetter_InvertedVerticalTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.Orientation = Orientation.Vertical; splitContainer.SplitterWidth = 5; splitContainer.SplitterDistance = 500; // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Width が一致しているかをテスト Assert.Equal(500, splitContainer.SplitterDistance); Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance); // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない splitContainer.IsPanelInverted = true; Assert.Equal(500, splitContainer.SplitterDistance); Assert.Equal(splitContainer.Panel1.Width, splitContainer.SplitterDistance); } } [Fact] public void SplitterDistanceGetter_InvertedHorizontalTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.Orientation = Orientation.Horizontal; splitContainer.SplitterWidth = 5; splitContainer.SplitterDistance = 500; // setter で代入した長さと一致しているか、SplitterDistance と Panel1.Height が一致しているかをテスト Assert.Equal(500, splitContainer.SplitterDistance); Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance); // 反転した状態でも OTSplitterContainer.SplitterDistance の値は外見上変化しない splitContainer.IsPanelInverted = true; Assert.Equal(500, splitContainer.SplitterDistance); Assert.Equal(splitContainer.Panel1.Height, splitContainer.SplitterDistance); } } [Fact] public void SplitterDistanceSetter_InvertedVerticalTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.Orientation = Orientation.Vertical; splitContainer.SplitterWidth = 5; splitContainer.IsPanelInverted = true; // 反転中に SplitterDistance を変更する splitContainer.SplitterDistance = 500; Assert.Equal(295, ((SplitContainer)splitContainer).SplitterDistance); Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Width); } } [Fact] public void SplitterDistanceSetter_InvertedHorizontalTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.Orientation = Orientation.Horizontal; splitContainer.SplitterWidth = 5; splitContainer.IsPanelInverted = true; // 反転中に SplitterDistance を変更する splitContainer.SplitterDistance = 500; Assert.Equal(95, ((SplitContainer)splitContainer).SplitterDistance); Assert.Equal(500, ((SplitContainer)splitContainer).Panel2.Height); } } [Fact] public void PanelMinSizeGetter_InvertedTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.Panel1MinSize = 200; splitContainer.Panel2MinSize = 300; Assert.Equal(200, splitContainer.Panel1MinSize); Assert.Equal(300, splitContainer.Panel2MinSize); // 反転した状態でも OTSplitterContainer.Panel1MinSize, Panel2MinSize の値は外見上変化しない splitContainer.IsPanelInverted = true; Assert.Equal(200, splitContainer.Panel1MinSize); Assert.Equal(300, splitContainer.Panel2MinSize); } } [Fact] public void PanelMinSizeSetter_InvertedTest() { using (var splitContainer = new OTSplitContainer { Width = 800, Height = 600 }) { splitContainer.IsPanelInverted = true; // 反転中に Panel1MinSize, Panel2MinSize を変更する splitContainer.Panel1MinSize = 200; splitContainer.Panel2MinSize = 300; Assert.Equal(300, ((SplitContainer)splitContainer).Panel1MinSize); Assert.Equal(200, ((SplitContainer)splitContainer).Panel2MinSize); } } [Fact] public void Panel1CollapsedGetter_InvertedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.Panel1Collapsed = true; Assert.True(splitContainer.Panel1Collapsed); // 反転した状態でも OTSplitterContainer.Panel1Collapsed の値は外見上変化しない splitContainer.IsPanelInverted = true; Assert.True(splitContainer.Panel1Collapsed); } } [Fact] public void Panel1CollapsedSetter_InvertedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.IsPanelInverted = true; // 反転中に Panel1Collapsed を変更する splitContainer.Panel1Collapsed = true; Assert.False(((SplitContainer)splitContainer).Panel1Collapsed); Assert.True(((SplitContainer)splitContainer).Panel2Collapsed); } } [Fact] public void Panel2CollapsedGetter_InvertedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.Panel2Collapsed = true; Assert.True(splitContainer.Panel2Collapsed); // 反転した状態でも OTSplitterContainer.Panel2Collapsed の値は外見上変化しない splitContainer.IsPanelInverted = true; Assert.True(splitContainer.Panel2Collapsed); } } [Fact] public void Panel2CollapsedSetter_InvertedTest() { using (var splitContainer = new OTSplitContainer()) { splitContainer.IsPanelInverted = true; // 反転中に Panel2Collapsed を変更する splitContainer.Panel2Collapsed = true; Assert.True(((SplitContainer)splitContainer).Panel1Collapsed); Assert.False(((SplitContainer)splitContainer).Panel2Collapsed); } } } }