@Before public void setup() { NodeBuilder rootBuilder = EmptyNodeState.EMPTY_NODE.builder(); NodeBuilder test = rootBuilder.child("test"); test.setProperty("a", 1); test.setProperty("b", 2); test.setProperty("c", 3); test.child("x"); test.child("y"); test.child("z").child("zz"); root = rootBuilder.getNodeState(); }
private static NodeState newNamespaceNode(String valid) { NodeBuilder ns = EMPTY_NODE.builder(); ns.child(REP_NSDATA).setProperty(REP_PREFIXES, Collections.singleton(valid), Type.STRINGS); return ns.getNodeState(); }
@Test public void simple() throws Exception{ NodeBuilder builder = EMPTY_NODE.builder(); builder.child("a").child("b"); builder.child("a").setProperty("foo", "bar"); NodeState state = builder.getNodeState(); assertTrue(EqualsDiff.equals(state, NodeStateCloner.cloneVisibleState(state))); }
@Test public void basicStuff() throws Exception{ NodeBuilder builder = EMPTY_NODE.builder(); builder.child("a").setProperty("foo", "bar"); builder.child("b").setProperty("foo", 1); assertDeserialization(builder); }
@Test (expected = IllegalStateException.class) public void updateNonExistingParent() throws Exception{ NodeBuilder builder = store.getRoot().builder(); builder.child("oak:index").child("fooIndex").setProperty("foo", "bar"); store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); NodeBuilder builder2 = EMPTY_NODE.builder(); builder2.child("a").child("oak:index").child("barIndex").setProperty("foo", "bar"); String json = createIndexDefn(builder2.getNodeState(), "/oak:index/fooIndex", "/a/oak:index/barIndex"); applyJson(json); }
@Test public void customAnalyzer() throws Exception{ NodeBuilder defnb = newLuceneIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "lucene", of(TYPENAME_STRING)); //Set this to -1 to avoid wrapping by LimitAnalyzer defnb.setProperty(FulltextIndexConstants.MAX_FIELD_LENGTH, -1); defnb.child(ANALYZERS).child(ANL_DEFAULT) .child(LuceneIndexConstants.ANL_TOKENIZER) .setProperty(LuceneIndexConstants.ANL_NAME, "whitespace"); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.getNodeState(), "/foo"); assertEquals(TokenizerChain.class.getName(), defn.getAnalyzer().getClass().getName()); }
@Test public void emptyProperty() throws Exception{ NodeBuilder builder = EMPTY_NODE.builder(); builder.child("a").setProperty("foo", Collections.emptyList(), Type.NAMES); assertDeserialization(builder); }
@Test public void testConnectOnAddProperty() { NodeBuilder root = base.builder(); NodeBuilder childA = root.child("x"); NodeBuilder childB = root.child("x"); assertFalse(childA.hasProperty("test")); childB.setProperty("test", "foo"); assertTrue(childA.hasProperty("test")); }
@Test public void indexRuleInheritanceOrdering() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.setProperty(OAK_CHILD_ORDER, ImmutableList.of("nt:hierarchyNode", "nt:base"),NAMES); rules.child("nt:hierarchyNode").setProperty(FulltextIndexConstants.FIELD_BOOST, 2.0); rules.child("nt:base").setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); assertEquals(3.0, getRule(defn, "nt:base").boost, 0); assertEquals(2.0, getRule(defn, "nt:hierarchyNode").boost, 0); assertEquals(3.0, getRule(defn, "nt:query").boost, 0); } @Test
@Test public void indexRuleInheritanceOrdering() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.setProperty(OAK_CHILD_ORDER, ImmutableList.of("nt:hierarchyNode", "nt:base"),NAMES); rules.child("nt:hierarchyNode").setProperty(FulltextIndexConstants.FIELD_BOOST, 2.0); rules.child("nt:base").setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); assertEquals(3.0, getRule(defn, "nt:base").boost, 0); assertEquals(2.0, getRule(defn, "nt:hierarchyNode").boost, 0); assertEquals(3.0, getRule(defn, "nt:query").boost, 0); } @Test
@Test public void indexRuleInheritanceOrdering2() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.setProperty(OAK_CHILD_ORDER, ImmutableList.of("nt:base", "nt:hierarchyNode"),NAMES); rules.child("nt:hierarchyNode").setProperty(FulltextIndexConstants.FIELD_BOOST, 2.0); rules.child("nt:base").setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); //As nt:base is defined earlier it would supercede everything assertEquals(3.0, getRule(defn, "nt:base").boost, 0); assertEquals(3.0, getRule(defn, "nt:hierarchyNode").boost, 0); assertEquals(3.0, getRule(defn, "nt:file").boost, 0); }
@Test public void indexRuleInheritanceOrdering2() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.setProperty(OAK_CHILD_ORDER, ImmutableList.of("nt:base", "nt:hierarchyNode"),NAMES); rules.child("nt:hierarchyNode").setProperty(FulltextIndexConstants.FIELD_BOOST, 2.0); rules.child("nt:base").setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); //As nt:base is defined earlier it would supercede everything assertEquals(3.0, getRule(defn, "nt:base").boost, 0); assertEquals(3.0, getRule(defn, "nt:hierarchyNode").boost, 0); assertEquals(3.0, getRule(defn, "nt:file").boost, 0); }
@Test public void simpleAggregateConfig() throws Exception{ NodeBuilder aggregates = builder.child(FulltextIndexConstants.AGGREGATES); NodeBuilder aggFolder = aggregates.child("nt:folder"); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_PATH, "*"); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); Aggregate agg = defn.getAggregate("nt:folder"); assertNotNull(agg); assertEquals(1, agg.getIncludes().size()); }
@Test public void disabledIgnored() throws Exception{ builder.child("nt:file").setProperty(createProperty(PROP_PATTERN, asList("jcr:content"), STRINGS)); builder.child("nt:file").setProperty(DocumentBundlor.PROP_DISABLED, true); BundledTypesRegistry registry = BundledTypesRegistry.from(builder.getNodeState()); assertTrue(registry.getBundlors().isEmpty()); }
@Test public void analyzerByComposition_CharFilter() throws Exception{ NodeBuilder nb = EMPTY_NODE.builder(); nb.child(ANL_TOKENIZER).setProperty(ANL_NAME, "whitespace"); NodeBuilder filters = nb.child(ANL_CHAR_FILTERS); filters.setProperty(OAK_CHILD_ORDER, ImmutableList.of("htmlStrip", "mapping"),NAMES); filters.child("mapping").setProperty(ANL_NAME, "mapping"); filters.child("htmlStrip"); //name is optional. Derived from nodeName TokenizerChain analyzer = (TokenizerChain) factory.createInstance(nb.getNodeState()); assertEquals(2, analyzer.getCharFilters().length); //check the order assertEquals(HTMLStripCharFilterFactory.class.getName(), analyzer.getCharFilters()[0].getClassArg()); assertEquals(MappingCharFilterFactory.class.getName(), analyzer.getCharFilters()[1].getClassArg()); }
private void switchBucket(String propertyName) { NodeBuilder propertyIndex = builder.child(PROPERTY_INDEX); NodeBuilder idx = propertyIndex.child(HybridPropertyIndexUtil.getNodeName(propertyName)); String head = idx.getString(HybridPropertyIndexUtil.PROP_HEAD_BUCKET); assertNotNull(head); int id = Integer.parseInt(head); idx.setProperty(PROP_PREVIOUS_BUCKET, head); idx.setProperty(PROP_HEAD_BUCKET, String.valueOf(id + 1)); builder = builder.getNodeState().builder(); }
@Test public void recursionEnabled() throws Exception{ Aggregate agFile = new Aggregate("nt:file", of(ni("*")), 5); mapper.add("nt:file", agFile); NodeBuilder nb = newNode("nt:file"); nb.child("a").child("c"); nb.child("b").setProperty(JCR_PRIMARYTYPE, "nt:file"); nb.child("b").child("b1").child("b2"); nb.child("c"); agFile.collectAggregates(nb.getNodeState(), col); assertEquals(4, col.getNodePaths().size()); assertThat(col.getNodePaths(), hasItems("a", "b", "c", "b/b1")); }
@Test public void fulltextEnabledAndAggregate() throws Exception{ NodeBuilder defnb = newFTPropertyIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo", "lucene", of("foo"), "async"); IndexDefinition defn = new IndexDefinition(root, defnb.getNodeState(), "/foo"); assertFalse(defn.isFullTextEnabled()); NodeBuilder aggregates = defnb.child(FulltextIndexConstants.AGGREGATES); NodeBuilder aggFolder = aggregates.child("nt:base"); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_PATH, "*"); defn = new IndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isFullTextEnabled()); }
@Test public void fulltextEnabledAndAggregate() throws Exception{ NodeBuilder defnb = newLucenePropertyIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "lucene", of("foo"), "async"); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.getNodeState(), "/foo"); assertFalse(defn.isFullTextEnabled()); NodeBuilder aggregates = defnb.child(FulltextIndexConstants.AGGREGATES); NodeBuilder aggFolder = aggregates.child("nt:base"); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_PATH, "*"); defn = new LuceneIndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isFullTextEnabled()); }
@Test public void nestedBuilderFromState() throws Exception { NodeState rootState = store.getRoot(); NodeBuilder rootBuilder = rootState.builder(); rootBuilder.child("newNode"); NodeState baseState = rootBuilder.getNodeState(); NodeBuilder builderFromState = baseState.builder(); assertTrue(builderFromState.hasChildNode("newNode")); }