// URIを生成
Uri uri = new Uri(new Uri(this.Location), StringUtils.FormatDollarVariable(this.ExportPath, escapeTitle));
- if (uri.OriginalString.EndsWith("."))
+ if (uri.OriginalString.EndsWith(".") || uri.OriginalString.EndsWith("?"))
{
// 末尾がピリオドのページが取得できない既知の不具合への暫定対応
// 対処方法が不明なため、せめて例外を投げて検知する
wiki = new MediaWiki(new Language(lang));
}
+ // テスト用にサーバー設定を書き換えて返す
+ this.SetMockConfig(wiki);
+ return wiki;
+ }
+
+ /// <summary>
+ /// 渡されたMediaWikiオブジェクトにモックの設定を上書きする。
+ /// </summary>
+ /// <param name="wiki">設定するMediaWikiオブジェクト。</param>
+ public void SetMockConfig(MediaWiki wiki)
+ {
// テスト用にサーバー設定を書き換え
// ※ フルパスじゃないとURIで取得できないので、ここで書き換える必要有り
UriBuilder b = new UriBuilder("file", string.Empty);
b.Path = Path.GetFullPath(MockFactory.TestMediaWikiDir) + "\\";
- wiki.Location = new Uri(b.Uri, lang + "/").ToString();
+ wiki.Location = new Uri(b.Uri, wiki.Language.Code + "/").ToString();
wiki.ExportPath = "$1.xml";
wiki.MetaApi = "_api.xml";
-
- return wiki;
}
#endregion
{
// 普通のページ
MediaWikiPage page = new MediaWikiPage(
- new MediaWiki(new Language("en")),
+ new MockFactory().GetMediaWiki("en"),
"TestTitle",
"TestText\n [[ja:テストページ]]<nowiki>[[zh:試験]]</nowiki><!--[[ru:test]]-->[[fr:Test_Fr]]");
Assert.AreEqual("[[ja:テストページ]]", page.GetInterlanguage("ja").ToString());
{
// Template:Documentation を使ってるページ
MediaWiki site = new DummySite(new Language("en"));
+ new MockFactory().SetMockConfig(site);
site.DocumentationTemplates.Add("Template:Documentation");
site.DocumentationTemplateDefaultPage = "/doc";
MediaWikiPage page = new MediaWikiPage(site, "Template:Test", "TestText{{Documentation}}");
[TestMethod]
public void TestNormalize()
{
- MediaWiki site = new MediaWiki(new Language("en"));
+ MediaWiki site = new MockFactory().GetMediaWiki("en");
MediaWikiPage page = new MediaWikiPage(site, "A/b/c");
// サブページの正規化
using Honememo.Models;
using Honememo.Utilities;
using Honememo.Wptscs.Models;
+ using Honememo.Wptscs.Utilities;
using Microsoft.VisualStudio.TestTools.UnitTesting;
/// <summary>
}
/// <summary>
+ /// <see cref="MediaWiki.GetPage"/>メソッドテストケース(末尾ピリオド)。
+ /// </summary>
+ [TestMethod]
+ [ExpectedException(typeof(EndPeriodException))]
+ public void TestGetPageEndPeriodException()
+ {
+ // ピリオドで終わるページは2012年現在処理できないため、
+ // 暫定対応として例外を投げる
+ // ※ httpでページ名が末尾に来るパスになるよう設定
+ // 処理の都合上、このテストはサーバーに接続しています
+ MediaWiki site = new MediaWiki(new Language("en"));
+ site.GetPage("Vulcan Inc.");
+ }
+
+ /// <summary>
+ /// <see cref="MediaWiki.GetPage"/>メソッドテストケース(末尾クエッションマーク)。
+ /// </summary>
+ [TestMethod]
+ [ExpectedException(typeof(EndPeriodException))]
+ public void TestGetPageEndPeriodExceptionAboutQuestion()
+ {
+ // ?で終わるページも2012年現在処理できないため、
+ // 暫定対応として例外を投げる
+ // ※ httpでページ名が末尾に来るパスになるよう設定
+ // 処理の都合上、このテストはサーバーに接続しています
+ MediaWiki site = new MediaWiki(new Language("en"));
+ site.GetPage("How does one patch KDE2 under FreeBSD?");
+ }
+
+ /// <summary>
/// <see cref="MediaWiki.IsMagicWord"/>メソッドテストケース。
/// </summary>
[TestMethod]