Add tests for symbol properties

This commit is contained in:
Jason Freeman 2015-02-02 12:48:18 -08:00
parent b60fa1467f
commit 779661c8da
46 changed files with 443 additions and 0 deletions

View file

@ -0,0 +1,11 @@
//@target: ES6
class C {
[Symbol.iterator]: { x; y };
}
interface I {
[Symbol.iterator]?: { x };
}
var i: I;
i = new C;
var c: C = i;

View file

@ -0,0 +1,9 @@
//@target: ES6
class C { }
interface I {
[Symbol.iterator]?: { x };
}
var i: I;
i = new C;
var c: C = i;

View file

@ -0,0 +1,11 @@
//@target: ES6
class C {
private [Symbol.iterator]: { x };
}
interface I {
[Symbol.iterator]: { x };
}
var i: I;
i = new C;
var c: C = i;

View file

@ -0,0 +1,17 @@
//@target: ES6
class C {
[Symbol.iterator]: { x; y };
}
interface I {
[Symbol.iterator]: { x };
}
declare function foo(i: I): I;
declare function foo(a: any): any;
declare function bar(i: C): C;
declare function bar(a: any): any;
foo(new C);
var i: I;
bar(i);

View file

@ -0,0 +1,17 @@
//@target: ES6
class C {
[Symbol.iterator]: { x; y };
}
interface I {
[Symbol.iterator]?: { x };
}
declare function foo(i: I): I;
declare function foo(a: any): any;
declare function bar(i: C): C;
declare function bar(a: any): any;
foo(new C);
var i: I;
bar(i);

View file

@ -0,0 +1,15 @@
//@target: ES6
class C { }
interface I {
[Symbol.iterator]?: { x };
}
declare function foo(i: I): I;
declare function foo(a: any): any;
declare function bar(i: C): C;
declare function bar(a: any): any;
foo(new C);
var i: I;
bar(i);

View file

@ -0,0 +1,17 @@
//@target: ES6
class C {
private [Symbol.iterator]: { x };
}
interface I {
[Symbol.iterator]: { x };
}
declare function foo(i: I): I;
declare function foo(a: any): any;
declare function bar(i: C): C;
declare function bar(a: any): any;
foo(new C);
var i: I;
bar(i);

View file

@ -0,0 +1,9 @@
//@target: ES6
interface I {
[Symbol.iterator]: number;
[s: Symbol]: string;
"__@iterator": string;
}
var i: I;
var it = i[Symbol.iterator];

View file

@ -0,0 +1,10 @@
//@target: ES6
var i = {
[Symbol.iterator]: 0,
[Symbol.toStringTag]() { return "" },
set [Symbol.toPrimitive](p: boolean) { }
}
var it = i[Symbol.iterator];
var str = i[Symbol.toStringTag]();
i[Symbol.toPrimitive] = false;

View file

@ -0,0 +1,8 @@
//@target: ES6
var i = {
[Symbol.iterator]: { p: null },
[Symbol.toStringTag]() { return { p: undefined }; }
}
var it = i[Symbol.iterator];
var str = i[Symbol.toStringTag]();

View file

@ -0,0 +1,10 @@
//@target: ES6
interface I {
[Symbol.iterator]: (s: string) => string;
[Symbol.toStringTag](s: number): number;
}
var i: I = {
[Symbol.iterator]: s => s,
[Symbol.toStringTag](n) { return n; }
}

View file

@ -0,0 +1,13 @@
//@target: ES6
interface I<T, U> {
[Symbol.unscopables]: T;
[Symbol.isConcatSpreadable]: U;
}
declare function foo<T, U>(p: I<T, U>): { t: T; u: U };
foo({
[Symbol.isConcatSpreadable]: "",
[Symbol.isRegExp]: 0,
[Symbol.unscopables]: true
});

View file

@ -0,0 +1,8 @@
//@target: ES6
interface I<T, U> {
[Symbol.unscopables](x: T): U;
}
declare function foo<T, U>(p1: T, p2: I<T, U>): U;
foo("", { [Symbol.unscopables]: s => s.length });

View file

@ -0,0 +1,10 @@
//@target: ES6
interface I {
[Symbol.toPrimitive]: () => boolean;
}
class C implements I {
[Symbol.toPrimitive]() {
return true;
}
}

View file

@ -0,0 +1,10 @@
//@target: ES6
interface I {
[Symbol.toPrimitive]: () => boolean;
}
class C implements I {
[Symbol.toPrimitive]() {
return "";
}
}

View file

@ -0,0 +1,10 @@
//@target: ES6
interface I {
[Symbol.toPrimitive]: () => boolean;
}
class C implements I {
[Symbol.toStringTag]() {
return "";
}
}

View file

@ -0,0 +1,12 @@
//@target: ES6
class C1 {
[Symbol.toStringTag]() {
return "";
}
}
class C2 extends C1 {
[Symbol.toStringTag]() {
return "";
}
}

View file

@ -0,0 +1,12 @@
//@target: ES6
class C1 {
[Symbol.toStringTag]() {
return {};
}
}
class C2 extends C1 {
[Symbol.toStringTag]() {
return "";
}
}

View file

@ -0,0 +1,11 @@
//@target: ES6
class C1 {
[Symbol.toStringTag]() {
return { x: "" };
}
}
class C2 extends C1 { }
var c: C2;
var obj = c[Symbol.toStringTag]().x;

View file

@ -0,0 +1,7 @@
//@target: ES6
class C1 {
[Symbol.toStringTag]() {
return { x: "" };
}
[s: Symbol]: () => { x: string };
}

