1 // ================================================================================================
3 // StringUtilsのテストクラスソース。</summary>
5 // <copyright file="StringUtilsTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Utilities
15 using NUnit.Framework;
18 /// StringUtilsのテストクラスです。
21 public class StringUtilsTest
26 /// DefaultStringメソッドテストケース。
29 public void TestDefaultString()
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以外の文字列"));
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以外の文字列", "初期値"));
46 #region 切り出しメソッドテストケース
49 /// Substringメソッドテストケース。
52 public void TestSubstring()
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));
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));
83 /// StartsWithメソッドテストケース。
86 public void TestStartsWith()
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));
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));
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));
108 /// StartsWithメソッドテストケース(性能試験)。
110 [Test, Timeout(1500)]
111 public void TestStartsWithResponse()
113 // テストデータとして適当な、ただしある文字が定期的に出現する長い文字列を生成
114 StringBuilder b = new StringBuilder();
115 int span = 0x7D - 0x20;
116 for (int i = 0; i < 100000; i++)
118 b.Append(Char.ConvertFromUtf32((i % span) + 0x20));
121 // 先頭から最後までひたすら実行して時間がかかりすぎないかをチェック
122 string s = b.ToString();
123 for (int i = 0; i < s.Length; i++)
125 StringUtils.StartsWith(s, "a", i);
131 #region 書式化メソッドテストケース
134 /// FormatDollarVariableメソッドテストケース。
137 public void TestFormatDollarVariable()
140 Assert.IsEmpty(StringUtils.FormatDollarVariable(String.Empty));
141 Assert.IsEmpty(StringUtils.FormatDollarVariable(String.Empty, String.Empty));
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));
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));
154 /// FormatDollarVariableメソッドテストケース(書式がnull)。
157 [ExpectedException(typeof(ArgumentNullException))]
158 public void TestFormatDollarVariableFormatNull()
160 StringUtils.FormatDollarVariable(null);
164 /// FormatDollarVariableメソッドテストケース(パラメータがnull)。
167 [ExpectedException(typeof(ArgumentNullException))]
168 public void TestFormatDollarVariableArgsNull()
170 StringUtils.FormatDollarVariable(String.Empty, null);
178 /// CompareNullsLastメソッドテストケース。
181 public void TestCompareNullsLast()
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));
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"));
198 // nullと空の場合nullの方が大きいと判定
199 Assert.AreEqual(1, StringUtils.CompareNullsLast(null, String.Empty));
200 Assert.AreEqual(-1, StringUtils.CompareNullsLast(String.Empty, null));