Skip to content

Commit 6e29b51

Browse files
committed
accept present baselines so output for new tests is captured
1 parent b3db6ff commit 6e29b51

File tree

4 files changed

+571
-0
lines changed

4 files changed

+571
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
//// [typeGuardByEqualityCheck.ts]
2+
interface Discriminator {
3+
_discriminator: void;
4+
}
5+
6+
interface FooDiscriminator extends Discriminator {
7+
_foo: void;
8+
}
9+
10+
interface BarDiscriminator extends Discriminator {
11+
_bar: void;
12+
}
13+
14+
interface BaseNode {
15+
kind: Discriminator;
16+
}
17+
18+
interface FooNode extends BaseNode {
19+
kind: FooDiscriminator;
20+
foo: string;
21+
}
22+
23+
interface BarNode extends BaseNode {
24+
kind: BarDiscriminator;
25+
bar: string;
26+
}
27+
28+
let a: FooDiscriminator;
29+
let x: FooNode | BarNode;
30+
31+
if (x.kind === a) {
32+
x.foo = "yay!";
33+
}
34+
else {
35+
x; // Not narrowed at present
36+
}
37+
38+
let z: {
39+
value: string;
40+
item: FooNode | BarNode;
41+
}
42+
if (z.item.kind === a) {
43+
z.item.foo = "cool!";
44+
z.value = "yes";
45+
}
46+
47+
let foo: "foo";
48+
let bar: "bar";
49+
let foobar: "foobar";
50+
51+
interface Thing {
52+
kind: string;
53+
}
54+
interface FooThing extends Thing {
55+
kind: "foo";
56+
foo: string;
57+
}
58+
interface BarThing extends Thing {
59+
kind: "bar";
60+
bar: string;
61+
}
62+
interface FooBarThing extends Thing {
63+
kind: "foobar";
64+
foo: string;
65+
bar: string;
66+
}
67+
68+
let gg: FooThing | BarThing | FooBarThing;
69+
if (gg.kind === foobar) {
70+
gg.bar = "bar";
71+
gg.foo = "foo";
72+
}
73+
let holder = {
74+
value: gg
75+
};
76+
if (holder.value.kind === foo) {
77+
holder.value.foo = "foo";
78+
}
79+
80+
//// [typeGuardByEqualityCheck.js]
81+
var a;
82+
var x;
83+
if (x.kind === a) {
84+
x.foo = "yay!";
85+
}
86+
else {
87+
x; // Not narrowed at present
88+
}
89+
var z;
90+
if (z.item.kind === a) {
91+
z.item.foo = "cool!";
92+
z.value = "yes";
93+
}
94+
var foo;
95+
var bar;
96+
var foobar;
97+
var gg;
98+
if (gg.kind === foobar) {
99+
gg.bar = "bar";
100+
gg.foo = "foo";
101+
}
102+
var holder = {
103+
value: gg
104+
};
105+
if (holder.value.kind === foo) {
106+
holder.value.foo = "foo";
107+
}
Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
=== tests/cases/conformance/expressions/typeGuards/typeGuardByEqualityCheck.ts ===
2+
interface Discriminator {
3+
>Discriminator : Symbol(Discriminator, Decl(typeGuardByEqualityCheck.ts, 0, 0))
4+
5+
_discriminator: void;
6+
>_discriminator : Symbol(_discriminator, Decl(typeGuardByEqualityCheck.ts, 0, 25))
7+
}
8+
9+
interface FooDiscriminator extends Discriminator {
10+
>FooDiscriminator : Symbol(FooDiscriminator, Decl(typeGuardByEqualityCheck.ts, 2, 1))
11+
>Discriminator : Symbol(Discriminator, Decl(typeGuardByEqualityCheck.ts, 0, 0))
12+
13+
_foo: void;
14+
>_foo : Symbol(_foo, Decl(typeGuardByEqualityCheck.ts, 4, 50))
15+
}
16+
17+
interface BarDiscriminator extends Discriminator {
18+
>BarDiscriminator : Symbol(BarDiscriminator, Decl(typeGuardByEqualityCheck.ts, 6, 1))
19+
>Discriminator : Symbol(Discriminator, Decl(typeGuardByEqualityCheck.ts, 0, 0))
20+
21+
_bar: void;
22+
>_bar : Symbol(_bar, Decl(typeGuardByEqualityCheck.ts, 8, 50))
23+
}
24+
25+
interface BaseNode {
26+
>BaseNode : Symbol(BaseNode, Decl(typeGuardByEqualityCheck.ts, 10, 1))
27+
28+
kind: Discriminator;
29+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 12, 20))
30+
>Discriminator : Symbol(Discriminator, Decl(typeGuardByEqualityCheck.ts, 0, 0))
31+
}
32+
33+
interface FooNode extends BaseNode {
34+
>FooNode : Symbol(FooNode, Decl(typeGuardByEqualityCheck.ts, 14, 1))
35+
>BaseNode : Symbol(BaseNode, Decl(typeGuardByEqualityCheck.ts, 10, 1))
36+
37+
kind: FooDiscriminator;
38+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 16, 36))
39+
>FooDiscriminator : Symbol(FooDiscriminator, Decl(typeGuardByEqualityCheck.ts, 2, 1))
40+
41+
foo: string;
42+
>foo : Symbol(foo, Decl(typeGuardByEqualityCheck.ts, 17, 24))
43+
}
44+
45+
interface BarNode extends BaseNode {
46+
>BarNode : Symbol(BarNode, Decl(typeGuardByEqualityCheck.ts, 19, 1))
47+
>BaseNode : Symbol(BaseNode, Decl(typeGuardByEqualityCheck.ts, 10, 1))
48+
49+
kind: BarDiscriminator;
50+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 21, 36))
51+
>BarDiscriminator : Symbol(BarDiscriminator, Decl(typeGuardByEqualityCheck.ts, 6, 1))
52+
53+
bar: string;
54+
>bar : Symbol(bar, Decl(typeGuardByEqualityCheck.ts, 22, 24))
55+
}
56+
57+
let a: FooDiscriminator;
58+
>a : Symbol(a, Decl(typeGuardByEqualityCheck.ts, 26, 3))
59+
>FooDiscriminator : Symbol(FooDiscriminator, Decl(typeGuardByEqualityCheck.ts, 2, 1))
60+
61+
let x: FooNode | BarNode;
62+
>x : Symbol(x, Decl(typeGuardByEqualityCheck.ts, 27, 3))
63+
>FooNode : Symbol(FooNode, Decl(typeGuardByEqualityCheck.ts, 14, 1))
64+
>BarNode : Symbol(BarNode, Decl(typeGuardByEqualityCheck.ts, 19, 1))
65+
66+
if (x.kind === a) {
67+
>x.kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 16, 36), Decl(typeGuardByEqualityCheck.ts, 21, 36))
68+
>x : Symbol(x, Decl(typeGuardByEqualityCheck.ts, 27, 3))
69+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 16, 36), Decl(typeGuardByEqualityCheck.ts, 21, 36))
70+
>a : Symbol(a, Decl(typeGuardByEqualityCheck.ts, 26, 3))
71+
72+
x.foo = "yay!";
73+
>x.foo : Symbol(FooNode.foo, Decl(typeGuardByEqualityCheck.ts, 17, 24))
74+
>x : Symbol(x, Decl(typeGuardByEqualityCheck.ts, 27, 3))
75+
>foo : Symbol(FooNode.foo, Decl(typeGuardByEqualityCheck.ts, 17, 24))
76+
}
77+
else {
78+
x; // Not narrowed at present
79+
>x : Symbol(x, Decl(typeGuardByEqualityCheck.ts, 27, 3))
80+
}
81+
82+
let z: {
83+
>z : Symbol(z, Decl(typeGuardByEqualityCheck.ts, 36, 3))
84+
85+
value: string;
86+
>value : Symbol(value, Decl(typeGuardByEqualityCheck.ts, 36, 8))
87+
88+
item: FooNode | BarNode;
89+
>item : Symbol(item, Decl(typeGuardByEqualityCheck.ts, 37, 15))
90+
>FooNode : Symbol(FooNode, Decl(typeGuardByEqualityCheck.ts, 14, 1))
91+
>BarNode : Symbol(BarNode, Decl(typeGuardByEqualityCheck.ts, 19, 1))
92+
}
93+
if (z.item.kind === a) {
94+
>z.item.kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 16, 36), Decl(typeGuardByEqualityCheck.ts, 21, 36))
95+
>z.item : Symbol(item, Decl(typeGuardByEqualityCheck.ts, 37, 15))
96+
>z : Symbol(z, Decl(typeGuardByEqualityCheck.ts, 36, 3))
97+
>item : Symbol(item, Decl(typeGuardByEqualityCheck.ts, 37, 15))
98+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 16, 36), Decl(typeGuardByEqualityCheck.ts, 21, 36))
99+
>a : Symbol(a, Decl(typeGuardByEqualityCheck.ts, 26, 3))
100+
101+
z.item.foo = "cool!";
102+
>z.item.foo : Symbol(FooNode.foo, Decl(typeGuardByEqualityCheck.ts, 17, 24))
103+
>z.item : Symbol(item)
104+
>z : Symbol(z, Decl(typeGuardByEqualityCheck.ts, 36, 3))
105+
>item : Symbol(item)
106+
>foo : Symbol(FooNode.foo, Decl(typeGuardByEqualityCheck.ts, 17, 24))
107+
108+
z.value = "yes";
109+
>z.value : Symbol(value, Decl(typeGuardByEqualityCheck.ts, 36, 8))
110+
>z : Symbol(z, Decl(typeGuardByEqualityCheck.ts, 36, 3))
111+
>value : Symbol(value, Decl(typeGuardByEqualityCheck.ts, 36, 8))
112+
}
113+
114+
let foo: "foo";
115+
>foo : Symbol(foo, Decl(typeGuardByEqualityCheck.ts, 45, 3))
116+
117+
let bar: "bar";
118+
>bar : Symbol(bar, Decl(typeGuardByEqualityCheck.ts, 46, 3))
119+
120+
let foobar: "foobar";
121+
>foobar : Symbol(foobar, Decl(typeGuardByEqualityCheck.ts, 47, 3))
122+
123+
interface Thing {
124+
>Thing : Symbol(Thing, Decl(typeGuardByEqualityCheck.ts, 47, 21))
125+
126+
kind: string;
127+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 49, 17))
128+
}
129+
interface FooThing extends Thing {
130+
>FooThing : Symbol(FooThing, Decl(typeGuardByEqualityCheck.ts, 51, 1))
131+
>Thing : Symbol(Thing, Decl(typeGuardByEqualityCheck.ts, 47, 21))
132+
133+
kind: "foo";
134+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 52, 34))
135+
136+
foo: string;
137+
>foo : Symbol(foo, Decl(typeGuardByEqualityCheck.ts, 53, 13))
138+
}
139+
interface BarThing extends Thing {
140+
>BarThing : Symbol(BarThing, Decl(typeGuardByEqualityCheck.ts, 55, 1))
141+
>Thing : Symbol(Thing, Decl(typeGuardByEqualityCheck.ts, 47, 21))
142+
143+
kind: "bar";
144+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 56, 34))
145+
146+
bar: string;
147+
>bar : Symbol(bar, Decl(typeGuardByEqualityCheck.ts, 57, 13))
148+
}
149+
interface FooBarThing extends Thing {
150+
>FooBarThing : Symbol(FooBarThing, Decl(typeGuardByEqualityCheck.ts, 59, 1))
151+
>Thing : Symbol(Thing, Decl(typeGuardByEqualityCheck.ts, 47, 21))
152+
153+
kind: "foobar";
154+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 60, 37))
155+
156+
foo: string;
157+
>foo : Symbol(foo, Decl(typeGuardByEqualityCheck.ts, 61, 16))
158+
159+
bar: string;
160+
>bar : Symbol(bar, Decl(typeGuardByEqualityCheck.ts, 62, 13))
161+
}
162+
163+
let gg: FooThing | BarThing | FooBarThing;
164+
>gg : Symbol(gg, Decl(typeGuardByEqualityCheck.ts, 66, 3))
165+
>FooThing : Symbol(FooThing, Decl(typeGuardByEqualityCheck.ts, 51, 1))
166+
>BarThing : Symbol(BarThing, Decl(typeGuardByEqualityCheck.ts, 55, 1))
167+
>FooBarThing : Symbol(FooBarThing, Decl(typeGuardByEqualityCheck.ts, 59, 1))
168+
169+
if (gg.kind === foobar) {
170+
>gg.kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 52, 34), Decl(typeGuardByEqualityCheck.ts, 56, 34), Decl(typeGuardByEqualityCheck.ts, 60, 37))
171+
>gg : Symbol(gg, Decl(typeGuardByEqualityCheck.ts, 66, 3))
172+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 52, 34), Decl(typeGuardByEqualityCheck.ts, 56, 34), Decl(typeGuardByEqualityCheck.ts, 60, 37))
173+
>foobar : Symbol(foobar, Decl(typeGuardByEqualityCheck.ts, 47, 3))
174+
175+
gg.bar = "bar";
176+
>gg.bar : Symbol(FooBarThing.bar, Decl(typeGuardByEqualityCheck.ts, 62, 13))
177+
>gg : Symbol(gg, Decl(typeGuardByEqualityCheck.ts, 66, 3))
178+
>bar : Symbol(FooBarThing.bar, Decl(typeGuardByEqualityCheck.ts, 62, 13))
179+
180+
gg.foo = "foo";
181+
>gg.foo : Symbol(FooBarThing.foo, Decl(typeGuardByEqualityCheck.ts, 61, 16))
182+
>gg : Symbol(gg, Decl(typeGuardByEqualityCheck.ts, 66, 3))
183+
>foo : Symbol(FooBarThing.foo, Decl(typeGuardByEqualityCheck.ts, 61, 16))
184+
}
185+
let holder = {
186+
>holder : Symbol(holder, Decl(typeGuardByEqualityCheck.ts, 71, 3))
187+
188+
value: gg
189+
>value : Symbol(value, Decl(typeGuardByEqualityCheck.ts, 71, 14))
190+
>gg : Symbol(gg, Decl(typeGuardByEqualityCheck.ts, 66, 3))
191+
192+
};
193+
if (holder.value.kind === foo) {
194+
>holder.value.kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 52, 34), Decl(typeGuardByEqualityCheck.ts, 56, 34), Decl(typeGuardByEqualityCheck.ts, 60, 37))
195+
>holder.value : Symbol(value, Decl(typeGuardByEqualityCheck.ts, 71, 14))
196+
>holder : Symbol(holder, Decl(typeGuardByEqualityCheck.ts, 71, 3))
197+
>value : Symbol(value, Decl(typeGuardByEqualityCheck.ts, 71, 14))
198+
>kind : Symbol(kind, Decl(typeGuardByEqualityCheck.ts, 52, 34), Decl(typeGuardByEqualityCheck.ts, 56, 34), Decl(typeGuardByEqualityCheck.ts, 60, 37))
199+
>foo : Symbol(foo, Decl(typeGuardByEqualityCheck.ts, 45, 3))
200+
201+
holder.value.foo = "foo";
202+
>holder.value.foo : Symbol(FooThing.foo, Decl(typeGuardByEqualityCheck.ts, 53, 13))
203+
>holder.value : Symbol(value)
204+
>holder : Symbol(holder, Decl(typeGuardByEqualityCheck.ts, 71, 3))
205+
>value : Symbol(value)
206+
>foo : Symbol(FooThing.foo, Decl(typeGuardByEqualityCheck.ts, 53, 13))
207+
}

0 commit comments

Comments
 (0)