package edu.stanford.nlp.sempre.test; import edu.stanford.nlp.sempre.*; import fig.basic.LogInfo; import org.testng.annotations.Test; /** * Test JSON serialization and deserialization. */ public class JsonTest { public static String S(Object o) { return Json.writeValueAsStringHard(o); } public static <T> T D(String s, Class<T> klass) { return Json.readValueHard(s, klass); } public static <T> T D(String s, Class<T> klass, Class<?> view) { return Json.readValueHard(s, klass, view); } public static boolean exampleEquals(Example a, Example b) { if (!a.id.equals(b.id)) return false; if (!a.utterance.equals(b.utterance)) return false; if (a.context != b.context && !a.context.equals(b.context)) return false; if (a.targetFormula != b.targetFormula && !a.targetFormula.toString().equals(b.targetFormula.toString())) return false; if (a.targetValue != b.targetValue && !a.targetValue.equals(b.targetValue)) return false; return true; } public static Parser makeSimpleBeamParser() { return new BeamParser(ParserTest.ABCTest().getParserSpec()); } @Test public void testExample() { Builder builder = new Builder(); builder.build(); Example.Builder b = new Example.Builder(); Example ex = b .setId("id") .setUtterance("A is for Alice") .setTargetValue(new StringValue("B is for Bob")) .createExample(); LogInfo.log(S(ex)); assert exampleEquals(ex, D(S(ex), Example.class)); ex.preprocess(); LogInfo.log(S(ex)); assert ex.languageInfo != null; assert !ex.languageInfo.tokens.isEmpty(); assert exampleEquals(ex, D(S(ex), Example.class)); ex = TestUtils.makeSimpleExample("1 2 3"); ex.preprocess(); makeSimpleBeamParser().parse(new Params(), ex, true); String there = S(ex); Example back = D(there, Example.class); String thereAgain = S(back); LogInfo.log(there); LogInfo.log(thereAgain); assert there.equals(thereAgain); assert exampleEquals(ex, back); } }