@Test public void checkTransformSelectionAndsAreSplit() { IRelAlgExpr subResult; StubResult<IRelAlgExpr> subExpression; IRowSelector[] basePredicates = new IRowSelector[3]; IRowSelector[] results = new IRowSelector[3]; IRowSelector predicate; subResult = createMock(IRelAlgExpr.class); subExpression = new StubResult<IRelAlgExpr>(subResult); for (int i = 0; i < basePredicates.length; i++) { results[i] = createMock(IRowSelector.class); List<IRowSelector> currentSubResult = new LinkedList<IRowSelector>(); currentSubResult.add(results[i]); basePredicates[i] = new RowselectorStubResult<Collection<IRowSelector>>(currentSubResult); } predicate = new BinaryOperation( new BinaryOperation(basePredicates[0], BooleanValueCombination.AND, basePredicates[1]), BooleanValueCombination.AND, basePredicates[2]); Selection input = new Selection(predicate, subExpression); replayAll(); SelectionSplitter subject = new SelectionSplitter(); IRelAlgExpr result = subject.transformSelection(input); verifyAll(); Selection[] transformedSelections = new Selection[3]; assertThat(result, is(instanceOf(Selection.class))); transformedSelections[0] = (Selection) result; assertThat(transformedSelections[0].getSubExpression(), is(instanceOf(Selection.class))); transformedSelections[1] = (Selection) transformedSelections[0].getSubExpression(); assertThat(transformedSelections[1].getSubExpression(), is(instanceOf(Selection.class))); transformedSelections[2] = (Selection) transformedSelections[1].getSubExpression(); assertThat(transformedSelections[2].getSubExpression(), is(equalTo(subResult))); for (int i = 0; i < basePredicates.length; i++) { assertThat( results[i], is( anyOf( equalTo(transformedSelections[0].getPredicate()), equalTo(transformedSelections[1].getPredicate()), equalTo(transformedSelections[2].getPredicate())))); } }