package com.getbase.android.db.fluentsqlite; import static com.getbase.android.db.fluentsqlite.Expressions.arg; import static com.getbase.android.db.fluentsqlite.Expressions.column; import static com.getbase.android.db.fluentsqlite.Expressions.literal; import static com.getbase.android.db.fluentsqlite.Query.select; import static com.google.common.truth.Truth.assertThat; import com.getbase.android.db.fluentsqlite.Expressions.Expression; import com.google.common.base.Function; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMap; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.ParameterizedRobolectricTestRunner; import org.robolectric.ParameterizedRobolectricTestRunner.Parameters; import org.robolectric.annotation.Config; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; @RunWith(ParameterizedRobolectricTestRunner.class) @Config(manifest = Config.NONE) public class ExpressionsArgsCountTest { private int mActual; private int mExpected; public ExpressionsArgsCountTest(int actual, int expected) { mActual = actual; mExpected = expected; } private static final Map<Expression, Integer> TEST_CASES = ImmutableMap.<Expression, Integer>builder() .put(literal(42), 0) .put(arg(), 1) .put(arg().eq().arg(), 2) .put(arg().eq(arg()), 2) .put(column("id").in(select().column("id").from("table_a").where(column("priority").eq().arg(), "1").build()), 1) .put(column("id").in(select().column("id").from("table_a").where("priority=?", "1").build()), 1) .build(); @Parameters public static Collection<Object[]> data() { return FluentIterable .from(TEST_CASES.entrySet()) .transform(new Function<Entry<Expression, Integer>, Object[]>() { @Override public Object[] apply(Entry<Expression, Integer> input) { return new Object[] { input.getKey().getArgsCount(), input.getValue() }; } }) .toList(); } @Test public void shouldCountExpressionArgsSql() throws Exception { assertThat(mActual).isEqualTo(mExpected); } }