Add strictNullChecks test for object spread

This commit is contained in:
Nathan Shively-Sanders 2016-11-09 13:40:21 -08:00
parent fcf32c444f
commit 9b1f43bdda
4 changed files with 212 additions and 0 deletions

View file

@ -0,0 +1,43 @@
//// [objectSpreadStrictNull.ts]
function f(
definiteBoolean: { sn: boolean },
definiteString: { sn: string },
optionalString: { sn?: string },
optionalNumber: { sn?: number },
undefinedString: { sn: string | undefined },
undefinedNumber: { sn: number | undefined }) {
// optional
let optionalUnionStops: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
// undefined
let undefinedUnionStops: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...undefinedNumber };
let undefinedUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...undefinedString, ...undefinedNumber };
let allUndefined: { sn: string | number | undefined } = { ...undefinedString, ...undefinedNumber };
let undefinedWithOptionalContinues: { sn: string | number | boolean } = { ...definiteBoolean, ...undefinedString, ...optionalNumber };
}
//// [objectSpreadStrictNull.js]
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
function f(definiteBoolean, definiteString, optionalString, optionalNumber, undefinedString, undefinedNumber) {
// optional
var optionalUnionStops = __assign({}, definiteBoolean, definiteString, optionalNumber);
var optionalUnionDuplicates = __assign({}, definiteBoolean, definiteString, optionalString, optionalNumber);
var allOptional = __assign({}, optionalString, optionalNumber);
// undefined
var undefinedUnionStops = __assign({}, definiteBoolean, definiteString, undefinedNumber);
var undefinedUnionDuplicates = __assign({}, definiteBoolean, definiteString, undefinedString, undefinedNumber);
var allUndefined = __assign({}, undefinedString, undefinedNumber);
var undefinedWithOptionalContinues = __assign({}, definiteBoolean, undefinedString, optionalNumber);
}

View file

@ -0,0 +1,60 @@
=== tests/cases/conformance/types/spread/objectSpreadStrictNull.ts ===
function f(
>f : Symbol(f, Decl(objectSpreadStrictNull.ts, 0, 0))
definiteBoolean: { sn: boolean },
>definiteBoolean : Symbol(definiteBoolean, Decl(objectSpreadStrictNull.ts, 1, 11))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 2, 22))
definiteString: { sn: string },
>definiteString : Symbol(definiteString, Decl(objectSpreadStrictNull.ts, 2, 37))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 3, 21))
optionalString: { sn?: string },
>optionalString : Symbol(optionalString, Decl(objectSpreadStrictNull.ts, 3, 35))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 4, 21))
optionalNumber: { sn?: number },
>optionalNumber : Symbol(optionalNumber, Decl(objectSpreadStrictNull.ts, 4, 36))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 5, 21))
undefinedString: { sn: string | undefined },
>undefinedString : Symbol(undefinedString, Decl(objectSpreadStrictNull.ts, 5, 36))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 6, 22))
undefinedNumber: { sn: number | undefined }) {
>undefinedNumber : Symbol(undefinedNumber, Decl(objectSpreadStrictNull.ts, 6, 48))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 7, 22))
// optional
let optionalUnionStops: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
>optionalUnionStops : Symbol(optionalUnionStops, Decl(objectSpreadStrictNull.ts, 9, 7))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 9, 29))
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
>optionalUnionDuplicates : Symbol(optionalUnionDuplicates, Decl(objectSpreadStrictNull.ts, 10, 7))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 10, 34))
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
>allOptional : Symbol(allOptional, Decl(objectSpreadStrictNull.ts, 11, 7))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 11, 22))
// undefined
let undefinedUnionStops: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...undefinedNumber };
>undefinedUnionStops : Symbol(undefinedUnionStops, Decl(objectSpreadStrictNull.ts, 14, 7))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 14, 30))
let undefinedUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...undefinedString, ...undefinedNumber };
>undefinedUnionDuplicates : Symbol(undefinedUnionDuplicates, Decl(objectSpreadStrictNull.ts, 15, 7))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 15, 35))
let allUndefined: { sn: string | number | undefined } = { ...undefinedString, ...undefinedNumber };
>allUndefined : Symbol(allUndefined, Decl(objectSpreadStrictNull.ts, 16, 7))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 16, 23))
let undefinedWithOptionalContinues: { sn: string | number | boolean } = { ...definiteBoolean, ...undefinedString, ...optionalNumber };
>undefinedWithOptionalContinues : Symbol(undefinedWithOptionalContinues, Decl(objectSpreadStrictNull.ts, 18, 7))
>sn : Symbol(sn, Decl(objectSpreadStrictNull.ts, 18, 41))
}

