OSDN Git Service

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