OSDN Git Service

Wikipedia翻訳支援ツール Ver1.10時点のソース
[wptscs/wpts.git] / WptscsTest / Models / LanguageTest.cs
1 // ================================================================================================
2 // <summary>
3 //      Languageのテストクラスソース。</summary>
4 //
5 // <copyright file="LanguageTest.cs" company="honeplusのメモ帳">
6 //      Copyright (C) 2012 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     /// Languageのテストクラスです。
24     /// </summary>
25     [TestFixture]
26     public class LanguageTest
27     {
28         #region プロパティテストケース
29
30         /// <summary>
31         /// Codeプロパティテストケース。
32         /// </summary>
33         [Test]
34         public void TestCode()
35         {
36             Language lang = new Language("en");
37             Assert.AreEqual("en", lang.Code);
38         }
39
40         /// <summary>
41         /// Codeプロパティテストケース(コードがnull)。
42         /// </summary>
43         [Test]
44         [ExpectedException(typeof(ArgumentNullException))]
45         public void TestCodeNull()
46         {
47             Language lang = new Language(null);
48         }
49
50         /// <summary>
51         /// Codeプロパティテストケース(コードが空)。
52         /// </summary>
53         [Test]
54         [ExpectedException(typeof(ArgumentException))]
55         public void TestCodeBlank()
56         {
57             Language lang = new Language(" ");
58         }
59
60         /// <summary>
61         /// Namesプロパティテストケース。
62         /// </summary>
63         [Test]
64         public void TestNames()
65         {
66             Language lang = new Language("en");
67
68             // 初期状態で空のディクショナリーを作成
69             Assert.NotNull(lang.Names);
70             Assert.AreEqual(0, lang.Names.Count);
71
72             Language.LanguageName name = new Language.LanguageName { Name = "テスト", ShortName = "テ" };
73             lang.Names.Add("ja", name);
74             Assert.IsTrue(lang.Names.ContainsKey("ja"));
75             Assert.AreEqual(name, lang.Names["ja"]);
76             Assert.IsFalse(lang.Names.ContainsKey("en"));
77         }
78
79         /// <summary>
80         /// Namesプロパティテストケース(オブジェクトがnull)。
81         /// </summary>
82         [Test]
83         [ExpectedException(typeof(ArgumentNullException))]
84         public void TestNamesNull()
85         {
86             new Language("en").Names = null;
87         }
88
89         /// <summary>
90         /// Bracketプロパティテストケース。
91         /// </summary>
92         [Test]
93         public void TestBracket()
94         {
95             Language lang = new Language("en");
96
97             // 設定ファイルからデフォルト値が設定されていること
98             Assert.AreEqual(" ($1) ", lang.Bracket);
99
100             // 設定後はそちらが有効になること
101             lang.Bracket = "test";
102             Assert.AreEqual("test", lang.Bracket);
103
104             // 消すとデフォルトが有効になること
105             lang.Bracket = null;
106             Assert.AreEqual(" ($1) ", lang.Bracket);
107             lang.Bracket = "";
108             Assert.AreEqual(" ($1) ", lang.Bracket);
109         }
110
111         #endregion
112
113         #region 公開メソッドテストケース
114
115         /// <summary>
116         /// FormatLinkInterwikiメソッドテストケース。
117         /// </summary>
118         [Test]
119         public void TestFormatLinkInterwiki()
120         {
121             Language lang = new Language("en");
122
123             // パラメータを埋め込んで書式化される
124             Assert.AreEqual(" (値1) ", lang.FormatBracket("値1"));
125             lang.Bracket = " {$1} ";
126             Assert.AreEqual(" {値2} ", lang.FormatBracket("値2"));
127             lang.Bracket = "xxx";
128             Assert.AreEqual("xxx", lang.FormatBracket("値3"));
129
130             // 値がnull等でも特に制限はない
131             lang.Bracket = null;
132             Assert.AreEqual(" () ", lang.FormatBracket(null));
133         }
134
135         #endregion
136
137         #region XMLシリアライズ用メソッドテストケース
138
139         /// <summary>
140         /// XMLデシリアライズテストケース。
141         /// </summary>
142         [Test]
143         public void TestReadXml()
144         {
145             Language lang;
146             using (XmlReader r = XmlReader.Create(
147                 new StringReader("<Language Code=\"ja\"><Names>"
148                     + "<LanguageName Code=\"en\"><Name>Japanese language</Name><ShortName>Japanese</ShortName></LanguageName>"
149                     + "<LanguageName Code=\"zh\"><Name>日语</Name><ShortName /></LanguageName>"
150                     + "</Names><Bracket>({0})</Bracket></Language>")))
151             {
152                 lang = new XmlSerializer(typeof(Language)).Deserialize(r) as Language;
153             }
154             Assert.IsNotNull(lang);
155             Assert.AreEqual("ja", lang.Code);
156             Assert.AreEqual("Japanese language", lang.Names["en"].Name);
157             Assert.AreEqual("Japanese", lang.Names["en"].ShortName);
158             Assert.AreEqual("日语", lang.Names["zh"].Name);
159             Assert.IsEmpty(lang.Names["zh"].ShortName);
160             Assert.IsFalse(lang.Names.ContainsKey("ja"));
161             Assert.AreEqual("({0})", lang.Bracket);
162         }
163
164         /// <summary>
165         /// XMLシリアライズテストケース。
166         /// </summary>
167         [Test]
168         public void TestWriteXml()
169         {
170             Language lang = new Language("ja");
171             XmlWriterSettings settings = new XmlWriterSettings();
172             settings.OmitXmlDeclaration = true;
173
174             StringBuilder b = new StringBuilder();
175             using (XmlWriter w = XmlWriter.Create(b, settings))
176             {
177                 new XmlSerializer(typeof(Language)).Serialize(w, lang);
178             }
179
180             Assert.AreEqual("<Language Code=\"ja\"><Names /><Bracket /></Language>", b.ToString());
181
182             lang.Names.Add("en", new Language.LanguageName { Name = "Japanese language", ShortName = "Japanese" });
183             lang.Names.Add("zh", new Language.LanguageName { Name = "日语" });
184             lang.Bracket = "({0})";
185
186             StringBuilder b2 = new StringBuilder();
187             using (XmlWriter w = XmlWriter.Create(b2, settings))
188             {
189                 new XmlSerializer(typeof(Language)).Serialize(w, lang);
190             }
191
192             Assert.AreEqual("<Language Code=\"ja\"><Names>"
193                     + "<LanguageName Code=\"en\"><Name>Japanese language</Name><ShortName>Japanese</ShortName></LanguageName>"
194                     + "<LanguageName Code=\"zh\"><Name>日语</Name><ShortName /></LanguageName>"
195                     + "</Names><Bracket>({0})</Bracket></Language>", b2.ToString());
196         }
197
198         #endregion
199     }
200 }