OSDN Git Service

#27313 末尾がハテナマークになる記事の暫定対応を追加,
authorhoneplus <honeplus@users.osdn.me>
Tue, 4 Dec 2012 03:32:56 +0000 (03:32 +0000)
committerhoneplus <honeplus@users.osdn.me>
Tue, 4 Dec 2012 03:32:56 +0000 (03:32 +0000)
ピリオド・ハテナマーク暫定対応のテストケースを追加,
自動テスト時にサーバーに接続していた箇所を出来るだけ接続しないよう修正

git-svn-id: http://svn.osdn.net/svnroot/wptscs/trunk@40 7cc79d57-4d93-40a1-83d5-ec7b38613dec

Wptscs/Websites/MediaWiki.cs
WptscsTest/Models/MockFactory.cs
WptscsTest/Websites/MediaWikiPageTest.cs
WptscsTest/Websites/MediaWikiTest.cs

index 2c02751..f0956b9 100644 (file)
@@ -455,7 +455,7 @@ namespace Honememo.Wptscs.Websites
 
             // 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("?"))
             {
                 // 末尾がピリオドのページが取得できない既知の不具合への暫定対応
                 // 対処方法が不明なため、せめて例外を投げて検知する
index 02fe9c0..da157bf 100644 (file)
@@ -104,15 +104,24 @@ namespace Honememo.Wptscs.Models
                 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
index aa4ec60..714b06b 100644 (file)
@@ -141,7 +141,7 @@ namespace Honememo.Wptscs.Websites
         {
             // 普通のページ
             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());
@@ -185,6 +185,7 @@ namespace Honememo.Wptscs.Websites
         {
             // 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}}");
@@ -241,7 +242,7 @@ namespace Honememo.Wptscs.Websites
         [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");
 
             // サブページの正規化
index 76dc055..9958130 100644 (file)
@@ -20,6 +20,7 @@ namespace Honememo.Wptscs.Websites
     using Honememo.Models;
     using Honememo.Utilities;
     using Honememo.Wptscs.Models;
+    using Honememo.Wptscs.Utilities;
     using Microsoft.VisualStudio.TestTools.UnitTesting;
 
     /// <summary>
@@ -437,6 +438,36 @@ namespace Honememo.Wptscs.Websites
         }
 
         /// <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]