@SafeVarargs public static <K, V> Map<K, V> mapOf(Map.Entry<K, V>... attributes) { return prototype(attributes); }
@Test public void test_isDynamicResolution() { CompilerContext ctx = feel.newCompilerContext(); ctx.addInputVariableType( "Person List", BuiltInType.LIST); CompiledExpression compiledExpression = feel.compile( "Person List[My Variable 1 = \"A\"]", ctx ); assertThat(errors.toString(), errors.size(), is(0) ); Map<String, Object> inputs = new HashMap<>(); List<Map<String, ?>> pList = new ArrayList<>(); inputs.put("Person List", pList); pList.add(prototype(entry("Full Name", "Edson Tirelli"), entry("My Variable 1","A")) ); pList.add(prototype(entry("Full Name", "Matteo Mortari"), entry("My Variable 1","B")) ); Object result = feel.evaluate(compiledExpression, inputs); assertThat( result, instanceOf( List.class ) ); assertThat( (List<?>) result, hasSize(1) ); assertThat( ((Map<?, ?>) ((List<?>) result).get(0)).get("Full Name"), is("Edson Tirelli") ); }
@Test public void test2() { CompilerContext ctx = feel.newCompilerContext(); ctx.addInputVariableType( "MyPerson", new MapBackedType().addField( "FullName", BuiltInType.STRING ) ); CompiledExpression compiledExpression = feel.compile( "MyPerson.fullName", ctx ); assertThat(errors.toString(), errors.size(), is(1) ); Map<String, Object> inputs = new HashMap<>(); inputs.put( "MyPerson", prototype(entry("FullName", "John Doe")) ); Object result = feel.evaluate(compiledExpression, inputs); assertThat(result, nullValue()); }
@Test public void test2OK() { CompilerContext ctx = feel.newCompilerContext(); ctx.addInputVariableType( "MyPerson", new MapBackedType().addField( "FullName", BuiltInType.STRING ) ); CompiledExpression compiledExpression = feel.compile( "MyPerson.FullName", ctx ); Map<String, Object> inputs = new HashMap<>(); inputs.put( "MyPerson", prototype(entry("FullName", "John Doe")) ); Object result = feel.evaluate(compiledExpression, inputs); assertThat(result, is("John Doe")); } }
Map<?, ?> aPerson = prototype( entry("First Name", "John"), entry("Last Name", "Doe") ); assertTrue( personType.isAssignableValue(aPerson) ); assertTrue( personType.isInstanceOf(aPerson) ); Map<?, ?> aCompletePerson = prototype( entry("First Name", "John"), entry("Last Name", "Doe"), entry("Address", "100 East Davie Street")); assertTrue( personType.isAssignableValue(aCompletePerson) ); assertTrue( personType.isInstanceOf(aCompletePerson) ); Map<?, ?> notAPerson = prototype( entry("First Name", "John") ); assertFalse( personType.isAssignableValue(notAPerson) ); assertFalse( personType.isInstanceOf(notAPerson) ); Map<?, ?> anonymousPerson1 = prototype( entry("First Name", null), entry("Last Name", "Doe") ); assertTrue( personType.isAssignableValue(anonymousPerson1) ); assertTrue( personType.isInstanceOf(anonymousPerson1) ); Map<?, ?> anonymousPerson2 = prototype( entry("First Name", "John"), entry("Last Name", null) ); assertTrue( personType.isAssignableValue(anonymousPerson2) ); assertTrue( personType.isInstanceOf(anonymousPerson2) ); Map<?, ?> anonymousPerson3 = prototype( entry("First Name", null), entry("Last Name", null) ); assertTrue( personType.isAssignableValue(anonymousPerson3) ); assertTrue( personType.isInstanceOf(anonymousPerson3) ); Map<?, ?> anonymousCompletePerson = prototype( entry("First Name", null), entry("Last Name", null), entry("Address", "100 East Davie Street")); assertTrue( personType.isAssignableValue(anonymousCompletePerson) ); assertTrue( personType.isInstanceOf(anonymousCompletePerson) );