OSDN Git Service

svnプロパティをファイルの種類に応じたものに更新
[wptscs/wpts.git] / WptscsTest / Models / LanguageTest.cs
1 // ================================================================================================
2 // <summary>
3 //      Languageのテストクラスソース。</summary>
4 //
5 // <copyright file="LanguageTest.cs" company="honeplusのメモ帳">
6 //      Copyright (C) 2010 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(" ({0}) ", lang.Bracket);
99
100             // 設定後はそちらが有効になること
101             lang.Bracket = "test";
102             Assert.AreEqual("test", lang.Bracket);
103
104             // 消すとデフォルトが有効になること
105             lang.Bracket = null;
106             Assert.AreEqual(" ({0}) ", lang.Bracket);
107             lang.Bracket = "";
108             Assert.AreEqual(" ({0}) ", lang.Bracket);
109         }
110
111         #endregion
112
113         #region XMLシリアライズ用メソッドテストケース
114
115         /// <summary>
116         /// XMLデシリアライズテストケース。
117         /// </summary>
118         [Test]
119         public void TestReadXml()
120         {
121             Language lang;
122             using (XmlReader r = XmlReader.Create(
123                 new StringReader("<Language Code=\"ja\"><Names>"
124                     + "<LanguageName Code=\"en\"><Name>Japanese language</Name><ShortName>Japanese</ShortName></LanguageName>"
125                     + "<LanguageName Code=\"zh\"><Name>日语</Name><ShortName /></LanguageName>"
126                     + "</Names><Bracket>({0})</Bracket></Language>")))
127             {
128                 lang = new XmlSerializer(typeof(Language)).Deserialize(r) as Language;
129             }
130             Assert.IsNotNull(lang);
131             Assert.AreEqual("ja", lang.Code);
132             Assert.AreEqual("Japanese language", lang.Names["en"].Name);
133             Assert.AreEqual("Japanese", lang.Names["en"].ShortName);
134             Assert.AreEqual("日语", lang.Names["zh"].Name);
135             Assert.IsEmpty(lang.Names["zh"].ShortName);
136             Assert.IsFalse(lang.Names.ContainsKey("ja"));
137             Assert.AreEqual("({0})", lang.Bracket);
138         }
139
140         /// <summary>
141         /// XMLシリアライズテストケース。
142         /// </summary>
143         [Test]
144         public void TestWriteXml()
145         {
146             Language lang = new Language("ja");
147             XmlWriterSettings settings = new XmlWriterSettings();
148             settings.OmitXmlDeclaration = true;
149
150             StringBuilder b = new StringBuilder();
151             using (XmlWriter w = XmlWriter.Create(b, settings))
152             {
153                 new XmlSerializer(typeof(Language)).Serialize(w, lang);
154             }
155
156             Assert.AreEqual("<Language Code=\"ja\"><Names /><Bracket /></Language>", b.ToString());
157
158             lang.Names.Add("en", new Language.LanguageName { Name = "Japanese language", ShortName = "Japanese" });
159             lang.Names.Add("zh", new Language.LanguageName { Name = "日语" });
160             lang.Bracket = "({0})";
161
162             StringBuilder b2 = new StringBuilder();
163             using (XmlWriter w = XmlWriter.Create(b2, settings))
164             {
165                 new XmlSerializer(typeof(Language)).Serialize(w, lang);
166             }
167
168             Assert.AreEqual("<Language Code=\"ja\"><Names>"
169                     + "<LanguageName Code=\"en\"><Name>Japanese language</Name><ShortName>Japanese</ShortName></LanguageName>"
170                     + "<LanguageName Code=\"zh\"><Name>日语</Name><ShortName /></LanguageName>"
171                     + "</Names><Bracket>({0})</Bracket></Language>", b2.ToString());
172         }
173
174         #endregion
175     }
176 }