View file

@ -0,0 +1,7 @@
//@target: ES6
class C1 {
[Symbol.toStringTag]() {
return { x: "" };
}
[s: Symbol]: () => { x: number };
}

View file

@ -0,0 +1,9 @@
//@target: ES6
class C1 {
[Symbol.toStringTag]() {
return { x: "" };
}
}
class C2 extends C1 {
[s: Symbol]: () => { x: string };
}

View file

@ -0,0 +1,9 @@
//@target: ES6
class C1 {
[Symbol.toStringTag]() {
return { x: "" };
}
}
class C2 extends C1 {
[s: Symbol]: () => { x: number };
}

View file

@ -0,0 +1,9 @@
//@target: ES6
class C1 extends C2 {
[Symbol.toStringTag]() {
return { x: "" };
}
}
class C2 {
[s: Symbol]: () => { x: string };
}

View file

@ -0,0 +1,9 @@
//@target: ES6
class C1 extends C2 {
[Symbol.toStringTag]() {
return { x: "" };
}
}
class C2 {
[s: Symbol]: () => { x: number };
}

View file

@ -0,0 +1,9 @@
//@target: ES6
interface I1 {
[Symbol.toStringTag](): { x: string }
}
interface I2 {
[Symbol.toStringTag](): { x: number }
}
interface I3 extends I1, I2 { }

View file

@ -0,0 +1,5 @@
//@target: ES6
var x = {
[Symbol.isConcatSpreadable]: 0,
[Symbol.isConcatSpreadable]: 1
}

View file

@ -0,0 +1,5 @@
//@target: ES6
interface I {
[Symbol.isConcatSpreadable]: string;
[Symbol.isConcatSpreadable]: string;
}

View file

@ -0,0 +1,7 @@
//@target: ES6
interface I {
[Symbol.isConcatSpreadable]: string;
}
interface I {
[Symbol.isConcatSpreadable]: string;
}

View file

@ -0,0 +1,11 @@
//@target: ES6
class C {
[Symbol.iterator](x: string): string;
[Symbol.iterator](x: number): number;
[Symbol.iterator](x: any) {
return undefined;
}
[Symbol.iterator](x: any) {
return undefined;
}
}

View file

@ -0,0 +1,12 @@
//@target: ES6
class C {
[Symbol.iterator](x: string): string;
[Symbol.iterator](x: number): number;
[Symbol.iterator](x: any) {
return undefined;
}
}
var c = new C;
c[Symbol.iterator]("");
c[Symbol.iterator](0);

View file

@ -0,0 +1,12 @@
//@target: ES6
class C {
[Symbol.iterator](x: string): { x: string };
[Symbol.iterator](x: "hello"): { x: string; hello: string };
[Symbol.iterator](x: any) {
return undefined;
}
}
var c = new C;
c[Symbol.iterator]("");
c[Symbol.iterator]("hello");

View file

@ -0,0 +1,8 @@
//@target: ES6
class C {
[Symbol.iterator](x: string): string;
static [Symbol.iterator](x: number): number;
[Symbol.iterator](x: any) {
return undefined;
}
}

View file

@ -0,0 +1,5 @@
//@target: ES6
class C {
[Symbol.iterator](x: string): string;
[Symbol.iterator](x: number): number;
}

View file

@ -0,0 +1,9 @@
//@target: ES6
class C {
get [Symbol.hasInstance]() {
return "";
}
get [Symbol.hasInstance]() {
return "";
}
}

View file

@ -0,0 +1,9 @@
//@target: ES6
class C {
get [Symbol.hasInstance]() {
return "";
}
get [Symbol.toPrimitive]() {
return "";
}
}

View file

@ -0,0 +1,12 @@
//@target: ES6
class C {
get [Symbol.hasInstance]() {
return "";
}
// Should take a string
set [Symbol.hasInstance](x) {
}
}
(new C)[Symbol.hasInstance] = 0;
(new C)[Symbol.hasInstance] = "";

View file

@ -0,0 +1,12 @@
//@target: ES6
class C {
get [Symbol.hasInstance]() {
return "";
}
// Should take a string
set [Symbol.hasInstance](x: number) {
}
}
(new C)[Symbol.hasInstance] = 0;
(new C)[Symbol.hasInstance] = "";

View file

@ -0,0 +1,8 @@
//@target: ES6
module M {
var Symbol;
class C {
[Symbol.iterator]() { }
}
}

View file

@ -0,0 +1,8 @@
//@target: ES6
module M {
export var Symbol;
class C {
[Symbol.iterator]() { }
}
}

View file

@ -0,0 +1,8 @@
//@target: ES6
module M {
interface Symbol { }
class C {
[Symbol.iterator]() { }
}
}

View file

@ -0,0 +1,8 @@
//@target: ES6
module M {
module Symbol { }
class C {
[Symbol.iterator]() { }
}
}

View file

@ -0,0 +1,6 @@
//@target: ES6
var obj = {
[Symbol.nonsense]: 0
};
obj = {};

View file

@ -0,0 +1,4 @@
//@target: ES6
var obj = {
[Symbol.for]: 0
};

View file

@ -0,0 +1,4 @@
//@target: ES6
var obj = {
[Symbol.prototype]: 0
};

View file

@ -0,0 +1,11 @@
//@target: ES6
class C {
[Symbol.iterator]: { x; y };
}
interface I {
[Symbol.iterator]: { x };
}
var i: I;
i = new C;
var c: C = i;