prettier/tests/flow/objects/__snapshots__/jsfmt.spec.js.snap

236 lines
7.5 KiB
Plaintext

// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`compatibility.js 1`] = `
====================================options=====================================
parsers: ["flow"]
printWidth: 80
| printWidth
=====================================input======================================
let tests = [
function(x: { x: { foo: string } }, y: { x: { bar: number } }) {
x = y; // 2 errors: \`foo\` not found in y.x; \`bar\` not found in x.x
},
function(x: { foo: string }, y: { foo: number }) {
x = y; // 2 errors: string !~> number; number !~> string
},
function(x: { x: { foo: string } }, y: { x: { foo: number } }) {
x = y; // 2 errors: string !~> number; number !~> string
},
function(x: { +foo: string }, y: { +foo: number }) {
x = y; // 1 error: number !~> string
},
function(x: { x: { +foo: string } }, y: { x: { +foo: number } }) {
x = y; // 2 errors: string !~> number; number !~> string
},
function(x: { -foo: string }, y: { -foo: number }) {
x = y; // 1 error: string !~> number
},
function(x: { x: { -foo: string } }, y: { x: { -foo: number } }) {
x = y; // 2 errors: string !~> number; number !~> string
},
];
=====================================output=====================================
let tests = [
function(x: { x: { foo: string } }, y: { x: { bar: number } }) {
x = y; // 2 errors: \`foo\` not found in y.x; \`bar\` not found in x.x
},
function(x: { foo: string }, y: { foo: number }) {
x = y; // 2 errors: string !~> number; number !~> string
},
function(x: { x: { foo: string } }, y: { x: { foo: number } }) {
x = y; // 2 errors: string !~> number; number !~> string
},
function(x: { +foo: string }, y: { +foo: number }) {
x = y; // 1 error: number !~> string
},
function(x: { x: { +foo: string } }, y: { x: { +foo: number } }) {
x = y; // 2 errors: string !~> number; number !~> string
},
function(x: { -foo: string }, y: { -foo: number }) {
x = y; // 1 error: string !~> number
},
function(x: { x: { -foo: string } }, y: { x: { -foo: number } }) {
x = y; // 2 errors: string !~> number; number !~> string
}
];
================================================================================
`;
exports[`conversion.js 1`] = `
====================================options=====================================
parsers: ["flow"]
printWidth: 80
| printWidth
=====================================input======================================
/* @flow */
(Object({foo: 'bar'}): {foo: string});
(Object("123"): String);
(Object(123): Number);
(Object(true): Boolean);
(Object(null): {});
(Object(undefined): {});
(Object(void(0)): {});
(Object(undefined): Number); // error
var x = Object(null);
x.foo = "bar";
var y = Object("123");
(y.charAt(0): string);
var z = Object(123); // error (next line makes this not match any signatures)
(z.charAt(0): string);
=====================================output=====================================
/* @flow */
(Object({ foo: "bar" }): { foo: string });
(Object("123"): String);
(Object(123): Number);
(Object(true): Boolean);
(Object(null): {});
(Object(undefined): {});
(Object(void 0): {});
(Object(undefined): Number); // error
var x = Object(null);
x.foo = "bar";
var y = Object("123");
(y.charAt(0): string);
var z = Object(123); // error (next line makes this not match any signatures)
(z.charAt(0): string);
================================================================================
`;
exports[`objects.js 1`] = `
====================================options=====================================
parsers: ["flow"]
printWidth: 80
| printWidth
=====================================input======================================
/* @flow */
var x : {'123': string, bar: string} = {'123': 'val', bar: 'bar'};
(x.foo : string); // error, key doesn't exist
(x['foo'] : string); // error, key doesn't exist
(x[123] : boolean); // TODO: use the number's value to error here
(x.bar: boolean); // error, string !~> boolean
(x['123'] : boolean); // error, string !~> boolean
x['123'] = false; // error, boolean !~> string
x[123] = false; // TODO: use the number's value to error here
x['foo'+'bar'] = 'derp'; // ok since we can't tell
(x[\`foo\`]: string); // error, key doesn't exist
var y : {foo: string} = {foo: 'bar'};
y['foo'] = 123; // error, number !~> string
y['bar'] = 'abc'; // error, property not found
(y['hasOwnProperty']: string); // error, prototype method is not a string
=====================================output=====================================
/* @flow */
var x: { "123": string, bar: string } = { "123": "val", bar: "bar" };
(x.foo: string); // error, key doesn't exist
(x["foo"]: string); // error, key doesn't exist
(x[123]: boolean); // TODO: use the number's value to error here
(x.bar: boolean); // error, string !~> boolean
(x["123"]: boolean); // error, string !~> boolean
x["123"] = false; // error, boolean !~> string
x[123] = false; // TODO: use the number's value to error here
x["foo" + "bar"] = "derp"; // ok since we can't tell
(x[\`foo\`]: string); // error, key doesn't exist
var y: { foo: string } = { foo: "bar" };
y["foo"] = 123; // error, number !~> string
y["bar"] = "abc"; // error, property not found
(y["hasOwnProperty"]: string); // error, prototype method is not a string
================================================================================
`;
exports[`unaliased_assign.js 1`] = `
====================================options=====================================
parsers: ["flow"]
printWidth: 80
| printWidth
=====================================input======================================
/**
* test handling of unaliased value assignment.
*
* An unaliased object rvalue may be assigned to a supertype lvalue,
* because later widening mutations on the rvalue can't break assumptions
* made by other lvalues.
*
* However, upon assignment the rvalue must take on the type of the
* lvalue, to avoid both false positives and false negatives
* (unsoundness), as shown below.
*
* @flow
*/
var glob: { x: string } = { x: "hey" };
function assign_then_alias() {
var obj: { x: string | number };
obj = { x: "hey" };
glob = obj; // error: subsequent assignment might make glob.x a number
}
function assign_then_widen() {
var obj: { x: string | number };
obj = { x: "hey" };
obj.x = 10; // ok, by lvalue's given type
}
=====================================output=====================================
/**
* test handling of unaliased value assignment.
*
* An unaliased object rvalue may be assigned to a supertype lvalue,
* because later widening mutations on the rvalue can't break assumptions
* made by other lvalues.
*
* However, upon assignment the rvalue must take on the type of the
* lvalue, to avoid both false positives and false negatives
* (unsoundness), as shown below.
*
* @flow
*/
var glob: { x: string } = { x: "hey" };
function assign_then_alias() {
var obj: { x: string | number };
obj = { x: "hey" };
glob = obj; // error: subsequent assignment might make glob.x a number
}
function assign_then_widen() {
var obj: { x: string | number };
obj = { x: "hey" };
obj.x = 10; // ok, by lvalue's given type
}
================================================================================
`;