View file

@ -0,0 +1,88 @@
=== tests/cases/conformance/types/spread/objectSpreadStrictNull.ts ===
function f(
>f : (definiteBoolean: { sn: boolean; }, definiteString: { sn: string; }, optionalString: { sn?: string | undefined; }, optionalNumber: { sn?: number | undefined; }, undefinedString: { sn: string | undefined; }, undefinedNumber: { sn: number | undefined; }) => void
definiteBoolean: { sn: boolean },
>definiteBoolean : { sn: boolean; }
>sn : boolean
definiteString: { sn: string },
>definiteString : { sn: string; }
>sn : string
optionalString: { sn?: string },
>optionalString : { sn?: string | undefined; }
>sn : string | undefined
optionalNumber: { sn?: number },
>optionalNumber : { sn?: number | undefined; }
>sn : number | undefined
undefinedString: { sn: string | undefined },
>undefinedString : { sn: string | undefined; }
>sn : string | undefined
undefinedNumber: { sn: number | undefined }) {
>undefinedNumber : { sn: number | undefined; }
>sn : number | undefined
// optional
let optionalUnionStops: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
>optionalUnionStops : { sn: string | number; }
>sn : string | number
>{ ...definiteBoolean, ...definiteString, ...optionalNumber } : { sn: string | number; }
>definiteBoolean : any
>definiteString : any
>optionalNumber : any
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
>optionalUnionDuplicates : { sn: string | number; }
>sn : string | number
>{ ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber } : { sn: string | number; }
>definiteBoolean : any
>definiteString : any
>optionalString : any
>optionalNumber : any
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
>allOptional : { sn?: string | number | undefined; }
>sn : string | number | undefined
>{ ...optionalString, ...optionalNumber } : { sn?: string | number | undefined; }
>optionalString : any
>optionalNumber : any
// undefined
let undefinedUnionStops: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...undefinedNumber };
>undefinedUnionStops : { sn: string | number; }
>sn : string | number
>{ ...definiteBoolean, ...definiteString, ...undefinedNumber } : { sn: string | number; }
>definiteBoolean : any
>definiteString : any
>undefinedNumber : any
let undefinedUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...undefinedString, ...undefinedNumber };
>undefinedUnionDuplicates : { sn: string | number; }
>sn : string | number
>{ ...definiteBoolean, ...definiteString, ...undefinedString, ...undefinedNumber } : { sn: string | number; }
>definiteBoolean : any
>definiteString : any
>undefinedString : any
>undefinedNumber : any
let allUndefined: { sn: string | number | undefined } = { ...undefinedString, ...undefinedNumber };
>allUndefined : { sn: string | number | undefined; }
>sn : string | number | undefined
>{ ...undefinedString, ...undefinedNumber } : { sn: string | number | undefined; }
>undefinedString : any
>undefinedNumber : any
let undefinedWithOptionalContinues: { sn: string | number | boolean } = { ...definiteBoolean, ...undefinedString, ...optionalNumber };
>undefinedWithOptionalContinues : { sn: string | number | boolean; }
>sn : string | number | boolean
>{ ...definiteBoolean, ...undefinedString, ...optionalNumber } : { sn: string | number | boolean; }
>definiteBoolean : any
>undefinedString : any
>optionalNumber : any
}

View file

@ -0,0 +1,21 @@
// @strictNullChecks: true
function f(
definiteBoolean: { sn: boolean },
definiteString: { sn: string },
optionalString: { sn?: string },
optionalNumber: { sn?: number },
undefinedString: { sn: string | undefined },
undefinedNumber: { sn: number | undefined }) {
// optional
let optionalUnionStops: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
// undefined
let undefinedUnionStops: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...undefinedNumber };
let undefinedUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...undefinedString, ...undefinedNumber };
let allUndefined: { sn: string | number | undefined } = { ...undefinedString, ...undefinedNumber };
let undefinedWithOptionalContinues: { sn: string | number | boolean } = { ...definiteBoolean, ...undefinedString, ...optionalNumber };
}