test_class.file: sandbox/dominio/src/test/java/br/ufg/inf/es/saep/sandbox/dominio/regra/RegraSomatorioTest.java
test_class.identifier: RegraSomatorioTest
test_case.body: @Test
      public void umAvaliavelComExpressaoConstante() {
          // Parser que adequadamente identifica dependência "x" na expressão "x"
          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);
      }
test_case.class_method_signature: RegraSomatorioTest.umAvaliavelComExpressaoConstante()
test_case.full_signature: @Test public void umAvaliavelComExpressaoConstante()
test_case.identifier: umAvaliavelComExpressaoConstante
test_case.invocations: add setDependencias preparacao put add assertEquals getReal avalie
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void umAvaliavelComExpressaoConstante()
focal_class.declarator: classe
focal_class.modifier: private
focal_class.original_string: private String classe;
focal_class.type: String
focal_class.var_name: classe
focal_class.file: sandbox/dominio/src/main/java/br/ufg/inf/es/saep/sandbox/dominio/regra/RegraSomatorio.java
focal_class.identifier: RegraSomatorio
focal_class.class_method_signature: RegraSomatorio.RegraSomatorio(
              final String variavel,
              final String descricao,
              final float valorMaximo,
              final float valorMinimo,
              final String expressao,
              final String nomeClasse)
focal_class.full_signature: public  RegraSomatorio(
              final String variavel,
              final String descricao,
              final float valorMaximo,
              final float valorMinimo,
              final String expressao,
              final String nomeClasse)
focal_class.identifier: RegraSomatorio
focal_class.modifiers: public
focal_class.parameters: (
              final String variavel,
              final String descricao,
              final float valorMaximo,
              final float valorMinimo,
              final String expressao,
              final String nomeClasse)
focal_class.signature:  RegraSomatorio(
              final String variavel,
              final String descricao,
              final float valorMaximo,
              final float valorMinimo,
              final String expressao,
              final String nomeClasse)
focal_class.class_method_signature: RegraSomatorio.avalie(final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto)
focal_class.full_signature: @Override public final Valor avalie(final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto)
focal_class.identifier: avalie
focal_class.modifiers: @Override public final
focal_class.parameters: (final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto)
focal_class.return: Valor
focal_class.signature: Valor avalie(final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto)
focal_class.class_method_signature: RegraSomatorio.prioridade(final String variavel,
                               final Avaliavel avaliavel,
                               final Map<String, Valor> ctx)
focal_class.full_signature: private float prioridade(final String variavel,
                               final Avaliavel avaliavel,
                               final Map<String, Valor> ctx)
focal_class.identifier: prioridade
focal_class.modifiers: private
focal_class.parameters: (final String variavel,
                               final Avaliavel avaliavel,
                               final Map<String, Valor> ctx)
focal_class.return: float
focal_class.signature: float prioridade(final String variavel,
                               final Avaliavel avaliavel,
                               final Map<String, Valor> ctx)
focal_class.superclass: extends RegraExpressao
focal_method.body: @Override
      public final Valor avalie(final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto) {
          float somatorio = 0f;
  
          for (Avaliavel avaliavel : avaliaveis) {
              // Considera apenas avaliáveis da classe em questão
              Valor atributo = avaliavel.get("classe");
              String classe = atributo == null ? null : atributo.getString();
  
              if (!this.classe.equals(classe)) {
                  continue;
              }
  
              // Atualiza contexto da expressão com dados do avaliável
              for (String dd : ctx.keySet()) {
                  ctx.put(dd, prioridade(dd, avaliavel, contexto));
              }
  
              somatorio = somatorio + ast.valor(ctx);
          }
  
          return new Valor(somatorio);
      }
focal_method.class_method_signature: RegraSomatorio.avalie(final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto)
focal_method.full_signature: @Override public final Valor avalie(final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto)
focal_method.identifier: avalie
focal_method.invocations: get getString equals keySet put prioridade valor
focal_method.modifiers: @Override public final
focal_method.parameters: (final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto)
focal_method.return: Valor
focal_method.signature: Valor avalie(final List<Avaliavel> avaliaveis,
                          final Map<String, Valor> contexto)