2016-12-23 22:31:38 +03:00
|
|
|
exports[`test boolean.js 1`] = `
|
|
|
|
"// @flow
|
|
|
|
|
|
|
|
// Boolean (the class) tests. booleans (the literals) are not part of core.js
|
|
|
|
|
|
|
|
let tests = [
|
|
|
|
// constructor
|
|
|
|
function() {
|
|
|
|
new Boolean();
|
|
|
|
new Boolean(0);
|
|
|
|
new Boolean(-0);
|
|
|
|
new Boolean(null);
|
|
|
|
new Boolean(false);
|
|
|
|
new Boolean(NaN);
|
|
|
|
new Boolean(undefined);
|
2016-12-28 05:40:04 +03:00
|
|
|
new Boolean(\"\");
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
|
|
|
|
|
|
|
// toString
|
|
|
|
function() {
|
|
|
|
(true).toString();
|
|
|
|
let x: boolean = false;
|
|
|
|
x.toString();
|
|
|
|
(new Boolean(true)).toString();
|
|
|
|
},
|
|
|
|
|
|
|
|
// valueOf
|
|
|
|
function() {
|
|
|
|
((new Boolean(0)).valueOf(): boolean);
|
|
|
|
},
|
|
|
|
|
|
|
|
// casting
|
|
|
|
function() {
|
|
|
|
Boolean();
|
|
|
|
Boolean(0);
|
|
|
|
Boolean(-0);
|
|
|
|
Boolean(null);
|
|
|
|
Boolean(false);
|
|
|
|
Boolean(NaN);
|
|
|
|
Boolean(undefined);
|
2016-12-28 05:40:04 +03:00
|
|
|
Boolean(\"\");
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
|
|
|
];
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
// @flow
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2016-12-23 22:31:38 +03:00
|
|
|
// Boolean (the class) tests. booleans (the literals) are not part of core.js
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2016-12-23 22:31:38 +03:00
|
|
|
let tests = [
|
2017-01-10 05:49:06 +03:00
|
|
|
// constructor
|
2016-12-23 22:31:38 +03:00
|
|
|
function() {
|
2017-01-11 02:51:46 +03:00
|
|
|
new Boolean();
|
2016-12-28 05:40:04 +03:00
|
|
|
new Boolean(0);
|
|
|
|
new Boolean(-0);
|
|
|
|
new Boolean(null);
|
|
|
|
new Boolean(false);
|
2016-12-23 22:31:38 +03:00
|
|
|
new Boolean(NaN);
|
|
|
|
new Boolean(undefined);
|
2016-12-28 05:40:04 +03:00
|
|
|
new Boolean(\"\");
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
2017-02-16 04:52:28 +03:00
|
|
|
|
2017-01-10 05:49:06 +03:00
|
|
|
// toString
|
2016-12-23 22:31:38 +03:00
|
|
|
function() {
|
2016-12-28 05:40:04 +03:00
|
|
|
true.toString();
|
|
|
|
let x: boolean = false;
|
2016-12-23 22:31:38 +03:00
|
|
|
x.toString();
|
2016-12-28 05:40:04 +03:00
|
|
|
new Boolean(true).toString();
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
2017-02-16 04:52:28 +03:00
|
|
|
|
2017-01-10 05:49:06 +03:00
|
|
|
// valueOf
|
2016-12-23 22:31:38 +03:00
|
|
|
function() {
|
2016-12-28 05:40:04 +03:00
|
|
|
(new Boolean(0).valueOf(): boolean);
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
2017-02-16 04:52:28 +03:00
|
|
|
|
2017-01-10 05:49:06 +03:00
|
|
|
// casting
|
2016-12-23 22:31:38 +03:00
|
|
|
function() {
|
|
|
|
Boolean();
|
2016-12-28 05:40:04 +03:00
|
|
|
Boolean(0);
|
|
|
|
Boolean(-0);
|
|
|
|
Boolean(null);
|
|
|
|
Boolean(false);
|
2016-12-23 22:31:38 +03:00
|
|
|
Boolean(NaN);
|
|
|
|
Boolean(undefined);
|
2016-12-28 05:40:04 +03:00
|
|
|
Boolean(\"\");
|
2016-12-23 22:31:38 +03:00
|
|
|
}
|
2017-01-11 18:16:38 +03:00
|
|
|
];
|
|
|
|
"
|
2016-12-23 22:31:38 +03:00
|
|
|
`;
|
|
|
|
|
|
|
|
exports[`test map.js 1`] = `
|
|
|
|
"// @flow
|
|
|
|
|
|
|
|
function* generator(): Iterable<[string, number]> {
|
|
|
|
while (true) {
|
2016-12-28 05:40:04 +03:00
|
|
|
yield [\'foo\', 123];
|
2016-12-23 22:31:38 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let tests = [
|
|
|
|
// good constructors
|
|
|
|
function() {
|
|
|
|
let w = new Map();
|
|
|
|
let x = new Map(null);
|
2016-12-28 05:40:04 +03:00
|
|
|
let y = new Map([[\'foo\', 123]]);
|
2016-12-23 22:31:38 +03:00
|
|
|
let z = new Map(generator());
|
|
|
|
let a: Map<string, number> = new Map();
|
2016-12-28 05:40:04 +03:00
|
|
|
let b: Map<string, number> = new Map([[\'foo\', 123]]);
|
2016-12-23 22:31:38 +03:00
|
|
|
let c: Map<string, number> = new Map(generator());
|
|
|
|
},
|
|
|
|
|
|
|
|
// bad constructors
|
|
|
|
function() {
|
2016-12-28 05:40:04 +03:00
|
|
|
let x = new Map([\'foo\', 123]); // error
|
|
|
|
let y: Map<number, string> = new Map([[\'foo\', 123]]); // error
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
|
|
|
|
|
|
|
// get()
|
|
|
|
function(x: Map<string, number>) {
|
2016-12-28 05:40:04 +03:00
|
|
|
(x.get(\'foo\'): boolean); // error, string | void
|
2016-12-23 22:31:38 +03:00
|
|
|
x.get(123); // error, wrong key type
|
|
|
|
},
|
|
|
|
];
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2016-12-27 21:29:31 +03:00
|
|
|
// @flow
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2016-12-30 08:01:44 +03:00
|
|
|
function* generator(): Iterable<[string, number]> {
|
2016-12-28 05:40:04 +03:00
|
|
|
while (true) {
|
2017-01-24 22:38:12 +03:00
|
|
|
yield [\"foo\", 123];
|
2016-12-27 21:29:31 +03:00
|
|
|
}
|
|
|
|
}
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2016-12-27 21:29:31 +03:00
|
|
|
let tests = [
|
2017-01-10 05:49:06 +03:00
|
|
|
// good constructors
|
2016-12-27 21:29:31 +03:00
|
|
|
function() {
|
2017-01-11 02:51:46 +03:00
|
|
|
let w = new Map();
|
2016-12-28 05:40:04 +03:00
|
|
|
let x = new Map(null);
|
2017-01-24 22:38:12 +03:00
|
|
|
let y = new Map([[\"foo\", 123]]);
|
2016-12-27 21:29:31 +03:00
|
|
|
let z = new Map(generator());
|
2017-01-11 02:51:46 +03:00
|
|
|
let a: Map<string, number> = new Map();
|
2017-01-24 22:38:12 +03:00
|
|
|
let b: Map<string, number> = new Map([[\"foo\", 123]]);
|
2016-12-27 21:29:31 +03:00
|
|
|
let c: Map<string, number> = new Map(generator());
|
|
|
|
},
|
2017-02-16 04:52:28 +03:00
|
|
|
|
2017-01-10 05:49:06 +03:00
|
|
|
// bad constructors
|
2016-12-27 21:29:31 +03:00
|
|
|
function() {
|
2017-01-26 22:57:43 +03:00
|
|
|
let x = new Map([\"foo\", 123]); // error
|
2017-01-24 22:38:12 +03:00
|
|
|
let y: Map<number, string> = new Map([[\"foo\", 123]]); // error
|
2016-12-27 21:29:31 +03:00
|
|
|
},
|
2017-02-16 04:52:28 +03:00
|
|
|
|
2017-01-10 05:49:06 +03:00
|
|
|
// get()
|
2016-12-27 21:29:31 +03:00
|
|
|
function(x: Map<string, number>) {
|
2017-01-26 22:57:43 +03:00
|
|
|
(x.get(\"foo\"): boolean); // error, string | void
|
2017-01-10 05:49:06 +03:00
|
|
|
x.get(123); // error, wrong key type
|
2016-12-27 21:29:31 +03:00
|
|
|
}
|
2017-01-11 18:16:38 +03:00
|
|
|
];
|
|
|
|
"
|
2016-12-23 22:31:38 +03:00
|
|
|
`;
|
|
|
|
|
|
|
|
exports[`test regexp.js 1`] = `
|
|
|
|
"// @flow
|
|
|
|
|
|
|
|
let tests = [
|
|
|
|
// constructor
|
|
|
|
function() {
|
2016-12-28 05:40:04 +03:00
|
|
|
new RegExp(\'foo\');
|
2016-12-23 22:31:38 +03:00
|
|
|
new RegExp(/foo/);
|
2016-12-28 05:40:04 +03:00
|
|
|
new RegExp(\'foo\', \'i\');
|
|
|
|
new RegExp(\'foo\', \'ig\');
|
|
|
|
new RegExp(/foo/, \'i\'); // invalid in ES5, valid in ES6
|
|
|
|
new RegExp(/foo/g, \'i\'); // invalid in ES5, valid in ES6
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
|
|
|
|
|
|
|
// called as a function (equivalent to the constructor per ES6 21.2.3)
|
|
|
|
function() {
|
2016-12-28 05:40:04 +03:00
|
|
|
RegExp(\'foo\');
|
2016-12-23 22:31:38 +03:00
|
|
|
RegExp(/foo/);
|
2016-12-28 05:40:04 +03:00
|
|
|
RegExp(\'foo\', \'i\');
|
|
|
|
RegExp(\'foo\', \'ig\');
|
|
|
|
RegExp(/foo/, \'i\'); // invalid in ES5, valid in ES6
|
|
|
|
RegExp(/foo/g, \'i\'); // invalid in ES5, valid in ES6
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
|
|
|
|
|
|
|
// invalid flags
|
|
|
|
function() {
|
2016-12-28 05:40:04 +03:00
|
|
|
RegExp(\'foo\', \'z\'); // error
|
|
|
|
new RegExp(\'foo\', \'z\'); // error
|
2016-12-23 22:31:38 +03:00
|
|
|
}
|
|
|
|
];
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
// @flow
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2016-12-23 22:31:38 +03:00
|
|
|
let tests = [
|
2017-01-10 05:49:06 +03:00
|
|
|
// constructor
|
2016-12-23 22:31:38 +03:00
|
|
|
function() {
|
2016-12-28 05:40:04 +03:00
|
|
|
new RegExp(\"foo\");
|
|
|
|
new RegExp(/foo/);
|
|
|
|
new RegExp(\"foo\", \"i\");
|
|
|
|
new RegExp(\"foo\", \"ig\");
|
2017-01-26 22:57:43 +03:00
|
|
|
new RegExp(/foo/, \"i\"); // invalid in ES5, valid in ES6
|
2017-01-10 05:49:06 +03:00
|
|
|
new RegExp(/foo/g, \"i\"); // invalid in ES5, valid in ES6
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
2017-02-16 04:52:28 +03:00
|
|
|
|
2017-01-10 05:49:06 +03:00
|
|
|
// called as a function (equivalent to the constructor per ES6 21.2.3)
|
2016-12-23 22:31:38 +03:00
|
|
|
function() {
|
2016-12-28 05:40:04 +03:00
|
|
|
RegExp(\"foo\");
|
|
|
|
RegExp(/foo/);
|
|
|
|
RegExp(\"foo\", \"i\");
|
|
|
|
RegExp(\"foo\", \"ig\");
|
2017-01-26 22:57:43 +03:00
|
|
|
RegExp(/foo/, \"i\"); // invalid in ES5, valid in ES6
|
2017-01-10 05:49:06 +03:00
|
|
|
RegExp(/foo/g, \"i\"); // invalid in ES5, valid in ES6
|
2016-12-23 22:31:38 +03:00
|
|
|
},
|
2017-02-16 04:52:28 +03:00
|
|
|
|
2017-01-10 05:49:06 +03:00
|
|
|
// invalid flags
|
2016-12-23 22:31:38 +03:00
|
|
|
function() {
|
2017-01-26 22:57:43 +03:00
|
|
|
RegExp(\"foo\", \"z\"); // error
|
2017-01-10 05:49:06 +03:00
|
|
|
new RegExp(\"foo\", \"z\"); // error
|
2016-12-23 22:31:38 +03:00
|
|
|
}
|
2017-01-11 18:16:38 +03:00
|
|
|
];
|
|
|
|
"
|
2016-12-23 22:31:38 +03:00
|
|
|
`;
|
|
|
|
|
|
|
|
exports[`test weakset.js 1`] = `
|
|
|
|
"// @flow
|
|
|
|
|
|
|
|
let ws = new WeakSet();
|
|
|
|
let obj: Object = {};
|
2016-12-28 05:40:04 +03:00
|
|
|
let dict: {foo: string} = {foo: \'bar\'};
|
2016-12-23 22:31:38 +03:00
|
|
|
|
|
|
|
ws.add(window);
|
|
|
|
ws.add(obj);
|
|
|
|
ws.add(dict);
|
|
|
|
ws.has(window);
|
|
|
|
ws.has(obj);
|
|
|
|
ws.has(dict);
|
|
|
|
ws.delete(window);
|
|
|
|
ws.delete(obj);
|
|
|
|
ws.delete(dict);
|
|
|
|
|
|
|
|
let ws2 = new WeakSet([obj, dict]);
|
|
|
|
|
|
|
|
let ws3 = new WeakSet([1, 2, 3]); // error, must be objects
|
|
|
|
|
|
|
|
function* generator(): Iterable<{foo: string}> {
|
|
|
|
while (true) {
|
2016-12-28 05:40:04 +03:00
|
|
|
yield {foo: \'bar\'};
|
2016-12-23 22:31:38 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let ws4 = new WeakSet(generator());
|
|
|
|
|
|
|
|
function* numbers(): Iterable<number> {
|
|
|
|
let i = 0;
|
|
|
|
while (true) {
|
|
|
|
yield i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let ws5 = new WeakSet(numbers()); // error, must be objects
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2016-12-27 21:29:31 +03:00
|
|
|
// @flow
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2017-01-11 02:51:46 +03:00
|
|
|
let ws = new WeakSet();
|
2016-12-27 21:29:31 +03:00
|
|
|
let obj: Object = {};
|
2016-12-28 05:40:04 +03:00
|
|
|
let dict: { foo: string } = { foo: \"bar\" };
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2016-12-27 21:29:31 +03:00
|
|
|
ws.add(window);
|
|
|
|
ws.add(obj);
|
|
|
|
ws.add(dict);
|
|
|
|
ws.has(window);
|
|
|
|
ws.has(obj);
|
|
|
|
ws.has(dict);
|
|
|
|
ws.delete(window);
|
|
|
|
ws.delete(obj);
|
|
|
|
ws.delete(dict);
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2017-01-24 22:38:12 +03:00
|
|
|
let ws2 = new WeakSet([obj, dict]);
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2017-01-26 22:57:43 +03:00
|
|
|
let ws3 = new WeakSet([1, 2, 3]); // error, must be objects
|
2017-01-31 19:27:44 +03:00
|
|
|
|
2016-12-27 21:29:31 +03:00
|
|
|
function* generator(): Iterable<{ foo: string }> {
|
2016-12-28 05:40:04 +03:00
|
|
|
while (true) {
|
|
|
|
yield { foo: \"bar\" };
|
2016-12-27 21:29:31 +03:00
|
|
|
}
|
|
|
|
}
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2016-12-27 21:29:31 +03:00
|
|
|
let ws4 = new WeakSet(generator());
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2016-12-27 21:29:31 +03:00
|
|
|
function* numbers(): Iterable<number> {
|
2016-12-28 05:40:04 +03:00
|
|
|
let i = 0;
|
|
|
|
while (true) {
|
2016-12-27 21:29:31 +03:00
|
|
|
yield i++;
|
|
|
|
}
|
|
|
|
}
|
2017-01-10 05:49:06 +03:00
|
|
|
|
2017-01-11 18:16:38 +03:00
|
|
|
let ws5 = new WeakSet(numbers()); // error, must be objects
|
|
|
|
"
|
2016-12-23 22:31:38 +03:00
|
|
|
`;
|