public void RemoveFilter(PostFilterRule filter) { lock (this.lockObjFilters) { _filters.Remove(filter); filter.PropertyChanged -= this.OnFilterModified; this.FilterModified = true; } }
public void FilterAll_ExcludeReplyFilterTest() { var homeTab = this.tabinfo.GetTabByType <HomeTabModel>(); var replyTab = this.tabinfo.GetTabByType <MentionsTabModel>(); var filter = new PostFilterRule { // @aaa からのリプライは Reply タブに振り分けない ExFilterName = "aaa", }; replyTab.AddFilter(filter); replyTab.FilterModified = false; this.tabinfo.AddPost(new PostClass { StatusId = 100L, ScreenName = "aaa", IsReply = true }); this.tabinfo.AddPost(new PostClass { StatusId = 200L, ScreenName = "bbb", IsReply = true }); this.tabinfo.AddPost(new PostClass { StatusId = 300L, ScreenName = "ccc", IsReply = true }); this.tabinfo.DistributePosts(); this.tabinfo.SubmitUpdate(); // この時点での振り分け状態 Assert.Equal(new[] { 100L, 200L, 300L }, homeTab.StatusIds, AnyOrderComparer <long> .Instance); Assert.Equal(new[] { 200L, 300L }, replyTab.StatusIds, AnyOrderComparer <long> .Instance); // [statusId: 100] は IsExcludeReply が true の状態になっている Assert.True(this.tabinfo[100L].IsExcludeReply); // Reply のフィルタを変更する filter.ExFilterName = "bbb"; // フィルタの変更を反映 this.tabinfo.FilterAll(); this.tabinfo.DistributePosts(); this.tabinfo.SubmitUpdate(); // 期待する動作: // [statusId: 100] は Reply にコピーされ、IsExcludeReply が false になる // [statusId: 200] は Reply から取り除かれ、IsExcludeReply が true になる // 変更後の振り分け状態 Assert.Equal(new[] { 100L, 200L, 300L }, homeTab.StatusIds, AnyOrderComparer <long> .Instance); Assert.Equal(new[] { 100L, 300L }, replyTab.StatusIds, AnyOrderComparer <long> .Instance); // [statusId: 100] は IsExcludeReply が false の状態になる Assert.False(this.tabinfo[100L].IsExcludeReply); // [statusId: 200] は IsExcludeReply が true の状態になる Assert.True(this.tabinfo[200L].IsExcludeReply); }
public void FilterAll_CopyAndMarkFilterTest() { var homeTab = this.tabinfo.GetTabByType(MyCommon.TabUsageType.Home); var myTab1 = new FilterTabModel("MyTab1"); this.tabinfo.AddTab(myTab1); var filter = new PostFilterRule { FilterName = "aaa", // コピー+マーク MoveMatches = false, MarkMatches = true, }; myTab1.AddFilter(filter); myTab1.FilterModified = false; this.tabinfo.AddPost(new PostClass { StatusId = 100L, ScreenName = "aaa" }); this.tabinfo.AddPost(new PostClass { StatusId = 200L, ScreenName = "bbb" }); this.tabinfo.AddPost(new PostClass { StatusId = 300L, ScreenName = "ccc" }); this.tabinfo.DistributePosts(); this.tabinfo.SubmitUpdate(); // この時点での振り分け状態 Assert.Equal(new[] { 100L, 200L, 300L }, homeTab.StatusIds, AnyOrderComparer <long> .Instance); Assert.Equal(new[] { 100L }, myTab1.StatusIds); // フィルタを変更する filter.FilterName = "bbb"; // フィルタの変更を反映 this.tabinfo.FilterAll(); this.tabinfo.DistributePosts(); this.tabinfo.SubmitUpdate(); // 期待する動作: // [statusId: 100] は MyTab1 から取り除かれる // [statusId: 200] は Recent から MyTab1 にコピーされ、マークが付与される // 変更後の振り分け状態 Assert.Equal(new[] { 100L, 200L, 300L }, homeTab.StatusIds, AnyOrderComparer <long> .Instance); Assert.Equal(new[] { 200L }, myTab1.StatusIds); // [statusId: 200] は IsMark が true の状態になる Assert.True(this.tabinfo[200L].IsMark); }
public void AddFilter_Test() { var tab = new FilterTabModel("MyTab"); var filter = new PostFilterRule(); tab.AddFilter(filter); Assert.Equal(new[] { filter }, tab.FilterArray); Assert.True(tab.FilterModified); }
public void FilterAll_MoveFilterTest() { var homeTab = this.tabinfo.HomeTab; var myTab1 = new FilterTabModel("MyTab1"); this.tabinfo.AddTab(myTab1); var filter = new PostFilterRule { FilterName = "aaa", // マッチしたら移動 MoveMatches = true, }; myTab1.AddFilter(filter); myTab1.FilterModified = false; this.tabinfo.AddPost(new PostClass { StatusId = 100L, ScreenName = "aaa" }); this.tabinfo.AddPost(new PostClass { StatusId = 200L, ScreenName = "bbb" }); this.tabinfo.AddPost(new PostClass { StatusId = 300L, ScreenName = "ccc" }); this.tabinfo.DistributePosts(); this.tabinfo.SubmitUpdate(); // この時点での振り分け状態 Assert.Equal(new[] { 200L, 300L }, homeTab.StatusIds, AnyOrderComparer <long> .Instance); Assert.Equal(new[] { 100L }, myTab1.StatusIds); // フィルタを変更する filter.FilterName = "bbb"; // フィルタの変更を反映 this.tabinfo.FilterAll(); this.tabinfo.DistributePosts(); this.tabinfo.SubmitUpdate(); // 期待する動作: // [statusId: 100] は MyTab1 から取り除かれて Recent に戻される // [statusId: 200] は Recent から MyTab1 に移動される // 変更後の振り分け状態 Assert.Equal(new[] { 100L, 300L }, homeTab.StatusIds, AnyOrderComparer <long> .Instance); Assert.Equal(new[] { 200L }, myTab1.StatusIds); }
public void OnFilterModified_Test() { var tab = new FilterTabModel("MyTab"); var filter = new PostFilterRule(); tab.FilterArray = new[] { filter }; tab.FilterModified = false; // TabClass に紐付いているフィルタを変更 filter.FilterSource = "OpenTween"; Assert.True(tab.FilterModified); }
public void RemoveFilter_Test() { var tab = new FilterTabModel("MyTab"); var filter = new PostFilterRule(); tab.FilterArray = new[] { filter }; tab.FilterModified = false; tab.RemoveFilter(filter); Assert.Empty(tab.FilterArray); Assert.True(tab.FilterModified); }
public bool AddFilter(PostFilterRule filter) { lock (this.lockObjFilters) { if (_filters.Contains(filter)) { return(false); } filter.PropertyChanged += this.OnFilterModified; _filters.Add(filter); this.FilterModified = true; return(true); } }
public void OnFilterModified_DetachedTest() { var tab = new FilterTabModel("MyTab"); var filter = new PostFilterRule(); tab.FilterArray = new[] { filter }; tab.RemoveFilter(filter); tab.FilterModified = false; // TabClass から既に削除されたフィルタを変更 filter.FilterSource = "OpenTween"; Assert.False(tab.FilterModified); }
public void FilterAll_MoveFilterTest2() { var homeTab = this.tabinfo.GetTabByType(MyCommon.TabUsageType.Home); var myTab1 = new FilterTabModel("MyTab1"); var myTab2 = new FilterTabModel("MyTab2"); this.tabinfo.AddTab(myTab1); this.tabinfo.AddTab(myTab2); var filter1 = new PostFilterRule { FilterName = "aaa", // マッチしたら移動 MoveMatches = true, }; myTab1.AddFilter(filter1); myTab1.FilterModified = false; var filter2 = new PostFilterRule { FilterName = "bbb", // マッチしたら移動 MoveMatches = true, }; myTab2.AddFilter(filter2); myTab2.FilterModified = false; this.tabinfo.AddPost(new PostClass { StatusId = 100L, ScreenName = "aaa" }); this.tabinfo.AddPost(new PostClass { StatusId = 200L, ScreenName = "bbb" }); this.tabinfo.AddPost(new PostClass { StatusId = 300L, ScreenName = "ccc" }); this.tabinfo.DistributePosts(); this.tabinfo.SubmitUpdate(); // この時点での振り分け状態 Assert.Equal(new[] { 300L }, homeTab.StatusIds); Assert.Equal(new[] { 100L }, myTab1.StatusIds); Assert.Equal(new[] { 200L }, myTab2.StatusIds); // MyTab1 のフィルタを変更する filter1.FilterName = "bbb"; // MyTab2 のフィルタを変更する filter2.FilterName = "ccc"; // フィルタの変更を反映 this.tabinfo.FilterAll(); this.tabinfo.DistributePosts(); this.tabinfo.SubmitUpdate(); // 期待する動作: // [statusId: 100] は MyTab1 から取り除かれて Recent に戻される // [statusId: 200] は MyTab1 に移動される // [statusId: 200] は MyTab2 から取り除かれるが MyTab1 に移動されているので Recent には戻さない // [statusId: 300] は Recent から MyTab2 に移動される // 変更後の振り分け状態 Assert.Equal(new[] { 100L }, homeTab.StatusIds); Assert.Equal(new[] { 200L }, myTab1.StatusIds); Assert.Equal(new[] { 300L }, myTab2.StatusIds); }