Skip to content

Commit f3f3994

Browse files
Added tests.
1 parent 6534181 commit f3f3994

9 files changed

+362
-6
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
==== tests/cases/conformance/types/typeRelationships/typeInference/genericCallToOverloadedMethodWithOverloadedArguments.ts (4 errors) ====
2+
3+
module m1 {
4+
interface Promise<T> {
5+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
6+
}
7+
8+
declare function testFunction(n: number): Promise<number>;
9+
10+
var numPromise: Promise<number>;
11+
var newPromise = numPromise.then(testFunction);
12+
}
13+
14+
//////////////////////////////////////
15+
16+
module m2 {
17+
interface Promise<T> {
18+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
19+
}
20+
21+
declare function testFunction(n: number): Promise<number>;
22+
declare function testFunction(s: string): Promise<string>;
23+
24+
var numPromise: Promise<number>;
25+
var newPromise = numPromise.then(testFunction);
26+
~~~~~~~~~~~~
27+
!!! Argument of type '{ (n: number): Promise<number>; (s: string): Promise<string>; }' is not assignable to parameter of type '(x: number) => Promise<string>'.
28+
}
29+
30+
//////////////////////////////////////
31+
32+
module m3 {
33+
interface Promise<T> {
34+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
35+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
36+
}
37+
38+
declare function testFunction(n: number): Promise<number>;
39+
40+
var numPromise: Promise<number>;
41+
var newPromise = numPromise.then(testFunction);
42+
}
43+
44+
//////////////////////////////////////
45+
46+
module m4 {
47+
interface Promise<T> {
48+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
49+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
50+
}
51+
52+
declare function testFunction(n: number): Promise<number>;
53+
declare function testFunction(s: string): Promise<string>;
54+
55+
var numPromise: Promise<number>;
56+
var newPromise = numPromise.then(testFunction);
57+
~~~~~~~~~~~~
58+
!!! Argument of type '{ (n: number): Promise<number>; (s: string): Promise<string>; }' is not assignable to parameter of type '(x: number) => Promise<string>'.
59+
}
60+
61+
//////////////////////////////////////
62+
63+
module m5 {
64+
interface Promise<T> {
65+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
66+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
67+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => U, progress?: (preservation: any) => void): Promise<U>;
68+
}
69+
70+
declare function testFunction(n: number): Promise<number>;
71+
declare function testFunction(s: string): Promise<string>;
72+
73+
var numPromise: Promise<number>;
74+
var newPromise = numPromise.then(testFunction);
75+
~~~~~~~~~~~~
76+
!!! Argument of type '{ (n: number): Promise<number>; (s: string): Promise<string>; }' is not assignable to parameter of type '(x: number) => Promise<string>'.
77+
}
78+
79+
//////////////////////////////////////
80+
81+
module m6 {
82+
interface Promise<T> {
83+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
84+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
85+
}
86+
87+
declare function testFunction(n: number): Promise<number>;
88+
declare function testFunction(s: string): Promise<string>;
89+
declare function testFunction(b: boolean): Promise<boolean>;
90+
91+
var numPromise: Promise<number>;
92+
var newPromise = numPromise.then(testFunction);
93+
~~~~~~~~~~~~
94+
!!! Argument of type '{ (n: number): Promise<number>; (s: string): Promise<string>; (b: boolean): Promise<boolean>; }' is not assignable to parameter of type '(x: number) => Promise<boolean>'.
95+
}
96+
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
//// [genericCallToOverloadedMethodWithOverloadedArguments.ts]
2+
3+
module m1 {
4+
interface Promise<T> {
5+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
6+
}
7+
8+
declare function testFunction(n: number): Promise<number>;
9+
10+
var numPromise: Promise<number>;
11+
var newPromise = numPromise.then(testFunction);
12+
}
13+
14+
//////////////////////////////////////
15+
16+
module m2 {
17+
interface Promise<T> {
18+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
19+
}
20+
21+
declare function testFunction(n: number): Promise<number>;
22+
declare function testFunction(s: string): Promise<string>;
23+
24+
var numPromise: Promise<number>;
25+
var newPromise = numPromise.then(testFunction);
26+
}
27+
28+
//////////////////////////////////////
29+
30+
module m3 {
31+
interface Promise<T> {
32+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
33+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
34+
}
35+
36+
declare function testFunction(n: number): Promise<number>;
37+
38+
var numPromise: Promise<number>;
39+
var newPromise = numPromise.then(testFunction);
40+
}
41+
42+
//////////////////////////////////////
43+
44+
module m4 {
45+
interface Promise<T> {
46+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
47+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
48+
}
49+
50+
declare function testFunction(n: number): Promise<number>;
51+
declare function testFunction(s: string): Promise<string>;
52+
53+
var numPromise: Promise<number>;
54+
var newPromise = numPromise.then(testFunction);
55+
}
56+
57+
//////////////////////////////////////
58+
59+
module m5 {
60+
interface Promise<T> {
61+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
62+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
63+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => U, progress?: (preservation: any) => void): Promise<U>;
64+
}
65+
66+
declare function testFunction(n: number): Promise<number>;
67+
declare function testFunction(s: string): Promise<string>;
68+
69+
var numPromise: Promise<number>;
70+
var newPromise = numPromise.then(testFunction);
71+
}
72+
73+
//////////////////////////////////////
74+
75+
module m6 {
76+
interface Promise<T> {
77+
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
78+
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
79+
}
80+
81+
declare function testFunction(n: number): Promise<number>;
82+
declare function testFunction(s: string): Promise<string>;
83+
declare function testFunction(b: boolean): Promise<boolean>;
84+
85+
var numPromise: Promise<number>;
86+
var newPromise = numPromise.then(testFunction);
87+
}
88+
89+
90+
//// [genericCallToOverloadedMethodWithOverloadedArguments.js]
91+
var m1;
92+
(function (m1) {
93+
var numPromise;
94+
var newPromise = numPromise.then(testFunction);
95+
})(m1 || (m1 = {}));
96+
//////////////////////////////////////
97+
var m2;
98+
(function (m2) {
99+
var numPromise;
100+
var newPromise = numPromise.then(testFunction);
101+
})(m2 || (m2 = {}));
102+
//////////////////////////////////////
103+
var m3;
104+
(function (m3) {
105+
var numPromise;
106+
var newPromise = numPromise.then(testFunction);
107+
})(m3 || (m3 = {}));
108+
//////////////////////////////////////
109+
var m4;
110+
(function (m4) {
111+
var numPromise;
112+
var newPromise = numPromise.then(testFunction);
113+
})(m4 || (m4 = {}));
114+
//////////////////////////////////////
115+
var m5;
116+
(function (m5) {
117+
var numPromise;
118+
var newPromise = numPromise.then(testFunction);
119+
})(m5 || (m5 = {}));
120+
//////////////////////////////////////
121+
var m6;
122+
(function (m6) {
123+
var numPromise;
124+
var newPromise = numPromise.then(testFunction);
125+
})(m6 || (m6 = {}));

