-// ================================================================================================\r
-// <summary>\r
-// MediaWikiTranslatorのテストクラスソース。</summary>\r
-//\r
-// <copyright file="MediaWikiTranslatorTest.cs" company="honeplusのメモ帳">\r
-// Copyright (C) 2010 Honeplus. All rights reserved.</copyright>\r
-// <author>\r
-// Honeplus</author>\r
-// ================================================================================================\r
-\r
-namespace Honememo.Wptscs.Logics\r
-{\r
- using System;\r
- using System.Collections.Generic;\r
- using System.IO;\r
- using System.Reflection;\r
- using NUnit.Framework;\r
- using Honememo.Tests;\r
- using Honememo.Utilities;\r
- using Honememo.Wptscs.Models;\r
-\r
- /// <summary>\r
- /// MediaWikiTranslatorのテストクラスです。\r
- /// </summary>\r
- [TestFixture]\r
- public class MediaWikiTranslatorTest\r
- {\r
- #region 定数\r
-\r
- /// <summary>\r
- /// テストデータが格納されているフォルダパス。\r
- /// </summary>\r
- private static readonly string testDir = "Data\\MediaWiki";\r
-\r
- #endregion\r
-\r
- #region テスト支援メソッド\r
-\r
- /// <summary>\r
- /// テスト用の値を設定したMediaWikiオブジェクトを返す。\r
- /// </summary>\r
- public MediaWiki GetTestServer(string language)\r
- {\r
- // ※ 下記URL生成時は、きちんとパス区切り文字を入れてやら無いとフォルダが認識されない。\r
- // また、httpで取得した場合とfileで取得した場合では先頭の大文字小文字が異なることが\r
- // あるため、それについては随時期待値を調整して対処。\r
- MediaWiki server = ObjectUtils.DefaultIfNull<MediaWiki>(\r
- TestingConfig.GetInstance("Data\\config.xml").GetWebsite(language) as MediaWiki,\r
- new MediaWiki(new Language(language)));\r
- UriBuilder b = new UriBuilder("file", "");\r
- b.Path = Path.GetFullPath(testDir) + "\\";\r
- server.Location = new Uri(b.Uri, language + "/").ToString();\r
- server.ExportPath = "{0}.xml";\r
- server.NamespacePath = "_api.xml";\r
- return server;\r
- }\r
-\r
- #endregion\r
- \r
- #region 全体テストケース\r
-\r
- /// <summary>\r
- /// テストデータを用い、Runを通しで実行するテストケース。基本動作。\r
- /// </summary>\r
- [Test]\r
- public void TestExampleIgnoreHeading()\r
- {\r
- MediaWiki from = this.GetTestServer("en");\r
- Translator translate = new MediaWikiTranslator();\r
- translate.From = from;\r
- translate.To = this.GetTestServer("ja");\r
- translate.HeadingTable = new TranslationTable();\r
- translate.HeadingTable.From = "en";\r
- translate.HeadingTable.To = "ja";\r
-\r
- Assert.IsTrue(translate.Run("example"));\r
-\r
- // テストデータの変換結果を期待される結果と比較する\r
- string expectedText;\r
- using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_定型句なし.txt"))) \r
- {\r
- expectedText = sr.ReadToEnd();\r
- }\r
-\r
- // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する\r
- //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleIgnoreHeading Text > " + translate.Text);\r
- Assert.AreEqual(\r
- expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.xx", "<!-- " + FormUtils.ApplicationName()),\r
- translate.Text);\r
-\r
- // テストデータの変換ログを期待されるログと比較する\r
- string expectedLog;\r
- using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_定型句なし.log")))\r
- {\r
- expectedLog = sr.ReadToEnd();\r
- }\r
-\r
- // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する\r
- //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleIgnoreHeading Log > " + translate.Log);\r
- Assert.AreEqual(\r
- expectedLog.Replace("file:///xxx/Data/MediaWiki/en/", from.Location),\r
- translate.Log);\r
- }\r
-\r
- /// <summary>\r
- /// テストデータを用い、Runを通しで実行するテストケース。基本動作見出しの変換含む。\r
- /// </summary>\r
- /// <remarks>C++/CLI版の0.73までと同等の動作。</remarks>\r
- [Test]\r
- public void TestExample()\r
- {\r
- MediaWiki from = this.GetTestServer("en");\r
- Translator translate = new MediaWikiTranslator();\r
- translate.From = from;\r
- translate.To = this.GetTestServer("ja");\r
-\r
- // 見出しの変換パターンを設定\r
- translate.HeadingTable = new TranslationTable();\r
- IDictionary<string, string> dic = new Dictionary<string, string>();\r
- dic["en"] = "See also";\r
- dic["ja"] = "関連項目";\r
- translate.HeadingTable.Add(dic);\r
- translate.HeadingTable.From = "en";\r
- translate.HeadingTable.To = "ja";\r
-\r
- Assert.IsTrue(translate.Run("example"));\r
-\r
- // テストデータの変換結果を期待される結果と比較する\r
- string expectedText;\r
- using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example.txt")))\r
- {\r
- expectedText = sr.ReadToEnd();\r
- }\r
-\r
- // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する\r
- //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);\r
- Assert.AreEqual(\r
- expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),\r
- translate.Text);\r
-\r
- // テストデータの変換ログを期待されるログと比較する\r
- string expectedLog;\r
- using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example.log")))\r
- {\r
- expectedLog = sr.ReadToEnd();\r
- }\r
-\r
- // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する\r
- //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);\r
- Assert.AreEqual(\r
- expectedLog.Replace("http://en.wikipedia.org", from.Location),\r
- translate.Log);\r
- }\r
-\r
- /// <summary>\r
- /// テストデータを用い、Runを通しで実行するテストケース。キャッシュ使用。\r
- /// </summary>\r
- [Test]\r
- public void TestExampleWithCache()\r
- {\r
- MediaWiki from = this.GetTestServer("en");\r
- Translator translate = new MediaWikiTranslator();\r
- translate.From = from;\r
- translate.To = this.GetTestServer("ja");\r
-\r
- // 見出しの変換パターンを設定\r
- translate.HeadingTable = new TranslationTable();\r
- IDictionary<string, string> dic = new Dictionary<string, string>();\r
- dic["en"] = "See also";\r
- dic["ja"] = "関連項目";\r
- translate.HeadingTable.Add(dic);\r
- translate.HeadingTable.From = "en";\r
- translate.HeadingTable.To = "ja";\r
-\r
- // 以下のキャッシュパターンを指定して実行\r
- TranslationDictionary table = new TranslationDictionary("en", "ja");\r
- table.Add("Template:Wiktionary", new TranslationDictionary.Item { Word = "Template:Wiktionary" });\r
- table.Add("example.org", new TranslationDictionary.Item());\r
- table.Add(".example", new TranslationDictionary.Item { Word = "。さんぷる", Alias = ".dummy" });\r
- table.Add("Template:Disambig", new TranslationDictionary.Item { Word = "Template:曖昧さ回避" });\r
- translate.ItemTable = table;\r
-\r
- Assert.IsTrue(translate.Run("example"));\r
-\r
- // キャッシュに今回の処理で取得した内容が更新されているかを確認\r
- Assert.IsTrue(table.ContainsKey("example.com"));\r
- Assert.AreEqual("Example.com", table["example.com"].Word);\r
- Assert.IsNull(table["example.com"].Alias);\r
- Assert.IsNotNull(table["example.com"].Timestamp);\r
- Assert.IsTrue(table.ContainsKey("Exemplum"));\r
- Assert.IsEmpty(table["Exemplum"].Word);\r
- Assert.IsNull(table["Exemplum"].Alias);\r
- Assert.IsNotNull(table["Exemplum"].Timestamp);\r
- Assert.IsTrue(table.ContainsKey("example.net"));\r
- Assert.AreEqual("Example.com", table["example.net"].Word);\r
- Assert.AreEqual("Example.com", table["example.net"].Alias);\r
- Assert.IsNotNull(table["example.net"].Timestamp);\r
-\r
- // テストデータの変換結果を期待される結果と比較する\r
- string expectedText;\r
- using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_キャッシュ使用.txt")))\r
- {\r
- expectedText = sr.ReadToEnd();\r
- }\r
-\r
- // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する\r
- //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleWithCache Text > " + translate.Text);\r
- Assert.AreEqual(\r
- expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.xx", "<!-- " + FormUtils.ApplicationName()),\r
- translate.Text);\r
-\r
- // テストデータの変換ログを期待されるログと比較する\r
- string expectedLog;\r
- using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_キャッシュ使用.log")))\r
- {\r
- expectedLog = sr.ReadToEnd();\r
- }\r
-\r
- // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する\r
- //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleWithCache Log > " + translate.Log);\r
- Assert.AreEqual(\r
- expectedLog.Replace("file:///xxx/Data/MediaWiki/en/", from.Location),\r
- translate.Log);\r
- }\r
-\r
- /// <summary>\r
- /// テストデータを用い、Runを通しで実行するテストケース(日本語版→英語版)。\r
- /// </summary>\r
- /// <remarks>C++/CLI版の0.73までと同等の動作。</remarks>\r
- [Test]\r
- public void TestSpaceShipTwo()\r
- {\r
- MediaWiki from = this.GetTestServer("ja");\r
- Translator translate = new MediaWikiTranslator();\r
- translate.From = from;\r
- translate.To = this.GetTestServer("en");\r
- translate.ItemTable = new TranslationDictionary("ja", "en");\r
-\r
- // 見出しの変換パターンを設定\r
- translate.HeadingTable = new TranslationTable();\r
- IDictionary<string, string> dic = new Dictionary<string, string>();\r
- dic["en"] = "See Also";\r
- dic["ja"] = "関連項目";\r
- translate.HeadingTable.Add(dic);\r
- dic = new Dictionary<string, string>();\r
- dic["en"] = "External links";\r
- dic["ja"] = "外部リンク";\r
- translate.HeadingTable.Add(dic);\r
- dic = new Dictionary<string, string>();\r
- dic["en"] = "Notes";\r
- dic["ja"] = "脚注";\r
- translate.HeadingTable.Add(dic);\r
- translate.HeadingTable.From = "ja";\r
- translate.HeadingTable.To = "en";\r
-\r
- Assert.IsTrue(translate.Run("スペースシップツー"));\r
-\r
- // テストデータの変換結果を期待される結果と比較する\r
- string expectedText;\r
- using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\スペースシップツー.txt")))\r
- {\r
- expectedText = sr.ReadToEnd();\r
- }\r
-\r
- // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する\r
- //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);\r
- Assert.AreEqual(\r
- expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),\r
- translate.Text);\r
-\r
- // テストデータの変換ログを期待されるログと比較する\r
- string expectedLog;\r
- using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\スペースシップツー.log")))\r
- {\r
- expectedLog = sr.ReadToEnd();\r
- }\r
-\r
- // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する\r
- //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);\r
- Assert.AreEqual(\r
- expectedLog.Replace("http://ja.wikipedia.org", from.Location),\r
- translate.Log);\r
- }\r
-\r
- /// <summary>\r
- /// Runを通しで実行するテストケース(対象記事なし)。\r
- /// </summary>\r
- [Test]\r
- public void TestPageNothing()\r
- {\r
- MediaWiki from = this.GetTestServer("en");\r
- Translator translate = new MediaWikiTranslator();\r
- translate.From = from;\r
- translate.To = this.GetTestServer("ja");\r
-\r
- Assert.IsFalse(translate.Run("Nothing Page"));\r
-\r
- // 実行ログを期待されるログと比較する\r
- Assert.AreEqual(\r
- ("http://en.wikipedia.org より [[Nothing Page]] を取得。\r\n"\r
- + "→ 翻訳元として指定された記事は存在しません。記事名を確認してください。")\r
- .Replace("http://en.wikipedia.org", from.Location),\r
- translate.Log);\r
- }\r
-\r
- #endregion\r
-\r
- #region 整理予定の静的メソッドテストケース\r
-\r
- /// <summary>\r
- /// ChkCommentメソッドテストケース。\r
- /// </summary>\r
- [Test]\r
- public void TestChkComment()\r
- {\r
- // TryParseComment互換用の旧メソッド\r
- string comment;\r
- Assert.AreEqual(14, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 2));\r
- Assert.AreEqual("<!-- test -->", comment);\r
- Assert.AreEqual(15, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test --cd", 2));\r
- Assert.AreEqual("<!-- test --cd", comment);\r
- Assert.AreEqual(-1, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 1));\r
- Assert.IsEmpty(comment);\r
- Assert.AreEqual(-1, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 3));\r
- Assert.IsEmpty(comment);\r
- }\r
- \r
- /// <summary>\r
- /// ChkNowikiメソッドテストケース。\r
- /// </summary>\r
- [Test]\r
- public void TestChkNowiki()\r
- {\r
- // TryParseNowiki互換用の旧メソッド\r
- string nowiki;\r
- Assert.AreEqual(26, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 2));\r
- Assert.AreEqual("<nowiki>[[test]]</nowiki>", nowiki);\r
- Assert.AreEqual(27, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowikicd", 2));\r
- Assert.AreEqual("<nowiki>[[test]]</nowikicd", nowiki);\r
- Assert.AreEqual(-1, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 1));\r
- Assert.IsEmpty(nowiki);\r
- Assert.AreEqual(-1, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 3));\r
- Assert.IsEmpty(nowiki);\r
- }\r
-\r
- #endregion\r
- }\r
-}\r
+// ================================================================================================
+// <summary>
+// MediaWikiTranslatorのテストクラスソース。</summary>
+//
+// <copyright file="MediaWikiTranslatorTest.cs" company="honeplusのメモ帳">
+// Copyright (C) 2010 Honeplus. All rights reserved.</copyright>
+// <author>
+// Honeplus</author>
+// ================================================================================================
+
+namespace Honememo.Wptscs.Logics
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Reflection;
+ using NUnit.Framework;
+ using Honememo.Tests;
+ using Honememo.Utilities;
+ using Honememo.Wptscs.Models;
+
+ /// <summary>
+ /// MediaWikiTranslatorのテストクラスです。
+ /// </summary>
+ [TestFixture]
+ public class MediaWikiTranslatorTest
+ {
+ #region 定数
+
+ /// <summary>
+ /// テストデータが格納されているフォルダパス。
+ /// </summary>
+ private static readonly string testDir = "Data\\MediaWiki";
+
+ #endregion
+
+ #region テスト支援メソッド
+
+ /// <summary>
+ /// テスト用の値を設定したMediaWikiオブジェクトを返す。
+ /// </summary>
+ public MediaWiki GetTestServer(string language)
+ {
+ // ※ 下記URL生成時は、きちんとパス区切り文字を入れてやら無いとフォルダが認識されない。
+ // また、httpで取得した場合とfileで取得した場合では先頭の大文字小文字が異なることが
+ // あるため、それについては随時期待値を調整して対処。
+ MediaWiki server = ObjectUtils.DefaultIfNull<MediaWiki>(
+ TestingConfig.GetInstance("Data\\config.xml").GetWebsite(language) as MediaWiki,
+ new MediaWiki(new Language(language)));
+ UriBuilder b = new UriBuilder("file", "");
+ b.Path = Path.GetFullPath(testDir) + "\\";
+ server.Location = new Uri(b.Uri, language + "/").ToString();
+ server.ExportPath = "{0}.xml";
+ server.NamespacePath = "_api.xml";
+ return server;
+ }
+
+ #endregion
+
+ #region 全体テストケース
+
+ /// <summary>
+ /// テストデータを用い、Runを通しで実行するテストケース。基本動作。
+ /// </summary>
+ [Test]
+ public void TestExampleIgnoreHeading()
+ {
+ MediaWiki from = this.GetTestServer("en");
+ Translator translate = new MediaWikiTranslator();
+ translate.From = from;
+ translate.To = this.GetTestServer("ja");
+ translate.HeadingTable = new TranslationTable();
+ translate.HeadingTable.From = "en";
+ translate.HeadingTable.To = "ja";
+
+ Assert.IsTrue(translate.Run("example"));
+
+ // テストデータの変換結果を期待される結果と比較する
+ string expectedText;
+ using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_定型句なし.txt")))
+ {
+ expectedText = sr.ReadToEnd();
+ }
+
+ // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
+ //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleIgnoreHeading Text > " + translate.Text);
+ Assert.AreEqual(
+ expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.xx", "<!-- " + FormUtils.ApplicationName()),
+ translate.Text);
+
+ // テストデータの変換ログを期待されるログと比較する
+ string expectedLog;
+ using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_定型句なし.log")))
+ {
+ expectedLog = sr.ReadToEnd();
+ }
+
+ // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
+ //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleIgnoreHeading Log > " + translate.Log);
+ Assert.AreEqual(
+ expectedLog.Replace("file:///xxx/Data/MediaWiki/en/", from.Location),
+ translate.Log);
+ }
+
+ /// <summary>
+ /// テストデータを用い、Runを通しで実行するテストケース。基本動作見出しの変換含む。
+ /// </summary>
+ /// <remarks>C++/CLI版の0.73までと同等の動作。</remarks>
+ [Test]
+ public void TestExample()
+ {
+ MediaWiki from = this.GetTestServer("en");
+ Translator translate = new MediaWikiTranslator();
+ translate.From = from;
+ translate.To = this.GetTestServer("ja");
+
+ // 見出しの変換パターンを設定
+ translate.HeadingTable = new TranslationTable();
+ IDictionary<string, string> dic = new Dictionary<string, string>();
+ dic["en"] = "See also";
+ dic["ja"] = "関連項目";
+ translate.HeadingTable.Add(dic);
+ translate.HeadingTable.From = "en";
+ translate.HeadingTable.To = "ja";
+
+ Assert.IsTrue(translate.Run("example"));
+
+ // テストデータの変換結果を期待される結果と比較する
+ string expectedText;
+ using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example.txt")))
+ {
+ expectedText = sr.ReadToEnd();
+ }
+
+ // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
+ //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);
+ Assert.AreEqual(
+ expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),
+ translate.Text);
+
+ // テストデータの変換ログを期待されるログと比較する
+ string expectedLog;
+ using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example.log")))
+ {
+ expectedLog = sr.ReadToEnd();
+ }
+
+ // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
+ //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);
+ Assert.AreEqual(
+ expectedLog.Replace("http://en.wikipedia.org", from.Location),
+ translate.Log);
+ }
+
+ /// <summary>
+ /// テストデータを用い、Runを通しで実行するテストケース。キャッシュ使用。
+ /// </summary>
+ [Test]
+ public void TestExampleWithCache()
+ {
+ MediaWiki from = this.GetTestServer("en");
+ Translator translate = new MediaWikiTranslator();
+ translate.From = from;
+ translate.To = this.GetTestServer("ja");
+
+ // 見出しの変換パターンを設定
+ translate.HeadingTable = new TranslationTable();
+ IDictionary<string, string> dic = new Dictionary<string, string>();
+ dic["en"] = "See also";
+ dic["ja"] = "関連項目";
+ translate.HeadingTable.Add(dic);
+ translate.HeadingTable.From = "en";
+ translate.HeadingTable.To = "ja";
+
+ // 以下のキャッシュパターンを指定して実行
+ TranslationDictionary table = new TranslationDictionary("en", "ja");
+ table.Add("Template:Wiktionary", new TranslationDictionary.Item { Word = "Template:Wiktionary" });
+ table.Add("example.org", new TranslationDictionary.Item());
+ table.Add(".example", new TranslationDictionary.Item { Word = "。さんぷる", Alias = ".dummy" });
+ table.Add("Template:Disambig", new TranslationDictionary.Item { Word = "Template:曖昧さ回避" });
+ translate.ItemTable = table;
+
+ Assert.IsTrue(translate.Run("example"));
+
+ // キャッシュに今回の処理で取得した内容が更新されているかを確認
+ Assert.IsTrue(table.ContainsKey("example.com"));
+ Assert.AreEqual("Example.com", table["example.com"].Word);
+ Assert.IsNull(table["example.com"].Alias);
+ Assert.IsNotNull(table["example.com"].Timestamp);
+ Assert.IsTrue(table.ContainsKey("Exemplum"));
+ Assert.IsEmpty(table["Exemplum"].Word);
+ Assert.IsNull(table["Exemplum"].Alias);
+ Assert.IsNotNull(table["Exemplum"].Timestamp);
+ Assert.IsTrue(table.ContainsKey("example.net"));
+ Assert.AreEqual("Example.com", table["example.net"].Word);
+ Assert.AreEqual("Example.com", table["example.net"].Alias);
+ Assert.IsNotNull(table["example.net"].Timestamp);
+
+ // テストデータの変換結果を期待される結果と比較する
+ string expectedText;
+ using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_キャッシュ使用.txt")))
+ {
+ expectedText = sr.ReadToEnd();
+ }
+
+ // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
+ //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleWithCache Text > " + translate.Text);
+ Assert.AreEqual(
+ expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.xx", "<!-- " + FormUtils.ApplicationName()),
+ translate.Text);
+
+ // テストデータの変換ログを期待されるログと比較する
+ string expectedLog;
+ using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_キャッシュ使用.log")))
+ {
+ expectedLog = sr.ReadToEnd();
+ }
+
+ // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
+ //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleWithCache Log > " + translate.Log);
+ Assert.AreEqual(
+ expectedLog.Replace("file:///xxx/Data/MediaWiki/en/", from.Location),
+ translate.Log);
+ }
+
+ /// <summary>
+ /// テストデータを用い、Runを通しで実行するテストケース(日本語版→英語版)。
+ /// </summary>
+ /// <remarks>C++/CLI版の0.73までと同等の動作。</remarks>
+ [Test]
+ public void TestSpaceShipTwo()
+ {
+ MediaWiki from = this.GetTestServer("ja");
+ Translator translate = new MediaWikiTranslator();
+ translate.From = from;
+ translate.To = this.GetTestServer("en");
+ translate.ItemTable = new TranslationDictionary("ja", "en");
+
+ // 見出しの変換パターンを設定
+ translate.HeadingTable = new TranslationTable();
+ IDictionary<string, string> dic = new Dictionary<string, string>();
+ dic["en"] = "See Also";
+ dic["ja"] = "関連項目";
+ translate.HeadingTable.Add(dic);
+ dic = new Dictionary<string, string>();
+ dic["en"] = "External links";
+ dic["ja"] = "外部リンク";
+ translate.HeadingTable.Add(dic);
+ dic = new Dictionary<string, string>();
+ dic["en"] = "Notes";
+ dic["ja"] = "脚注";
+ translate.HeadingTable.Add(dic);
+ translate.HeadingTable.From = "ja";
+ translate.HeadingTable.To = "en";
+
+ Assert.IsTrue(translate.Run("スペースシップツー"));
+
+ // テストデータの変換結果を期待される結果と比較する
+ string expectedText;
+ using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\スペースシップツー.txt")))
+ {
+ expectedText = sr.ReadToEnd();
+ }
+
+ // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
+ //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);
+ Assert.AreEqual(
+ expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),
+ translate.Text);
+
+ // テストデータの変換ログを期待されるログと比較する
+ string expectedLog;
+ using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\スペースシップツー.log")))
+ {
+ expectedLog = sr.ReadToEnd();
+ }
+
+ // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
+ //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);
+ Assert.AreEqual(
+ expectedLog.Replace("http://ja.wikipedia.org", from.Location),
+ translate.Log);
+ }
+
+ /// <summary>
+ /// Runを通しで実行するテストケース(対象記事なし)。
+ /// </summary>
+ [Test]
+ public void TestPageNothing()
+ {
+ MediaWiki from = this.GetTestServer("en");
+ Translator translate = new MediaWikiTranslator();
+ translate.From = from;
+ translate.To = this.GetTestServer("ja");
+
+ Assert.IsFalse(translate.Run("Nothing Page"));
+
+ // 実行ログを期待されるログと比較する
+ Assert.AreEqual(
+ ("http://en.wikipedia.org より [[Nothing Page]] を取得。\r\n"
+ + "→ 翻訳元として指定された記事は存在しません。記事名を確認してください。")
+ .Replace("http://en.wikipedia.org", from.Location),
+ translate.Log);
+ }
+
+ #endregion
+
+ #region 整理予定の静的メソッドテストケース
+
+ /// <summary>
+ /// ChkCommentメソッドテストケース。
+ /// </summary>
+ [Test]
+ public void TestChkComment()
+ {
+ // TryParseComment互換用の旧メソッド
+ string comment;
+ Assert.AreEqual(14, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 2));
+ Assert.AreEqual("<!-- test -->", comment);
+ Assert.AreEqual(15, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test --cd", 2));
+ Assert.AreEqual("<!-- test --cd", comment);
+ Assert.AreEqual(-1, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 1));
+ Assert.IsEmpty(comment);
+ Assert.AreEqual(-1, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 3));
+ Assert.IsEmpty(comment);
+ }
+
+ /// <summary>
+ /// ChkNowikiメソッドテストケース。
+ /// </summary>
+ [Test]
+ public void TestChkNowiki()
+ {
+ // TryParseNowiki互換用の旧メソッド
+ string nowiki;
+ Assert.AreEqual(26, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 2));
+ Assert.AreEqual("<nowiki>[[test]]</nowiki>", nowiki);
+ Assert.AreEqual(27, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowikicd", 2));
+ Assert.AreEqual("<nowiki>[[test]]</nowikicd", nowiki);
+ Assert.AreEqual(-1, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 1));
+ Assert.IsEmpty(nowiki);
+ Assert.AreEqual(-1, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 3));
+ Assert.IsEmpty(nowiki);
+ }
+
+ #endregion
+ }
+}