Files
test-repo/tests/this/__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

207 lines
4.4 KiB
Plaintext

exports[`test This.js 1`] = `
"/* @providesModule This */
function F() { this.x = 0; }
F.prototype.m = function() { this.y = 0; }
function foo(p:string) { }
var o1 = new F(); // sets o1.x to 0
o1.x = \"\";
foo(o1.x); // ok by definite assignment
var o2 = new F();
o1.y = 0;
o2.y = \"\";
foo(o2.y); // setting o1.y to 0 has no effect on o2.y
var o3 = new F();
o3.m(); // sets o3.y to 0
o3.y = \"\";
foo(o3.y); // ok by definite assignment
foo(o2.y); // setting o3.y to 0 has no effect on o2.y
/*
* this bindings:
*/
/* standard functions may rebind this */
function f1() : number {
return this.x
}
var f1_1 = f1.bind({x: 0})(); // ok
var f1_2 : string = f1.bind({x: 0})(); // error, number -> string
var f1_3 = f1.bind({x: \"\"})(); // error, string -> number
// TODO make this error blame the call site, rather than the function body
var f1_4 = f1(); // error, (global object).x
/* arrow functions bind this at point of definition */
/* top level arrow functions bind this to global object */
var a1 = () => {
return this.x
}
var ax = a1(); // error, (this:mixed).x
/* nested arrows bind enclosing this (which may itself rebind) */
function f2() : number {
var a2 = () => { return this.x };
return a2()
}
var f2_1 = f2.bind({x: 0})(); // ok
var f2_2 : string = f2.bind({x: 0})(); // error, number -> string
var f2_3 = f2.bind({x: \"\"})(); // error, string -> number
// TODO make this error blame the call site, rather than the function body
var f2_4 = f2(); // error, (global object).x
(this: void);
module.exports = true;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @providesModule This */
function F() {
this.x = 0;
}
F.prototype.m = function() {
this.y = 0;
};
function foo(p: string) {
}
var o1 = new F();
// sets o1.x to 0
o1.x = \"\";
foo(o1.x);
// ok by definite assignment
var o2 = new F();
o1.y = 0;
o2.y = \"\";
foo(o2.y);
// setting o1.y to 0 has no effect on o2.y
var o3 = new F();
o3.m();
// sets o3.y to 0
o3.y = \"\";
foo(o3.y);
// ok by definite assignment
foo(o2.y);
// setting o3.y to 0 has no effect on o2.y
/*
* this bindings:
*/
/* standard functions may rebind this */
function f1(): number {
return this.x;
}
var f1_1 = f1.bind({ x: 0 })();
// ok
var f1_2: string = f1.bind({ x: 0 })();
// error, number -> string
var f1_3 = f1.bind({ x: \"\" })();
// error, string -> number
// TODO make this error blame the call site, rather than the function body
var f1_4 = f1();
// error, (global object).x
/* arrow functions bind this at point of definition */
/* top level arrow functions bind this to global object */
var a1 = () => {
return this.x;
};
var ax = a1();
// error, (this:mixed).x
/* nested arrows bind enclosing this (which may itself rebind) */
function f2(): number {
var a2 = () => {
return this.x;
};
return a2();
}
var f2_1 = f2.bind({ x: 0 })();
// ok
var f2_2: string = f2.bind({ x: 0 })();
// error, number -> string
var f2_3 = f2.bind({ x: \"\" })();
// error, string -> number
// TODO make this error blame the call site, rather than the function body
var f2_4 = f2();
// error, (global object).x
(this: void);
module.exports = true;
"
`;
exports[`test arrows.js 1`] = `
"class C {
foo() {
return () => { return this.bar(); }; // OK, since this: C
}
bar() { return this; } // return type is C
}
var c = new C;
var f = c.foo();
var i = f(); // OK
(i: C); // OK
class D extends C { }
var d = new D;
var g = d.foo();
var j = g(); // OK
(j: D); // error, since return type of bar is C, not the type of \`this\`
class E {
foo(x: number) { }
}
class F extends E {
foo() { // OK to override with generalization
(() => {
super.foo(\"\"); // find super method, error due to incorrect arg
})();
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class C {
foo() {
return () => {
return this.bar();
}; // OK, since this: C
}
bar() {
return this;
} // return type is C
}
var c = new C();
var f = c.foo();
var i = f();
// OK
(i: C);
// OK
class D extends C {}
var d = new D();
var g = d.foo();
var j = g();
// OK
(j: D);
// error, since return type of bar is C, not the type of \`this\`
class E {
foo(x: number) {
}
}
class F extends E {
foo() {
// OK to override with generalization
(() => {
super.foo(\"\"); // find super method, error due to incorrect arg
})();
}
}
"
`;