mirror of https://github.com/svaarala/duktape.git
Sami Vaarala
12 years ago
3 changed files with 231 additions and 0 deletions
@ -0,0 +1,91 @@ |
|||||
|
/* |
||||
|
* Basic toLowerCase() tests. Brute-force tests cover these conversions |
||||
|
* in much more detail. |
||||
|
*/ |
||||
|
|
||||
|
/*=== |
||||
|
abcd |
||||
|
228 |
||||
|
===*/ |
||||
|
|
||||
|
function basicTest() { |
||||
|
print('AbCd'.toLowerCase()); |
||||
|
print('\u00c4'.toLowerCase().charCodeAt(0)); // U+00C4 (A with dots) -> U+00E4 (a with dots) = 228
|
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
basicTest(); |
||||
|
} catch (e) { |
||||
|
print(e); |
||||
|
} |
||||
|
|
||||
|
/*=== |
||||
|
string 3 97 962 33 |
||||
|
string 3 97 963 97 |
||||
|
===*/ |
||||
|
|
||||
|
/* Locale/language specific rules should NOT apply, but context specific |
||||
|
* rules should. Test just a few basic rules. |
||||
|
*/ |
||||
|
|
||||
|
function localeTest() { |
||||
|
var str, t; |
||||
|
|
||||
|
// context specific Greek sigma rule
|
||||
|
|
||||
|
str = 'A\u03a3!'; // prev is letter, curr is U+03A3 (Greek capital letter sigma), next is not letter
|
||||
|
t = str.toLowerCase(); |
||||
|
print(typeof t, t.length, t.charCodeAt(0), t.charCodeAt(1), t.charCodeAt(2)); |
||||
|
|
||||
|
str = 'A\u03a3A'; // should no longer apply
|
||||
|
t = str.toLowerCase(); |
||||
|
print(typeof t, t.length, t.charCodeAt(0), t.charCodeAt(1), t.charCodeAt(2)); |
||||
|
|
||||
|
// FIXME: add locale specific test and ensure locale specific rules do not apply
|
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
localeTest(); |
||||
|
} 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.toLowerCase.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); |
||||
|
} |
||||
|
|
@ -0,0 +1,59 @@ |
|||||
|
/*=== |
||||
|
string string 0 0 true |
||||
|
string string 9 9 undefined undefined true |
||||
|
string string 4 4 null null true |
||||
|
string string 4 4 true true true |
||||
|
string string 5 5 false false true |
||||
|
string string 3 3 123 123 true |
||||
|
string string 3 3 foo foo true |
||||
|
string string 3 3 1,2 1,2 true |
||||
|
string string 15 15 [object Object] [object Object] true |
||||
|
string string -1 -1 noval noval true |
||||
|
TypeError |
||||
|
TypeError |
||||
|
===*/ |
||||
|
|
||||
|
function toStringValueOfTest() { |
||||
|
function t(x, noval) { |
||||
|
var t1 = x.toString(); |
||||
|
var t2 = x.valueOf(); |
||||
|
print(typeof t1, typeof t2, |
||||
|
(noval ? -1 : t1.length), (noval ? -1 : t2.length), |
||||
|
(noval ? 'noval' : t1), (noval ? 'noval' : t2), |
||||
|
t1 === t2) |
||||
|
} |
||||
|
|
||||
|
t(new String()); |
||||
|
t(new String(undefined)); |
||||
|
t(new String(null)); |
||||
|
t(new String(true)); |
||||
|
t(new String(false)); |
||||
|
t(new String(123.0)); |
||||
|
t(new String('foo')); |
||||
|
t(new String([1,2])); |
||||
|
t(new String({ foo: 1, bar: 2 })); |
||||
|
|
||||
|
// avoid printing the exact value, as it is implementation dependent
|
||||
|
t(new String(function (){}), true); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
toStringValueOfTest(); |
||||
|
} catch (e) { |
||||
|
print(e); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
// not generic, require TypeError
|
||||
|
String.prototype.toString.call({}); |
||||
|
} catch (e) { |
||||
|
print(e.name); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
// not generic, require TypeError
|
||||
|
String.prototype.valueOf.call({}); |
||||
|
} catch (e) { |
||||
|
print(e.name); |
||||
|
} |
||||
|
|
@ -0,0 +1,81 @@ |
|||||
|
/* |
||||
|
* Basic toUpperCase() tests. Brute-force tests cover these conversions |
||||
|
* in much more detail. |
||||
|
*/ |
||||
|
|
||||
|
/*=== |
||||
|
ABCD |
||||
|
196 |
||||
|
===*/ |
||||
|
|
||||
|
function basicTest() { |
||||
|
print('AbCd'.toUpperCase()); |
||||
|
print('\u00e4'.toUpperCase().charCodeAt(0)); // U+00E4 (a with dots) -> U+00E4 (A with dots) = 196
|
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
basicTest(); |
||||
|
} catch (e) { |
||||
|
print(e); |
||||
|
} |
||||
|
|
||||
|
/*=== |
||||
|
===*/ |
||||
|
|
||||
|
/* Locale/language specific rules should NOT apply, but context specific |
||||
|
* rules should. Test just a few basic rules. |
||||
|
*/ |
||||
|
|
||||
|
function localeTest() { |
||||
|
var str, t; |
||||
|
|
||||
|
// FIXME: add context specific test and ensure context specific rules apply
|
||||
|
// FIXME: add locale specific test and ensure locale specific rules do not apply
|
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
localeTest(); |
||||
|
} catch (e) { |
||||
|
print(e); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/*=== |
||||
|
string 15 [OBJECT GLOBAL] |
||||
|
string 15 [OBJECT GLOBAL] |
||||
|
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.toUpperCase.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); |
||||
|
} |
||||
|
|
Loading…
Reference in new issue