Added tests.

This commit is contained in:
Daniel Rosenwasser
2014-09-11 14:52:14 -07:00
parent 65341816d8
commit f3f3994f25
9 changed files with 362 additions and 6 deletions

View File

@@ -0,0 +1,96 @@
==== tests/cases/conformance/types/typeRelationships/typeInference/genericCallToOverloadedMethodWithOverloadedArguments.ts (4 errors) ====
module m1 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m2 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
~~~~~~~~~~~~
!!! Argument of type '{ (n: number): Promise<number>; (s: string): Promise<string>; }' is not assignable to parameter of type '(x: number) => Promise<string>'.
}
//////////////////////////////////////
module m3 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m4 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
~~~~~~~~~~~~
!!! Argument of type '{ (n: number): Promise<number>; (s: string): Promise<string>; }' is not assignable to parameter of type '(x: number) => Promise<string>'.
}
//////////////////////////////////////
module m5 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => U, progress?: (preservation: any) => void): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
~~~~~~~~~~~~
!!! Argument of type '{ (n: number): Promise<number>; (s: string): Promise<string>; }' is not assignable to parameter of type '(x: number) => Promise<string>'.
}
//////////////////////////////////////
module m6 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
declare function testFunction(b: boolean): Promise<boolean>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
~~~~~~~~~~~~
!!! 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>'.
}

View File

@@ -0,0 +1,125 @@
//// [genericCallToOverloadedMethodWithOverloadedArguments.ts]
module m1 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m2 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m3 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m4 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m5 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => U, progress?: (preservation: any) => void): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m6 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
declare function testFunction(b: boolean): Promise<boolean>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//// [genericCallToOverloadedMethodWithOverloadedArguments.js]
var m1;
(function (m1) {
var numPromise;
var newPromise = numPromise.then(testFunction);
})(m1 || (m1 = {}));
//////////////////////////////////////
var m2;
(function (m2) {
var numPromise;
var newPromise = numPromise.then(testFunction);
})(m2 || (m2 = {}));
//////////////////////////////////////
var m3;
(function (m3) {
var numPromise;
var newPromise = numPromise.then(testFunction);
})(m3 || (m3 = {}));
//////////////////////////////////////
var m4;
(function (m4) {
var numPromise;
var newPromise = numPromise.then(testFunction);
})(m4 || (m4 = {}));
//////////////////////////////////////
var m5;
(function (m5) {
var numPromise;
var newPromise = numPromise.then(testFunction);
})(m5 || (m5 = {}));
//////////////////////////////////////
var m6;
(function (m6) {
var numPromise;
var newPromise = numPromise.then(testFunction);
})(m6 || (m6 = {}));

View File

@@ -22,6 +22,10 @@ module A {
return 'hello ' + s;
}
var ol = { s: 'hello', id: 2, isvalid: true };
declare class DC {
static x: number;
}
}
module Y {
@@ -47,6 +51,10 @@ module Y {
return 'hello ' + s;
}
export var ol = { s: 'hello', id: 2, isvalid: true };
export declare class DC {
static x: number;
}
}

View File

@@ -71,6 +71,13 @@ module A {
>s : string
>id : number
>isvalid : boolean
declare class DC {
>DC : DC
static x: number;
>x : number
}
}
module Y {
@@ -145,5 +152,12 @@ module Y {
>s : string
>id : number
>isvalid : boolean
export declare class DC {
>DC : DC
static x: number;
>x : number
}
}

View File

@@ -1,4 +1,4 @@
==== tests/cases/compiler/defaultArgsForwardReferencing.ts (10 errors) ====
==== tests/cases/conformance/functions/parameterInitializersForwardReferencing.ts (10 errors) ====
function left(a, b = a, c = b) {
a;
b;
@@ -55,4 +55,8 @@
~
!!! Initializer of parameter 'b' cannot reference identifier 'c' declared after it.
~
!!! Initializer of parameter 'c' cannot reference identifier 'd' declared after it.
!!! Initializer of parameter 'c' cannot reference identifier 'd' declared after it.
// Should not produce errors - can reference later parameters if they occur within a function expression initializer.
function f(a, b = function () { return c; }, c = b()) {
}

View File

@@ -1,4 +1,4 @@
//// [defaultArgsForwardReferencing.ts]
//// [parameterInitializersForwardReferencing.ts]
function left(a, b = a, c = b) {
a;
b;
@@ -35,9 +35,13 @@ class C {
}
// Function expressions
var x = (a = b, b = c, c = d) => { var d; };
var x = (a = b, b = c, c = d) => { var d; };
// Should not produce errors - can reference later parameters if they occur within a function expression initializer.
function f(a, b = function () { return c; }, c = b()) {
}
//// [defaultArgsForwardReferencing.js]
//// [parameterInitializersForwardReferencing.js]
function left(a, b, c) {
if (b === void 0) { b = a; }
if (c === void 0) { c = b; }
@@ -97,3 +101,10 @@ var x = function (a, b, c) {
if (c === void 0) { c = d; }
var d;
};
// Should not produce errors - can reference later parameters if they occur within a function expression initializer.
function f(a, b, c) {
if (b === void 0) { b = function () {
return c;
}; }
if (c === void 0) { c = b(); }
}

View File

@@ -34,4 +34,8 @@ class C {
}
// Function expressions
var x = (a = b, b = c, c = d) => { var d; };
var x = (a = b, b = c, c = d) => { var d; };
// Should not produce errors - can reference later parameters if they occur within a function expression initializer.
function f(a, b = function () { return c; }, c = b()) {
}

View File

@@ -21,6 +21,10 @@ module A {
return 'hello ' + s;
}
var ol = { s: 'hello', id: 2, isvalid: true };
declare class DC {
static x: number;
}
}
module Y {
@@ -46,4 +50,8 @@ module Y {
return 'hello ' + s;
}
export var ol = { s: 'hello', id: 2, isvalid: true };
export declare class DC {
static x: number;
}
}

View File

@@ -0,0 +1,86 @@
module m1 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m2 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m3 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m4 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m5 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => U, progress?: (preservation: any) => void): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}
//////////////////////////////////////
module m6 {
interface Promise<T> {
then<U>(cb: (x: T) => Promise<U>): Promise<U>;
then<U>(cb: (x: T) => Promise<U>, error?: (error: any) => Promise<U>): Promise<U>;
}
declare function testFunction(n: number): Promise<number>;
declare function testFunction(s: string): Promise<string>;
declare function testFunction(b: boolean): Promise<boolean>;
var numPromise: Promise<number>;
var newPromise = numPromise.then(testFunction);
}