package net.sourceforge.mayfly.datastore;
import junit.framework.TestCase;
import net.sourceforge.mayfly.MayflyException;
import net.sourceforge.mayfly.datastore.types.FakeDataType;
import net.sourceforge.mayfly.evaluation.expression.DefaultValue;
import net.sourceforge.mayfly.util.ImmutableList;
import net.sourceforge.mayfly.util.L;
import java.util.Arrays;
public class ColumnsTest extends TestCase {
public void testFromColumnNames() throws Exception {
Columns columns = Columns.fromColumnNames(
new L()
.append("a")
.append("b")
);
assertEquals(2, columns.columnCount());
assertEquals("a", columns.column(0).columnName());
assertEquals("b", columns.column(1).columnName());
}
public void testLookup() throws Exception {
Columns columns = new Columns(new ImmutableList(Arrays.asList(
new Column[] {
new Column("a"),
new Column("b"),
new Column("d")
})));
assertEquals("b", columns.columnFromName("b").columnName());
assertEquals("b", columns.columnFromName("B").columnName() );
try {
columns.columnFromName("c");
fail();
} catch (MayflyException e) {
assertEquals("no column c", e.getMessage());
}
assertEquals("d", columns.columnFromName("d").columnName());
}
public void testReplace() throws Exception {
Columns columns = new Columns(new ImmutableList(Arrays.asList(
new Column[] {
new Column("a"),
new Column("b"),
new Column("c")
})));
Columns newColumns = columns.replace(
new Column("b", DefaultValue.NOT_SPECIFIED, null, true, false,
new FakeDataType(), false)
);
assertFalse(columns.columnFromName("b").isSequenceOrAutoIncrement());
assertTrue(newColumns.columnFromName("b").isSequenceOrAutoIncrement());
assertEquals(Arrays.asList(new String[] { "a", "b", "c" }),
newColumns.asNames());
}
public void testAddLast() throws Exception {
Columns columns = Columns.fromColumnNames(ImmutableList.singleton("a"));
Columns newColumns = columns.with(new Column("b"));
assertEquals(Arrays.asList(new String[] { "a", "b" }),
newColumns.asNames());
}
public void testAddFirst() throws Exception {
Columns columns = Columns.fromColumnNames(ImmutableList.singleton("b"));
Columns newColumns = columns.with(new Column("a"), Position.FIRST);
assertEquals(Arrays.asList(new String[] { "a", "b" }),
newColumns.asNames());
}
public void testAddAfter() throws Exception {
Columns columns = new Columns(new ImmutableList(Arrays.asList(
new Column[] {
new Column("a"),
new Column("c"),
})));
Columns newColumns = columns.with(new Column("b"), Position.after("a"));
assertEquals(Arrays.asList(new String[] { "a", "b", "c" }),
newColumns.asNames());
}
public void testAddAfterNotFound() throws Exception {
Columns columns = new Columns(new ImmutableList(Arrays.asList(
new Column[] {
new Column("a"),
new Column("c"),
})));
try {
columns.with(new Column("b"), Position.after("b"));
fail();
}
catch (MayflyException e) {
assertEquals("no column b", e.getMessage());
}
}
public void testAddDuplicate() throws Exception {
Columns columns = new Columns(new ImmutableList(Arrays.asList(
new Column[] {
new Column("a"),
new Column("b"),
new Column("c")
})));
try {
columns.with(new Column("b"));
fail();
}
catch (MayflyException e) {
assertEquals("duplicate column b", e.getMessage());
}
}
}