Skip to content

Commit 7d9a04f

Browse files
better test for exposing issue.
1 parent a7c8f79 commit 7d9a04f

File tree

1 file changed

+44
-16
lines changed

1 file changed

+44
-16
lines changed

test/hooks.js

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
// basic implementation of a preserve-me attr
2+
const preserveMeCallbacks = {
3+
beforeNodeRemoved(node) {
4+
if (node.dataset?.preserveMe) return false;
5+
},
6+
beforeNodeMorphed(oldNode, newContent) {
7+
if (oldNode.dataset?.preserveMe) return false;
8+
},
9+
};
10+
111
describe("lifecycle hooks", function () {
212
beforeEach(function () {
313
clearWorkArea();
@@ -121,14 +131,40 @@ describe("lifecycle hooks", function () {
121131
initial.outerHTML.should.equal("<ul><li>A</li><li>B</li></ul>");
122132
});
123133

124-
it("returning false to beforeNodeRemoved prevents removing the node with removed elemnt next to relocated id element", function () {
125-
let initial = make(`<div><div><a id="a">A</a></div><div><b id="b">B</b><input type="checkbox" data-preserve-me="true" id="preserve-me"></div></div>`);
126-
Idiomorph.morph(initial, `<div><div><a id="a">A</a><b id="b">B</b></div></div>`, {
127-
callbacks: {
128-
beforeNodeRemoved: (node) => false,
129-
},
134+
it.only("returning false to beforeNodeRemoved prevents removing the node with removed elemnt next to relocated id element", function () {
135+
getWorkArea().innerHTML = `
136+
<div>
137+
<div>
138+
<a id="a">A</a>
139+
</div>
140+
<div>
141+
<b id="b">B</b>
142+
<input type="checkbox" data-preserve-me="true" id="preserve-me">
143+
</div>
144+
</div>
145+
`;
146+
Idiomorph.morph(getWorkArea(), `
147+
<div>
148+
<div>
149+
<a id="a">A</a>
150+
<b id="b">B</b>
151+
</div>
152+
</div>
153+
`, {
154+
morphStyle: "innerHTML",
155+
callbacks: preserveMeCallbacks,
130156
});
131-
initial.outerHTML.should.equal(`<div><div><a id="a">A</a><b id="b">B</b></div><div><input type="checkbox" data-preserve-me="true" id="preserve-me"></div></div>`);
157+
getWorkArea().innerHTML.should.equal(`
158+
<div>
159+
<div>
160+
<a id="a">A</a>
161+
<b id="b">B</b>
162+
</div>
163+
<div>
164+
<input type="checkbox" data-preserve-me="true" id="preserve-me">
165+
</div>
166+
</div>
167+
`);
132168
});
133169

134170
it("returning false to beforeNodeRemoved prevents removing the node with different tag types", function () {
@@ -325,15 +361,7 @@ describe("lifecycle hooks", function () {
325361

326362
Idiomorph.morph(getWorkArea(), finalSrc, {
327363
morphStyle: "innerHTML",
328-
callbacks: {
329-
// basic implementation of a preserve-me attr
330-
beforeNodePantried(node) {
331-
if (node.parentNode?.dataset?.preserveMe) return false;
332-
},
333-
beforeNodeMorphed(oldNode, newContent) {
334-
if (oldNode.dataset?.preserveMe) return false;
335-
},
336-
},
364+
callbacks: preserveMeCallbacks,
337365
});
338366

339367
getWorkArea().innerHTML.should.equal(`

0 commit comments

Comments
 (0)