1 // ================================================================================================
3 // AbstractParserのテストクラスソース。</summary>
5 // <copyright file="AbstractParserTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Parsers
14 using NUnit.Framework;
17 /// <see cref="AbstractParser"/>のテストクラスです。
20 internal class AbstractParserTest
22 #region インタフェース実装メソッドテストケース
25 /// <see cref="AbstractParser.Parse"/>メソッドテストケース。
28 public void TestParse()
30 // TryParseを呼んだ結果が返ること
31 TestParser parser = new TestParser();
32 parser.Success = true;
33 Assert.AreEqual(String.Empty, parser.Parse(String.Empty).ToString());
34 Assert.AreEqual("test", parser.Parse("test").ToString());
38 /// <see cref="AbstractParser.Parse"/>メソッドテストケース(null)。
41 [ExpectedException(typeof(ArgumentNullException))]
42 public void TestParseNull()
44 TestParser parser = new TestParser();
45 parser.Success = true;
50 /// <see cref="AbstractParser.Parse"/>メソッドテストケース(解析失敗)。
53 [ExpectedException(typeof(FormatException))]
54 public void TestParseFail()
56 // TryParseがfalseを返した場合、例外を投げる
57 TestParser parser = new TestParser();
58 parser.Success = false;
59 parser.Parse(String.Empty);
63 /// <see cref="AbstractParser.IsPossibleParse"/>メソッドテストケース。
66 public void TestIsPossibleParse()
68 // このクラスでは何を渡してもtrueが返る
69 TestParser parser = new TestParser();
70 Assert.IsTrue(parser.IsPossibleParse('a'));
71 Assert.IsTrue(parser.IsPossibleParse('<'));
72 Assert.IsTrue(parser.IsPossibleParse('>'));
73 Assert.IsTrue(parser.IsPossibleParse('='));
74 Assert.IsTrue(parser.IsPossibleParse('-'));
75 Assert.IsTrue(parser.IsPossibleParse('['));
76 Assert.IsTrue(parser.IsPossibleParse('{'));
81 #region 実装支援用メソッドテストケース
84 /// <see cref="AbstractParser.TryParseAt"/>メソッドテストケース。
87 public void TestTryParseAt()
89 // 指定したパーサーで該当のインデックスの文字を解析する
91 TestParser parser = new TestParser();
93 parser.Success = true;
94 Assert.IsFalse(parser.TryParseAt("a", 0, out element));
95 Assert.IsNull(element);
96 Assert.IsTrue(parser.TryParseAt("a", 0, out element, parser));
97 Assert.AreEqual("a", element.ToString());
99 Assert.IsFalse(parser.TryParseAt("test[[test]]", 4, out element));
100 Assert.IsNull(element);
101 Assert.IsTrue(parser.TryParseAt("test[[test]]", 4, out element, parser));
102 Assert.AreEqual("[[test]]", element.ToString());
104 parser.Success = false;
105 Assert.IsFalse(parser.TryParseAt("a", 0, out element, parser));
106 Assert.IsNull(element);
107 Assert.IsFalse(parser.TryParseAt("test[[test]]", 4, out element, parser));
108 Assert.IsNull(element);
112 /// <see cref="AbstractParser.TryParseAt"/>メソッドテストケース(null)。
115 [ExpectedException(typeof(ArgumentNullException))]
116 public void TestTryParseAtNull()
119 TestParser parser = new TestParser();
120 parser.Success = true;
121 parser.TryParseAt(null, 0, out element);
125 /// <see cref="AbstractParser.TryParseAt"/>メソッドテストケース(範囲外)。
128 [ExpectedException(typeof(ArgumentOutOfRangeException))]
129 public void TestTryParseAtOutOfRange()
132 TestParser parser = new TestParser();
133 parser.Success = true;
134 parser.TryParseAt(String.Empty, 1, out element);
139 #region テスト用AbstractParser実装
142 /// テスト用<see cref="AbstractParser"/>実装クラスです。
144 private class TestParser : AbstractParser
149 /// <see cref="TryParse"/>の戻り値。
164 /// <param name="s">解析対象の文字列。</param>
165 /// <param name="result">解析結果。渡された文字列をそのまま要素にして返す。</param>
166 /// <returns><see cref="Success"/>の設定値。</returns>
167 public override bool TryParse(string s, out IElement result)
169 result = new TextElement(s);
175 #region 非公開メソッドテスト用のオーラーライドメソッド
178 /// 渡されたテキストの指定されたインデックス位置を各種解析処理で解析する。
180 /// <param name="s">解析するテキスト。</param>
181 /// <param name="index">処理インデックス。</param>
182 /// <param name="result">解析した結果要素。</param>
183 /// <param name="parsers">解析に用いるパーサー。指定された順に使用。</param>
184 /// <returns>いずれかのパーサーで解析できた場合<c>true</c>。</returns>
185 /// <exception cref="ArgumentNullException"><paramref name="s"/>または<paramref name="parsers"/>が<c>null</c>の場合。</exception>
186 /// <exception cref="ArgumentOutOfRangeException">インデックスが文字列の範囲外の場合。</exception>
187 public new bool TryParseAt(string s, int index, out IElement result, params IParser[] parsers)
189 return base.TryParseAt(s, index, out result, parsers);