let originalDivGetBoundingClientRect; let originalSpanGetBoundingClientRect; let originalParagraphGetBoundingClientRect; export default { skip_if_ssr: true, get props() { return { things: [ { id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }, { id: 4, name: 'd' }, { id: 5, name: 'e' } ], tag: 'div' }; }, html: `
a
b
c
d
e
`, before_test() { originalDivGetBoundingClientRect = window.HTMLDivElement.prototype.getBoundingClientRect; originalSpanGetBoundingClientRect = window.HTMLSpanElement.prototype.getBoundingClientRect; originalParagraphGetBoundingClientRect = window.HTMLParagraphElement.prototype.getBoundingClientRect; window.HTMLDivElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect; window.HTMLSpanElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect; window.HTMLParagraphElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect; function fakeGetBoundingClientRect() { const index = [...this.parentNode.children].indexOf(this); const top = index * 30; return { left: 0, right: 100, top, bottom: top + 20 }; } }, after_test() { window.HTMLDivElement.prototype.getBoundingClientRect = originalDivGetBoundingClientRect; window.HTMLSpanElement.prototype.getBoundingClientRect = originalSpanGetBoundingClientRect; window.HTMLParagraphElement.prototype.getBoundingClientRect = originalParagraphGetBoundingClientRect; }, async test({ assert, component, raf }) { // switch tag and things at the same time await component.update('p', [ { id: 5, name: 'e' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }, { id: 4, name: 'd' }, { id: 1, name: 'a' } ]); const ps = document.querySelectorAll('p'); assert.equal(ps[0].dy, 120); assert.equal(ps[4].dy, -120); raf.tick(50); assert.equal(ps[0].dy, 60); assert.equal(ps[4].dy, -60); raf.tick(100); assert.equal(ps[0].dy, 0); assert.equal(ps[4].dy, 0); await component.update('span', [ { id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }, { id: 4, name: 'd' }, { id: 5, name: 'e' } ]); const spans = document.querySelectorAll('span'); assert.equal(spans[0].dy, 120); assert.equal(spans[4].dy, -120); raf.tick(150); assert.equal(spans[0].dy, 60); assert.equal(spans[4].dy, -60); raf.tick(200); assert.equal(spans[0].dy, 0); assert.equal(spans[4].dy, 0); } };