1 // ================================================================================================
3 // MediaWikiHeadingParserのテストクラスソース。</summary>
5 // <copyright file="MediaWikiHeadingParserTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Parsers
14 using System.Collections.Generic;
15 using Honememo.Parsers;
16 using Honememo.Wptscs.Models;
17 using Honememo.Wptscs.Websites;
18 using NUnit.Framework;
21 /// MediaWikiHeadingParserのテストクラスです。
24 public class MediaWikiHeadingParserTest
29 /// 前処理・後処理で生成/解放される言語別のMediaWikiParser。
31 private IDictionary<string, MediaWikiParser> mediaWikiParsers = new Dictionary<string, MediaWikiParser>();
41 public void SetUpBeforeClass()
43 // Disposeが必要なMediaWikiParserの生成/解放
44 this.mediaWikiParsers["en"] = new MediaWikiParser(new MockFactory().GetMediaWiki("en"));
51 public void TearDownAfterClass()
53 // Disposeが必要なMediaWikiParserの生成/解放
54 foreach (MediaWikiParser parser in this.mediaWikiParsers.Values)
59 this.mediaWikiParsers.Clear();
70 public void TestConstructor()
72 // TODO: ちゃんと設定されているかも確認する?
73 MediaWikiHeadingParser parser = new MediaWikiHeadingParser(
74 new MediaWikiParser(new MockFactory().GetMediaWiki("en")));
79 #region インタフェース実装メソッドテストケース
82 /// TryParseメソッドテストケース。
85 public void TestTryParse()
88 MediaWikiHeading heading;
89 MediaWikiHeadingParser parser = new MediaWikiHeadingParser(this.mediaWikiParsers["en"]);
92 Assert.IsTrue(parser.TryParse("==test==", out element));
93 Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
94 heading = (MediaWikiHeading)element;
95 Assert.AreEqual("==test==", heading.ToString());
96 Assert.AreEqual(2, heading.Level);
97 Assert.AreEqual(1, heading.Count);
98 Assert.AreEqual("test", heading[0].ToString());
101 Assert.IsTrue(parser.TryParse("== test == \r\ntest", out element));
102 Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
103 heading = (MediaWikiHeading)element;
104 Assert.AreEqual("== test == ", heading.ToString());
105 Assert.AreEqual(2, heading.Level);
106 Assert.AreEqual(1, heading.Count);
107 Assert.AreEqual(" test ", heading[0].ToString());
110 Assert.IsFalse(parser.TryParse("== test == test", out element));
111 Assert.IsNull(element);
114 Assert.IsTrue(parser.TryParse("===[[test]] and sample===", out element));
115 Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
116 heading = (MediaWikiHeading)element;
117 Assert.AreEqual("===[[test]] and sample===", heading.ToString());
118 Assert.AreEqual(3, heading.Level);
119 Assert.AreEqual(2, heading.Count);
120 Assert.AreEqual("[[test]]", heading[0].ToString());
121 Assert.IsInstanceOf(typeof(MediaWikiLink), heading[0]);
122 Assert.AreEqual(" and sample", heading[1].ToString());
124 // 前後で数が違うのはOK、少ない側の階層と判定
125 Assert.IsTrue(parser.TryParse("=test==", out element));
126 Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
127 heading = (MediaWikiHeading)element;
128 Assert.AreEqual("=test==", heading.ToString());
129 Assert.AreEqual(1, heading.Level);
132 Assert.IsTrue(parser.TryParse("====test==", out element));
133 Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
134 heading = (MediaWikiHeading)element;
135 Assert.AreEqual("====test==", heading.ToString());
136 Assert.AreEqual(2, heading.Level);
139 Assert.IsFalse(parser.TryParse(" ==test==", out element));
140 Assert.IsNull(element);
143 Assert.IsTrue(parser.TryParse("== {{lang\n|ja|見出し}} ==\n", out element));
144 Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
145 heading = (MediaWikiHeading)element;
146 Assert.AreEqual("== {{lang\n|ja|見出し}} ==", heading.ToString());
147 Assert.AreEqual(2, heading.Level);
148 Assert.AreEqual(3, heading.Count);
149 Assert.AreEqual(" ", heading[0].ToString());
150 Assert.AreEqual("{{lang\n|ja|見出し}}", heading[1].ToString());
151 Assert.IsInstanceOf(typeof(MediaWikiTemplate), heading[1]);
152 Assert.AreEqual(" ", heading[2].ToString());
156 /// TryParseメソッドテストケース(コメント)。
159 public void TestTryParseComment()
162 MediaWikiHeading heading;
163 MediaWikiHeadingParser parser = new MediaWikiHeadingParser(this.mediaWikiParsers["en"]);
165 // ↓1.01以前のバージョンで対応していたコメント、中のコメントが認識されなかった
166 // // こんな無茶なコメントも一応対応
167 // Assert.IsTrue(parser.TryParse("<!--test-->=<!--test-->=関連項目<!--test-->==<!--test-->\n", out element));
168 // Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
169 // heading = (MediaWikiHeading)element;
170 // Assert.AreEqual("<!--test-->=<!--test-->=関連項目<!--test-->==<!--test-->", heading.ToString());
171 // Assert.AreEqual(2, heading.Level);
172 // // TODO: 本当は2でコメントも見つけるべきだが、コメントは中も除外しているので現状1
173 // // Assert.AreEqual(2, heading.Count);
174 // // Assert.AreEqual("関連項目", heading[0].ToString());
175 // // Assert.AreEqual("<!--test-->", heading[1].ToString());
176 // Assert.AreEqual(1, heading.Count);
177 // Assert.AreEqual("関連項目", heading[0].ToString());
179 Assert.IsFalse(parser.TryParse("<!--test-->=<!--test-->=関連項目<!--test-->==<!--test-->\n", out element));
180 Assert.IsTrue(parser.TryParse("=<!--test-->=関連項目<!--test-->==\n", out element));
181 Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
182 heading = (MediaWikiHeading)element;
183 Assert.AreEqual(1, heading.Level);
184 Assert.AreEqual(4, heading.Count);
185 Assert.AreEqual("<!--test-->", heading[0].ToString());
186 Assert.AreEqual("=関連項目", heading[1].ToString());
187 Assert.AreEqual("<!--test-->", heading[2].ToString());
188 Assert.AreEqual("=", heading[3].ToString());
189 Assert.IsFalse(parser.TryParse("==関連項目<!--test-->==<!--test-->\n", out element));
191 // ↓1.10改修後に対応しているコメント、変なところのコメントは駄目だが中のものを認識する
192 Assert.IsTrue(parser.TryParse("==<!--test1-->関連項目<!--test2-->==\n", out element));
193 Assert.IsInstanceOf(typeof(MediaWikiHeading), element);
194 heading = (MediaWikiHeading)element;
195 Assert.AreEqual("==<!--test1-->関連項目<!--test2-->==", heading.ToString());
196 Assert.AreEqual(2, heading.Level);
197 Assert.AreEqual(3, heading.Count);
198 Assert.AreEqual("<!--test1-->", heading[0].ToString());
199 Assert.IsInstanceOf(typeof(XmlCommentElement), heading[0]);
200 Assert.AreEqual("関連項目", heading[1].ToString());
201 Assert.AreEqual("<!--test2-->", heading[2].ToString());