@@ -4,131 +4,77 @@ const assert = require('assert');
4
4
5
5
// Testing api calls for string
6
6
const test_string = require ( `./build/${ common . buildType } /test_string` ) ;
7
+ // The insufficient buffer test case allocates a buffer of size 4, including
8
+ // the null terminator.
9
+ const kInsufficientIdx = 3 ;
7
10
8
- const empty = '' ;
9
- assert . strictEqual ( test_string . TestLatin1 ( empty ) , empty ) ;
10
- assert . strictEqual ( test_string . TestUtf8 ( empty ) , empty ) ;
11
- assert . strictEqual ( test_string . TestUtf16 ( empty ) , empty ) ;
12
- assert . strictEqual ( test_string . TestLatin1AutoLength ( empty ) , empty ) ;
13
- assert . strictEqual ( test_string . TestUtf8AutoLength ( empty ) , empty ) ;
14
- assert . strictEqual ( test_string . TestUtf16AutoLength ( empty ) , empty ) ;
15
- assert . strictEqual ( test_string . TestLatin1External ( empty ) , empty ) ;
16
- assert . strictEqual ( test_string . TestUtf16External ( empty ) , empty ) ;
17
- assert . strictEqual ( test_string . TestLatin1ExternalAutoLength ( empty ) , empty ) ;
18
- assert . strictEqual ( test_string . TestUtf16ExternalAutoLength ( empty ) , empty ) ;
19
- assert . strictEqual ( test_string . TestPropertyKeyUtf16 ( empty ) , empty ) ;
20
- assert . strictEqual ( test_string . TestPropertyKeyUtf16AutoLength ( empty ) , empty ) ;
21
- assert . strictEqual ( test_string . Utf16Length ( empty ) , 0 ) ;
22
- assert . strictEqual ( test_string . Utf8Length ( empty ) , 0 ) ;
11
+ const asciiCases = [
12
+ '' ,
13
+ 'hello world' ,
14
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ,
15
+ '?!@#$%^&*()_+-=[]{}/.,<>\'"\\' ,
16
+ ] ;
23
17
24
- const str1 = 'hello world' ;
25
- assert . strictEqual ( test_string . TestLatin1 ( str1 ) , str1 ) ;
26
- assert . strictEqual ( test_string . TestUtf8 ( str1 ) , str1 ) ;
27
- assert . strictEqual ( test_string . TestUtf16 ( str1 ) , str1 ) ;
28
- assert . strictEqual ( test_string . TestLatin1AutoLength ( str1 ) , str1 ) ;
29
- assert . strictEqual ( test_string . TestUtf8AutoLength ( str1 ) , str1 ) ;
30
- assert . strictEqual ( test_string . TestUtf16AutoLength ( str1 ) , str1 ) ;
31
- assert . strictEqual ( test_string . TestLatin1External ( str1 ) , str1 ) ;
32
- assert . strictEqual ( test_string . TestUtf16External ( str1 ) , str1 ) ;
33
- assert . strictEqual ( test_string . TestLatin1ExternalAutoLength ( str1 ) , str1 ) ;
34
- assert . strictEqual ( test_string . TestUtf16ExternalAutoLength ( str1 ) , str1 ) ;
35
- assert . strictEqual ( test_string . TestLatin1Insufficient ( str1 ) , str1 . slice ( 0 , 3 ) ) ;
36
- assert . strictEqual ( test_string . TestUtf8Insufficient ( str1 ) , str1 . slice ( 0 , 3 ) ) ;
37
- assert . strictEqual ( test_string . TestUtf16Insufficient ( str1 ) , str1 . slice ( 0 , 3 ) ) ;
38
- assert . strictEqual ( test_string . TestPropertyKeyUtf16 ( str1 ) , str1 ) ;
39
- assert . strictEqual ( test_string . TestPropertyKeyUtf16AutoLength ( str1 ) , str1 ) ;
40
- assert . strictEqual ( test_string . Utf16Length ( str1 ) , 11 ) ;
41
- assert . strictEqual ( test_string . Utf8Length ( str1 ) , 11 ) ;
18
+ const latin1Cases = [
19
+ {
20
+ str : '¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿' ,
21
+ utf8Length : 62 ,
22
+ utf8InsufficientIdx : 1 ,
23
+ } ,
24
+ {
25
+ str : 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ' ,
26
+ utf8Length : 126 ,
27
+ utf8InsufficientIdx : 1 ,
28
+ } ,
29
+ ] ;
42
30
43
- const str2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ;
44
- assert . strictEqual ( test_string . TestLatin1 ( str2 ) , str2 ) ;
45
- assert . strictEqual ( test_string . TestUtf8 ( str2 ) , str2 ) ;
46
- assert . strictEqual ( test_string . TestUtf16 ( str2 ) , str2 ) ;
47
- assert . strictEqual ( test_string . TestLatin1AutoLength ( str2 ) , str2 ) ;
48
- assert . strictEqual ( test_string . TestUtf8AutoLength ( str2 ) , str2 ) ;
49
- assert . strictEqual ( test_string . TestUtf16AutoLength ( str2 ) , str2 ) ;
50
- assert . strictEqual ( test_string . TestLatin1External ( str2 ) , str2 ) ;
51
- assert . strictEqual ( test_string . TestUtf16External ( str2 ) , str2 ) ;
52
- assert . strictEqual ( test_string . TestLatin1ExternalAutoLength ( str2 ) , str2 ) ;
53
- assert . strictEqual ( test_string . TestUtf16ExternalAutoLength ( str2 ) , str2 ) ;
54
- assert . strictEqual ( test_string . TestLatin1Insufficient ( str2 ) , str2 . slice ( 0 , 3 ) ) ;
55
- assert . strictEqual ( test_string . TestUtf8Insufficient ( str2 ) , str2 . slice ( 0 , 3 ) ) ;
56
- assert . strictEqual ( test_string . TestUtf16Insufficient ( str2 ) , str2 . slice ( 0 , 3 ) ) ;
57
- assert . strictEqual ( test_string . TestPropertyKeyUtf16 ( str2 ) , str2 ) ;
58
- assert . strictEqual ( test_string . TestPropertyKeyUtf16AutoLength ( str2 ) , str2 ) ;
59
- assert . strictEqual ( test_string . Utf16Length ( str2 ) , 62 ) ;
60
- assert . strictEqual ( test_string . Utf8Length ( str2 ) , 62 ) ;
31
+ const unicodeCases = [
32
+ {
33
+ str : '\u{2003}\u{2101}\u{2001}\u{202}\u{2011}' ,
34
+ utf8Length : 14 ,
35
+ utf8InsufficientIdx : 1 ,
36
+ } ,
37
+ ] ;
61
38
62
- const str3 = '?!@#$%^&*()_+-=[]{}/.,<>\'"\\' ;
63
- assert . strictEqual ( test_string . TestLatin1 ( str3 ) , str3 ) ;
64
- assert . strictEqual ( test_string . TestUtf8 ( str3 ) , str3 ) ;
65
- assert . strictEqual ( test_string . TestUtf16 ( str3 ) , str3 ) ;
66
- assert . strictEqual ( test_string . TestLatin1AutoLength ( str3 ) , str3 ) ;
67
- assert . strictEqual ( test_string . TestUtf8AutoLength ( str3 ) , str3 ) ;
68
- assert . strictEqual ( test_string . TestUtf16AutoLength ( str3 ) , str3 ) ;
69
- assert . strictEqual ( test_string . TestLatin1External ( str3 ) , str3 ) ;
70
- assert . strictEqual ( test_string . TestUtf16External ( str3 ) , str3 ) ;
71
- assert . strictEqual ( test_string . TestLatin1ExternalAutoLength ( str3 ) , str3 ) ;
72
- assert . strictEqual ( test_string . TestUtf16ExternalAutoLength ( str3 ) , str3 ) ;
73
- assert . strictEqual ( test_string . TestLatin1Insufficient ( str3 ) , str3 . slice ( 0 , 3 ) ) ;
74
- assert . strictEqual ( test_string . TestUtf8Insufficient ( str3 ) , str3 . slice ( 0 , 3 ) ) ;
75
- assert . strictEqual ( test_string . TestUtf16Insufficient ( str3 ) , str3 . slice ( 0 , 3 ) ) ;
76
- assert . strictEqual ( test_string . TestPropertyKeyUtf16 ( str3 ) , str3 ) ;
77
- assert . strictEqual ( test_string . TestPropertyKeyUtf16AutoLength ( str3 ) , str3 ) ;
78
- assert . strictEqual ( test_string . Utf16Length ( str3 ) , 27 ) ;
79
- assert . strictEqual ( test_string . Utf8Length ( str3 ) , 27 ) ;
39
+ function testLatin1Cases ( str ) {
40
+ assert . strictEqual ( test_string . TestLatin1 ( str ) , str ) ;
41
+ assert . strictEqual ( test_string . TestLatin1AutoLength ( str ) , str ) ;
42
+ assert . strictEqual ( test_string . TestLatin1External ( str ) , str ) ;
43
+ assert . strictEqual ( test_string . TestLatin1ExternalAutoLength ( str ) , str ) ;
44
+ assert . strictEqual ( test_string . TestPropertyKeyLatin1 ( str ) , str ) ;
45
+ assert . strictEqual ( test_string . TestPropertyKeyLatin1AutoLength ( str ) , str ) ;
46
+ assert . strictEqual ( test_string . Latin1Length ( str ) , str . length ) ;
80
47
81
- const str4 = '¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿' ;
82
- assert . strictEqual ( test_string . TestLatin1 ( str4 ) , str4 ) ;
83
- assert . strictEqual ( test_string . TestUtf8 ( str4 ) , str4 ) ;
84
- assert . strictEqual ( test_string . TestUtf16 ( str4 ) , str4 ) ;
85
- assert . strictEqual ( test_string . TestLatin1AutoLength ( str4 ) , str4 ) ;
86
- assert . strictEqual ( test_string . TestUtf8AutoLength ( str4 ) , str4 ) ;
87
- assert . strictEqual ( test_string . TestUtf16AutoLength ( str4 ) , str4 ) ;
88
- assert . strictEqual ( test_string . TestLatin1External ( str4 ) , str4 ) ;
89
- assert . strictEqual ( test_string . TestUtf16External ( str4 ) , str4 ) ;
90
- assert . strictEqual ( test_string . TestLatin1ExternalAutoLength ( str4 ) , str4 ) ;
91
- assert . strictEqual ( test_string . TestUtf16ExternalAutoLength ( str4 ) , str4 ) ;
92
- assert . strictEqual ( test_string . TestLatin1Insufficient ( str4 ) , str4 . slice ( 0 , 3 ) ) ;
93
- assert . strictEqual ( test_string . TestUtf8Insufficient ( str4 ) , str4 . slice ( 0 , 1 ) ) ;
94
- assert . strictEqual ( test_string . TestUtf16Insufficient ( str4 ) , str4 . slice ( 0 , 3 ) ) ;
95
- assert . strictEqual ( test_string . TestPropertyKeyUtf16 ( str4 ) , str4 ) ;
96
- assert . strictEqual ( test_string . TestPropertyKeyUtf16AutoLength ( str4 ) , str4 ) ;
97
- assert . strictEqual ( test_string . Utf16Length ( str4 ) , 31 ) ;
98
- assert . strictEqual ( test_string . Utf8Length ( str4 ) , 62 ) ;
48
+ if ( str !== '' ) {
49
+ assert . strictEqual ( test_string . TestLatin1Insufficient ( str ) , str . slice ( 0 , kInsufficientIdx ) ) ;
50
+ }
51
+ }
99
52
100
- const str5 = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ' ;
101
- assert . strictEqual ( test_string . TestLatin1 ( str5 ) , str5 ) ;
102
- assert . strictEqual ( test_string . TestUtf8 ( str5 ) , str5 ) ;
103
- assert . strictEqual ( test_string . TestUtf16 ( str5 ) , str5 ) ;
104
- assert . strictEqual ( test_string . TestLatin1AutoLength ( str5 ) , str5 ) ;
105
- assert . strictEqual ( test_string . TestUtf8AutoLength ( str5 ) , str5 ) ;
106
- assert . strictEqual ( test_string . TestUtf16AutoLength ( str5 ) , str5 ) ;
107
- assert . strictEqual ( test_string . TestLatin1External ( str5 ) , str5 ) ;
108
- assert . strictEqual ( test_string . TestUtf16External ( str5 ) , str5 ) ;
109
- assert . strictEqual ( test_string . TestLatin1ExternalAutoLength ( str5 ) , str5 ) ;
110
- assert . strictEqual ( test_string . TestUtf16ExternalAutoLength ( str5 ) , str5 ) ;
111
- assert . strictEqual ( test_string . TestLatin1Insufficient ( str5 ) , str5 . slice ( 0 , 3 ) ) ;
112
- assert . strictEqual ( test_string . TestUtf8Insufficient ( str5 ) , str5 . slice ( 0 , 1 ) ) ;
113
- assert . strictEqual ( test_string . TestUtf16Insufficient ( str5 ) , str5 . slice ( 0 , 3 ) ) ;
114
- assert . strictEqual ( test_string . TestPropertyKeyUtf16 ( str5 ) , str5 ) ;
115
- assert . strictEqual ( test_string . TestPropertyKeyUtf16AutoLength ( str5 ) , str5 ) ;
116
- assert . strictEqual ( test_string . Utf16Length ( str5 ) , 63 ) ;
117
- assert . strictEqual ( test_string . Utf8Length ( str5 ) , 126 ) ;
53
+ function testUnicodeCases ( str , utf8Length , utf8InsufficientIdx ) {
54
+ assert . strictEqual ( test_string . TestUtf8 ( str ) , str ) ;
55
+ assert . strictEqual ( test_string . TestUtf16 ( str ) , str ) ;
56
+ assert . strictEqual ( test_string . TestUtf8AutoLength ( str ) , str ) ;
57
+ assert . strictEqual ( test_string . TestUtf16AutoLength ( str ) , str ) ;
58
+ assert . strictEqual ( test_string . TestUtf16External ( str ) , str ) ;
59
+ assert . strictEqual ( test_string . TestUtf16ExternalAutoLength ( str ) , str ) ;
60
+ assert . strictEqual ( test_string . TestPropertyKeyUtf8 ( str ) , str ) ;
61
+ assert . strictEqual ( test_string . TestPropertyKeyUtf8AutoLength ( str ) , str ) ;
62
+ assert . strictEqual ( test_string . TestPropertyKeyUtf16 ( str ) , str ) ;
63
+ assert . strictEqual ( test_string . TestPropertyKeyUtf16AutoLength ( str ) , str ) ;
64
+ assert . strictEqual ( test_string . Utf8Length ( str ) , utf8Length ) ;
65
+ assert . strictEqual ( test_string . Utf16Length ( str ) , str . length ) ;
118
66
119
- const str6 = '\u{2003}\u{2101}\u{2001}\u{202}\u{2011}' ;
120
- assert . strictEqual ( test_string . TestUtf8 ( str6 ) , str6 ) ;
121
- assert . strictEqual ( test_string . TestUtf16 ( str6 ) , str6 ) ;
122
- assert . strictEqual ( test_string . TestUtf8AutoLength ( str6 ) , str6 ) ;
123
- assert . strictEqual ( test_string . TestUtf16AutoLength ( str6 ) , str6 ) ;
124
- assert . strictEqual ( test_string . TestUtf16External ( str6 ) , str6 ) ;
125
- assert . strictEqual ( test_string . TestUtf16ExternalAutoLength ( str6 ) , str6 ) ;
126
- assert . strictEqual ( test_string . TestUtf8Insufficient ( str6 ) , str6 . slice ( 0 , 1 ) ) ;
127
- assert . strictEqual ( test_string . TestUtf16Insufficient ( str6 ) , str6 . slice ( 0 , 3 ) ) ;
128
- assert . strictEqual ( test_string . TestPropertyKeyUtf16 ( str6 ) , str6 ) ;
129
- assert . strictEqual ( test_string . TestPropertyKeyUtf16AutoLength ( str6 ) , str6 ) ;
130
- assert . strictEqual ( test_string . Utf16Length ( str6 ) , 5 ) ;
131
- assert . strictEqual ( test_string . Utf8Length ( str6 ) , 14 ) ;
67
+ if ( str !== '' ) {
68
+ assert . strictEqual ( test_string . TestUtf8Insufficient ( str ) , str . slice ( 0 , utf8InsufficientIdx ) ) ;
69
+ assert . strictEqual ( test_string . TestUtf16Insufficient ( str ) , str . slice ( 0 , kInsufficientIdx ) ) ;
70
+ }
71
+ }
72
+
73
+ asciiCases . forEach ( testLatin1Cases ) ;
74
+ asciiCases . forEach ( ( str ) => testUnicodeCases ( str , str . length , kInsufficientIdx ) ) ;
75
+ latin1Cases . forEach ( ( it ) => testLatin1Cases ( it . str ) ) ;
76
+ latin1Cases . forEach ( ( it ) => testUnicodeCases ( it . str , it . utf8Length , it . utf8InsufficientIdx ) ) ;
77
+ unicodeCases . forEach ( ( it ) => testUnicodeCases ( it . str , it . utf8Length , it . utf8InsufficientIdx ) ) ;
132
78
133
79
assert . throws ( ( ) => {
134
80
test_string . TestLargeUtf8 ( ) ;
0 commit comments