Mercurial > nebulaweb3
comparison default/node_modules/javascript-natural-sort/unit-tests.html @ 0:1d038bc9b3d2 default tip
Up:default
author | Liny <dev@neowd.com> |
---|---|
date | Sat, 31 May 2025 09:21:51 +0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1d038bc9b3d2 |
---|---|
1 <!DOCTYPE html> | |
2 <html> | |
3 <head> | |
4 <title>js-naturalsort test suite</title> | |
5 <script src='http://code.jquery.com/jquery-latest.js'></script> | |
6 <link rel='stylesheet' href='http://code.jquery.com/qunit/git/qunit.css' type='text/css' media='screen' /> | |
7 <script type='text/javascript' src='http://code.jquery.com/qunit/git/qunit.js'></script> | |
8 <script src='naturalSort.js' type='text/javascript'></script> | |
9 <script type='text/javascript'> | |
10 $(function () { | |
11 test('different values types', function () { | |
12 wrapTest( | |
13 ['a',1], | |
14 [1,'a'], | |
15 'number always comes first'); | |
16 wrapTest( | |
17 ['1',1], | |
18 ['1',1], | |
19 'number vs numeric string - should remain unchanged (error in chrome)'); | |
20 wrapTest( | |
21 ['02',3,2,'01'], | |
22 ['01','02',2,3], | |
23 'padding numeric string vs number'); | |
24 }); | |
25 test('datetime', function () { | |
26 wrapTest( | |
27 ['10/12/2008','10/11/2008','10/11/2007','10/12/2007'], | |
28 ['10/11/2007','10/12/2007','10/11/2008','10/12/2008'], | |
29 'similar dates'); | |
30 wrapTest( | |
31 ['01/01/2008','01/10/2008','01/01/1992','01/01/1991'], | |
32 ['01/01/1991','01/01/1992','01/01/2008','01/10/2008'], | |
33 'similar dates'); | |
34 wrapTest( | |
35 [ | |
36 'Wed Jan 01 2010 00:00:00 GMT-0800 (Pacific Standard Time)', | |
37 'Thu Dec 31 2009 00:00:00 GMT-0800 (Pacific Standard Time)', | |
38 'Wed Jan 01 2010 00:00:00 GMT-0500 (Eastern Standard Time)' | |
39 ],[ | |
40 'Thu Dec 31 2009 00:00:00 GMT-0800 (Pacific Standard Time)', | |
41 'Wed Jan 01 2010 00:00:00 GMT-0500 (Eastern Standard Time)', | |
42 'Wed Jan 01 2010 00:00:00 GMT-0800 (Pacific Standard Time)' | |
43 ], 'javascript toString(), different timezones'); | |
44 wrapTest( | |
45 [ | |
46 'Saturday, July 3, 2010', | |
47 'Monday, August 2, 2010', | |
48 'Monday, May 3, 2010' | |
49 ],[ | |
50 'Monday, May 3, 2010', | |
51 'Saturday, July 3, 2010', | |
52 'Monday, August 2, 2010' | |
53 ], 'Date.toString(), Date.toLocaleString()'); | |
54 wrapTest( | |
55 [ | |
56 'Mon, 15 Jun 2009 20:45:30 GMT', | |
57 'Mon, 3 May 2010 17:45:30 GMT', | |
58 'Mon, 15 Jun 2009 17:45:30 GMT' | |
59 ],[ | |
60 'Mon, 15 Jun 2009 17:45:30 GMT', | |
61 'Mon, 15 Jun 2009 20:45:30 GMT', | |
62 'Mon, 3 May 2010 17:45:30 GMT' | |
63 ], 'Date.toUTCString()'); | |
64 wrapTest( | |
65 [ | |
66 'Saturday, July 3, 2010 1:45 PM', | |
67 'Saturday, July 3, 2010 1:45 AM', | |
68 'Monday, August 2, 2010 1:45 PM', | |
69 'Monday, May 3, 2010 1:45 PM' | |
70 ],[ | |
71 'Monday, May 3, 2010 1:45 PM', | |
72 'Saturday, July 3, 2010 1:45 AM', | |
73 'Saturday, July 3, 2010 1:45 PM', | |
74 'Monday, August 2, 2010 1:45 PM' | |
75 ], ''); | |
76 wrapTest( | |
77 [ | |
78 'Saturday, July 3, 2010 1:45:30 PM', | |
79 'Saturday, July 3, 2010 1:45:29 PM', | |
80 'Monday, August 2, 2010 1:45:01 PM', | |
81 'Monday, May 3, 2010 1:45:00 PM' | |
82 ],[ | |
83 'Monday, May 3, 2010 1:45:00 PM', | |
84 'Saturday, July 3, 2010 1:45:29 PM', | |
85 'Saturday, July 3, 2010 1:45:30 PM', | |
86 'Monday, August 2, 2010 1:45:01 PM' | |
87 ], ''); | |
88 wrapTest( | |
89 [ | |
90 '2/15/2009 1:45 PM', | |
91 '1/15/2009 1:45 PM', | |
92 '2/15/2009 1:45 AM' | |
93 ],[ | |
94 '1/15/2009 1:45 PM', | |
95 '2/15/2009 1:45 AM', | |
96 '2/15/2009 1:45 PM' | |
97 ], ''); | |
98 wrapTest( | |
99 [ | |
100 '2010-06-15T13:45:30', | |
101 '2009-06-15T13:45:30', | |
102 '2009-06-15T01:45:30.2', | |
103 '2009-01-15T01:45:30' | |
104 ],[ | |
105 '2009-01-15T01:45:30', | |
106 '2009-06-15T01:45:30.2', | |
107 '2009-06-15T13:45:30', | |
108 '2010-06-15T13:45:30' | |
109 ], 'ISO8601 Dates'); | |
110 wrapTest( | |
111 [ | |
112 '2010-06-15 13:45:30', | |
113 '2009-06-15 13:45:30', | |
114 '2009-01-15 01:45:30' | |
115 ],[ | |
116 '2009-01-15 01:45:30', | |
117 '2009-06-15 13:45:30', | |
118 '2010-06-15 13:45:30' | |
119 ], 'ISO8601-ish YYYY-MM-DDThh:mm:ss - which does not parse into a Date instance'); | |
120 wrapTest( | |
121 [ | |
122 'Mon, 15 Jun 2009 20:45:30 GMT', | |
123 'Mon, 15 Jun 2009 20:45:30 PDT', | |
124 'Mon, 15 Jun 2009 20:45:30 EST', | |
125 ],[ | |
126 'Mon, 15 Jun 2009 20:45:30 GMT', | |
127 'Mon, 15 Jun 2009 20:45:30 EST', | |
128 'Mon, 15 Jun 2009 20:45:30 PDT' | |
129 ], 'RFC1123 testing different timezones'); | |
130 wrapTest( | |
131 [ | |
132 '1245098730000', | |
133 '14330728000', | |
134 '1245098728000' | |
135 ],[ | |
136 '14330728000', | |
137 '1245098728000', | |
138 '1245098730000' | |
139 ], 'unix epoch, Date.getTime()'); | |
140 }); | |
141 test('version number strings', function () { | |
142 wrapTest( | |
143 ['1.0.2','1.0.1','1.0.0','1.0.9'], | |
144 ['1.0.0','1.0.1','1.0.2','1.0.9'], | |
145 'close version numbers'); | |
146 wrapTest( | |
147 ['1.0.03','1.0.003','1.0.002','1.0.0001'], | |
148 ['1.0.0001','1.0.002','1.0.003','1.0.03'], | |
149 'multi-digit branch release'); | |
150 wrapTest( | |
151 ['1.1beta','1.1.2alpha3','1.0.2alpha3','1.0.2alpha1','1.0.1alpha4','2.1.2','2.1.1'], | |
152 ['1.0.1alpha4','1.0.2alpha1','1.0.2alpha3','1.1.2alpha3','1.1beta','2.1.1','2.1.2'], | |
153 'close version numbers'); | |
154 wrapTest( | |
155 ['myrelease-1.1.3','myrelease-1.2.3','myrelease-1.1.4','myrelease-1.1.1','myrelease-1.0.5'], | |
156 ['myrelease-1.0.5','myrelease-1.1.1','myrelease-1.1.3','myrelease-1.1.4','myrelease-1.2.3'], | |
157 'string first'); | |
158 }); | |
159 test('numerics', function () { | |
160 wrapTest( | |
161 ['10',9,2,'1','4'], | |
162 ['1',2,'4',9,'10'], | |
163 'string vs number'); | |
164 wrapTest( | |
165 ['0001','002','001'], | |
166 ['0001','001','002'], | |
167 '0 left-padded numbers'); | |
168 wrapTest( | |
169 [2,1,'1','0001','002','02','001'], | |
170 ['0001','001','002','02',1,'1',2], | |
171 '0 left-padded numbers and regular numbers'); | |
172 wrapTest( | |
173 ['10.0401',10.022,10.042,'10.021999'], | |
174 ['10.021999',10.022,'10.0401',10.042], | |
175 'decimal string vs decimal, different precision'); | |
176 wrapTest( | |
177 ['10.04',10.02,10.03,'10.01'], | |
178 ['10.01',10.02,10.03,'10.04'], | |
179 'decimal string vs decimal, same precision'); | |
180 wrapTest( | |
181 ['10.04f','10.039F','10.038d','10.037D'], | |
182 ['10.037D','10.038d','10.039F','10.04f'], | |
183 'float/decimal with \'F\' or \'D\' notation'); | |
184 wrapTest( | |
185 ['10.004Z','10.039T','10.038ooo','10.037g'], | |
186 ['10.004Z','10.037g','10.038ooo','10.039T'], | |
187 'not foat/decimal notation'); | |
188 wrapTest( | |
189 ['1.528535047e5','1.528535047e7','1.52e15','1.528535047e3','1.59e-3'], | |
190 ['1.59e-3','1.528535047e3','1.528535047e5','1.528535047e7','1.52e15'], | |
191 'scientific notation'); | |
192 wrapTest( | |
193 ['-1','-2','4','-3','0','-5'], | |
194 ['-5','-3','-2','-1','0','4'], | |
195 'negative numbers as strings'); | |
196 wrapTest( | |
197 [-1,'-2',4,-3,'0','-5'], | |
198 ['-5',-3,'-2',-1,'0',4], | |
199 'negative numbers as strings - mixed input type, string + numeric'); | |
200 wrapTest( | |
201 [-2.01,-2.1,4.144,4.1,-2.001,-5], | |
202 [-5,-2.1,-2.01,-2.001,4.1,4.144], | |
203 'negative floats - all numeric'); | |
204 }); | |
205 test('IP addresses', function () { | |
206 wrapTest( | |
207 [ | |
208 '192.168.0.100', | |
209 '192.168.0.1', | |
210 '192.168.1.1', | |
211 '192.168.0.250', | |
212 '192.168.1.123', | |
213 '10.0.0.2', | |
214 '10.0.0.1' | |
215 ], | |
216 [ | |
217 '10.0.0.1', | |
218 '10.0.0.2', | |
219 '192.168.0.1', | |
220 '192.168.0.100', | |
221 '192.168.0.250', | |
222 '192.168.1.1', | |
223 '192.168.1.123' | |
224 ]); | |
225 }); | |
226 test('filenames', function () { | |
227 wrapTest( | |
228 ['img12.png','img10.png','img2.png','img1.png'], | |
229 ['img1.png','img2.png','img10.png','img12.png'], | |
230 'simple image filenames'); | |
231 wrapTest( | |
232 ['car.mov','01alpha.sgi','001alpha.sgi','my.string_41299.tif','organic2.0001.sgi'], | |
233 ['001alpha.sgi','01alpha.sgi','car.mov','my.string_41299.tif','organic2.0001.sgi'], | |
234 'complex filenames'); | |
235 wrapTest([ | |
236 './system/kernel/js/01_ui.core.js', | |
237 './system/kernel/js/00_jquery-1.3.2.js', | |
238 './system/kernel/js/02_my.desktop.js' | |
239 ],[ | |
240 './system/kernel/js/00_jquery-1.3.2.js', | |
241 './system/kernel/js/01_ui.core.js', | |
242 './system/kernel/js/02_my.desktop.js' | |
243 ], 'unix filenames'); | |
244 }); | |
245 test('space(s) as first character(s)', function () { | |
246 wrapTest( | |
247 ['alpha',' 1',' 3',' 2',0], | |
248 [0,' 1',' 2',' 3','alpha']); | |
249 }); | |
250 test('empty strings and space character', function () { | |
251 wrapTest( | |
252 ['10023','999','',2,5.663,5.6629], | |
253 ['',2,5.6629,5.663,'999','10023']); | |
254 wrapTest( | |
255 [0,'0',''], | |
256 [0,'0','']); | |
257 }); | |
258 test('hex', function () { | |
259 wrapTest( | |
260 [ '0xA','0x9','0x99' ], | |
261 [ '0x9','0xA','0x99'], | |
262 'real hex numbers'); | |
263 wrapTest( | |
264 [ '0xZZ','0xVVV','0xVEV','0xUU' ], | |
265 [ '0xUU','0xVEV','0xVVV','0xZZ' ],'fake hex numbers'); | |
266 }); | |
267 test('unicode', function () { | |
268 wrapTest( | |
269 [ '\u0044', '\u0055', '\u0054', '\u0043' ], | |
270 [ '\u0043', '\u0044', '\u0054', '\u0055' ], | |
271 'basic latin'); | |
272 }); | |
273 test('sparse array sort', function () { | |
274 var sarray = [3, 2] | |
275 sarrayOutput = [1, 2, 3]; | |
276 sarray[10] = 1; | |
277 for (var i=0; i < 8; i++) | |
278 sarrayOutput.push(undefined); | |
279 wrapTest(sarray, sarrayOutput,'simple sparse array'); | |
280 }); | |
281 test('case insensitive support', function () { | |
282 naturalSort.insensitive = true; | |
283 wrapTest( | |
284 ['A', 'b', 'C', 'd', 'E', 'f'], | |
285 ['A', 'b', 'C', 'd', 'E', 'f'], | |
286 'case sensitive pre-sorted array'); | |
287 wrapTest( | |
288 ['A', 'C', 'E', 'b', 'd', 'f'], | |
289 ['A', 'b', 'C', 'd', 'E', 'f'], | |
290 'case sensitive un-sorted array'); | |
291 naturalSort.insensitive = false; | |
292 wrapTest( | |
293 ['A', 'C', 'E', 'b', 'd', 'f'], | |
294 ['A', 'C', 'E', 'b', 'd', 'f'], | |
295 'case sensitive pre-sorted array'); | |
296 wrapTest( | |
297 ['A', 'b', 'C', 'd', 'E', 'f'], | |
298 ['A', 'C', 'E', 'b', 'd', 'f'], | |
299 'case sensitive un-sorted array'); | |
300 }); | |
301 test('contributed tests', function () { | |
302 wrapTest( | |
303 ['T78','U17','U10','U12','U14','745','U7','01','485','S16','S2','S22','1081','S25','1055','779','776','771','44','4','87','1091','42','480','952','951','756','1000','824','770','666','633','619','1','991','77H','PIER-7','47','29','9','77L','433'], | |
304 ['01','1','4','9','29','42','44','47','77H','77L','87','433','480','485','619','633','666','745','756','770','771','776','779','824','951','952','991','1000','1055','1081','1091','PIER-7','S2','S16','S22','S25','T78','U7','U10','U12','U14','U17'], | |
305 'contributed by Bob Zeiner'); | |
306 wrapTest( | |
307 [ | |
308 'FSI stop, Position: 5', | |
309 'Mail Group stop, Position: 5', | |
310 'Mail Group stop, Position: 5', | |
311 'FSI stop, Position: 6', | |
312 'FSI stop, Position: 6', | |
313 'Newsstand stop, Position: 4', | |
314 'Newsstand stop, Position: 4', | |
315 'FSI stop, Position: 5' | |
316 ],[ | |
317 'FSI stop, Position: 5', | |
318 'FSI stop, Position: 5', | |
319 'FSI stop, Position: 6', | |
320 'FSI stop, Position: 6', | |
321 'Mail Group stop, Position: 5', | |
322 'Mail Group stop, Position: 5', | |
323 'Newsstand stop, Position: 4', | |
324 'Newsstand stop, Position: 4' | |
325 ],'contributed by Scott'); | |
326 wrapTest( | |
327 [2, 10, 1, 'azd', undefined, 'asd'], | |
328 [1, 2, 10, 'asd', 'azd', undefined], | |
329 'issue #2 - undefined support - jarvinen pekka'); | |
330 wrapTest( | |
331 [undefined, undefined, undefined, 1, undefined], | |
332 [1, undefined, undefined, undefined], | |
333 'issue #2 - undefined support - jarvinen pekka'); | |
334 wrapTest( | |
335 ['-1', '-2', '4', '-3', '0', '-5'], | |
336 ['-5', '-3', '-2', '-1', '0', '4'], | |
337 'issue #3 - invalid numeric string sorting - guilermo.dev'); | |
338 naturalSort.insensitive = true; | |
339 wrapTest( | |
340 ['9','11','22','99','A','aaaa','bbbb','Aaaa','aAaa','aa','AA','Aa','aA','BB','bB','aaA','AaA','aaa'], | |
341 ['9', '11', '22', '99', 'A', 'aa', 'AA', 'Aa', 'aA', 'aaA', 'AaA', 'aaa', 'aaaa', 'Aaaa', 'aAaa', 'BB', 'bB', 'bbbb'], | |
342 'issue #5 - invalid sort order - Howie Schecter'); | |
343 naturalSort.insensitive = false; | |
344 wrapTest( | |
345 ['9','11','22','99','A','aaaa','bbbb','Aaaa','aAaa','aa','AA','Aa','aA','BB','bB','aaA','AaA','aaa'], | |
346 ['9', '11', '22', '99', 'A', 'AA', 'Aa', 'AaA', 'Aaaa', 'BB', 'aA', 'aAaa', 'aa', 'aaA', 'aaa', 'aaaa', 'bB', 'bbbb'], | |
347 'issue #5 - invalid sort order - Howie Schecter'); | |
348 wrapTest( | |
349 ['5D','1A','2D','33A','5E','33K','33D','5S','2C','5C','5F','1D','2M'], | |
350 ['1A','1D','2C','2D','2M','5C','5D','5E','5F','5S','33A','33D','33K'], | |
351 'alphanumeric - number first'); | |
352 }); | |
353 }); | |
354 function wrapTest(origArray, sortArray, message) { | |
355 deepEqual($.extend([], origArray).sort(naturalSort), sortArray, (message ? message + ' - ' : '') + QUnit.jsDump.parse(origArray)); | |
356 } | |
357 </script> | |
358 </head> | |
359 <body> | |
360 <h1 id='qunit-header'>js-naturalsort test suite</h1> | |
361 <h2 id='qunit-banner'></h2> | |
362 <h2 id='qunit-userAgent'></h2> | |
363 <ol id='qunit-tests' /> | |
364 </body> | |
365 </html> |