Repository: DesignLiquido/delegua
Pull request #358 (2023-05-08 13:22:35)

Birl
Escrevendo testes cenário de falha para birl e corrigindo bug na declaração de funcão.

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.84%">73.87% (+0.03% 🔼)</div> |    5705/7723    |
|                                                                           🟡                                                                           | Branches   | <div title="Base coverage is: 62.49%">62.53% (+0.03% 🔼)</div> |    1822/2914    |
|                                                                           🟡                                                                           | Functions  | 73.77%                                                         |     841/1140    |
|                                                                           🟡                                                                           | Lines      | <div title="Base coverage is: 74.31%">74.34% (+0.03% 🔼)</div> |    5556/7474    |


## Test suite run success
432 tests passing in 35 suites.

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

Patch:
diff --git a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts
index a9c4cb30..a91f826e 100644
--- a/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts
+++ b/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.ts
@@ -580,6 +580,7 @@ export class AvaliadorSintaticoBirl extends AvaliadorSintaticoBase {
             paramentros.push(this.logicaComumParamentros());
         }
         this.consumir(tiposDeSimbolos.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
+        this.consumir(tiposDeSimbolos.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
 
         let corpo = [];
 


Test patch:
diff --git a/testes/birl/avaliador-sintatico.test.ts b/testes/birl/avaliador-sintatico.test.ts
index f2e22732..8438df08 100644
--- a/testes/birl/avaliador-sintatico.test.ts
+++ b/testes/birl/avaliador-sintatico.test.ts
@@ -302,7 +302,7 @@ describe('Avaliador Sintático Birl', () => {
             it('Sucesso - declaração - declaracaoFuncao', () => {
                 const retornoLexador = lexador.mapear([
                     'HORA DO SHOW \n',
-                    '   OH O HOME AI PO(MONSTRO NOMEFUNCAO(MONSTRO primeiro, MONSTRO segundo)\n',
+                    '   OH O HOME AI PO(MONSTRO NOMEFUNCAO(MONSTRO primeiro, MONSTRO segundo))\n',
                     '       MONSTRO C = primeiro + segundo;\n',
                     '       BORA CUMPADE C;\n',
                     '   BIRL\n',
@@ -377,12 +377,7 @@ describe('Avaliador Sintático Birl', () => {
 
             it('Falha - declaração - Escreva - com falha na expressão', () => {
                 const retornoLexador = lexador.mapear(
-                    [
-                        'HORA DO SHOW',
-                        '  CE QUER VER ESSA ? ("Hello, World! Porra!\n");',
-                        '  BORA CUMPADE 0;',
-                        'BIRL',
-                    ],
+                    ['HORA DO SHOW', '  CE QUER VER ESSA ? ("Hello, World! Porra!\n");', '  BORA CUMPADE 0;', 'BIRL'],
                     -1
                 );
 
@@ -390,9 +385,256 @@ describe('Avaliador Sintático Birl', () => {
                 expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
                     expect.objectContaining({
                         message: 'Esperado expressão `PORRA` após `ESSA` para escrever mensagem.',
-                    }))
+                    })
+                );
+            });
+
+            it('Falha - declaração - Frango - sem identificador', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    "   FRANGO = 'testes';\n",
+                    '   CE QUER VER ESSA PORRA? (FR); \n',
+                    '   BORA CUMPADE 0; \n',
+                    'BIRL \n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: "Esperado identificador após palavra reservada 'FRANGO'.",
+                    })
+                );
+            });
+
+            it('Falha - declaração - Trapezio - sem identificador', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '  TRAPEZIO = 1.03; \n',
+                    '  CE QUER VER ESSA PORRA? (M1); \n',
+                    '  BORA CUMPADE 0; \n',
+                    'BIRL \n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: "Esperado identificador após palavra reservada 'TRAPEZIO'.",
+                    })
+                );
+            });
+
+            it('Falha - declaração - short int - sem identificador', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '  MONSTRINHO = 1.03; \n',
+                    '  CE QUER VER ESSA PORRA? (M1); \n',
+                    '  BORA CUMPADE 0; \n',
+                    'BIRL \n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: "Esperado identificador após palavra reservada 'MONSTRINHO'.",
+                    })
+                );
+            });
+
+            it('Falha - declaração - long int - sem identificador', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '  MONSTRAO = 16666666; \n',
+                    '  CE QUER VER ESSA PORRA? (M1); \n',
+                    '  BORA CUMPADE 0; \n',
+                    'BIRL \n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: "Esperado identificador após palavra reservada 'MONSTRAO'.",
+                    })
+                );
+            });
+
+            it('Falha - declaração - double - sem identificador', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '  TRAPEZIO DESCENDENTE = 0.37; \n',
+                    '  CE QUER VER ESSA PORRA? (M1); \n',
+                    '  BORA CUMPADE 0; \n',
+                    'BIRL \n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: "Esperado identificador após palavra reservada 'TRAPEZIO'.",
+                    })
+                );
+            });
+
+            it('Falha - declaração - unsigned char - sem identificador', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    `  BICEPS FRANGO = 'test'; \n`,
+                    '  CE QUER VER ESSA PORRA? (M1); \n',
+                    '  BORA CUMPADE 0; \n',
+                    'BIRL \n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: "Esperado identificador após palavra reservada 'FRANGO'.",
+                    })
+                );
+            });
+
+            it('Falha - declaração - if - sem expressão', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   ELE QUE A GENTE QUER? ()\n',
+                    '     CE QUER VER ESSA PORRA? ("teste");\n',
+                    '   BIRL\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(TypeError);
+            });
+
+            it('Falha - declaração - if - sem bloco e sem expressão', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   ELE QUE A GENTE QUER? ()\n',
+                    '     \n',
+                    '   NAO VAI DAR NAO\n',
+                    '     \n',
+                    '   BIRL\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(TypeError);
+            });
+
+            it('Falha - declaração - for - sem expressão', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   MAIS QUERO MAIS ( ; ; )\n',
+                    '       CE QUER VER ESSA PORRA? ("teste");\n',
+                    '   BIRL\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: 'Esperado expressão `;` após a condição do `PARA`.',
+                    })
+                );
+            })
+
+            it('Falha - declaração - for - sem bloco e sem expressão', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   MAIS QUERO MAIS ()',
+                    '   BIRL\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: 'Esperado expressão `;` após a inicialização do `PARA`.',
+                    })
+                );
             });
 
