Repository: DesignLiquido/delegua
Pull request #370 (2023-05-13 13:52:51)

Permite a passagem de parametros nulos em funções primitivas.

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: 72.3%">72.52% (+0.22% 🔼)</div>  |    5832/8042    |
|                                                                           🟡                                                                           | Branches   | <div title="Base coverage is: 61.47%">61.66% (+0.18% 🔼)</div> |    1862/3020    |
|                                                                           🟡                                                                           | Functions  | <div title="Base coverage is: 69.02%">69.18% (+0.16% 🔼)</div> |     862/1246    |
|                                                                           🟡                                                                           | Lines      | <div title="Base coverage is: 72.76%">72.99% (+0.23% 🔼)</div> |    5680/7782    |


## Test suite run success
447 tests passing in 37 suites.

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

Patch:
diff --git a/fontes/interpretador/interpretador-base.ts b/fontes/interpretador/interpretador-base.ts
index d2ca710d..3957b889 100644
--- a/fontes/interpretador/interpretador-base.ts
+++ b/fontes/interpretador/interpretador-base.ts
@@ -468,7 +468,7 @@ export class InterpretadorBase implements InterpretadorInterface {
                 for (const argumento of expressao.argumentos) {
                     const valorResolvido: any = await this.avaliar(argumento);
                     argumentosResolvidos.push(
-                        valorResolvido.hasOwnProperty('valor') ? valorResolvido.valor : valorResolvido
+                        valorResolvido?.hasOwnProperty('valor') ? valorResolvido.valor : valorResolvido
                     );
                 }
                 return entidadeChamada.chamar(argumentosResolvidos);


Test patch:
diff --git a/testes/interpretador.test.ts b/testes/interpretador.test.ts
index ed2fe934..da092460 100644
--- a/testes/interpretador.test.ts
+++ b/testes/interpretador.test.ts
@@ -593,6 +593,21 @@ describe('Interpretador', () => {
             });
 
             describe('Declaração e chamada de funções', () => {
+                it('Chamada de função primitiva com parametro nulo', async () => {
+                    const codigo = [
+                        "var frutas = [\"maçã\", \"banana\", \"morango\", \"laranja\", \"uva\"]",
+                        "var alimentos = frutas.encaixar(0, 3, nulo, verdadeiro);",
+                        "escreva(alimentos);",
+                    ];
+
+                    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('Fibonacci', async () => {
                     const codigo = [
                         "função fibonacci(n) {",
diff --git a/testes/primitivas/primitivas-vetor.test.ts b/testes/primitivas/primitivas-vetor.test.ts
index 35f1e685..f59f386a 100644
--- a/testes/primitivas/primitivas-vetor.test.ts
+++ b/testes/primitivas/primitivas-vetor.test.ts
@@ -94,8 +94,17 @@ describe('Primitivas de vetor', () => {
 
     describe('encaixar() - não passando novo elemento', () => {
         it('Trivial', () => {
-            const resultado = primitivasVetor.encaixar([1, 2, 3, 4], 3, 4, null, true);
-            expect(resultado).toStrictEqual([4]);
+            const resultado1 = primitivasVetor.encaixar([1, 2, 3, 4], 3, 4, null, true);
+            const resultado2 = primitivasVetor.encaixar([1, 2, 3, 4], 0, 3);
+            expect(resultado1).toStrictEqual([4]);
+            expect(resultado2).toStrictEqual([4]);
+        });
+    });
+
+    describe('encaixar() - não passando novo elemento', () => {
+        it('Trivial', () => {
+            const resultado1 = primitivasVetor.encaixar(["maçã", "banana", "morango", "laranja", "uva"], 0, 3, null, true);
+            expect(resultado1).toStrictEqual(["maçã", "banana", "morango"]);
         });
     });