package brickhouse.udf.json;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* @author andrey.myatlyuk@lithium.com
*/
public class JsonSplitUDFTest {
private JsonSplitUDF udf;
@Before
public void before() {
udf = new JsonSplitUDF();
}
@Test
public void testEvaluate() throws Exception {
ObjectInspector stringOi = PrimitiveObjectInspectorFactory.javaStringObjectInspector;
StandardListObjectInspector resultOi = (StandardListObjectInspector) udf.initialize(new ObjectInspector[]{stringOi});
String value = "[\"a\", \"b\"]";
Object result = udf.evaluate(new GenericUDF.DeferredObject[]{new GenericUDF.DeferredJavaObject(value)});
assertEquals(2, resultOi.getList(result).size());
}
@Test
public void testEvaluateWithEmptyList() throws Exception {
ObjectInspector stringOi = PrimitiveObjectInspectorFactory.javaStringObjectInspector;
StandardListObjectInspector resultOi = (StandardListObjectInspector) udf.initialize(new ObjectInspector[]{stringOi});
String value = "[]";
Object result = udf.evaluate(new GenericUDF.DeferredObject[]{new GenericUDF.DeferredJavaObject(value)});
assertTrue(resultOi.getList(result).isEmpty());
}
@Test(expected = HiveException.class)
public void testEvaluateWithEmptyString() throws Exception {
ObjectInspector stringOi = PrimitiveObjectInspectorFactory.javaStringObjectInspector;
udf.initialize(new ObjectInspector[]{stringOi});
String value = "";
udf.evaluate(new GenericUDF.DeferredObject[]{new GenericUDF.DeferredJavaObject(value)});
}
@Test
public void testEvaluateWithNull() throws Exception {
ObjectInspector stringOi = PrimitiveObjectInspectorFactory.javaStringObjectInspector;
StandardListObjectInspector resultOi = (StandardListObjectInspector) udf.initialize(new ObjectInspector[]{stringOi});
Object result = udf.evaluate(new GenericUDF.DeferredObject[]{new GenericUDF.DeferredJavaObject(null)});
assertNull(resultOi.getList(result));
}
}