Skip to content

Commit

Permalink
Expressions - immutable parameter binding, pruning unbound conditions #…
Browse files Browse the repository at this point in the history
…602

* flattenning parameterized tests for readability and flexibility
  • Loading branch information
andrus committed Jul 30, 2023
1 parent 66582f2 commit efd39c5
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 84 deletions.
75 changes: 33 additions & 42 deletions agrest-engine/src/test/java/io/agrest/exp/parser/ExpEqualTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,43 @@
import io.agrest.exp.AgExpression;
import io.agrest.protocol.Exp;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.provider.Arguments;

import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;

class ExpEqualTest extends AbstractExpTest {

@Override
ExpTestVisitor provideVisitor() {
return new ExpTestVisitor(ExpEqual.class);
}

@Override
Stream<String> parseExp() {
return Stream.of(
"a=b",
"a = b",
"a = b",
"a == b",
"$a = $b",
"1 = 2",
"1 = 2.2",
"1 = TRUE",
"'1' = '2'",
"null = c",
"a = currentDate()"
);
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;

import static org.junit.jupiter.api.Assertions.*;

public class ExpEqualTest {

@ParameterizedTest
@ValueSource(strings = {"a=b",
"a = b",
"a = b",
"a == b",
"$a = $b",
"1 = 2",
"1 = 2.2",
"1 = TRUE",
"'1' = '2'",
"null = c",
"a = currentDate()"})
public void parse(String expString) {
assertEquals(ExpEqual.class, Exp.parse(expString).getClass());
}

@Override
Stream<Arguments> parseExpThrows() {
return Stream.of(
Arguments.of("=", AgException.class),
Arguments.of("a =", AgException.class),
Arguments.of("= b", AgException.class)
);
@ParameterizedTest
@CsvSource({
"a=b,(a) = (b)",
"a = b,(a) = (b)"
})
public void parsedToString(String expString, String expected) {
assertEquals(expected, Exp.parse(expString).toString());
}

@Override
Stream<Arguments> stringifyRaw() {
return Stream.of(
Arguments.of("a=b", "(a) = (b)"),
Arguments.of("a = b", "(a) = (b)")
);
@ParameterizedTest
@ValueSource(strings = {"=", "a =", "= b"})
public void parseInvalidGrammar(String expString) {
assertThrows(AgException.class, () -> Exp.parse(expString));
}

@Test
Expand Down
81 changes: 39 additions & 42 deletions agrest-engine/src/test/java/io/agrest/exp/parser/ExpInTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,57 +4,54 @@
import io.agrest.exp.AgExpression;
import io.agrest.protocol.Exp;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;

import java.util.List;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.*;

public class ExpInTest extends AbstractExpTest {
public class ExpInTest {

@Override
ExpTestVisitor provideVisitor() {
return new ExpTestVisitor(ExpIn.class);
@ParameterizedTest
@ValueSource(strings = {
"a in('b','c')",
"a in ('b', 'c')",
"a in ('b')",
"a in ('b', 'c')",
"a in ($b, $c)",
"a in (1, 2)",
"a in (1, 2.2)",
"a in (1, TRUE)",
"a in ('1', '2')",
"a in $b"})
public void parse(String expString) {
assertEquals(ExpIn.class, Exp.parse(expString).getClass());
}

@Override
Stream<String> parseExp() {
return Stream.of(
"a in('b','c')",
"a in ('b', 'c')",
"a in ('b')",
"a in ('b', 'c')",
"a in ($b, $c)",
"a in (1, 2)",
"a in (1, 2.2)",
"a in (1, TRUE)",
"a in ('1', '2')",
"a in $b"
);
@ParameterizedTest
@CsvSource(delimiterString = "|", value = {
"a in('b','c')|a in ('b', 'c')",
"a in ('b', 'c')|a in ('b', 'c')",
"a in ('b', 'c', 'd')|a in ('b', 'c', 'd')",
"a in $b|a in $b"
})
public void parsedToString(String expString, String expected) {
assertEquals(expected, Exp.parse(expString).toString());
}

@Override
Stream<Arguments> parseExpThrows() {
return Stream.of(
Arguments.of("a in", AgException.class),
Arguments.of("a in ()", AgException.class),
Arguments.of("a in ('b',)", AgException.class),
Arguments.of("a in (null, 'c')", AgException.class),
Arguments.of("a in (, 'c')", AgException.class),
Arguments.of("a IN ('b', 'c')", AgException.class)
);
}

@Override
Stream<Arguments> stringifyRaw() {
return Stream.of(
Arguments.of("a in('b','c')", "a in ('b', 'c')"),
Arguments.of("a in ('b', 'c')", "a in ('b', 'c')"),
Arguments.of("a in ('b', 'c', 'd')", "a in ('b', 'c', 'd')"),
Arguments.of("a in $b", "a in $b")
);
@ParameterizedTest
// TODO: null should be a valid scalar in the list
@ValueSource(strings = {
"a in",
"a in ()",
"a in ('b',)",
"a in (null, 'c')",
"a in (, 'c')",
"a IN ('b', 'c')"})
public void parseInvalidGrammar(String expString) {
assertThrows(AgException.class, () -> Exp.parse(expString));
}

@Test
Expand Down

0 comments on commit efd39c5

Please sign in to comment.