1 // ================================================================================================
3 // MediaWikiのテストクラスソース。</summary>
5 // <copyright file="MediaWikiTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2013 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 Honememo.Wptscs.Utilities;
24 using Microsoft.VisualStudio.TestTools.UnitTesting;
27 /// <see cref="MediaWiki"/>のテストクラスです。
30 public class MediaWikiTest
35 /// XMLインポート/エクスポートで用いるテストデータ。
37 private static readonly string TestXml = "<MediaWiki><Location>http://ja.wikipedia.org</Location>"
38 + "<Language Code=\"ja\"><Names /><Bracket /></Language>"
39 + "<MetaApi>_api.xml</MetaApi><ContentApi>/export/$1</ContentApi><InterlanguageApi>/interlanguage/$1.xml</InterlanguageApi>"
40 + "<TemplateNamespace>100</TemplateNamespace><CategoryNamespace>101</CategoryNamespace><FileNamespace>200</FileNamespace>"
41 + "<MagicWords><Variable>特別</Variable><Variable>マジックワード</Variable></MagicWords>"
42 + "<InterwikiPrefixs><Prefix>外部ウィキ</Prefix><Prefix>ニュース</Prefix></InterwikiPrefixs>"
43 + "<LinkInterwikiFormat>{{仮リンク|$1|$2|$3|label=$4}}</LinkInterwikiFormat>"
44 + "<LangFormat>{{Lang|$1|$2}}</LangFormat>"
45 + "<HasLanguagePage>True</HasLanguagePage></MediaWiki>";
52 /// コンストラクタ(MediaWiki全般)テストケース。
55 public void TestConstructorLanguageLocation()
57 MediaWiki site = new MediaWiki(new Language("en"), "test");
58 Assert.AreEqual("en", site.Language.Code);
59 Assert.AreEqual("test", site.Location);
63 /// コンストラクタ(MediaWiki全般)テストケース(languageがnull)。
66 [ExpectedException(typeof(ArgumentNullException))]
67 public void TestConstructorLanguageLocationByLanguageNull()
69 MediaWiki site = new MediaWiki(null, "test");
73 /// コンストラクタ(MediaWiki全般)テストケース(locationがnull)。
76 [ExpectedException(typeof(ArgumentNullException))]
77 public void TestConstructorLanguageLocationByLocationNull()
79 MediaWiki site = new MediaWiki(new Language("en"), null);
83 /// コンストラクタ(Wikipedia用)テストケース。
86 public void TestConstructorLanguage()
88 MediaWiki site = new MediaWiki(new Language("en"));
89 Assert.AreEqual("en", site.Language.Code);
90 Assert.AreEqual("http://en.wikipedia.org", site.Location);
94 /// コンストラクタ(Wikipedia用)テストケース(languageがnull)。
97 [ExpectedException(typeof(ArgumentNullException))]
98 public void TestConstructorLanguageByLanguageNull()
100 MediaWiki site = new MediaWiki(null);
105 #region 設定ファイルに初期値を持つプロパティテストケース
108 /// <see cref="MediaWiki.MetaApi"/>プロパティテストケース。
111 public void TestMetaApi()
113 MediaWiki site = new MediaWiki(new Language("ja"));
115 // デフォルトでは設定ファイルの値が返される
116 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases|interwikimap", site.MetaApi);
119 site.MetaApi = "test";
120 Assert.AreEqual("test", site.MetaApi);
122 // 空またはnullの場合、再び設定ファイルの値が入る
124 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases|interwikimap", site.MetaApi);
125 site.MetaApi = string.Empty;
126 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases|interwikimap", site.MetaApi);
130 /// <see cref="MediaWiki.ContentApi"/>プロパティテストケース。
133 public void TestContentApi()
135 MediaWiki site = new MediaWiki(new Language("ja"));
137 // デフォルトでは設定ファイルの値が返される
139 "/w/api.php?action=query&prop=revisions&titles=$1&redirects&rvprop=timestamp|content&format=xml",
143 site.ContentApi = "test";
144 Assert.AreEqual("test", site.ContentApi);
146 // 空またはnullの場合、再び設定ファイルの値が入る
147 site.ContentApi = null;
149 "/w/api.php?action=query&prop=revisions&titles=$1&redirects&rvprop=timestamp|content&format=xml",
151 site.ContentApi = string.Empty;
153 "/w/api.php?action=query&prop=revisions&titles=$1&redirects&rvprop=timestamp|content&format=xml",
158 /// <see cref="MediaWiki.InterlanguageApi"/>プロパティテストケース。
161 public void TestInterlanguageApi()
163 MediaWiki site = new MediaWiki(new Language("ja"));
165 // デフォルトでは設定ファイルの値が返される
167 "/w/api.php?action=query&prop=langlinks&titles=$1&redirects=&lllimit=500&format=xml",
168 site.InterlanguageApi);
171 site.InterlanguageApi = "test";
172 Assert.AreEqual("test", site.InterlanguageApi);
174 // 空またはnullの場合、再び設定ファイルの値が入る
175 site.InterlanguageApi = null;
177 "/w/api.php?action=query&prop=langlinks&titles=$1&redirects=&lllimit=500&format=xml",
178 site.InterlanguageApi);
179 site.InterlanguageApi = string.Empty;
181 "/w/api.php?action=query&prop=langlinks&titles=$1&redirects=&lllimit=500&format=xml",
182 site.InterlanguageApi);
186 /// <see cref="MediaWiki.TemplateNamespace"/>プロパティテストケース。
189 public void TestTemplateNamespace()
191 MediaWiki site = new MediaWiki(new Language("ja"));
193 // デフォルトでは設定ファイルの値が返される
194 Assert.AreEqual(10, site.TemplateNamespace);
197 site.TemplateNamespace = -1;
198 Assert.AreEqual(-1, site.TemplateNamespace);
202 /// <see cref="MediaWiki.CategoryNamespace"/>プロパティテストケース。
205 public void TestCategoryNamespace()
207 MediaWiki site = new MediaWiki(new Language("ja"));
209 // デフォルトでは設定ファイルの値が返される
210 Assert.AreEqual(14, site.CategoryNamespace);
213 site.CategoryNamespace = -1;
214 Assert.AreEqual(-1, site.CategoryNamespace);
218 /// <see cref="MediaWiki.FileNamespace"/>プロパティテストケース。
221 public void TestFileNamespace()
223 MediaWiki site = new MediaWiki(new Language("ja"));
225 // デフォルトでは設定ファイルの値が返される
226 Assert.AreEqual(6, site.FileNamespace);
229 site.FileNamespace = -1;
230 Assert.AreEqual(-1, site.FileNamespace);
234 /// <see cref="MediaWiki.MagicWords"/>プロパティテストケース。
237 public void TestMagicWords()
239 MediaWiki site = new MediaWiki(new Language("ja"));
241 // デフォルトでは設定ファイルの値が返される
242 Assert.IsTrue(site.MagicWords.Contains("SERVERNAME"));
245 site.MagicWords = new HashSet<string>();
246 Assert.AreEqual(0, site.MagicWords.Count);
248 // nullの場合、再び設定ファイルの値が入る
249 site.MagicWords = null;
250 Assert.IsTrue(site.MagicWords.Contains("SERVERNAME"));
255 #region サーバーから値を取得するプロパティテストケース
258 /// <see cref="MediaWiki.Namespaces"/>プロパティテストケース。
261 public void TestNamespaces()
263 MediaWiki site = new MockFactory().GetMediaWiki("en");
265 // サーバーからダウンロードした値が返される
266 ISet<string> names = site.Namespaces[6];
267 Assert.IsNotNull(site.Namespaces);
268 Assert.IsTrue(site.Namespaces.Count > 0);
269 Assert.IsTrue(names.Contains("File"));
270 Assert.IsTrue(names.Contains("Image"));
274 /// <see cref="MediaWiki.InterwikiPrefixs"/>プロパティテストケース。
277 public void TestInterwikiPrefixs()
279 MediaWiki site = new MockFactory().GetMediaWiki("en");
281 // デフォルトではサーバーからダウンロードした値+設定ファイルの値が返される
282 Assert.IsNotNull(site.InterwikiPrefixs);
283 Assert.IsTrue(site.InterwikiPrefixs.Count > 0);
284 Assert.IsTrue(site.InterwikiPrefixs.Contains("ja"));
285 Assert.IsTrue(site.InterwikiPrefixs.Contains("w"));
286 Assert.IsTrue(site.InterwikiPrefixs.Contains("wikipedia"));
287 Assert.IsTrue(site.InterwikiPrefixs.Contains("commons"));
289 // 値を設定すると設定ファイルの値の代わりにその値が返る
290 IgnoreCaseSet prefixs = new IgnoreCaseSet();
291 prefixs.Add("testtesttest");
292 site.InterwikiPrefixs = prefixs;
293 Assert.IsFalse(site.InterwikiPrefixs.Contains("wikipedia"));
294 Assert.IsTrue(site.InterwikiPrefixs.Contains("testtesttest"));
296 // 空の場合、再び設定ファイルの値が入る
297 site.InterwikiPrefixs = null;
298 Assert.AreNotSame(prefixs, site.InterwikiPrefixs);
299 Assert.IsTrue(site.InterwikiPrefixs.Contains("wikipedia"));
300 Assert.IsFalse(site.InterwikiPrefixs.Contains("testtesttest"));
305 #region それ以外のプロパティテストケース
308 /// <see cref="MediaWiki.LinkInterwikiFormat"/>プロパティテストケース。
311 public void TestLinkInterwikiFormat()
313 MediaWiki site = new MediaWiki(new Language("ja"));
316 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LinkInterwikiFormat));
319 site.LinkInterwikiFormat = "{{仮リンク|$1|$2|$3|label=$4}}";
320 Assert.AreEqual("{{仮リンク|$1|$2|$3|label=$4}}", site.LinkInterwikiFormat);
321 site.LinkInterwikiFormat = null;
322 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LinkInterwikiFormat));
326 /// <see cref="MediaWiki.LangFormat"/>プロパティテストケース。
329 public void TestLangFormat()
331 MediaWiki site = new MediaWiki(new Language("ja"));
334 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LangFormat));
337 site.LangFormat = "{{Lang|$1|$2}}";
338 Assert.AreEqual("{{Lang|$1|$2}}", site.LangFormat);
339 site.LangFormat = null;
340 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LangFormat));
344 /// <see cref="MediaWiki.HasLanguagePage"/>プロパティテストケース。
347 public void TestHasLanguagePage()
349 MediaWiki site = new MediaWiki(new Language("ja"));
352 Assert.IsFalse(site.HasLanguagePage);
355 site.HasLanguagePage = true;
356 Assert.IsTrue(site.HasLanguagePage);
357 site.HasLanguagePage = false;
358 Assert.IsFalse(site.HasLanguagePage);
366 /// <see cref="MediaWiki.GetPage"/>メソッドテストケース。
369 public void TestGetPage()
371 MediaWiki site = new MockFactory().GetMediaWiki("en");
372 Page page = site.GetPage("example");
373 Assert.IsInstanceOfType(page, typeof(MediaWikiPage));
374 MediaWikiPage mp = (MediaWikiPage)page;
375 Assert.AreEqual("Example", page.Title);
376 Assert.AreSame(site, page.Website);
378 new Uri(new Uri(site.Location), StringUtils.FormatDollarVariable(site.InterlanguageApi, "example")),
380 Assert.IsNull(mp.Redirect);
381 Assert.AreEqual("Example (Begriffsklärung)", mp.GetInterlanguage("de"));
383 // 以下の二つは、遅延読み込みなので厳密にはGetPageで取得されていない
384 Assert.AreEqual(DateTime.Parse("2010/07/13T00:49:18Z"), page.Timestamp);
385 Assert.IsTrue(page.Text.Length > 0);
388 page = site.GetPage("example.net");
389 Assert.IsInstanceOfType(page, typeof(MediaWikiPage));
390 mp = (MediaWikiPage)page;
391 Assert.AreEqual("Example.com", page.Title);
392 Assert.AreSame(site, page.Website);
394 new Uri(new Uri(site.Location), StringUtils.FormatDollarVariable(site.InterlanguageApi, "example.net")),
396 Assert.AreEqual("Example.net", mp.Redirect);
400 /// <see cref="MediaWiki.GetPageBodyAndTimestamp"/>メソッドテストケース。
403 public void TestGetPageBodyAndTimestamp()
405 MediaWiki site = new MockFactory().GetMediaWiki("en");
406 Page page = site.GetPageBodyAndTimestamp("example");
407 Assert.IsInstanceOfType(page, typeof(MediaWikiPage));
408 Assert.AreEqual("Example", page.Title);
409 Assert.AreEqual(DateTime.Parse("2010/07/13T00:49:18Z"), page.Timestamp);
410 Assert.IsTrue(page.Text.Length > 0);
411 Assert.AreEqual(site, page.Website);
413 // このメソッドでは言語間リンク・リダイレクトは取れない
414 Assert.IsNull(((MediaWikiPage)page).GetInterlanguage("de"));
418 /// <see cref="MediaWiki.IsMagicWord"/>メソッドテストケース。
421 public void TestIsMagicWord()
423 MediaWiki site = new MediaWiki(new Language("en"), "http://example.com");
424 site.MagicWords = new HashSet<string>();
427 Assert.IsFalse(site.IsMagicWord("CURRENTYEAR"));
428 Assert.IsFalse(site.IsMagicWord("ns:1"));
431 site.MagicWords.Add("CURRENTYEAR");
432 Assert.IsTrue(site.IsMagicWord("CURRENTYEAR"));
433 Assert.IsFalse(site.IsMagicWord("currentyear"));
434 Assert.IsFalse(site.IsMagicWord("ns:1"));
436 // コロンが入るものは、その前の部分までで判定
437 site.MagicWords.Add("ns");
438 Assert.IsTrue(site.IsMagicWord("CURRENTYEAR"));
439 Assert.IsTrue(site.IsMagicWord("ns:1"));
443 /// <see cref="MediaWiki.IsInterwiki"/>メソッドテストケース。
446 public void TestIsInterwiki()
448 MediaWiki site = new MockFactory().GetMediaWiki("en");
449 site.InterwikiPrefixs = new IgnoreCaseSet();
452 Assert.IsFalse(site.IsInterwiki("commons:test"));
453 Assert.IsFalse(site.IsInterwiki("commons:"));
454 Assert.IsFalse(site.IsInterwiki("common:"));
455 Assert.IsFalse(site.IsInterwiki("zzz:zzz語版記事"));
456 Assert.IsFalse(site.IsInterwiki("ZZZ:zzz語版記事"));
458 // 値が設定されていれば、前方一致で一致する、大文字小文字は区別しない
459 site.InterwikiPrefixs.Add("commons");
460 site.InterwikiPrefixs.Add("zzz");
461 Assert.IsTrue(site.IsInterwiki("commons:test"));
462 Assert.IsTrue(site.IsInterwiki("commons:"));
463 Assert.IsFalse(site.IsInterwiki("common:"));
464 Assert.IsTrue(site.IsInterwiki("zzz:zzz語版記事"));
465 Assert.IsTrue(site.IsInterwiki("ZZZ:zzz語版記事"));
467 // 名前空間名と被るときはそちらが優先、ウィキ間リンクとは判定されない
468 site.InterwikiPrefixs.Add("File");
469 Assert.IsFalse(site.IsInterwiki("File:zzz語版記事"));
473 /// <see cref="MediaWiki.IsNamespace"/>メソッドテストケース。
476 public void TestIsNamespace()
478 MediaWiki site = new MockFactory().GetMediaWiki("en");
480 // 値が設定されていれば、前方一致で一致する、大文字小文字は区別しない
481 Assert.IsFalse(site.IsNamespace("page"));
482 Assert.IsTrue(site.IsNamespace("File:image.png"));
483 Assert.IsTrue(site.IsNamespace("file:image.png"));
484 Assert.IsFalse(site.IsNamespace("画像:image.png"));
488 /// <see cref="MediaWiki.FormatLinkInterwiki"/>メソッドテストケース。
491 public void TestFormatLinkInterwiki()
493 MediaWiki site = new MediaWiki(new Language("en"), "http://example.com");
495 // LinkInterwikiFormatが空の場合、nullが返る
496 site.LinkInterwikiFormat = null;
497 Assert.IsNull(site.FormatLinkInterwiki("記事名", "言語", "他言語版記事名", "表示名"));
498 site.LinkInterwikiFormat = string.Empty;
499 Assert.IsNull(site.FormatLinkInterwiki("記事名", "言語", "他言語版記事名", "表示名"));
501 // 値が設定されている場合、パラメータを埋め込んで書式化される
502 site.LinkInterwikiFormat = "{{仮リンク|$1|$2|$3|label=$4}}";
503 Assert.AreEqual("{{仮リンク|記事名1|言語1|他言語版記事名1|label=表示名1}}", site.FormatLinkInterwiki("記事名1", "言語1", "他言語版記事名1", "表示名1"));
504 site.LinkInterwikiFormat = "{{日本語版にない記事リンク|$1|$2|$3}}";
505 Assert.AreEqual("{{日本語版にない記事リンク|記事名2|言語2|他言語版記事名2}}", site.FormatLinkInterwiki("記事名2", "言語2", "他言語版記事名2", "表示名2"));
506 site.LinkInterwikiFormat = "[[:$2:$3|$4]]";
507 Assert.AreEqual("[[:言語3:他言語版記事名3|表示名3]]", site.FormatLinkInterwiki("記事名3", "言語3", "他言語版記事名3", "表示名3"));
508 site.LinkInterwikiFormat = "xxx";
509 Assert.AreEqual("xxx", site.FormatLinkInterwiki("記事名", "言語", "他言語版記事名", "表示名"));
512 site.LinkInterwikiFormat = "{{仮リンク|$1|$2|$3|label=$4}}";
513 Assert.AreEqual("{{仮リンク||||label=}}", site.FormatLinkInterwiki(null, null, null, null));
517 /// <see cref="MediaWiki.FormatLang"/>メソッドテストケース。
520 public void TestFormatLang()
522 MediaWiki site = new MediaWiki(new Language("en"), "http://example.com");
524 // LangFormatが空の場合、nullが返る
525 site.LangFormat = null;
526 Assert.IsNull(site.FormatLang("ja", "日本語テキスト"));
527 site.LangFormat = string.Empty;
528 Assert.IsNull(site.FormatLang("ja", "日本語テキスト"));
530 // 値が設定されている場合、パラメータを埋め込んで書式化される
531 site.LangFormat = "{{Lang|$1|$2}}";
532 Assert.AreEqual("{{Lang|ja|日本語テキスト}}", site.FormatLang("ja", "日本語テキスト"));
533 site.LangFormat = "xxx";
534 Assert.AreEqual("xxx", site.FormatLang("ja", "日本語テキスト"));
537 site.LangFormat = "{{Lang|$1|$2}}";
538 Assert.AreEqual("{{Lang||}}", site.FormatLang(null, null));
543 #region XMLシリアライズ用メソッドテストケース
546 /// XMLデシリアライズテストケース。
549 public void TestReadXml()
553 using (XmlReader r = XmlReader.Create(
554 new StringReader("<MediaWiki><Location>http://ja.wikipedia.org</Location>"
555 + "<Language Code=\"ja\"><Names /></Language></MediaWiki>")))
557 site = new XmlSerializer(typeof(MediaWiki)).Deserialize(r) as MediaWiki;
560 Assert.IsNotNull(site);
561 Assert.AreEqual("http://ja.wikipedia.org", site.Location);
562 Assert.AreEqual("ja", site.Language.Code);
563 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LinkInterwikiFormat));
564 Assert.AreEqual(string.Empty, StringUtils.DefaultString(site.LangFormat));
565 Assert.IsFalse(site.HasLanguagePage);
567 // 下記プロパティは、空の場合デフォルト値が返る
568 // ※ Namespacesは空の場合サーバーからデフォルト値を取得するため、ここではテストしない
569 // ※ InterwikiPrefixsのgetは常にサーバーからも値を取得するため、ここではテストしない
570 Assert.AreEqual("/w/api.php?format=xml&action=query&meta=siteinfo&siprop=namespaces|namespacealiases|interwikimap", site.MetaApi);
571 Assert.AreEqual("/w/api.php?action=query&prop=revisions&titles=$1&redirects&rvprop=timestamp|content&format=xml", site.ContentApi);
572 Assert.AreEqual("/w/api.php?action=query&prop=langlinks&titles=$1&redirects=&lllimit=500&format=xml", site.InterlanguageApi);
573 Assert.AreEqual(10, site.TemplateNamespace);
574 Assert.AreEqual(14, site.CategoryNamespace);
575 Assert.AreEqual(6, site.FileNamespace);
576 Assert.IsTrue(site.MagicWords.Count > 10);
578 // プロパティに値が設定された状態での読み込み
579 using (XmlReader r = XmlReader.Create(new StringReader(TestXml)))
581 site = new XmlSerializer(typeof(MediaWiki)).Deserialize(r) as MediaWiki;
584 // ※ InterwikiPrefixsのgetは常にサーバーからも値を取得するため、ここではテストしない
585 Assert.IsNotNull(site);
586 Assert.AreEqual("http://ja.wikipedia.org", site.Location);
587 Assert.AreEqual("ja", site.Language.Code);
588 Assert.AreEqual("_api.xml", site.MetaApi);
589 Assert.AreEqual("/export/$1", site.ContentApi);
590 Assert.AreEqual("/interlanguage/$1.xml", site.InterlanguageApi);
591 Assert.AreEqual(100, site.TemplateNamespace);
592 Assert.AreEqual(101, site.CategoryNamespace);
593 Assert.AreEqual(200, site.FileNamespace);
594 Assert.AreEqual(2, site.MagicWords.Count);
595 Assert.IsTrue(site.MagicWords.Contains("特別"));
596 Assert.IsTrue(site.MagicWords.Contains("マジックワード"));
597 Assert.AreEqual("{{仮リンク|$1|$2|$3|label=$4}}", site.LinkInterwikiFormat);
598 Assert.AreEqual("{{Lang|$1|$2}}", site.LangFormat);
599 Assert.IsTrue(site.HasLanguagePage);
606 public void TestWriteXml()
608 MediaWiki site = new MediaWiki(new Language("ja"));
610 XmlWriterSettings settings = new XmlWriterSettings();
611 settings.OmitXmlDeclaration = true;
614 // 設定ファイルに初期値を持つプロパティはデフォルト値の場合出力しないという動作あり
615 b = new StringBuilder();
616 using (XmlWriter w = XmlWriter.Create(b, settings))
618 new XmlSerializer(typeof(MediaWiki)).Serialize(w, site);
622 "<MediaWiki><Location>http://ja.wikipedia.org</Location><Language Code=\"ja\"><Names /><Bracket /></Language>"
623 + "<MetaApi /><ContentApi /><InterlanguageApi /><TemplateNamespace /><CategoryNamespace /><FileNamespace />"
624 + "<MagicWords /><InterwikiPrefixs /><LinkInterwikiFormat /><LangFormat />"
625 + "<HasLanguagePage>False</HasLanguagePage></MediaWiki>",
628 // プロパティに値が設定された場合の出力
629 site.MetaApi = "_api.xml";
630 site.ContentApi = "/export/$1";
631 site.InterlanguageApi = "/interlanguage/$1.xml";
632 site.TemplateNamespace = 100;
633 site.CategoryNamespace = 101;
634 site.FileNamespace = 200;
635 site.MagicWords = new HashSet<string>(new string[] { "特別", "マジックワード" });
636 site.InterwikiPrefixs = new IgnoreCaseSet(new string[] { "外部ウィキ", "ニュース" });
637 site.LinkInterwikiFormat = "{{仮リンク|$1|$2|$3|label=$4}}";
638 site.LangFormat = "{{Lang|$1|$2}}";
639 site.HasLanguagePage = true;
641 b = new StringBuilder();
642 using (XmlWriter w = XmlWriter.Create(b, settings))
644 new XmlSerializer(typeof(MediaWiki)).Serialize(w, site);
647 Assert.AreEqual(TestXml, b.ToString());