Browse Source

global/string testcases

pull/1/head
Sami Vaarala 12 years ago
parent
commit
acb19ee9d0
  1. 210
      testcases/test-builtin-global-escape.js
  2. 56
      testcases/test-builtin-string-proto-tolocalelowercase.js
  3. 56
      testcases/test-builtin-string-proto-tolocaleuppercase.js
  4. 79
      testcases/test-builtin-string-proto-trim.js

210
testcases/test-builtin-global-escape.js

@ -0,0 +1,210 @@
// FIXME: util
/* Trivial string checksum used to summarize brute force output lines
* (minimizes test case size).
*/
function checkSumString(x) {
var i, n;
var res = 0;
var mult = [ 1, 3, 5, 7, 11, 13, 17, 19, 23 ];
n = x.length;
for (i = 0; i < n; i++) {
res += x.charCodeAt(i) * mult[i % mult.length];
res = res >>> 0; // coerce to 32 bits
}
return res;
}
// indirect eval -> this is bound to the global object, E5 Section 10.4.2, step 1.a.
var g = (function () { var e = eval; return e('this'); } )();
/*===
basic
%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F
%20%21%22%23%24%25%26%27%28%29*+%2C-./0123456789%3A%3B%3C%3D%3E%3F
@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_
%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F
%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F
%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF
%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF
%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF
%u0100%u0101%u0102%u0103%u0104%u0105%u0106%u0107%u0108%u0109%u010A%u010B%u010C%u010D%u010E%u010F%u0110%u0111%u0112%u0113%u0114%u0115%u0116%u0117%u0118%u0119%u011A%u011B%u011C%u011D%u011E%u011F
%u0120%u0121%u0122%u0123%u0124%u0125%u0126%u0127%u0128%u0129%u012A%u012B%u012C%u012D%u012E%u012F%u0130%u0131%u0132%u0133%u0134%u0135%u0136%u0137%u0138%u0139%u013A%u013B%u013C%u013D%u013E%u013F
%u0140%u0141%u0142%u0143%u0144%u0145%u0146%u0147%u0148%u0149%u014A%u014B%u014C%u014D%u014E%u014F%u0150%u0151%u0152%u0153%u0154%u0155%u0156%u0157%u0158%u0159%u015A%u015B%u015C%u015D%u015E%u015F
%u0160%u0161%u0162%u0163%u0164%u0165%u0166%u0167%u0168%u0169%u016A%u016B%u016C%u016D%u016E%u016F%u0170%u0171%u0172%u0173%u0174%u0175%u0176%u0177%u0178%u0179%u017A%u017B%u017C%u017D%u017E%u017F
%u0180%u0181%u0182%u0183%u0184%u0185%u0186%u0187%u0188%u0189%u018A%u018B%u018C%u018D%u018E%u018F%u0190%u0191%u0192%u0193%u0194%u0195%u0196%u0197%u0198%u0199%u019A%u019B%u019C%u019D%u019E%u019F
%u01A0%u01A1%u01A2%u01A3%u01A4%u01A5%u01A6%u01A7%u01A8%u01A9%u01AA%u01AB%u01AC%u01AD%u01AE%u01AF%u01B0%u01B1%u01B2%u01B3%u01B4%u01B5%u01B6%u01B7%u01B8%u01B9%u01BA%u01BB%u01BC%u01BD%u01BE%u01BF
%u01C0%u01C1%u01C2%u01C3%u01C4%u01C5%u01C6%u01C7%u01C8%u01C9%u01CA%u01CB%u01CC%u01CD%u01CE%u01CF%u01D0%u01D1%u01D2%u01D3%u01D4%u01D5%u01D6%u01D7%u01D8%u01D9%u01DA%u01DB%u01DC%u01DD%u01DE%u01DF
%u01E0%u01E1%u01E2%u01E3%u01E4%u01E5%u01E6%u01E7%u01E8%u01E9%u01EA%u01EB%u01EC%u01ED%u01EE%u01EF%u01F0%u01F1%u01F2%u01F3%u01F4%u01F5%u01F6%u01F7%u01F8%u01F9%u01FA%u01FB%u01FC%u01FD%u01FE%u01FF
%u0200%u0201%u0202%u0203%u0204%u0205%u0206%u0207%u0208%u0209%u020A%u020B%u020C%u020D%u020E%u020F%u0210%u0211%u0212%u0213%u0214%u0215%u0216%u0217%u0218%u0219%u021A%u021B%u021C%u021D%u021E%u021F
%u0220%u0221%u0222%u0223%u0224%u0225%u0226%u0227%u0228%u0229%u022A%u022B%u022C%u022D%u022E%u022F%u0230%u0231%u0232%u0233%u0234%u0235%u0236%u0237%u0238%u0239%u023A%u023B%u023C%u023D%u023E%u023F
%u0240%u0241%u0242%u0243%u0244%u0245%u0246%u0247%u0248%u0249%u024A%u024B%u024C%u024D%u024E%u024F%u0250%u0251%u0252%u0253%u0254%u0255%u0256%u0257%u0258%u0259%u025A%u025B%u025C%u025D%u025E%u025F
%u0260%u0261%u0262%u0263%u0264%u0265%u0266%u0267%u0268%u0269%u026A%u026B%u026C%u026D%u026E%u026F%u0270%u0271%u0272%u0273%u0274%u0275%u0276%u0277%u0278%u0279%u027A%u027B%u027C%u027D%u027E%u027F
%u0280%u0281%u0282%u0283%u0284%u0285%u0286%u0287%u0288%u0289%u028A%u028B%u028C%u028D%u028E%u028F%u0290%u0291%u0292%u0293%u0294%u0295%u0296%u0297%u0298%u0299%u029A%u029B%u029C%u029D%u029E%u029F
%u02A0%u02A1%u02A2%u02A3%u02A4%u02A5%u02A6%u02A7%u02A8%u02A9%u02AA%u02AB%u02AC%u02AD%u02AE%u02AF%u02B0%u02B1%u02B2%u02B3%u02B4%u02B5%u02B6%u02B7%u02B8%u02B9%u02BA%u02BB%u02BC%u02BD%u02BE%u02BF
%u02C0%u02C1%u02C2%u02C3%u02C4%u02C5%u02C6%u02C7%u02C8%u02C9%u02CA%u02CB%u02CC%u02CD%u02CE%u02CF%u02D0%u02D1%u02D2%u02D3%u02D4%u02D5%u02D6%u02D7%u02D8%u02D9%u02DA%u02DB%u02DC%u02DD%u02DE%u02DF
%u02E0%u02E1%u02E2%u02E3%u02E4%u02E5%u02E6%u02E7%u02E8%u02E9%u02EA%u02EB%u02EC%u02ED%u02EE%u02EF%u02F0%u02F1%u02F2%u02F3%u02F4%u02F5%u02F6%u02F7%u02F8%u02F9%u02FA%u02FB%u02FC%u02FD%u02FE%u02FF
%u0300%u0301%u0302%u0303%u0304%u0305%u0306%u0307%u0308%u0309%u030A%u030B%u030C%u030D%u030E%u030F%u0310%u0311%u0312%u0313%u0314%u0315%u0316%u0317%u0318%u0319%u031A%u031B%u031C%u031D%u031E%u031F
%u0320%u0321%u0322%u0323%u0324%u0325%u0326%u0327%u0328%u0329%u032A%u032B%u032C%u032D%u032E%u032F%u0330%u0331%u0332%u0333%u0334%u0335%u0336%u0337%u0338%u0339%u033A%u033B%u033C%u033D%u033E%u033F
%u0340%u0341%u0342%u0343%u0344%u0345%u0346%u0347%u0348%u0349%u034A%u034B%u034C%u034D%u034E%u034F%u0350%u0351%u0352%u0353%u0354%u0355%u0356%u0357%u0358%u0359%u035A%u035B%u035C%u035D%u035E%u035F
%u0360%u0361%u0362%u0363%u0364%u0365%u0366%u0367%u0368%u0369%u036A%u036B%u036C%u036D%u036E%u036F%u0370%u0371%u0372%u0373%u0374%u0375%u0376%u0377%u0378%u0379%u037A%u037B%u037C%u037D%u037E%u037F
%u0380%u0381%u0382%u0383%u0384%u0385%u0386%u0387%u0388%u0389%u038A%u038B%u038C%u038D%u038E%u038F%u0390%u0391%u0392%u0393%u0394%u0395%u0396%u0397%u0398%u0399%u039A%u039B%u039C%u039D%u039E%u039F
%u03A0%u03A1%u03A2%u03A3%u03A4%u03A5%u03A6%u03A7%u03A8%u03A9%u03AA%u03AB%u03AC%u03AD%u03AE%u03AF%u03B0%u03B1%u03B2%u03B3%u03B4%u03B5%u03B6%u03B7%u03B8%u03B9%u03BA%u03BB%u03BC%u03BD%u03BE%u03BF
%u03C0%u03C1%u03C2%u03C3%u03C4%u03C5%u03C6%u03C7%u03C8%u03C9%u03CA%u03CB%u03CC%u03CD%u03CE%u03CF%u03D0%u03D1%u03D2%u03D3%u03D4%u03D5%u03D6%u03D7%u03D8%u03D9%u03DA%u03DB%u03DC%u03DD%u03DE%u03DF
%u03E0%u03E1%u03E2%u03E3%u03E4%u03E5%u03E6%u03E7%u03E8%u03E9%u03EA%u03EB%u03EC%u03ED%u03EE%u03EF%u03F0%u03F1%u03F2%u03F3%u03F4%u03F5%u03F6%u03F7%u03F8%u03F9%u03FA%u03FB%u03FC%u03FD%u03FE%u03FF
===*/
/* Test the ASCII range and a part of the non-ASCII range to get both
* escape types.
*/
print('basic');
function basicTest() {
var i, j;
var tmp;
for (i = 0; i < 1024; i += 32) {
tmp = [];
for (j = 0; j < 32; j++) {
tmp.push(String.fromCharCode(i + j));
}
tmp = g.escape(tmp.join(''));
print(tmp);
}
}
try {
basicTest();
} catch (e) {
print(e);
}
/*===
bruteforce
0 3544552
1024 4228420
2048 4292466
3072 4356400
4096 4208278
5120 4242406
6144 4306452
7168 4370386
8192 4222264
9216 4256392
10240 4320438
11264 4384372
12288 4236250
13312 4270378
14336 4334424
15360 4398358
16384 4250236
17408 4284364
18432 4348410
19456 4412344
20480 4264222
21504 4298350
22528 4362396
23552 4426330
24576 4278208
25600 4312336
26624 4376382
27648 4440316
28672 4292194
29696 4326322
30720 4390368
31744 4454302
32768 4306180
33792 4340308
34816 4404354
35840 4468288
36864 4320166
37888 4354294
38912 4418340
39936 4482274
40960 4432054
41984 4466182
43008 4530228
44032 4594162
45056 4446040
46080 4480168
47104 4544214
48128 4608148
49152 4460026
50176 4494154
51200 4558200
52224 4622134
53248 4474012
54272 4508140
55296 4572186
56320 4636120
57344 4487998
58368 4522126
59392 4586172
60416 4650106
61440 4501984
62464 4536112
63488 4600158
64512 4664092
===*/
/* Bruteforce test of the whole Unicode range, string hash outputs. */
print('bruteforce');
function bruteForceTest() {
for (i = 0; i < 65536; i += 1024) {
tmp = [];
for (j = 0; j < 1024; j++) {
tmp.push(String.fromCharCode(i + j));
}
tmp = tmp.join('');
tmp = g.escape(tmp);
print(i, checkSumString(tmp));
}
}
try {
bruteForceTest();
} catch (e) {
print(e);
}
/*===
coercion
coercion
undefined
undefined
null
true
false
1234
foo
1%2C2%2C3
%5Bobject%20Object%5D
===*/
print('coercion');
function coercionTest() {
print(g.escape());
print(g.escape(undefined));
print(g.escape(null));
print(g.escape(true));
print(g.escape(false));
print(g.escape(1234));
print(g.escape('foo'));
print(g.escape([1,2,3]));
print(g.escape({ foo: 1, bar: 2}));
}
try {
coercionTest();
} catch (e) {
print(e);
}

