package edu.washington.escience.myria;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import org.junit.Test;
public class RelationKeyTest {
/* r1a and r1b are the same */
RelationKey r1a = RelationKey.of("a", "b", "c");
RelationKey r1b = RelationKey.of("a", "b", "c");
/* r2, r3, r4 differ from r1a by one place each */
RelationKey r2 = RelationKey.of("a", "b", "d");
RelationKey r3 = RelationKey.of("a", "d", "c");
RelationKey r4 = RelationKey.of("d", "b", "c");
@Test
public void testEquals() {
assertEquals(r1a, r1b);
assertNotEquals(r1a, r2);
assertNotEquals(r1a, r3);
assertNotEquals(r1a, r4);
assertNotEquals(r2, r3);
assertNotEquals(r2, r4);
assertNotEquals(r3, r4);
}
@Test
public void testHashCode() {
assertEquals(r1a.hashCode(), r1b.hashCode());
assertNotEquals(r1a.hashCode(), r2.hashCode());
assertNotEquals(r1a.hashCode(), r3.hashCode());
assertNotEquals(r1a.hashCode(), r4.hashCode());
assertNotEquals(r2.hashCode(), r3.hashCode());
assertNotEquals(r2.hashCode(), r4.hashCode());
assertNotEquals(r3.hashCode(), r4.hashCode());
}
@Test
public void testToString() {
assertEquals("a:b:c", r1a.toString());
assertEquals("\"a:b:c\"", r1a.toString(MyriaConstants.STORAGE_SYSTEM_SQLITE));
assertEquals("\"a:b:c\"", r1a.toString(MyriaConstants.STORAGE_SYSTEM_POSTGRESQL));
assertEquals("\"a b c\"", r1a.toString(MyriaConstants.STORAGE_SYSTEM_MONETDB));
assertEquals("`a b c`", r1a.toString(MyriaConstants.STORAGE_SYSTEM_MYSQL));
}
@Test
public void testGoodFieldNames() {
RelationKey.of("a134", "__a4_323_fg", "z1yxcf_");
}
@Test(expected = IllegalArgumentException.class)
public void testBadFieldNameStartNumber() {
RelationKey.of("1a", "b", "c");
}
@Test(expected = IllegalArgumentException.class)
public void testBadFieldNameHasHyphen() {
RelationKey.of("a-", "b", "c");
}
@Test(expected = IllegalArgumentException.class)
public void testBadFieldNameHasSpace() {
RelationKey.of(" ", "b", "c");
}
@Test(expected = IllegalArgumentException.class)
public void testBadFieldNameHasSpace2() {
RelationKey.of(" a", "b", "c");
}
@Test(expected = IllegalArgumentException.class)
public void testBadFieldNameHasSpace3() {
RelationKey.of("a ", "b", "c");
}
@Test(expected = IllegalArgumentException.class)
public void testBadFieldNameHasSpace4() {
RelationKey.of(" a ", "b", "c");
}
@Test(expected = NullPointerException.class)
public void testBadFieldIsNull() {
RelationKey.of("a", null, "c");
}
@Test(expected = IllegalArgumentException.class)
public void testBadFieldIsEmpty() {
RelationKey.of("a", "b", "");
}
}