From cd0f32b8434b5d13b7501731b61dfe526af98bef Mon Sep 17 00:00:00 2001 From: jdecroock Date: Thu, 3 Oct 2024 09:34:44 +0200 Subject: [PATCH] Revive single text-child hot path --- src/diff/index.js | 20 +++- test/browser/fragments.test.js | 167 ++++++++---------------------- test/browser/hydrate.test.js | 2 - test/browser/keys.test.js | 35 +++---- test/browser/placeholders.test.js | 2 - test/browser/render.test.js | 20 ++-- 6 files changed, 88 insertions(+), 158 deletions(-) diff --git a/src/diff/index.js b/src/diff/index.js index 7188631160..936a75804d 100644 --- a/src/diff/index.js +++ b/src/diff/index.js @@ -489,7 +489,6 @@ function diffElementNodes( } } - // If the new vnode didn't have dangerouslySetInnerHTML, diff its children if (newHtml) { // Avoid re-applying the same '__html' if it did not changed between re-render if ( @@ -502,8 +501,27 @@ function diffElementNodes( } newVNode._children = []; + } else if (typeof newChildren === 'string') { + if (newChildren !== oldProps.children) { + // Unmount any previous children + if (oldVNode._children) { + while ((i = oldVNode._children.pop())) { + // Setting textContent on the dom element will unmount all DOM nodes + // of the previous children, so we don't need to remove DOM in this + // call to unmount + unmount(i, oldVNode, true); + } + } + + dom.textContent = newChildren; + } } else { if (oldHtml) dom.innerHTML = ''; + // Previous render was a single text child. New children are not so let's + // unmount the previous text child + if (typeof oldProps.children === 'string') { + dom.removeChild(dom.firstChild); + } diffChildren( dom, diff --git a/test/browser/fragments.test.js b/test/browser/fragments.test.js index 7eb0b0924d..ed788c1a01 100644 --- a/test/browser/fragments.test.js +++ b/test/browser/fragments.test.js @@ -82,10 +82,7 @@ describe('Fragment', () => { ); expect(scratch.innerHTML).to.equal('foo'); - expectDomLogToBe([ - '.appendChild(#text)', - '
.appendChild(foo)' - ]); + expectDomLogToBe(['
.appendChild(foo)']); }); it('should render multiple children via noop renderer', () => { @@ -236,7 +233,6 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(div([div(1), span(2), span(2)])); expectDomLogToBe([ '1.remove()', - '
.appendChild(#text)', '
22.insertBefore(
1, 2)' ]); }); @@ -356,11 +352,7 @@ describe('Fragment', () => { expect(ops).to.deep.equal([]); expect(scratch.innerHTML).to.equal('
Hello
'); - expectDomLogToBe([ - '
Hello.remove()', - '
.appendChild(#text)', - '
.appendChild(
Hello)' - ]); + expectDomLogToBe(['
Hello.remove()', '
.appendChild(
Hello)']); clearLog(); render(, scratch); @@ -369,7 +361,6 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal('
Hello
'); expectDomLogToBe([ '
Hello.remove()', - '
.appendChild(#text)', // Re-append the Stateful DOM since it has been re-parented '
.appendChild(
Hello)' ]); @@ -395,22 +386,14 @@ describe('Fragment', () => { expect(ops).to.deep.equal([]); expect(scratch.innerHTML).to.equal('
Hello
'); - expectDomLogToBe([ - '
Hello.remove()', - '
.appendChild(#text)', - '
.appendChild(
Hello)' - ]); + expectDomLogToBe(['
Hello.remove()', '
.appendChild(
Hello)']); clearLog(); render(, scratch); expect(ops).to.deep.equal([]); expect(scratch.innerHTML).to.equal('
Hello
'); - expectDomLogToBe([ - '
Hello.remove()', - '
.appendChild(#text)', - '
.appendChild(
Hello)' - ]); + expectDomLogToBe(['
Hello.remove()', '
.appendChild(
Hello)']); }); it('should just render children for fragments', () => { @@ -791,9 +774,9 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(htmlForFalse); expectDomLogToBe( [ - '
barHellobeep.insertBefore(
bar,
beep)', - '
Hellobarbeep.appendChild(
Hello)', - '
barbeepHello.appendChild(
bar)' + '
fooHellobeep.insertBefore(
beep,
foo)', + '
beepbarHello.appendChild(
bar)', + '
beepHellobar.insertBefore(
Hello,
bar)' ], 'rendering true to false' ); @@ -805,8 +788,8 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(htmlForTrue); expectDomLogToBe( [ - '
beepHellofoo.appendChild(
Hello)', - '
boopfooHello.appendChild(
boop)' + '
beepHellofoo.insertBefore(
foo,
beep)', + '
foobeepHello.insertBefore(
Hello,
beep)' ], 'rendering false to true' ); @@ -845,9 +828,7 @@ describe('Fragment', () => { expectDomLogToBe([ '1.remove()', '
Hello.remove()', - '.appendChild(#text)', '
2.insertBefore(1, 2)', - '
.appendChild(#text)', '
12.insertBefore(
Hello, 2)' ]); @@ -859,9 +840,7 @@ describe('Fragment', () => { expectDomLogToBe([ '1.remove()', '
Hello.remove()', - '.appendChild(#text)', '
2.insertBefore(1, 2)', - '
.appendChild(#text)', '
12.insertBefore(
Hello, 2)' ]); }); @@ -1234,13 +1213,9 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(html, 'initial render of true'); expectDomLogToBe( [ - '
  • .appendChild(#text)', '
      .appendChild(
    1. 0)', - '
    2. .appendChild(#text)', '
        0.appendChild(
      1. 1)', - '
      2. .appendChild(#text)', '
          01.appendChild(
        1. 2)', - '
        2. .appendChild(#text)', '
            012.appendChild(
          1. 3)', '
            .appendChild(
              0123)' ], @@ -1282,15 +1257,10 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(htmlForTrue, 'initial render of true'); expectDomLogToBe( [ - '
            1. .appendChild(#text)', '
                .appendChild(
              1. 0)', - '
              2. .appendChild(#text)', '
                  0.appendChild(
                1. 1)', - '
                2. .appendChild(#text)', '
                    01.appendChild(
                  1. 2)', - '
                  2. .appendChild(#text)', '
                      012.appendChild(
                    1. 3)', - '
                    2. .appendChild(#text)', '
                        0123.appendChild(
                      1. 4)', '
                        .appendChild(
                          01234)' ], @@ -1316,15 +1286,14 @@ describe('Fragment', () => { ); expectDomLogToBe( [ - '
                        1. .appendChild(#text)', '
                            034.insertBefore(
                          1. 1,
                          2. 3)', - '
                          3. .appendChild(#text)', '
                              0134.insertBefore(
                            1. 2,
                            2. 3)' ], 'rendering from false to true' ); }); + // TODO it('should support moving Fragments between beginning and end', () => { const Foo = ({ condition }) => (
                                @@ -1382,7 +1351,9 @@ describe('Fragment', () => { ); expectDomLogToBe([ '
                                  012345.insertBefore(
                                1. 4,
                                2. 0)', - '
                                    401235.insertBefore(
                                  1. 5,
                                  2. 0)' + '
                                      401235.insertBefore(
                                    1. 5,
                                    2. 0)', + '
                                        450123.insertBefore(
                                      1. 4,
                                      2. 0)', + '
                                          540123.insertBefore(
                                        1. 5,
                                        2. 0)' ]); clearLog(); @@ -1392,8 +1363,10 @@ describe('Fragment', () => { 'rendering from false to true' ); expectDomLogToBe([ - '
                                            450123.appendChild(
                                          1. 4)', - '
                                              501234.appendChild(
                                            1. 5)' + '
                                                450123.insertBefore(
                                              1. 0,
                                              2. 4)', + '
                                                  045123.insertBefore(
                                                1. 1,
                                                2. 4)', + '
                                                    014523.insertBefore(
                                                  1. 2,
                                                  2. 4)', + '
                                                      012453.insertBefore(
                                                    1. 3,
                                                    2. 4)' ]); }); @@ -1436,9 +1409,7 @@ describe('Fragment', () => { '
                                                    3. 0.remove()', '
                                                    4. 1.remove()', // Mount 3 & 4 - '
                                                    5. .appendChild(#text)', '
                                                        22.appendChild(
                                                      1. 3)', - '
                                                      2. .appendChild(#text)', '
                                                          223.appendChild(
                                                        1. 4)' ]); @@ -1453,9 +1424,7 @@ describe('Fragment', () => { '
                                                        2. 3.remove()', '
                                                        3. 4.remove()', // Insert 0 and 1 - '
                                                        4. .appendChild(#text)', '
                                                            22.insertBefore(
                                                          1. 0,
                                                          2. 2)', - '
                                                          3. .appendChild(#text)', '
                                                              022.insertBefore(
                                                            1. 1,
                                                            2. 2)' ]); }); @@ -1507,9 +1476,7 @@ describe('Fragment', () => { '
                                                            3. 0.remove()', '
                                                            4. 1.remove()', // Mount 4 & 5 - '
                                                            5. .appendChild(#text)', '
                                                                23.appendChild(
                                                              1. 4)', - '
                                                              2. .appendChild(#text)', '
                                                                  234.appendChild(
                                                                1. 5)' ]); @@ -1524,9 +1491,7 @@ describe('Fragment', () => { '
                                                                2. 4.remove()', '
                                                                3. 5.remove()', // Insert 0 and 1 back into the DOM - '
                                                                4. .appendChild(#text)', '
                                                                    23.insertBefore(
                                                                  1. 0,
                                                                  2. 2)', - '
                                                                  3. .appendChild(#text)', '
                                                                      023.insertBefore(
                                                                    1. 1,
                                                                    2. 2)' ]); }); @@ -1582,9 +1547,9 @@ describe('Fragment', () => { expectDomLogToBe( [ '
                                                                      boop.remove()', - '
                                                                      barHellobeep.insertBefore(
                                                                      bar,
                                                                      beep)', - '
                                                                      Hellobarbeep.appendChild(
                                                                      Hello)', - '
                                                                      barbeepHello.appendChild(
                                                                      bar)' + '
                                                                      fooHellobeep.insertBefore(
                                                                      beep,
                                                                      foo)', + '
                                                                      beepbarHello.appendChild(
                                                                      bar)', + '
                                                                      beepHellobar.insertBefore(
                                                                      Hello,
                                                                      bar)' ], 'rendering from true to false' ); @@ -1599,9 +1564,8 @@ describe('Fragment', () => { ); expectDomLogToBe( [ - '
                                                                      beepHellofoo.appendChild(
                                                                      Hello)', - '
                                                                      boopfooHello.appendChild(
                                                                      boop)', - '
                                                                      .appendChild(#text)', + '
                                                                      beepHellofoo.insertBefore(
                                                                      foo,
                                                                      beep)', + '
                                                                      foobeepHello.insertBefore(
                                                                      Hello,
                                                                      beep)', '
                                                                      fooHelloboop.appendChild(
                                                                      boop)' ], 'rendering from false to true' @@ -1668,9 +1632,11 @@ describe('Fragment', () => { ); expectDomLogToBe( [ - '
                                                                      barHellobeepbeepbeep.insertBefore(
                                                                      bar,
                                                                      beep)', - '
                                                                      Hellobarbeepbeepbeep.appendChild(
                                                                      Hello)', - '
                                                                      barbeepbeepbeepHello.appendChild(
                                                                      bar)' + '
                                                                      fooHellobeepboopboop.insertBefore(
                                                                      beep,
                                                                      foo)', + '
                                                                      beepfooHellobeepboop.insertBefore(
                                                                      beep,
                                                                      foo)', + '
                                                                      beepbeepfooHellobeep.insertBefore(
                                                                      beep,
                                                                      foo)', + '
                                                                      beepbeepbeepbarHello.appendChild(
                                                                      bar)', + '
                                                                      beepbeepbeepHellobar.insertBefore(
                                                                      Hello,
                                                                      bar)' ], 'rendering from true to false' ); @@ -1685,9 +1651,10 @@ describe('Fragment', () => { ); expectDomLogToBe( [ - '
                                                                      beepbeepbeepHellofoo.appendChild(
                                                                      Hello)', - '
                                                                      beepbeepbeepfooHello.insertBefore(
                                                                      foo,
                                                                      beep)', - '
                                                                      foobeepbeepbeepHello.insertBefore(
                                                                      Hello,
                                                                      beep)' + '
                                                                      beepbeepbeepHellofoo.insertBefore(
                                                                      foo,
                                                                      beep)', + '
                                                                      foobeepbeepbeepHello.insertBefore(
                                                                      Hello,
                                                                      beep)', + '
                                                                      fooHellobeepbeepbeep.insertBefore(
                                                                      foo,
                                                                      beep)', + '
                                                                      Hellofoobeepbeepbeep.insertBefore(
                                                                      Hello,
                                                                      beep)' ], 'rendering from false to true' ); @@ -1778,9 +1745,7 @@ describe('Fragment', () => { [ '
                                                                      2.remove()', '#text.remove()', - '
                                                                      .appendChild(#text)', '
                                                                      .appendChild(
                                                                      3)', - '
                                                                      .appendChild(#text)', '
                                                                      3.appendChild(
                                                                      4)' ], 'rendering from true to false' @@ -1791,13 +1756,7 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(htmlForTrue); expectDomLogToBe( - [ - '
                                                                      3.remove()', - '
                                                                      4.remove()', - '
                                                                      .appendChild(#text)', - '
                                                                      .appendChild(#text)', - '
                                                                      1.appendChild(
                                                                      2)' - ], + ['
                                                                      1.appendChild(
                                                                      2)'], 'rendering from false to true' ); }); @@ -1851,17 +1810,11 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(htmlForTrue, 'initial render of true'); expectDomLogToBe( [ - '
                                                                    3. .appendChild(#text)', '
                                                                        .appendChild(
                                                                      1. 0)', - '
                                                                      2. .appendChild(#text)', '
                                                                          0.appendChild(
                                                                        1. 1)', - '
                                                                        2. .appendChild(#text)', '
                                                                            01.appendChild(
                                                                          1. 2)', - '
                                                                          2. .appendChild(#text)', '
                                                                              012.appendChild(
                                                                            1. 3)', - '
                                                                            2. .appendChild(#text)', '
                                                                                0123.appendChild(
                                                                              1. 4)', - '
                                                                              2. .appendChild(#text)', '
                                                                                  01234.appendChild(
                                                                                1. 5)', '
                                                                                  .appendChild(
                                                                                    012345)' ], @@ -1887,9 +1840,7 @@ describe('Fragment', () => { ); expectDomLogToBe( [ - '
                                                                                  1. .appendChild(#text)', '
                                                                                      0145.insertBefore(
                                                                                    1. 2,
                                                                                    2. 4)', - '
                                                                                    3. .appendChild(#text)', '
                                                                                        01245.insertBefore(
                                                                                      1. 3,
                                                                                      2. 4)' ], 'rendering from false to true' @@ -2013,11 +1964,8 @@ describe('Fragment', () => { expect(scratch.textContent).to.equal('ABC'); expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', '
                                                                                        .appendChild(
                                                                                        A)', - '
                                                                                        .appendChild(#text)', '
                                                                                        A.appendChild(
                                                                                        B)', - '
                                                                                        .appendChild(#text)', '
                                                                                        AB.appendChild(
                                                                                        C)' ]); }); @@ -2057,7 +2005,6 @@ describe('Fragment', () => { ); expectDomLogToBe([ '
                                                                                        B1.remove()', - '
                                                                                        .appendChild(#text)', '
                                                                                        AC.insertBefore(
                                                                                        B2,
                                                                                        C)' ]); }); @@ -2108,9 +2055,7 @@ describe('Fragment', () => { expectDomLogToBe([ '
                                                                                        B1.remove()', '
                                                                                        B2.remove()', - '
                                                                                        .appendChild(#text)', '
                                                                                        AC.insertBefore(
                                                                                        B3,
                                                                                        C)', - '
                                                                                        .appendChild(#text)', '
                                                                                        AB3C.insertBefore(
                                                                                        B4,
                                                                                        C)' ]); }); @@ -2146,10 +2091,7 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.eql( `
                                                                                        A
                                                                                        B
                                                                                        C
                                                                                        ` ); - expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', - '
                                                                                        AC.insertBefore(
                                                                                        B,
                                                                                        C)' - ]); + expectDomLogToBe(['
                                                                                        AC.insertBefore(
                                                                                        B,
                                                                                        C)']); }); it('should insert in-between Fragments', () => { @@ -2184,9 +2126,7 @@ describe('Fragment', () => { `
                                                                                        A
                                                                                        B1
                                                                                        B2
                                                                                        C
                                                                                        ` ); expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', '
                                                                                        AC.insertBefore(
                                                                                        B1,
                                                                                        C)', - '
                                                                                        .appendChild(#text)', '
                                                                                        AB1C.insertBefore(
                                                                                        B2,
                                                                                        C)' ]); }); @@ -2224,10 +2164,7 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.eql( `
                                                                                        A
                                                                                        B
                                                                                        C
                                                                                        ` ); - expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', - '
                                                                                        AC.insertBefore(
                                                                                        B,
                                                                                        C)' - ]); + expectDomLogToBe(['
                                                                                        AC.insertBefore(
                                                                                        B,
                                                                                        C)']); }); it('should insert Fragment in-between null children', () => { @@ -2269,9 +2206,7 @@ describe('Fragment', () => { `
                                                                                        A
                                                                                        B1
                                                                                        B2
                                                                                        C
                                                                                        ` ); expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', '
                                                                                        AC.insertBefore(
                                                                                        B1,
                                                                                        C)', - '
                                                                                        .appendChild(#text)', '
                                                                                        AB1C.insertBefore(
                                                                                        B2,
                                                                                        C)' ]); }); @@ -2313,10 +2248,7 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.eql( `
                                                                                        A
                                                                                        B
                                                                                        C
                                                                                        ` ); - expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', - '
                                                                                        AC.insertBefore(
                                                                                        B,
                                                                                        C)' - ]); + expectDomLogToBe(['
                                                                                        AC.insertBefore(
                                                                                        B,
                                                                                        C)']); }); it('should insert Fragment in-between nested null children', () => { @@ -2362,9 +2294,7 @@ describe('Fragment', () => { `
                                                                                        A
                                                                                        B1
                                                                                        B2
                                                                                        C
                                                                                        ` ); expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', '
                                                                                        AC.insertBefore(
                                                                                        B1,
                                                                                        C)', - '
                                                                                        .appendChild(#text)', '
                                                                                        AB1C.insertBefore(
                                                                                        B2,
                                                                                        C)' ]); }); @@ -2425,7 +2355,6 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.eql(`
                                                                                        A2
                                                                                        C
                                                                                        `); expectDomLogToBe([ '
                                                                                        A.remove()', - '.appendChild(#text)', '
                                                                                        C.insertBefore(A2,
                                                                                        C)' ]); }); @@ -2493,9 +2422,7 @@ describe('Fragment', () => { expectDomLogToBe([ '
                                                                                        A1.remove()', '
                                                                                        A2.remove()', - '.appendChild(#text)', '
                                                                                        C.insertBefore(A3,
                                                                                        C)', - '.appendChild(#text)', '
                                                                                        A3C.insertBefore(A4,
                                                                                        C)' ]); }); @@ -2558,10 +2485,7 @@ describe('Fragment', () => { div([div('A'), div('B'), div('C')]), 'updateB' ); - expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', - '
                                                                                        AC.insertBefore(
                                                                                        B,
                                                                                        C)' - ]); + expectDomLogToBe(['
                                                                                        AC.insertBefore(
                                                                                        B,
                                                                                        C)']); clearLog(); updateA(); @@ -2573,7 +2497,6 @@ describe('Fragment', () => { ); expectDomLogToBe([ '
                                                                                        A.remove()', - '.appendChild(#text)', '
                                                                                        BC.insertBefore(A2,
                                                                                        B)' ]); }); @@ -2631,9 +2554,7 @@ describe('Fragment', () => { expectDomLogToBe([ '
                                                                                        A1.remove()', '
                                                                                        A2.remove()', - '.appendChild(#text)', '
                                                                                        .appendChild(A3)', - '.appendChild(#text)', '
                                                                                        A3.appendChild(A4)' ]); @@ -2645,10 +2566,7 @@ describe('Fragment', () => { [span('A3'), span('A4'), div('B')].join(''), 'updateB' ); - expectDomLogToBe([ - '
                                                                                        .appendChild(#text)', - '
                                                                                        A3A4.appendChild(
                                                                                        B)' - ]); + expectDomLogToBe(['
                                                                                        A3A4.appendChild(
                                                                                        B)']); }); it('should properly place conditional elements around strictly equal vnodes', () => { @@ -2705,7 +2623,6 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(top); expectDomLogToBe([ '
                                                                                        bottom panel.remove()', - '
                                                                                        .appendChild(#text)', '
                                                                                        NavigationContent.insertBefore(
                                                                                        top panel,
                                                                                        Navigation)' ]); @@ -2715,7 +2632,6 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(bottom); expectDomLogToBe([ '
                                                                                        top panel.remove()', - '
                                                                                        .appendChild(#text)', '
                                                                                        NavigationContent.appendChild(
                                                                                        bottom panel)' ]); @@ -2725,7 +2641,6 @@ describe('Fragment', () => { expect(scratch.innerHTML).to.equal(top); expectDomLogToBe([ '
                                                                                        bottom panel.remove()', - '
                                                                                        .appendChild(#text)', '
                                                                                        NavigationContent.insertBefore(
                                                                                        top panel,
                                                                                        Navigation)' ]); }); @@ -2944,7 +2859,6 @@ describe('Fragment', () => { expectDomLogToBe([ '
                                                                                        2.remove()', '
                                                                                        3.remove()', - '
                                                                                        .appendChild(#text)', '
                                                                                        1AB.insertBefore(
                                                                                        4,
                                                                                        A)' ]); }); @@ -3043,7 +2957,6 @@ describe('Fragment', () => { '
                                                                                        1.remove()', '
                                                                                        2.remove()', '
                                                                                        3.remove()', - '.appendChild(#text)', '
                                                                                        AB.insertBefore(1,
                                                                                        A)' ]); }); @@ -3148,6 +3061,10 @@ describe('Fragment', () => { rerender(); expect(scratch.innerHTML).to.equal([div('A'), div(1), div(2)].join('')); - expectDomLogToBe(['
                                                                                        B.remove()', '
                                                                                        2A1.appendChild(
                                                                                        2)']); + expectDomLogToBe([ + '
                                                                                        B.remove()', + '
                                                                                        1A2.insertBefore(
                                                                                        A,
                                                                                        1)', + '
                                                                                        A11.insertBefore(
                                                                                        1,
                                                                                        1)' + ]); }); }); diff --git a/test/browser/hydrate.test.js b/test/browser/hydrate.test.js index 814a5d681d..75c520cdea 100644 --- a/test/browser/hydrate.test.js +++ b/test/browser/hydrate.test.js @@ -179,9 +179,7 @@ describe('hydrate()', () => { expect(scratch.innerHTML).to.equal(ul([li('1'), li('2'), li('3')])); expect(getLog()).to.deep.equal([ - '
                                                                                      3. .appendChild(#text)', '
                                                                                          1.appendChild(
                                                                                        • 2)', - '
                                                                                        • .appendChild(#text)', '
                                                                                            12.appendChild(
                                                                                          • 3)' ]); }); diff --git a/test/browser/keys.test.js b/test/browser/keys.test.js index 8d5a185b91..178c90e2f2 100644 --- a/test/browser/keys.test.js +++ b/test/browser/keys.test.js @@ -200,10 +200,7 @@ describe('keys', () => { render(, scratch); expect(scratch.textContent).to.equal('abc'); - expect(getLog()).to.deep.equal([ - '
                                                                                          • .appendChild(#text)', - '
                                                                                              ab.appendChild(
                                                                                            1. c)' - ]); + expect(getLog()).to.deep.equal(['
                                                                                                ab.appendChild(
                                                                                              1. c)']); }); it('should remove keyed elements from the end', () => { @@ -231,10 +228,7 @@ describe('keys', () => { render(, scratch); expect(scratch.textContent).to.equal('abc'); - expect(getLog()).to.deep.equal([ - '
                                                                                              2. .appendChild(#text)', - '
                                                                                                  bc.insertBefore(
                                                                                                1. a,
                                                                                                2. b)' - ]); + expect(getLog()).to.deep.equal(['
                                                                                                    bc.insertBefore(
                                                                                                  1. a,
                                                                                                  2. b)']); }); it('should remove keyed elements from the beginning', () => { @@ -262,10 +256,7 @@ describe('keys', () => { render(, scratch); expect(scratch.textContent).to.equal('abc'); - expect(getLog()).to.deep.equal([ - '
                                                                                                  3. .appendChild(#text)', - '
                                                                                                      ac.insertBefore(
                                                                                                    1. b,
                                                                                                    2. c)' - ]); + expect(getLog()).to.deep.equal(['
                                                                                                        ac.insertBefore(
                                                                                                      1. b,
                                                                                                      2. c)']); }); it('should remove keyed children from the middle', () => { @@ -327,7 +318,7 @@ describe('keys', () => { render(, scratch); expect(scratch.textContent).to.equal('ba'); - expect(getLog()).to.deep.equal(['
                                                                                                          ab.appendChild(
                                                                                                        1. a)']); + expect(getLog()).to.deep.equal(['
                                                                                                            ab.insertBefore(
                                                                                                          1. b,
                                                                                                          2. a)']); }); it('should swap existing keyed children in the middle of a list efficiently', () => { @@ -343,7 +334,7 @@ describe('keys', () => { render(, scratch); expect(scratch.textContent).to.equal('acbd', 'initial swap'); expect(getLog()).to.deep.equal( - ['
                                                                                                              abcd.insertBefore(
                                                                                                            1. b,
                                                                                                            2. d)'], + ['
                                                                                                                abcd.insertBefore(
                                                                                                              1. c,
                                                                                                              2. b)'], 'initial swap' ); @@ -354,7 +345,7 @@ describe('keys', () => { render(, scratch); expect(scratch.textContent).to.equal('abcd', 'swap back'); expect(getLog()).to.deep.equal( - ['
                                                                                                                  acbd.insertBefore(
                                                                                                                1. c,
                                                                                                                2. d)'], + ['
                                                                                                                    acbd.insertBefore(
                                                                                                                  1. b,
                                                                                                                  2. c)'], 'swap back' ); }); @@ -372,7 +363,11 @@ describe('keys', () => { render(, scratch); expect(scratch.textContent).to.equal('bcda', 'move to end'); expect(getLog()).to.deep.equal( - ['
                                                                                                                      abcd.appendChild(
                                                                                                                    1. a)'], + [ + '
                                                                                                                        abcd.insertBefore(
                                                                                                                      1. b,
                                                                                                                      2. a)', + '
                                                                                                                          bacd.insertBefore(
                                                                                                                        1. c,
                                                                                                                        2. a)', + '
                                                                                                                            bcad.insertBefore(
                                                                                                                          1. d,
                                                                                                                          2. a)' + ], 'move to end' ); @@ -414,7 +409,11 @@ describe('keys', () => { render(, scratch); expect(scratch.textContent).to.equal('acdebf'); - expect(getLog()).to.deep.equal(['
                                                                                                                              abcdef.insertBefore(
                                                                                                                            1. b,
                                                                                                                            2. f)']); + expect(getLog()).to.deep.equal([ + '
                                                                                                                                abcdef.insertBefore(
                                                                                                                              1. c,
                                                                                                                              2. b)', + '
                                                                                                                                  acbdef.insertBefore(
                                                                                                                                1. d,
                                                                                                                                2. b)', + '
                                                                                                                                    acdbef.insertBefore(
                                                                                                                                  1. e,
                                                                                                                                  2. b)' + ]); }); it('should reverse keyed children effectively', () => { @@ -439,7 +438,7 @@ describe('keys', () => { '
                                                                                                                                      jihgfabcde.insertBefore(
                                                                                                                                    1. e,
                                                                                                                                    2. a)', '
                                                                                                                                        jihgfeabcd.insertBefore(
                                                                                                                                      1. d,
                                                                                                                                      2. a)', '
                                                                                                                                          jihgfedabc.insertBefore(
                                                                                                                                        1. c,
                                                                                                                                        2. a)', - '
                                                                                                                                            jihgfedcab.appendChild(
                                                                                                                                          1. a)' + '
                                                                                                                                              jihgfedcab.insertBefore(
                                                                                                                                            1. b,
                                                                                                                                            2. a)' ]); }); diff --git a/test/browser/placeholders.test.js b/test/browser/placeholders.test.js index 0fbdb6f181..4dd5f3b502 100644 --- a/test/browser/placeholders.test.js +++ b/test/browser/placeholders.test.js @@ -248,9 +248,7 @@ describe('null placeholders', () => { div([div(1), div('Nullable'), div(3), div('Nullable2')]) ); expect(getLog()).to.deep.equal([ - '
                                                                                                                                              .appendChild(#text)', '
                                                                                                                                              13.appendChild(
                                                                                                                                              Nullable2)', - '
                                                                                                                                              .appendChild(#text)', '
                                                                                                                                              13Nullable2.insertBefore(
                                                                                                                                              Nullable,
                                                                                                                                              3)' ]); }); diff --git a/test/browser/render.test.js b/test/browser/render.test.js index 172023b3df..d02327d31b 100644 --- a/test/browser/render.test.js +++ b/test/browser/render.test.js @@ -1662,9 +1662,12 @@ describe('render()', () => { `
                                                                                                                                              ${b.map(n => `
                                                                                                                                              ${n}
                                                                                                                                              `).join('')}
                                                                                                                                              ` ); expect(getLog()).to.deep.equal([ - '
                                                                                                                                              0123456.insertBefore(
                                                                                                                                              2,
                                                                                                                                              6)', - '
                                                                                                                                              0134526.appendChild(
                                                                                                                                              4)', - '
                                                                                                                                              0135264.appendChild(
                                                                                                                                              0)' + '
                                                                                                                                              0123456.insertBefore(
                                                                                                                                              1,
                                                                                                                                              0)', + '
                                                                                                                                              1023456.insertBefore(
                                                                                                                                              3,
                                                                                                                                              0)', + '
                                                                                                                                              1302456.insertBefore(
                                                                                                                                              5,
                                                                                                                                              0)', + '
                                                                                                                                              1350246.insertBefore(
                                                                                                                                              2,
                                                                                                                                              0)', + '
                                                                                                                                              1352046.insertBefore(
                                                                                                                                              6,
                                                                                                                                              0)', + '
                                                                                                                                              1352604.insertBefore(
                                                                                                                                              4,
                                                                                                                                              0)' ]); clearLog(); @@ -1673,15 +1676,12 @@ describe('render()', () => { `
                                                                                                                                              ${c.map(n => `
                                                                                                                                              ${n}
                                                                                                                                              `).join('')}
                                                                                                                                              ` ); expect(getLog()).to.deep.equal([ - '
                                                                                                                                              .appendChild(#text)', '
                                                                                                                                              1352640.insertBefore(
                                                                                                                                              11,
                                                                                                                                              1)', - '
                                                                                                                                              111352640.insertBefore(
                                                                                                                                              1,
                                                                                                                                              5)', - '
                                                                                                                                              113152640.insertBefore(
                                                                                                                                              6,
                                                                                                                                              0)', - '
                                                                                                                                              113152460.insertBefore(
                                                                                                                                              2,
                                                                                                                                              0)', - '
                                                                                                                                              113154620.insertBefore(
                                                                                                                                              5,
                                                                                                                                              0)', - '
                                                                                                                                              .appendChild(#text)', + '
                                                                                                                                              111352640.insertBefore(
                                                                                                                                              3,
                                                                                                                                              1)', + '
                                                                                                                                              113152640.insertBefore(
                                                                                                                                              4,
                                                                                                                                              5)', + '
                                                                                                                                              113145260.insertBefore(
                                                                                                                                              6,
                                                                                                                                              5)', + '
                                                                                                                                              113146520.insertBefore(
                                                                                                                                              2,
                                                                                                                                              5)', '
                                                                                                                                              113146250.appendChild(
                                                                                                                                              9)', - '
                                                                                                                                              .appendChild(#text)', '
                                                                                                                                              1131462509.appendChild(
                                                                                                                                              10)' ]); clearLog();