OSDN Git Service

DetailsListViewに対するテストコードを追加
authorKimura Youichi <kim.upsilon@bucyou.net>
Thu, 11 Jan 2024 07:38:16 +0000 (16:38 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Thu, 11 Jan 2024 07:39:41 +0000 (16:39 +0900)
OpenTween.Tests/DetailsListViewTest.cs

index d890a14..3250c7d 100644 (file)
 // Boston, MA 02110-1301, USA.
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using OpenTween.OpenTweenCustomControl;
 using Xunit;
 
@@ -36,5 +33,110 @@ namespace OpenTween
         {
             using var listView = new DetailsListView();
         }
+
+        [WinFormsFact]
+        public void SelectionMark_Test()
+        {
+            using var listView = new DetailsListView();
+
+            listView.RetrieveVirtualItem += (s, e) => e.Item = new();
+            listView.VirtualMode = true;
+            listView.VirtualListSize = 10;
+            listView.CreateControl();
+
+            listView.SelectionMark = 3;
+            Assert.Equal(3, listView.SelectionMark);
+        }
+
+        [WinFormsFact]
+        public void SelectItems_EmptyTest()
+        {
+            using var listView = new DetailsListView();
+
+            listView.RetrieveVirtualItem += (s, e) => e.Item = new();
+            listView.VirtualMode = true;
+            listView.VirtualListSize = 10;
+            listView.CreateControl();
+
+            listView.SelectedIndices.Add(1);
+            Assert.Single(listView.SelectedIndices);
+
+            listView.SelectItems(Array.Empty<int>());
+            Assert.Empty(listView.SelectedIndices);
+        }
+
+        [WinFormsFact]
+        public void SelectItems_SingleTest()
+        {
+            using var listView = new DetailsListView();
+
+            listView.RetrieveVirtualItem += (s, e) => e.Item = new();
+            listView.VirtualMode = true;
+            listView.VirtualListSize = 10;
+            listView.CreateControl();
+
+            listView.SelectedIndices.Add(1);
+            Assert.Single(listView.SelectedIndices);
+
+            listView.SelectItems(new[] { 2 });
+            Assert.Equal(new[] { 2 }, listView.SelectedIndices.Cast<int>());
+        }
+
+        [WinFormsFact]
+        public void SelectItems_Multiple_ClearAndSelectTest()
+        {
+            using var listView = new DetailsListView();
+
+            listView.RetrieveVirtualItem += (s, e) => e.Item = new();
+            listView.VirtualMode = true;
+            listView.VirtualListSize = 10;
+            listView.CreateControl();
+
+            listView.SelectedIndices.Add(2);
+            listView.SelectedIndices.Add(3);
+            Assert.Equal(2, listView.SelectedIndices.Count);
+
+            // Clear して選択し直した方が早いパターン
+            listView.SelectItems(new[] { 5, 6 });
+            Assert.Equal(new[] { 5, 6 }, listView.SelectedIndices.Cast<int>());
+        }
+
+        [WinFormsFact]
+        public void SelectItems_Multiple_DeselectAndSelectTest()
+        {
+            using var listView = new DetailsListView();
+
+            listView.RetrieveVirtualItem += (s, e) => e.Item = new();
+            listView.VirtualMode = true;
+            listView.VirtualListSize = 10;
+            listView.CreateControl();
+
+            listView.SelectedIndices.Add(1);
+            listView.SelectedIndices.Add(2);
+            listView.SelectedIndices.Add(3);
+            Assert.Equal(3, listView.SelectedIndices.Count);
+
+            // 選択範囲の差分だけ更新した方が早いパターン
+            listView.SelectItems(new[] { 2, 3, 4 });
+            Assert.Equal(new[] { 2, 3, 4 }, listView.SelectedIndices.Cast<int>());
+        }
+
+        [WinFormsFact]
+        public void SelectItems_OutOfRangeTest()
+        {
+            using var listView = new DetailsListView();
+
+            listView.RetrieveVirtualItem += (s, e) => e.Item = new();
+            listView.VirtualMode = true;
+            listView.VirtualListSize = 10;
+            listView.CreateControl();
+
+            Assert.Throws<ArgumentOutOfRangeException>(
+                () => listView.SelectItems(new[] { -1 })
+            );
+            Assert.Throws<ArgumentOutOfRangeException>(
+                () => listView.SelectItems(new[] { 10 })
+            );
+        }
     }
 }