2018-06-25 21:35:39 -07:00

63 lines
1.8 KiB
JavaScript

var expect = require("chai").expect;
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 = el.___markoVElement.___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
);
}
}
}
};