OSDN Git Service

Wikipedia翻訳支援ツール Ver1.01時点のソース
[wptscs/wpts.git] / WptscsTest / Models / WebsiteTest.cs
1 // ================================================================================================\r
2 // <summary>\r
3 //      Websiteのテストクラスソース。</summary>\r
4 //\r
5 // <copyright file="WebsiteTest.cs.cs" company="honeplusのメモ帳">\r
6 //      Copyright (C) 2010 Honeplus. All rights reserved.</copyright>\r
7 // <author>\r
8 //      Honeplus</author>\r
9 // ================================================================================================\r
10 \r
11 namespace Honememo.Wptscs.Models\r
12 {\r
13     using System;\r
14     using System.IO;\r
15     using System.Reflection;\r
16     using System.Text;\r
17     using System.Xml;\r
18     using System.Xml.Serialization;\r
19     using NUnit.Framework;\r
20     using Honememo.Utilities;\r
21 \r
22     /// <summary>\r
23     /// Websiteのテストクラスです。\r
24     /// </summary>\r
25     [TestFixture]\r
26     public class WebsiteTest\r
27     {\r
28         #region モッククラス\r
29 \r
30         /// <summary>\r
31         /// Websiteテスト用のモッククラスです。\r
32         /// </summary>\r
33         public class DummySite : Website, IXmlSerializable\r
34         {\r
35             #region テスト用プロパティ\r
36 \r
37             /// <summary>\r
38             /// ウェブサイトの場所。\r
39             /// </summary>\r
40             /// <remarks>動作確認はhttpとfileスキームのみ。</remarks>\r
41             public new string Location\r
42             {\r
43                 get\r
44                 {\r
45                     return base.Location;\r
46                 }\r
47 \r
48                 set\r
49                 {\r
50                     base.Location = value;\r
51                 }\r
52             }\r
53 \r
54             /// <summary>\r
55             /// ウェブサイトの言語。\r
56             /// </summary>\r
57             public new Language Language\r
58             {\r
59                 get\r
60                 {\r
61                     return base.Language;\r
62                 }\r
63 \r
64                 set\r
65                 {\r
66                     base.Language = value;\r
67                 }\r
68             }\r
69 \r
70             #endregion\r
71 \r
72             #region ダミーメソッド\r
73 \r
74             /// <summary>\r
75             /// ページを取得。\r
76             /// </summary>\r
77             /// <param name="title">ページタイトル。</param>\r
78             /// <returns>取得したページ。</returns>\r
79             /// <remarks>取得できない場合(通信エラーなど)は例外を投げる。</remarks>\r
80             public override Page GetPage(string title)\r
81             {\r
82                 return null;\r
83             }\r
84 \r
85             #endregion\r
86 \r
87             #region テスト用XMLシリアライズ用メソッド\r
88 \r
89             /// <summary>\r
90             /// シリアライズするXMLのスキーマ定義を返す。\r
91             /// </summary>\r
92             /// <returns>XML表現を記述するXmlSchema。</returns>\r
93             public System.Xml.Schema.XmlSchema GetSchema()\r
94             {\r
95                 return null;\r
96             }\r
97 \r
98             /// <summary>\r
99             /// XMLからオブジェクトをデシリアライズする。\r
100             /// </summary>\r
101             /// <param name="reader">デシリアライズ元のXmlReader</param>\r
102             public void ReadXml(XmlReader reader)\r
103             {\r
104                 XmlDocument xml = new XmlDocument();\r
105                 xml.Load(reader);\r
106 \r
107                 // Webサイト\r
108                 // ※ 以下、基本的に無かったらNGの部分はいちいちチェックしない。例外飛ばす\r
109                 XmlElement siteElement = xml.SelectSingleNode("DummySite") as XmlElement;\r
110                 this.Location = siteElement.SelectSingleNode("Location").InnerText;\r
111 \r
112                 using (XmlReader r = XmlReader.Create(\r
113                     new StringReader(siteElement.SelectSingleNode("Language").OuterXml), reader.Settings))\r
114                 {\r
115                     this.Language = new XmlSerializer(typeof(Language)).Deserialize(r) as Language;\r
116                 }\r
117             }\r
118 \r
119             /// <summary>\r
120             /// オブジェクトをXMLにシリアライズする。\r
121             /// </summary>\r
122             /// <param name="writer">シリアライズ先のXmlWriter</param>\r
123             public void WriteXml(XmlWriter writer)\r
124             {\r
125                 writer.WriteElementString("Location", this.Location);\r
126                 new XmlSerializer(typeof(Language)).Serialize(writer, this.Language);\r
127             }\r
128 \r
129             #endregion\r
130         }\r
131 \r
132         #endregion\r
133 \r
134         #region プロパティテストケース\r
135 \r
136         /// <summary>\r
137         /// Locationプロパティテストケース。\r
138         /// </summary>\r
139         [Test]\r
140         public void TestLocation()\r
141         {\r
142             DummySite site = new DummySite();\r
143             site.Location = "test";\r
144             Assert.AreEqual("test", site.Location);\r
145         }\r
146 \r
147         /// <summary>\r
148         /// Locationプロパティテストケース(null)。\r
149         /// </summary>\r
150         [Test]\r
151         [ExpectedException(typeof(ArgumentNullException))]\r
152         public void TestLocationNull()\r
153         {\r
154             new DummySite().Location = null;\r
155         }\r
156 \r
157         /// <summary>\r
158         /// Locationプロパティテストケース(空)。\r
159         /// </summary>\r
160         [Test]\r
161         [ExpectedException(typeof(ArgumentException))]\r
162         public void TestLocationBlank()\r
163         {\r
164             new DummySite().Location = " ";\r
165         }\r
166 \r
167         /// <summary>\r
168         /// Languageプロパティテストケース。\r
169         /// </summary>\r
170         [Test]\r
171         public void TestLanguage()\r
172         {\r
173             DummySite site = new DummySite();\r
174             site.Language = new Language("ja");\r
175             Assert.AreEqual("ja", site.Language.Code);\r
176         }\r
177 \r
178         /// <summary>\r
179         /// Languageプロパティテストケース(null)。\r
180         /// </summary>\r
181         [Test]\r
182         [ExpectedException(typeof(ArgumentNullException))]\r
183         public void TestLanguageNull()\r
184         {\r
185             new DummySite().Language = null;\r
186         }\r
187 \r
188         #endregion\r
189 \r
190         #region メソッドテストケース\r
191 \r
192         /// <summary>\r
193         /// XMLデシリアライズテストケース。\r
194         /// </summary>\r
195         [Test]\r
196         public void TestReadXml()\r
197         {\r
198             DummySite site;\r
199             using (XmlReader r = XmlReader.Create(\r
200                 new StringReader("<DummySite><Location>http://ja.wikipedia.org</Location>"\r
201                     + "<Language Code=\"ja\"><Names /></Language></DummySite>")))\r
202             {\r
203                 site = new XmlSerializer(typeof(DummySite)).Deserialize(r) as DummySite;\r
204             }\r
205 \r
206             Assert.IsNotNull(site);\r
207             Assert.AreEqual("http://ja.wikipedia.org", site.Location);\r
208             Assert.AreEqual("ja", site.Language.Code);\r
209         }\r
210 \r
211         /// <summary>\r
212         /// XMLシリアライズテストケース。\r
213         /// </summary>\r
214         [Test]\r
215         public void TestWriteXml()\r
216         {\r
217             Language lang = new Language("ja");\r
218             DummySite site = new DummySite();\r
219             site.Location = "http://ja.wikipedia.org";\r
220             site.Language = lang;\r
221             XmlWriterSettings settings = new XmlWriterSettings();\r
222             settings.OmitXmlDeclaration = true;\r
223 \r
224             StringBuilder b = new StringBuilder();\r
225             using (XmlWriter w = XmlWriter.Create(b, settings))\r
226             {\r
227                 new XmlSerializer(typeof(DummySite)).Serialize(w, site);\r
228             }\r
229 \r
230             Assert.AreEqual("<DummySite><Location>http://ja.wikipedia.org</Location><Language Code=\"ja\"><Names /><Bracket /></Language></DummySite>", b.ToString());\r
231         }\r
232 \r
233         #endregion\r
234     }\r
235 }\r