1 // ================================================================================================
\r
3 // MediaWikiTranslatorのテストクラスソース。</summary>
\r
5 // <copyright file="MediaWikiTranslatorTest.cs" company="honeplusのメモ帳">
\r
6 // Copyright (C) 2010 Honeplus. All rights reserved.</copyright>
\r
9 // ================================================================================================
\r
11 namespace Honememo.Wptscs.Logics
\r
14 using System.Collections.Generic;
\r
16 using System.Reflection;
\r
17 using NUnit.Framework;
\r
18 using Honememo.Tests;
\r
19 using Honememo.Utilities;
\r
20 using Honememo.Wptscs.Models;
\r
23 /// MediaWikiTranslatorのテストクラスです。
\r
26 public class MediaWikiTranslatorTest
\r
31 /// テストデータが格納されているフォルダパス。
\r
33 private static readonly string testDir = "Data\\MediaWiki";
\r
40 /// テスト用の値を設定したMediaWikiオブジェクトを返す。
\r
42 public MediaWiki GetTestServer(string language)
\r
44 // ※ 下記URL生成時は、きちんとパス区切り文字を入れてやら無いとフォルダが認識されない。
\r
45 // また、httpで取得した場合とfileで取得した場合では先頭の大文字小文字が異なることが
\r
46 // あるため、それについては随時期待値を調整して対処。
\r
47 MediaWiki server = ObjectUtils.DefaultIfNull<MediaWiki>(
\r
48 TestingConfig.GetInstance("Data\\config.xml").GetWebsite(language) as MediaWiki,
\r
49 new MediaWiki(new Language(language)));
\r
50 UriBuilder b = new UriBuilder("file", "");
\r
51 b.Path = Path.GetFullPath(testDir) + "\\";
\r
52 server.Location = new Uri(b.Uri, language + "/").ToString();
\r
53 server.ExportPath = "{0}.xml";
\r
54 server.NamespacePath = "_api.xml";
\r
63 /// テストデータを用い、Runを通しで実行するテストケース。基本動作。
\r
66 public void TestExampleIgnoreHeading()
\r
68 MediaWiki from = this.GetTestServer("en");
\r
69 Translator translate = new MediaWikiTranslator();
\r
70 translate.From = from;
\r
71 translate.To = this.GetTestServer("ja");
\r
72 translate.HeadingTable = new TranslationTable();
\r
73 translate.HeadingTable.From = "en";
\r
74 translate.HeadingTable.To = "ja";
\r
76 Assert.IsTrue(translate.Run("example"));
\r
78 // テストデータの変換結果を期待される結果と比較する
\r
79 string expectedText;
\r
80 using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_定型句なし.txt")))
\r
82 expectedText = sr.ReadToEnd();
\r
85 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
\r
86 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleIgnoreHeading Text > " + translate.Text);
\r
88 expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.xx", "<!-- " + FormUtils.ApplicationName()),
\r
91 // テストデータの変換ログを期待されるログと比較する
\r
93 using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_定型句なし.log")))
\r
95 expectedLog = sr.ReadToEnd();
\r
98 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
\r
99 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleIgnoreHeading Log > " + translate.Log);
\r
101 expectedLog.Replace("file:///xxx/Data/MediaWiki/en/", from.Location),
\r
106 /// テストデータを用い、Runを通しで実行するテストケース。基本動作見出しの変換含む。
\r
108 /// <remarks>C++/CLI版の0.73までと同等の動作。</remarks>
\r
110 public void TestExample()
\r
112 MediaWiki from = this.GetTestServer("en");
\r
113 Translator translate = new MediaWikiTranslator();
\r
114 translate.From = from;
\r
115 translate.To = this.GetTestServer("ja");
\r
118 translate.HeadingTable = new TranslationTable();
\r
119 IDictionary<string, string> dic = new Dictionary<string, string>();
\r
120 dic["en"] = "See also";
\r
121 dic["ja"] = "関連項目";
\r
122 translate.HeadingTable.Add(dic);
\r
123 translate.HeadingTable.From = "en";
\r
124 translate.HeadingTable.To = "ja";
\r
126 Assert.IsTrue(translate.Run("example"));
\r
128 // テストデータの変換結果を期待される結果と比較する
\r
129 string expectedText;
\r
130 using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example.txt")))
\r
132 expectedText = sr.ReadToEnd();
\r
135 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
\r
136 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);
\r
138 expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),
\r
141 // テストデータの変換ログを期待されるログと比較する
\r
142 string expectedLog;
\r
143 using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example.log")))
\r
145 expectedLog = sr.ReadToEnd();
\r
148 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
\r
149 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);
\r
151 expectedLog.Replace("http://en.wikipedia.org", from.Location),
\r
156 /// テストデータを用い、Runを通しで実行するテストケース。キャッシュ使用。
\r
159 public void TestExampleWithCache()
\r
161 MediaWiki from = this.GetTestServer("en");
\r
162 Translator translate = new MediaWikiTranslator();
\r
163 translate.From = from;
\r
164 translate.To = this.GetTestServer("ja");
\r
167 translate.HeadingTable = new TranslationTable();
\r
168 IDictionary<string, string> dic = new Dictionary<string, string>();
\r
169 dic["en"] = "See also";
\r
170 dic["ja"] = "関連項目";
\r
171 translate.HeadingTable.Add(dic);
\r
172 translate.HeadingTable.From = "en";
\r
173 translate.HeadingTable.To = "ja";
\r
175 // 以下のキャッシュパターンを指定して実行
\r
176 TranslationDictionary table = new TranslationDictionary("en", "ja");
\r
177 table.Add("Template:Wiktionary", new TranslationDictionary.Item { Word = "Template:Wiktionary" });
\r
178 table.Add("example.org", new TranslationDictionary.Item());
\r
179 table.Add(".example", new TranslationDictionary.Item { Word = "。さんぷる", Alias = ".dummy" });
\r
180 table.Add("Template:Disambig", new TranslationDictionary.Item { Word = "Template:曖昧さ回避" });
\r
181 translate.ItemTable = table;
\r
183 Assert.IsTrue(translate.Run("example"));
\r
185 // キャッシュに今回の処理で取得した内容が更新されているかを確認
\r
186 Assert.IsTrue(table.ContainsKey("example.com"));
\r
187 Assert.AreEqual("Example.com", table["example.com"].Word);
\r
188 Assert.IsNull(table["example.com"].Alias);
\r
189 Assert.IsNotNull(table["example.com"].Timestamp);
\r
190 Assert.IsTrue(table.ContainsKey("Exemplum"));
\r
191 Assert.IsEmpty(table["Exemplum"].Word);
\r
192 Assert.IsNull(table["Exemplum"].Alias);
\r
193 Assert.IsNotNull(table["Exemplum"].Timestamp);
\r
194 Assert.IsTrue(table.ContainsKey("example.net"));
\r
195 Assert.AreEqual("Example.com", table["example.net"].Word);
\r
196 Assert.AreEqual("Example.com", table["example.net"].Alias);
\r
197 Assert.IsNotNull(table["example.net"].Timestamp);
\r
199 // テストデータの変換結果を期待される結果と比較する
\r
200 string expectedText;
\r
201 using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_キャッシュ使用.txt")))
\r
203 expectedText = sr.ReadToEnd();
\r
206 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
\r
207 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleWithCache Text > " + translate.Text);
\r
209 expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.xx", "<!-- " + FormUtils.ApplicationName()),
\r
212 // テストデータの変換ログを期待されるログと比較する
\r
213 string expectedLog;
\r
214 using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\example_キャッシュ使用.log")))
\r
216 expectedLog = sr.ReadToEnd();
\r
219 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
\r
220 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleWithCache Log > " + translate.Log);
\r
222 expectedLog.Replace("file:///xxx/Data/MediaWiki/en/", from.Location),
\r
227 /// テストデータを用い、Runを通しで実行するテストケース(日本語版→英語版)。
\r
229 /// <remarks>C++/CLI版の0.73までと同等の動作。</remarks>
\r
231 public void TestSpaceShipTwo()
\r
233 MediaWiki from = this.GetTestServer("ja");
\r
234 Translator translate = new MediaWikiTranslator();
\r
235 translate.From = from;
\r
236 translate.To = this.GetTestServer("en");
\r
237 translate.ItemTable = new TranslationDictionary("ja", "en");
\r
240 translate.HeadingTable = new TranslationTable();
\r
241 IDictionary<string, string> dic = new Dictionary<string, string>();
\r
242 dic["en"] = "See Also";
\r
243 dic["ja"] = "関連項目";
\r
244 translate.HeadingTable.Add(dic);
\r
245 dic = new Dictionary<string, string>();
\r
246 dic["en"] = "External links";
\r
247 dic["ja"] = "外部リンク";
\r
248 translate.HeadingTable.Add(dic);
\r
249 dic = new Dictionary<string, string>();
\r
250 dic["en"] = "Notes";
\r
252 translate.HeadingTable.Add(dic);
\r
253 translate.HeadingTable.From = "ja";
\r
254 translate.HeadingTable.To = "en";
\r
256 Assert.IsTrue(translate.Run("スペースシップツー"));
\r
258 // テストデータの変換結果を期待される結果と比較する
\r
259 string expectedText;
\r
260 using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\スペースシップツー.txt")))
\r
262 expectedText = sr.ReadToEnd();
\r
265 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
\r
266 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);
\r
268 expectedText.Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),
\r
271 // テストデータの変換ログを期待されるログと比較する
\r
272 string expectedLog;
\r
273 using (StreamReader sr = new StreamReader(Path.Combine(testDir, "result\\スペースシップツー.log")))
\r
275 expectedLog = sr.ReadToEnd();
\r
278 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
\r
279 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);
\r
281 expectedLog.Replace("http://ja.wikipedia.org", from.Location),
\r
286 /// Runを通しで実行するテストケース(対象記事なし)。
\r
289 public void TestPageNothing()
\r
291 MediaWiki from = this.GetTestServer("en");
\r
292 Translator translate = new MediaWikiTranslator();
\r
293 translate.From = from;
\r
294 translate.To = this.GetTestServer("ja");
\r
296 Assert.IsFalse(translate.Run("Nothing Page"));
\r
298 // 実行ログを期待されるログと比較する
\r
300 ("http://en.wikipedia.org より [[Nothing Page]] を取得。\r\n"
\r
301 + "→ 翻訳元として指定された記事は存在しません。記事名を確認してください。")
\r
302 .Replace("http://en.wikipedia.org", from.Location),
\r
308 #region 整理予定の静的メソッドテストケース
\r
311 /// ChkCommentメソッドテストケース。
\r
314 public void TestChkComment()
\r
316 // TryParseComment互換用の旧メソッド
\r
318 Assert.AreEqual(14, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 2));
\r
319 Assert.AreEqual("<!-- test -->", comment);
\r
320 Assert.AreEqual(15, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test --cd", 2));
\r
321 Assert.AreEqual("<!-- test --cd", comment);
\r
322 Assert.AreEqual(-1, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 1));
\r
323 Assert.IsEmpty(comment);
\r
324 Assert.AreEqual(-1, MediaWikiTranslator.ChkComment(out comment, "ab<!-- test -->cd", 3));
\r
325 Assert.IsEmpty(comment);
\r
329 /// ChkNowikiメソッドテストケース。
\r
332 public void TestChkNowiki()
\r
334 // TryParseNowiki互換用の旧メソッド
\r
336 Assert.AreEqual(26, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 2));
\r
337 Assert.AreEqual("<nowiki>[[test]]</nowiki>", nowiki);
\r
338 Assert.AreEqual(27, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowikicd", 2));
\r
339 Assert.AreEqual("<nowiki>[[test]]</nowikicd", nowiki);
\r
340 Assert.AreEqual(-1, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 1));
\r
341 Assert.IsEmpty(nowiki);
\r
342 Assert.AreEqual(-1, MediaWikiTranslator.ChkNowiki(out nowiki, "ab<nowiki>[[test]]</nowiki>cd", 3));
\r
343 Assert.IsEmpty(nowiki);
\r