1 // ================================================================================================
3 // MediaWikiのテストクラスソース。</summary>
5 // <copyright file="MediaWikiTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Websites
14 using System.Collections.Generic;
16 using System.Reflection;
19 using System.Xml.Serialization;
20 using Honememo.Models;
21 using Honememo.Utilities;
22 using Honememo.Wptscs.Models;
23 using Microsoft.VisualStudio.TestTools.UnitTesting;
26 /// <see cref="MediaWiki"/>のテストクラスです。
29 public class MediaWikiTest
34 /// テストデータが格納されているフォルダパス。
36 private static readonly string TestDir = "Data\\MediaWiki";
39 /// XMLインポート/エクスポートで用いるテストデータ。
41 private static readonly string TestXml = "<MediaWiki><Location>http://ja.wikipedia.org</Location>"
42 + "<Language Code=\"ja\"><Names /><Bracket /></Language>"
43 + "<MetaApi>_api.xml</MetaApi><ExportPath>/export/$1</ExportPath><Redirect>#飛ばす</Redirect>"
44 + "<TemplateNamespace>100</TemplateNamespace><CategoryNamespace>101</CategoryNamespace><FileNamespace>200</FileNamespace>"
45 + "<MagicWords><Variable>特別</Variable><Variable>マジックワード</Variable></MagicWords>"
46 + "<InterwikiPrefixs><Prefix>外部ウィキ</Prefix><Prefix>ニュース</Prefix></InterwikiPrefixs>"
47 + "<DocumentationTemplates><DocumentationTemplate DefaultPage=\"/サブページ\">Template:ドキュメント</DocumentationTemplate>"
48 + "<DocumentationTemplate DefaultPage=\"/サブページ\">テンプレート:Doc</DocumentationTemplate></DocumentationTemplates>"
49 + "<LinkInterwikiFormat>{{仮リンク|$1|$2|$3|label=$4}}</LinkInterwikiFormat>"
50 + "<LangFormat>{{Lang|$1|$2}}</LangFormat>"
51 + "<HasLanguagePage>True</HasLanguagePage></MediaWiki>";
58 /// テスト用の値を設定した<see cref="MediaWiki"/>オブジェクトを返す。
60 /// <param name="language">言語コード。</param>
61 /// <returns>テスト用の値を設定したオブジェクト。</returns>
62 public MediaWiki GetTestServer(string language)
64 // ※ 下記URL生成時は、きちんとパス区切り文字を入れてやら無いとフォルダが認識されない。
65 // また、httpで取得した場合とfileで取得した場合では先頭の大文字小文字が異なることが
66 // あるため、それについては随時期待値を調整して対処。
67 UriBuilder b = new UriBuilder("file", string.Empty);
68 b.Path = Path.GetFullPath(TestDir) + "\\";
69 MediaWiki server = new MediaWiki(new Language(language), new Uri(b.Uri, language + "/").ToString());
70 server.ExportPath = "$1.xml";
71 server.MetaApi = "_api.xml";
80 /// コンストラクタ(MediaWiki全般)テストケース。
83 public void TestConstructorLanguageLocation()
85 MediaWiki site = new MediaWiki(new Language("en"), "test");
86 Assert.AreEqual("en", site.Language.Code);
87 Assert.AreEqual("test", site.Location);
91 /// コンストラクタ(MediaWiki全般)テストケース(languageがnull)。
94 [ExpectedException(typeof(ArgumentNullException))]
95 public void TestConstructorLanguageLocationByLanguageNull()
97 MediaWiki site = new MediaWiki(null, "test");
101 /// コンストラクタ(MediaWiki全般)テストケース(locationがnull)。
104 [ExpectedException(typeof(ArgumentNullException))]
105 public void TestConstructorLanguageLocationByLocationNull()
107 MediaWiki site = new MediaWiki(new Language("en"), null);
111 /// コンストラクタ(Wikipedia用)テストケース。
114 public void TestConstructorLanguage()
116 MediaWiki site = new MediaWiki(new Language("en"));
117 Assert.AreEqual("en", site.Language.Code);
118 Assert.AreEqual("http://en.wikipedia.org", site.Location);
122 /// コンストラクタ(Wikipedia用)テストケース(languageがnull)。
125 [ExpectedException(typeof(ArgumentNullException))]
126 public void TestConstructorLanguageByLanguageNull()
128 MediaWiki site = new MediaWiki(null);
133 #region 設定ファイルに初期値を持つプロパティテストケース
136 /// <see cref="MediaWiki.MetaApi"/>プロパティテストケース。
139 public void TestMetaApi()
141 MediaWiki site = new MediaWiki(new Language("ja"));
143 // デフォルトでは設定ファイルの値が返される
144 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases|interwikimap", site.MetaApi);
147 site.MetaApi = "test";
148 Assert.AreEqual("test", site.MetaApi);
150 // 空またはnullの場合、再び設定ファイルの値が入る
152 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases|interwikimap", site.MetaApi);
153 site.MetaApi = string.Empty;
154 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases|interwikimap", site.MetaApi);
158 /// <see cref="MediaWiki.ExportPath"/>プロパティテストケース。
161 public void TestExportPath()
163 MediaWiki site = new MediaWiki(new Language("ja"));
165 // デフォルトでは設定ファイルの値が返される
166 Assert.AreEqual("/wiki/Special:Export/$1", site.ExportPath);
169 site.ExportPath = "test";
170 Assert.AreEqual("test", site.ExportPath);
172 // 空またはnullの場合、再び設定ファイルの値が入る
173 site.ExportPath = null;
174 Assert.AreEqual("/wiki/Special:Export/$1", site.ExportPath);
175 site.ExportPath = string.Empty;
176 Assert.AreEqual("/wiki/Special:Export/$1", site.ExportPath);
180 /// <see cref="MediaWiki.Redirect"/>プロパティテストケース。
183 public void TestRedirect()
185 MediaWiki site = new MediaWiki(new Language("ja"));
187 // デフォルトでは設定ファイルの値が返される
188 Assert.AreEqual("#REDIRECT", site.Redirect);
191 site.Redirect = "test";
192 Assert.AreEqual("test", site.Redirect);
194 // 空またはnullの場合、再び設定ファイルの値が入る
195 site.Redirect = null;
196 Assert.AreEqual("#REDIRECT", site.Redirect);
197 site.Redirect = string.Empty;
198 Assert.AreEqual("#REDIRECT", site.Redirect);
202 /// <see cref="MediaWiki.TemplateNamespace"/>プロパティテストケース。
205 public void TestTemplateNamespace()
207 MediaWiki site = new MediaWiki(new Language("ja"));
209 // デフォルトでは設定ファイルの値が返される
210 Assert.AreEqual(10, site.TemplateNamespace);
213 site.TemplateNamespace = -1;
214 Assert.AreEqual(-1, site.TemplateNamespace);
218 /// <see cref="MediaWiki.CategoryNamespace"/>プロパティテストケース。
221 public void TestCategoryNamespace()
223 MediaWiki site = new MediaWiki(new Language("ja"));
225 // デフォルトでは設定ファイルの値が返される
226 Assert.AreEqual(14, site.CategoryNamespace);
229 site.CategoryNamespace = -1;
230 Assert.AreEqual(-1, site.CategoryNamespace);
234 /// <see cref="MediaWiki.FileNamespace"/>プロパティテストケース。
237 public void TestFileNamespace()
239 MediaWiki site = new MediaWiki(new Language("ja"));
241 // デフォルトでは設定ファイルの値が返される
242 Assert.AreEqual(6, site.FileNamespace);
245 site.FileNamespace = -1;
246 Assert.AreEqual(-1, site.FileNamespace);
250 /// <see cref="MediaWiki.MagicWords"/>プロパティテストケース。
253 public void TestMagicWords()
255 MediaWiki site = new MediaWiki(new Language("ja"));
257 // デフォルトでは設定ファイルの値が返される
258 Assert.IsTrue(site.MagicWords.Contains("SERVERNAME"));
261 site.MagicWords = new HashSet<string>();
262 Assert.AreEqual(0, site.MagicWords.Count);
264 // nullの場合、再び設定ファイルの値が入る
265 site.MagicWords = null;
266 Assert.IsTrue(site.MagicWords.Contains("SERVERNAME"));
271 #region サーバーから値を取得するプロパティテストケース
274 /// <see cref="MediaWiki.Namespaces"/>プロパティテストケース。
277 public void TestNamespaces()
279 MediaWiki site = this.GetTestServer("en");
281 // サーバーからダウンロードした値が返される
282 ISet<string> names = site.Namespaces[6];
283 Assert.IsNotNull(site.Namespaces);
284 Assert.IsTrue(site.Namespaces.Count > 0);
285 Assert.IsTrue(names.Contains("File"));
286 Assert.IsTrue(names.Contains("Image"));
290 /// <see cref="MediaWiki.InterwikiPrefixs"/>プロパティテストケース。
293 public void TestInterwikiPrefixs()
295 MediaWiki site = this.GetTestServer("en");
297 // デフォルトではサーバーからダウンロードした値+設定ファイルの値が返される
298 Assert.IsNotNull(site.InterwikiPrefixs);
299 Assert.IsTrue(site.InterwikiPrefixs.Count > 0);
300 Assert.IsTrue(site.InterwikiPrefixs.Contains("ja"));
301 Assert.IsTrue(site.InterwikiPrefixs.Contains("w"));
302 Assert.IsTrue(site.InterwikiPrefixs.Contains("wikipedia"));
303 Assert.IsTrue(site.InterwikiPrefixs.Contains("commons"));
305 // 値を設定すると設定ファイルの値の代わりにその値が返る
306 IgnoreCaseSet prefixs = new IgnoreCaseSet();
307 prefixs.Add("testtesttest");
308 site.InterwikiPrefixs = prefixs;
309 Assert.IsFalse(site.InterwikiPrefixs.Contains("wikipedia"));
310 Assert.IsTrue(site.InterwikiPrefixs.Contains("testtesttest"));
312 // 空の場合、再び設定ファイルの値が入る
313 site.InterwikiPrefixs = null;
314 Assert.AreNotSame(prefixs, site.InterwikiPrefixs);
315 Assert.IsTrue(site.InterwikiPrefixs.Contains("wikipedia"));
316 Assert.IsFalse(site.InterwikiPrefixs.Contains("testtesttest"));
321 #region それ以外のプロパティテストケース
324 /// <see cref="MediaWiki.DocumentationTemplates"/>プロパティテストケース。
327 public void TestDocumentationTemplates()
329 MediaWiki site = new MediaWiki(new Language("ja"));
332 Assert.IsNotNull(site.DocumentationTemplates);
333 Assert.AreEqual(0, site.DocumentationTemplates.Count);
335 // 値を設定するとそのオブジェクトが返る
336 string[] templates = new string[] { "Template:Documentation" };
337 site.DocumentationTemplates = templates;
338 Assert.AreEqual(1, site.DocumentationTemplates.Count);
339 Assert.AreEqual("Template:Documentation", site.DocumentationTemplates[0]);
340 Assert.AreSame(templates, site.DocumentationTemplates);
343 site.DocumentationTemplates = null;
344 Assert.IsNotNull(site.DocumentationTemplates);
345 Assert.AreEqual(0, site.DocumentationTemplates.Count);
349 /// <see cref="MediaWiki.DocumentationTemplateDefaultPage"/>プロパティテストケース。
352 public void TestDocumentationTemplateDefaultPage()
354 MediaWiki site = new MediaWiki(new Language("ja"));
357 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.DocumentationTemplateDefaultPage));
360 site.DocumentationTemplateDefaultPage = "/doc";
361 Assert.AreEqual("/doc", site.DocumentationTemplateDefaultPage);
362 site.DocumentationTemplateDefaultPage = null;
363 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.DocumentationTemplateDefaultPage));
367 /// <see cref="MediaWiki.LinkInterwikiFormat"/>プロパティテストケース。
370 public void TestLinkInterwikiFormat()
372 MediaWiki site = new MediaWiki(new Language("ja"));
375 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LinkInterwikiFormat));
378 site.LinkInterwikiFormat = "{{仮リンク|$1|$2|$3|label=$4}}";
379 Assert.AreEqual("{{仮リンク|$1|$2|$3|label=$4}}", site.LinkInterwikiFormat);
380 site.LinkInterwikiFormat = null;
381 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LinkInterwikiFormat));
385 /// <see cref="MediaWiki.LangFormat"/>プロパティテストケース。
388 public void TestLangFormat()
390 MediaWiki site = new MediaWiki(new Language("ja"));
393 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LangFormat));
396 site.LangFormat = "{{Lang|$1|$2}}";
397 Assert.AreEqual("{{Lang|$1|$2}}", site.LangFormat);
398 site.LangFormat = null;
399 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LangFormat));
403 /// <see cref="MediaWiki.HasLanguagePage"/>プロパティテストケース。
406 public void TestHasLanguagePage()
408 MediaWiki site = new MediaWiki(new Language("ja"));
411 Assert.IsFalse(site.HasLanguagePage);
414 site.HasLanguagePage = true;
415 Assert.IsTrue(site.HasLanguagePage);
416 site.HasLanguagePage = false;
417 Assert.IsFalse(site.HasLanguagePage);
425 /// <see cref="MediaWiki.GetPage"/>メソッドテストケース。
428 public void TestGetPage()
430 MediaWiki site = this.GetTestServer("en");
431 Page page = site.GetPage("example");
432 Assert.IsInstanceOfType(page, typeof(MediaWikiPage));
433 Assert.AreEqual("Example", page.Title);
434 Assert.AreEqual(DateTime.Parse("2010/07/13T00:49:18Z"), page.Timestamp);
435 Assert.IsTrue(page.Text.Length > 0);
436 Assert.AreEqual(site, page.Website);
440 /// <see cref="MediaWiki.IsMagicWord"/>メソッドテストケース。
443 public void TestIsMagicWord()
445 MediaWiki site = new MediaWiki(new Language("en"), "http://example.com");
446 site.MagicWords = new HashSet<string>();
449 Assert.IsFalse(site.IsMagicWord("CURRENTYEAR"));
450 Assert.IsFalse(site.IsMagicWord("ns:1"));
453 site.MagicWords.Add("CURRENTYEAR");
454 Assert.IsTrue(site.IsMagicWord("CURRENTYEAR"));
455 Assert.IsFalse(site.IsMagicWord("currentyear"));
456 Assert.IsFalse(site.IsMagicWord("ns:1"));
458 // コロンが入るものは、その前の部分までで判定
459 site.MagicWords.Add("ns");
460 Assert.IsTrue(site.IsMagicWord("CURRENTYEAR"));
461 Assert.IsTrue(site.IsMagicWord("ns:1"));
465 /// <see cref="MediaWiki.IsInterwiki"/>メソッドテストケース。
468 public void TestIsInterwiki()
470 MediaWiki site = this.GetTestServer("en");
471 site.InterwikiPrefixs = new IgnoreCaseSet();
474 Assert.IsFalse(site.IsInterwiki("commons:test"));
475 Assert.IsFalse(site.IsInterwiki("commons:"));
476 Assert.IsFalse(site.IsInterwiki("common:"));
477 Assert.IsFalse(site.IsInterwiki("zzz:zzz語版記事"));
478 Assert.IsFalse(site.IsInterwiki("ZZZ:zzz語版記事"));
480 // 値が設定されていれば、前方一致で一致する、大文字小文字は区別しない
481 site.InterwikiPrefixs.Add("commons");
482 site.InterwikiPrefixs.Add("zzz");
483 Assert.IsTrue(site.IsInterwiki("commons:test"));
484 Assert.IsTrue(site.IsInterwiki("commons:"));
485 Assert.IsFalse(site.IsInterwiki("common:"));
486 Assert.IsTrue(site.IsInterwiki("zzz:zzz語版記事"));
487 Assert.IsTrue(site.IsInterwiki("ZZZ:zzz語版記事"));
489 // 名前空間名と被るときはそちらが優先、ウィキ間リンクとは判定されない
490 site.InterwikiPrefixs.Add("File");
491 Assert.IsFalse(site.IsInterwiki("File:zzz語版記事"));
495 /// <see cref="MediaWiki.IsNamespace"/>メソッドテストケース。
498 public void TestIsNamespace()
500 MediaWiki site = this.GetTestServer("en");
502 // 値が設定されていれば、前方一致で一致する、大文字小文字は区別しない
503 Assert.IsFalse(site.IsNamespace("page"));
504 Assert.IsTrue(site.IsNamespace("File:image.png"));
505 Assert.IsTrue(site.IsNamespace("file:image.png"));
506 Assert.IsFalse(site.IsNamespace("画像:image.png"));
510 /// <see cref="MediaWiki.FormatLinkInterwiki"/>メソッドテストケース。
513 public void TestFormatLinkInterwiki()
515 MediaWiki site = new MediaWiki(new Language("en"), "http://example.com");
517 // LinkInterwikiFormatが空の場合、nullが返る
518 site.LinkInterwikiFormat = null;
519 Assert.IsNull(site.FormatLinkInterwiki("記事名", "言語", "他言語版記事名", "表示名"));
520 site.LinkInterwikiFormat = string.Empty;
521 Assert.IsNull(site.FormatLinkInterwiki("記事名", "言語", "他言語版記事名", "表示名"));
523 // 値が設定されている場合、パラメータを埋め込んで書式化される
524 site.LinkInterwikiFormat = "{{仮リンク|$1|$2|$3|label=$4}}";
525 Assert.AreEqual("{{仮リンク|記事名1|言語1|他言語版記事名1|label=表示名1}}", site.FormatLinkInterwiki("記事名1", "言語1", "他言語版記事名1", "表示名1"));
526 site.LinkInterwikiFormat = "{{日本語版にない記事リンク|$1|$2|$3}}";
527 Assert.AreEqual("{{日本語版にない記事リンク|記事名2|言語2|他言語版記事名2}}", site.FormatLinkInterwiki("記事名2", "言語2", "他言語版記事名2", "表示名2"));
528 site.LinkInterwikiFormat = "[[:$2:$3|$4]]";
529 Assert.AreEqual("[[:言語3:他言語版記事名3|表示名3]]", site.FormatLinkInterwiki("記事名3", "言語3", "他言語版記事名3", "表示名3"));
530 site.LinkInterwikiFormat = "xxx";
531 Assert.AreEqual("xxx", site.FormatLinkInterwiki("記事名", "言語", "他言語版記事名", "表示名"));
534 site.LinkInterwikiFormat = "{{仮リンク|$1|$2|$3|label=$4}}";
535 Assert.AreEqual("{{仮リンク||||label=}}", site.FormatLinkInterwiki(null, null, null, null));
539 /// <see cref="MediaWiki.FormatLang"/>メソッドテストケース。
542 public void TestFormatLang()
544 MediaWiki site = new MediaWiki(new Language("en"), "http://example.com");
546 // LangFormatが空の場合、nullが返る
547 site.LangFormat = null;
548 Assert.IsNull(site.FormatLang("ja", "日本語テキスト"));
549 site.LangFormat = string.Empty;
550 Assert.IsNull(site.FormatLang("ja", "日本語テキスト"));
552 // 値が設定されている場合、パラメータを埋め込んで書式化される
553 site.LangFormat = "{{Lang|$1|$2}}";
554 Assert.AreEqual("{{Lang|ja|日本語テキスト}}", site.FormatLang("ja", "日本語テキスト"));
555 site.LangFormat = "xxx";
556 Assert.AreEqual("xxx", site.FormatLang("ja", "日本語テキスト"));
559 site.LangFormat = "{{Lang|$1|$2}}";
560 Assert.AreEqual("{{Lang||}}", site.FormatLang(null, null));
565 #region XMLシリアライズ用メソッドテストケース
568 /// XMLデシリアライズテストケース。
571 public void TestReadXml()
575 using (XmlReader r = XmlReader.Create(
576 new StringReader("<MediaWiki><Location>http://ja.wikipedia.org</Location>"
577 + "<Language Code=\"ja\"><Names /></Language></MediaWiki>")))
579 site = new XmlSerializer(typeof(MediaWiki)).Deserialize(r) as MediaWiki;
582 Assert.IsNotNull(site);
583 Assert.AreEqual("http://ja.wikipedia.org", site.Location);
584 Assert.AreEqual("ja", site.Language.Code);
585 Assert.AreEqual(0, site.DocumentationTemplates.Count);
586 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.DocumentationTemplateDefaultPage));
587 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LinkInterwikiFormat));
588 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LangFormat));
589 Assert.IsFalse(site.HasLanguagePage);
591 // 下記プロパティは、空の場合デフォルト値が返る
592 // ※ Namespacesは空の場合サーバーからデフォルト値を取得するため、ここではテストしない
593 // ※ InterwikiPrefixsのgetは常にサーバーからも値を取得するため、ここではテストしない
594 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases|interwikimap", site.MetaApi);
595 Assert.AreEqual("/wiki/Special:Export/$1", site.ExportPath);
596 Assert.AreEqual("#REDIRECT", site.Redirect);
597 Assert.AreEqual(10, site.TemplateNamespace);
598 Assert.AreEqual(14, site.CategoryNamespace);
599 Assert.AreEqual(6, site.FileNamespace);
600 Assert.IsTrue(site.MagicWords.Count > 10);
602 // プロパティに値が設定された状態での読み込み
603 using (XmlReader r = XmlReader.Create(new StringReader(TestXml)))
605 site = new XmlSerializer(typeof(MediaWiki)).Deserialize(r) as MediaWiki;
608 // ※ InterwikiPrefixsのgetは常にサーバーからも値を取得するため、ここではテストしない
609 Assert.IsNotNull(site);
610 Assert.AreEqual("http://ja.wikipedia.org", site.Location);
611 Assert.AreEqual("ja", site.Language.Code);
612 Assert.AreEqual("_api.xml", site.MetaApi);
613 Assert.AreEqual("/export/$1", site.ExportPath);
614 Assert.AreEqual("#飛ばす", site.Redirect);
615 Assert.AreEqual(100, site.TemplateNamespace);
616 Assert.AreEqual(101, site.CategoryNamespace);
617 Assert.AreEqual(200, site.FileNamespace);
618 Assert.AreEqual(2, site.MagicWords.Count);
619 Assert.IsTrue(site.MagicWords.Contains("特別"));
620 Assert.IsTrue(site.MagicWords.Contains("マジックワード"));
621 Assert.AreEqual(2, site.DocumentationTemplates.Count);
622 Assert.IsTrue(site.DocumentationTemplates.Contains("Template:ドキュメント"));
623 Assert.IsTrue(site.DocumentationTemplates.Contains("テンプレート:Doc"));
624 Assert.AreEqual("/サブページ", site.DocumentationTemplateDefaultPage);
625 Assert.AreEqual("{{仮リンク|$1|$2|$3|label=$4}}", site.LinkInterwikiFormat);
626 Assert.AreEqual("{{Lang|$1|$2}}", site.LangFormat);
627 Assert.IsTrue(site.HasLanguagePage);
634 public void TestWriteXml()
636 MediaWiki site = new MediaWiki(new Language("ja"));
638 XmlWriterSettings settings = new XmlWriterSettings();
639 settings.OmitXmlDeclaration = true;
642 // 設定ファイルに初期値を持つプロパティはデフォルト値の場合出力しないという動作あり
643 b = new StringBuilder();
644 using (XmlWriter w = XmlWriter.Create(b, settings))
646 new XmlSerializer(typeof(MediaWiki)).Serialize(w, site);
650 "<MediaWiki><Location>http://ja.wikipedia.org</Location><Language Code=\"ja\"><Names /><Bracket /></Language>"
651 + "<MetaApi /><ExportPath /><Redirect /><TemplateNamespace /><CategoryNamespace /><FileNamespace />"
652 + "<MagicWords /><InterwikiPrefixs /><DocumentationTemplates /><LinkInterwikiFormat /><LangFormat />"
653 + "<HasLanguagePage>False</HasLanguagePage></MediaWiki>",
656 // プロパティに値が設定された場合の出力
657 site.MetaApi = "_api.xml";
658 site.ExportPath = "/export/$1";
659 site.Redirect = "#飛ばす";
660 site.TemplateNamespace = 100;
661 site.CategoryNamespace = 101;
662 site.FileNamespace = 200;
663 site.MagicWords = new HashSet<string>(new string[] { "特別", "マジックワード" });
664 site.InterwikiPrefixs = new IgnoreCaseSet(new string[] { "外部ウィキ", "ニュース" });
665 site.DocumentationTemplates = new string[] { "Template:ドキュメント", "テンプレート:Doc" };
666 site.DocumentationTemplateDefaultPage = "/サブページ";
667 site.LinkInterwikiFormat = "{{仮リンク|$1|$2|$3|label=$4}}";
668 site.LangFormat = "{{Lang|$1|$2}}";
669 site.HasLanguagePage = true;
671 b = new StringBuilder();
672 using (XmlWriter w = XmlWriter.Create(b, settings))
674 new XmlSerializer(typeof(MediaWiki)).Serialize(w, site);
677 Assert.AreEqual(TestXml, b.ToString());