package com.tinkerpop.rexster.protocol.msg;
import com.tinkerpop.rexster.client.RexProException;
import junit.framework.Assert;
import org.junit.Test;
/**
* @author Blake Eggleston (bdeggleston.github.com)
*/
public class RexProMessageMetaFieldTest {
/**
* Tests the validation of various field permutations
*/
@Test
public void fieldValidation() {
RexProMessageMeta meta = new RexProMessageMeta();
try{
meta.put("floatVal", 3.14f);
RexProMessageMetaField.define("floatVal", true, Float.class).validateMeta(meta);
} catch (RexProException ex) {
Assert.fail("unexpected exception thrown: " + ex.toString());
}
try{
meta.put("doubleVal", 3.14);
RexProMessageMetaField.define("doubleVal", true, Double.class).validateMeta(meta);
} catch (RexProException ex) {
Assert.fail("unexpected exception thrown: " + ex.toString());
}
try{
meta.put("intVal", 123);
RexProMessageMetaField.define("intVal", true, Integer.class).validateMeta(meta);
} catch (RexProException ex) {
Assert.fail("unexpected exception thrown: " + ex.toString());
}
try{
meta.put("boolVal", true);
RexProMessageMetaField.define("boolVal", true, Boolean.class).validateMeta(meta);
} catch (RexProException ex) {
Assert.fail("unexpected exception thrown: " + ex.toString());
}
try{
meta.put("stringVal", "la la la");
RexProMessageMetaField.define("stringVal", true, String.class).validateMeta(meta);
} catch (RexProException ex) {
Assert.fail("unexpected exception thrown: " + ex.toString());
}
try{
meta.put("wrongType", "should be int");
RexProMessageMetaField.define("wrongType", true, Integer.class).validateMeta(meta);
Assert.fail("expecting RexProException to be thrown");
} catch (RexProException ex) {
//exception is expected
}
}
/**
* Tests that default values are inserted if the key is missing
*/
@Test
public void defaultValueInsertion() {
RexProMessageMeta meta = new RexProMessageMeta();
try{
RexProMessageMetaField.define("floatVal", true, 1.23f, Float.class).validateMeta(meta);
} catch (RexProException ex) {
Assert.fail("unexpected exception thrown: " + ex.toString());
}
Assert.assertTrue(meta.containsKey("floatVal"));
Assert.assertEquals(1.23f, meta.get("floatVal"));
}
/**
* Tests that missing meta values that are not required do not raise exceptions
*/
@Test
public void notRequiredTest() {
RexProMessageMeta meta = new RexProMessageMeta();
try{
RexProMessageMetaField.define("floatVal", false, Float.class).validateMeta(meta);
} catch (RexProException ex) {
Assert.fail("unexpected exception thrown: " + ex.toString());
}
Assert.assertFalse(meta.containsKey("floatVal"));
Assert.assertEquals(null, meta.get("floatVal"));
}
/**
* Tests that missing meta values that are required raise exceptions
*/
@Test
public void requiredTest() {
RexProMessageMeta meta = new RexProMessageMeta();
try{
RexProMessageMetaField.define("floatVal", true, Float.class).validateMeta(meta);
Assert.fail("expecting RexProException to be thrown");
} catch (RexProException ex) {
//exception is expected
}
//default value should override missing value
try{
RexProMessageMetaField.define("intVal", true, 1, Integer.class).validateMeta(meta);
} catch (RexProException ex) {
Assert.fail("unexpected exception thrown: " + ex.toString());
}
Assert.assertTrue(meta.containsKey("intVal"));
Assert.assertEquals(1, meta.get("intVal"));
}
}