Repository: DesignLiquido/delegua
Pull request #439 (2023-06-06 01:18:10)

Testando e corrigindo chamada da palavra reservada `super`

github-actions[bot]: <!-- jest coverage report action for options with hash 781087021f8e6c43aac1e668f4520603 -->

## Coverage report 



| <div title="Status of coverage:&#10; 🟢 - ok&#10; 🟡 - slightly more than threshold&#10; 🔴 - under the threshold">St.<sup>:grey_question:</sup></div> | Category   | Percentage                                                     | Covered / Total |
| :----------------------------------------------------------------------------------------------------------------------------------------------------: | :--------- | :------------------------------------------------------------- | :-------------: |
|                                                                           🟡                                                                           | Statements | <div title="Base coverage is: 73.66%">73.81% (+0.15% 🔼)</div> |    7208/9766    |
|                                                                           🟡                                                                           | Branches   | <div title="Base coverage is: 63.13%">63.26% (+0.14% 🔼)</div> |    2287/3615    |
|                                                                           🟡                                                                           | Functions  | <div title="Base coverage is: 69.73%">69.93% (+0.2% 🔼)</div>  |    1065/1523    |
|                                                                           🟡                                                                           | Lines      | <div title="Base coverage is: 74.09%">74.23% (+0.14% 🔼)</div> |    7031/9472    |


## Test suite run success
618 tests passing in 48 suites.

<p align="right">Report generated by <a href="https://github.com/ArtiomTr/jest-coverage-report-action">🧪jest coverage report action</a> from 43b52d41b3600d3a69f360018b2909d4332fde4b</p>
<!-- Sticky Pull Request Comment -->

Patch:
diff --git a/fontes/interpretador/interpretador-base.ts b/fontes/interpretador/interpretador-base.ts
index 108ea468..2492eb7a 100644
--- a/fontes/interpretador/interpretador-base.ts
+++ b/fontes/interpretador/interpretador-base.ts
@@ -1327,7 +1327,6 @@ export class InterpretadorBase implements InterpretadorInterface {
         return valores;
     }
 
-    // TODO: Após remoção do Resolvedor, simular casos que usem 'super' e 'isto'.
     visitarExpressaoSuper(expressao: Super): any {
         const superClasse: VariavelInterface = this.pilhaEscoposExecucao.obterVariavelPorNome('super');
         const objeto: VariavelInterface = this.pilhaEscoposExecucao.obterVariavelPorNome('isto');
@@ -1338,7 +1337,9 @@ export class InterpretadorBase implements InterpretadorInterface {
             throw new ErroEmTempoDeExecucao(expressao.metodo, 'Método chamado indefinido.', expressao.linha);
         }
 
-        return metodo.definirInstancia(objeto.valor);
+        metodo.instancia = objeto.valor;
+
+        return metodo;
     }
 
     paraTexto(objeto: any) {
@@ -1414,10 +1415,6 @@ export class InterpretadorBase implements InterpretadorInterface {
             this.pilhaEscoposExecucao.removerUltimo();
             const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
 
-            /* if ('isto' in escopoAnterior.ambiente.valores) {
-
-            } */
-
             if (manterAmbiente) {    
                 escopoAnterior.ambiente.valores = Object.assign(
                     escopoAnterior.ambiente.valores,


Test patch:
diff --git a/testes/interpretador.test.ts b/testes/interpretador.test.ts
index 4c2ee3c2..cebcc06f 100644
--- a/testes/interpretador.test.ts
+++ b/testes/interpretador.test.ts
@@ -640,6 +640,55 @@ describe('Interpretador', () => {
                     expect(retornoInterpretador.erros).toHaveLength(0);
                 });
 
+                it('Chamada de método com `super`', async () => {
+                    const codigo = [
+                        "classe A {",
+                            "data(data) {",
+                              "escreva(data);",
+                            "}",
+                        "}",                          
+                        "classe B herda A {",
+                            "construtor(data) {",
+                              "super.data(data);",
+                            "}",
+                        "}",                          
+                        "var a = B(\"13/12/1981\");",
+                    ];
+
+                    const retornoLexador = lexador.mapear(codigo, -1);
+                    const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);
+
+                    const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
+
+                    expect(retornoInterpretador.erros).toHaveLength(0);
+                });
+
+                it.skip('Chamada de método com `super` e definição de propriedade com `isto`', async () => {
+                    const codigo = [
+                        "classe A {",
+                            "construtor() {",
+                            "   isto.dataA = \'01/01/2001\'",
+                            "}",
+                            "data(data1) {",
+                              "escreva(isto.dataA + \" - \", data1)",
+                            "}",
+                        "}",                          
+                        "classe B herda A {",
+                            "construtor(data) {",
+                              "super.data(data);",
+                            "}",
+                        "}",                          
+                        "var a = B(\"13/12/1981\");",
+                    ];
+
+                    const retornoLexador = lexador.mapear(codigo, -1);
+                    const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);
+
+                    const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
+
+                    expect(retornoInterpretador.erros).toHaveLength(0);
+                });
+
                 it.skip('Construtor', async () => {
                     const codigo = [
                         'classe Quadrado {',