2 using System.Collections.Generic;
3 using System.ComponentModel;
7 using System.Reflection;
8 using System.Runtime.InteropServices;
10 using System.Text.RegularExpressions;
12 using OpenTween.Api.DataModel;
17 public class MediaSelectorTest
19 public MediaSelectorTest()
24 public void MyCommonSetup()
26 var mockAssembly = new Mock<_Assembly>();
27 mockAssembly.Setup(m => m.GetName()).Returns(new AssemblyName("OpenTween"));
29 MyCommon.EntryAssembly = mockAssembly.Object;
33 public void Initialize_TwitterTest()
35 using (var twitter = new Twitter())
36 using (var mediaSelector = new MediaSelector())
38 twitter.Initialize("", "", "", 0L);
39 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
41 Assert.NotEqual(-1, mediaSelector.ImageServiceCombo.Items.IndexOf("Twitter"));
43 // 投稿先に Twitter が選択されている
44 Assert.Equal("Twitter", mediaSelector.ImageServiceCombo.Text);
47 var pages = mediaSelector.ImagePageCombo.Items;
48 Assert.Equal(new[] { "1" }, pages.Cast<object>().Select(x => x.ToString()));
53 public void Initialize_yfrogTest()
55 using (var twitter = new Twitter())
56 using (var mediaSelector = new MediaSelector())
58 twitter.Initialize("", "", "", 0L);
59 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "yfrog");
61 // 投稿先に yfrog が選択されている
62 Assert.Equal("yfrog", mediaSelector.ImageServiceCombo.Text);
65 var pages = mediaSelector.ImagePageCombo.Items;
66 Assert.Equal(new[] { "1" }, pages.Cast<object>().Select(x => x.ToString()));
71 public void BeginSelection_BlankTest()
73 using (var twitter = new Twitter())
74 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
76 twitter.Initialize("", "", "", 0L);
77 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
79 var eventCalled = false;
80 mediaSelector.BeginSelecting += (o, e) => eventCalled = true;
82 mediaSelector.BeginSelection();
84 Assert.True(eventCalled);
86 Assert.True(mediaSelector.Visible);
87 Assert.True(mediaSelector.Enabled);
90 var pages = mediaSelector.ImagePageCombo.Items;
91 Assert.Equal(new[] { "1" }, pages.Cast<object>().Select(x => x.ToString()));
94 Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
95 Assert.Equal("", mediaSelector.ImagefilePathText.Text);
96 Assert.Null(mediaSelector.ImageSelectedPicture.Image);
101 public void BeginSelection_FilePathTest()
103 using (var twitter = new Twitter())
104 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
106 twitter.Initialize("", "", "", 0L);
107 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
109 var eventCalled = false;
110 mediaSelector.BeginSelecting += (o, e) => eventCalled = true;
112 var images = new[] { "Resources/re.gif" };
113 mediaSelector.BeginSelection(images);
115 Assert.True(eventCalled);
117 Assert.True(mediaSelector.Visible);
118 Assert.True(mediaSelector.Enabled);
121 var pages = mediaSelector.ImagePageCombo.Items;
122 Assert.Equal(new[] { "1", "2" }, pages.Cast<object>().Select(x => x.ToString()));
125 Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
126 Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);
128 using (var imageStream = File.OpenRead("Resources/re.gif"))
129 using (var image = MemoryImage.CopyFromStream(imageStream))
131 Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
137 public void BeginSelection_MemoryImageTest()
139 using (var twitter = new Twitter())
140 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
142 twitter.Initialize("", "", "", 0L);
143 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
145 var eventCalled = false;
146 mediaSelector.BeginSelecting += (o, e) => eventCalled = true;
148 using (var bitmap = new Bitmap(width: 200, height: 200))
150 mediaSelector.BeginSelection(bitmap);
153 Assert.True(eventCalled);
155 Assert.True(mediaSelector.Visible);
156 Assert.True(mediaSelector.Enabled);
159 var pages = mediaSelector.ImagePageCombo.Items;
160 Assert.Equal(new[] { "1", "2" }, pages.Cast<object>().Select(x => x.ToString()));
163 Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
164 Assert.True(Regex.IsMatch(mediaSelector.ImagefilePathText.Text, @"^<>MemoryImage://\d+.png$"));
166 using (var bitmap = new Bitmap(width: 200, height: 200))
167 using (var image = MemoryImage.CopyFromImage(bitmap))
169 Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
175 public void BeginSelection_MultiImageTest()
177 using (var twitter = new Twitter())
178 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
180 twitter.Initialize("", "", "", 0L);
181 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
183 var images = new[] { "Resources/re.gif", "Resources/re1.png" };
184 mediaSelector.BeginSelection(images);
187 var pages = mediaSelector.ImagePageCombo.Items;
188 Assert.Equal(new[] { "1", "2", "3" }, pages.Cast<object>().Select(x => x.ToString()));
191 Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
192 Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);
194 using (var imageStream = File.OpenRead("Resources/re.gif"))
195 using (var image = MemoryImage.CopyFromStream(imageStream))
197 Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
203 public void EndSelection_Test()
205 using (var twitter = new Twitter())
206 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
208 twitter.Initialize("", "", "", 0L);
209 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
210 mediaSelector.BeginSelection(new[] { "Resources/re.gif" });
212 var displayImage = mediaSelector.ImageSelectedPicture.Image; // 表示中の画像
214 var eventCalled = false;
215 mediaSelector.EndSelecting += (o, e) => eventCalled = true;
217 mediaSelector.EndSelection();
219 Assert.True(eventCalled);
221 Assert.False(mediaSelector.Visible);
222 Assert.False(mediaSelector.Enabled);
224 Assert.True(displayImage.IsDisposed);
229 public void PageChange_Test()
231 using (var twitter = new Twitter())
232 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
234 twitter.Initialize("", "", "", 0L);
235 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
237 var images = new[] { "Resources/re.gif", "Resources/re1.png" };
238 mediaSelector.BeginSelection(images);
240 mediaSelector.ImagePageCombo.SelectedIndex = 0;
243 Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
244 Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);
246 using (var imageStream = File.OpenRead("Resources/re.gif"))
247 using (var image = MemoryImage.CopyFromStream(imageStream))
249 Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
252 mediaSelector.ImagePageCombo.SelectedIndex = 1;
255 Assert.Equal("2", mediaSelector.ImagePageCombo.Text);
256 Assert.Equal(Path.GetFullPath("Resources/re1.png"), mediaSelector.ImagefilePathText.Text);
258 using (var imageStream = File.OpenRead("Resources/re1.png"))
259 using (var image = MemoryImage.CopyFromStream(imageStream))
261 Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
264 mediaSelector.ImagePageCombo.SelectedIndex = 2;
267 Assert.Equal("3", mediaSelector.ImagePageCombo.Text);
268 Assert.Equal("", mediaSelector.ImagefilePathText.Text);
269 Assert.Null(mediaSelector.ImageSelectedPicture.Image);
274 public void PageChange_ImageDisposeTest()
276 using (var twitter = new Twitter())
277 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
279 twitter.Initialize("", "", "", 0L);
280 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
282 var images = new[] { "Resources/re.gif", "Resources/re1.png" };
283 mediaSelector.BeginSelection(images);
285 mediaSelector.ImagePageCombo.SelectedIndex = 0;
288 var page1Image = mediaSelector.ImageSelectedPicture.Image;
290 mediaSelector.ImagePageCombo.SelectedIndex = 1;
293 var page2Image = mediaSelector.ImageSelectedPicture.Image;
294 Assert.True(page1Image.IsDisposed); // 前ページの画像が破棄されているか
296 mediaSelector.ImagePageCombo.SelectedIndex = 2;
299 Assert.True(page2Image.IsDisposed); // 前ページの画像が破棄されているか
304 public void ImagePathInput_Test()
306 using (var twitter = new Twitter())
307 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
309 twitter.Initialize("", "", "", 0L);
310 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
311 mediaSelector.BeginSelection();
314 mediaSelector.ImagefilePathText.Text = Path.GetFullPath("Resources/re1.png");
315 TestUtils.Validate(mediaSelector.ImagefilePathText);
318 using (var imageStream = File.OpenRead("Resources/re1.png"))
319 using (var image = MemoryImage.CopyFromStream(imageStream))
321 Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
325 var pages = mediaSelector.ImagePageCombo.Items;
326 Assert.Equal(new[] { "1", "2" }, pages.Cast<object>().Select(x => x.ToString()));
331 public void ImagePathInput_ReplaceFileMediaItemTest()
333 using (var twitter = new Twitter())
334 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
336 twitter.Initialize("", "", "", 0L);
337 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
339 mediaSelector.BeginSelection(new[] { "Resources/re.gif" });
341 // 既に入力されているファイルパスの画像
342 var image1 = mediaSelector.ImageSelectedPicture.Image;
345 mediaSelector.ImagefilePathText.Text = Path.GetFullPath("Resources/re1.png");
346 TestUtils.Validate(mediaSelector.ImagefilePathText);
349 using (var imageStream = File.OpenRead("Resources/re1.png"))
350 using (var image2 = MemoryImage.CopyFromStream(imageStream))
352 Assert.Equal(image2, mediaSelector.ImageSelectedPicture.Image);
355 // 最初に入力されていたファイルパスの表示用の MemoryImage は破棄される
356 Assert.True(image1.IsDisposed);
361 public void ImagePathInput_ReplaceMemoryImageMediaItemTest()
363 using (var twitter = new Twitter())
364 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
366 twitter.Initialize("", "", "", 0L);
367 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
369 using (var bitmap = new Bitmap(width: 200, height: 200))
371 mediaSelector.BeginSelection(bitmap);
374 // 既に入力されているファイルパスの画像
375 var image1 = mediaSelector.ImageSelectedPicture.Image;
377 // 内部で保持されている MemoryImageMediaItem を取り出す
378 var selectedMedia = mediaSelector.ImagePageCombo.SelectedItem;
379 var mediaProperty = selectedMedia.GetType().GetProperty("Item");
380 var mediaItem = (MemoryImageMediaItem)mediaProperty.GetValue(selectedMedia);
383 mediaSelector.ImagefilePathText.Text = Path.GetFullPath("Resources/re1.png");
384 TestUtils.Validate(mediaSelector.ImagefilePathText);
387 using (var imageStream = File.OpenRead("Resources/re1.png"))
388 using (var image2 = MemoryImage.CopyFromStream(imageStream))
390 Assert.Equal(image2, mediaSelector.ImageSelectedPicture.Image);
393 // 最初に入力されていたファイルパスの表示用の MemoryImage は破棄される
394 Assert.True(image1.IsDisposed);
396 // 参照されなくなった MemoryImageMediaItem も破棄される
397 Assert.True(mediaItem.IsDisposed);
402 public void ImageServiceChange_Test()
404 using (var twitter = new Twitter())
405 using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
407 twitter.Initialize("", "", "", 0L);
408 mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
410 Assert.Equal("Twitter", mediaSelector.ServiceName);
412 mediaSelector.BeginSelection(new[] { "Resources/re.gif", "Resources/re1.png" });
415 var pages = mediaSelector.ImagePageCombo.Items;
416 Assert.Equal(new[] { "1", "2", "3" }, pages.Cast<object>().Select(x => x.ToString()));
417 Assert.True(mediaSelector.ImagePageCombo.Enabled);
419 var eventCalled = false;
420 mediaSelector.SelectedServiceChanged += (o, e) => eventCalled = true;
423 mediaSelector.ImageServiceCombo.SelectedIndex =
424 mediaSelector.ImageServiceCombo.Items.IndexOf("yfrog");
426 Assert.True(eventCalled); // SelectedServiceChanged イベントが呼ばれる
428 // 1 ページ目のみ選択可能な状態 (Disabled)
429 pages = mediaSelector.ImagePageCombo.Items;
430 Assert.Equal(new[] { "1" }, pages.Cast<object>().Select(x => x.ToString()));
431 Assert.False(mediaSelector.ImagePageCombo.Enabled);
434 mediaSelector.ImageServiceCombo.SelectedIndex =
435 mediaSelector.ImageServiceCombo.Items.IndexOf("Twitter");
438 pages = mediaSelector.ImagePageCombo.Items;
439 Assert.Equal(new[] { "1", "2" }, pages.Cast<object>().Select(x => x.ToString()));
440 Assert.True(mediaSelector.ImagePageCombo.Enabled);