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 Microsoft.VisualStudio.TestTools.UnitTesting;
21 /// <see cref="MediaWikiVariableParser"/>のテストクラスです。
24 public class MediaWikiVariableParserTest
29 /// 前処理・後処理で生成/解放される言語別の<see cref="MediaWikiParser"/>。
31 private static IDictionary<string, MediaWikiParser> mediaWikiParsers = new Dictionary<string, MediaWikiParser>();
40 /// <param name="context">テスト用情報。</param>
41 /// <remarks><see cref="MediaWikiParser.Dispose"/>が必要な<see cref="MediaWikiParser"/>の生成。</remarks>
43 public static void SetUpBeforeClass(TestContext context)
45 mediaWikiParsers["en"] = new MediaWikiParser(new MockFactory().GetMediaWiki("en"));
46 mediaWikiParsers["ja"] = new MediaWikiParser(new MockFactory().GetMediaWiki("ja"));
52 /// <remarks><see cref="MediaWikiParser.Dispose"/>が必要な<see cref="MediaWikiParser"/>の解放。</remarks>
54 public static void TearDownAfterClass()
56 foreach (IDisposable parser in mediaWikiParsers.Values)
61 mediaWikiParsers.Clear();
66 #region インタフェース実装メソッドテストケース
69 /// <see cref="MediaWikiVariableParser.TryParse"/>メソッドテストケース(基本的な構文)。
72 public void TestTryParseBasic()
75 MediaWikiVariable variable;
76 MediaWikiVariableParser parser = new MediaWikiVariableParser(mediaWikiParsers["en"]);
79 Assert.IsTrue(parser.TryParse("{{{変数名}}}", out element));
80 variable = (MediaWikiVariable)element;
81 Assert.AreEqual("変数名", variable.Variable);
82 Assert.IsNull(variable.Value);
85 Assert.IsTrue(parser.TryParse("{{{変数名|デフォルト値}}}", out element));
86 variable = (MediaWikiVariable)element;
87 Assert.AreEqual("変数名", variable.Variable);
88 Assert.AreEqual("デフォルト値", variable.Value.ToString());
90 // よく見かけるパイプがあって後ろが無い奴
91 Assert.IsTrue(parser.TryParse("{{{変数名|}}}", out element));
92 variable = (MediaWikiVariable)element;
93 Assert.AreEqual("変数名", variable.Variable);
94 Assert.IsNotNull(variable.Value);
95 Assert.AreEqual(string.Empty, variable.Value.ToString());
97 // コメントについてはあっても特に問題ない
98 Assert.IsTrue(parser.TryParse("{{{変数名<!--必要に応じて変更1-->|デフォルト値<!--必要に応じて変更2-->}}}", out element));
99 variable = (MediaWikiVariable)element;
100 Assert.AreEqual("変数名<!--必要に応じて変更1-->", variable.Variable);
101 Assert.AreEqual("デフォルト値<!--必要に応じて変更2-->", variable.Value.ToString());
105 /// <see cref="MediaWikiVariableParser.TryParse"/>メソッドテストケース(NGパターン)。
108 public void TestTryParseNg()
111 MediaWikiVariableParser parser = new MediaWikiVariableParser(mediaWikiParsers["en"]);
114 Assert.IsFalse(parser.TryParse("変数名}}}", out element));
117 Assert.IsFalse(parser.TryParse("{{{変数名", out element));
120 Assert.IsFalse(parser.TryParse(" {{{変数名}}}", out element));
123 Assert.IsFalse(parser.TryParse("[変数名]", out element));
126 Assert.IsFalse(parser.TryParse("[[変数名]]", out element));
129 Assert.IsFalse(parser.TryParse("{{変数名}}", out element));
132 Assert.IsFalse(parser.TryParse(string.Empty, out element));
133 Assert.IsFalse(parser.TryParse(null, out element));
137 /// <see cref="MediaWikiVariableParser.TryParse"/>メソッドテストケース(入れ子)。
140 public void TestTryParseNested()
143 MediaWikiVariable variable;
144 MediaWikiVariableParser parser = new MediaWikiVariableParser(mediaWikiParsers["ja"]);
147 Assert.IsTrue(parser.TryParse("{{{変数名|[[内部リンク]]{{ref-en}}}}}", out element));
148 variable = (MediaWikiVariable)element;
149 Assert.AreEqual("変数名", variable.Variable);
150 Assert.AreEqual("[[内部リンク]]{{ref-en}}", variable.Value.ToString());
151 Assert.IsInstanceOfType(variable.Value, typeof(ListElement));
152 ListElement list = (ListElement)variable.Value;
153 Assert.AreEqual(2, list.Count);
154 Assert.IsInstanceOfType(list[0], typeof(MediaWikiLink));
155 Assert.AreEqual("[[内部リンク]]", list[0].ToString());
156 Assert.IsInstanceOfType(list[1], typeof(MediaWikiTemplate));
157 Assert.AreEqual("{{ref-en}}", list[1].ToString());