Skip to content

Commit eb589c0

Browse files
committed
wip: update tests
1 parent c0cd7fc commit eb589c0

File tree

2 files changed

+51
-30
lines changed

2 files changed

+51
-30
lines changed

packages/runtime-vapor/__tests__/components/Teleport.spec.ts

+32-12
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ function runSharedTests(deferMode: boolean): void {
6060
}).create()
6161
mount(root)
6262

63-
expect(root.innerHTML).toBe('<!--teleport--><div>root</div>')
63+
expect(root.innerHTML).toBe(
64+
'<!--teleport start--><!--teleport end--><!--teleport--><div>root</div>',
65+
)
6466
expect(target.innerHTML).toBe('<div>teleported</div>')
6567
})
6668

@@ -89,14 +91,18 @@ function runSharedTests(deferMode: boolean): void {
8991
}).create()
9092
mount(root)
9193

92-
expect(root.innerHTML).toBe('<!--teleport--><div>root</div>')
94+
expect(root.innerHTML).toBe(
95+
'<!--teleport start--><!--teleport end--><!--teleport--><div>root</div>',
96+
)
9397
expect(targetA.innerHTML).toBe('<div>teleported</div>')
9498
expect(targetB.innerHTML).toBe('')
9599

96100
target.value = targetB
97101
await nextTick()
98102

99-
expect(root.innerHTML).toBe('<!--teleport--><div>root</div>')
103+
expect(root.innerHTML).toBe(
104+
'<!--teleport start--><!--teleport end--><!--teleport--><div>root</div>',
105+
)
100106
expect(targetA.innerHTML).toBe('')
101107
expect(targetB.innerHTML).toBe('<div>teleported</div>')
102108
})
@@ -268,7 +274,9 @@ function runSharedTests(deferMode: boolean): void {
268274
},
269275
}).create()
270276
mount(root)
271-
expect(root.innerHTML).toBe('<div><!--teleport--><!--teleport--></div>')
277+
expect(root.innerHTML).toBe(
278+
'<div><!--teleport start--><!--teleport end--><!--teleport--><!--teleport start--><!--teleport end--><!--teleport--></div>',
279+
)
272280
expect(target.innerHTML).toBe('<div>one</div>two')
273281

274282
// update existing content
@@ -283,7 +291,9 @@ function runSharedTests(deferMode: boolean): void {
283291
// toggling
284292
child1.value = [] as any
285293
await nextTick()
286-
expect(root.innerHTML).toBe('<div><!--teleport--><!--teleport--></div>')
294+
expect(root.innerHTML).toBe(
295+
'<div><!--teleport start--><!--teleport end--><!--teleport--><!--teleport start--><!--teleport end--><!--teleport--></div>',
296+
)
287297
expect(target.innerHTML).toBe('three')
288298

289299
// toggle back
@@ -293,14 +303,18 @@ function runSharedTests(deferMode: boolean): void {
293303
] as any
294304
child2.value = [template('three')()] as any
295305
await nextTick()
296-
expect(root.innerHTML).toBe('<div><!--teleport--><!--teleport--></div>')
306+
expect(root.innerHTML).toBe(
307+
'<div><!--teleport start--><!--teleport end--><!--teleport--><!--teleport start--><!--teleport end--><!--teleport--></div>',
308+
)
297309
// should append
298310
expect(target.innerHTML).toBe('<div>one</div><div>two</div>three')
299311

300312
// toggle the other teleport
301313
child2.value = [] as any
302314
await nextTick()
303-
expect(root.innerHTML).toBe('<div><!--teleport--><!--teleport--></div>')
315+
expect(root.innerHTML).toBe(
316+
'<div><!--teleport start--><!--teleport end--><!--teleport--><!--teleport start--><!--teleport end--><!--teleport--></div>',
317+
)
304318
expect(target.innerHTML).toBe('<div>one</div><div>two</div>')
305319
})
306320

