diff --git a/main/src/com/google/refine/grel/ast/FieldAccessorExpr.java b/main/src/com/google/refine/grel/ast/FieldAccessorExpr.java index 7564accf9..13baf2021 100644 --- a/main/src/com/google/refine/grel/ast/FieldAccessorExpr.java +++ b/main/src/com/google/refine/grel/ast/FieldAccessorExpr.java @@ -63,17 +63,17 @@ public class FieldAccessorExpr implements Evaluable { if (ExpressionUtils.isError(o)) { return o; // bubble the error up } else if (o == null) { - return new EvalError("Cannot retrieve field from null"); + return null; } else if (o instanceof HasFields) { return ((HasFields) o).getField(_fieldName, bindings); } else if (o instanceof JSONObject) { try { return ((JSONObject) o).get(_fieldName); } catch (JSONException e) { - return new EvalError("Object does not have any field, including " + _fieldName); + return null; } } else { - return new EvalError("Object does not have any field, including " + _fieldName); + return null; } } diff --git a/main/tests/server/src/com/google/refine/tests/grel/GrelTests.java b/main/tests/server/src/com/google/refine/tests/grel/GrelTests.java index 24377f30d..e52dc1b90 100644 --- a/main/tests/server/src/com/google/refine/tests/grel/GrelTests.java +++ b/main/tests/server/src/com/google/refine/tests/grel/GrelTests.java @@ -99,7 +99,7 @@ public class GrelTests extends RefineTest { public void testEvalError() { String tests[] = { // "1=1", // TODO: Throws NullPointerException - "a.value", + "value.datePart()", }; for (String test : tests) { try { @@ -166,6 +166,26 @@ public class GrelTests extends RefineTest { parseEval(bindings, test); } } + + @Test + public void testGetJsonFieldExists() throws ParsingException { + String test[] = { "\"[{\\\"one\\\": \\\"1\\\"}]\".parseJson()[0].one", "1" }; + parseEval(bindings, test); + } + + @Test + public void testGetJsonFieldAbsent() throws ParsingException { + String test = "\"[{\\\"one\\\": \\\"1\\\"}]\".parseJson()[0].two"; + Evaluable eval = MetaParser.parse("grel:" + test); + Assert.assertNull(eval.evaluate(bindings)); + } + + @Test + public void testGetFieldFromNull() throws ParsingException { + String test = "null.value"; + Evaluable eval = MetaParser.parse("grel:" + test); + Assert.assertNull(eval.evaluate(bindings)); + } // to demonstrate bug fixing for #1204 @Test @@ -182,11 +202,11 @@ public class GrelTests extends RefineTest { } private void parseEval(Properties bindings, String[] test) - throws ParsingException { + throws ParsingException { Evaluable eval = MetaParser.parse("grel:" + test[0]); Object result = eval.evaluate(bindings); Assert.assertEquals(result.toString(), test[1], - "Wrong result for expression: "+test[0]); + "Wrong result for expression: "+test[0]); } }