1 // ================================================================================================
3 // MediaWikiのテストクラスソース。</summary>
5 // <copyright file="MediaWikiTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2010 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Models
14 using System.Collections.Generic;
16 using System.Reflection;
19 using System.Xml.Serialization;
20 using NUnit.Framework;
21 using Honememo.Utilities;
24 /// MediaWikiのテストクラスです。
27 public class MediaWikiTest
32 /// テストデータが格納されているフォルダパス。
34 private static readonly string testDir = "Data\\MediaWiki";
41 /// テスト用の値を設定したMediaWikiオブジェクトを返す。
43 public MediaWiki GetTestServer(string language)
45 // ※ 下記URL生成時は、きちんとパス区切り文字を入れてやら無いとフォルダが認識されない。
46 // また、httpで取得した場合とfileで取得した場合では先頭の大文字小文字が異なることが
47 // あるため、それについては随時期待値を調整して対処。
48 UriBuilder b = new UriBuilder("file", "");
49 b.Path = Path.GetFullPath(testDir) + "\\";
50 MediaWiki server = new MediaWiki(new Language(language), new Uri(b.Uri, language + "/").ToString());
51 server.ExportPath = "{0}.xml";
52 server.NamespacePath = "_api.xml";
61 /// コンストラクタ(MediaWiki全般)テストケース。
64 public void TestConstructorLanguageLocation()
66 MediaWiki site = new MediaWiki(new Language("en"), "test");
67 Assert.AreEqual("en", site.Language.Code);
68 Assert.AreEqual("test", site.Location);
72 /// コンストラクタ(MediaWiki全般)テストケース(languageがnull)。
75 [ExpectedException(typeof(ArgumentNullException))]
76 public void TestConstructorLanguageLocationByLanguageNull()
78 MediaWiki site = new MediaWiki(null, "test");
82 /// コンストラクタ(MediaWiki全般)テストケース(locationがnull)。
85 [ExpectedException(typeof(ArgumentNullException))]
86 public void TestConstructorLanguageLocationByLocationNull()
88 MediaWiki site = new MediaWiki(new Language("en"), null);
92 /// コンストラクタ(Wikipedia用)テストケース。
95 public void TestConstructorLanguage()
97 MediaWiki site = new MediaWiki(new Language("en"));
98 Assert.AreEqual("en", site.Language.Code);
99 Assert.AreEqual("http://en.wikipedia.org", site.Location);
103 /// コンストラクタ(Wikipedia用)テストケース(languageがnull)。
106 [ExpectedException(typeof(ArgumentNullException))]
107 public void TestConstructorLanguageByLanguageNull()
109 MediaWiki site = new MediaWiki(null);
114 #region 設定ファイルに初期値を持つプロパティテストケース
117 /// NamespacePathプロパティテストケース。
120 public void TestNamespacePath()
122 MediaWiki site = new MediaWiki(new Language("ja"));
123 // デフォルトでは設定ファイルの値が返される
124 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases", site.NamespacePath);
126 site.NamespacePath = "test";
127 Assert.AreEqual("test", site.NamespacePath);
128 // 空またはnullの場合、再び設定ファイルの値が入る
129 site.NamespacePath = null;
130 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases", site.NamespacePath);
131 site.NamespacePath = String.Empty;
132 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases", site.NamespacePath);
136 /// ExportPathプロパティテストケース。
139 public void TestExportPath()
141 MediaWiki site = new MediaWiki(new Language("ja"));
142 // デフォルトでは設定ファイルの値が返される
143 Assert.AreEqual("/wiki/Special:Export/{0}", site.ExportPath);
145 site.ExportPath = "test";
146 Assert.AreEqual("test", site.ExportPath);
147 // 空またはnullの場合、再び設定ファイルの値が入る
148 site.ExportPath = null;
149 Assert.AreEqual("/wiki/Special:Export/{0}", site.ExportPath);
150 site.ExportPath = String.Empty;
151 Assert.AreEqual("/wiki/Special:Export/{0}", site.ExportPath);
155 /// Redirectプロパティテストケース。
158 public void TestRedirect()
160 MediaWiki site = new MediaWiki(new Language("ja"));
161 // デフォルトでは設定ファイルの値が返される
162 Assert.AreEqual("#REDIRECT", site.Redirect);
164 site.Redirect = "test";
165 Assert.AreEqual("test", site.Redirect);
166 // 空またはnullの場合、再び設定ファイルの値が入る
167 site.Redirect = null;
168 Assert.AreEqual("#REDIRECT", site.Redirect);
169 site.Redirect = String.Empty;
170 Assert.AreEqual("#REDIRECT", site.Redirect);
174 /// TemplateNamespaceプロパティテストケース。
177 public void TestTemplateNamespace()
179 MediaWiki site = new MediaWiki(new Language("ja"));
180 // デフォルトでは設定ファイルの値が返される
181 Assert.AreEqual(10, site.TemplateNamespace);
183 site.TemplateNamespace = -1;
184 Assert.AreEqual(-1, site.TemplateNamespace);
188 /// CategoryNamespaceプロパティテストケース。
191 public void TestCategoryNamespace()
193 MediaWiki site = new MediaWiki(new Language("ja"));
194 // デフォルトでは設定ファイルの値が返される
195 Assert.AreEqual(14, site.CategoryNamespace);
197 site.CategoryNamespace = -1;
198 Assert.AreEqual(-1, site.CategoryNamespace);
202 /// FileNamespaceプロパティテストケース。
205 public void TestFileNamespace()
207 MediaWiki site = new MediaWiki(new Language("ja"));
208 // デフォルトでは設定ファイルの値が返される
209 Assert.AreEqual(6, site.FileNamespace);
211 site.FileNamespace = -1;
212 Assert.AreEqual(-1, site.FileNamespace);
216 /// MagicWordsプロパティテストケース。
219 public void TestMagicWords()
221 MediaWiki site = new MediaWiki(new Language("ja"));
222 // デフォルトでは設定ファイルの値が返される
223 Assert.IsTrue(site.MagicWords.Contains("SERVERNAME"));
225 site.MagicWords = new string[0];
226 Assert.AreEqual(0, site.MagicWords.Count);
227 // nullの場合、再び設定ファイルの値が入る
228 site.MagicWords = null;
229 Assert.IsTrue(site.MagicWords.Contains("SERVERNAME"));
234 #region それ以外のプロパティテストケース
237 /// Namespacesプロパティテストケース。
240 public void TestNamespaces()
242 MediaWiki site = this.GetTestServer("en");
243 // デフォルトではサーバーからダウンロードした値が返される
244 IList<string> names = site.Namespaces[6];
245 Assert.AreEqual("File", names[0]);
246 Assert.AreEqual("File", names[1]);
247 Assert.AreEqual("Image", names[2]);
249 IDictionary<int, IList<string>> dic = new Dictionary<int, IList<string>>();
250 dic.Add(1, new string[]{"test"});
251 site.Namespaces = dic;
252 Assert.AreEqual(1, site.Namespaces.Count);
253 // 空の場合、再び設定ファイルの値が入る
254 site.Namespaces = new Dictionary<int, IList<string>>();
255 Assert.AreEqual("File", names[0]);
259 /// Namespacesプロパティテストケース(null)。
262 [ExpectedException(typeof(ArgumentNullException))]
263 public void TestNamespacesNull()
265 MediaWiki site = new MediaWiki(new Language("ja"));
266 site.Namespaces = null;
270 /// DocumentationTemplateプロパティテストケース。
273 public void TestDocumentationTemplate()
275 MediaWiki site = new MediaWiki(new Language("ja"));
277 Assert.IsNullOrEmpty(site.DocumentationTemplate);
279 site.DocumentationTemplate = "Template:Documentation";
280 Assert.AreEqual("Template:Documentation", site.DocumentationTemplate);
284 /// DocumentationTemplateDefaultPageプロパティテストケース。
287 public void TestDocumentationTemplateDefaultPage()
289 MediaWiki site = new MediaWiki(new Language("ja"));
291 Assert.IsNullOrEmpty(site.DocumentationTemplateDefaultPage);
293 site.DocumentationTemplateDefaultPage = "/doc";
294 Assert.AreEqual("/doc", site.DocumentationTemplateDefaultPage);
302 /// GetPageプロパティテストケース。
305 public void TestGetPage()
307 MediaWiki site = this.GetTestServer("en");
308 Page page = site.GetPage("example");
309 Assert.IsInstanceOf(typeof(MediaWikiPage), page);
310 Assert.AreEqual("Example", page.Title);
311 Assert.AreEqual(DateTime.Parse("2010/07/13 09:49:18"), page.Timestamp);
312 Assert.IsNotEmpty(page.Text);
313 Assert.AreEqual(site, page.Website);
318 #region XMLシリアライズ用メソッドテストケース
321 /// XMLデシリアライズテストケース。
324 public void TestReadXml()
327 using (XmlReader r = XmlReader.Create(
328 new StringReader("<MediaWiki><Location>http://ja.wikipedia.org</Location>"
329 + "<Language Code=\"ja\"><Names /></Language></MediaWiki>")))
331 site = new XmlSerializer(typeof(MediaWiki)).Deserialize(r) as MediaWiki;
334 Assert.IsNotNull(site);
335 Assert.AreEqual("http://ja.wikipedia.org", site.Location);
336 Assert.AreEqual("ja", site.Language.Code);
337 // TODO: プロパティに値が設定されたパターンを追加すべき
338 // TODO: プロパティが空の場合、きちんとデフォルト値が参照されることも確認すべき
345 public void TestWriteXml()
347 Language lang = new Language("ja");
348 MediaWiki site = new MediaWiki(lang);
349 XmlWriterSettings settings = new XmlWriterSettings();
350 settings.OmitXmlDeclaration = true;
352 StringBuilder b = new StringBuilder();
353 using (XmlWriter w = XmlWriter.Create(b, settings))
355 new XmlSerializer(typeof(MediaWiki)).Serialize(w, site);
358 // プロパティはデフォルト値の場合出力しないという動作あり
359 Assert.AreEqual("<MediaWiki><Location>http://ja.wikipedia.org</Location><Language Code=\"ja\"><Names /><Bracket /></Language><NamespacePath /><ExportPath /><Redirect /><TemplateNamespace /><CategoryNamespace /><FileNamespace /><MagicWords /></MediaWiki>", b.ToString());
360 // TODO: プロパティに値が設定されたパターンを追加すべき