// OpenTween - Client of Twitter
// Copyright (c) 2014 kim_upsilon (@kim_upsilon)
// All rights reserved.
//
// This file is part of OpenTween.
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General public License as published by the Free
// Software Foundation; either version 3 of the License, or (at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General public License
// for more details.
//
// You should have received a copy of the GNU General public License along
// with this program. If not, see , or write to
// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
// Boston, MA 02110-1301, USA.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Xunit;
using Xunit.Extensions;
namespace OpenTween
{
public class TabClassTest
{
[Fact]
public void NextUnreadId_Test()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
tab.UnreadManage = true;
// 未読なし
Assert.Equal(-1L, tab.NextUnreadId);
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 100L,
IsRead = false, // 未読
});
tab.AddSubmit();
Assert.Equal(100L, tab.NextUnreadId);
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 50L,
IsRead = true, // 既読
});
tab.AddSubmit();
Assert.Equal(100L, tab.NextUnreadId);
}
[Fact]
public void NextUnreadId_DisabledTest()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
// 未読表示無効
tab.UnreadManage = false;
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 100L,
IsRead = false, // 未読
});
tab.AddSubmit();
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]
public void UnreadCount_Test()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
tab.UnreadManage = true;
// 未読なし
Assert.Equal(0, tab.UnreadCount);
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 100L,
IsRead = false, // 未読
});
tab.AddSubmit();
Assert.Equal(1, tab.UnreadCount);
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 50L,
IsRead = true, // 既読
});
tab.AddSubmit();
Assert.Equal(1, tab.UnreadCount);
}
[Fact]
public void UnreadCount_DisabledTest()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
// 未読表示無効
tab.UnreadManage = false;
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 100L,
IsRead = false, // 未読
});
tab.AddSubmit();
Assert.Equal(0, tab.UnreadCount);
}
[Fact]
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.NextUnreadIndex);
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 50L,
IsRead = true, // 既読
});
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 100L,
IsRead = false, // 未読
});
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 150L,
IsRead = false, // 未読
});
tab.AddSubmit();
Assert.Equal(1, tab.NextUnreadIndex);
}
[Fact]
public void NextUnreadIndex_DisabledTest()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
tab.SetSortMode(ComparerMode.Id, SortOrder.Ascending);
// 未読表示無効
tab.UnreadManage = false;
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 100L,
IsRead = false, // 未読
});
tab.AddSubmit();
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.Empty(tab.GetUnreadIds());
}
[Fact]
public void SetReadState_MarkAsReadTest()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
tab.UnreadManage = true;
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 100L,
IsRead = false, // 未読
});
tab.AddSubmit();
Assert.Equal(1, tab.UnreadCount);
tab.SetReadState(100L, true); // 既読にする
Assert.Equal(0, tab.UnreadCount);
}
[Fact]
public void SetReadState_MarkAsUnreadTest()
{
var tab = new TabClass { TabType = MyCommon.TabUsageType.UserTimeline };
tab.UnreadManage = true;
tab.AddPostToInnerStorage(new PostClass
{
StatusId = 100L,
IsRead = true, // 既読
});
tab.AddSubmit();
Assert.Equal(0, tab.UnreadCount);
tab.SetReadState(100L, false); // 未読にする
Assert.Equal(1, tab.UnreadCount);
}
[Fact]
public void FilterArraySetter_Test()
{
var tab = new TabClass();
var filter = new PostFilterRule();
tab.FilterArray = new[] { filter };
Assert.Equal(new[] { filter }, tab.FilterArray);
Assert.True(tab.FilterModified);
}
[Fact]
public void AddFilter_Test()
{
var tab = new TabClass();
var filter = new PostFilterRule();
tab.AddFilter(filter);
Assert.Equal(new[] { filter }, tab.FilterArray);
Assert.True(tab.FilterModified);
}
[Fact]
public void RemoveFilter_Test()
{
var tab = new TabClass();
var filter = new PostFilterRule();
tab.FilterArray = new[] { filter };
tab.FilterModified = false;
tab.RemoveFilter(filter);
Assert.Empty(tab.FilterArray);
Assert.True(tab.FilterModified);
}
[Fact]
public void OnFilterModified_Test()
{
var tab = new TabClass();
var filter = new PostFilterRule();
tab.FilterArray = new[] { filter };
tab.FilterModified = false;
// TabClass に紐付いているフィルタを変更
filter.FilterSource = "OpenTween";
Assert.True(tab.FilterModified);
}
[Fact]
public void OnFilterModified_DetachedTest()
{
var tab = new TabClass();
var filter = new PostFilterRule();
tab.FilterArray = new[] { filter };
tab.RemoveFilter(filter);
tab.FilterModified = false;
// TabClass から既に削除されたフィルタを変更
filter.FilterSource = "OpenTween";
Assert.False(tab.FilterModified);
}
}
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());
}
}
}