* property is considered dead weight and should be removed from the index</li>
* </ul>
*/
@Test
public void testIndexPruning() throws Exception {
IndexStoreStrategy store = new ContentMirrorStoreStrategy();
NodeState root = EMPTY_NODE;
NodeBuilder index = root.builder();
store.insert(index, "key",
Sets.newHashSet("/", "a/b/c", "a/b/d", "b", "d/e", "d/e/f"));
checkPath(index, "key", "", true);
checkPath(index, "key", "a/b/c", true);
checkPath(index, "key", "a/b/d", true);
checkPath(index, "key", "b", true);
checkPath(index, "key", "d/e", true);
checkPath(index, "key", "d/e/f", true);
// remove the root key, removes just the "match" property, when the
// index is not empty
store.remove(index, "key", Sets.newHashSet("/"));
checkPath(index, "key", "d/e/f", true);
// removing intermediary path doesn't remove the entire subtree
store.remove(index, "key", Sets.newHashSet("d/e"));
checkPath(index, "key", "d/e/f", true);
// removing intermediary path doesn't remove the entire subtree
store.remove(index, "key", Sets.newHashSet("d/e/f"));
checkNotPath(index, "key", "d");
// brother segment removed
store.remove(index, "key", Sets.newHashSet("a/b/d", "a/b"));
checkPath(index, "key", "a/b/c", true);
// reinsert root and remove everything else
store.insert(index, "key", Sets.newHashSet("/"));
store.remove(index, "key", Sets.newHashSet("d/e/f", "b", "a/b/c"));
// remove the root key when the index is empty
store.remove(index, "key", Sets.newHashSet("/"));
Assert.assertEquals(0, index.getChildNodeCount());
}