mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
var expect = require("chai").expect;
|
|
var domData = require("../../../../src/runtime/components/dom-data");
|
|
var vElementByDOMNode = domData.___vElementByDOMNode;
|
|
|
|
module.exports = function (helpers) {
|
|
var component = helpers.mount(require.resolve("./index"), {});
|
|
var rootEl = component.getEl();
|
|
var itemIds = ["child-a", "child-b", "child-c"];
|
|
|
|
itemIds.forEach((id) => component.addItem(id));
|
|
component.update();
|
|
|
|
var curLookup = getKeyLookup();
|
|
|
|
component.removeItem(itemIds[1]);
|
|
component.update();
|
|
|
|
ensurePreservedKeys(curLookup, (curLookup = getKeyLookup()));
|
|
|
|
component.removeItem(itemIds[0]);
|
|
component.update();
|
|
|
|
ensurePreservedKeys(curLookup, (curLookup = getKeyLookup()));
|
|
|
|
function getKeyLookup(els) {
|
|
els = els || rootEl.children;
|
|
var lookup = {};
|
|
|
|
for (var i = 0; i < els.length; i++) {
|
|
var el = els[i];
|
|
var component = helpers.getComponentForEl(el);
|
|
var key = vElementByDOMNode.get(el).___key;
|
|
lookup[key] = {
|
|
el: el,
|
|
component: component,
|
|
children: getKeyLookup(el.children),
|
|
};
|
|
}
|
|
|
|
return lookup;
|
|
}
|
|
|
|
function ensurePreservedKeys(lookupA, lookupB, path) {
|
|
path = path || "";
|
|
for (var key in lookupB) {
|
|
if (lookupA[key]) {
|
|
var fullPath = path + " " + key;
|
|
expect(
|
|
lookupA[key].el === lookupB[key].el,
|
|
'unpreserved element "' + fullPath + '"',
|
|
).to.equal(true);
|
|
expect(
|
|
lookupA[key].component === lookupB[key].component,
|
|
'unpreserved component "' + fullPath + '"',
|
|
).to.equal(true);
|
|
ensurePreservedKeys(
|
|
lookupA[key].children,
|
|
lookupB[key].children,
|
|
fullPath,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
};
|