// 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.Windows.Forms;
using Xunit;
using Xunit.Extensions;
namespace OpenTween
{
public class HashtagManageTest
{
// _isPermanent絡みの挙動が謎すぎて全然網羅できてない
[Fact]
public void InitHashtagHistory_Test()
{
var hashtags = new[] { "#foo", "#bar" };
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, hashtags, "", false, false, false);
hashDialog.RunSilent = true;
Assert.Equal(new[] { "#foo", "#bar" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#foo", "#bar" }, hashDialog.HashHistories);
}
[Fact]
public void InitHashtagHistory_EmptyTest()
{
var hashtags = Array.Empty();
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, hashtags, "", false, false, false);
hashDialog.RunSilent = true;
Assert.Empty(hashDialog.HistoryHashList.Items);
Assert.Empty(hashDialog.HashHistories);
}
[Fact]
public void AddHashtag_Test()
{
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, Array.Empty(), "", false, false, false);
hashDialog.RunSilent = true;
TestUtils.FireEvent(hashDialog.AddButton, "Click"); // 「新規 (&N)」ボタン
hashDialog.UseHashText.Text = "#OpenTween";
TestUtils.FireEvent(hashDialog.PermOK_Button, "Click"); // 「詳細」グループ内の「OK」ボタン
Assert.Equal(new[] { "#OpenTween" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#OpenTween" }, hashDialog.HashHistories);
}
[Fact]
public void AddHashtag_FullWidthTest()
{
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, Array.Empty(), "", false, false, false);
hashDialog.RunSilent = true;
TestUtils.FireEvent(hashDialog.AddButton, "Click"); // 「新規 (&N)」ボタン
hashDialog.UseHashText.Text = "#ほげほげ";
TestUtils.FireEvent(hashDialog.PermOK_Button, "Click"); // 「詳細」グループ内の「OK」ボタン
Assert.Equal(new[] { "#ほげほげ" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#ほげほげ" }, hashDialog.HashHistories);
}
[Fact]
public void AddHashtag_CombiningCharacterSequenceTest()
{
// ハッシュタグを表す「#」の直後に結合文字 (濁点など) が続いた場合に対するテスト
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, Array.Empty(), "", false, false, false);
hashDialog.RunSilent = true;
TestUtils.FireEvent(hashDialog.AddButton, "Click"); // 「新規 (&N)」ボタン
// どんちき└(^ω^ )┐♫ ┌( ^ω^)┘♫どんちき
hashDialog.UseHashText.Text = "#゛t゛e゛s゛a゛b゛u゛";
TestUtils.FireEvent(hashDialog.PermOK_Button, "Click"); // 「詳細」グループ内の「OK」ボタン
Assert.Equal(new[] { "#゛t゛e゛s゛a゛b゛u゛" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#゛t゛e゛s゛a゛b゛u゛" }, hashDialog.HashHistories);
}
[Fact]
public void AddHashtag_MultipleTest()
{
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, Array.Empty(), "", false, false, false);
hashDialog.RunSilent = true;
TestUtils.FireEvent(hashDialog.AddButton, "Click"); // 「新規 (&N)」ボタン
hashDialog.UseHashText.Text = "#foo #bar";
TestUtils.FireEvent(hashDialog.PermOK_Button, "Click"); // 「詳細」グループ内の「OK」ボタン
Assert.Equal(new[] { "#foo #bar" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#foo #bar" }, hashDialog.HashHistories);
}
[Fact]
public void AddHashtag_InvalidTest()
{
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, Array.Empty(), "", false, false, false);
hashDialog.RunSilent = true;
TestUtils.FireEvent(hashDialog.AddButton, "Click"); // 「新規 (&N)」ボタン
hashDialog.UseHashText.Text = "hogehoge";
TestUtils.FireEvent(hashDialog.PermOK_Button, "Click"); // 「詳細」グループ内の「OK」ボタン
// 実際にはここでエラーメッセージが出る
Assert.Empty(hashDialog.HistoryHashList.Items);
Assert.Empty(hashDialog.HashHistories);
}
[Fact]
public void EditHashtag_Test()
{
var hashtags = new[] { "#foo", "#bar" };
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, hashtags, "", false, false, false);
hashDialog.RunSilent = true;
hashDialog.HistoryHashList.SelectedIndices.Add(0);
TestUtils.FireEvent(hashDialog.EditButton, "Click"); // 「編集(&E)」ボタン
hashDialog.UseHashText.Text = "#hoge";
TestUtils.FireEvent(hashDialog.PermOK_Button, "Click"); // 「詳細」グループ内の「OK」ボタン
Assert.Equal(new[] { "#hoge", "#bar" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#hoge", "#bar" }, hashDialog.HashHistories);
}
[Fact]
public void DeleteHashtag_Test()
{
var hashtags = new[] { "#foo", "#bar" };
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, hashtags, "", false, false, false);
hashDialog.RunSilent = true;
hashDialog.HistoryHashList.SelectedIndices.Add(1);
TestUtils.FireEvent(hashDialog.DeleteButton, "Click"); // 「削除(&D)」ボタン
Assert.Equal(new[] { "#foo" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#foo" }, hashDialog.HashHistories);
}
[Fact]
public void DeleteHashtag_MultipleTest()
{
var hashtags = new[] { "#foo", "#bar", "#baz" };
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, hashtags, "", false, false, false);
hashDialog.RunSilent = true;
hashDialog.HistoryHashList.SelectedIndices.Add(2);
hashDialog.HistoryHashList.SelectedIndices.Add(1);
TestUtils.FireEvent(hashDialog.DeleteButton, "Click"); // 「削除(&D)」ボタン
Assert.Equal(new[] { "#foo" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#foo" }, hashDialog.HashHistories);
}
[Fact]
public void DeleteHashtag_NotSelectTest()
{
var hashtags = new[] { "#foo", "#bar" };
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, hashtags, "", false, false, false);
hashDialog.RunSilent = true;
// ハッシュタグを選択していない状態
TestUtils.FireEvent(hashDialog.DeleteButton, "Click"); // 「削除(&D)」ボタン
Assert.Equal(new[] { "#foo", "#bar" }, hashDialog.HistoryHashList.Items.Cast());
Assert.Equal(new[] { "#foo", "#bar" }, hashDialog.HashHistories);
}
[Fact]
public void UnSelectButton_Test()
{
var hashtags = new[] { "#foo" };
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, hashtags, "", false, false, false);
hashDialog.RunSilent = true;
hashDialog.HistoryHashList.SelectedIndices.Add(0);
TestUtils.FireEvent(hashDialog.UnSelectButton, "Click"); // 「非使用(&U)」ボタン
Assert.Empty(hashDialog.HistoryHashList.SelectedIndices);
}
[Fact]
public void EditModeSwitch_Test()
{
using var atDialog = new AtIdSupplement();
using var hashDialog = new HashtagManage(atDialog, Array.Empty(), "", false, false, false);
hashDialog.RunSilent = true;
Assert.True(hashDialog.GroupHashtag.Enabled);
Assert.True(hashDialog.TableLayoutButtons.Enabled);
Assert.False(hashDialog.GroupDetail.Enabled);
TestUtils.FireEvent(hashDialog.AddButton, "Click"); // 「新規 (&N)」ボタン
// 編集モードに入る
Assert.False(hashDialog.GroupHashtag.Enabled);
Assert.False(hashDialog.TableLayoutButtons.Enabled);
Assert.True(hashDialog.GroupDetail.Enabled);
hashDialog.UseHashText.Text = "#hogehoge";
TestUtils.FireEvent(hashDialog.PermOK_Button, "Click"); // 「詳細」グループ内の「OK」ボタン
// 編集モードから抜ける
Assert.True(hashDialog.GroupHashtag.Enabled);
Assert.True(hashDialog.TableLayoutButtons.Enabled);
Assert.False(hashDialog.GroupDetail.Enabled);
}
}
}