diff --git a/.github/workflows/principal.yml b/.github/workflows/principal.yml index 75f4a36..c32ecc5 100644 --- a/.github/workflows/principal.yml +++ b/.github/workflows/principal.yml @@ -1,62 +1,62 @@ -name: Commit e PR - Principal +# name: Commit e PR - Principal -on: - pull_request: - branches: [ principal ] +# on: +# pull_request: +# branches: [ principal ] -jobs: - testes-delegua: - runs-on: ubuntu-latest +# jobs: +# testes-delegua: +# runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta - with: - node-version: '16' - - name: NPM - Dependências - run: | - sudo npm install - - name: Testes da Linguagem Delégua - run: | - sudo chmod +x ./bin/delegua-ts - sudo npm run testes:delegua:bhaskara - sudo npm run testes:delegua:fibonacci +# steps: +# - uses: actions/checkout@v2 +# - uses: actions/setup-node@v2-beta +# with: +# node-version: '16' +# - name: NPM - Dependências +# run: | +# sudo npm install +# - name: Testes da Linguagem Delégua +# run: | +# sudo chmod +x ./bin/delegua-ts +# sudo npm run testes:delegua:bhaskara +# sudo npm run testes:delegua:fibonacci - testes-egua-classico: - runs-on: ubuntu-latest +# testes-egua-classico: +# runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta - with: - node-version: '16' - - name: NPM - Dependências - run: | - sudo npm install - - name: Testes do Dialeto Égua Clássico - run: | - sudo chmod +x ./bin/delegua-ts - sudo npm run testes:egua +# steps: +# - uses: actions/checkout@v2 +# - uses: actions/setup-node@v2-beta +# with: +# node-version: '16' +# - name: NPM - Dependências +# run: | +# sudo npm install +# - name: Testes do Dialeto Égua Clássico +# run: | +# sudo chmod +x ./bin/delegua-ts +# sudo npm run testes:egua - testes-unitarios: - permissions: - checks: write - pull-requests: write - contents: write - runs-on: ubuntu-latest +# testes-unitarios: +# permissions: +# checks: write +# pull-requests: write +# contents: write +# runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta - with: - node-version: '16' - - uses: ArtiomTr/jest-coverage-report-action@v2 - id: coverage - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - test-script: yarn testes-unitarios - package-manager: yarn - output: report-markdown - - uses: marocchino/sticky-pull-request-comment@v2 - with: - message: ${{ steps.coverage.outputs.report }} +# steps: +# - uses: actions/checkout@v2 +# - uses: actions/setup-node@v2-beta +# with: +# node-version: '16' +# - uses: ArtiomTr/jest-coverage-report-action@v2 +# id: coverage +# with: +# github-token: ${{ secrets.GITHUB_TOKEN }} +# test-script: yarn testes-unitarios +# package-manager: yarn +# output: report-markdown +# - uses: marocchino/sticky-pull-request-comment@v2 +# with: +# message: ${{ steps.coverage.outputs.report }} diff --git a/testes/README.md b/testes/README.md new file mode 100644 index 0000000..c5ea34b --- /dev/null +++ b/testes/README.md @@ -0,0 +1 @@ +TODO: Repensar testes unitários para o pacote. \ No newline at end of file diff --git a/testes/__mocks__/estatistica.ts b/testes/__mocks__/estatistica.ts deleted file mode 100644 index 8d66bba..0000000 --- a/testes/__mocks__/estatistica.ts +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const estatistica = jest.mock('@designliquido/delegua-estatistica'); - -module.exports = estatistica; diff --git a/testes/__mocks__/fisica.ts b/testes/__mocks__/fisica.ts deleted file mode 100644 index 1251c61..0000000 --- a/testes/__mocks__/fisica.ts +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const fisica = jest.mock('@designliquido/delegua-fisica'); - -module.exports = fisica; diff --git a/testes/__mocks__/matematica.ts b/testes/__mocks__/matematica.ts deleted file mode 100644 index d07756a..0000000 --- a/testes/__mocks__/matematica.ts +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const matematica = jest.mock('@designliquido/delegua-matematica'); - -module.exports = matematica; diff --git a/testes/avaliador-sintatico.test.ts b/testes/avaliador-sintatico.test.ts deleted file mode 100644 index cefa733..0000000 --- a/testes/avaliador-sintatico.test.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { Delegua } from '../fontes/delegua'; - -describe('Avaliador sintático', () => { - describe('analisar()', () => { - const delegua = new Delegua('delegua'); - - it('Sucesso - Olá Mundo', () => { - const retornoLexador = delegua.lexador.mapear( - ["escreva('Olá mundo')"], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1); - }); - - it('Sucesso - Vetor vazio', () => { - const retornoLexador = delegua.lexador.mapear( - ['var vetorVazio = []'], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1); - }); - - it('Sucesso - Dicionário vazio', () => { - const retornoLexador = delegua.lexador.mapear( - ['var dicionarioVazio = {}'], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1); - }); - - it('Sucesso - Undefined', () => { - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(undefined as any, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(0); - }); - - it('Sucesso - Null', () => { - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(null as any, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(0); - }); - - it("Sucesso - leia sem parametro", () => { - const retornoLexador = delegua.lexador.mapear( - ["var nome = leia()"], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.erros).toHaveLength(0); - }); - - it("Sucesso - leia com parametro", () => { - const retornoLexador = delegua.lexador.mapear( - ["var nome = leia('Digite seu nome:')"], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.erros).toHaveLength(0); - }); - - it('Sucesso - para/sustar', async () => { - const retornoLexador = delegua.lexador.mapear([ - "para (var i = 0; i < 10; i = i + 1) {", - " se (i == 5) { sustar; }", - " escreva('Valor: ', i)", - "}" - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico.erros).toHaveLength(0); - }); - - it('Falha - sustar fora de laço de repetição', async () => { - const retornoLexador = delegua.lexador.mapear([ - "sustar;", - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThan(0); - expect(retornoAvaliadorSintatico.erros[0].message).toBe( - '\'sustar\' ou \'pausa\' deve estar dentro de um laço de repetição.' - ); - }); - - it('Falha - continua fora de laço de repetição', async () => { - const retornoLexador = delegua.lexador.mapear([ - "continua;", - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThan(0); - expect(retornoAvaliadorSintatico.erros[0].message).toBe( - '\'continua\' precisa estar em um laço de repetição.' - ); - }); - - it('Falha - Não é permitido ter dois identificadores seguidos na mesma linha', () => { - const retornoLexador = delegua.lexador.mapear( - ["escreva('Olá mundo') identificador1 identificador2"], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThan(0); - expect(retornoAvaliadorSintatico.erros[0].message).toBe( - 'Não é permitido ter dois identificadores seguidos na mesma linha.' - ); - }); - - describe('Funções Anônimas', () => { - it('Função anônima com mais de 255 parâmetros', () => { - let acumulador = ''; - for (let i = 1; i <= 256; i++) { - acumulador += 'a' + i + ', '; - } - - acumulador = acumulador.substring(0, acumulador.length - 2); - - const funcaoCom256Argumentos = - 'var f = funcao(' + acumulador + ') {}'; - const retornoLexador = delegua.lexador.mapear( - [funcaoCom256Argumentos], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.erros).toHaveLength(1); - expect(retornoAvaliadorSintatico.erros[0].message).toBe( - 'Não pode haver mais de 255 parâmetros' - ); - }); - }); - - it("Declaração `tente`", () => { - const retornoLexador = delegua.lexador.mapear( - ["tente { i = i + 1 } pegue (erro) { escreva(erro) }"], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - }); - }); -}); diff --git a/testes/biblioteca-global.test.ts b/testes/biblioteca-global.test.ts deleted file mode 100644 index 6dc9bf9..0000000 --- a/testes/biblioteca-global.test.ts +++ /dev/null @@ -1,283 +0,0 @@ -import { Delegua } from "../fontes/delegua"; - -describe('Biblioteca Global', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('delegua'); - }); - - describe('aleatorio()', () => { - it('Trivial', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(aleatorio())"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('aleatorioEntre()', () => { - it('Sucesso', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(aleatorioEntre(1, 5))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('inteiro()', () => { - it('Sucesso', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(inteiro(1 + 1))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Sucesso - Nulo', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(inteiro(nulo))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Falha - Não inteiro', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(inteiro('Oi'))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - }); - - describe('mapear()', () => { - it('Sucesso', async () => { - const codigo = [ - "var f = funcao(x) { retorna(x ** x) }", - "escreva(mapear([1, 2, 3], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Falha - Funçao de mapeamento inválida', async () => { - const codigo = [ - "var f = 'Sou uma função'", - "escreva(mapear([1, 2, 3], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - }); - - describe('todosEmCondicao()', () => { - it('Sucesso', async () => { - const codigo = [ - "var f = funcao(x) { retorna(x < 10) }", - "escreva(todosEmCondicao([1, 2, 3, 4, 5, 6], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Falha - Funçao de mapeamento inválida', async () => { - const codigo = [ - "var f = 'Sou uma função'", - "escreva(todosEmCondicao([1, 2, 3, 4, 5, 6], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - }); - - describe('filtrarPor()', () => { - it('Sucesso', async () => { - const codigo = [ - "var f = funcao(x) { se(x > 4) { retorna(x) } }", - "escreva(filtrarPor([1, 2, 3, 4, 5, 6], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Falha - Funçao de mapeamento inválida', async () => { - const codigo = [ - "var f = 'Sou uma função'", - "escreva(filtrarPor([1, 2, 3, 4, 5, 6], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - }); - - describe('primeiroEmCondicao()', () => { - it('Sucesso', async () => { - const codigo = [ - "var f = funcao(x) { se(x > 4) { retorna(x) } }", - "escreva(primeiroEmCondicao([1, 2, 3, 4, 5, 6], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Falha - Funçao de mapeamento inválida', async () => { - const codigo = [ - "var f = 'Sou uma função'", - "escreva(primeiroEmCondicao([1, 2, 3, 4, 5, 6], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - }); - - describe('paraCada()', () => { - it('Sucesso', async () => { - const codigo = [ - "var f = funcao(valor) { se(valor >= 7) { escreva(valor) } }", - "escreva(paraCada([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Falha - Funçao de mapeamento inválida', async () => { - const codigo = [ - "var f = 'Sou uma função'", - "escreva(paraCada([1, 2, 3, 4, 5, 6], f))" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - }); - - describe('ordenar()', () => { - it('Sucesso', async () => { - const codigo = [ - "ordenar([5, 12, 10, 1, 4, 25, 33, 9, 7, 6, 2])" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('real()', () => { - it('Sucesso', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(real(3.14))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Sucesso - Nulo ou Indefinido (resolve para zero)', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(real(nulo))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Falha - Não inteiro', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(real('Oi'))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - }); - - describe('tamanho()', () => { - it('Sucesso', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(tamanho([1, 2, 3]))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Falha - Argumento não é lista', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(tamanho(1))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - - it('Falha - Nulo', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(tamanho(nulo))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - }); - - describe('texto()', () => { - it('Trivial', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(texto(123))"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); -}); diff --git a/testes/birl/avaliador-sintatico.test.ts b/testes/birl/avaliador-sintatico.test.ts deleted file mode 100644 index 90ba3f8..0000000 --- a/testes/birl/avaliador-sintatico.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; - -describe('Avaliador sintático Birl', () => { - describe('analisar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('birl'); - }); - - it.skip('Sucesso - Hello, World! Porra!', () => { - const retornoLexador = delegua.lexador.mapear( - ['HORA DO SHOW', 'CE QUER VER ESSA PORRA? ("Hello, World! Porra!\n");', 'BORA CUMPADE 0;', 'BIRL'], - -1 - ); - - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); - }); - }); -}); diff --git a/testes/birl/lexador.test.ts b/testes/birl/lexador.test.ts deleted file mode 100644 index c1fb7d4..0000000 --- a/testes/birl/lexador.test.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; - -describe('Lexador (BIRL)', () => { - describe('mapear()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('birl'); - }); - - describe('Cenário de sucesso', () => { - it('Arquivo vazio.', () => { - const resultado = delegua.lexador.mapear([''], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(1); - }); - - it('Programa vazio.', () => { - const resultado = delegua.lexador.mapear(['HORA DO SHOW \n', 'BIRL \n'], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(8); - }); - - it('Programa Olá mundo simples.', () => { - const resultado = delegua.lexador.mapear( - [ - 'HORA DO SHOW \n', - ' CE QUER VER ESSA PORRA? ("Hello, World! Porra!\n"); \n', - ' BORA CUMPADE? 0; \n', - 'BIRL \n', - ], - -1 - ); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(27); - expect(resultado.erros).toHaveLength(0); - }); - - it('Sucesso - Variavel - Atribuição', () => { - const resultado = delegua.lexador.mapear( - [ - 'HORA DO SHOW \n', - ' MONSTRO? M1 = 1; \n', - ' M1 = M1 + 1', - ' CE QUER VER ESSA PORRA? (M1); \n', - ' BORA CUMPADE? 0; \n', - 'BIRL \n', - ], - -1 - ); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(41); - expect(resultado.erros).toHaveLength(0); - }); - }); - }); -}); diff --git a/testes/delegua.test.ts b/testes/delegua.test.ts deleted file mode 100644 index 1e53ac1..0000000 --- a/testes/delegua.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Delegua } from '../fontes/delegua'; -import { TradutorJavaScript, TradutorPython, TradutorReversoJavaScript, TradutorVisualg } from '@designliquido/delegua/fontes/tradutores'; - -describe('Delégua', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('delegua'); - }); - - describe('Sucesso', () => { - it('Obter versão Delégua', () => { - const versaoDelegua = delegua.versao(); - - expect(versaoDelegua).toBeTruthy(); - }); - - it('Traduzir delégua para javascript', () => { - expect(new Delegua('', false, false, 'delegua-para-javascript').tradutorJavaScript).toBeInstanceOf(TradutorJavaScript); - expect(new Delegua('', false, false, 'delegua-para-js').tradutorJavaScript).toBeInstanceOf(TradutorJavaScript); - }); - - it('Traduzir delégua para python', () => { - expect(new Delegua('', false, false, 'delegua-para-python').tradutorPython).toBeInstanceOf(TradutorPython); - expect(new Delegua('', false, false, 'delegua-para-py').tradutorPython).toBeInstanceOf(TradutorPython); - }); - - it('Traduzir javascript para delégua', () => { - expect(new Delegua('', false, false, 'javascript-para-delegua').tradutorReversoJavascript).toBeInstanceOf(TradutorReversoJavaScript); - expect(new Delegua('', false, false, 'js-para-delegua').tradutorReversoJavascript).toBeInstanceOf(TradutorReversoJavaScript); - }); - - it('Traduzir visualg para delégua', () => { - expect(new Delegua('', false, false, 'visualg-para-delegua').tradutorVisualg).toBeInstanceOf(TradutorVisualg); - expect(new Delegua('', false, false, 'alg-para-delegua').tradutorVisualg).toBeInstanceOf(TradutorVisualg); - }); - }); - - describe('Falha', () => { - it('Tradutor', () => { - expect(() => new Delegua('', false, false, 'go')).toThrow( - new Error('Tradutor \'go\' não implementado.') - ); - }); - }); -}); diff --git a/testes/egua-classico/avaliador-sintatico.test.ts b/testes/egua-classico/avaliador-sintatico.test.ts deleted file mode 100644 index 77f9084..0000000 --- a/testes/egua-classico/avaliador-sintatico.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Delegua } from "../../fontes/delegua"; -import { RetornoLexador } from "@designliquido/delegua/fontes/interfaces/retornos/retorno-lexador"; - -describe('Avaliador sintático (Égua Clássico)', () => { - describe('analisar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('egua'); - }); - - it('Sucesso - Olá Mundo', () => { - const retornoLexador = delegua.lexador.mapear(["escreva('Olá mundo');"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1); - }); - - it('Falha - Vetor vazio', () => { - expect(() => delegua.avaliadorSintatico.analisar({ simbolos: [] } as unknown as RetornoLexador, -1)).toThrow(TypeError); - }); - - it('Falha - Undefined', () => { - expect(() => delegua.avaliadorSintatico.analisar(undefined as any, -1)).toThrow(TypeError); - }); - - it('Falha - Null', () => { - expect(() => delegua.avaliadorSintatico.analisar(null as any, -1)).toThrow(TypeError); - }); - }); -}); \ No newline at end of file diff --git a/testes/egua-classico/delegua.test.ts b/testes/egua-classico/delegua.test.ts deleted file mode 100644 index 47dcd02..0000000 --- a/testes/egua-classico/delegua.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; - -describe('Delégua - (Égua Clássico)', () => { - describe('Falha', () => { - it('Depurador', () => { - expect(() => new Delegua('egua', false, true)).toThrow( - new Error('Dialeto egua não suporta depuração.') - ); - }); - }); -}); diff --git a/testes/egua-classico/interpretador.test.ts b/testes/egua-classico/interpretador.test.ts deleted file mode 100644 index 7eb21f0..0000000 --- a/testes/egua-classico/interpretador.test.ts +++ /dev/null @@ -1,259 +0,0 @@ -import { Delegua } from "../../fontes/delegua"; - -describe('Interpretador (Égua Clássico)', () => { - describe('interpretar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('egua'); - }); - - describe('Cenários de sucesso', () => { - describe('Atribuições', () => { - it('Trivial', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = 1;"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Vetor', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = [1, 2, 3];"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Dicionário', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = {'a': 1, 'b': 2};"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Acesso a variáveis e objetos', () => { - it('Acesso a elementos de vetor', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = [1, 2, 3];\nescreva(a[1]);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Acesso a elementos de dicionário', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = {'a': 1, 'b': 2};\nescreva(a['b']);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('escreva()', () => { - it('Olá Mundo (escreva() e literal)', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva('Olá mundo');"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('nulo', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(nulo);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Operações matemáticas', () => { - it('Operações matemáticas - Trivial', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(5 + 4 * 3 - 2 ** 1 / 6 % 10);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Operações lógicas', () => { - it('Operações lógicas - ou', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(verdadeiro ou falso);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Operações lógicas - e', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(verdadeiro e falso);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Operações lógicas - em', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(2 em [1, 2, 3]);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Condicionais', () => { - it('Condicionais - condição verdadeira', async () => { - const retornoLexador = delegua.lexador.mapear(["se (1 < 2) { escreva('Um menor que dois'); } senão { escreva('Nunca será executado'); }"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Condicionais - condição falsa', async () => { - const retornoLexador = delegua.lexador.mapear(["se (1 > 2) { escreva('Nunca acontece'); } senão { escreva('Um não é maior que dois'); }"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Laços de repetição', () => { - it('Laços de repetição - enquanto', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = 0;\nenquanto (a < 10) { a = a + 1; }"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Laços de repetição - fazer ... enquanto', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = 0;\nfazer { a = a + 1; } enquanto (a < 10)"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Laços de repetição - para', async () => { - const retornoLexador = delegua.lexador.mapear(["para (var i = 0; i < 10; i = i + 1) { escreva(i); }"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Classes', () => { - it('Trivial', async () => { - const codigo = [ - "classe Animal {", - " correr() {", - " escreva('Correndo Loucamente');", - " }", - "}", - "classe Cachorro herda Animal {", - " latir() {", - " escreva('Au Au Au Au');", - " }", - "}", - "var nomeDoCachorro = Cachorro();", - "nomeDoCachorro.correr();", - "nomeDoCachorro.latir();", - "escreva('Classe: OK!');" - ]; - - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Declaração e chamada de funções', () => { - it('Fibonacci', async () => { - const codigo = [ - "função fibonacci(n) {", - " se (n == 0) {", - " retorna(0);", - " }", - " se (n == 1) {", - " retorna(1);", - " }", - " var n1 = n - 1;", - " var n2 = n - 2;", - " var f1 = fibonacci(n1);", - " var f2 = fibonacci(n2);", - " retorna(f1 + f2);", - "}", - "var a = fibonacci(0);", - "escreva(a);", - "a = fibonacci(1);", - "escreva(a);", - "a = fibonacci(2);", - "escreva(a);", - "a = fibonacci(3);", - "escreva(a);", - "a = fibonacci(4);", - "escreva(a);", - "a = fibonacci(5);", - "escreva(a);" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - }); - - describe('Cenários de falha', () => { - describe('Acesso a variáveis e objetos', () => { - it('Acesso a elementos de vetor', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = [1, 2, 3];\nescreva(a[4]);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - - it('Acesso a elementos de dicionário', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = {'a': 1, 'b': 2};\nescreva(a['c']);"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThanOrEqual(0); - }); - }); - }); - }); -}); diff --git a/testes/egua-classico/lexador.test.ts b/testes/egua-classico/lexador.test.ts deleted file mode 100644 index b3f9a4a..0000000 --- a/testes/egua-classico/lexador.test.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { Delegua } from "../../fontes/delegua"; - -describe('Lexador (Égua Clássico)', () => { - describe('mapear()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('egua'); - }); - - describe('Cenários de sucesso', () => { - it('Sucesso - Código vazio', () => { - const resultado = delegua.lexador.mapear([''], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(1); - }); - - it('Sucesso - Ponto-e-vírgula, obrigatório', () => { - const resultado = delegua.lexador.mapear([';;;;;;;;;;;;;;;;;;;;;'], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(22); - }); - - it('Sucesso - Olá mundo', () => { - const resultado = delegua.lexador.mapear(["escreva('Olá mundo');"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(6); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: 'ESCREVA' }), - expect.objectContaining({ tipo: 'PARENTESE_ESQUERDO' }), - expect.objectContaining({ tipo: 'TEXTO' }), - expect.objectContaining({ tipo: 'PARENTESE_DIREITO' }), - expect.objectContaining({ tipo: 'PONTO_E_VIRGULA' }), - ]) - ); - }); - - it('Sucesso - Se', () => { - const resultado = delegua.lexador.mapear(["se (1 == 1) { escreva('Tautologia'); }"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(14); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: 'SE' }), - expect.objectContaining({ tipo: 'ESCREVA' }), - expect.objectContaining({ tipo: 'PARENTESE_ESQUERDO' }), - expect.objectContaining({ tipo: 'TEXTO' }), - expect.objectContaining({ tipo: 'PARENTESE_DIREITO' }), - expect.objectContaining({ tipo: 'CHAVE_ESQUERDA' }), - expect.objectContaining({ tipo: 'CHAVE_DIREITA' }), - expect.objectContaining({ tipo: 'IGUAL_IGUAL' }), - expect.objectContaining({ tipo: 'NUMERO' }), - expect.objectContaining({ tipo: 'PONTO_E_VIRGULA' }), - ]) - ); - }); - - it('Sucesso - Operação Matemática (soma e igualdade)', () => { - const resultado = delegua.lexador.mapear(['2 + 3 == 5;'], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(7); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: 'ADICAO' }), - expect.objectContaining({ tipo: 'IGUAL_IGUAL' }), - expect.objectContaining({ tipo: 'NUMERO' }), - expect.objectContaining({ tipo: 'PONTO_E_VIRGULA' }), - ]) - ); - }); - - it('Sucesso - Atribução de variável e Operação Matemática (diferença, multiplicação e módulo)', () => { - const resultado = delegua.lexador.mapear(['var numero = 1 * 2 - 3 % 4;'], -1); - - expect(resultado).toBeTruthy(); - }); - }); - - describe('Cenários de falha', () => { - it('Falha léxica - texto sem fim', () => { - const resultado = delegua.lexador.mapear(['"texto sem fim'], -1); - expect(resultado.simbolos).toHaveLength(1); - expect(resultado.erros).toHaveLength(1); - }); - - it('Falha léxica - caractere inesperado', () => { - const resultado = delegua.lexador.mapear(['平'], -1); - expect(resultado.simbolos).toHaveLength(1); - expect(resultado.erros).toHaveLength(1); - }); - }); - }); -}); diff --git a/testes/egua-classico/resolvedor.test.ts b/testes/egua-classico/resolvedor.test.ts deleted file mode 100644 index 99ff73a..0000000 --- a/testes/egua-classico/resolvedor.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; -import { ResolvedorEguaClassico } from '@designliquido/delegua/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor'; - -describe('Resolvedor (Égua Clássico)', () => { - describe('resolver()', () => { - const delegua = new Delegua('egua'); - const resolvedor = new ResolvedorEguaClassico(); - - it('Sucesso', () => { - const retornoLexador = delegua.lexador.mapear( - ["escreva('Olá mundo');"], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - resolvedor.resolver(retornoAvaliadorSintatico.declaracoes); - expect(resolvedor.escopos).toBeTruthy(); - expect(resolvedor.escopos.pilha).toBeTruthy(); - expect(resolvedor.escopos.pilha).toHaveLength(0); - }); - - it('Sucesso - Vetor vazio', () => { - resolvedor.resolver([]); - expect(resolvedor.escopos).toBeTruthy(); - expect(resolvedor.escopos.pilha).toBeTruthy(); - expect(resolvedor.escopos.pilha).toHaveLength(0); - }); - }); -}); diff --git a/testes/guarani/avaliador-sintatico.test.ts b/testes/guarani/avaliador-sintatico.test.ts deleted file mode 100644 index ec33306..0000000 --- a/testes/guarani/avaliador-sintatico.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ErroAvaliadorSintatico } from "@designliquido/delegua/fontes/avaliador-sintatico/erro-avaliador-sintatico"; -import { AvaliadorSintaticoGuarani } from "@designliquido/delegua/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani"; -import { LexadorGuarani } from "@designliquido/delegua/fontes/lexador/dialetos/lexador-guarani"; - -describe('Avaliador sintático (Guarani)', () => { - describe('analisar()', () => { - let lexador: LexadorGuarani; - let avaliadorSintatico: AvaliadorSintaticoGuarani; - - beforeEach(() => { - lexador = new LexadorGuarani(); - avaliadorSintatico = new AvaliadorSintaticoGuarani(); - }); - - it('Sucesso - Olá Mundo', () => { - const retornoLexador = lexador.mapear( - [ - 'hai("Olá Mundo")' - ], - -1 - ); - const retornoAvaliadorSintatico = - avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1); - }); - }); -}); diff --git a/testes/guarani/lexador.test.ts b/testes/guarani/lexador.test.ts deleted file mode 100644 index 190ce66..0000000 --- a/testes/guarani/lexador.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { LexadorGuarani } from '@designliquido/delegua/fontes/lexador/dialetos/lexador-guarani'; -import tiposDeSimbolos from '@designliquido/delegua/fontes/tipos-de-simbolos/guarani'; - -describe('Lexador', () => { - describe('mapear()', () => { - let lexador: LexadorGuarani; - - beforeEach(() => { - lexador = new LexadorGuarani(); - }); - - describe('Cenários de sucesso', () => { - it('Sucesso - Código vazio', () => { - const resultado = lexador.mapear([''], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Sucesso - Ponto-e-vírgula, opcional', () => { - const resultado = lexador.mapear([';;;;;;;;;;;;;;;;;;;;;'], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Sucesso - Olá guaranis', () => { - const resultado = lexador.mapear(["hai('Olá guaranis')"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(4); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.HAI }), - expect.objectContaining({ tipo: tiposDeSimbolos.PARENTESE_ESQUERDO }), - expect.objectContaining({ tipo: tiposDeSimbolos.TEXTO }), - expect.objectContaining({ tipo: tiposDeSimbolos.PARENTESE_DIREITO }), - ]) - ); - }); - }); - }); -}); diff --git a/testes/importador.test.ts b/testes/importador.test.ts deleted file mode 100644 index 46acba3..0000000 --- a/testes/importador.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Delegua } from '../fontes/delegua'; - -describe('Importador', () => { - describe('importar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('delegua'); - }); - - it('Trivial', () => { - const resultado = delegua.importador.importar('./exemplos/fibonacci.delegua', true, false); - expect(resultado).toBeTruthy(); - }); - }); -}); \ No newline at end of file diff --git a/testes/interpretador.test.ts b/testes/interpretador.test.ts deleted file mode 100644 index e905526..0000000 --- a/testes/interpretador.test.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Delegua } from '../fontes/delegua'; - -describe('Interpretador', () => { - describe('interpretar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('delegua'); - }); - - describe('Cenários de sucesso', () => { - describe('Importar', () => { - it('Importar biblioteca externa', async () => { - const retornoLexador = delegua.lexador.mapear(["var commander = importar('commander')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - describe('Importar bibliotecas delegua', () => { - describe('testa importação da biblioteca de estatística', () => { - beforeEach(() => { - jest.mock('./__mocks__/estatistica.ts'); - }) - afterAll(() => { - jest.unmock("./__mocks__/estatistica.ts") - }) - it('estatística' , async () => { - const retornoLexador = delegua.lexador.mapear(["var estatística = importar('estatística')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('estatistica' , async () => { - const retornoLexador = delegua.lexador.mapear(["var estatistica = importar('estatistica')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }) - - describe('testa importação da biblioteca de física', () => { - beforeEach(() => { - jest.mock('./__mocks__/fisica.ts'); - }) - afterEach(() => { - jest.unmock("./__mocks__/fisica.ts") - }) - it('física' , async () => { - const retornoLexador = delegua.lexador.mapear(["var física = importar('física')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('fisica' , async () => { - const retornoLexador = delegua.lexador.mapear(["var fisica = importar('fisica')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }) - - describe('testa importação da biblioteca de matemática', () => { - beforeEach(() => { - jest.mock('./__mocks__/matematica.ts'); - }) - afterAll(() => { - jest.unmock("./__mocks__/matematica.ts") - }) - it('matemática com acento', async () => { - const retornoLexador = delegua.lexador.mapear(["var matemática = importar('matemática')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('matematica sem acento', async () => { - const retornoLexador = delegua.lexador.mapear(["var matematica = importar('matematica')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }) - }) - }); - }); - - describe('Cenários de falha', () => { - describe('Importar', () => { - it('Importar biblioteca externa que não existe', async () => { - const retornoLexador = delegua.lexador.mapear(["var naoexiste = importar('naoexiste')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }) - }); - }); - }); -}); diff --git a/testes/lexador.test.ts b/testes/lexador.test.ts deleted file mode 100644 index 66b60ff..0000000 --- a/testes/lexador.test.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { Delegua } from '../fontes/delegua'; -import tiposDeSimbolos from '@designliquido/delegua/fontes/tipos-de-simbolos/delegua'; - -describe('Lexador', () => { - describe('mapear()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('delegua'); - }); - - describe('Cenários de sucesso', () => { - it('Sucesso - Código vazio', () => { - const resultado = delegua.lexador.mapear([''], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Sucesso - Ponto-e-vírgula, opcional', () => { - const resultado = delegua.lexador.mapear([';;;;;;;;;;;;;;;;;;;;;'], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(21); - }); - - it('Sucesso - Olá mundo', () => { - const resultado = delegua.lexador.mapear(["escreva('Olá mundo')"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(4); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.ESCREVA }), - expect.objectContaining({ tipo: tiposDeSimbolos.PARENTESE_ESQUERDO }), - expect.objectContaining({ tipo: tiposDeSimbolos.TEXTO }), - expect.objectContaining({ tipo: tiposDeSimbolos.PARENTESE_DIREITO }), - ]) - ); - }); - - it('Sucesso - Soma - Maior Igual', () => { - const resultado = delegua.lexador.mapear(["var valor = 1", "valor += 2"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(7); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.VARIAVEL }), - expect.objectContaining({ tipo: tiposDeSimbolos.IGUAL }), - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - expect.objectContaining({ tipo: tiposDeSimbolos.IDENTIFICADOR }), - expect.objectContaining({ tipo: tiposDeSimbolos.MAIS_IGUAL }), - ]) - ); - }); - - it('Sucesso - Subtração - Menor Igual', () => { - const resultado = delegua.lexador.mapear(["var valor = 5", "valor -= 2"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(7); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.VARIAVEL }), - expect.objectContaining({ tipo: tiposDeSimbolos.IDENTIFICADOR }), - expect.objectContaining({ tipo: tiposDeSimbolos.IGUAL }), - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - expect.objectContaining({ tipo: tiposDeSimbolos.MENOS_IGUAL }), - ]) - ); - }); - - it('Sucesso - Multiplicação Igual', () => { - const resultado = delegua.lexador.mapear(["var valor = 5", "valor *= 2"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(7); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.VARIAVEL }), - expect.objectContaining({ tipo: tiposDeSimbolos.IGUAL }), - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - expect.objectContaining({ tipo: tiposDeSimbolos.IDENTIFICADOR }), - expect.objectContaining({ tipo: tiposDeSimbolos.MULTIPLICACAO_IGUAL }), - ]) - ); - }); - - it('Sucesso - Diferente Igual', () => { - const resultado = delegua.lexador.mapear(["1 != 2"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(3); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - expect.objectContaining({ tipo: tiposDeSimbolos.DIFERENTE }), - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - ]) - ); - }); - - it('Sucesso - Divisão Igual', () => { - const resultado = delegua.lexador.mapear(["var valor = 10", "valor /= 2"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(7); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.VARIAVEL }), - expect.objectContaining({ tipo: tiposDeSimbolos.IDENTIFICADOR }), - expect.objectContaining({ tipo: tiposDeSimbolos.IGUAL }), - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - expect.objectContaining({ tipo: tiposDeSimbolos.DIVISAO_IGUAL }), - ]) - ); - }); - - it('Sucesso - Módulo Igual', () => { - const resultado = delegua.lexador.mapear(["var valor = 5", "valor %= 2"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(7); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.VARIAVEL }), - expect.objectContaining({ tipo: tiposDeSimbolos.IDENTIFICADOR }), - expect.objectContaining({ tipo: tiposDeSimbolos.IGUAL }), - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - expect.objectContaining({ tipo: tiposDeSimbolos.MODULO_IGUAL }), - ]) - ); - }); - - it('Sucesso - Comentários multilinha', () => { - const resultado = delegua.lexador.mapear(["/* comentário ", "outro comentário*/"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Sucesso - Comentários uma linha', () => { - const resultado = delegua.lexador.mapear(["// comentário ", "// outro comentário"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Sucesso - Comentários multilinha', () => { - const resultado = delegua.lexador.mapear(["/* comentário ", "outro comentário*/"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Sucesso - Se', () => { - const resultado = delegua.lexador.mapear(["se (1 == 1) { escreva('Tautologia') }"], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(12); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.SE }), - expect.objectContaining({ tipo: tiposDeSimbolos.ESCREVA }), - expect.objectContaining({ tipo: tiposDeSimbolos.PARENTESE_ESQUERDO }), - expect.objectContaining({ tipo: tiposDeSimbolos.TEXTO }), - expect.objectContaining({ tipo: tiposDeSimbolos.PARENTESE_DIREITO }), - expect.objectContaining({ tipo: tiposDeSimbolos.CHAVE_ESQUERDA }), - expect.objectContaining({ tipo: tiposDeSimbolos.CHAVE_DIREITA }), - expect.objectContaining({ tipo: tiposDeSimbolos.IGUAL_IGUAL }), - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - ]) - ); - }); - - it('Sucesso - Operação Matemática (soma e igualdade)', () => { - const resultado = delegua.lexador.mapear(['2 + 3 == 5'], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(5); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.ADICAO }), - expect.objectContaining({ tipo: tiposDeSimbolos.IGUAL_IGUAL }), - expect.objectContaining({ tipo: tiposDeSimbolos.NUMERO }), - ]) - ); - }); - - it('Sucesso - Atribução de variável e Operação Matemática (diferença, multiplicação e módulo)', () => { - const resultado = delegua.lexador.mapear(['var numero = 1 * 2 - 3 % 4'], -1); - - expect(resultado).toBeTruthy(); - }); - }); - - describe('Cenários de falha', () => { - it('Falha léxica - texto sem fim', () => { - const resultado = delegua.lexador.mapear(['"texto sem fim'], -1); - expect(resultado.simbolos).toHaveLength(0); - expect(resultado.erros).toHaveLength(1); - }); - - it('Falha léxica - caractere inesperado', () => { - const resultado = delegua.lexador.mapear(['平'], -1); - expect(resultado.simbolos).toHaveLength(0); - expect(resultado.erros).toHaveLength(1); - }); - }); - }); -}); diff --git a/testes/pitugues/avaliador-sintatico.test.ts b/testes/pitugues/avaliador-sintatico.test.ts deleted file mode 100644 index 183ea40..0000000 --- a/testes/pitugues/avaliador-sintatico.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; - -describe('Avaliador sintático (Pituguês)', () => { - describe('analisar()', () => { - const delegua = new Delegua('pitugues'); - - it('Sucesso - Olá Mundo', () => { - const retornoLexador = delegua.lexador.mapear( - ["escreva('Olá mundo')"], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1); - }); - - it('Falha - Identação', () => { - const codigo = ['classe Cachorro:', 'latir():', "escreva('Erro')"]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico.erros.length).toBeGreaterThan(0); - }); - - // it('Falha - Vetor vazio', () => { - // expect(() => delegua.avaliadorSintatico.analisar({simbolos: []} as RetornoLexador)).toThrow(TypeError); - // }); - - // it('Falha - Undefined', () => { - // expect(() => delegua.avaliadorSintatico.analisar(undefined)).toThrow(TypeError); - // }); - - // it('Falha - Null', () => { - // expect(() => delegua.avaliadorSintatico.analisar(null)).toThrow(TypeError); - // }); - }); -}); diff --git a/testes/pitugues/interpretador.test.ts b/testes/pitugues/interpretador.test.ts deleted file mode 100644 index 57def98..0000000 --- a/testes/pitugues/interpretador.test.ts +++ /dev/null @@ -1,268 +0,0 @@ -import { Delegua } from "../../fontes/delegua"; - -describe('Interpretador (Pituguês)', () => { - describe('interpretar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('pitugues'); - }); - - describe('Cenários de sucesso', () => { - describe('Atribuições', () => { - it('Trivial', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = 1;"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Vetor', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = [1, 2, 3]"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Dicionário', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = {'a': 1, 'b': 2}"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Acesso a variáveis e objetos', () => { - it('Acesso a elementos de vetor', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = [1, 2, 3];\nescreva(a[1])"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Acesso a elementos de dicionário', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = {'a': 1, 'b': 2};\nescreva(a['b'])"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('escreva()', () => { - it('Olá Mundo (escreva() e literal)', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva('Olá mundo')"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('nulo', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(nulo)"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Operações matemáticas', () => { - it('Operações matemáticas - Trivial', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(5 + 4 * 3 - 2 ** 1 / 6 % 10)"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Operações lógicas', () => { - it('Operações lógicas - ou', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(verdadeiro ou falso)"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Operações lógicas - e', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(verdadeiro e falso)"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Operações lógicas - em', async () => { - const retornoLexador = delegua.lexador.mapear(["escreva(2 em [1, 2, 3])"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Condicionais', () => { - it('Condicionais - condição verdadeira', async () => { - const codigo = [ - "se (1 < 2):", - " escreva('Um menor que dois')", - "senao:", - " escreva('Nunca será executado')", - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Condicionais - condição falsa', async () => { - const codigo = [ - "se (1 > 2):", - " escreva('Nunca acontece')", - "senão:", - " escreva('Um não é maior que dois')", - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Laços de repetição', () => { - it('Laços de repetição - enquanto', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = 0\nenquanto a < 10:\n a = a + 1"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Laços de repetição - fazer ... enquanto', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = 0\nfazer:\n a = a + 1\nenquanto a < 10"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - - it('Laços de repetição - para', async () => { - const codigo = [ - "para var i = 0; i < 10; i = i + 1:", - " escreva(i)", - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Classes', () => { - it.skip('Trivial', async () => { - const codigo = [ - "classe Animal:", - " correr():", - " escreva('Correndo Loucamente')", - "classe Cachorro herda Animal:", - " latir():", - " escreva('Au Au Au Au')", - "var nomeDoCachorro = Cachorro()", - "nomeDoCachorro.correr()", - "nomeDoCachorro.latir()", - "escreva('Classe: OK!')" - ]; - - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - - describe('Declaração e chamada de funções', () => { - it('Fibonacci', async () => { - const codigo = [ - "função fibonacci(n):", - " se (n == 0):", - " retorna(0)", - " se (n == 1):", - " retorna(1)", - " var n1 = n - 1", - " var n2 = n - 2", - " var f1 = fibonacci(n1)", - " var f2 = fibonacci(n2)", - " retorna(f1 + f2)", - "var a = fibonacci(0)", - "escreva(a)", - "a = fibonacci(1)", - "escreva(a)", - "a = fibonacci(2)", - "escreva(a)", - "a = fibonacci(3)", - "escreva(a)", - "a = fibonacci(4)", - "escreva(a)", - "a = fibonacci(5)", - "escreva(a)" - ]; - const retornoLexador = delegua.lexador.mapear(codigo, -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - }); - - describe('Cenários de falha', () => { - describe('Acesso a variáveis e objetos', () => { - it('Acesso a elementos de vetor', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = [1, 2, 3]\nescreva(a[4])"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThan(0); - }); - - it('Acesso a elementos de dicionário', async () => { - const retornoLexador = delegua.lexador.mapear(["var a = {'a': 1, 'b': 2}\nescreva(a['c'])"], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros.length).toBeGreaterThanOrEqual(0); - }); - }); - }); - }); -}); diff --git a/testes/pitugues/lexador.test.ts b/testes/pitugues/lexador.test.ts deleted file mode 100644 index b86c4ec..0000000 --- a/testes/pitugues/lexador.test.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; - -describe('Lexador (Pituguês)', () => { - describe('mapear()', () => { - const delegua = new Delegua('pitugues'); - - describe('Cenários de sucesso', () => { - it('Sucesso - Código vazio', () => { - const resultado = delegua.lexador.mapear([''], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.erros).toHaveLength(0); - }); - - it('Sucesso - Olá mundo', () => { - const resultado = delegua.lexador.mapear( - ["escreva('Olá mundo')"], - -1 - ); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(4); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: 'ESCREVA' }), - expect.objectContaining({ tipo: 'PARENTESE_ESQUERDO' }), - expect.objectContaining({ tipo: 'TEXTO' }), - expect.objectContaining({ tipo: 'PARENTESE_DIREITO' }), - ]) - ); - }); - - it('Sucesso - Operação Matemática (soma e igualdade)', () => { - const resultado = delegua.lexador.mapear(['2 + 3 == 5'], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(5); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: 'ADICAO' }), - expect.objectContaining({ tipo: 'IGUAL_IGUAL' }), - expect.objectContaining({ tipo: 'NUMERO' }), - ]) - ); - }); - - it('Sucesso - Atribução de variável e Operação Matemática (diferença, multiplicação e módulo)', () => { - const resultado = delegua.lexador.mapear( - ['var numero = 1 * 2 - 3 % 4'], - -1 - ); - - expect(resultado).toBeTruthy(); - }); - }); - - describe('Cenários de falha', () => { - it('Falha léxica - texto sem fim', () => { - const resultado = delegua.lexador.mapear( - ['"texto sem fim'], - -1 - ); - expect(resultado.simbolos).toHaveLength(0); - expect(resultado.erros).toHaveLength(1); - }); - - it('Falha léxica - caractere inesperado', () => { - const resultado = delegua.lexador.mapear(['平'], -1); - expect(resultado.simbolos).toHaveLength(0); - expect(resultado.erros).toHaveLength(1); - }); - }); - }); -}); diff --git a/testes/portugol-studio/avaliador-sintatico.test.ts b/testes/portugol-studio/avaliador-sintatico.test.ts deleted file mode 100644 index 1527f22..0000000 --- a/testes/portugol-studio/avaliador-sintatico.test.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { ErroAvaliadorSintatico } from "@designliquido/delegua/fontes/avaliador-sintatico/erro-avaliador-sintatico"; -import { Delegua } from "../../fontes/delegua"; - -describe('Avaliador sintático (Portugol Studio)', () => { - describe('analisar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('portugol-studio'); - }); - - it('Sucesso - Olá Mundo', () => { - const retornoLexador = delegua.lexador.mapear( - [ - 'programa', - '{', - ' ', - ' funcao inicio()', - ' {', - ' escreva("Olá Mundo")', - ' }', - '}' - ], - -1 - ); - const retornoAvaliadorSintatico = - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(2); - }); - - it('Falha - Função `inicio()` não definida', () => { - const retornoLexador = delegua.lexador.mapear( - [ - 'programa', - '{', - ' ', - ' funcao teste()', - ' {', - ' escreva("Olá Mundo")', - ' }', - '}' - ], - -1 - ); - - const t = () => { - delegua.avaliadorSintatico.analisar(retornoLexador, -1); - }; - - expect(t).toThrow(ErroAvaliadorSintatico); - }); - }); -}); diff --git a/testes/portugol-studio/interpretador.test.ts b/testes/portugol-studio/interpretador.test.ts deleted file mode 100644 index f931e7e..0000000 --- a/testes/portugol-studio/interpretador.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; - -describe('Interpretador', () => { - describe('interpretar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('portugol-studio'); - }); - - describe('Cenários de sucesso', () => { - it('Trivial', async () => { - const retornoLexador = delegua.lexador.mapear([ - 'programa', - '{', - ' ', - ' funcao inicio()', - ' {', - ' escreva("Olá Mundo")', - ' }', - '}' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - }); -}); diff --git a/testes/portugol-studio/lexador.test.ts b/testes/portugol-studio/lexador.test.ts deleted file mode 100644 index 1241457..0000000 --- a/testes/portugol-studio/lexador.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; - -describe('Lexador (Portugol Studio)', () => { - describe('mapear()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('portugol-studio'); - }); - - describe('Cenário de sucesso', () => { - it('Arquivo vazio.', () => { - const resultado = delegua.lexador.mapear([''], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Programa vazio.', () => { - const resultado = delegua.lexador.mapear([ - 'programa', - '{', - ' ', - ' funcao inicio()', - ' {', - '', - ' }', - '}' - ], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(9); - }); - }); - }); -}); diff --git a/testes/visualg/avaliador-sintatico.test.ts b/testes/visualg/avaliador-sintatico.test.ts deleted file mode 100644 index d3cb30f..0000000 --- a/testes/visualg/avaliador-sintatico.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { Delegua } from "../../fontes/delegua"; - -describe('Avaliador sintático (VisuAlg)', () => { - describe('analisar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('visualg'); - }); - - it('Sucesso - Olá Mundo', () => { - const retornoLexador = delegua.lexador.mapear([ - 'algoritmo "olá-mundo"', - 'inicio', - 'escreva("Olá mundo")', - 'fimalgoritmo' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1); - }); - - it('Sucesso - Enquanto', () => { - const retornoLexador = delegua.lexador.mapear([ - 'algoritmo "Números de 1 a 10 (com enquanto...faca)"', - 'var j: inteiro', - 'inicio', - 'j <- 1', - 'enquanto j <= 10 faca', - ' escreva (j)', - ' j <- j + 1', - 'fimenquanto', - 'fimalgoritmo' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); - }); - - it('Sucesso - Escolha', () => { - const retornoLexador = delegua.lexador.mapear([ - 'algoritmo "Times"', - 'var time: caractere', - 'inicio', - 'escreva ("Entre com o nome de um time de futebol: ")', - 'leia (time)', - 'escolha time', - ' caso "Flamengo", "Fluminense", "Vasco", "Botafogo"', - ' escreval ("É um time carioca.")', - ' caso "São Paulo", "Palmeiras", "Santos", "Corínthians"', - ' escreval ("É um time paulista.")', - ' outrocaso', - ' escreval ("É de outro estado.")', - 'fimescolha', - 'fimalgoritmo' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - }); - - it('Sucesso - Função', () => { - const retornoLexador = delegua.lexador.mapear([ - 'Algoritmo "exemplo-funcoes"', - 'Var', - ' n: inteiro', - ' m: inteiro', - ' res: inteiro', - 'Inicio', - ' funcao soma: inteiro', - ' var aux: inteiro', - ' inicio', - ' aux <- n + m', - ' retorne aux', - ' fimfuncao', - ' n <- 4', - ' m <- -9', - ' res <- soma', - ' escreva(res)', - 'Fimalgoritmo' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(8); - }); - - it('Sucesso - Interrompa', () => { - const retornoLexador = delegua.lexador.mapear([ - 'algoritmo "Números de 1 a 10 (com interrompa)"', - 'var x: inteiro', - 'inicio', - 'x <- 0', - 'repita', - ' x <- x + 1', - ' escreva (x)', - ' se x = 10 entao', - ' interrompa', - ' fimse', - 'ate falso', - 'fimalgoritmo' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); - }); - - it('Sucesso - Para', () => { - const retornoLexador = delegua.lexador.mapear([ - 'algoritmo "Numeros de 1 a 10"', - 'var j: inteiro', - 'inicio', - ' para j de 1 ate 10 faca', - ' escreva (j)', - ' fimpara', - 'fimalgoritmo' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(2); - }); - - it('Sucesso - Repita', () => { - const retornoLexador = delegua.lexador.mapear([ - 'algoritmo "Números de 1 a 10 (com repita)"', - 'var j: inteiro', - 'inicio', - 'j <- 1', - 'repita', - ' escreva (j)', - ' j <- j + 1', - 'ate j > 10', - 'fimalgoritmo' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); - }); - }); -}); diff --git a/testes/visualg/interpretador.test.ts b/testes/visualg/interpretador.test.ts deleted file mode 100644 index 7aacb49..0000000 --- a/testes/visualg/interpretador.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Delegua } from '../../fontes/delegua'; - -describe('Interpretador', () => { - describe('interpretar()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('visualg'); - }); - - describe('Cenários de sucesso', () => { - it('Trivial', async () => { - const retornoLexador = delegua.lexador.mapear([ - 'algoritmo "olá-mundo"', - 'inicio', - 'fimalgoritmo' - ], -1); - const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador, -1); - - const retornoInterpretador = await delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes); - - expect(retornoInterpretador.erros).toHaveLength(0); - }); - }); - }); -}); diff --git a/testes/visualg/lexador.test.ts b/testes/visualg/lexador.test.ts deleted file mode 100644 index 4a8e491..0000000 --- a/testes/visualg/lexador.test.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Delegua } from "../../fontes/delegua"; -import tiposDeSimbolos from "@designliquido/delegua/fontes/tipos-de-simbolos/visualg" - -describe('Lexador (VisuAlg)', () => { - describe('mapear()', () => { - let delegua: Delegua; - - beforeEach(() => { - delegua = new Delegua('visualg'); - }); - - describe('Cenários de sucesso', () => { - it('Sucesso - Código vazio', () => { - const resultado = delegua.lexador.mapear([''], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Sucesso - Ponto-e-vírgula, opcional', () => { - const resultado = delegua.lexador.mapear([';;;;;;;;;;;;;;;;;;;;;'], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(0); - }); - - it('Sucesso - estrutura mínima', () => { - const resultado = delegua.lexador.mapear([ - "algoritmo \"vazio\"", - "var", - "inicio", - "fimalgoritmo" - ], -1); - - expect(resultado).toBeTruthy(); - expect(resultado.simbolos).toHaveLength(8); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.ALGORITMO }), - expect.objectContaining({ tipo: tiposDeSimbolos.CARACTERE }), - expect.objectContaining({ tipo: tiposDeSimbolos.QUEBRA_LINHA }), - expect.objectContaining({ tipo: tiposDeSimbolos.VAR }), - expect.objectContaining({ tipo: tiposDeSimbolos.QUEBRA_LINHA }), - expect.objectContaining({ tipo: tiposDeSimbolos.INICIO }), - expect.objectContaining({ tipo: tiposDeSimbolos.QUEBRA_LINHA }), - // expect.objectContaining({ tipo: tiposDeSimbolos.ESCREVA }), - expect.objectContaining({ tipo: tiposDeSimbolos.FIM_ALGORITMO }) - ]) - ); - }); - - it('Sucesso - Olá mundo', () => { - const resultado = delegua.lexador.mapear( - [ - "algoritmo \"ola-mundo\"", - "var", - "a: inteiro", - "inicio" - ], -1); - - expect(resultado).toBeTruthy(); - /* expect(resultado.simbolos).toHaveLength(4); - expect(resultado.simbolos).toEqual( - expect.arrayContaining([ - expect.objectContaining({ tipo: tiposDeSimbolos.ESCREVA }), - expect.objectContaining({ tipo: tiposDeSimbolos.PARENTESE_ESQUERDO }), - expect.objectContaining({ tipo: tiposDeSimbolos.TEXTO }), - expect.objectContaining({ tipo: tiposDeSimbolos.PARENTESE_DIREITO }), - ]) - ); */ - }); - }); - }); -});