using System;
using System.Collections.Generic;
using Honememo.Parsers;
- using Honememo.Tests;
using Honememo.Utilities;
using Honememo.Wptscs.Models;
using Honememo.Wptscs.Parsers;
using NUnit.Framework;
/// <summary>
- /// MediaWikiPageのテストクラスです。
+ /// <see cref="MediaWikiPage"/>のテストクラスです。
/// </summary>
[TestFixture]
- public class MediaWikiPageTest
+ class MediaWikiPageTest
{
#region コンストラクタテストケース
public void TestConstructorWebsiteTitleTextTimestamp()
{
DateTime t = DateTime.Now;
- MediaWiki s = new DummySite(new Language("en"));
+ MediaWiki s = new MediaWiki(new Language("en"));
MediaWikiPage page = new MediaWikiPage(s, "TestTitle", "TestText", t);
Assert.AreSame(s, page.Website);
Assert.AreEqual("TestTitle", page.Title);
[Test]
public void TestConstructorWebsiteTitleText()
{
- MediaWiki s = new DummySite(new Language("en"));
+ MediaWiki s = new MediaWiki(new Language("en"));
MediaWikiPage page = new MediaWikiPage(s, "TestTitle", "TestText");
Assert.AreEqual(s, page.Website);
Assert.AreEqual("TestTitle", page.Title);
[Test]
public void TestConstructorWebsiteTitle()
{
- MediaWiki s = new DummySite(new Language("en"));
+ MediaWiki s = new MediaWiki(new Language("en"));
MediaWikiPage page = new MediaWikiPage(s, "TestTitle");
Assert.AreEqual(s, page.Website);
Assert.AreEqual("TestTitle", page.Title);
[ExpectedException(typeof(ArgumentException))]
public void TestConstructorTitleBlank()
{
- new MediaWikiPage(new DummySite(new Language("en")), " ");
+ new MediaWikiPage(new MediaWiki(new Language("en")), " ");
}
#endregion
#region プロパティテストケース
/// <summary>
- /// Redirectプロパティテストケース(正常系)。
+ /// <see cref="MediaWikiPage.Redirect"/>プロパティテストケース(正常系)。
/// </summary>
[Test]
public void TestRedirect()
}
/// <summary>
- /// Redirectプロパティテストケース(Text未設定)。
+ /// <see cref="MediaWikiPage.Redirect"/>プロパティテストケース(Text未設定)。
/// </summary>
[Test]
[ExpectedException(typeof(InvalidOperationException))]
MediaWikiLink dummy = new MediaWikiPage(new MockFactory().GetMediaWiki("en"), "TestTitle").Redirect;
}
- /// <summary>
- /// Elementプロパティテストケース(正常系)。
- /// </summary>
- [Test]
- public void TestElement()
- {
- IElement element = new MediaWikiPage(new MockFactory().GetMediaWiki("en"), "TestTitle", "'''Title''' is [[xxx]].").Element;
- Assert.IsNotNull(element);
- Assert.AreEqual("'''Title''' is [[xxx]].", element.ToString());
- Assert.IsInstanceOf(typeof(ListElement), element);
- ListElement list = (ListElement)element;
- Assert.AreEqual(3, list.Count);
- Assert.AreEqual("'''Title''' is ", list[0].ToString());
- Assert.AreEqual("[[xxx]]", list[1].ToString());
- Assert.IsInstanceOf(typeof(MediaWikiLink), list[1]);
- Assert.AreEqual(".", list[2].ToString());
- }
-
- /// <summary>
- /// Elementプロパティテストケース(Text未設定)。
- /// </summary>
- [Test]
- [ExpectedException(typeof(InvalidOperationException))]
- public void TestElementTextNull()
- {
- IElement dummy = new MediaWikiPage(new MockFactory().GetMediaWiki("en"), "TestTitle").Element;
- }
-
#endregion
#region 公開メソッドテストケース
/// <summary>
- /// GetInterlanguageメソッドテストケース(通常ページ)。
+ /// <see cref="MediaWikiPage.GetInterlanguage"/>メソッドテストケース(通常ページ)。
/// </summary>
[Test]
public void TestGetInterlanguage()
{
// 普通のページ
MediaWikiPage page = new MediaWikiPage(
- new DummySite(new Language("en")),
+ new MediaWiki(new Language("en")),
"TestTitle",
"TestText\n [[ja:テストページ]]<nowiki>[[zh:試験]]</nowiki><!--[[ru:test]]-->[[fr:Test_Fr]]");
Assert.AreEqual("[[ja:テストページ]]", page.GetInterlanguage("ja").ToString());
}
/// <summary>
- /// GetInterlanguageメソッドテストケース(通常ページ実データ使用)。
+ /// <see cref="MediaWikiPage.GetInterlanguage"/>メソッドテストケース(通常ページ実データ使用)。
/// </summary>
[Test, Timeout(20000)]
public void TestGetInterlanguageDiscoveryChannel()
}
/// <summary>
- /// GetInterlanguageメソッドテストケース(テンプレートページ実データ使用)。
+ /// <see cref="MediaWikiPage.GetInterlanguage"/>メソッドテストケース(テンプレートページ実データ使用)。
/// </summary>
[Test, Timeout(20000)]
public void TestGetInterlanguagePlanetboxBegin()
}
/// <summary>
- /// GetInterlanguageメソッドテストケース(Template:Documentation使用ページ)。
+ /// <see cref="MediaWikiPage.GetInterlanguage"/>メソッドテストケース(Template:Documentation使用ページ)。
/// </summary>
[Test]
public void TestGetInterlanguageDocumentation()
}
/// <summary>
- /// IsRedirectメソッドテストケース。
+ /// <see cref="MediaWikiPage.GetInterlanguage"/>メソッドテストケース(Template:Documentationにnoincludeで囲まれた言語間リンクが存在)。
+ /// </summary>
+ [Test]
+ public void TestGetInterlanguagePartial()
+ {
+ MediaWikiPage page = (MediaWikiPage)new MockFactory().GetMediaWiki("en").GetPage("Template:Partial");
+ Assert.AreEqual("[[ja:Template:Partial]]", page.GetInterlanguage("ja").ToString());
+ Assert.IsNull(page.GetInterlanguage("ru"));
+ }
+
+ /// <summary>
+ /// <see cref="MediaWikiPage.IsRedirect"/>メソッドテストケース。
/// </summary>
[Test]
public void TestIsRedirect()
{
- MediaWiki site = new DummySite(new Language("en"));
+ MediaWiki site = new MediaWiki(new Language("en"));
MediaWikiPage page = new MediaWikiPage(site, "TestTitle", "#REDIRECT [[Test Redirect]]");
Assert.IsTrue(page.IsRedirect());
Assert.AreEqual("Test Redirect", page.Redirect.Title);
}
/// <summary>
- /// Normalizeメソッドテストケース。
+ /// <see cref="MediaWikiPage.Normalize"/>メソッドテストケース。
/// </summary>
[Test]
public void TestNormalize()
{
- MediaWiki site = new DummySite(new Language("en"));
+ MediaWiki site = new MediaWiki(new Language("en"));
MediaWikiPage page = new MediaWikiPage(site, "A/b/c");
// サブページの正規化
// 非公開メソッドについてはprotected以上、またはやりたい部分だけ実施
/// <summary>
- /// ValidateIncompleteメソッドテストケース(正常系)。
+ /// <see cref="MediaWikiPage.ValidateIncomplete"/>メソッドテストケース(正常系)。
/// </summary>
[Test]
public void TestValidateIncomplete()
{
- // 正常系は例外が発生しなければOK
- PrivateAccessor<MediaWikiPage> acc = new PrivateAccessor<MediaWikiPage>(
- new MediaWikiPage(
- new MediaWiki(new Language("en")),
- "TestTitle",
- "TestText"));
- acc.SetMethod("ValidateIncomplete", new Type[0]);
- acc.Invoke(new object[0]);
+ // Textが空の場合例外発生、正常系は例外が発生しなければOK
+ MediaWikiPageMock page = new MediaWikiPageMock(new MediaWiki(new Language("en")), "TestTitle");
+ page.Text = "TestText";
+ page.ValidateIncomplete();
}
/// <summary>
- /// ValidateIncompleteメソッドテストケース(異常系)。
+ /// <see cref="MediaWikiPage.ValidateIncomplete"/>メソッドテストケース(異常系)。
/// </summary>
[Test]
[ExpectedException(typeof(InvalidOperationException))]
public void TestValidateIncompleteNg()
{
- // 正常系は例外が発生しなければOK
- PrivateAccessor<MediaWikiPage> acc = new PrivateAccessor<MediaWikiPage>(
- new MediaWikiPage(new MediaWiki(new Language("en")), "TestTitle"));
- acc.SetMethod("ValidateIncomplete");
- acc.Invoke();
+ // Textが空の場合例外発生
+ new MediaWikiPageMock(new MediaWiki(new Language("en")), "TestTitle").ValidateIncomplete();
}
#endregion
#region モッククラス
/// <summary>
- /// MediaWikiテスト用のモッククラスです。
+ /// <see cref="MediaWikiPage"/>テスト用のモッククラスです。
/// </summary>
- public class DummySite : MediaWiki
+ private class DummySite : MediaWiki
{
#region コンストラクタ
#region ダミーメソッド
/// <summary>
- /// ページを取得。
+ /// ページを取得。<paramref name="title"/>に応じてテスト用の結果を返す。
/// </summary>
/// <param name="title">ページタイトル。</param>
/// <returns>取得したページ。</returns>
#endregion
}
+ /// <summary>
+ /// <see cref="MediaWikiPage"/>テスト用のモッククラスです。
+ /// </summary>
+ private class MediaWikiPageMock : MediaWikiPage
+ {
+ #region コンストラクタ
+
+ /// <summary>
+ /// コンストラクタ。
+ /// ページの本文, タイムスタンプには<c>null</c>を設定。
+ /// </summary>
+ /// <param name="website">ページが所属するウェブサイト。</param>
+ /// <param name="title">ページタイトル。</param>
+ public MediaWikiPageMock(MediaWiki website, string title)
+ : base(website, title)
+ {
+ }
+
+ #endregion
+
+ #region 非公開プロパティテスト用のオーラーライドプロパティ
+
+ /// <summary>
+ /// ページの本文。
+ /// </summary>
+ public new string Text
+ {
+ get
+ {
+ return base.Text;
+ }
+
+ set
+ {
+ base.Text = value;
+ }
+ }
+
+ #endregion
+
+ #region 非公開メソッドテスト用のオーラーライドメソッド
+
+ /// <summary>
+ /// オブジェクトがメソッドの実行に不完全な状態でないか検証する。
+ /// 不完全な場合、例外をスローする。
+ /// </summary>
+ /// <exception cref="InvalidOperationException">オブジェクトは不完全。</exception>
+ public new void ValidateIncomplete()
+ {
+ base.ValidateIncomplete();
+ }
+
+ #endregion
+ }
+
#endregion
}
}