1 // ================================================================================================
3 // MediaWikiVariableParserのテストクラスソース。</summary>
5 // <copyright file="MediaWikiVariableParserTest.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 /// <see cref="MediaWikiVariableParser"/>のテストクラスです。
24 class MediaWikiVariableParserTest
29 /// 前処理・後処理で生成/解放される言語別の<see cref="MediaWikiParser"/>。
31 private IDictionary<string, MediaWikiParser> mediaWikiParsers = new Dictionary<string, MediaWikiParser>();
40 /// <remarks><see cref="MediaWikiParser.Dispose"/>が必要な<see cref="MediaWikiParser"/>の生成。</remarks>
42 public void SetUpBeforeClass()
44 this.mediaWikiParsers["en"] = new MediaWikiParser(new MockFactory().GetMediaWiki("en"));
45 this.mediaWikiParsers["ja"] = new MediaWikiParser(new MockFactory().GetMediaWiki("ja"));
51 /// <remarks><see cref="MediaWikiParser.Dispose"/>が必要な<see cref="MediaWikiParser"/>の解放。</remarks>
53 public void TearDownAfterClass()
55 foreach (IDisposable parser in this.mediaWikiParsers.Values)
60 this.mediaWikiParsers.Clear();
65 #region インタフェース実装メソッドテストケース
68 /// <see cref="MediaWikiVariableParser.TryParse"/>メソッドテストケース(基本的な構文)。
71 public void TestTryParseBasic()
74 MediaWikiVariable variable;
75 MediaWikiVariableParser parser = new MediaWikiVariableParser(this.mediaWikiParsers["en"]);
78 Assert.IsTrue(parser.TryParse("{{{変数名}}}", out element));
79 variable = (MediaWikiVariable)element;
80 Assert.AreEqual("変数名", variable.Variable);
81 Assert.IsNull(variable.Value);
84 Assert.IsTrue(parser.TryParse("{{{変数名|デフォルト値}}}", out element));
85 variable = (MediaWikiVariable)element;
86 Assert.AreEqual("変数名", variable.Variable);
87 Assert.AreEqual("デフォルト値", variable.Value.ToString());
89 // よく見かけるパイプがあって後ろが無い奴
90 Assert.IsTrue(parser.TryParse("{{{変数名|}}}", out element));
91 variable = (MediaWikiVariable)element;
92 Assert.AreEqual("変数名", variable.Variable);
93 Assert.IsNotNull(variable.Value);
94 Assert.IsEmpty(variable.Value.ToString());
96 // コメントについてはあっても特に問題ない
97 Assert.IsTrue(parser.TryParse("{{{変数名<!--必要に応じて変更1-->|デフォルト値<!--必要に応じて変更2-->}}}", out element));
98 variable = (MediaWikiVariable)element;
99 Assert.AreEqual("変数名<!--必要に応じて変更1-->", variable.Variable);
100 Assert.AreEqual("デフォルト値<!--必要に応じて変更2-->", variable.Value.ToString());
104 /// <see cref="MediaWikiVariableParser.TryParse"/>メソッドテストケース(NGパターン)。
107 public void TestTryParseNg()
110 MediaWikiVariableParser parser = new MediaWikiVariableParser(this.mediaWikiParsers["en"]);
113 Assert.IsFalse(parser.TryParse("変数名}}}", out element));
116 Assert.IsFalse(parser.TryParse("{{{変数名", out element));
119 Assert.IsFalse(parser.TryParse(" {{{変数名}}}", out element));
122 Assert.IsFalse(parser.TryParse("[変数名]", out element));
125 Assert.IsFalse(parser.TryParse("[[変数名]]", out element));
128 Assert.IsFalse(parser.TryParse("{{変数名}}", out element));
131 Assert.IsFalse(parser.TryParse(String.Empty, out element));
132 Assert.IsFalse(parser.TryParse(null, out element));
136 /// <see cref="MediaWikiVariableParser.TryParse"/>メソッドテストケース(入れ子)。
139 public void TestTryParseNested()
142 MediaWikiVariable variable;
143 MediaWikiVariableParser parser = new MediaWikiVariableParser(this.mediaWikiParsers["ja"]);
146 Assert.IsTrue(parser.TryParse("{{{変数名|[[内部リンク]]{{ref-en}}}}}", out element));
147 variable = (MediaWikiVariable)element;
148 Assert.AreEqual("変数名", variable.Variable);
149 Assert.AreEqual("[[内部リンク]]{{ref-en}}", variable.Value.ToString());
150 Assert.IsInstanceOf(typeof(ListElement), variable.Value);
151 ListElement list = (ListElement)variable.Value;
152 Assert.AreEqual(2, list.Count);
153 Assert.IsInstanceOf(typeof(MediaWikiLink), list[0]);
154 Assert.AreEqual("[[内部リンク]]", list[0].ToString());
155 Assert.IsInstanceOf(typeof(MediaWikiTemplate), list[1]);
156 Assert.AreEqual("{{ref-en}}", list[1].ToString());