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.junit.Assert;
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 SchemaNameTests {
@Parameters(name = "schema:{0}")
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"
}) {
lst.add(new String[] {
catalog, schema
});
}
}
return lst;
}
private SchemaName schemaName;
private final String catalog;
private final String schema;
private String DBName;
private String SPARQLName;
public SchemaNameTests(final String catalog, final String schema) {
this.catalog = catalog;
this.schema = schema;
schemaName = new SchemaName(catalog, schema);
if ((schema != null) && (schema.length() > 0)) {
DBName = schema;
SPARQLName = schema;
}
else {
DBName = "";
SPARQLName = "";
}
}
@Test
public void testConstructor() {
Assert.assertEquals(schema, schemaName.getSchema());
Assert.assertNull(schemaName.getTable());
Assert.assertNull(schemaName.getColumn());
Assert.assertEquals(DBName, schemaName.getDBName());
Assert.assertEquals(SPARQLName, schemaName.getSPARQLName());
Assert.assertEquals(schema, schemaName.getShortName());
}
@Test
public void testSchemaFromSchema() {
schemaName = new SchemaName(schemaName);
Assert.assertEquals(schema, schemaName.getSchema());
Assert.assertNull(schemaName.getTable());
Assert.assertNull(schemaName.getColumn());
Assert.assertEquals(DBName, schemaName.getDBName());
Assert.assertEquals(SPARQLName, schemaName.getSPARQLName());
Assert.assertEquals(schema, schemaName.getShortName());
}
@Test
public void testCatalogWithDBDot() {
try {
schemaName = new SchemaName("cat" + NameUtils.DB_DOT + "alog",
schema);
Assert.fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
Assert.assertEquals("Catalog name may not contain '.'",
expected.getMessage());
}
}
@Test
public void testCatalogWithSPARQLDot() {
try {
schemaName = new SchemaName("cat" + NameUtils.SPARQL_DOT + "alog",
schema);
Assert.fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
Assert.assertEquals("Catalog name may not contain '"
+ NameUtils.SPARQL_DOT + "'", expected.getMessage());
}
}
@Test
public void testSchemaWithDBDot() {
try {
schemaName = new SchemaName(catalog, "sch" + NameUtils.DB_DOT
+ "ema");
Assert.fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
Assert.assertEquals("Schema name may not contain '.'",
expected.getMessage());
}
}
@Test
public void testSchemaWithSPARQLDot() {
try {
schemaName = new SchemaName(catalog, "sch" + NameUtils.SPARQL_DOT
+ "ema");
Assert.fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
Assert.assertEquals("Schema name may not contain '"
+ NameUtils.SPARQL_DOT + "'", expected.getMessage());
}
}
@Test
public void testGetTableName() {
TableName tableName = schemaName.getTableName("table");
assertEquals(schema, tableName.getSchema());
assertEquals("table", tableName.getTable());
assertNull(tableName.getColumn());
assertEquals("table", tableName.getShortName());
tableName = schemaName.getTableName("");
assertEquals(schema, tableName.getSchema());
assertEquals("", tableName.getTable());
assertNull(tableName.getColumn());
assertEquals("", tableName.getShortName());
try {
tableName = schemaName.getTableName(null);
fail("Should have thrown IllegalArgumentException");
} catch (final IllegalArgumentException e) {
assertEquals("Segment table may not be null", e.getMessage());
}
}
@Test
public void testSchemaWithSegments() {
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 SchemaName result = new SchemaName(schemaName,
segments);
assertEquals("Bad schema: " + segments.toString(), schema,
result.getSchema()); // always returns the schema
assertNull("Bad table: " + segments.toString(),
result.getTable());
assertNull("Bad column: " + segments.toString(),
result.getColumn());
}
}
}
}
}