OSDN Git Service

2229b2b50adf1729c0e61cb63a440822f0d2463f
[wptscs/wpts.git] / HmLibTest / Parsers / XmlParserTest.cs
1 // ================================================================================================
2 // <summary>
3 //      XmlParserのテストクラスソース。</summary>
4 //
5 // <copyright file="XmlParserTest.cs" company="honeplusのメモ帳">
6 //      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
7 // <author>
8 //      Honeplus</author>
9 // ================================================================================================
10
11 namespace Honememo.Parsers
12 {
13     using System;
14     using System.Collections.Generic;
15     using System.Linq;
16     using Microsoft.VisualStudio.TestTools.UnitTesting;
17
18     /// <summary>
19     /// <see cref="XmlParser"/>のテストクラスです。
20     /// </summary>
21     [TestClass]
22     internal class XmlParserTest
23     {
24         #region プロパティテストケース
25
26         /// <summary>
27         /// <see cref="XmlParser.Parsers"/>プロパティテストケース。
28         /// </summary>
29         [TestMethod]
30         public void TestParsers()
31         {
32             using (XmlParser parser = new XmlParser())
33             {
34                 // 初期状態で値が格納されていること
35                 Assert.IsNotNull(parser.Parsers);
36                 Assert.AreEqual(2, parser.Parsers.Length);
37
38                 // 設定すればそのオブジェクトが入ること
39                 IParser[] parsers = new IParser[0];
40                 parser.Parsers = parsers;
41                 Assert.AreSame(parsers, parser.Parsers);
42             }
43         }
44
45         /// <summary>
46         /// <see cref="XmlParser.Parsers"/>プロパティテストケース(null)。
47         /// </summary>
48         [TestMethod]
49         [ExpectedException(typeof(ArgumentNullException))]
50         public void TestParsersNull()
51         {
52             using (XmlParser parser = new XmlParser())
53             {
54                 parser.Parsers = null;
55             }
56         }
57
58         /// <summary>
59         /// <see cref="XmlParser.IgnoreCase"/>プロパティテストケース。
60         /// </summary>
61         [TestMethod]
62         public void TestIgnoreCase()
63         {
64             using (XmlParser parser = new XmlParser())
65             {
66                 // 初期値はtrue、値を設定すればその値に変わる
67                 Assert.IsTrue(parser.IgnoreCase);
68                 parser.IgnoreCase = false;
69                 Assert.IsFalse(parser.IgnoreCase);
70                 parser.IgnoreCase = true;
71                 Assert.IsTrue(parser.IgnoreCase);
72             }
73         }
74
75         /// <summary>
76         /// <see cref="XmlParser.IsHtml"/>プロパティテストケース。
77         /// </summary>
78         [TestMethod]
79         public void TestIsHtml()
80         {
81             using (XmlParser parser = new XmlParser())
82             {
83                 // 初期値はfalse、値を設定すればその値に変わる
84                 Assert.IsFalse(parser.IsHtml);
85                 parser.IsHtml = true;
86                 Assert.IsTrue(parser.IsHtml);
87                 parser.IsHtml = false;
88                 Assert.IsFalse(parser.IsHtml);
89             }
90         }
91
92         #endregion
93
94         #region IParserインタフェースメソッドテストケース
95
96         // ※ 2012年2月現在、IParser, ITextParserの各メソッド実装は抽象クラス側で共通になっており、
97         //    改造部分はどこかでやればテストされるのでそれで割愛
98
99         /// <summary>
100         /// <see cref="IParser.Parse"/>メソッドテストケース。
101         /// </summary>
102         [TestMethod]
103         public void TestParse()
104         {
105             using (XmlParser parser = new XmlParser())
106             {
107                 Assert.AreEqual("test", parser.Parse("test").ToString());
108
109                 IElement element = parser.Parse("testbefore<p>testinner</p><!--comment-->testafter");
110                 Assert.IsInstanceOfType(element, typeof(ICollection<IElement>));
111                 ICollection<IElement> collection = (ICollection<IElement>)element;
112                 Assert.AreEqual(4, collection.Count);
113                 Assert.AreEqual("testbefore", collection.ElementAt(0).ToString());
114                 Assert.IsInstanceOfType(collection.ElementAt(1), typeof(XmlElement));
115                 Assert.AreEqual("<p>testinner</p>", collection.ElementAt(1).ToString());
116                 Assert.IsInstanceOfType(collection.ElementAt(2), typeof(XmlCommentElement));
117                 Assert.AreEqual("<!--comment-->", collection.ElementAt(2).ToString());
118                 Assert.AreEqual("testafter", collection.ElementAt(3).ToString());
119             }
120         }
121
122         /// <summary>
123         /// <see cref="IParser.Parse"/>メソッドテストケース(null)。
124         /// </summary>
125         [TestMethod]
126         [ExpectedException(typeof(ArgumentNullException))]
127         public void TestParseNull()
128         {
129             using (XmlParser parser = new XmlParser())
130             {
131                 parser.Parse(null);
132             }
133         }
134
135         /// <summary>
136         /// <see cref="IParser.Parse"/>メソッドテストケース(Dispose)。
137         /// </summary>
138         [TestMethod]
139         [ExpectedException(typeof(ObjectDisposedException))]
140         public void TestParseDispose()
141         {
142             XmlParser parser = new XmlParser();
143             parser.Dispose();
144             IElement result;
145             parser.TryParse("test", out result);
146         }
147
148         #endregion
149
150         #region IDisposableインタフェース実装メソッドテストケース
151
152         /// <summary>
153         /// <see cref="XmlParser.Dispose"/>メソッドテストケース。
154         /// </summary>
155         [TestMethod]
156         public void TestDispose()
157         {
158             // 循環参照のあるParsersを解放する
159             XmlParser parser = new XmlParser();
160             Assert.IsNotNull(parser.Parsers);
161             parser.Dispose();
162             Assert.IsNull(parser.Parsers);
163         }
164
165         #endregion
166     }
167 }