public Rule(String lhs, String rhs, Map<String, Object> semantics) { this(lhs, rhs); this.semantics = SemanticUtils.parseTemplate(semantics); }
}.getType() ); fn = parseTemplate(template); }else { fn = valueFn(semantics);
@Test void parseTemplate() { Map<String, Object> template = named("a", _FIRST).named("b", _N(1)) .named("c", named("d", _LAST)); Map<String, Object> expected = new HashMap<String, Object>(){{ put("a", 1); put("b", new HashMap<String, Object>() {{put("x", 10);}}); put("c", new HashMap<String, Object>() {{put("d", 3);}}); }}; List<Map<String, Object>> params = Arrays.asList( value(1), named("x", 10), value(3) ); SemanticFunction fn = SemanticUtils.parseTemplate(template); assertEquals(Collections.singletonList(expected), fn.apply(params)); }
@Test void parseTemplateMerge() { Map<String, Object> template = named("a", _FIRST) .named("@merge", Arrays.asList(1, 2)); Map<String, Object> expected = new HashMap<String, Object>(){{ put("a", 1); put("x", 10); put("y", 20); }}; List<Map<String, Object>> params = Arrays.asList( value(1), named("x", 10), named("y", 20) ); SemanticFunction fn = SemanticUtils.parseTemplate(template); assertEquals(Collections.singletonList(expected), fn.apply(params)); }
@Test void parseTemplateAppend(){ Map<String, Object> template = named("x", _APPEND); Map<String, Object> expected = named("x", Arrays.asList( named("a", 10), named("b",20), named("c",3) )); List<Map<String, Object>> params = Arrays.asList( value(1), named("x", Arrays.asList(named("a", 10), named("b", 20))), named("c",3) ); SemanticFunction fn = SemanticUtils.parseTemplate(template); assertEquals(Collections.singletonList(expected), fn.apply(params)); }