56
testcases/test-builtin-string-proto-tolocalelowercase.js

@ -0,0 +1,56 @@
/*===
foobar
===*/
try {
print('fOoBaR'.toLocaleLowerCase());
} catch (e) {
print(e);
}
/*===
TypeError
TypeError
string 4 true
string 5 false
string 3 123
string 6 foobar
string 9 1,foo,bar
string 15 [object object]
===*/
function coercionTest() {
function test(str) {
var t;
try {
t = String.prototype.toLocaleLowerCase.call(str);
print(typeof t, t.length, t);
} catch (e) {
print(e.name);
}
}
test(undefined);
test(null);
test(true);
test(false);
test(123.0);
test('FoObAr');
test([1,'fOO','Bar']);
test({ foo: 1, bar: 2 });
}
try {
coercionTest();
} catch (e) {
print(e);
}
/* FIXME: basic tests like coercion etc. */
/* FIXME: test that locale specific conversions actually work.
* How to force locale for a test?
*/

56
testcases/test-builtin-string-proto-tolocaleuppercase.js

@ -0,0 +1,56 @@
/*===
FOOBAR
===*/
try {
print('fOoBaR'.toLocaleUpperCase());
} catch (e) {
print(e);
}
/*===
TypeError
TypeError
string 4 TRUE
string 5 FALSE
string 3 123
string 6 FOOBAR
string 9 1,FOO,BAR
string 15 [OBJECT OBJECT]
===*/
function coercionTest() {
function test(str) {
var t;
try {
t = String.prototype.toLocaleUpperCase.call(str);
print(typeof t, t.length, t);
} catch (e) {
print(e.name);
}
}
test(undefined);
test(null);
test(true);
test(false);
test(123.0);
test('FoObAr');
test([1,'fOO','Bar']);
test({ foo: 1, bar: 2 });
}
try {
coercionTest();
} catch (e) {
print(e);
}
/* FIXME: basic tests like coercion etc. */
/* FIXME: test that locale specific conversions actually work.
* How to force locale for a test?
*/

