Files
test-repo/tests/object_api/__snapshots__/jsfmt.spec.js.snap
T
Christopher Chedeau 74bc9e7a4d Add newline for empty blocks {} (#205)
I find it weird to put `{}` together. So I figured I would change it to have an empty line and ask for feedback :)

![image](https://cloud.githubusercontent.com/assets/197597/21739279/062adc80-d44c-11e6-8bb7-5e0768f3ddde.png)

Beware: most of the test cases are not representative of real code, you almost never define blocks with no content in practice.
2017-01-16 11:31:32 -05:00

601 lines
12 KiB
Plaintext

exports[`test a.js 1`] = `
"/* @flow */
module.exports = { a() {} };~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @flow */
module.exports = {
a() {
}
};
"
`;
exports[`test b.js 1`] = `
"/* @flow */
var a = require(\'./a\');
var b = Object.assign({ bar() {}, ...{} }, a);
b.a(); // works here
module.exports = b;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @flow */
var a = require(\"./a\");
var b = Object.assign(
{
bar() {
},
...{}
},
a
);
b.a();
// works here
module.exports = b;
"
`;
exports[`test c.js 1`] = `
"/* @flow */
var c = require(\'./b\');
c.a();
c.foo();~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @flow */
var c = require(\"./b\");
c.a();
c.foo();
"
`;
exports[`test object_assign.js 1`] = `
"/* @flow */
var export_ = Object.assign({}, {
foo: function(param) { return param; }
});
var decl_export_: { foo: any; bar: any } = Object.assign({}, export_);
let anyObj: Object = {};
Object.assign(anyObj, anyObj); // makes sure this terminates
module.exports = export_;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @flow */
var export_ = Object.assign({}, {
foo: function(param) {
return param;
}
});
var decl_export_: { foo: any, bar: any } = Object.assign({}, export_);
let anyObj: Object = {};
Object.assign(anyObj, anyObj);
// makes sure this terminates
module.exports = export_;
"
`;
exports[`test object_create.js 1`] = `
"/* @flow */
class C { foo: string; }
// OK, \`instanceof C\` would be true
(Object.create(C.prototype): C);
// OK, \`instanceof C\` would be true
(Object.create(new C): C);
// error, object literals don\'t structurally match instances
({ foo: \"foo\" }: C);
// error, object types don\'t structurally match instances
type O = { foo: string; }
declare var o: O;
(o: C);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @flow */
class C {
foo: string;
}
// OK, \`instanceof C\` would be true
(Object.create(C.prototype): C);
// OK, \`instanceof C\` would be true
(Object.create(new C()): C);
// error, object literals don\'t structurally match instances
({ foo: \"foo\" }: C);
// error, object types don\'t structurally match instances
type O = { foo: string };
declare var o: O;
(o: C);
"
`;
exports[`test object_getprototypeof.js 1`] = `
"// @flow
class Foo {}
class Bar extends Foo {}
let tests = [
function() {
const x = new Bar();
(Object.getPrototypeOf(x): Foo);
},
];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// @flow
class Foo {}
class Bar extends Foo {}
let tests = [
function() {
const x = new Bar();
(Object.getPrototypeOf(x): Foo);
}
];
"
`;
exports[`test object_keys.js 1`] = `
"/* @flow */
var sealed = {one: \'one\', two: \'two\'};
(Object.keys(sealed): Array<\'one\'|\'two\'>);
(Object.keys(sealed): void); // error, Array<string>
var unsealed = {};
Object.keys(unsealed).forEach(k => {
(k : number) // error: number ~> string
});
var dict: { [k: number]: string } = {};
Object.keys(dict).forEach(k => {
(k : number) // error: number ~> string
});
var any: Object = {};
(Object.keys(any): Array<number>); // error, Array<string>
class Foo {
prop: string;
foo() {}
}
// constructor and foo not enumerable
(Object.keys(new Foo()): Array<\'error\'>); // error: prop ~> error
class Bar extends Foo {
bar_prop: string;
bar() {}
}
// only own enumerable props
(Object.keys(new Bar()): Array<\'error\'>); // error: bar_prop ~> error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @flow */
var sealed = { one: \"one\", two: \"two\" };
(Object.keys(sealed): Array<\"one\" | \"two\">);
(Object.keys(sealed): void);
// error, Array<string>
var unsealed = {};
Object.keys(unsealed).forEach(k => {
(k: number); // error: number ~> string
});
var dict: { [k: number]: string } = {};
Object.keys(dict).forEach(k => {
(k: number); // error: number ~> string
});
var any: Object = {};
(Object.keys(any): Array<number>);
// error, Array<string>
class Foo {
prop: string;
foo() {
}
}
// constructor and foo not enumerable
(Object.keys(new Foo()): Array<\"error\">);
// error: prop ~> error
class Bar extends Foo {
bar_prop: string;
bar() {
}
}
// only own enumerable props
(Object.keys(new Bar()): Array<\"error\">); // error: bar_prop ~> error
"
`;
exports[`test object_missing.js 1`] = `
"// @flow
let tests = [
function() {
Object.doesNotExist();
},
];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// @flow
let tests = [
function() {
Object.doesNotExist();
}
];
"
`;
exports[`test object_prototype.js 1`] = `
"/* @flow */
function takesABool(x: boolean) {}
function takesAString(x: string) {}
function takesANumber(x: number) {}
function takesAnObject(x: Object) {}
class Foo {}
var a = { foo: \'bar\' };
var b = { foo: \'bar\', ...{}};
var c = { foo: \'bar\', toString: function(): number { return 123; }};
var d : { [key: string]: string } = { foo: \'bar\' };
var x = new Date();
var y = new Foo();
//
// toString
//
// call
takesAString(a.toString());
d.toString(); // ok, even though dict specifies strings, this is a function
// get
var aToString : () => string = a.toString;
var aToString2 = a.toString;
takesAString(aToString2());
// set
b.toString = function(): string { return \'foo\'; };
c.toString = function(): number { return 123; };
// override
var cToString : () => number = c.toString;
// ... on a built-in instance
var xToString : number = x.toString; // error
var xToString2 : () => number = x.toString; // error
takesAString(x.toString());
// ... on an instance
var yToString : number = y.toString; // error
takesAString(y.toString());
// ... on a primitive
(123).toString();
(123).toString;
(123).toString = function() {}; // error
(123).toString(2);
(123).toString(\'foo\'); // error
(123).toString(null); // error
//
// hasOwnProperty
//
// call
takesABool(a.hasOwnProperty(\'foo\'));
// get
var aHasOwnProperty : (prop: string) => boolean = a.hasOwnProperty;
var aHasOwnProperty2 = a.hasOwnProperty;
takesABool(aHasOwnProperty2(\'bar\'));
// set
b.hasOwnProperty = function() { return false; };
// ... on a built-in instance
var xHasOwnProperty : number = x.hasOwnProperty; // error
var xHasOwnProperty2 : (prop: string) => number = x.hasOwnProperty; // error
takesABool(x.hasOwnProperty(\'foo\'));
// ... on an instance
var yHasOwnProperty : number = y.hasOwnProperty; // error
takesABool(y.hasOwnProperty(\'foo\'));
//
// propertyIsEnumerable
//
// call
takesABool(a.propertyIsEnumerable(\'foo\'));
// get
var aPropertyIsEnumerable : (prop: string) => boolean = a.propertyIsEnumerable;
var aPropertyIsEnumerable2 = a.propertyIsEnumerable;
takesABool(aPropertyIsEnumerable2(\'bar\'));
// set
b.propertyIsEnumerable = function() { return false; };
// ... on a built-in instance
var xPropertyIsEnumerable : number = x.propertyIsEnumerable; // error
var xPropertyIsEnumerable2 : (prop: string) => number =
x.propertyIsEnumerable; // error
takesABool(x.propertyIsEnumerable(\'foo\'));
// ... on an instance
var yPropertyIsEnumerable : number = y.propertyIsEnumerable; // error
takesABool(y.propertyIsEnumerable(\'foo\'));
//
// valueOf
//
// call
takesAnObject(a.valueOf());
// get
var aValueOf : () => Object = a.valueOf;
var aValueOf2 = a.valueOf;
takesAnObject(aValueOf2());
// set
b.valueOf = function() { return {}; };
// ... on a built-in instance
var xValueOf : number = x.valueOf; // error
takesANumber(x.valueOf());
// ... on an instance
var yValueOf : number = y.valueOf; // error
takesAnObject(y.valueOf());
// ... on a literal
var strValueOf : string = (\"foo\").valueOf();
var numValueOf : number = (123).valueOf();
var boolValueOf : boolean = (true).valueOf();
//
// toLocaleString
//
// call
takesAString(a.toLocaleString());
// get
var aToLocaleString : () => string = a.toLocaleString;
var aToLocaleString2 = a.toLocaleString;
takesAString(aToLocaleString2());
// set
b.toLocaleString = function() { return \'derp\'; };
// ... on a built-in instance
var xToLocaleString : number = x.toLocaleString; // error
var xToLocaleString2 : () => number = x.toLocaleString; // error
takesAString(x.toLocaleString());
// ... on an instance
var yToLocaleString : number = y.toLocaleString; // error
takesAString(y.toLocaleString());
//
// constructor
//
var k : Object = a.constructor;
(123).constructor;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @flow */
function takesABool(x: boolean) {
}
function takesAString(x: string) {
}
function takesANumber(x: number) {
}
function takesAnObject(x: Object) {
}
class Foo {}
var a = { foo: \"bar\" };
var b = { foo: \"bar\", ...{} };
var c = {
foo: \"bar\",
toString: function(): number {
return 123;
}
};
var d: { [key: string]: string } = { foo: \"bar\" };
var x = new Date();
var y = new Foo();
//
// toString
//
// call
takesAString(a.toString());
d.toString();
// ok, even though dict specifies strings, this is a function
// get
var aToString: () => string = a.toString;
var aToString2 = a.toString;
takesAString(aToString2());
// set
b.toString = function(): string {
return \"foo\";
};
c.toString = function(): number {
return 123;
};
// override
var cToString: () => number = c.toString;
// ... on a built-in instance
var xToString: number = x.toString;
// error
var xToString2: () => number = x.toString;
// error
takesAString(x.toString());
// ... on an instance
var yToString: number = y.toString;
// error
takesAString(y.toString());
// ... on a primitive
(123).toString();
(123).toString;
(123).toString = function() {
};
// error
(123).toString(2);
(123).toString(\"foo\");
// error
(123).toString(null);
// error
//
// hasOwnProperty
//
// call
takesABool(a.hasOwnProperty(\"foo\"));
// get
var aHasOwnProperty: (prop: string) => boolean = a.hasOwnProperty;
var aHasOwnProperty2 = a.hasOwnProperty;
takesABool(aHasOwnProperty2(\"bar\"));
// set
b.hasOwnProperty = function() {
return false;
};
// ... on a built-in instance
var xHasOwnProperty: number = x.hasOwnProperty;
// error
var xHasOwnProperty2: (prop: string) => number = x.hasOwnProperty;
// error
takesABool(x.hasOwnProperty(\"foo\"));
// ... on an instance
var yHasOwnProperty: number = y.hasOwnProperty;
// error
takesABool(y.hasOwnProperty(\"foo\"));
//
// propertyIsEnumerable
//
// call
takesABool(a.propertyIsEnumerable(\"foo\"));
// get
var aPropertyIsEnumerable: (prop: string) => boolean = a.propertyIsEnumerable;
var aPropertyIsEnumerable2 = a.propertyIsEnumerable;
takesABool(aPropertyIsEnumerable2(\"bar\"));
// set
b.propertyIsEnumerable = function() {
return false;
};
// ... on a built-in instance
var xPropertyIsEnumerable: number = x.propertyIsEnumerable;
// error
var xPropertyIsEnumerable2: (prop: string) => number = x.propertyIsEnumerable;
// error
takesABool(x.propertyIsEnumerable(\"foo\"));
// ... on an instance
var yPropertyIsEnumerable: number = y.propertyIsEnumerable;
// error
takesABool(y.propertyIsEnumerable(\"foo\"));
//
// valueOf
//
// call
takesAnObject(a.valueOf());
// get
var aValueOf: () => Object = a.valueOf;
var aValueOf2 = a.valueOf;
takesAnObject(aValueOf2());
// set
b.valueOf = function() {
return {};
};
// ... on a built-in instance
var xValueOf: number = x.valueOf;
// error
takesANumber(x.valueOf());
// ... on an instance
var yValueOf: number = y.valueOf;
// error
takesAnObject(y.valueOf());
// ... on a literal
var strValueOf: string = \"foo\".valueOf();
var numValueOf: number = (123).valueOf();
var boolValueOf: boolean = true.valueOf();
//
// toLocaleString
//
// call
takesAString(a.toLocaleString());
// get
var aToLocaleString: () => string = a.toLocaleString;
var aToLocaleString2 = a.toLocaleString;
takesAString(aToLocaleString2());
// set
b.toLocaleString = function() {
return \"derp\";
};
// ... on a built-in instance
var xToLocaleString: number = x.toLocaleString;
// error
var xToLocaleString2: () => number = x.toLocaleString;
// error
takesAString(x.toLocaleString());
// ... on an instance
var yToLocaleString: number = y.toLocaleString;
// error
takesAString(y.toLocaleString());
//
// constructor
//
var k: Object = a.constructor;
(123).constructor;
"
`;