tests/baselines/reference/moduleWithStatementsOfEveryKind.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ module A {
2222
return 'hello ' + s;
2323
}
2424
var ol = { s: 'hello', id: 2, isvalid: true };
25+
26+
declare class DC {
27+
static x: number;
28+
}
2529
}
2630

2731
module Y {
@@ -47,6 +51,10 @@ module Y {
4751
return 'hello ' + s;
4852
}
4953
export var ol = { s: 'hello', id: 2, isvalid: true };
54+
55+
export declare class DC {
56+
static x: number;
57+
}
5058
}
5159

5260

tests/baselines/reference/moduleWithStatementsOfEveryKind.types

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ module A {
7171
>s : string
7272
>id : number
7373
>isvalid : boolean
74+
75+
declare class DC {
76+
>DC : DC
77+
78+
static x: number;
79+
>x : number
80+
}
7481
}
7582

7683
module Y {
@@ -145,5 +152,12 @@ module Y {
145152
>s : string
146153
>id : number
147154
>isvalid : boolean
155+
156+
export declare class DC {
157+
>DC : DC
158+
159+
static x: number;
160+
>x : number
161+
}
148162
}
149163

tests/baselines/reference/defaultArgsForwardReferencing.errors.txt renamed to tests/baselines/reference/parameterInitializersForwardReferencing.errors.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
==== tests/cases/compiler/defaultArgsForwardReferencing.ts (10 errors) ====
1+
==== tests/cases/conformance/functions/parameterInitializersForwardReferencing.ts (10 errors) ====
22
function left(a, b = a, c = b) {
33
a;
44
b;
@@ -55,4 +55,8 @@
5555
~
5656
!!! Initializer of parameter 'b' cannot reference identifier 'c' declared after it.
5757
~
58-
!!! Initializer of parameter 'c' cannot reference identifier 'd' declared after it.
58+
!!! Initializer of parameter 'c' cannot reference identifier 'd' declared after it.
59+
60+
// Should not produce errors - can reference later parameters if they occur within a function expression initializer.
61+
function f(a, b = function () { return c; }, c = b()) {
62+
}

tests/baselines/reference/defaultArgsForwardReferencing.js renamed to tests/baselines/reference/parameterInitializersForwardReferencing.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//// [defaultArgsForwardReferencing.ts]
1+
//// [parameterInitializersForwardReferencing.ts]
22
function left(a, b = a, c = b) {
33
a;
44
b;
@@ -35,9 +35,13 @@ class C {
3535
}
3636

3737
// Function expressions
38-
var x = (a = b, b = c, c = d) => { var d; };
38+
var x = (a = b, b = c, c = d) => { var d; };
39+
40+
// Should not produce errors - can reference later parameters if they occur within a function expression initializer.
41+
function f(a, b = function () { return c; }, c = b()) {
42+
}
3943

40-
//// [defaultArgsForwardReferencing.js]
44+
//// [parameterInitializersForwardReferencing.js]
4145
function left(a, b, c) {
4246
if (b === void 0) { b = a; }
4347
if (c === void 0) { c = b; }
@@ -97,3 +101,10 @@ var x = function (a, b, c) {
97101
if (c === void 0) { c = d; }
98102
var d;
99103
};
104+
// Should not produce errors - can reference later parameters if they occur within a function expression initializer.
105+
function f(a, b, c) {
106+
if (b === void 0) { b = function () {
107+
return c;
108+
}; }
109+
if (c === void 0) { c = b(); }
110+
}

tests/cases/compiler/defaultArgsForwardReferencing.ts renamed to tests/cases/conformance/functions/parameterInitializersForwardReferencing.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@ class C {
3434
}
3535

3636
// Function expressions
37-
var x = (a = b, b = c, c = d) => { var d; };
37+
var x = (a = b, b = c, c = d) => { var d; };
38+
39+
// Should not produce errors - can reference later parameters if they occur within a function expression initializer.
40+
function f(a, b = function () { return c; }, c = b()) {
41+
}

tests/cases/conformance/internalModules/moduleBody/moduleWithStatementsOfEveryKind.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ module A {
2121
return 'hello ' + s;
2222
}
2323
var ol = { s: 'hello', id: 2, isvalid: true };
24+
25+
declare class DC {
26+
static x: number;
27+
}
2428
}
2529

2630
module Y {
@@ -46,4 +50,8 @@ module Y {
4650
return 'hello ' + s;
4751
}
4852
export var ol = { s: 'hello', id: 2, isvalid: true };
53+
54+
export declare class DC {
55+
static x: number;
56+
}
4957
}

0 commit comments

Comments
 (0)