OSDN Git Service

#30244 Visual Studio 2012 Express for Windows Desktop, StyleCop 4.7, WiX 3.6 に合わせたソース...
[wptscs/wpts.git] / WptscsTest / Logics / MediaWikiLoggerTest.cs
1 // ================================================================================================
2 // <summary>
3 //      MediaWikiLoggerのテストクラスソース。</summary>
4 //
5 // <copyright file="MediaWikiLoggerTest.cs" company="honeplusのメモ帳">
6 //      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
7 // <author>
8 //      Honeplus</author>
9 // ================================================================================================
10
11 namespace Honememo.Wptscs.Logics
12 {
13     using System;
14     using System.Collections.Generic;
15     using Honememo.Parsers;
16     using Honememo.Wptscs.Parsers;
17     using Microsoft.VisualStudio.TestTools.UnitTesting;
18
19     /// <summary>
20     /// <see cref="MediaWikiLogger"/>のテストクラスです。
21     /// </summary>
22     [TestClass]
23     public class MediaWikiLoggerTest
24     {
25         #region private変数
26
27         /// <summary>
28         /// テスト実施中カルチャを変更し後で戻すため、そのバックアップ。
29         /// </summary>
30         private System.Globalization.CultureInfo backupCulture;
31
32         #endregion
33
34         #region 前処理・後処理
35
36         /// <summary>
37         /// テストの前処理。
38         /// </summary>
39         [TestInitialize]
40         public void SetUp()
41         {
42             // ロガーの処理結果はカルチャーにより変化するため、ja-JPを明示的に設定する
43             this.backupCulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
44             System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("ja-JP");
45         }
46
47         /// <summary>
48         /// テストの後処理。
49         /// </summary>
50         [TestCleanup]
51         public void TearDown()
52         {
53             // カルチャーを元に戻す
54             System.Threading.Thread.CurrentThread.CurrentUICulture = this.backupCulture;
55         }
56
57         #endregion
58
59         #region ログ登録メソッド(翻訳支援処理)テストケース
60
61         /// <summary>
62         /// AddSourceメソッドテストケース。
63         /// </summary>
64         public void TestAddSource()
65         {
66             LoggerMock logger = new LoggerMock();
67             Logger diff = new Logger();
68             
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);
79
80             // MediaWiki関連の一部要素は独自に整形して出力
81             logger.Clear();
82             logger.AddSource(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
83             Assert.AreEqual("[[記事名]] → ", logger.ToString());
84             logger.Clear();
85             logger.AddSource(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" });
86             Assert.AreEqual("{{記事名}} → ", logger.ToString());
87
88             // 見出しの場合、右矢印が出ない&直前に空行が入る
89             logger.Clear();
90             logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し==" });
91             Assert.AreEqual(Environment.NewLine + "==見出し==", logger.ToString());
92
93             // いずれのケースでも、親クラスにある改行されていなければ改行は行われる
94             logger.Clear();
95             logger.Log = "test";
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());
100         }
101
102         /// <summary>
103         /// AddAliasメソッドテストケース。
104         /// </summary>
105         [TestMethod]
106         public void TestAddAlias()
107         {
108             LoggerMock logger = new LoggerMock();
109
110             // リダイレクトとして出力
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);
118
119             // MediaWiki関連の一部要素は独自に整形して出力
120             logger.Clear();
121             logger.AddAlias(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
122             Assert.AreEqual("リダイレクト [[記事名]] → ", logger.ToString());
123             logger.Clear();
124             logger.AddAlias(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" });
125             Assert.AreEqual("リダイレクト {{記事名}} → ", logger.ToString());
126
127             // 直前のログが見出しの場合矢印を出力、その後リダイレクトを出力
128             // ※ 見出しでリダイレクトというのはありえないが、一応AddDestinationとあわせて処理は入れている
129             logger.Clear();
130             logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し1==" });
131             logger.AddAlias(new MediaWikiHeading { ParsedString = "==見出し2==" });
132             Assert.AreEqual(Environment.NewLine + "==見出し1== → リダイレクト ==見出し2== → ", logger.ToString());
133         }
134
135         /// <summary>
136         /// AddDestinationメソッドテストケース。
137         /// </summary>
138         [TestMethod]
139         public void TestAddDestination()
140         {
141             LoggerMock logger = new LoggerMock();
142             Logger diff = new Logger();
143
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);
158
159             // MediaWiki関連の一部要素は独自に整形して出力
160             logger.Clear();
161             logger.AddDestination(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
162             Assert.AreEqual("[[記事名]]" + Environment.NewLine, logger.ToString());
163             logger.Clear();
164             logger.AddDestination(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" }, true);
165             Assert.AreEqual("{{記事名}} ※キャッシュ" + Environment.NewLine, logger.ToString());
166
167             // 直前のログが見出しの場合矢印を出力、その後独自に整形した変換先を出力
168             logger.Clear();
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());
172         }
173
174         #endregion
175
176         #region モッククラス
177
178         /// <summary>
179         /// Loggerテスト用のモッククラスです。
180         /// </summary>
181         public class LoggerMock : MediaWikiLogger
182         {
183             #region コンストラクタ
184
185             /// <summary>
186             /// テスト用コンストラクタ。
187             /// </summary>
188             public LoggerMock()
189             {
190                 this.LogUpdate += new EventHandler((object sender, EventArgs e) => { ++Count; });
191             }
192
193             #endregion
194
195             #region テスト用プロパティ
196
197             /// <summary>
198             /// LogUpdateイベントが呼ばれた回数のカウンタ。
199             /// </summary>
200             public int Count
201             {
202                 get;
203                 set;
204             }
205
206             #endregion
207
208             #region 非公開プロパティテスト用のオーラーライドプロパティ
209
210             /// <summary>
211             /// ログテキスト。
212             /// </summary>
213             public new string Log
214             {
215                 get
216                 {
217                     return base.Log;
218                 }
219
220                 set
221                 {
222                     base.Log = value;
223                 }
224             }
225
226             #endregion
227         }
228
229         #endregion
230     }
231 }