RegraSomatorio extends RegraExpressao { @Override public final Valor avalie(final List<Avaliavel> avaliaveis, final Map<String, Valor> contexto) { float somatorio = 0f; for (Avaliavel avaliavel : avaliaveis) { Valor atributo = avaliavel.get("classe"); String classe = atributo == null ? null : atributo.getString(); if (!this.classe.equals(classe)) { continue; } for (String dd : ctx.keySet()) { ctx.put(dd, prioridade(dd, avaliavel, contexto)); } somatorio = somatorio + ast.valor(ctx); } return new Valor(somatorio); } RegraSomatorio(
            final String variavel,
            final String descricao,
            final float valorMaximo,
            final float valorMinimo,
            final String expressao,
            final String nomeClasse); @Override final Valor avalie(final List<Avaliavel> avaliaveis,
                        final Map<String, Valor> contexto);  }
@Test public void nenhumAvaliavelSomatorioZero() { Regra r = new RegraSomatorio("v", "d", 1, 0, "1", null); List<Avaliavel> avaliaveis = new ArrayList<>(0); assertEquals(0, r.avalie(avaliaveis, null).getReal(), 0.0001f); }
@Test public void nenhumAvaliavelDaClasseSomatorioZero() { Regra r = new RegraSomatorio("v", "d", 1, 0, "1", "x"); List<Avaliavel> avaliaveis = new ArrayList<>(0); avaliaveis.add(new Pontuacao("p", new Valor(1f))); assertEquals(0, r.avalie(avaliaveis, null).getReal(), 0.0001f); }
@Test public void umAvaliavelComExpressaoConstante() { ParserTeste parser = new ParserTeste(); ArrayList<String> deps = new ArrayList<>(); deps.add("x"); parser.setDependencias(deps); Regra r = new RegraSomatorio("v", "d", 1, 0, "1", "x"); r.preparacao(parser); List<Avaliavel> avaliaveis = new ArrayList<>(0); HashMap<String, Valor> atributos = new HashMap<>(0); atributos.put("a", new Valor(true)); avaliaveis.add(new Relato("x", atributos)); assertEquals(0, r.avalie(avaliaveis, null).getReal(), 0.0001f); }