79
testcases/test-builtin-string-proto-trim.js

@ -0,0 +1,79 @@
// FIXME: util
var WHITESPACE_CODEPOINTS = [
// from WhiteSpace production
0x0009, // <TAB>
0x000B, // <VT>
0x000C, // <FF>
0x0020, // <SP>
0x00A0, // <NBSP>
0xFEFF, // <BOM>
// WhiteSpace production also has <USP>, which means any other Unicode
// space separator (category Zs), which needs to be checked from (up to
// date) Unicode data. The WhiteSpace-Z.txt file, created as part of
// the build, currently contains (duplicates eliminated):
// 0x0020, // 0020;SPACE;Zs;0;WS;;;;;N;;;;;
// 0x00A0, // 00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
0x1680, // 1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
0x180E, // 180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;;
0x2000, // 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
0x2001, // 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
0x2002, // 2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
0x2003, // 2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
0x2004, // 2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
0x2005, // 2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
0x2006, // 2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
0x2007, // 2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
0x2008, // 2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
0x2009, // 2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
0x200A, // 200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
// 0x2028, // 2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
// 0x2029, // 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
0x202F, // 202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
0x205F, // 205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
0x3000, // 3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
// from LineTerminator production
0x000a, // <LF>
0x000d, // <CR>
0x2028, // <LS>
0x2029, // <PS>
];
/*===
string 3 foo
string 3 foo
string 3 foo
string 3 foo
===*/
function basicTest() {
var all_ws;
var i;
function test(str) {
var t;
t = str.trim();
print(typeof t, t.length, t);
}
all_ws = [];
for (i = 0; i < WHITESPACE_CODEPOINTS; i++) {
all_ws.push(String.fromCharCode(i));
}
all_ws = all_ws.join('');
test('foo');
test(' foo');
test('foo ');
test(all_ws + 'foo' + all_ws);
}
try {
basicTest();
} catch (e) {
print(e);
}
Loading…
Cancel
Save