using System.Threading.Tasks;
using System.Windows.Forms;
using Xunit;
+using Xunit.Extensions;
namespace OpenTween
{
public class TabClassTest
{
[Fact]
- public void OldestUnreadId_Test()
+ public void NextUnreadId_Test()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
tab.UnreadManage = true;
// 未読なし
- Assert.Equal(-1L, tab.OldestUnreadId);
+ Assert.Equal(-1L, tab.NextUnreadId);
tab.AddPostToInnerStorage(new PostClass
{
});
tab.AddSubmit();
- Assert.Equal(100L, tab.OldestUnreadId);
+ Assert.Equal(100L, tab.NextUnreadId);
tab.AddPostToInnerStorage(new PostClass
{
});
tab.AddSubmit();
- Assert.Equal(100L, tab.OldestUnreadId);
+ Assert.Equal(100L, tab.NextUnreadId);
}
[Fact]
- public void OldestUnreadId_DisabledTest()
+ public void NextUnreadId_DisabledTest()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
});
tab.AddSubmit();
- Assert.Equal(-1L, tab.OldestUnreadId);
+ Assert.Equal(-1L, tab.NextUnreadId);
+ }
+
+ [Fact]
+ public void NextUnreadId_SortByIdAscTest()
+ {
+ var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
+
+ tab.UnreadManage = true;
+
+ // ID の昇順でソート
+ tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending);
+
+ // 画面には上から 100 → 200 → 300 の順に並ぶ
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 100L, IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 200L, IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 300L, IsRead = false });
+ tab.AddSubmit();
+
+ // 昇順/降順に関わらず、ID の小さい順に未読の ID を返す
+ Assert.Equal(100L, tab.NextUnreadId);
+ }
+
+ [Fact]
+ public void NextUnreadId_SortByIdDescTest()
+ {
+ var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
+
+ tab.UnreadManage = true;
+
+ // ID の降順でソート
+ tab.SetSortMode(ComparerMode.Id, SortOrder.Descending);
+
+ // 画面には上から 300 → 200 → 100 の順に並ぶ
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 100L, IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 200L, IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 300L, IsRead = false });
+ tab.AddSubmit();
+
+ // 昇順/降順に関わらず、ID の小さい順に未読の ID を返す
+ Assert.Equal(100L, tab.NextUnreadId);
+ }
+
+ [Fact]
+ public void NextUnreadId_SortByScreenNameAscTest()
+ {
+ var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
+
+ tab.UnreadManage = true;
+
+ // ScreenName の昇順でソート
+ tab.SetSortMode(ComparerMode.Name, SortOrder.Ascending);
+
+ // 画面には上から 200 → 100 → 300 の順に並ぶ
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 100L, ScreenName = "bbb", IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 200L, ScreenName = "aaa", IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 300L, ScreenName = "ccc", IsRead = false });
+ tab.AddSubmit();
+
+ // 昇順/降順に関わらず、ScreenName の辞書順で小さい順に未読の ID を返す
+ Assert.Equal(200L, tab.NextUnreadId);
+ }
+
+ [Fact]
+ public void NextUnreadId_SortByScreenNameDescTest()
+ {
+ var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
+
+ tab.UnreadManage = true;
+
+ // ScreenName の降順でソート
+ tab.SetSortMode(ComparerMode.Name, SortOrder.Descending);
+
+ // 画面には上から 300 → 100 → 200 の順に並ぶ
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 100L, ScreenName = "bbb", IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 200L, ScreenName = "aaa", IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 300L, ScreenName = "ccc", IsRead = false });
+ tab.AddSubmit();
+
+ // 昇順/降順に関わらず、ScreenName の辞書順で小さい順に未読の ID を返す
+ Assert.Equal(200L, tab.NextUnreadId);
}
[Fact]
}
[Fact]
- public void OldestUnreadIndex_Test()
+ public void NextUnreadIndex_Test()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
+ tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending);
tab.UnreadManage = true;
// 未読なし
- Assert.Equal(-1, tab.OldestUnreadIndex);
+ Assert.Equal(-1, tab.NextUnreadIndex);
tab.AddPostToInnerStorage(new PostClass
{
});
tab.AddSubmit();
- tab.SortMode = ComparerMode.Id;
- tab.SortOrder = SortOrder.Ascending;
- tab.Sort();
-
- Assert.Equal(1, tab.OldestUnreadIndex);
+ Assert.Equal(1, tab.NextUnreadIndex);
}
[Fact]
- public void OldestUnreadIndex_DisabledTest()
+ public void NextUnreadIndex_DisabledTest()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
+ tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending);
// 未読表示無効
tab.UnreadManage = false;
});
tab.AddSubmit();
- tab.SortMode = ComparerMode.Id;
- tab.SortOrder = SortOrder.Ascending;
- tab.Sort();
+ Assert.Equal(-1, tab.NextUnreadIndex);
+ }
+
+ [Fact]
+ public void GetUnreadIds_Test()
+ {
+ var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
+ tab.UnreadManage = true;
+
+ Assert.Empty(tab.GetUnreadIds());
+
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 100L, IsRead = false });
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 200L, IsRead = true });
+ tab.AddSubmit();
+
+ Assert.Equal(new[] { 100L }, tab.GetUnreadIds());
+
+ tab.SetReadState(100L, true); // 既読にする
- Assert.Equal(-1, tab.OldestUnreadIndex);
+ Assert.Empty(tab.GetUnreadIds());
}
[Fact]
Assert.False(tab.FilterModified);
}
+
+ [Fact]
+ public void SearchPostsAll_Test()
+ {
+ var tab = new TabClass { TabType = MyCommon.TabUsageType.PublicSearch };
+
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 100L, TextFromApi = "abcd", ScreenName = "", Nickname = "" }); // 0
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 110L, TextFromApi = "efgh", ScreenName = "", Nickname = "" }); // 1
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 120L, TextFromApi = "ijkl", ScreenName = "", Nickname = "" }); // 2
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 130L, TextFromApi = "abc", ScreenName = "", Nickname = "" }); // 3
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 140L, TextFromApi = "def", ScreenName = "", Nickname = "" }); // 4
+
+ tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending);
+ tab.AddSubmit();
+
+ // インデックス番号 0 から開始 → 0, 1, 2, 3, 4 の順に検索
+ var result = tab.SearchPostsAll(x => x.Contains("a"), startIndex: 0);
+ Assert.Equal(new[] { 0, 3 }, result);
+
+ // インデックス番号 2 から開始 → 2, 3, 4, 0, 1 の順に検索
+ result = tab.SearchPostsAll(x => x.Contains("a"), startIndex: 2);
+ Assert.Equal(new[] { 3, 0 }, result);
+ }
+
+ [Fact]
+ public void SearchPostsAll_ReverseOrderTest()
+ {
+ var tab = new TabClass { TabType = MyCommon.TabUsageType.PublicSearch };
+
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 100L, TextFromApi = "abcd", ScreenName = "", Nickname = "" }); // 0
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 110L, TextFromApi = "efgh", ScreenName = "", Nickname = "" }); // 1
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 120L, TextFromApi = "ijkl", ScreenName = "", Nickname = "" }); // 2
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 130L, TextFromApi = "abc", ScreenName = "", Nickname = "" }); // 3
+ tab.AddPostToInnerStorage(new PostClass { StatusId = 140L, TextFromApi = "def", ScreenName = "", Nickname = "" }); // 4
+
+ tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending);
+ tab.AddSubmit();
+
+ // インデックス番号 4 から逆順に開始 → 4, 3, 2, 1, 0 の順に検索
+ var result = tab.SearchPostsAll(x => x.Contains("a"), startIndex: 4, reverse: true);
+ Assert.Equal(new[] { 3, 0 }, result);
+
+ // インデックス番号 2 から逆順に開始 → 2, 1, 0, 4, 3 の順に検索
+ result = tab.SearchPostsAll(x => x.Contains("a"), startIndex: 2, reverse: true);
+ Assert.Equal(new[] { 0, 3 }, result);
+ }
+ }
+
+ public class TabUsageTypeExtTest
+ {
+ [Theory]
+ [InlineData(MyCommon.TabUsageType.Home, true)]
+ [InlineData(MyCommon.TabUsageType.Mentions, true)]
+ [InlineData(MyCommon.TabUsageType.DirectMessage, true)]
+ [InlineData(MyCommon.TabUsageType.Favorites, true)]
+ [InlineData(MyCommon.TabUsageType.UserDefined, false)]
+ [InlineData(MyCommon.TabUsageType.Lists, false)]
+ [InlineData(MyCommon.TabUsageType.UserTimeline, false)]
+ [InlineData(MyCommon.TabUsageType.PublicSearch, false)]
+ [InlineData(MyCommon.TabUsageType.Related, false)]
+ public void IsDefault_Test(MyCommon.TabUsageType tabType, bool expected)
+ {
+ Assert.Equal(expected, tabType.IsDefault());
+ }
+
+ [Theory]
+ [InlineData(MyCommon.TabUsageType.Home, false)]
+ [InlineData(MyCommon.TabUsageType.Mentions, true)]
+ [InlineData(MyCommon.TabUsageType.DirectMessage, false)]
+ [InlineData(MyCommon.TabUsageType.Favorites, false)]
+ [InlineData(MyCommon.TabUsageType.UserDefined, true)]
+ [InlineData(MyCommon.TabUsageType.Lists, false)]
+ [InlineData(MyCommon.TabUsageType.UserTimeline, false)]
+ [InlineData(MyCommon.TabUsageType.PublicSearch, false)]
+ [InlineData(MyCommon.TabUsageType.Related, false)]
+ public void IsDistributable_Test(MyCommon.TabUsageType tabType, bool expected)
+ {
+ Assert.Equal(expected, tabType.IsDistributable());
+ }
+
+ [Theory]
+ [InlineData(MyCommon.TabUsageType.Home, false)]
+ [InlineData(MyCommon.TabUsageType.Mentions, false)]
+ [InlineData(MyCommon.TabUsageType.DirectMessage, true)]
+ [InlineData(MyCommon.TabUsageType.Favorites, false)]
+ [InlineData(MyCommon.TabUsageType.UserDefined, false)]
+ [InlineData(MyCommon.TabUsageType.Lists, true)]
+ [InlineData(MyCommon.TabUsageType.UserTimeline, true)]
+ [InlineData(MyCommon.TabUsageType.PublicSearch, true)]
+ [InlineData(MyCommon.TabUsageType.Related, true)]
+ public void IsInnerStorage_Test(MyCommon.TabUsageType tabType, bool expected)
+ {
+ Assert.Equal(expected, tabType.IsInnerStorage());
+ }
}
}