|
| 1 | +using System; |
1 | 2 | using System.Text; |
2 | 3 | using Xunit; |
3 | 4 |
|
4 | 5 | namespace Unidecode.NET.Tests |
5 | 6 | { |
6 | | - public class UnidecoderTest |
| 7 | + public class UnidecoderTest |
| 8 | + { |
| 9 | + [Fact] |
| 10 | + public void DocTest() |
7 | 11 | { |
8 | | - [Fact] |
9 | | - public void DocTest() |
10 | | - { |
11 | | - Assert.Equal("Bei Jing ", "\u5317\u4EB0".Unidecode()); |
12 | | - } |
13 | | - |
14 | | - [Fact] |
15 | | - public void CustomTest() |
16 | | - { |
17 | | - Assert.Equal("Rabota s kirillitsei", "Работа с кириллицей".Unidecode()); |
18 | | - Assert.Equal("aouoAOUO", "äöűőÄÖŨŐ".Unidecode()); |
19 | | - } |
| 12 | + Assert.Equal("Bei Jing ", "\u5317\u4EB0".Unidecode()); |
| 13 | + } |
20 | 14 |
|
21 | 15 | [Fact] |
22 | | - public void Performancetest() |
| 16 | + public void CustomTest() |
23 | 17 | { |
24 | | - for (int i = 0; i < 1000000; i++) |
25 | | - { |
26 | | - var converted = "Работа с кириллицей".Unidecode(); |
27 | | - } |
28 | | - Assert.True(true); |
| 18 | + Assert.Equal("Rabota s kirillitsei", "Работа с кириллицей".Unidecode()); |
| 19 | + Assert.Equal("aouoAOUO", "äöűőÄÖŨŐ".Unidecode()); |
29 | 20 | } |
30 | 21 |
|
31 | 22 |
|
| 23 | + |
32 | 24 | [Fact] |
33 | | - public void PythonTest() |
34 | | - { |
35 | | - Assert.Equal("Hello, World!", "Hello, World!".Unidecode()); |
36 | | - Assert.Equal("'\"\r\n", "'\"\r\n".Unidecode()); |
37 | | - Assert.Equal("CZSczs", "ČŽŠčžš".Unidecode()); |
38 | | - Assert.Equal("a", "ア".Unidecode()); |
39 | | - Assert.Equal("a", "α".Unidecode()); |
40 | | - Assert.Equal("a", "а".Unidecode()); |
41 | | - Assert.Equal("chateau", "ch\u00e2teau".Unidecode()); |
42 | | - Assert.Equal("vinedos", "vi\u00f1edos".Unidecode()); |
43 | | - } |
44 | | - |
45 | | - [Fact] |
46 | | - public void RussianAlphabetTest() |
47 | | - { |
48 | | - const string russianAlphabetLowercase = "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я"; |
49 | | - const string russianAlphabetUppercase = "А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я"; |
| 25 | + public void PythonTest() |
| 26 | + { |
| 27 | + Assert.Equal("Hello, World!", "Hello, World!".Unidecode()); |
| 28 | + Assert.Equal("'\"\r\n", "'\"\r\n".Unidecode()); |
| 29 | + Assert.Equal("CZSczs", "ČŽŠčžš".Unidecode()); |
| 30 | + Assert.Equal("a", "ア".Unidecode()); |
| 31 | + Assert.Equal("a", "α".Unidecode()); |
| 32 | + Assert.Equal("a", "а".Unidecode()); |
| 33 | + Assert.Equal("chateau", "ch\u00e2teau".Unidecode()); |
| 34 | + Assert.Equal("vinedos", "vi\u00f1edos".Unidecode()); |
| 35 | + } |
50 | 36 |
|
51 | | - const string expectedLowercase = "a b v g d e io zh z i i k l m n o p r s t u f kh ts ch sh shch ' y ' e iu ia"; |
52 | | - const string expectedUppercase = "A B V G D E Io Zh Z I I K L M N O P R S T U F Kh Ts Ch Sh Shch ' Y ' E Iu Ia"; |
| 37 | + [Fact] |
| 38 | + public void RussianAlphabetTest() |
| 39 | + { |
| 40 | + const string russianAlphabetLowercase = "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я"; |
| 41 | + const string russianAlphabetUppercase = "А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я"; |
53 | 42 |
|
54 | | - Assert.Equal(expectedLowercase, russianAlphabetLowercase.Unidecode()); |
55 | | - Assert.Equal(expectedUppercase, russianAlphabetUppercase.Unidecode()); |
56 | | - } |
| 43 | + const string expectedLowercase = "a b v g d e io zh z i i k l m n o p r s t u f kh ts ch sh shch ' y ' e iu ia"; |
| 44 | + const string expectedUppercase = "A B V G D E Io Zh Z I I K L M N O P R S T U F Kh Ts Ch Sh Shch ' Y ' E Iu Ia"; |
57 | 45 |
|
58 | | - [Fact] |
59 | | - public void CharUnidecodeTest() |
60 | | - { |
61 | | - const string input = "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я"; |
62 | | - const string expected = "a b v g d e io zh z i i k l m n o p r s t u f kh ts ch sh shch ' y ' e iu ia A B V G D E Io Zh Z I I K L M N O P R S T U F Kh Ts Ch Sh Shch ' Y ' E Iu Ia"; |
| 46 | + Assert.Equal(expectedLowercase, russianAlphabetLowercase.Unidecode()); |
| 47 | + Assert.Equal(expectedUppercase, russianAlphabetUppercase.Unidecode()); |
| 48 | + } |
| 49 | + |
| 50 | + [Fact] |
| 51 | + public void CharUnidecodeTest() |
| 52 | + { |
| 53 | + const string input = "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я"; |
| 54 | + const string expected = "a b v g d e io zh z i i k l m n o p r s t u f kh ts ch sh shch ' y ' e iu ia A B V G D E Io Zh Z I I K L M N O P R S T U F Kh Ts Ch Sh Shch ' Y ' E Iu Ia"; |
63 | 55 |
|
64 | | - var sb = new StringBuilder(expected.Length); |
65 | | - foreach (var c in input) |
66 | | - sb.Append(c.Unidecode()); |
67 | | - |
68 | | - var result = sb.ToString(); |
| 56 | + var sb = new StringBuilder(expected.Length); |
| 57 | + foreach (var c in input) |
| 58 | + sb.Append(c.Unidecode()); |
69 | 59 |
|
70 | | - Assert.Equal(expected, result); |
71 | | - } |
| 60 | + var result = sb.ToString(); |
| 61 | + |
| 62 | + Assert.Equal(expected, result); |
| 63 | + } |
72 | 64 |
|
73 | 65 |
|
74 | 66 | [Fact] |
75 | | - public void GermanAlphabetTest() |
76 | | - { |
77 | | - const string input = "a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ä ö ü ß Ä Ö Ü ẞ"; |
78 | | - const string expected = "a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a o u ss A O U Ss"; |
| 67 | + public void GermanAlphabetTest() |
| 68 | + { |
| 69 | + const string input = "a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ä ö ü ß Ä Ö Ü ẞ"; |
| 70 | + const string expected = "a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a o u ss A O U Ss"; |
79 | 71 |
|
80 | | - var sb = new StringBuilder(expected.Length); |
81 | | - foreach (var c in input) |
82 | | - sb.Append(c.Unidecode()); |
83 | | - |
84 | | - var result = sb.ToString(); |
| 72 | + var sb = new StringBuilder(expected.Length); |
| 73 | + foreach (var c in input) |
| 74 | + sb.Append(c.Unidecode()); |
85 | 75 |
|
86 | | - Assert.Equal(expected, result); |
87 | | - } |
| 76 | + var result = sb.ToString(); |
| 77 | + |
| 78 | + Assert.Equal(expected, result); |
| 79 | + } |
| 80 | + |
| 81 | + [Fact] |
| 82 | + public void UnidecodeOnNullShouldReturnEmptyString() |
| 83 | + { |
| 84 | + Assert.Equal("", ((string)null).Unidecode()); |
| 85 | + } |
88 | 86 |
|
89 | | - [Fact] |
90 | | - public void UnidecodeOnNullShouldReturnEmptyString() |
| 87 | + /// <summary> |
| 88 | + /// Test that code points with the maximum low byte of 255 do not |
| 89 | + /// cause an IndexOutOfRangeException (see commit: acd8fb4) |
| 90 | + /// </summary> |
| 91 | + [Fact] |
| 92 | + public void MaximumLowByteTest() |
| 93 | + { |
| 94 | + byte low = 0xFF; |
| 95 | + for (var high = (char)0; high <= byte.MaxValue; high++) |
| 96 | + { |
| 97 | + var codePoint = (char)((high << 8) | low); |
| 98 | + try |
91 | 99 | { |
92 | | - Assert.Equal("", ((string)null).Unidecode()); |
| 100 | + codePoint.Unidecode(); |
93 | 101 | } |
94 | | - |
95 | | - /// <summary> |
96 | | - /// Test that code points with the maximum low byte of 255 do not |
97 | | - /// cause an IndexOutOfRangeException (see commit: acd8fb4) |
98 | | - /// </summary> |
99 | | - [Fact] |
100 | | - public void MaximumLowByteTest() |
| 102 | + catch (System.IndexOutOfRangeException) |
101 | 103 | { |
102 | | - byte low = 0xFF; |
103 | | - for (var high = (char)0; high <= byte.MaxValue; high++) |
104 | | - { |
105 | | - var codePoint = (char)((high << 8) | low); |
106 | | - try |
107 | | - { |
108 | | - codePoint.Unidecode(); |
109 | | - } |
110 | | - catch (System.IndexOutOfRangeException) |
111 | | - { |
112 | | - Assert.True(false); |
113 | | - } |
114 | | - } |
| 104 | + Assert.True(false); |
115 | 105 | } |
| 106 | + } |
| 107 | + } |
| 108 | + |
| 109 | + /// <summary> |
| 110 | + /// Tests that Unidecode "stackAlloc" optimized implementation falls back to the slowest SlowUnidecode implementation for long strings, |
| 111 | + /// instead of raising an error |
| 112 | + /// </summary> |
| 113 | + [Fact] |
| 114 | + public void SlowUnidecodeIsCalledForLongStrings() |
| 115 | + { |
| 116 | + var srcBuilder = new StringBuilder(); |
| 117 | + var expectedBuilder = new StringBuilder(); |
| 118 | + for (int i = 0; i < 100; i++) |
| 119 | + { |
| 120 | + srcBuilder.Append("а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я"); |
| 121 | + expectedBuilder.Append("a b v g d e io zh z i i k l m n o p r s t u f kh ts ch sh shch ' y ' e iu ia A B V G D E Io Zh Z I I K L M N O P R S T U F Kh Ts Ch Sh Shch ' Y ' E Iu Ia"); |
| 122 | + } |
| 123 | + var src = srcBuilder.ToString(); |
| 124 | + var expected = expectedBuilder.ToString(); |
| 125 | + var result = src.Unidecode(); |
| 126 | + Assert.Equal(expected, result); |
| 127 | + |
| 128 | + } |
116 | 129 | } |
117 | 130 | } |
0 commit comments