diff --git a/OpenTween.Tests/Models/TabModelTest.cs b/OpenTween.Tests/Models/TabModelTest.cs index f256d15aa..df6cd6263 100644 --- a/OpenTween.Tests/Models/TabModelTest.cs +++ b/OpenTween.Tests/Models/TabModelTest.cs @@ -673,6 +673,88 @@ public void OnFilterModified_DetachedTest() Assert.False(tab.FilterModified); } + [Fact] + public void IndexOf_SingleFoundTest() + { + var tab = new PublicSearchTabModel("search"); + + tab.AddPostQueue(new() + { + StatusId = new TwitterStatusId("100"), + CreatedAtForSorting = new(2023, 1, 1, 0, 0, 0), + TextFromApi = "aaa", + }); + tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending); + tab.AddSubmit(); + + Assert.Equal(0, tab.IndexOf(new TwitterStatusId("100"))); + } + + [Fact] + public void IndexOf_SingleNotFoundTest() + { + var tab = new PublicSearchTabModel("search"); + + tab.AddPostQueue(new() + { + StatusId = new TwitterStatusId("100"), + CreatedAtForSorting = new(2023, 1, 1, 0, 0, 0), + TextFromApi = "aaa", + }); + tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending); + tab.AddSubmit(); + + Assert.Equal(-1, tab.IndexOf(new TwitterStatusId("200"))); + } + + [Fact] + public void IndexOf_MultipleFoundTest() + { + var tab = new PublicSearchTabModel("search"); + + tab.AddPostQueue(new() + { + StatusId = new TwitterStatusId("100"), + CreatedAtForSorting = new(2023, 1, 1, 0, 0, 0), + TextFromApi = "aaa", + }); + tab.AddPostQueue(new() + { + StatusId = new TwitterStatusId("200"), + CreatedAtForSorting = new(2023, 1, 1, 0, 0, 1), + TextFromApi = "bbb", + }); + tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending); + tab.AddSubmit(); + + var actual = tab.IndexOf(new[] { new TwitterStatusId("200"), new TwitterStatusId("100") }); + Assert.Equal(new[] { 1, 0 }, actual); + } + + [Fact] + public void IndexOf_MultiplePartiallyFoundTest() + { + var tab = new PublicSearchTabModel("search"); + + tab.AddPostQueue(new() + { + StatusId = new TwitterStatusId("100"), + CreatedAtForSorting = new(2023, 1, 1, 0, 0, 0), + TextFromApi = "aaa", + }); + tab.AddPostQueue(new() + { + StatusId = new TwitterStatusId("200"), + CreatedAtForSorting = new(2023, 1, 1, 0, 0, 1), + TextFromApi = "bbb", + }); + tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending); + tab.AddSubmit(); + + var actual = tab.IndexOf(new[] { new TwitterStatusId("100"), new TwitterStatusId("999") }); + Assert.Equal(new[] { 0, -1 }, actual); + } + [Fact] public void SearchPostsAll_Test() { diff --git a/OpenTween.Tests/Models/TwitterPostFactoryTest.cs b/OpenTween.Tests/Models/TwitterPostFactoryTest.cs index 88718fd24..6a31f012b 100644 --- a/OpenTween.Tests/Models/TwitterPostFactoryTest.cs +++ b/OpenTween.Tests/Models/TwitterPostFactoryTest.cs @@ -286,6 +286,27 @@ public void CreateFromDirectMessageEvent_SenderTest() Assert.True(post.IsMe); } + [Fact] + public void GetReceivedHashtags_Test() + { + var factory = new TwitterPostFactory(this.CreateTabinfo()); + var status = this.CreateStatus(); + status.FullText = "hoge #OpenTween"; + status.Entities.Hashtags = new[] + { + new TwitterEntityHashtag + { + Indices = new[] { 5, 15 }, + Text = "OpenTween", + }, + }; + + _ = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet); + + Assert.Equal(new[] { "#OpenTween" }, factory.GetReceivedHashtags()); + Assert.Empty(factory.GetReceivedHashtags()); + } + [Fact] public void CreateFromStatus_MediaAltTest() { diff --git a/OpenTween.Tests/TweenMainTest.cs b/OpenTween.Tests/TweenMainTest.cs index 2b6da7991..178237d62 100644 --- a/OpenTween.Tests/TweenMainTest.cs +++ b/OpenTween.Tests/TweenMainTest.cs @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; @@ -55,6 +56,11 @@ private void UsingTweenMain(Action func) using var iconAssets = new IconAssetsManager(); var thumbnailGenerator = new ThumbnailGenerator(new(autoupdate: false)); + // TabInformation.GetInstance() で取得できるようにする + var field = typeof(TabInformations).GetField("Instance", + BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.SetField); + field.SetValue(null, tabinfo); + using var tweenMain = new TweenMain(settings, tabinfo, twitter, imageCache, iconAssets, thumbnailGenerator); var context = new TestContext(settings, tabinfo); @@ -174,6 +180,36 @@ public void AddNewTab_PublicSearchTabTest() }); } + [WinFormsFact] + public void RefreshTimeline_Test() + { + this.UsingTweenMain((tweenMain, context) => + { + var tabPage = tweenMain.ListTab.TabPages[0]; + Assert.Equal("Recent", tabPage.Text); + + var listView = (DetailsListView)tabPage.Controls[0]; + Assert.Equal(0, listView.VirtualListSize); + + var post = new PostClass + { + StatusId = new TwitterStatusId("100"), + Text = "hoge", + UserId = 111L, + ScreenName = "opentween", + CreatedAt = new(2024, 1, 1, 0, 0, 0), + }; + context.TabInfo.AddPost(post); + context.TabInfo.DistributePosts(); + tweenMain.RefreshTimeline(); + + Assert.Equal(1, listView.VirtualListSize); + + var listItem = listView.Items[0]; + Assert.Equal("opentween", listItem.SubItems[4].Text); + }); + } + [WinFormsFact] public void FormatStatusText_NewLineTest() { diff --git a/OpenTween/Tween.cs b/OpenTween/Tween.cs index f2d9080c7..90832f7cc 100644 --- a/OpenTween/Tween.cs +++ b/OpenTween/Tween.cs @@ -811,7 +811,7 @@ internal void MarkSettingAtIdModified() _ = this.saveConfigDebouncer.Call(); } - private void RefreshTimeline() + internal void RefreshTimeline() { var curListView = this.CurrentListView;