namespace Honememo.Wptscs.Parsers
{
using System;
+ using System.Collections.Generic;
using Honememo.Parsers;
using Honememo.Wptscs.Models;
using Honememo.Wptscs.Websites;
- using NUnit.Framework;
+ using Microsoft.VisualStudio.TestTools.UnitTesting;
/// <summary>
- /// MediaWikiLinkParserのテストクラスです。
+ /// <see cref="MediaWikiLinkParser"/>のテストクラスです。
/// </summary>
- [TestFixture]
+ [TestClass]
public class MediaWikiLinkParserTest
{
+ #region private変数
+
+ /// <summary>
+ /// 前処理・後処理で生成/解放される言語別の<see cref="MediaWikiParser"/>。
+ /// </summary>
+ private static IDictionary<string, MediaWikiParser> mediaWikiParsers = new Dictionary<string, MediaWikiParser>();
+
+ #endregion
+
+ #region 前処理・後処理
+
+ /// <summary>
+ /// テストの前処理。
+ /// </summary>
+ /// <param name="context">テスト用情報。</param>
+ /// <remarks><see cref="MediaWikiParser.Dispose"/>が必要な<see cref="MediaWikiParser"/>の生成。</remarks>
+ [ClassInitialize]
+ public static void SetUpBeforeClass(TestContext context)
+ {
+ mediaWikiParsers["en"] = new MediaWikiParser(new MockFactory().GetMediaWiki("en"));
+ mediaWikiParsers["ja"] = new MediaWikiParser(new MockFactory().GetMediaWiki("ja"));
+ }
+
+ /// <summary>
+ /// テストの後処理。
+ /// </summary>
+ /// <remarks><see cref="MediaWikiParser.Dispose"/>が必要な<see cref="MediaWikiParser"/>の解放。</remarks>
+ [ClassCleanup]
+ public static void TearDownAfterClass()
+ {
+ foreach (IDisposable parser in mediaWikiParsers.Values)
+ {
+ parser.Dispose();
+ }
+
+ mediaWikiParsers.Clear();
+ }
+
+ #endregion
+
#region インタフェース実装メソッドテストケース
/// <summary>
- /// TryParseメソッドテストケース(基本的な構文)。
+ /// <see cref="MediaWikiLinkParser.TryParse"/>メソッドテストケース(基本的な構文)。
/// </summary>
- [Test]
+ [TestMethod]
public void TestTryParseBasic()
{
IElement element;
MediaWikiLink link;
- MediaWikiLinkParser parser = new MediaWikiLinkParser(new MediaWikiParser(new MockFactory().GetMediaWiki("en")));
+ MediaWikiLinkParser parser = new MediaWikiLinkParser(mediaWikiParsers["en"]);
// タイトルのみ
Assert.IsTrue(parser.TryParse("[[testtitle]]", out element));
}
/// <summary>
- /// TryParseメソッドテストケース(NGパターン)。
+ /// <see cref="MediaWikiLinkParser.TryParse"/>メソッドテストケース(NGパターン)。
/// </summary>
- [Test]
+ [TestMethod]
public void TestTryParseNg()
{
IElement element;
- MediaWikiLinkParser parser = new MediaWikiLinkParser(new MediaWikiParser(new MockFactory().GetMediaWiki("en")));
+ MediaWikiLinkParser parser = new MediaWikiLinkParser(mediaWikiParsers["en"]);
// 開始タグが無い
Assert.IsFalse(parser.TryParse("testtitle]]", out element));
Assert.IsFalse(parser.TryParse("[[test<title]]", out element));
Assert.IsFalse(parser.TryParse("[[test>title]]", out element));
Assert.IsFalse(parser.TryParse("[[test[title]]", out element));
- Assert.IsFalse(parser.TryParse("[[test]title]]", out element));
+ Assert.IsFalse(parser.TryParse("[[TestMethod]title]]", out element));
Assert.IsFalse(parser.TryParse("[[test{title]]", out element));
Assert.IsFalse(parser.TryParse("[[test}title]]", out element));
Assert.IsFalse(parser.TryParse("[[testtitle\n]]", out element));
+
+ // 空・null
+ Assert.IsFalse(parser.TryParse(string.Empty, out element));
+ Assert.IsFalse(parser.TryParse(null, out element));
}
/// <summary>
- /// TryParseメソッドテストケース(入れ子)。
+ /// <see cref="MediaWikiLinkParser.TryParse"/>メソッドテストケース(入れ子)。
/// </summary>
- [Test]
+ [TestMethod]
public void TestTryParseNested()
{
IElement element;
MediaWikiLink link;
- MediaWikiLinkParser parser = new MediaWikiLinkParser(new MediaWikiParser(new MockFactory().GetMediaWiki("en")));
+ MediaWikiLinkParser parser = new MediaWikiLinkParser(mediaWikiParsers["en"]);
// テンプレートはパイプ以後にある分には全てOK
Assert.IsTrue(parser.TryParse("[[ロシア語|{{lang|ru|русский язык}}]]", out element));
}
/// <summary>
- /// TryParseメソッドテストケース(名前空間)。
+ /// <see cref="MediaWikiLinkParser.TryParse"/>メソッドテストケース(名前空間)。
/// </summary>
- [Test]
+ [TestMethod]
public void TestTryParseNamespace()
{
IElement element;
MediaWikiLink link;
- MediaWikiLinkParser parser = new MediaWikiLinkParser(new MediaWikiParser(new MockFactory().GetMediaWiki("ja")));
+ MediaWikiLinkParser parser = new MediaWikiLinkParser(mediaWikiParsers["ja"]);
// カテゴリ標準
Assert.IsTrue(parser.TryParse("[[Category:test]]", out element));
Assert.AreEqual("thumb", link.PipeTexts[0].ToString());
Assert.AreEqual("100px", link.PipeTexts[1].ToString());
Assert.AreEqual("テスト[[画像]]", link.PipeTexts[2].ToString());
- Assert.IsInstanceOf(typeof(ListElement), link.PipeTexts[2]);
+ Assert.IsInstanceOfType(link.PipeTexts[2], typeof(ListElement));
ListElement list = (ListElement)link.PipeTexts[2];
Assert.AreEqual(2, list.Count);
Assert.AreEqual("テスト", list[0].ToString());
}
/// <summary>
- /// TryParseメソッドテストケース(サブページ)。
+ /// <see cref="MediaWikiLinkParser.TryParse"/>メソッドテストケース(サブページ)。
/// </summary>
- [Test]
+ [TestMethod]
public void TestTryParseSubpage()
{
IElement element;
MediaWikiLink link;
- MediaWikiLinkParser parser = new MediaWikiLinkParser(new MediaWikiParser(new MockFactory().GetMediaWiki("en")));
+ MediaWikiLinkParser parser = new MediaWikiLinkParser(mediaWikiParsers["en"]);
// 全て指定されているケースは通常の記事と同じ扱い
Assert.IsTrue(parser.TryParse("[[testtitle/subpage]]", out element));
}
/// <summary>
- /// TryParseメソッドテストケース(ウィキ間リンク)。
+ /// <see cref="MediaWikiLinkParser.TryParse"/>メソッドテストケース(ウィキ間リンク)。
/// </summary>
- [Test]
+ [TestMethod]
public void TestTryParseInterwiki()
{
IElement element;
MediaWikiLink link;
- MediaWikiLinkParser parser = new MediaWikiLinkParser(new MediaWikiParser(new MockFactory().GetMediaWiki("en")));
+ MediaWikiLinkParser parser = new MediaWikiLinkParser(mediaWikiParsers["en"]);
// タイトルとセクションとパイプ後の文字列とウィキ間リンクとコロンの全部入り
Assert.IsTrue(parser.TryParse("[[:en:testtitle#testsection|testpipe1|testpipe2]]", out element));