1 // ================================================================================================
3 // MediaWikiPageのテストクラスソース。</summary>
5 // <copyright file="MediaWikiPageTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Websites
14 using System.Collections.Generic;
15 using NUnit.Framework;
17 using Honememo.Utilities;
18 using Honememo.Wptscs.Models;
21 /// MediaWikiPageのテストクラスです。
24 public class MediaWikiPageTest
29 /// Websiteテスト用のモッククラスです。
31 public class DummySite : MediaWiki
38 /// <param name="lang">ウェブサイトの言語。</param>
39 public DummySite(Language lang)
51 /// <param name="title">ページタイトル。</param>
52 /// <returns>取得したページ。</returns>
53 /// <remarks>取得できない場合(通信エラーなど)は例外を投げる。</remarks>
54 public override Page GetPage(string title)
56 System.Diagnostics.Debug.WriteLine(title);
57 if (title == "Template:Test/doc")
59 return new MediaWikiPage(
62 "[[ja:テストページ]]<nowiki>[[zh:試験]]</nowiki><!--[[ru:test]]-->[[fr:Test_Fr]]");
65 return base.GetPage(title);
78 /// GetInterlanguageメソッドテストケース(通常ページ)。
81 public void TestGetInterlanguage()
84 MediaWikiPage page = new MediaWikiPage(new DummySite(new Language("en")), "TestTitle", "TestText\n"
85 + " [[ja:テストページ]]<nowiki>[[zh:試験]]</nowiki><!--[[ru:test]]-->[[fr:Test_Fr]]");
86 Assert.AreEqual("テストページ", page.GetInterlanguage("ja"));
87 Assert.AreEqual("Test_Fr", page.GetInterlanguage("fr"));
88 Assert.IsEmpty(page.GetInterlanguage("de"));
89 Assert.IsEmpty(page.GetInterlanguage("ru"));
90 Assert.IsEmpty(page.GetInterlanguage("zh"));
94 /// GetInterlanguageメソッドテストケース(通常ページ実データ使用)。
96 [Test, Timeout(20000)]
97 public void TestGetInterlanguageDiscoveryChannel()
99 MediaWikiPage page = (MediaWikiPage)new MockFactory().GetMediaWiki("en").GetPage("Discovery Channel");
100 Assert.AreEqual("ディスカバリーチャンネル", page.GetInterlanguage("ja"));
101 Assert.AreEqual("Discovery Channel (Italia)", page.GetInterlanguage("it"));
102 Assert.AreEqual("Discovery Channel", page.GetInterlanguage("simple"));
103 Assert.AreEqual("Discovery (телеканал)", page.GetInterlanguage("ru"));
104 Assert.IsEmpty(page.GetInterlanguage("io"));
108 /// GetInterlanguageメソッドテストケース(テンプレートページ実データ使用)。
110 [Test, Timeout(20000)]
111 public void TestGetInterlanguagePlanetboxBegin()
113 MediaWikiPage page = (MediaWikiPage)new MockFactory().GetMediaWiki("en").GetPage("Template:Planetbox begin");
114 Assert.AreEqual("Template:Planetbox begin", page.GetInterlanguage("ja"));
115 Assert.AreEqual("Шаблон:Planetbox begin", page.GetInterlanguage("ru"));
116 Assert.IsEmpty(page.GetInterlanguage("zh"));
120 /// GetInterlanguageメソッドテストケース(Template:Documentation使用ページ)。
123 public void TestGetInterlanguageDocumentation()
125 // Template:Documentation を使ってるページ
126 MediaWiki site = new DummySite(new Language("en"));
127 site.DocumentationTemplates.Add("Template:Documentation");
128 site.DocumentationTemplateDefaultPage = "/doc";
129 MediaWikiPage page = new MediaWikiPage(site, "Template:Test", "TestText{{Documentation}}");
131 Assert.AreEqual("テストページ", page.GetInterlanguage("ja"));
132 Assert.AreEqual("Test_Fr", page.GetInterlanguage("fr"));
133 Assert.IsEmpty(page.GetInterlanguage("de"));
134 Assert.IsEmpty(page.GetInterlanguage("ru"));
135 Assert.IsEmpty(page.GetInterlanguage("zh"));
139 /// IsRedirectメソッドテストケース。
142 public void TestIsRedirect()
144 MediaWiki site = new DummySite(new Language("en"));
145 MediaWikiPage page = new MediaWikiPage(site, "TestTitle", "#REDIRECT [[Test Redirect]]");
146 Assert.IsTrue(page.IsRedirect());
147 Assert.AreEqual("Test Redirect", page.Redirect.Title);
149 page = new MediaWikiPage(site, "TestTitle", "#転送 [[Test Redirect2]]");
150 Assert.IsFalse(page.IsRedirect());
152 site.Redirect = "#転送";
153 page = new MediaWikiPage(site, "TestTitle", "#転送 [[Test Redirect2]]");
154 Assert.IsTrue(page.IsRedirect());
155 Assert.AreEqual("Test Redirect2", page.Redirect.Title);
157 page = new MediaWikiPage(site, "TestTitle", "#REDIRECT [[Test Redirect3]]");
158 Assert.IsTrue(page.IsRedirect());
159 Assert.AreEqual("Test Redirect3", page.Redirect.Title);
161 page = new MediaWikiPage(site, "TestTitle", "#redirect [[Test Redirect4]]");
162 Assert.IsTrue(page.IsRedirect());
163 Assert.AreEqual("Test Redirect4", page.Redirect.Title);
168 #region 内部処理用メソッドテストケース
170 // 非公開メソッドについてはprotected以上、またはやりたい部分だけ実施
173 /// ValidateIncompleteメソッドテストケース(正常系)。
176 public void TestValidateIncomplete()
179 PrivateAccessor<MediaWikiPage> acc = new PrivateAccessor<MediaWikiPage>(
181 new MediaWiki(new Language("en")),
184 acc.SetMethod("ValidateIncomplete", new Type[0]);
185 acc.Invoke(new object[0]);
189 /// ValidateIncompleteメソッドテストケース(異常系)。
192 [ExpectedException(typeof(InvalidOperationException))]
193 public void TestValidateIncompleteNg()
196 PrivateAccessor<MediaWikiPage> acc = new PrivateAccessor<MediaWikiPage>(
197 new MediaWikiPage(new MediaWiki(new Language("en")), "TestTitle"));
198 acc.SetMethod("ValidateIncomplete");