@@ -331,12 +345,12 @@ function runSharedTests(deferMode: boolean): void {
331345
mount(root)
332346

333347
expect(root.innerHTML).toBe(
334-
'<div></div><div>teleported</div><!--teleport-->',
348+
'<div></div><div>teleported</div><!--teleport start--><!--teleport end--><!--teleport-->',
335349
)
336350
disabled.value = false
337351
await nextTick()
338352
expect(root.innerHTML).toBe(
339-
'<div><div>teleported</div></div><!--teleport-->',
353+
'<div><div>teleported</div></div><!--teleport start--><!--teleport end--><!--teleport-->',
340354
)
341355
})
342356

@@ -363,7 +377,9 @@ function runSharedTests(deferMode: boolean): void {
363377
}).create()
364378
mount(root)
365379

366-
expect(root.innerHTML).toBe('<!--teleport--><div>root</div>')
380+
expect(root.innerHTML).toBe(
381+
'<!--teleport start--><!--teleport end--><!--teleport--><div>root</div>',
382+
)
367383
expect(target.innerHTML).toBe('<div>teleported</div>')
368384

369385
disabled.value = true
@@ -401,12 +417,16 @@ function runSharedTests(deferMode: boolean): void {
401417
}).create()
402418
mount(root)
403419

404-
expect(root.innerHTML).toBe('<!--teleport--><div>root</div>')
420+
expect(root.innerHTML).toBe(
421+
'<!--teleport start--><!--teleport end--><!--teleport--><div>root</div>',
422+
)
405423
expect(target.innerHTML).toBe('<div>teleported</div>')
406424

407425
children.value = [child2, child1]
408426
await nextTick()
409-
expect(root.innerHTML).toBe('<div>root</div><!--teleport-->')
427+
expect(root.innerHTML).toBe(
428+
'<div>root</div><!--teleport start--><!--teleport end--><!--teleport-->',
429+
)
410430
expect(target.innerHTML).toBe('<div>teleported</div>')
411431
})
412432

packages/runtime-vapor/src/components/Teleport.ts

+19-18
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,10 @@ export class TeleportFragment extends VaporFragment {
6060

6161
update(props: TeleportProps, children: Block): void {
6262
const parent = this.anchor.parentNode
63+
6364
// teardown previous
64-
if (this.nodes && (parent || this.currentParent)) {
65-
remove(this.nodes, this.currentParent! || parent)
65+
if (this.nodes && (this.currentParent || parent)) {
66+
remove(this.nodes, (this.currentParent || parent)!)
6667
}
6768

6869
this.nodes = children
@@ -94,23 +95,23 @@ export class TeleportFragment extends VaporFragment {
9495
}
9596
}
9697

97-
if (parent && disabled) {
98-
if (!this.mainAnchor) {
99-
this.mainAnchor = __DEV__
100-
? createComment('teleport end')
101-
: createTextNode()
102-
}
103-
if (!this.placeholder) {
104-
this.placeholder = __DEV__
105-
? createComment('teleport start')
106-
: createTextNode()
107-
}
108-
if (!this.mainAnchor.isConnected) {
109-
insert(this.placeholder, parent, this.anchor)
110-
insert(this.mainAnchor, parent, this.anchor)
111-
}
98+
// insert placeholder and main anchor after initial render
99+
if (!parent) {
100+
this.placeholder = __DEV__
101+
? createComment('teleport start')
102+
: createTextNode()
103+
this.mainAnchor = __DEV__
104+
? createComment('teleport end')
105+
: createTextNode()
106+
queuePostFlushCb(() => {
107+
const parent = this.anchor.parentNode
108+
insert(this.placeholder!, parent!, this.anchor)
109+
insert(this.mainAnchor!, parent!, this.anchor)
110+
})
111+
}
112112

113-
mount(parent, this.mainAnchor)
113+
if (parent && disabled) {
114+
mount(parent, this.mainAnchor!)
114115
}
115116

116117
if (!disabled) {

0 commit comments

Comments
 (0)