mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.9 KiB
97 lines
2.9 KiB
/*===
|
|
string 0
|
|
string 1 A
|
|
string 2 AB
|
|
string 3 ABC
|
|
string 3 ABC
|
|
string 3 ABC
|
|
string 4 AAAA
|
|
string 4 AAAA
|
|
string 2 AB
|
|
valueOf() for 1st
|
|
valueOf() for 2nd
|
|
valueOf() for 3rd
|
|
string 3 BDF
|
|
string 7 0 127 255 837 17767 26505 65535
|
|
string 3 65 0 0
|
|
string 100 ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ
|
|
===*/
|
|
|
|
function fromCharCodeTest() {
|
|
function pv(x) {
|
|
print(typeof x, x.length, x);
|
|
}
|
|
|
|
function pv2(x) {
|
|
var tmp = [];
|
|
tmp.push(typeof x);
|
|
tmp.push(x.length);
|
|
for (i = 0; i < x.length; i++) {
|
|
tmp.push(x.charCodeAt(i));
|
|
}
|
|
print(tmp.join(' '));
|
|
}
|
|
|
|
function mkObj(name, strval, numval) {
|
|
return {
|
|
toString: function() { print('toString() for ' + name); return strval; },
|
|
valueOf: function() { print('valueOf() for ' + name); return numval }
|
|
};
|
|
}
|
|
|
|
// basic tests
|
|
pv(String.fromCharCode());
|
|
pv(String.fromCharCode(65));
|
|
pv(String.fromCharCode(65, 66));
|
|
pv(String.fromCharCode(65, 66, 67));
|
|
|
|
// ToUint16 coercion, whole numbers
|
|
pv(String.fromCharCode(65601, 6553666, 6553600067));
|
|
pv(String.fromCharCode(-65471, -6553534, -6553599933));
|
|
|
|
// ToUint16 coercion, positive values, round to zero (floor)
|
|
pv(String.fromCharCode(65.0, 65.1, 65.5, 65.9));
|
|
|
|
// ToUint16 coercion, negative values, round to zero (ceil)
|
|
// -65536 + 65 = -65471
|
|
pv(String.fromCharCode(-65471.0, -65471.1, -65471.5, -65471.9));
|
|
|
|
// Note that coercion round to zero means that even if even if
|
|
// ToUint16(65.9) = 65, ToUint16(65.9 - 65536) = ToUint16(-65470.1) = 66!
|
|
pv(String.fromCharCode(65.9, 65.9 - 65536));
|
|
|
|
// ToUint16 coercion, side effect order
|
|
pv(String.fromCharCode(mkObj('1st', '65', 66),
|
|
mkObj('2nd', '67', 68),
|
|
mkObj('3rd', '69', 70)));
|
|
|
|
// non-BMP (and modulo 2**16)
|
|
pv2(String.fromCharCode(0, 127, 255, 0x345, 0x4567, 0x56789, 0x10ffff));
|
|
|
|
// undefined arguments are coerced with ToUint16(), yielding zero
|
|
// codepoints; they are different from arguments not given at all
|
|
|
|
pv2(String.fromCharCode(65, undefined, undefined));
|
|
|
|
// a lot of arguments; this is now limited by Duktape stack so we can't
|
|
// put a REALLY long string here (separate bug test case for longer
|
|
// strings now)
|
|
pv(String.fromCharCode(
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
65, 66, 67, 68, 69, 70, 71, 72, 73, 74));
|
|
}
|
|
|
|
try {
|
|
fromCharCodeTest();
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
|
|
|