1 // ================================================================================================
3 // MediaWikiTranslatorのテストクラスソース。</summary>
5 // <copyright file="MediaWikiTranslatorTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Logics
14 using System.Collections.Generic;
16 using System.Reflection;
17 using NUnit.Framework;
19 using Honememo.Parsers;
20 using Honememo.Utilities;
21 using Honememo.Wptscs.Models;
22 using Honememo.Wptscs.Parsers;
23 using Honememo.Wptscs.Utilities;
24 using Honememo.Wptscs.Websites;
27 /// MediaWikiTranslatorのテストクラスです。
30 public class MediaWikiTranslatorTest
35 /// MediaWikiTranslatorテスト用のクラスです。
37 public class TestMediaWikiTranslator : MediaWikiTranslator
39 #region 非公開メソッドテスト用のオーラーライドメソッド
42 /// 内部リンクを解析し、変換先言語の記事へのリンクに変換する。
44 /// <param name="link">変換元リンク。</param>
45 /// <param name="parent">サブページ用の親記事タイトル。</param>
46 /// <returns>変換済みリンク。</returns>
47 public new IElement ReplaceLink(MediaWikiLink link, string parent)
49 return base.ReplaceLink(link, parent);
53 /// テンプレートを解析し、変換先言語の記事へのテンプレートに変換する。
55 /// <param name="template">変換元テンプレート。</param>
56 /// <param name="parent">サブページ用の親記事タイトル。</param>
57 /// <returns>変換済みテンプレート。</returns>
58 public new IElement ReplaceTemplate(MediaWikiTemplate template, string parent)
60 return base.ReplaceTemplate(template, parent);
64 /// 指定された見出しに対して、対訳表による変換を行う。
66 /// <param name="heading">見出し。</param>
67 /// <param name="parent">サブページ用の親記事タイトル。</param>
68 /// <returns>変換後の見出し。</returns>
69 public new IElement ReplaceHeading(MediaWikiHeading heading, string parent)
71 return base.ReplaceHeading(heading, parent);
82 /// テスト結果が格納されているフォルダパス。
84 private static readonly string resultDir = Path.Combine(MockFactory.TestMediaWikiDir, "result");
88 #region 各処理のメソッドテストケース
91 /// ReplaceLinkメソッドテストケース。
94 public void TestReplaceLink()
96 TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
97 MockFactory mock = new MockFactory();
98 translator.From = mock.GetMediaWiki("ja");
99 translator.To = mock.GetMediaWiki("en");
100 translator.To.LinkInterwikiFormat = null;
103 translator.HeadingTable = new TranslationTable();
104 IDictionary<string, string> dic = new Dictionary<string, string>();
105 dic["en"] = "External links";
107 translator.HeadingTable.Add(dic);
108 translator.HeadingTable.From = "ja";
109 translator.HeadingTable.To = "en";
112 // 記事名だけの内部リンクで言語間リンクあり、変換先言語へのリンクとなる
113 // ※ 以下オブジェクトを毎回作り直しているのは、更新されてしまうケースがあるため
114 link = new MediaWikiLink();
115 link.Title = "ホワイトナイトツー";
116 Assert.AreEqual("[[Scaled Composites White Knight Two|ホワイトナイトツー]]", translator.ReplaceLink(link, "スペースシップツー").ToString());
119 link = new MediaWikiLink();
120 link.Title = "ホワイトナイトツー";
121 link.Section = "見出し";
122 Assert.AreEqual("[[Scaled Composites White Knight Two#見出し|ホワイトナイトツー#見出し]]", translator.ReplaceLink(link, "スペースシップツー").ToString());
125 link = new MediaWikiLink();
126 link.Title = "ホワイトナイトツー";
127 link.Section = "外部リンク";
128 Assert.AreEqual("[[Scaled Composites White Knight Two#External links|ホワイトナイトツー#外部リンク]]", translator.ReplaceLink(link, "スペースシップツー").ToString());
131 link = new MediaWikiLink();
132 link.Title = "ホワイトナイトツー";
133 link.Section = "外部リンク";
134 link.PipeTexts.Add(new TextElement("母機"));
135 Assert.AreEqual("[[Scaled Composites White Knight Two#External links|母機]]", translator.ReplaceLink(link, "スペースシップツー").ToString());
137 // 記事名だけの内部リンクで言語間リンクなし、変換元言語へのリンクとなる
138 translator.From = mock.GetMediaWiki("en");
139 translator.To = mock.GetMediaWiki("ja");
140 translator.To.LinkInterwikiFormat = null;
141 translator.HeadingTable.From = "en";
142 translator.HeadingTable.To = "ja";
143 link = new MediaWikiLink();
144 link.Title = "Exemplum";
145 Assert.AreEqual("[[:en:Exemplum|Exemplum]]", translator.ReplaceLink(link, "example").ToString());
148 link = new MediaWikiLink();
149 link.Title = "Exemplum";
150 link.Section = "Three examples of exempla";
151 Assert.AreEqual("[[:en:Exemplum#Three examples of exempla|Exemplum#Three examples of exempla]]", translator.ReplaceLink(link, "example").ToString());
154 link = new MediaWikiLink();
155 link.Title = "Exemplum";
156 link.Section = "External links";
157 Assert.AreEqual("[[:en:Exemplum#外部リンク|Exemplum#External links]]", translator.ReplaceLink(link, "example").ToString());
160 link = new MediaWikiLink();
161 link.Title = "Exemplum";
162 link.Section = "External links";
163 link.PipeTexts.Add(new TextElement("Exemplum_1"));
164 Assert.AreEqual("[[:en:Exemplum#外部リンク|Exemplum_1]]", translator.ReplaceLink(link, "example").ToString());
166 // 記事名だけの内部リンクで赤リンク、処理されない
167 link = new MediaWikiLink();
168 link.Title = "Nothing Page";
169 Assert.AreEqual("[[Nothing Page]]", translator.ReplaceLink(link, "example").ToString());
172 link = new MediaWikiLink();
173 link.Title = "Nothing Page";
174 link.Section = "Section A";
175 Assert.AreEqual("[[Nothing Page#Section A]]", translator.ReplaceLink(link, "example").ToString());
178 link = new MediaWikiLink();
179 link.Title = "Nothing Page";
180 link.Section = "External links";
181 Assert.AreEqual("[[Nothing Page#外部リンク]]", translator.ReplaceLink(link, "example").ToString());
184 link = new MediaWikiLink();
185 link.Title = "Nothing Page";
186 link.PipeTexts.Add(new TextElement("Dummy Link"));
187 Assert.AreEqual("[[Nothing Page|Dummy Link]]", translator.ReplaceLink(link, "example").ToString());
189 // [[Apollo 17]] のように文字参照が入っていても処理できる
190 link = new MediaWikiLink();
191 link.Title = "Fuji (Spacecraft)";
192 Assert.AreEqual("[[ふじ (宇宙船)|Fuji (Spacecraft)]]", translator.ReplaceLink(link, "example").ToString());
196 /// ReplaceLinkメソッドテストケース(カテゴリ)。
199 public void TestReplaceLinkCategory()
201 TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
202 MockFactory mock = new MockFactory();
203 translator.From = mock.GetMediaWiki("ja");
204 translator.To = mock.GetMediaWiki("en");
207 // 記事名だけの内部リンクで言語間リンクあり、変換先言語でのカテゴリとなる
208 // ※ 以下オブジェクトを毎回作り直しているのは、更新されてしまうケースがあるため
209 link = new MediaWikiLink();
210 link.Title = "Category:宇宙船";
211 Assert.AreEqual("[[Category:Manned spacecraft]]", translator.ReplaceLink(link, "スペースシップツー").ToString());
214 link = new MediaWikiLink();
215 link.Title = "Category:宇宙船";
216 link.PipeTexts.Add(new TextElement("すへえすしつふつう"));
217 Assert.AreEqual("[[Category:Manned spacecraft|すへえすしつふつう]]", translator.ReplaceLink(link, "スペースシップツー").ToString());
219 // 記事名だけの内部リンクで言語間リンクなし、変換元言語へのリンクとなり元のカテゴリはコメントとなる
220 translator.To = mock.GetMediaWiki("it");
221 link = new MediaWikiLink();
222 link.Title = "Category:宇宙船";
223 Assert.AreEqual("[[:ja:Category:宇宙船]]<!-- [[Category:宇宙船]] -->", translator.ReplaceLink(link, "スペースシップツー").ToString());
226 link = new MediaWikiLink();
227 link.Title = "Category:宇宙船";
228 link.PipeTexts.Add(new TextElement("すへえすしつふつう"));
229 Assert.AreEqual("[[:ja:Category:宇宙船]]<!-- [[Category:宇宙船|すへえすしつふつう]] -->", translator.ReplaceLink(link, "スペースシップツー").ToString());
231 // 記事名だけの内部リンクで赤リンク、処理されない
232 link = new MediaWikiLink();
233 link.Title = "Category:xx国の宇宙船";
234 Assert.AreEqual("[[Category:xx国の宇宙船]]", translator.ReplaceLink(link, "スペースシップツー").ToString());
237 link = new MediaWikiLink();
238 link.Title = "Category:xx国の宇宙船";
239 link.PipeTexts.Add(new TextElement("すへえすしつふつう"));
240 Assert.AreEqual("[[Category:xx国の宇宙船|すへえすしつふつう]]", translator.ReplaceLink(link, "スペースシップツー").ToString());
244 /// ReplaceLinkメソッドテストケース(ファイル)。
247 public void TestReplaceLinkFile()
249 TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
250 MockFactory mock = new MockFactory();
251 translator.From = mock.GetMediaWiki("en");
252 translator.To = mock.GetMediaWiki("ja");
255 // 画像などのファイルについては、名前空間を他国語に置き換えるだけ
256 // ※ 以下オブジェクトを毎回作り直しているのは、更新されてしまうケースがあるため
257 link = new MediaWikiLink();
258 link.Title = "File:Kepler22b-artwork.jpg";
259 Assert.AreEqual("[[ファイル:Kepler22b-artwork.jpg]]", translator.ReplaceLink(link, "Kepler-22b").ToString());
262 link = new MediaWikiLink();
263 link.Title = "File:Kepler22b-artwork.jpg";
264 link.PipeTexts.Add(new TextElement("thumb"));
265 link.PipeTexts.Add(new TextElement("right"));
266 link.PipeTexts.Add(new TextElement("Artist's conception of Kepler-22b."));
267 Assert.AreEqual("[[ファイル:Kepler22b-artwork.jpg|thumb|right|Artist's conception of Kepler-22b.]]", translator.ReplaceLink(link, "Kepler-22b").ToString());
269 // ja→enの場合もちゃんと置き換える(en→jaはFileのままでも使えるが逆は置き換えないと動かない)
270 translator.From = mock.GetMediaWiki("ja");
271 translator.To = mock.GetMediaWiki("en");
273 link = new MediaWikiLink();
274 link.Title = "ファイル:Kepler22b-artwork.jpg";
275 Assert.AreEqual("[[File:Kepler22b-artwork.jpg]]", translator.ReplaceLink(link, "ケプラー22b").ToString());
279 /// ReplaceLinkメソッドテストケース(仮リンク)。
282 public void TestReplaceLinkLinkInterwiki()
284 TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
285 MockFactory mock = new MockFactory();
286 translator.From = mock.GetMediaWiki("en");
287 translator.To = mock.GetMediaWiki("ja");
290 translator.HeadingTable = new TranslationTable();
291 IDictionary<string, string> dic = new Dictionary<string, string>();
292 dic["en"] = "External links";
294 translator.HeadingTable.Add(dic);
295 translator.HeadingTable.From = "en";
296 translator.HeadingTable.To = "ja";
299 // 記事名だけの内部リンクで言語間リンクなし、変換元言語へのリンクとなる
300 // ※ 以下オブジェクトを毎回作り直しているのは、更新されてしまうケースがあるため
301 link = new MediaWikiLink();
302 link.Title = "Exemplum";
303 Assert.AreEqual("{{仮リンク|Exemplum|en|Exemplum|label=Exemplum}}", translator.ReplaceLink(link, "example").ToString());
306 link = new MediaWikiLink();
307 link.Title = "Exemplum";
308 link.Section = "Three examples of exempla";
309 Assert.AreEqual("{{仮リンク|Exemplum#Three examples of exempla|en|Exemplum#Three examples of exempla|label=Exemplum#Three examples of exempla}}", translator.ReplaceLink(link, "example").ToString());
312 link = new MediaWikiLink();
313 link.Title = "Exemplum";
314 link.Section = "External links";
315 Assert.AreEqual("{{仮リンク|Exemplum#外部リンク|en|Exemplum#External links|label=Exemplum#External links}}", translator.ReplaceLink(link, "example").ToString());
318 link = new MediaWikiLink();
319 link.Title = "Exemplum";
320 link.Section = "External links";
321 link.PipeTexts.Add(new TextElement("Exemplum_1"));
322 Assert.AreEqual("{{仮リンク|Exemplum#外部リンク|en|Exemplum#External links|label=Exemplum_1}}", translator.ReplaceLink(link, "example").ToString());
324 // 言語間リンクありの場合、仮リンクは使用されない
325 link = new MediaWikiLink();
326 link.Title = "Example.com";
327 Assert.AreEqual("[[Example.com|Example.com]]", translator.ReplaceLink(link, "example").ToString());
329 // 記事名だけの内部リンクで赤リンクも、使用されない
330 link = new MediaWikiLink();
331 link.Title = "Nothing Page";
332 Assert.AreEqual("[[Nothing Page]]", translator.ReplaceLink(link, "example").ToString());
336 /// ReplaceTemplateメソッドテストケース。
339 public void TestReplaceTemplate()
341 TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
342 MockFactory mock = new MockFactory();
343 translator.From = mock.GetMediaWiki("en");
344 translator.To = mock.GetMediaWiki("ja");
345 MediaWikiTemplate template;
347 // テンプレート名だけで言語間リンクあり、変換先言語でのテンプレートとなる
348 // ※ 以下オブジェクトを毎回作り直しているのは、更新されてしまうケースがあるため
349 template = new MediaWikiTemplate("Citation needed");
350 Assert.AreEqual("{{要出典}}", translator.ReplaceTemplate(template, "example").ToString());
353 template = new MediaWikiTemplate("Citation needed");
354 template.PipeTexts.Add(new TextElement("date=January 2012"));
355 Assert.AreEqual("{{要出典|date=January 2012}}", translator.ReplaceTemplate(template, "example").ToString());
357 // テンプレート名だけで言語間リンクなし、変換元言語へのリンクとなり元のテンプレートはコメントとなる
358 template = new MediaWikiTemplate("Wiktionary");
359 Assert.AreEqual("[[:en:Template:Wiktionary]]<!-- {{Wiktionary}} -->", translator.ReplaceTemplate(template, "example").ToString());
362 template = new MediaWikiTemplate("Wiktionary");
363 template.PipeTexts.Add(new TextElement("Sample"));
364 Assert.AreEqual("[[:en:Template:Wiktionary]]<!-- {{Wiktionary|Sample}} -->", translator.ReplaceTemplate(template, "example").ToString());
366 // テンプレート名だけで赤リンク、処理されない
367 template = new MediaWikiTemplate("Invalid Template");
368 Assert.AreEqual("{{Invalid Template}}", translator.ReplaceTemplate(template, "example").ToString());
371 template = new MediaWikiTemplate("Invalid Template");
372 template.PipeTexts.Add(new TextElement("parameter=1"));
373 Assert.AreEqual("{{Invalid Template|parameter=1}}", translator.ReplaceTemplate(template, "example").ToString());
376 template = new MediaWikiTemplate("PAGENAME");
377 Assert.AreEqual("{{PAGENAME}}", translator.ReplaceTemplate(template, "example").ToString());
381 /// ReplaceTemplateメソッドテストケース(入れ子)。
384 public void TestReplaceTemplateNested()
386 TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
387 MockFactory mock = new MockFactory();
388 translator.From = mock.GetMediaWiki("en");
389 translator.To = mock.GetMediaWiki("ja");
390 MediaWikiTemplate template;
394 // テンプレート名だけで言語間リンクあり、入れ子も処理される
395 // ※ 以下オブジェクトを毎回作り直しているのは、更新されてしまうケースがあるため
396 template = new MediaWikiTemplate("Citation needed");
397 template.PipeTexts.Add(new TextElement("date=January 2012"));
398 list = new ListElement();
399 list.Add(new TextElement("note=See also "));
400 link = new MediaWikiLink();
401 link.Title = "Fuji (Spacecraft)";
403 template.PipeTexts.Add(list);
404 Assert.AreEqual("{{要出典|date=January 2012|note=See also [[ふじ (宇宙船)|Fuji (Spacecraft)]]}}", translator.ReplaceTemplate(template, "example").ToString());
406 // テンプレート名だけで言語間リンクなし、入れ子は処理されない
407 template = new MediaWikiTemplate("Wiktionary");
408 template.PipeTexts.Add(new TextElement("Sample"));
409 list = new ListElement();
410 list.Add(new TextElement("note=See also "));
411 link = new MediaWikiLink();
412 link.Title = "Fuji (Spacecraft)";
414 template.PipeTexts.Add(list);
415 Assert.AreEqual("[[:en:Template:Wiktionary]]<!-- {{Wiktionary|Sample|note=See also [[Fuji (Spacecraft)]]}} -->", translator.ReplaceTemplate(template, "example").ToString());
417 // テンプレート名だけで赤リンク、入れ子は処理されない
418 template = new MediaWikiTemplate("Invalid Template");
419 template.PipeTexts.Add(new TextElement("parameter=1"));
420 list = new ListElement();
421 list.Add(new TextElement("note=See also "));
422 link = new MediaWikiLink();
423 link.Title = "Fuji (Spacecraft)";
425 template.PipeTexts.Add(list);
426 Assert.AreEqual("{{Invalid Template|parameter=1|note=See also [[Fuji (Spacecraft)]]}}", translator.ReplaceTemplate(template, "example").ToString());
430 /// ReplaceHeadingメソッドテストケース。
433 public void TestReplaceHeading()
435 TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
436 MockFactory mock = new MockFactory();
437 translator.From = mock.GetMediaWiki("en");
438 translator.To = mock.GetMediaWiki("ja");
441 translator.HeadingTable = new TranslationTable();
442 IDictionary<string, string> dic = new Dictionary<string, string>();
443 dic["en"] = "External links";
445 translator.HeadingTable.Add(dic);
446 translator.HeadingTable.From = "en";
447 translator.HeadingTable.To = "ja";
449 MediaWikiHeading heading = new MediaWikiHeading();
452 // ※ 以下リストを毎回作り直しているのは、更新されてしまうケースがあるため
454 heading.Add(new TextElement(" invalid section "));
455 Assert.AreEqual("== invalid section ==", translator.ReplaceHeading(heading, "example").ToString());
459 heading.Add(new TextElement(" External links "));
460 Assert.AreEqual("==外部リンク==", translator.ReplaceHeading(heading, "example").ToString());
462 // 一部が内部リンク等になっている場合、対訳表とは一致しない
464 heading.Add(new TextElement(" External "));
465 heading.Add(new MediaWikiLink("link"));
466 heading.Add(new TextElement("s "));
467 Assert.AreEqual("== External [[link]]s ==", translator.ReplaceHeading(heading, "example").ToString());
471 /// ReplaceHeadingメソッドテストケース(入れ子)。
474 public void TestReplaceHeadingNested()
476 TestMediaWikiTranslator translator = new TestMediaWikiTranslator();
477 MockFactory mock = new MockFactory();
478 translator.From = mock.GetMediaWiki("ja");
479 translator.To = mock.GetMediaWiki("en");
482 translator.HeadingTable = new TranslationTable();
483 IDictionary<string, string> dic = new Dictionary<string, string>();
484 translator.HeadingTable.Add(dic);
485 translator.HeadingTable.From = "ja";
486 translator.HeadingTable.To = "en";
488 MediaWikiHeading heading = new MediaWikiHeading();
490 // 対訳表に登録されていない見出しの場合、入れ子も処理される
491 // ※ 以下リストを毎回作り直しているのは、更新されてしまうケースがあるため
493 heading.Add(new TextElement(" "));
494 heading.Add(new MediaWikiLink("宇宙旅行"));
495 heading.Add(new MediaWikiTemplate("ref-en"));
496 heading.Add(new TextElement(" "));
497 Assert.AreEqual("=== [[Space tourism|宇宙旅行]]{{En icon}} ===", translator.ReplaceHeading(heading, "スペースシップツー").ToString());
499 // 対訳表に登録されている見出しの場合、入れ子は処理されない
500 dic["ja"] = "[[宇宙旅行]]{{ref-en}}";
501 dic["en"] = "[[弾道飛行]]{{ref-en}}";
503 heading.Add(new TextElement(" "));
504 heading.Add(new MediaWikiLink("宇宙旅行"));
505 heading.Add(new MediaWikiTemplate("ref-en"));
506 heading.Add(new TextElement(" "));
507 Assert.AreEqual("===[[弾道飛行]]{{ref-en}}===", translator.ReplaceHeading(heading, "スペースシップツー").ToString());
515 /// テストデータを用い、Runを通しで実行するテストケース。基本動作。
518 public void TestExampleIgnoreHeading()
520 MockFactory mock = new MockFactory();
521 MediaWiki from = mock.GetMediaWiki("en");
522 MediaWikiTranslator translator = new MediaWikiTranslator();
523 translator.From = from;
524 translator.To = mock.GetMediaWiki("ja");
525 translator.To.LinkInterwikiFormat = null;
526 translator.HeadingTable = new TranslationTable();
527 translator.HeadingTable.From = "en";
528 translator.HeadingTable.To = "ja";
529 translator.Run("example");
531 // テストデータの変換結果を期待される結果と比較する
532 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
533 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleIgnoreHeading Text > " + translate.Text);
535 File.ReadAllText(Path.Combine(resultDir, "example_定型句なし.txt")).Replace("<!-- Wikipedia 翻訳支援ツール Ver0.xx", "<!-- " + FormUtils.ApplicationName()),
538 // テストデータの変換ログを期待されるログと比較する
539 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
540 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleIgnoreHeading Log > " + translate.Log);
542 File.ReadAllText(Path.Combine(resultDir, "example_定型句なし.log")).Replace("file:///xxx/Data/MediaWiki/en/", from.Location),
547 /// テストデータを用い、Runを通しで実行するテストケース。基本動作見出しの変換含む。
549 /// <remarks>C++/CLI版の0.73までと同等の動作。</remarks>
551 public void TestExample()
553 MockFactory mock = new MockFactory();
554 MediaWiki from = mock.GetMediaWiki("en");
555 MediaWikiTranslator translator = new MediaWikiTranslator();
556 translator.From = from;
557 translator.To = mock.GetMediaWiki("ja");
558 translator.To.LinkInterwikiFormat = null;
559 translator.To.LangFormat = null;
562 translator.HeadingTable = new TranslationTable();
563 IDictionary<string, string> dic = new Dictionary<string, string>();
564 dic["en"] = "See also";
566 translator.HeadingTable.Add(dic);
567 translator.HeadingTable.From = "en";
568 translator.HeadingTable.To = "ja";
569 translator.Run("example");
571 // テストデータの変換結果を期待される結果と比較する
572 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
573 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);
575 File.ReadAllText(Path.Combine(resultDir, "example.txt")).Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),
578 // テストデータの変換ログを期待されるログと比較する
579 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
580 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);
582 File.ReadAllText(Path.Combine(resultDir, "example.log")).Replace("http://en.wikipedia.org", from.Location),
587 /// テストデータを用い、Runを通しで実行するテストケース。キャッシュ使用。
590 public void TestExampleWithCache()
592 MockFactory mock = new MockFactory();
593 MediaWiki from = mock.GetMediaWiki("en");
594 MediaWikiTranslator translator = new MediaWikiTranslator();
595 translator.From = from;
596 translator.To = mock.GetMediaWiki("ja");
597 translator.To.LinkInterwikiFormat = null;
600 translator.HeadingTable = new TranslationTable();
601 IDictionary<string, string> dic = new Dictionary<string, string>();
602 dic["en"] = "See also";
604 translator.HeadingTable.Add(dic);
605 translator.HeadingTable.From = "en";
606 translator.HeadingTable.To = "ja";
608 // 以下のキャッシュパターンを指定して実行
609 TranslationDictionary table = new TranslationDictionary("en", "ja");
610 table.Add("Template:Wiktionary", new TranslationDictionary.Item { Word = "Template:Wiktionary" });
611 table.Add("example.org", new TranslationDictionary.Item());
612 table.Add(".example", new TranslationDictionary.Item { Word = "。さんぷる", Alias = ".dummy" });
613 table.Add("Template:Disambig", new TranslationDictionary.Item { Word = "Template:曖昧さ回避" });
614 translator.ItemTable = table;
615 translator.Run("example");
617 // キャッシュに今回の処理で取得した内容が更新されているかを確認
618 Assert.IsTrue(table.ContainsKey("example.com"));
619 Assert.AreEqual("Example.com", table["example.com"].Word);
620 Assert.IsNull(table["example.com"].Alias);
621 Assert.IsNotNull(table["example.com"].Timestamp);
622 Assert.IsTrue(table.ContainsKey("Exemplum"));
623 Assert.IsEmpty(table["Exemplum"].Word);
624 Assert.IsNull(table["Exemplum"].Alias);
625 Assert.IsNotNull(table["Exemplum"].Timestamp);
626 Assert.IsTrue(table.ContainsKey("example.net"));
627 Assert.AreEqual("Example.com", table["example.net"].Word);
628 Assert.AreEqual("Example.com", table["example.net"].Alias);
629 Assert.IsNotNull(table["example.net"].Timestamp);
631 // テストデータの変換結果を期待される結果と比較する
632 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
633 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleWithCache Text > " + translate.Text);
635 File.ReadAllText(Path.Combine(resultDir, "example_キャッシュ使用.txt")).Replace("<!-- Wikipedia 翻訳支援ツール Ver0.xx", "<!-- " + FormUtils.ApplicationName()),
638 // テストデータの変換ログを期待されるログと比較する
639 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
640 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExampleWithCache Log > " + translate.Log);
642 File.ReadAllText(Path.Combine(resultDir, "example_キャッシュ使用.log")).Replace("file:///xxx/Data/MediaWiki/en/", from.Location),
647 /// テストデータを用い、Runを通しで実行するテストケース。基本動作見出しの変換、{{仮リンク}}への置き換え含む。
650 public void TestExampleWithLinkInterwiki()
652 MockFactory mock = new MockFactory();
653 MediaWiki from = mock.GetMediaWiki("en");
654 MediaWikiTranslator translator = new MediaWikiTranslator();
655 translator.From = from;
656 translator.To = mock.GetMediaWiki("ja");
659 translator.HeadingTable = new TranslationTable();
660 IDictionary<string, string> dic = new Dictionary<string, string>();
661 dic["en"] = "See also";
663 translator.HeadingTable.Add(dic);
664 translator.HeadingTable.From = "en";
665 translator.HeadingTable.To = "ja";
666 translator.Run("example");
668 // テストデータの変換結果を期待される結果と比較する
669 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
670 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);
672 File.ReadAllText(Path.Combine(resultDir, "example_仮リンク有効.txt")).Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),
675 // テストデータの変換ログを期待されるログと比較する
676 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
677 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);
679 File.ReadAllText(Path.Combine(resultDir, "example.log")).Replace("http://en.wikipedia.org", from.Location),
684 /// テストデータを用い、Runを通しで実行するテストケース(日本語版→英語版)。
686 /// <remarks>C++/CLI版の0.73までと同等の動作。</remarks>
688 public void TestSpaceShipTwo()
690 MockFactory mock = new MockFactory();
691 MediaWiki from = mock.GetMediaWiki("ja");
692 MediaWikiTranslator translator = new MediaWikiTranslator();
693 translator.From = from;
694 translator.To = mock.GetMediaWiki("en");
695 translator.To.LinkInterwikiFormat = null;
696 translator.ItemTable = new TranslationDictionary("ja", "en");
697 translator.IsContinueAtInterwikiExisted = (string interwiki) => true;
700 translator.HeadingTable = new TranslationTable();
701 IDictionary<string, string> dic = new Dictionary<string, string>();
702 dic["en"] = "See Also";
704 translator.HeadingTable.Add(dic);
705 dic = new Dictionary<string, string>();
706 dic["en"] = "External links";
708 translator.HeadingTable.Add(dic);
709 dic = new Dictionary<string, string>();
712 translator.HeadingTable.Add(dic);
713 translator.HeadingTable.From = "ja";
714 translator.HeadingTable.To = "en";
715 translator.Run("スペースシップツー");
717 // テストデータの変換結果を期待される結果と比較する
718 // バージョン表記部分は毎回変化するため、期待される結果のうち該当部分を更新する
719 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Text > " + translate.Text);
721 File.ReadAllText(Path.Combine(resultDir, "スペースシップツー.txt")).Replace("<!-- Wikipedia 翻訳支援ツール Ver0.73", "<!-- " + FormUtils.ApplicationName()),
724 // テストデータの変換ログを期待されるログと比較する
725 // 1行目のパスが一致しないので、期待される結果のうち該当部分を更新する
726 //System.Diagnostics.Debug.WriteLine("TranslateMediaWikiTest.TestExample Log > " + translate.Log);
728 File.ReadAllText(Path.Combine(resultDir, "スペースシップツー.log")).Replace("http://ja.wikipedia.org", from.Location),
733 /// Runを通しで実行するテストケース(対象記事なし)。
736 public void TestPageNothing()
738 MockFactory mock = new MockFactory();
739 MediaWiki from = mock.GetMediaWiki("en");
740 Translator translator = new MediaWikiTranslator();
741 translator.From = from;
742 translator.To = mock.GetMediaWiki("ja");
746 translator.Run("Nothing Page");
749 catch (ApplicationException)
753 ("http://en.wikipedia.org より [[Nothing Page]] を取得。\r\n"
754 + "→ 翻訳元として指定された記事は存在しません。記事名を確認してください。\r\n")
755 .Replace("http://en.wikipedia.org", from.Location),
761 /// Runを通しで実行するテストケース(対象記事がリダイレクトで無し)。
764 public void TestPageRedirectNothing()
766 MockFactory mock = new MockFactory();
767 MediaWiki from = mock.GetMediaWiki("en");
768 Translator translator = new MediaWikiTranslator();
769 translator.From = from;
770 translator.To = mock.GetMediaWiki("ja");
774 translator.Run("Redirect→Nothing Page");
777 catch (ApplicationException)
781 ("http://en.wikipedia.org より [[Redirect→Nothing Page]] を取得。\r\n"
782 + "→ リダイレクト [[Nothing Page]]\r\n"
783 + "→ 翻訳元として指定された記事は存在しません。記事名を確認してください。\r\n")
784 .Replace("http://en.wikipedia.org", from.Location),