package org.quaere.dsl; import org.junit.Test; import org.quaere.Queryable; import org.quaere.QueryableIterable; import org.quaere.expressions.*; import junit.framework.Assert; import java.util.Arrays; public class ElementOperatorBuilderTest { @Test public void canOmitPredicateGetFirstElementInQueryable() { Queryable<Integer> numbers = new QueryableIterable<Integer>(Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2, 0)); ElementOperatorBuilder elementOperatorBuilder = new ElementOperatorBuilderImpl("first"); Integer firstNum = elementOperatorBuilder.in(numbers).as("n").where(""); Assert.assertEquals(5, (int) firstNum); } @Test public void canUseLiteralPredicateToRestrictSelection() { Queryable<Integer> numbers = new QueryableIterable<Integer>(Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2, 0)); ElementOperatorBuilder elementOperatorBuilder = new ElementOperatorBuilderImpl("first"); Integer firstNum = elementOperatorBuilder.in(numbers).as("n").where("n < 4"); Assert.assertEquals(1, (int) firstNum); } @Test public void canUsePredicateToRestrictSelection() { Queryable<Integer> numbers = new QueryableIterable<Integer>(Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2, 0)); ElementOperatorBuilder elementOperatorBuilder = new ElementOperatorBuilderImpl("first"); BinaryExpression nLessThanFour = BinaryExpression.lessThan( new Statement( Arrays.<Expression>asList( new Identifier("n") ) ), new Statement( Arrays.<Expression>asList( new Constant(4) ) ) ); Integer firstNum = elementOperatorBuilder.in(numbers).as("n").where(nLessThanFour); Assert.assertEquals(1, (int) firstNum); } @Test public void canUsePredicateWithIndexerToRestrictSelection() { Queryable<Integer> numbers = new QueryableIterable<Integer>(Arrays.asList(0, 1, 5, 4, 3, 9, 8, 6, 7, 2, 0)); ElementOperatorBuilder elementOperatorBuilder = new ElementOperatorBuilderImpl("first"); BinaryExpression nGreaterThanIndex = BinaryExpression.greaterThan( new Statement( Arrays.<Expression>asList( new Identifier("n") ) ), new Statement( Arrays.<Expression>asList( new Identifier("index") ) ) ); Integer firstNum = elementOperatorBuilder.in(numbers).as("n").withIndexer("index").where(nGreaterThanIndex); Assert.assertEquals(5, (int) firstNum); } }