1 // ================================================================================================
3 // Websiteのテストクラスソース。</summary>
5 // <copyright file="WebsiteTest.cs.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2010 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Models
15 using System.Reflection;
18 using System.Xml.Serialization;
19 using NUnit.Framework;
20 using Honememo.Utilities;
26 public class WebsiteTest
31 /// Websiteテスト用のモッククラスです。
33 public class DummySite : Website, IXmlSerializable
40 /// <remarks>動作確認はhttpとfileスキームのみ。</remarks>
41 public new string Location
50 base.Location = value;
57 public new Language Language
66 base.Language = value;
77 /// <param name="title">ページタイトル。</param>
78 /// <returns>取得したページ。</returns>
79 /// <remarks>取得できない場合(通信エラーなど)は例外を投げる。</remarks>
80 public override Page GetPage(string title)
87 #region テスト用XMLシリアライズ用メソッド
90 /// シリアライズするXMLのスキーマ定義を返す。
92 /// <returns>XML表現を記述するXmlSchema。</returns>
93 public System.Xml.Schema.XmlSchema GetSchema()
99 /// XMLからオブジェクトをデシリアライズする。
101 /// <param name="reader">デシリアライズ元のXmlReader</param>
102 public void ReadXml(XmlReader reader)
104 XmlDocument xml = new XmlDocument();
108 // ※ 以下、基本的に無かったらNGの部分はいちいちチェックしない。例外飛ばす
109 XmlElement siteElement = xml.SelectSingleNode("DummySite") as XmlElement;
110 this.Location = siteElement.SelectSingleNode("Location").InnerText;
112 using (XmlReader r = XmlReader.Create(
113 new StringReader(siteElement.SelectSingleNode("Language").OuterXml), reader.Settings))
115 this.Language = new XmlSerializer(typeof(Language)).Deserialize(r) as Language;
120 /// オブジェクトをXMLにシリアライズする。
122 /// <param name="writer">シリアライズ先のXmlWriter</param>
123 public void WriteXml(XmlWriter writer)
125 writer.WriteElementString("Location", this.Location);
126 new XmlSerializer(typeof(Language)).Serialize(writer, this.Language);
137 /// Locationプロパティテストケース。
140 public void TestLocation()
142 DummySite site = new DummySite();
143 site.Location = "test";
144 Assert.AreEqual("test", site.Location);
148 /// Locationプロパティテストケース(null)。
151 [ExpectedException(typeof(ArgumentNullException))]
152 public void TestLocationNull()
154 new DummySite().Location = null;
158 /// Locationプロパティテストケース(空)。
161 [ExpectedException(typeof(ArgumentException))]
162 public void TestLocationBlank()
164 new DummySite().Location = " ";
168 /// Languageプロパティテストケース。
171 public void TestLanguage()
173 DummySite site = new DummySite();
174 site.Language = new Language("ja");
175 Assert.AreEqual("ja", site.Language.Code);
179 /// Languageプロパティテストケース(null)。
182 [ExpectedException(typeof(ArgumentNullException))]
183 public void TestLanguageNull()
185 new DummySite().Language = null;
193 /// XMLデシリアライズテストケース。
196 public void TestReadXml()
199 using (XmlReader r = XmlReader.Create(
200 new StringReader("<DummySite><Location>http://ja.wikipedia.org</Location>"
201 + "<Language Code=\"ja\"><Names /></Language></DummySite>")))
203 site = new XmlSerializer(typeof(DummySite)).Deserialize(r) as DummySite;
206 Assert.IsNotNull(site);
207 Assert.AreEqual("http://ja.wikipedia.org", site.Location);
208 Assert.AreEqual("ja", site.Language.Code);
215 public void TestWriteXml()
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;
224 StringBuilder b = new StringBuilder();
225 using (XmlWriter w = XmlWriter.Create(b, settings))
227 new XmlSerializer(typeof(DummySite)).Serialize(w, site);
230 Assert.AreEqual("<DummySite><Location>http://ja.wikipedia.org</Location><Language Code=\"ja\"><Names /><Bracket /></Language></DummySite>", b.ToString());