using System.IO;
using System.Linq;
using System.Reflection;
+using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using OpenTween.Api;
+using Moq;
+using OpenTween.Api.DataModel;
using Xunit;
namespace OpenTween
{
public class MediaSelectorTest
{
+ public MediaSelectorTest()
+ {
+ this.MyCommonSetup();
+ }
+
+ private void MyCommonSetup()
+ {
+ var mockAssembly = new Mock<_Assembly>();
+ mockAssembly.Setup(m => m.GetName()).Returns(new AssemblyName("OpenTween"));
+
+ MyCommon.EntryAssembly = mockAssembly.Object;
+ }
+
[Fact]
public void Initialize_TwitterTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector())
{
- var twitter = new Twitter();
- var config = TwitterConfiguration.DefaultConfiguration();
- mediaSelector.Initialize(twitter, config, "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
Assert.NotEqual(-1, mediaSelector.ImageServiceCombo.Items.IndexOf("Twitter"));
// ページ番号が初期化された状態
var pages = mediaSelector.ImagePageCombo.Items;
Assert.Equal(new[] { "1" }, pages.Cast<object>().Select(x => x.ToString()));
+
+ // 代替テキストの入力欄が表示された状態
+ Assert.True(mediaSelector.AlternativeTextPanel.Visible);
}
}
[Fact]
- public void Initialize_yfrogTest()
+ public void Initialize_ImgurTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector())
{
- var twitter = new Twitter();
- var config = TwitterConfiguration.DefaultConfiguration();
- mediaSelector.Initialize(twitter, config, "yfrog");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Imgur");
- // 投稿先に yfrog が選択されている
- Assert.Equal("yfrog", mediaSelector.ImageServiceCombo.Text);
+ // 投稿先に Imgur が選択されている
+ Assert.Equal("Imgur", mediaSelector.ImageServiceCombo.Text);
// ページ番号が初期化された状態
var pages = mediaSelector.ImagePageCombo.Items;
Assert.Equal(new[] { "1" }, pages.Cast<object>().Select(x => x.ToString()));
+
+ // 代替テキストの入力欄が非表示の状態
+ Assert.False(mediaSelector.AlternativeTextPanel.Visible);
}
}
[Fact]
public void BeginSelection_BlankTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
-
- var eventCalled = false;
- mediaSelector.BeginSelecting += (o, e) => eventCalled = true;
-
- mediaSelector.BeginSelection();
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
- Assert.True(eventCalled);
+ Assert.Raises<EventArgs>(
+ x => mediaSelector.BeginSelecting += x,
+ x => mediaSelector.BeginSelecting -= x,
+ () => mediaSelector.BeginSelection()
+ );
Assert.True(mediaSelector.Visible);
Assert.True(mediaSelector.Enabled);
}
[Fact]
- public async Task BeginSelection_FilePathTest()
+ public void BeginSelection_FilePathTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
-
- var eventCalled = false;
- mediaSelector.BeginSelecting += (o, e) => eventCalled = true;
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
var images = new[] { "Resources/re.gif" };
- mediaSelector.BeginSelection(images);
- Assert.True(eventCalled);
+ Assert.Raises<EventArgs>(
+ x => mediaSelector.BeginSelecting += x,
+ x => mediaSelector.BeginSelecting -= x,
+ () => mediaSelector.BeginSelection(images)
+ );
Assert.True(mediaSelector.Visible);
Assert.True(mediaSelector.Enabled);
Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);
using (var imageStream = File.OpenRead("Resources/re.gif"))
- using (var image = await MemoryImage.CopyFromStreamAsync(imageStream).ConfigureAwait(false))
+ using (var image = MemoryImage.CopyFromStream(imageStream))
{
Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
}
[Fact]
public void BeginSelection_MemoryImageTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
-
- var eventCalled = false;
- mediaSelector.BeginSelecting += (o, e) => eventCalled = true;
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
using (var bitmap = new Bitmap(width: 200, height: 200))
{
- mediaSelector.BeginSelection(bitmap);
+ Assert.Raises<EventArgs>(
+ x => mediaSelector.BeginSelecting += x,
+ x => mediaSelector.BeginSelecting -= x,
+ () => mediaSelector.BeginSelection(bitmap)
+ );
}
- Assert.True(eventCalled);
-
Assert.True(mediaSelector.Visible);
Assert.True(mediaSelector.Enabled);
// 1 ページ目が表示されている
Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
- Assert.True(Regex.IsMatch(mediaSelector.ImagefilePathText.Text, @"^<>MemoryImage://\d+.png$"));
+ Assert.Matches(@"^<>MemoryImage://\d+.png$", mediaSelector.ImagefilePathText.Text);
using (var bitmap = new Bitmap(width: 200, height: 200))
using (var image = MemoryImage.CopyFromImage(bitmap))
}
[Fact]
- public async Task BeginSelection_MultiImageTest()
+ public void BeginSelection_MultiImageTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
var images = new[] { "Resources/re.gif", "Resources/re1.png" };
mediaSelector.BeginSelection(images);
Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);
using (var imageStream = File.OpenRead("Resources/re.gif"))
- using (var image = await MemoryImage.CopyFromStreamAsync(imageStream).ConfigureAwait(false))
+ using (var image = MemoryImage.CopyFromStream(imageStream))
{
Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
}
[Fact]
public void EndSelection_Test()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
mediaSelector.BeginSelection(new[] { "Resources/re.gif" });
var displayImage = mediaSelector.ImageSelectedPicture.Image; // 表示中の画像
- var eventCalled = false;
- mediaSelector.EndSelecting += (o, e) => eventCalled = true;
-
- mediaSelector.EndSelection();
-
- Assert.True(eventCalled);
+ Assert.Raises<EventArgs>(
+ x => mediaSelector.EndSelecting += x,
+ x => mediaSelector.EndSelecting -= x,
+ () => mediaSelector.EndSelection()
+ );
Assert.False(mediaSelector.Visible);
Assert.False(mediaSelector.Enabled);
}
[Fact]
- public async Task PageChange_Test()
+ public void PageChange_Test()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
var images = new[] { "Resources/re.gif", "Resources/re1.png" };
mediaSelector.BeginSelection(images);
Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);
using (var imageStream = File.OpenRead("Resources/re.gif"))
- using (var image = await MemoryImage.CopyFromStreamAsync(imageStream).ConfigureAwait(false))
+ using (var image = MemoryImage.CopyFromStream(imageStream))
{
Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
}
Assert.Equal(Path.GetFullPath("Resources/re1.png"), mediaSelector.ImagefilePathText.Text);
using (var imageStream = File.OpenRead("Resources/re1.png"))
- using (var image = await MemoryImage.CopyFromStreamAsync(imageStream).ConfigureAwait(false))
+ using (var image = MemoryImage.CopyFromStream(imageStream))
{
Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
}
}
[Fact]
+ public void PageChange_AlternativeTextTest()
+ {
+ using (var twitter = new Twitter())
+ using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
+ {
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
+
+ var images = new[] { "Resources/re.gif", "Resources/re1.png" };
+ mediaSelector.BeginSelection(images);
+
+ // 1 ページ目
+ mediaSelector.ImagePageCombo.SelectedIndex = 0;
+ mediaSelector.AlternativeTextBox.Text = "Page 1";
+ mediaSelector.ValidateChildren();
+
+ // 2 ページ目
+ mediaSelector.ImagePageCombo.SelectedIndex = 1;
+ mediaSelector.AlternativeTextBox.Text = "Page 2";
+ mediaSelector.ValidateChildren();
+
+ // 3 ページ目 (新規ページ)
+ mediaSelector.ImagePageCombo.SelectedIndex = 2;
+ mediaSelector.AlternativeTextBox.Text = "Page 3";
+ mediaSelector.ValidateChildren();
+
+ mediaSelector.ImagePageCombo.SelectedIndex = 0;
+ Assert.Equal("Page 1", mediaSelector.AlternativeTextBox.Text);
+
+ mediaSelector.ImagePageCombo.SelectedIndex = 1;
+ Assert.Equal("Page 2", mediaSelector.AlternativeTextBox.Text);
+
+ // 画像が指定されていないページは入力した代替テキストも保持されない
+ mediaSelector.ImagePageCombo.SelectedIndex = 2;
+ Assert.Equal("", mediaSelector.AlternativeTextBox.Text);
+ }
+ }
+
+ [Fact]
public void PageChange_ImageDisposeTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
var images = new[] { "Resources/re.gif", "Resources/re1.png" };
mediaSelector.BeginSelection(images);
}
[Fact]
- public async Task ImagePathInput_Test()
+ public void ImagePathInput_Test()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
mediaSelector.BeginSelection();
// 画像のファイルパスを入力
// 入力したパスの画像が表示される
using (var imageStream = File.OpenRead("Resources/re1.png"))
- using (var image = await MemoryImage.CopyFromStreamAsync(imageStream).ConfigureAwait(false))
+ using (var image = MemoryImage.CopyFromStream(imageStream))
{
Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
}
}
[Fact]
- public async Task ImagePathInput_ReplaceFileMediaItemTest()
+ public void ImagePathInput_ReplaceFileMediaItemTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
mediaSelector.BeginSelection(new[] { "Resources/re.gif" });
// 入力したパスの画像が表示される
using (var imageStream = File.OpenRead("Resources/re1.png"))
- using (var image2 = await MemoryImage.CopyFromStreamAsync(imageStream).ConfigureAwait(false))
+ using (var image2 = MemoryImage.CopyFromStream(imageStream))
{
Assert.Equal(image2, mediaSelector.ImageSelectedPicture.Image);
}
}
[Fact]
- public async Task ImagePathInput_ReplaceMemoryImageMediaItemTest()
+ public void ImagePathInput_ReplaceMemoryImageMediaItemTest()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
using (var bitmap = new Bitmap(width: 200, height: 200))
{
// 入力したパスの画像が表示される
using (var imageStream = File.OpenRead("Resources/re1.png"))
- using (var image2 = await MemoryImage.CopyFromStreamAsync(imageStream).ConfigureAwait(false))
+ using (var image2 = MemoryImage.CopyFromStream(imageStream))
{
Assert.Equal(image2, mediaSelector.ImageSelectedPicture.Image);
}
[Fact]
public void ImageServiceChange_Test()
{
+ using (var twitter = new Twitter())
using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
{
- mediaSelector.Initialize(new Twitter(), TwitterConfiguration.DefaultConfiguration(), "Twitter");
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
Assert.Equal("Twitter", mediaSelector.ServiceName);
Assert.Equal(new[] { "1", "2", "3" }, pages.Cast<object>().Select(x => x.ToString()));
Assert.True(mediaSelector.ImagePageCombo.Enabled);
- var eventCalled = false;
- mediaSelector.SelectedServiceChanged += (o, e) => eventCalled = true;
-
- // 投稿先を yfrog に変更
- mediaSelector.ImageServiceCombo.SelectedIndex =
- mediaSelector.ImageServiceCombo.Items.IndexOf("yfrog");
-
- Assert.True(eventCalled); // SelectedServiceChanged イベントが呼ばれる
+ // 投稿先を Imgur に変更
+ var imgurIndex = mediaSelector.ImageServiceCombo.Items.IndexOf("Imgur");
+ Assert.Raises<EventArgs>(
+ x => mediaSelector.SelectedServiceChanged += x,
+ x => mediaSelector.SelectedServiceChanged -= x,
+ () => mediaSelector.ImageServiceCombo.SelectedIndex = imgurIndex
+ );
// 1 ページ目のみ選択可能な状態 (Disabled)
pages = mediaSelector.ImagePageCombo.Items;