+            it('Falha - declaração - for - sem incremento e condição', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   MONSTRO M;\n',
+                    '   MAIS QUERO MAIS (M = 5;)',
+                    '       CE QUER VER ESSA PORRA? ("teste");\n',
+                    '   BIRL\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: 'Esperado expressão `;` após a condição do `PARA`.',
+                    })
+                );
+            })
+
+            it('Falha - declaração - while - sem expressão', () => {
+                const RetornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   MONSTRO X = 5;\n',
+                    '   NEGATIVA BAMBAM ()',
+                    '       CE QUER VER ESSA PORRA? ("teste");\n',
+                    '       X--;\n',
+                    '   BIRL\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(RetornoLexador, -1)).toThrow(TypeError);
+            })
+
+            it('Falha - declaração - declaracao - sem nome de funcão', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   OH O HOME AI PO(MONSTRO (MONSTRO primeiro, MONSTRO segundo)\n',
+                    '       MONSTRO C = primeiro + segundo;\n',
+                    '       BORA CUMPADE C;\n',
+                    '   BIRL\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: 'Esperado nome da função apos a declaração do tipo.',
+                    })
+                );
+            })
+
+            it('Falha - declaração - declaracao - sem declaração', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   OH O HOME AI PO(MONSTRO(MONSTRO primeiro, MONSTRO segundo))\n',
+                    '       MONSTRO C = primeiro + segundo;\n',
+                    '       BORA CUMPADE C;\n',
+                    '   BIRL\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: 'Esperado nome da função apos a declaração do tipo.',
+                    })
+                );
+            })
+
+            it('Falha - declaração - chamarFuncao - sem identificador', () => {
+                const retornoLexador = lexador.mapear([
+                    'HORA DO SHOW \n',
+                    '   MONSTRO primeiro = 5;\n',
+                    '   MONSTRO segundo = 10;\n',
+                    '   MONSTRO resultado = AJUDA O MALUCO TA DOENTE (primeiro, segundo);\n',
+                    'BIRL\n',
+                ]);
+
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(ErroAvaliadorSintatico);
+                expect(() => avaliadorSintatico.analisar(retornoLexador, -1)).toThrow(
+                    expect.objectContaining({
+                        message: "Esperado ')' após a expressão.",
+                    })
+                );
+            })
+
             it.skip('Falha - declaração - Variavel - numero recebendo string', () => {
                 const retornoLexador = lexador.mapear([
                     'HORA DO SHOW \n',
@@ -403,7 +645,7 @@ describe('Avaliador Sintático Birl', () => {
                 ]);
 
                 console.log(avaliadorSintatico.analisar(retornoLexador, -1));
-            })
+            });
         });
     });
 });