OSDN Git Service

Ver1.32のインストーラ用の値を更新, WiX 3.11 + Win10環境でビルドできるよう設定
[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 Honememo.Utilities;
20     using Microsoft.VisualStudio.TestTools.UnitTesting;
21
22     /// <summary>
23     /// <see cref="Language"/>のテストクラスです。
24     /// </summary>
25     [TestClass]
26     public class LanguageTest
27     {
28         #region プロパティテストケース
29
30         /// <summary>
31         /// Codeプロパティテストケース。
32         /// </summary>
33         [TestMethod]
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         [TestMethod]
44         [ExpectedException(typeof(ArgumentNullException))]
45         public void TestCodeNull()
46         {
47             Language lang = new Language(null);
48         }
49
50         /// <summary>
51         /// Codeプロパティテストケース(コードが空)。
52         /// </summary>
53         [TestMethod]
54         [ExpectedException(typeof(ArgumentException))]
55         public void TestCodeBlank()
56         {
57             Language lang = new Language(" ");
58         }
59
60         /// <summary>
61         /// Namesプロパティテストケース。
62         /// </summary>
63         [TestMethod]
64         public void TestNames()
65         {
66             Language lang = new Language("en");
67
68             // 初期状態で空のディクショナリーを作成
69             Assert.IsNotNull(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         [TestMethod]
83         [ExpectedException(typeof(ArgumentNullException))]
84         public void TestNamesNull()
85         {
86             new Language("en").Names = null;
87         }
88
89         /// <summary>
90         /// Bracketプロパティテストケース。
91         /// </summary>
92         [TestMethod]
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 = string.Empty;
108             Assert.AreEqual(" ($1) ", lang.Bracket);
109         }
110
111         #endregion
112
113         #region 公開メソッドテストケース
114
115         /// <summary>
116         /// FormatLinkInterwikiメソッドテストケース。
117         /// </summary>
118         [TestMethod]
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         [TestMethod]
143         public void TestReadXml()
144         {
145             Language lang;
146             using (XmlReader r = XmlReader.Create(
147                 new StringReader(
148                     "<Language Code=\"ja\"><Names>"
149                     + "<LanguageName Code=\"en\"><Name>Japanese language</Name><ShortName>Japanese</ShortName></LanguageName>"
150                     + "<LanguageName Code=\"zh\"><Name>日语</Name><ShortName /></LanguageName>"
151                     + "</Names><Bracket>({0})</Bracket></Language>")))
152             {
153                 lang = new XmlSerializer(typeof(Language)).Deserialize(r) as Language;
154             }
155
156             Assert.IsNotNull(lang);
157             Assert.AreEqual("ja", lang.Code);
158             Assert.AreEqual("Japanese language", lang.Names["en"].Name);
159             Assert.AreEqual("Japanese", lang.Names["en"].ShortName);
160             Assert.AreEqual("日语", lang.Names["zh"].Name);
161             Assert.AreEqual(string.Empty, lang.Names["zh"].ShortName);
162             Assert.IsFalse(lang.Names.ContainsKey("ja"));
163             Assert.AreEqual("({0})", lang.Bracket);
164         }
165
166         /// <summary>
167         /// XMLシリアライズテストケース。
168         /// </summary>
169         [TestMethod]
170         public void TestWriteXml()
171         {
172             Language lang = new Language("ja");
173             XmlWriterSettings settings = new XmlWriterSettings();
174             settings.OmitXmlDeclaration = true;
175
176             StringBuilder b = new StringBuilder();
177             using (XmlWriter w = XmlWriter.Create(b, settings))
178             {
179                 new XmlSerializer(typeof(Language)).Serialize(w, lang);
180             }
181
182             Assert.AreEqual("<Language Code=\"ja\"><Names /><Bracket /></Language>", b.ToString());
183
184             lang.Names.Add("en", new Language.LanguageName { Name = "Japanese language", ShortName = "Japanese" });
185             lang.Names.Add("zh", new Language.LanguageName { Name = "日语" });
186             lang.Bracket = "({0})";
187
188             StringBuilder b2 = new StringBuilder();
189             using (XmlWriter w = XmlWriter.Create(b2, settings))
190             {
191                 new XmlSerializer(typeof(Language)).Serialize(w, lang);
192             }
193
194             Assert.AreEqual(
195                 "<Language Code=\"ja\"><Names>"
196                 + "<LanguageName Code=\"en\"><Name>Japanese language</Name><ShortName>Japanese</ShortName></LanguageName>"
197                 + "<LanguageName Code=\"zh\"><Name>日语</Name><ShortName /></LanguageName>"
198                 + "</Names><Bracket>({0})</Bracket></Language>",
199                 b2.ToString());
200         }
201
202         #endregion
203     }
204 }