diff options
Diffstat (limited to 'predicate-search-core/src/test/java/com/yahoo/document/predicate/DisjunctionTest.java')
-rw-r--r-- | predicate-search-core/src/test/java/com/yahoo/document/predicate/DisjunctionTest.java | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/predicate-search-core/src/test/java/com/yahoo/document/predicate/DisjunctionTest.java b/predicate-search-core/src/test/java/com/yahoo/document/predicate/DisjunctionTest.java new file mode 100644 index 00000000000..99dc46c4f5f --- /dev/null +++ b/predicate-search-core/src/test/java/com/yahoo/document/predicate/DisjunctionTest.java @@ -0,0 +1,113 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.document.predicate; + +import org.junit.Test; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertTrue; + +/** + * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen Hult</a> + */ +public class DisjunctionTest { + + @Test + public void requireThatDisjunctionIsAnOperator() { + assertTrue(PredicateOperator.class.isAssignableFrom(Disjunction.class)); + } + + @Test + public void requireThatAccessorsWork() { + Disjunction node = new Disjunction(); + Predicate a = SimplePredicates.newString("a"); + node.addOperand(a); + assertEquals(Arrays.asList(a), node.getOperands()); + Predicate b = SimplePredicates.newString("b"); + node.addOperand(b); + assertEquals(Arrays.asList(a, b), node.getOperands()); + Predicate c = SimplePredicates.newString("c"); + Predicate d = SimplePredicates.newString("d"); + node.addOperands(Arrays.asList(c, d)); + assertEquals(Arrays.asList(a, b, c, d), node.getOperands()); + Predicate e = SimplePredicates.newString("e"); + Predicate f = SimplePredicates.newString("f"); + node.setOperands(Arrays.asList(e, f)); + assertEquals(Arrays.asList(e, f), node.getOperands()); + } + + @Test + public void requireThatConstructorsWork() { + Predicate foo = SimplePredicates.newString("foo"); + Predicate bar = SimplePredicates.newString("bar"); + Disjunction node = new Disjunction(foo, bar); + assertEquals(Arrays.asList(foo, bar), node.getOperands()); + + node = new Disjunction(Arrays.asList(foo, bar)); + assertEquals(Arrays.asList(foo, bar), node.getOperands()); + } + + @Test + public void requireThatCloneIsImplemented() throws CloneNotSupportedException { + Disjunction node1 = new Disjunction(SimplePredicates.newString("a"), SimplePredicates.newString("b")); + Disjunction node2 = node1.clone(); + assertEquals(node1, node2); + assertNotSame(node1, node2); + assertNotSame(node1.getOperands(), node2.getOperands()); + } + + @Test + public void requireThatHashCodeIsImplemented() { + assertEquals(new Disjunction().hashCode(), new Disjunction().hashCode()); + } + + @Test + public void requireThatEqualsIsImplemented() { + Disjunction lhs = new Disjunction(SimplePredicates.newString("foo"), + SimplePredicates.newString("bar")); + assertTrue(lhs.equals(lhs)); + assertFalse(lhs.equals(new Object())); + + Disjunction rhs = new Disjunction(); + assertFalse(lhs.equals(rhs)); + rhs.addOperand(SimplePredicates.newString("foo")); + assertFalse(lhs.equals(rhs)); + rhs.addOperand(SimplePredicates.newString("bar")); + assertTrue(lhs.equals(rhs)); + } + + @Test + public void requireThatNodeDelimiterIsOR() { + assertEquals("", newDisjunction().toString()); + assertEquals("foo", newDisjunction("foo").toString()); + assertEquals("foo or bar", newDisjunction("foo", "bar").toString()); + assertEquals("foo or bar or baz", newDisjunction("foo", "bar", "baz").toString()); + } + + @Test + public void requireThatSimpleDisjunctionsArePrettyPrinted() { + assertEquals("foo or bar", + new Disjunction(SimplePredicates.newString("foo"), + SimplePredicates.newString("bar")).toString()); + } + + @Test + public void requireThatComplexDisjunctionsArePrintedAsGroup() { + assertEquals("foo or bar or baz", + new Disjunction(SimplePredicates.newString("foo"), + new Disjunction(SimplePredicates.newString("bar"), + SimplePredicates.newString("baz"))).toString()); + assertEquals("foo or (bar and baz)", + new Disjunction(SimplePredicates.newString("foo"), + new Conjunction(SimplePredicates.newString("bar"), + SimplePredicates.newString("baz"))).toString()); + } + + private static Disjunction newDisjunction(String... operands) { + return new Disjunction(SimplePredicates.newStrings(operands)); + } + +} |