Skip to content

Commit 6534181

Browse files
committed
Merge pull request #621 from Microsoft/specConformanceTests
Conformance coverage for spec change #589
2 parents 18c1789 + 5d299d4 commit 6534181

File tree

40 files changed

+792
-4
lines changed

40 files changed

+792
-4
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
==== tests/cases/conformance/ambient/ambientExternalModuleInsideNonAmbient.ts (1 errors) ====
2+
module M {
3+
export declare module "M" { }
4+
~~~
5+
!!! Ambient external modules cannot be nested in other modules.
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
//// [ambientExternalModuleInsideNonAmbient.ts]
2+
module M {
3+
export declare module "M" { }
4+
}
5+
6+
//// [ambientExternalModuleInsideNonAmbient.js]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
==== tests/cases/conformance/ambient/ambientExternalModuleInsideNonAmbientExternalModule.ts (1 errors) ====
2+
export declare module "M" { }
3+
~~~
4+
!!! Ambient external modules cannot be nested in other modules.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
//// [ambientExternalModuleInsideNonAmbientExternalModule.ts]
2+
export declare module "M" { }
3+
4+
//// [ambientExternalModuleInsideNonAmbientExternalModule.js]
5+
define(["require", "exports"], function (require, exports) {
6+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//// [tests/cases/conformance/ambient/ambientExternalModuleMerging.ts] ////
2+
3+
//// [ambientExternalModuleMerging_use.ts]
4+
import M = require("M");
5+
// Should be strings
6+
var x = M.x;
7+
var y = M.y;
8+
9+
//// [ambientExternalModuleMerging_declare.ts]
10+
declare module "M" {
11+
export var x: string;
12+
}
13+
14+
// Merge
15+
declare module "M" {
16+
export var y: string;
17+
}
18+
19+
//// [ambientExternalModuleMerging_use.js]
20+
define(["require", "exports", "M"], function (require, exports, M) {
21+
// Should be strings
22+
var x = M.x;
23+
var y = M.y;
24+
});
25+
//// [ambientExternalModuleMerging_declare.js]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
=== tests/cases/conformance/ambient/ambientExternalModuleMerging_use.ts ===
2+
import M = require("M");
3+
>M : typeof M
4+
5+
// Should be strings
6+
var x = M.x;
7+
>x : string
8+
>M.x : string
9+
>M : typeof M
10+
>x : string
11+
12+
var y = M.y;
13+
>y : string
14+
>M.y : string
15+
>M : typeof M
16+
>y : string
17+
18+
=== tests/cases/conformance/ambient/ambientExternalModuleMerging_declare.ts ===
19+
declare module "M" {
20+
export var x: string;
21+
>x : string
22+
}
23+
24+
// Merge
25+
declare module "M" {
26+
export var y: string;
27+
>y : string
28+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//// [ambientInsideNonAmbient.ts]
2+
module M {
3+
export declare var x;
4+
export declare function f();
5+
export declare class C { }
6+
export declare enum E { }
7+
export declare module M { }
8+
}
9+
10+
module M2 {
11+
declare var x;
12+
declare function f();
13+
declare class C { }
14+
declare enum E { }
15+
declare module M { }
16+
}
17+
18+
//// [ambientInsideNonAmbient.js]
19+
var M;
20+
(function (M) {
21+
})(M || (M = {}));
22+
var M2;
23+
(function (M2) {
24+
})(M2 || (M2 = {}));
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
=== tests/cases/conformance/ambient/ambientInsideNonAmbient.ts ===
2+
module M {
3+
>M : typeof M
4+
5+
export declare var x;
6+
>x : any
7+
8+
export declare function f();
9+
>f : () => any
10+
11+
export declare class C { }
12+
>C : C
13+
14+
export declare enum E { }
15+
>E : E
16+
17+
export declare module M { }
18+
>M : unknown
19+
}
20+
21+
module M2 {
22+
>M2 : typeof M2
23+
24+
declare var x;
25+
>x : any
26+
27+
declare function f();
28+
>f : () => any
29+
30+
declare class C { }
31+
>C : C
32+
33+
declare enum E { }
34+
>E : E
35+
36+
declare module M { }
37+
>M : unknown
38+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//// [ambientInsideNonAmbientExternalModule.ts]
2+
export declare var x;
3+
export declare function f();
4+
export declare class C { }
5+
export declare enum E { }
6+
export declare module M { }
7+
8+
//// [ambientInsideNonAmbientExternalModule.js]
9+
define(["require", "exports"], function (require, exports) {
10+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/conformance/ambient/ambientInsideNonAmbientExternalModule.ts ===
2+
export declare var x;
3+
>x : any
4+
5+
export declare function f();
6+
>f : () => any
7+
8+
export declare class C { }
9+
>C : C
10+
11+
export declare enum E { }
12+
>E : E
13+
14+
export declare module M { }
15+
>M : unknown
16+

tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.errors.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
==== tests/cases/compiler/augmentedTypeAssignmentCompatIndexSignature.ts (2 errors) ====
1+
==== tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts (2 errors) ====
22
interface Foo { a }
33
interface Bar { b }
44

tests/baselines/reference/augmentedTypeBracketAccessIndexSignature.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
=== tests/cases/compiler/augmentedTypeBracketAccessIndexSignature.ts ===
1+
=== tests/cases/conformance/types/members/augmentedTypeBracketAccessIndexSignature.ts ===
22
interface Foo { a }
33
>Foo : Foo
44
>a : any
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//// [classDoesNotDependOnPrivateMember.ts]
2+
module M {
3+
interface I { }
4+
export class C {
5+
private x: I;
6+
}
7+
}
8+
9+
//// [classDoesNotDependOnPrivateMember.js]
10+
var M;
11+
(function (M) {
12+
var C = (function () {
13+
function C() {
14+
}
15+
return C;
16+
})();
17+
M.C = C;
18+
})(M || (M = {}));
19+
20+
21+
//// [classDoesNotDependOnPrivateMember.d.ts]
22+
declare module M {
23+
class C {
24+
private x;
25+
}
26+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
=== tests/cases/conformance/declarationEmit/classDoesNotDependOnPrivateMember.ts ===
2+
module M {
3+
>M : typeof M
4+
5+
interface I { }
6+
>I : I
7+
8+
export class C {
9+
>C : C
10+
11+
private x: I;
12+
>x : I
13+
>I : I
14+
}
15+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//// [contextuallyTypedFunctionExpressionsAndReturnAnnotations.ts]
2+
declare function foo(x: (y: string) => (y2: number) => void);
3+
4+
// Contextually type the parameter even if there is a return annotation
5+
foo((y): (y2: number) => void => {
6+
var z = y.charAt(0); // Should be string
7+
return null;
8+
});
9+
10+
foo((y: string) => {
11+
return y2 => {
12+
var z = y2.toFixed(); // Should be string
13+
return 0;
14+
};
15+
});
16+
17+
//// [contextuallyTypedFunctionExpressionsAndReturnAnnotations.js]
18+
// Contextually type the parameter even if there is a return annotation
19+
foo(function (y) {
20+
var z = y.charAt(0); // Should be string
21+
return null;
22+
});
23+
foo(function (y) {
24+
return function (y2) {
25+
var z = y2.toFixed(); // Should be string
26+
return 0;
27+
};
28+
});
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
=== tests/cases/conformance/expressions/functions/contextuallyTypedFunctionExpressionsAndReturnAnnotations.ts ===
2+
declare function foo(x: (y: string) => (y2: number) => void);
3+
>foo : (x: (y: string) => (y2: number) => void) => any
4+
>x : (y: string) => (y2: number) => void
5+
>y : string
6+
>y2 : number
7+
8+
// Contextually type the parameter even if there is a return annotation
9+
foo((y): (y2: number) => void => {
10+
>foo((y): (y2: number) => void => { var z = y.charAt(0); // Should be string return null;}) : any
11+
>foo : (x: (y: string) => (y2: number) => void) => any
12+
>(y): (y2: number) => void => { var z = y.charAt(0); // Should be string return null;} : (y: string) => (y2: number) => void
13+
>y : string
14+
>y2 : number
15+
16+
var z = y.charAt(0); // Should be string
17+
>z : string
18+
>y.charAt(0) : string
19+
>y.charAt : (pos: number) => string
20+
>y : string
21+
>charAt : (pos: number) => string
22+
23+
return null;
24+
});
25+
26+
foo((y: string) => {
27+
>foo((y: string) => { return y2 => { var z = y2.toFixed(); // Should be string return 0; };}) : any
28+
>foo : (x: (y: string) => (y2: number) => void) => any
29+
>(y: string) => { return y2 => { var z = y2.toFixed(); // Should be string return 0; };} : (y: string) => (y2: number) => number
30+
>y : string
31+
32+
return y2 => {
33+
>y2 => { var z = y2.toFixed(); // Should be string return 0; } : (y2: number) => number
34+
>y2 : number
35+
36+
var z = y2.toFixed(); // Should be string
37+
>z : string
38+
>y2.toFixed() : string
39+
>y2.toFixed : (fractionDigits?: number) => string
40+
>y2 : number
41+
>toFixed : (fractionDigits?: number) => string
42+
43+
return 0;
44+
};
45+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [derivedInterfaceDoesNotHideBaseSignatures.ts]
2+
// Derived interfaces no longer hide signatures from base types, so these signatures are always compatible.
3+
interface Base {
4+
(): string;
5+
new (x: string): number;
6+
}
7+
8+
interface Derived extends Base {
9+
(): number;
10+
new (x: string): string;
11+
}
12+
13+
//// [derivedInterfaceDoesNotHideBaseSignatures.js]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
=== tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceDoesNotHideBaseSignatures.ts ===
2+
// Derived interfaces no longer hide signatures from base types, so these signatures are always compatible.
3+
interface Base {
4+
>Base : Base
5+
6+
(): string;
7+
new (x: string): number;
8+
>x : string
9+
}
10+
11+
interface Derived extends Base {
12+
>Derived : Derived
13+
>Base : Base
14+
15+
(): number;
16+
new (x: string): string;
17+
>x : string
18+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
==== tests/cases/conformance/enums/enumConstantMembers.ts (2 errors) ====
2+
// Constant members allow negatives, but not decimals. Also hex literals are allowed
3+
enum E1 {
4+
a = 1,
5+
b
6+
}
7+
enum E2 {
8+
a = - 1,
9+
b
10+
}
11+
enum E3 {
12+
a = 0.1,
13+
b // Error because 0.1 is not a constant
14+
~
15+
!!! Enum member must have initializer.
16+
}
17+
18+
declare enum E4 {
19+
a = 1,
20+
b = -1,
21+
c = 0.1 // Not a constant
22+
~
23+
!!! Ambient enum elements can only have integer literal initializers.
24+
}

tests/baselines/reference/forgottenNew.errors.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
==== tests/cases/compiler/forgottenNew.ts (1 errors) ====
1+
==== tests/cases/conformance/expressions/functionCalls/forgottenNew.ts (1 errors) ====
22
module Tools {
33
export class NullLogger { }
44
}

tests/baselines/reference/indexSignatureTypeInference.errors.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
==== tests/cases/compiler/indexSignatureTypeInference.ts (1 errors) ====
1+
==== tests/cases/conformance/types/typeRelationships/typeInference/indexSignatureTypeInference.ts (1 errors) ====
22
interface NumberMap<T> {
33
[index: number]: T;
44
}

0 commit comments

Comments
 (0)