OSDN Git Service

7b1489a3e6309b573d6ac3217af9c2b157f95969
[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 NUnit.Framework;
18
19     /// <summary>
20     /// MediaWikiLoggerのテストクラスです。
21     /// </summary>
22     [TestFixture]
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         [TestFixtureSetUp]
40         public void SetUpBeforeClass()
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         [TestFixtureTearDown]
51         public void TearDownAfterClass()
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         [Test]
65         public void TestAddSource()
66         {
67             LoggerMock logger = new LoggerMock();
68             Logger diff = new Logger();
69             
70             // 通常の要素の場合、普通のロガーと同様に処理される
71             Assert.IsEmpty(logger.ToString());
72             logger.AddSource(new TextElement("1st string"));
73             diff.AddSource(new TextElement("1st string"));
74             Assert.AreEqual(diff.ToString(), logger.ToString());
75             Assert.AreEqual(1, logger.Count);
76             logger.AddSource(new TextElement("2nd string"));
77             diff.AddSource(new TextElement("2nd string"));
78             Assert.AreEqual(diff.ToString(), logger.ToString());
79             Assert.AreEqual(3, logger.Count);
80
81             // MediaWiki関連の一部要素は独自に整形して出力
82             logger.Clear();
83             logger.AddSource(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
84             Assert.AreEqual("[[記事名]] → ", logger.ToString());
85             logger.Clear();
86             logger.AddSource(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" });
87             Assert.AreEqual("{{記事名}} → ", logger.ToString());
88
89             // 見出しの場合、右矢印が出ない&直前に空行が入る
90             logger.Clear();
91             logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し==" });
92             Assert.AreEqual(Environment.NewLine + "==見出し==", logger.ToString());
93
94             // いずれのケースでも、親クラスにある改行されていなければ改行は行われる
95             logger.Clear();
96             logger.Log = "test";
97             logger.AddSource(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
98             Assert.AreEqual("test" + Environment.NewLine + "[[記事名]] → ", logger.ToString());
99             logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し==" });
100             Assert.AreEqual("test" + Environment.NewLine + "[[記事名]] → " + Environment.NewLine + Environment.NewLine + "==見出し==", logger.ToString());
101         }
102
103         /// <summary>
104         /// AddAliasメソッドテストケース。
105         /// </summary>
106         [Test]
107         public void TestAddAlias()
108         {
109             LoggerMock logger = new LoggerMock();
110
111             // リダイレクトとして出力
112             Assert.IsEmpty(logger.ToString());
113             logger.AddAlias(new TextElement("1st string"));
114             Assert.AreEqual("リダイレクト 1st string → ", logger.ToString());
115             Assert.AreEqual(1, logger.Count);
116             logger.AddAlias(new TextElement("2nd string"));
117             Assert.AreEqual("リダイレクト 1st string → リダイレクト 2nd string → ", logger.ToString());
118             Assert.AreEqual(2, logger.Count);
119
120             // MediaWiki関連の一部要素は独自に整形して出力
121             logger.Clear();
122             logger.AddAlias(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
123             Assert.AreEqual("リダイレクト [[記事名]] → ", logger.ToString());
124             logger.Clear();
125             logger.AddAlias(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" });
126             Assert.AreEqual("リダイレクト {{記事名}} → ", logger.ToString());
127
128             // 直前のログが見出しの場合矢印を出力、その後リダイレクトを出力
129             // ※ 見出しでリダイレクトというのはありえないが、一応AddDestinationとあわせて処理は入れている
130             logger.Clear();
131             logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し1==" });
132             logger.AddAlias(new MediaWikiHeading { ParsedString = "==見出し2==" });
133             Assert.AreEqual(Environment.NewLine + "==見出し1== → リダイレクト ==見出し2== → ", logger.ToString());
134         }
135
136         /// <summary>
137         /// AddDestinationメソッドテストケース。
138         /// </summary>
139         [Test]
140         public void TestAddDestination()
141         {
142             LoggerMock logger = new LoggerMock();
143             Logger diff = new Logger();
144
145             // 通常の要素の場合、普通のロガーと同様に処理される
146             Assert.IsEmpty(logger.ToString());
147             logger.AddDestination(new TextElement("1st string"));
148             diff.AddDestination(new TextElement("1st string"));
149             Assert.AreEqual(diff.ToString(), logger.ToString());
150             Assert.AreEqual(1, logger.Count);
151             logger.AddDestination(new TextElement("2nd string"), false);
152             diff.AddDestination(new TextElement("2nd string"), false);
153             Assert.AreEqual(diff.ToString(), logger.ToString());
154             Assert.AreEqual(2, logger.Count);
155             logger.AddDestination(new TextElement("3rd string"), true);
156             diff.AddDestination(new TextElement("3rd string"), true);
157             Assert.AreEqual(diff.ToString(), logger.ToString());
158             Assert.AreEqual(3, logger.Count);
159
160             // MediaWiki関連の一部要素は独自に整形して出力
161             logger.Clear();
162             logger.AddDestination(new MediaWikiLink("記事名") { Section = "セクション", Interwiki = "ja" });
163             Assert.AreEqual("[[記事名]]" + Environment.NewLine, logger.ToString());
164             logger.Clear();
165             logger.AddDestination(new MediaWikiTemplate("記事名") { Section = "セクション", Interwiki = "ja" }, true);
166             Assert.AreEqual("{{記事名}} ※キャッシュ" + Environment.NewLine, logger.ToString());
167
168             // 直前のログが見出しの場合矢印を出力、その後独自に整形した変換先を出力
169             logger.Clear();
170             logger.AddSource(new MediaWikiHeading { ParsedString = "==見出し1==" });
171             logger.AddDestination(new MediaWikiHeading { ParsedString = "==見出し2==" });
172             Assert.AreEqual(Environment.NewLine + "==見出し1== → ==見出し2==" + Environment.NewLine, logger.ToString());
173         }
174
175         #endregion
176
177         #region モッククラス
178
179         /// <summary>
180         /// Loggerテスト用のモッククラスです。
181         /// </summary>
182         public class LoggerMock : MediaWikiLogger
183         {
184             #region コンストラクタ
185
186             /// <summary>
187             /// テスト用コンストラクタ。
188             /// </summary>
189             public LoggerMock()
190             {
191                 this.LogUpdate += new EventHandler((object sender, EventArgs e) => { ++Count; });
192             }
193
194             #endregion
195
196             #region テスト用プロパティ
197
198             /// <summary>
199             /// LogUpdateイベントが呼ばれた回数のカウンタ。
200             /// </summary>
201             public int Count
202             {
203                 get;
204                 set;
205             }
206
207             #endregion
208
209             #region 非公開プロパティテスト用のオーラーライドプロパティ
210
211             /// <summary>
212             /// ログテキスト。
213             /// </summary>
214             public new string Log
215             {
216                 get
217                 {
218                     return base.Log;
219                 }
220
221                 set
222                 {
223                     base.Log = value;
224                 }
225             }
226
227             #endregion
228         }
229
230         #endregion
231     }
232 }