OSDN Git Service

#27312 ..形式のサブページが正しく処理できない問題の暫定対応(警告メッセージの追加)
authorhoneplus <honeplus@users.osdn.me>
Sat, 11 Feb 2012 13:18:42 +0000 (13:18 +0000)
committerhoneplus <honeplus@users.osdn.me>
Sat, 11 Feb 2012 13:18:42 +0000 (13:18 +0000)
git-svn-id: http://svn.osdn.net/svnroot/wptscs/trunk@15 7cc79d57-4d93-40a1-83d5-ec7b38613dec

Wptscs/Logics/MediaWikiTranslator.cs
WptscsTest/Logics/MediaWikiTranslatorTest.cs

index f5ec544..f5b6ee7 100644 (file)
@@ -317,6 +317,14 @@ namespace Honememo.Wptscs.Logics
                     // カテゴリ用の変換を実施
                     return this.ReplaceLinkCategory(link);
                 }
+                else if (StringUtils.DefaultString(link.Title).StartsWith("../"))
+                {
+                    // ..形式のサブページが処理できない既知の不具合への対応、警告メッセージを出す
+                    // ※ 2012年2月現在、..形式のサブページはIsSubpageも立たない
+                    this.Logger.AddSource(link);
+                    this.Logger.AddResponse(Resources.LogMessageErrorPageName, link.Title);
+                    return link;
+                }
 
                 // 専用処理の無い内部リンクの場合、言語間リンクによる置き換えを行う
                 string interWiki = this.GetInterwiki(link);
index 6b3e759..29755e9 100644 (file)
@@ -193,6 +193,40 @@ namespace Honememo.Wptscs.Logics
         }
 
         /// <summary>
+        /// ReplaceLinkメソッドテストケース(サブページ)。
+        /// </summary>
+        [Test]
+        public void TestReplaceLinkSubpage()
+        {
+            TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
+            MockFactory mock = new MockFactory();
+            translator.From = mock.GetMediaWiki("en");
+            translator.To = mock.GetMediaWiki("ja");
+            MediaWikiLink link;
+
+            // 親記事名も全て指定したサブページ
+            // ※ 以下オブジェクトを毎回作り直しているのは、更新されてしまうケースがあるため
+            link = new MediaWikiLink();
+            link.Title = "Template:Citation needed/Doc";
+            Assert.AreEqual("[[Template:要出典|Template:Citation needed/Doc]]", translator.ReplaceLink(link, "Template:Citation needed").ToString());
+
+            // 親記事名を省略し別途指定
+            link = new MediaWikiLink();
+            link.Title = "/Doc";
+            link.IsSubpage = true;
+            Assert.AreEqual("[[Template:要出典|/Doc]]", translator.ReplaceLink(link, "Template:Citation needed").ToString());
+
+            // ../形式でのサブページ
+            // ※ この形式は2012年2月現在未対応で渡す方法も無い、暫定対応の処理が動く
+            link = new MediaWikiLink();
+            link.Title = "../Doc";
+            Assert.AreEqual("[[../Doc]]", translator.ReplaceLink(link, "Template:Citation needed").ToString());
+            Assert.IsTrue(translator.Log.EndsWith(
+                "[[../Doc]] → " + Environment.NewLine
+                + "→ ../Doc は、現在のツールでは処理できないページ名です。" + Environment.NewLine));
+        }
+
+        /// <summary>
         /// ReplaceLinkメソッドテストケース(カテゴリ)。
         /// </summary>
         [Test]