1 // Copyright (C) 2019 Kazuhiro Fujieda <fujieda@users.osdn.me>
\r
3 // Licensed under the Apache License, Version 2.0 (the "License");
\r
4 // you may not use this file except in compliance with the License.
\r
5 // You may obtain a copy of the License at
\r
7 // http://www.apache.org/licenses/LICENSE-2.0
\r
9 // Unless required by applicable law or agreed to in writing, software
\r
10 // distributed under the License is distributed on an "AS IS" BASIS,
\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 // See the License for the specific language governing permissions and
\r
13 // limitations under the License.
\r
15 using System.Collections.Generic;
\r
17 using KancolleSniffer.Model;
\r
18 using KancolleSniffer.View.MainWindow;
\r
19 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
21 namespace KancolleSniffer.Test
\r
24 public class QuestPanelTest
\r
26 private const int Lines = 4;
\r
27 private const int AcceptMax = 7;
\r
28 private readonly QuestPanel _panel = new QuestPanel();
\r
29 private readonly QuestCountList _countList = new QuestCountList();
\r
32 public void Initialize()
\r
34 _panel.CreateLabels(Lines);
\r
41 public void ShowAll()
\r
43 _panel.Update(CreateQuests(Lines));
\r
44 Assert.IsTrue(CheckResult(CreateQuests(Lines)));
\r
48 /// 最大の任務数について上から行数分
\r
51 public void ShowTop()
\r
53 _panel.Update(CreateQuests(AcceptMax));
\r
54 Assert.IsTrue(CheckResult(CreateQuests(Lines)));
\r
58 /// IDの大きい任務の追加されたら、その表示のためにスクロールする
\r
61 public void AddBottomWithScroll()
\r
63 _panel.Update(CreateQuests(Lines));
\r
64 _panel.Update(CreateQuests(Lines + 1));
\r
65 Assert.IsTrue(CheckResult(CreateQuests(1, Lines)));
\r
67 SetScrollPosition(1);
\r
68 _panel.Update(CreateQuests(Lines + 2));
\r
69 Assert.IsTrue(CheckResult(CreateQuests(2, Lines)));
\r
73 /// IDの小さい任務が追加されたらそれを表示する
\r
76 public void AddTop()
\r
78 _panel.Update(CreateQuests(2, Lines).ToArray());
\r
79 _panel.Update(CreateQuests(1, Lines + 1).ToArray());
\r
80 Assert.IsTrue(CheckResult(CreateQuests(1, Lines)));
\r
84 /// 上が隠れているときにIDの小さい任務が追加されたら上スクロールする
\r
87 public void AddTopWithScroll()
\r
89 _panel.Update(CreateQuests(1, Lines + 1));
\r
90 SetScrollPosition(1);
\r
91 _panel.Update(CreateQuests(Lines + 2).ToArray());
\r
92 Assert.IsTrue(CheckResult(CreateQuests(Lines)));
\r
96 /// 中間のIDの任務が見える位置に挿入されたらスクロールしない
\r
99 public void AddMediumWithoutScroll()
\r
101 _panel.Update(CreateQuests(new[] {0, 2, 3, 4, 5}));
\r
102 SetScrollPosition(1);
\r
103 _panel.Update(CreateQuests(new[] {0, 1, 2, 3, 4, 5}));
\r
104 Assert.IsTrue(CheckResult(CreateQuests(1, Lines)));
\r
108 /// 中間のIDの任務が見えない位置に挿入されたらスクロールする
\r
111 public void AddMediumWithScroll()
\r
113 _panel.Update(CreateQuests(new[] {0, 2, 3, 4, 5, 6}));
\r
114 SetScrollPosition(2);
\r
115 _panel.Update(CreateQuests(AcceptMax));
\r
116 Assert.IsTrue(CheckResult(CreateQuests(1, Lines)));
\r
123 public void RemoveBottom()
\r
125 _panel.Update(CreateQuests(AcceptMax));
\r
126 _panel.Update(CreateQuests(AcceptMax - 1));
\r
127 Assert.IsTrue(CheckResult(CreateQuests(Lines)));
\r
131 /// 最後の任務が減った結果上スクロールする
\r
134 public void RemoveBottomWithScroll()
\r
136 _panel.Update(CreateQuests(Lines + 2));
\r
137 SetScrollPosition(2);
\r
138 _panel.Update(CreateQuests(Lines + 1));
\r
139 Assert.IsTrue(CheckResult(CreateQuests(1, Lines)));
\r
146 public void RemoveMedium()
\r
148 _panel.Update(CreateQuests(AcceptMax));
\r
149 var sparse = new[] {0, 1, 3, 4, 5, 6};
\r
150 _panel.Update(CreateQuests(sparse));
\r
151 Assert.IsTrue(CheckResult(CreateQuests(sparse.Take(Lines))));
\r
155 /// 中間の任務が減った結果上スクロールする
\r
158 public void RemoveMediumWithScroll()
\r
160 _panel.Update(CreateQuests(Lines + 2));
\r
161 SetScrollPosition(2);
\r
162 var sparse = new[] {0, 1, 2, 4, 5};
\r
163 _panel.Update(CreateQuests(sparse));
\r
164 Assert.IsTrue(CheckResult(CreateQuests(sparse.Skip(1))));
\r
168 /// カウントが増えた任務を見える位置にスクロールする
\r
171 public void ChangeCount()
\r
173 var quests = CreateQuests(AcceptMax);
\r
174 _panel.Update(quests);
\r
176 quests[AcceptMax - 1].Count.Now = 1;
\r
177 _panel.Update(quests);
\r
178 Assert.IsTrue(CheckResult(CreateQuests(3, Lines)), "下スクロール");
\r
180 quests[2].Count.NowArray[0] = 1;
\r
181 _panel.Update(quests);
\r
182 Assert.IsTrue(CheckResult(CreateQuests(2, Lines)), "上スクロール");
\r
184 quests[3].Count.Now = 1;
\r
185 _panel.Update(quests);
\r
186 Assert.IsTrue(CheckResult(CreateQuests(2, Lines)), "そのまま");
\r
188 _panel.Update(quests);
\r
189 Assert.IsTrue(CheckResult(CreateQuests(2, Lines)), "そのまま");
\r
191 quests[0].Count.Now = 1;
\r
192 _panel.Update(quests);
\r
193 Assert.IsTrue(CheckResult(CreateQuests(Lines)), "上スクロール");
\r
197 private QuestStatus[] CreateQuests(int length)
\r
199 return CreateQuests(0, length);
\r
202 private QuestStatus[] CreateQuests(int start, int count)
\r
204 return CreateQuests(Enumerable.Range(start, count));
\r
207 private QuestStatus[] CreateQuests(IEnumerable<int> indexes)
\r
211 CreateStatus(210, "敵艦隊を10回邀撃せよ!"),
\r
212 CreateStatus(211, "敵空母を3隻撃沈せよ!"),
\r
213 CreateStatus(214, "あ号作戦"),
\r
214 CreateStatus(216, "敵艦隊主力を撃滅せよ!"),
\r
215 CreateStatus(218, "敵補給艦を3隻撃沈せよ!"),
\r
216 CreateStatus(403, "「遠征」を10回成功させよう!"),
\r
217 CreateStatus(503, "艦隊大整備!")
\r
219 return indexes.Select(idx => quests[idx]).ToArray();
\r
222 private QuestStatus CreateStatus(int id, string name)
\r
224 return new QuestStatus
\r
228 Color = _panel.BackColor,
\r
229 Count = _countList.GetCount(id)
\r
233 private bool CheckResult(IEnumerable<QuestStatus> expected)
\r
235 var result = _panel.QuestNameList;
\r
236 return expected.Select(q => q.Name).Concat(Enumerable.Repeat("", Lines)).Take(Lines).SequenceEqual(result);
\r
239 private void SetScrollPosition(int position)
\r
241 var scroller = (ListScroller)new PrivateObject(_panel).GetField("_listScroller");
\r
242 scroller.Position = position;
\r