OSDN Git Service

OpenTween v1.4.2 リリース
[opentween/open-tween.git] / OpenTween.Tests / MediaSelectorTest.cs
index 77f94d6..20ed633 100644 (file)
@@ -5,24 +5,38 @@ using System.Drawing;
 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"));
 
@@ -32,40 +46,47 @@ namespace OpenTween
                 // ページ番号が初期化された状態
                 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);
@@ -82,19 +103,21 @@ namespace OpenTween
         }
 
         [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);
@@ -108,7 +131,7 @@ namespace OpenTween
                 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);
                 }
@@ -118,20 +141,21 @@ namespace OpenTween
         [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);
 
@@ -141,7 +165,7 @@ namespace OpenTween
 
                 // 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))
@@ -152,11 +176,13 @@ namespace OpenTween
         }
 
         [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);
@@ -170,7 +196,7 @@ namespace OpenTween
                 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);
                 }
@@ -180,19 +206,20 @@ namespace OpenTween
         [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);
@@ -202,11 +229,13 @@ namespace OpenTween
         }
 
         [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);
@@ -218,7 +247,7 @@ namespace OpenTween
                 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);
                 }
@@ -230,7 +259,7 @@ namespace OpenTween
                 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);
                 }
@@ -245,11 +274,52 @@ namespace OpenTween
         }
 
         [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);
@@ -273,11 +343,13 @@ namespace OpenTween
         }
 
         [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();
 
                 // 画像のファイルパスを入力
@@ -286,7 +358,7 @@ namespace OpenTween
 
                 // 入力したパスの画像が表示される
                 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);
                 }
@@ -298,11 +370,13 @@ namespace OpenTween
         }
 
         [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" });
 
@@ -315,7 +389,7 @@ namespace OpenTween
 
                 // 入力したパスの画像が表示される
                 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);
                 }
@@ -326,11 +400,13 @@ namespace OpenTween
         }
 
         [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))
                 {
@@ -351,7 +427,7 @@ namespace OpenTween
 
                 // 入力したパスの画像が表示される
                 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);
                 }
@@ -367,9 +443,11 @@ namespace OpenTween
         [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);
 
@@ -380,14 +458,13 @@ namespace OpenTween
                 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;