package org.xenei.jdbc4sparql.iface.name;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.xenei.jdbc4sparql.impl.NameUtils;
@RunWith(Parameterized.class)
public class ColumnNameTests {
private ColumnName columnName;
private final String catalog;
private final String schema;
private final String table;
private final String column;
private String DBName;
private String SPARQLName;
@Parameters(name = "catalog:{0} schema:{1} table:{2} col:{3}")
public static Collection<String[]> data() {
final List<String[]> lst = new ArrayList<String[]>();
for (final String catalog : new String[] {
"", "catalog"
}) {
for (final String schema : new String[] {
"", "schema"
}) {
for (final String table : new String[] {
"", "table"
}) {
for (final String column : new String[] {
"", "column"
}) {
lst.add(new String[] {
catalog, schema, table, column
});
}
}
}
}
return lst;
}
public ColumnNameTests(final String catalog, final String schema,
final String table, final String column) {
this.catalog = catalog;
this.schema = schema;
this.table = table;
this.column = column;
columnName = new ColumnName(catalog, schema, table, column);
if ((schema != null) && (schema.length() > 0)) {
DBName = String.format("%s%s", schema, NameUtils.DB_DOT);
SPARQLName = String.format("%s%s", schema, NameUtils.SPARQL_DOT);
}
else {
DBName = "";
SPARQLName = "";
}
final String ts = StringUtils.defaultString(table);
if ((ts.length() > 0) || (DBName.length() > 0)) {
DBName += String.format("%s%s", ts, NameUtils.DB_DOT);
SPARQLName += String.format("%s%s", ts, NameUtils.SPARQL_DOT);
}
if (column != null) {
DBName += column;
SPARQLName += column;
}
}
@Test
public void constructionTest() {
assertEquals(schema, columnName.getSchema());
assertEquals(table, columnName.getTable());
assertEquals(column, columnName.getColumn());
assertEquals(DBName, columnName.getDBName());
assertEquals(SPARQLName, columnName.getSPARQLName());
assertEquals(column, columnName.getShortName());
}
@Test
public void testTableFromColumn() {
final TableName tableName = columnName.getTableName();
assertEquals(schema, tableName.getSchema());
assertEquals(table, tableName.getTable());
assertNull(tableName.getColumn());
assertEquals(table, tableName.getShortName());
}
@Test
public void testCatalogWithDBDot() {
try {
columnName = new ColumnName("cat" + NameUtils.DB_DOT + "alog",
schema, table, column);
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
assertEquals("Catalog name may not contain '.'",
expected.getMessage());
}
}
@Test
public void testCatalogWithSPARQLDot() {
try {
columnName = new ColumnName("cat" + NameUtils.SPARQL_DOT + "alog",
schema, table, column);
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
assertEquals("Catalog name may not contain '"
+ NameUtils.SPARQL_DOT + "'", expected.getMessage());
}
}
@Test
public void testSchemaWithDBDot() {
try {
columnName = new ColumnName(catalog, "sch" + NameUtils.DB_DOT
+ "ema", table, column);
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
assertEquals("Schema name may not contain '.'",
expected.getMessage());
}
}
@Test
public void testSchemaWithSPARQLDot() {
try {
columnName = new ColumnName(catalog, "sch" + NameUtils.SPARQL_DOT
+ "ema", table, column);
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
assertEquals("Schema name may not contain '" + NameUtils.SPARQL_DOT
+ "'", expected.getMessage());
}
}
@Test
public void testTableWithDBDot() {
try {
columnName = new ColumnName(catalog, schema, "ta"
+ NameUtils.DB_DOT + "ble", column);
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
assertEquals("Table name may not contain '.'",
expected.getMessage());
}
}
@Test
public void testTableWithSPARQLDot() {
try {
columnName = new ColumnName(catalog, schema, "ta"
+ NameUtils.SPARQL_DOT + "ble", column);
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
assertEquals("Table name may not contain '" + NameUtils.SPARQL_DOT
+ "'", expected.getMessage());
}
}
@Test
public void testColumnWithDBDot() {
try {
columnName = new ColumnName(catalog, schema, table, "col"
+ NameUtils.DB_DOT + "umn");
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
assertEquals("Column name may not contain '.'",
expected.getMessage());
}
}
@Test
public void testColumnWithSPARQLDot() {
try {
columnName = new ColumnName(catalog, schema, table, "col"
+ NameUtils.SPARQL_DOT + "umn");
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
assertEquals("Column name may not contain '" + NameUtils.SPARQL_DOT
+ "'", expected.getMessage());
}
}
@Test
public void testColumnFromColumn() {
columnName = new ColumnName(columnName);
assertEquals(schema, columnName.getSchema());
assertEquals(table, columnName.getTable());
assertEquals(column, columnName.getColumn());
assertEquals(DBName, columnName.getDBName());
assertEquals(SPARQLName, columnName.getSPARQLName());
assertEquals(column, columnName.getShortName());
}
@Test
public void testTableFromColumnFromTable() {
columnName = new ColumnName(columnName);
final TableName tableName = columnName.getTableName();
assertEquals(schema, tableName.getSchema());
assertEquals(table, tableName.getTable());
assertNull(tableName.getColumn());
assertEquals(table, tableName.getShortName());
try {
columnName = new ColumnName(new TableName("catalog", "schema2",
"table"));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException e) {
assertEquals("Segment column may not be null", e.getMessage());
}
try {
columnName = new ColumnName(new SchemaName("catalog", "schema2"));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException e) {
assertEquals("Segment table may not be null", e.getMessage());
}
try {
columnName = new ColumnName(new CatalogName("catalog"));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException e) {
assertEquals("Segment schema may not be null", e.getMessage());
}
}
@Test
public void testColumnWithSegments() {
final boolean tf[] = {
true, false
};
NameSegments segments = null;
for (final boolean schemaFlg : tf) {
for (final boolean tableFlg : tf) {
for (final boolean columnFlg : tf) {
segments = NameSegments.getInstance(false, schemaFlg,
tableFlg, columnFlg);
final ColumnName result = new ColumnName(columnName,
segments);
assertEquals("Bad schema: " + segments.toString(),
schemaFlg ? schema : null, result.getSchema());
assertEquals("Bad table: " + segments.toString(),
tableFlg ? table : null, result.getTable());
assertEquals("Bad column: " + segments.toString(), column,
result.getColumn()); // column is always returned
}
}
}
}
}