403 lines
6.0 KiB
Plaintext
403 lines
6.0 KiB
Plaintext
exports[`test more_switch.js 1`] = `
|
|
"/* @flow */
|
|
|
|
function foo(x): number {
|
|
switch (x) {
|
|
case 0:
|
|
case 1: return 1;
|
|
default: throw new Error(\'hi\');
|
|
}
|
|
}
|
|
|
|
function bar(x) {
|
|
switch (x) {
|
|
case 0: break;
|
|
default: return;
|
|
}
|
|
1;
|
|
}
|
|
|
|
function baz(x): number {
|
|
switch (x) {
|
|
case 0: break;
|
|
case 1: return 1;
|
|
default: throw new Error(\'hi\');
|
|
}
|
|
return 2;
|
|
}
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
/* @flow */
|
|
|
|
function foo(x): number {
|
|
switch (x) {
|
|
case 0:
|
|
case 1:
|
|
return 1;
|
|
default:
|
|
throw new Error(\"hi\");
|
|
}
|
|
}
|
|
|
|
function bar(x) {
|
|
switch (x) {
|
|
case 0:
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
1;
|
|
}
|
|
|
|
function baz(x): number {
|
|
switch (x) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
return 1;
|
|
default:
|
|
throw new Error(\"hi\");
|
|
}
|
|
return 2;
|
|
}
|
|
"
|
|
`;
|
|
|
|
exports[`test switch.js 1`] = `
|
|
"/**
|
|
* @flow
|
|
*/
|
|
function foo(
|
|
): number {
|
|
switch (\'foo\') {
|
|
case \'foo\':
|
|
return 1;
|
|
}
|
|
return 2;
|
|
}
|
|
|
|
function bar() {
|
|
switch (\'bar\') {
|
|
case \'bar\':
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function qux(b) {
|
|
var x = b? 0: \"\";
|
|
switch(\'qux\') {
|
|
case \'\':
|
|
x = 0;
|
|
case \'qux\':
|
|
x = x*x;
|
|
}
|
|
}
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
/**
|
|
* @flow
|
|
*/
|
|
function foo(): number {
|
|
switch (\"foo\") {
|
|
case \"foo\":
|
|
return 1;
|
|
}
|
|
return 2;
|
|
}
|
|
|
|
function bar() {
|
|
switch (\"bar\") {
|
|
case \"bar\":
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function qux(b) {
|
|
var x = b ? 0 : \"\";
|
|
switch (\"qux\") {
|
|
case \"\":
|
|
x = 0;
|
|
case \"qux\":
|
|
x = x * x;
|
|
}
|
|
}
|
|
"
|
|
`;
|
|
|
|
exports[`test switch_default_fallthrough.js 1`] = `
|
|
"/**
|
|
* @flow
|
|
*/
|
|
function foo(x : mixed): string {
|
|
var a = \"\";
|
|
var b = \"\";
|
|
|
|
switch (x) {
|
|
case \"foo\":
|
|
a = 0;
|
|
default:
|
|
b = 0;
|
|
}
|
|
|
|
// a is now string | number
|
|
(a : string); // error, string | number ~/> string
|
|
(a : number); // error, string | number ~/> number
|
|
|
|
// b is now number
|
|
(b : number); // ok
|
|
return b; // error, number ~/> string
|
|
}
|
|
|
|
function baz(x: mixed): number {
|
|
var a = \"\";
|
|
var b = \"\";
|
|
|
|
switch (x) {
|
|
case \"baz\":
|
|
a = 0;
|
|
break;
|
|
case \"bar\":
|
|
a = \"\";
|
|
default:
|
|
b = 0;
|
|
}
|
|
|
|
// a is now string | number
|
|
(a : string); // error, string | number ~/> string
|
|
(a : number); // error, string | number ~/> number
|
|
|
|
// b is now string | number
|
|
(b : string); // error, string | number ~/> string
|
|
(b : number); // error, string | number ~/> number
|
|
|
|
return a+b; // error, string ~/> number
|
|
}
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
/**
|
|
* @flow
|
|
*/
|
|
function foo(x: mixed): string {
|
|
var a = \"\";
|
|
var b = \"\";
|
|
|
|
switch (x) {
|
|
case \"foo\":
|
|
a = 0;
|
|
default:
|
|
b = 0;
|
|
}
|
|
|
|
// a is now string | number
|
|
(a: string);
|
|
// error, string | number ~/> string
|
|
(a: number);
|
|
// error, string | number ~/> number
|
|
// b is now number
|
|
(b: number);
|
|
// ok
|
|
return b; // error, number ~/> string
|
|
}
|
|
|
|
function baz(x: mixed): number {
|
|
var a = \"\";
|
|
var b = \"\";
|
|
|
|
switch (x) {
|
|
case \"baz\":
|
|
a = 0;
|
|
break;
|
|
case \"bar\":
|
|
a = \"\";
|
|
default:
|
|
b = 0;
|
|
}
|
|
|
|
// a is now string | number
|
|
(a: string);
|
|
// error, string | number ~/> string
|
|
(a: number);
|
|
// error, string | number ~/> number
|
|
// b is now string | number
|
|
(b: string);
|
|
// error, string | number ~/> string
|
|
(b: number);
|
|
// error, string | number ~/> number
|
|
return a + b; // error, string ~/> number
|
|
}
|
|
"
|
|
`;
|
|
|
|
exports[`test trailing_cases.js 1`] = `
|
|
"/**
|
|
* trailing cases are allowed - spot checks that we handle them as usual
|
|
* @flow
|
|
*/
|
|
function f1(i) {
|
|
var x;
|
|
|
|
switch (i) {
|
|
case 0:
|
|
x = 0;
|
|
break;
|
|
case 1:
|
|
x = 1;
|
|
break;
|
|
default:
|
|
x = -1;
|
|
break;
|
|
case 2:
|
|
x = \"2\";
|
|
break;
|
|
}
|
|
|
|
var y:number = x; // error, number | string ~/> number
|
|
}
|
|
|
|
function f2(i) {
|
|
var x;
|
|
|
|
switch (i) {
|
|
case 0:
|
|
case 1:
|
|
default:
|
|
x = 1;
|
|
break;
|
|
case 2:
|
|
// does not fall through default
|
|
}
|
|
|
|
var y:number = x; // error, number | uninitialized ~/> number
|
|
}
|
|
|
|
function f3(i) {
|
|
var x;
|
|
|
|
switch (i) {
|
|
case 0:
|
|
case 1:
|
|
default:
|
|
// falls through to subsequent cases
|
|
case 2:
|
|
x = 1;
|
|
}
|
|
|
|
var y:number = x; // no error
|
|
}
|
|
|
|
function foo(x): number {
|
|
switch (x) {
|
|
case 0:
|
|
default: throw new Error(\'hi\');
|
|
case 1: return 1;
|
|
}
|
|
}
|
|
|
|
function bar(x) {
|
|
switch (x) {
|
|
default: return;
|
|
case 0: break;
|
|
}
|
|
1;
|
|
}
|
|
|
|
function baz(x): number {
|
|
switch (x) {
|
|
case 0: break;
|
|
default: throw new Error(\'hi\');
|
|
case 1: return 1;
|
|
}
|
|
return 2;
|
|
}
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
/**
|
|
* trailing cases are allowed - spot checks that we handle them as usual
|
|
* @flow
|
|
*/
|
|
function f1(i) {
|
|
var x;
|
|
|
|
switch (i) {
|
|
case 0:
|
|
x = 0;
|
|
break;
|
|
case 1:
|
|
x = 1;
|
|
break;
|
|
default:
|
|
x = -1;
|
|
break;
|
|
case 2:
|
|
x = \"2\";
|
|
break;
|
|
}
|
|
|
|
var y: number = x; // error, number | string ~/> number
|
|
}
|
|
|
|
function f2(i) {
|
|
var x;
|
|
|
|
switch (i) {
|
|
case 0:
|
|
case 1:
|
|
default:
|
|
x = 1;
|
|
break;
|
|
// does not fall through default
|
|
case 2:
|
|
}
|
|
|
|
var y: number = x; // error, number | uninitialized ~/> number
|
|
}
|
|
|
|
function f3(i) {
|
|
var x;
|
|
|
|
switch (i) {
|
|
case 0:
|
|
case 1:
|
|
default:
|
|
// falls through to subsequent cases
|
|
case 2:
|
|
x = 1;
|
|
}
|
|
|
|
var y: number = x; // no error
|
|
}
|
|
|
|
function foo(x): number {
|
|
switch (x) {
|
|
case 0:
|
|
default:
|
|
throw new Error(\"hi\");
|
|
case 1:
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
function bar(x) {
|
|
switch (x) {
|
|
default:
|
|
return;
|
|
case 0:
|
|
break;
|
|
}
|
|
1;
|
|
}
|
|
|
|
function baz(x): number {
|
|
switch (x) {
|
|
case 0:
|
|
break;
|
|
default:
|
|
throw new Error(\"hi\");
|
|
case 1:
|
|
return 1;
|
|
}
|
|
return 2;
|
|
}
|
|
"
|
|
`;
|