1 // ================================================================================================
3 // MediaWikiLoggerのテストクラスソース。</summary>
5 // <copyright file="MediaWikiLoggerTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Logics
14 using System.Collections.Generic;
15 using Honememo.Parsers;
16 using Honememo.Wptscs.Parsers;
17 using Microsoft.VisualStudio.TestTools.UnitTesting;
20 /// <see cref="MediaWikiLogger"/>のテストクラスです。
23 public class MediaWikiLoggerTest
28 /// テスト実施中カルチャを変更し後で戻すため、そのバックアップ。
30 private System.Globalization.CultureInfo backupCulture;
42 // ロガーの処理結果はカルチャーにより変化するため、ja-JPを明示的に設定する
43 this.backupCulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
44 System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("ja-JP");
51 public void TearDown()
54 System.Threading.Thread.CurrentThread.CurrentUICulture = this.backupCulture;
59 #region ログ登録メソッド(翻訳支援処理)テストケース
62 /// AddSourceメソッドテストケース。
64 public void TestAddSource()
66 LoggerMock logger = new LoggerMock();
67 Logger diff = new Logger();
69 // 通常の要素の場合、普通のロガーと同様に処理される
70 Assert.AreEqual(string.Empty, logger.ToString());
71 logger.AddSource(new TextElement("1st string"));
72 diff.AddSource(new TextElement("1st string"));
73 Assert.AreEqual(diff.ToString(), logger.ToString());
74 Assert.AreEqual(1, logger.Count);
75 logger.AddSource(new TextElement("2nd string"));
76 diff.AddSource(new TextElement("2nd string"));
77 Assert.AreEqual(diff.ToString(), logger.ToString());
78 Assert.AreEqual(3, logger.Count);
80 // MediaWiki関連の一部要素は独自に整形して出力
82 logger.AddSource(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
83 Assert.AreEqual("[[記事名]] → ", logger.ToString());
85 logger.AddSource(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" });
86 Assert.AreEqual("{{記事名}} → ", logger.ToString());
88 // 見出しの場合、右矢印が出ない&直前に空行が入る
90 logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し==" });
91 Assert.AreEqual(Environment.NewLine + "==見出し==", logger.ToString());
93 // いずれのケースでも、親クラスにある改行されていなければ改行は行われる
96 logger.AddSource(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
97 Assert.AreEqual("test" + Environment.NewLine + "[[記事名]] → ", logger.ToString());
98 logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し==" });
99 Assert.AreEqual("test" + Environment.NewLine + "[[記事名]] → " + Environment.NewLine + Environment.NewLine + "==見出し==", logger.ToString());
103 /// AddAliasメソッドテストケース。
106 public void TestAddAlias()
108 LoggerMock logger = new LoggerMock();
111 Assert.AreEqual(string.Empty, logger.ToString());
112 logger.AddAlias(new TextElement("1st string"));
113 Assert.AreEqual("リダイレクト 1st string → ", logger.ToString());
114 Assert.AreEqual(1, logger.Count);
115 logger.AddAlias(new TextElement("2nd string"));
116 Assert.AreEqual("リダイレクト 1st string → リダイレクト 2nd string → ", logger.ToString());
117 Assert.AreEqual(2, logger.Count);
119 // MediaWiki関連の一部要素は独自に整形して出力
121 logger.AddAlias(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
122 Assert.AreEqual("リダイレクト [[記事名]] → ", logger.ToString());
124 logger.AddAlias(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" });
125 Assert.AreEqual("リダイレクト {{記事名}} → ", logger.ToString());
127 // 直前のログが見出しの場合矢印を出力、その後リダイレクトを出力
128 // ※ 見出しでリダイレクトというのはありえないが、一応AddDestinationとあわせて処理は入れている
130 logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し1==" });
131 logger.AddAlias(new MediaWikiHeading { ParsedString = "==見出し2==" });
132 Assert.AreEqual(Environment.NewLine + "==見出し1== → リダイレクト ==見出し2== → ", logger.ToString());
136 /// AddDestinationメソッドテストケース。
139 public void TestAddDestination()
141 LoggerMock logger = new LoggerMock();
142 Logger diff = new Logger();
144 // 通常の要素の場合、普通のロガーと同様に処理される
145 Assert.AreEqual(string.Empty, logger.ToString());
146 logger.AddDestination(new TextElement("1st string"));
147 diff.AddDestination(new TextElement("1st string"));
148 Assert.AreEqual(diff.ToString(), logger.ToString());
149 Assert.AreEqual(1, logger.Count);
150 logger.AddDestination(new TextElement("2nd string"), false);
151 diff.AddDestination(new TextElement("2nd string"), false);
152 Assert.AreEqual(diff.ToString(), logger.ToString());
153 Assert.AreEqual(2, logger.Count);
154 logger.AddDestination(new TextElement("3rd string"), true);
155 diff.AddDestination(new TextElement("3rd string"), true);
156 Assert.AreEqual(diff.ToString(), logger.ToString());
157 Assert.AreEqual(3, logger.Count);
159 // MediaWiki関連の一部要素は独自に整形して出力
161 logger.AddDestination(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
162 Assert.AreEqual("[[記事名]]" + Environment.NewLine, logger.ToString());
164 logger.AddDestination(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" }, true);
165 Assert.AreEqual("{{記事名}} ※キャッシュ" + Environment.NewLine, logger.ToString());
167 // 直前のログが見出しの場合矢印を出力、その後独自に整形した変換先を出力
169 logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し1==" });
170 logger.AddDestination(new MediaWikiHeading { ParsedString = "==見出し2==" });
171 Assert.AreEqual(Environment.NewLine + "==見出し1== → ==見出し2==" + Environment.NewLine, logger.ToString());
179 /// Loggerテスト用のモッククラスです。
181 public class LoggerMock : MediaWikiLogger
190 this.LogUpdate += new EventHandler((object sender, EventArgs e) => { ++Count; });
198 /// LogUpdateイベントが呼ばれた回数のカウンタ。
208 #region 非公開プロパティテスト用のオーラーライドプロパティ
213 public new string Log