// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.request; import com.yahoo.search.grouping.request.parser.ParseException; import com.yahoo.search.grouping.request.parser.TokenMgrError; import org.junit.Test; import java.util.List; import static org.junit.Assert.*; /** * @author Simon Thoresen */ public class GroupingOperationTestCase { @Test public void requireThatAccessorsWork() { GroupingOperation op = new AllOperation(); GroupingExpression exp = new AttributeValue("alias"); op.putAlias("alias", exp); assertSame(exp, op.getAlias("alias")); assertEquals(0, op.getHints().size()); assertFalse(op.containsHint("foo")); assertFalse(op.containsHint("bar")); op.addHint("foo"); assertEquals(1, op.getHints().size()); assertTrue(op.containsHint("foo")); assertFalse(op.containsHint("bar")); op.addHint("bar"); assertEquals(2, op.getHints().size()); assertTrue(op.containsHint("foo")); assertTrue(op.containsHint("bar")); op.setForceSinglePass(true); assertTrue(op.getForceSinglePass()); op.setForceSinglePass(false); assertFalse(op.getForceSinglePass()); exp = new AttributeValue("orderBy"); op.addOrderBy(exp); assertEquals(1, op.getOrderBy().size()); assertSame(exp, op.getOrderBy(0)); exp = new AttributeValue("output"); op.addOutput(exp); assertEquals(1, op.getOutputs().size()); assertSame(exp, op.getOutput(0)); GroupingOperation child = new AllOperation(); op.addChild(child); assertEquals(1, op.getChildren().size()); assertSame(child, op.getChild(0)); exp = new AttributeValue("groupBy"); op.setGroupBy(exp); assertSame(exp, op.getGroupBy()); op.setWhere("whereA"); assertEquals("whereA", op.getWhere()); op.setWhere("whereB"); assertEquals("whereB", op.getWhere()); op.setAccuracy(0.6); assertEquals(0.6, op.getAccuracy(), 1E-6); op.setAccuracy(0.9); assertEquals(0.9, op.getAccuracy(), 1E-6); op.setPrecision(6); assertEquals(6, op.getPrecision()); op.setPrecision(9); assertEquals(9, op.getPrecision()); assertFalse(op.hasMax()); op.setMax(6); assertTrue(op.hasMax()); assertEquals(6, op.getMax()); op.setMax(9); assertEquals(9, op.getMax()); assertTrue(op.hasMax()); op.setMax(0); assertTrue(op.hasMax()); op.setMax(-7); assertFalse(op.hasMax()); } @Test public void requireThatFromStringAsListParsesAllOperations() { List lst = GroupingOperation.fromStringAsList(""); assertTrue(lst.isEmpty()); lst = GroupingOperation.fromStringAsList("all()"); assertEquals(1, lst.size()); assertTrue(lst.get(0) instanceof AllOperation); lst = GroupingOperation.fromStringAsList("each()"); assertEquals(1, lst.size()); assertTrue(lst.get(0) instanceof EachOperation); lst = GroupingOperation.fromStringAsList("all();each()"); assertEquals(2, lst.size()); assertTrue(lst.get(0) instanceof AllOperation); assertTrue(lst.get(1) instanceof EachOperation); } @Test public void requireThatFromStringAcceptsOnlyOneOperation() { try { GroupingOperation.fromString(""); fail(); } catch (IllegalArgumentException e) { } assertTrue(GroupingOperation.fromString("all()") instanceof AllOperation); assertTrue(GroupingOperation.fromString("each()") instanceof EachOperation); try { GroupingOperation.fromString("all();each()"); fail(); } catch (IllegalArgumentException e) { } } @Test public void requireThatParseExceptionsAreRethrown() { try { GroupingOperation.fromString("all(foo)"); fail(); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().startsWith("Encountered \"foo\" at line 1, column 5.\n")); assertTrue(e.getCause() instanceof ParseException); } } @Test public void requireThatTokenErrorsAreRethrown() { try { GroupingOperation.fromString("all(\\foo)"); fail(); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().startsWith("Lexical error at line 1, column 6.")); assertTrue(e.getCause() instanceof TokenMgrError); } } }