OSDN Git Service

設定画面の画面表示の不具合を修正,
[wptscs/wpts.git] / HmLibTest / Utilities / StringUtilsTest.cs
1 // ================================================================================================
2 // <summary>
3 //      StringUtilsのテストクラスソース。</summary>
4 //
5 // <copyright file="StringUtilsTest.cs" company="honeplusのメモ帳">
6 //      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
7 // <author>
8 //      Honeplus</author>
9 // ================================================================================================
10
11 namespace Honememo.Utilities
12 {
13     using System;
14     using System.Text;
15     using NUnit.Framework;
16
17     /// <summary>
18     /// StringUtilsのテストクラスです。
19     /// </summary>
20     [TestFixture]
21     public class StringUtilsTest
22     {
23         #region 初期化メソッドテストケース
24
25         /// <summary>
26         /// DefaultStringメソッドテストケース。
27         /// </summary>
28         [Test]
29         public void TestDefaultString()
30         {
31             // 引数一つ
32             Assert.IsEmpty(StringUtils.DefaultString(null));
33             Assert.IsEmpty(StringUtils.DefaultString(String.Empty));
34             Assert.AreEqual(" ", StringUtils.DefaultString(" "));
35             Assert.AreEqual("null以外の文字列", StringUtils.DefaultString("null以外の文字列"));
36
37             // 引数二つ
38             Assert.AreEqual("初期値", StringUtils.DefaultString(null, "初期値"));
39             Assert.IsEmpty(StringUtils.DefaultString(String.Empty, "初期値"));
40             Assert.AreEqual(" ", StringUtils.DefaultString(" ", "初期値"));
41             Assert.AreEqual("null以外の文字列", StringUtils.DefaultString("null以外の文字列", "初期値"));
42         }
43
44         #endregion
45
46         #region 切り出しメソッドテストケース
47
48         /// <summary>
49         /// Substringメソッドテストケース。
50         /// </summary>
51         [Test]
52         public void TestSubstring()
53         {
54             // 引数一つ
55             Assert.IsNull(StringUtils.Substring(null, 0));
56             Assert.AreEqual("abc", StringUtils.Substring("abc", 0));
57             Assert.AreEqual("c", StringUtils.Substring("abc", 2));
58             Assert.IsEmpty(StringUtils.Substring("abc", 4));
59             Assert.AreEqual("abc", StringUtils.Substring("abc", -2));
60             Assert.AreEqual("abc", StringUtils.Substring("abc", -4));
61             Assert.AreEqual("3", StringUtils.Substring("0123", 3));
62             Assert.IsEmpty(StringUtils.Substring("0123", 4));
63
64             // 引数二つ
65             Assert.IsNull(StringUtils.Substring(null, 0, 0));
66             Assert.IsEmpty(StringUtils.Substring(String.Empty, 0, 1));
67             Assert.AreEqual("ab", StringUtils.Substring("abc", 0, 2));
68             Assert.IsEmpty(StringUtils.Substring("abc", 2, 0));
69             Assert.AreEqual("c", StringUtils.Substring("abc", 2, 2));
70             Assert.IsEmpty(StringUtils.Substring("abc", 4, 2));
71             Assert.IsEmpty(StringUtils.Substring("abc", -2, -1));
72             Assert.AreEqual("ab", StringUtils.Substring("abc", -4, 2));
73             Assert.AreEqual("3", StringUtils.Substring("0123", 3, 1));
74             Assert.AreEqual("3", StringUtils.Substring("0123", 3, 2));
75             Assert.IsEmpty(StringUtils.Substring("0123", 4, 1));
76         }
77
78         #endregion
79
80         #region 文字列チェックテストケース
81
82         /// <summary>
83         /// StartsWithメソッドテストケース。
84         /// </summary>
85         [Test]
86         public void TestStartsWith()
87         {
88             // null
89             Assert.IsTrue(StringUtils.StartsWith(null, null, 3));
90             Assert.IsFalse(StringUtils.StartsWith(null, String.Empty, 2));
91             Assert.IsFalse(StringUtils.StartsWith(String.Empty, null, 5));
92
93             // 空、文字数
94             Assert.IsFalse(StringUtils.StartsWith(String.Empty, String.Empty, 0));
95             Assert.IsTrue(StringUtils.StartsWith("a", String.Empty, 0));
96             Assert.IsTrue(StringUtils.StartsWith("abcedf0123あいうえお", String.Empty, 14));
97             Assert.IsFalse(StringUtils.StartsWith("abcedf0123あいうえお", String.Empty, 15));
98             Assert.IsFalse(StringUtils.StartsWith("abcedf0123あいうえお", String.Empty, -1));
99
100             // 通常
101             Assert.IsTrue(StringUtils.StartsWith("abcedf0123あいうえお", "bc", 1));
102             Assert.IsFalse(StringUtils.StartsWith("abcedf0123あいうえお", "ab", 1));
103             Assert.IsTrue(StringUtils.StartsWith("abcedf0123あいうえお", "あいうえお", 10));
104             Assert.IsFalse(StringUtils.StartsWith("abcedf0123あいうえお", "あいうえおか", 10));
105         }
106
107         /// <summary>
108         /// StartsWithメソッドテストケース(性能試験)。
109         /// </summary>
110         [Test, Timeout(1500)]
111         public void TestStartsWithResponse()
112         {
113             // テストデータとして適当な、ただしある文字が定期的に出現する長い文字列を生成
114             StringBuilder b = new StringBuilder();
115             int span = 0x7D - 0x20;
116             for (int i = 0; i < 100000; i++)
117             {
118                 b.Append(Char.ConvertFromUtf32((i % span) + 0x20));
119             }
120
121             // 先頭から最後までひたすら実行して時間がかかりすぎないかをチェック
122             string s = b.ToString();
123             for (int i = 0; i < s.Length; i++)
124             {
125                 StringUtils.StartsWith(s, "a", i);
126             }
127         }
128
129         #endregion
130
131         #region 書式化メソッドテストケース
132
133         /// <summary>
134         /// FormatDollarVariableメソッドテストケース。
135         /// </summary>
136         [Test]
137         public void TestFormatDollarVariable()
138         {
139             // 空文字列
140             Assert.IsEmpty(StringUtils.FormatDollarVariable(String.Empty));
141             Assert.IsEmpty(StringUtils.FormatDollarVariable(String.Empty, String.Empty));
142
143             // 通常
144             Assert.AreEqual("test", StringUtils.FormatDollarVariable("test"));
145             Assert.AreEqual("testtest", StringUtils.FormatDollarVariable("test$1test"));
146             Assert.AreEqual("test15test", StringUtils.FormatDollarVariable("test$1test", 15));
147             Assert.AreEqual("testtest", StringUtils.FormatDollarVariable("test$2test", 15));
148             Assert.AreEqual(
149                 "int[] value = {30, {0}, 10000};\nstring[] = {\"文字列$1\", \"12.345\"};\n",
150                 StringUtils.FormatDollarVariable("int[] value = {$1, $2, $3};\nstring[] = {\"$4\", \"$5\"};\n", 30, "{0}", 10000, "文字列$1", 12.345));
151         }
152
153         /// <summary>
154         /// FormatDollarVariableメソッドテストケース(書式がnull)。
155         /// </summary>
156         [Test]
157         [ExpectedException(typeof(ArgumentNullException))]
158         public void TestFormatDollarVariableFormatNull()
159         {
160             StringUtils.FormatDollarVariable(null);
161         }
162
163         /// <summary>
164         /// FormatDollarVariableメソッドテストケース(パラメータがnull)。
165         /// </summary>
166         [Test]
167         [ExpectedException(typeof(ArgumentNullException))]
168         public void TestFormatDollarVariableArgsNull()
169         {
170             StringUtils.FormatDollarVariable(String.Empty, null);
171         }
172
173         #endregion
174
175         #region 比較メソッドテストケース
176
177         /// <summary>
178         /// CompareNullsLastメソッドテストケース。
179         /// </summary>
180         [Test]
181         public void TestCompareNullsLast()
182         {
183             // 通常のString.Compareと同じ動作
184             Assert.AreEqual(-1, StringUtils.CompareNullsLast("abc", "abd"));
185             Assert.AreEqual(1, StringUtils.CompareNullsLast("abd", "abc"));
186             Assert.AreEqual(0, StringUtils.CompareNullsLast("abc", "abc"));
187             Assert.AreEqual(-1, StringUtils.CompareNullsLast("ab", "abc"));
188             Assert.AreEqual(1, StringUtils.CompareNullsLast("abc", "ab"));
189             Assert.AreEqual(0, StringUtils.CompareNullsLast(null, null));
190             Assert.AreEqual(0, StringUtils.CompareNullsLast(String.Empty, String.Empty));
191
192             // 独自の拡張部分、nullや空の値が大きいと判断される
193             Assert.AreEqual(-1, StringUtils.CompareNullsLast("abc", null));
194             Assert.AreEqual(1, StringUtils.CompareNullsLast(null, "abc"));
195             Assert.AreEqual(-1, StringUtils.CompareNullsLast("abc", String.Empty));
196             Assert.AreEqual(1, StringUtils.CompareNullsLast(String.Empty, "abc"));
197
198             // nullと空の場合nullの方が大きいと判定
199             Assert.AreEqual(1, StringUtils.CompareNullsLast(null, String.Empty));
200             Assert.AreEqual(-1, StringUtils.CompareNullsLast(String.Empty, null));
201         }
202
203         #endregion
204     }
205 }