1 // ================================================================================================
3 // MediaWikiParserのテストクラスソース。</summary>
5 // <copyright file="MediaWikiParserTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Parsers
14 using Honememo.Parsers;
15 using Honememo.Wptscs.Models;
16 using Honememo.Wptscs.Websites;
17 using NUnit.Framework;
20 /// <see cref="MediaWikiParser"/>のテストクラスです。
23 class MediaWikiParserTest
28 /// <see cref="MediaWikiParser.Website"/>プロパティテストケース。
31 public void TestWebsite()
33 MediaWiki site = new MediaWiki(new Language("en"));
34 using (MediaWikiParser parser = new MediaWikiParser(site))
36 // コンストラクタで指定したオブジェクトが格納されていること
37 Assert.AreSame(site, parser.Website);
40 site = new MediaWiki(new Language("ja"));
41 parser.Website = site;
42 Assert.AreSame(site, parser.Website);
47 /// <see cref="MediaWikiParser.Website"/>プロパティテストケース(null)。
50 [ExpectedException(typeof(ArgumentNullException))]
51 public void TestWebsiteNull()
53 using (MediaWikiParser parser = new MediaWikiParser(new MockFactory().GetMediaWiki("en")))
55 parser.Website = null;
61 #region ITextParserインタフェース実装メソッドテストケース
64 /// <see cref="MediaWikiParser.TryParseToEndCondition"/>
65 /// メソッドテストケース(実際のデータを想定)。
68 public void TestTryParseToEndCondition()
70 string text = "'''Article Name''' is [[xxx]]\r\n==test head==\r\n<p>test</p><nowiki>[[test]]</nowiki><!--comment-->{{reflist}}";
72 using (MediaWikiParser parser = new MediaWikiParser(new MockFactory().GetMediaWiki("en")))
75 Assert.IsTrue(parser.TryParseToEndCondition(text, null, out element));
78 Assert.AreEqual(text, element.ToString());
79 Assert.IsInstanceOf(typeof(ListElement), element);
80 ListElement list = (ListElement)element;
81 Assert.AreEqual(8, list.Count);
82 Assert.AreEqual("'''Article Name''' is ", list[0].ToString());
83 Assert.AreEqual("[[xxx]]", list[1].ToString());
84 Assert.AreEqual("\r\n", list[2].ToString());
85 Assert.AreEqual("==test head==", list[3].ToString());
86 Assert.AreEqual("\r\n<p>test</p>", list[4].ToString());
87 Assert.AreEqual("<nowiki>[[test]]</nowiki>", list[5].ToString());
88 Assert.AreEqual("<!--comment-->", list[6].ToString());
89 Assert.AreEqual("{{reflist}}", list[7].ToString());
93 /// <see cref="MediaWikiParser.TryParseToEndCondition"/>
94 /// メソッドテストケース(その他のケース)。
97 public void TestTryParseToEndConditionEmpty()
100 using (MediaWikiParser parser = new MediaWikiParser(new MockFactory().GetMediaWiki("en")))
103 Assert.IsTrue(parser.TryParseToEndCondition(String.Empty, null, out element));
104 Assert.AreEqual(String.Empty, element.ToString());
105 Assert.IsInstanceOf(typeof(TextElement), element);
108 Assert.IsFalse(parser.TryParseToEndCondition(null, null, out element));
109 Assert.IsNull(element);
114 /// <see cref="MediaWikiParser.TryParseToEndCondition"/>
115 /// メソッドテストケース(終了条件)。
118 public void TestTryParseToEndConditionCondition()
120 // 親クラスにあった終了条件で停止する動作が継承先でも動作していること
121 string text = "'''Article Name''' is [[xxx]]\r\n==test head==\r\n<p>test</p><nowiki>[[test]]</nowiki><!--comment-->{{reflist}}";
123 using (MediaWikiParser parser = new MediaWikiParser(new MockFactory().GetMediaWiki("en")))
125 Assert.IsTrue(parser.TryParseToEndCondition(text, (string s, int index) => s[index] == '/', out element));
128 Assert.AreEqual("'''Article Name''' is [[xxx]]\r\n==test head==\r\n<p>test<", element.ToString());
129 Assert.IsInstanceOf(typeof(ListElement), element);
130 ListElement list = (ListElement)element;
131 Assert.AreEqual(5, list.Count);
135 /// <see cref="MediaWikiParser.TryParseToEndCondition"/>
136 /// メソッドテストケース(テンプレートページ実データ使用)。
139 /// Ver 1.11にて解析失敗時のリトライにより極端に時間がかかっていたデータ。
140 /// 中身についてはほぼ処理できない類のものだが、現実的な時間で解析が終わることだけ検証。
142 [Test, Timeout(20000)]
143 public void TestTryParseToEndConditionTemplateContext()
146 using (MediaWikiParser parser = new MediaWikiParser(new MockFactory().GetMediaWiki("en")))
148 string text = parser.Website.GetPage("Template:context").Text;
149 Assert.IsTrue(parser.TryParseToEndCondition(text, null, out element));
150 Assert.IsInstanceOf(typeof(ListElement), element);
151 Assert.AreEqual(text, element.ToString());
156 /// <see cref="MediaWikiParser.TryParseToEndCondition"/>
157 /// メソッドテストケース(Dispose)。
160 [ExpectedException(typeof(ObjectDisposedException))]
161 public void TestTryParseToEndConditionDispose()
163 MediaWikiParser parser = new MediaWikiParser(new MockFactory().GetMediaWiki("en"));
166 parser.TryParseToEndCondition(String.Empty, null, out result);