UNPKG

@designliquido/foles

Version:

Linguagem de folhas de estilo para documentos em geral em português

133 lines 8.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const avaliador_sintatico_1 = require("../../fontes/avaliador-sintatico"); const importador_1 = require("../../fontes/importador"); const lexador_1 = require("../../fontes/lexador"); const superclasse_1 = require("../../fontes/modificadores/superclasse"); const foles_1 = __importDefault(require("../../fontes/tipos-de-simbolos/foles")); const serializadores_1 = require("../../fontes/serializadores"); const palavras_reservadas_1 = require("../listas/palavras-reservadas"); const declaracoes_1 = require("../../fontes/declaracoes"); describe('Testando Seletores que recebem PALAVRAS RESERVADAS como atributo', () => { describe('Testes Unitários', () => { let lexador; let importador; let avaliador; let tradutor; beforeEach(() => { lexador = new lexador_1.Lexador(); importador = new importador_1.Importador(lexador); avaliador = new avaliador_sintatico_1.AvaliadorSintatico(importador); tradutor = new serializadores_1.Serializador(); }); it('Caso de sucesso - Valores globais válidos', () => { for (let index = 0; index < Object.keys(palavras_reservadas_1.PalavrasReservadas).length; index += 1) { const seletor = new superclasse_1.SeletorModificador(palavras_reservadas_1.PalavrasReservadas[index], 'reverter', null); // Lexador const resultadoLexador = lexador.mapear([ "corpo {", `${palavras_reservadas_1.PalavrasReservadas[index]}: ${seletor['valor']};`, "}" ]); // O modificador deve aceitar o valor global expect(seletor['valor']).toEqual('reverter'); // O Lexador deve montar um objeto de comprimento 7 sem retornar nenhum erro expect(resultadoLexador.simbolos).toHaveLength(7); expect(resultadoLexador.erros).toHaveLength(0); // O Lexador deve classificar o valor como QUALITATIVO expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }), ])); // O Lexador não deve encontrar qualquer número ou quantificador na operação expect(resultadoLexador.simbolos).not.toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), expect.objectContaining({ tipo: foles_1.default.NUMERO }), ])); // Avaliador Sintático const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos); // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS expect(resultadoAvaliadorSintatico.length).toBeGreaterThanOrEqual(1); const primeiroResultado = resultadoAvaliadorSintatico[0]; expect(primeiroResultado).toBeInstanceOf(declaracoes_1.BlocoDeclaracao); const primeiroResultadoTipado = primeiroResultado; expect(primeiroResultadoTipado.modificadores.length).toBeGreaterThanOrEqual(1); expect(primeiroResultadoTipado.modificadores[0].nomeFoles).toStrictEqual(seletor['nomeFoles']); expect(primeiroResultadoTipado.modificadores[0].propriedadeCss).toStrictEqual(seletor['propriedadeCss']); // Tradutor const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico); expect(resultadoTradutor).toContain('body'); expect(resultadoTradutor).toContain(seletor['propriedadeCss']); expect(resultadoTradutor).toContain('revert'); } }); it('Caso de sucesso - passando valores aceitos', () => { for (let index = 0; index < Object.keys(palavras_reservadas_1.PalavrasReservadas).length; index += 1) { // Seletor inicial let seletor = new superclasse_1.SeletorModificador(palavras_reservadas_1.PalavrasReservadas[index], 'reverter', null); // Se há uma lista de valores aceitos, é atribuído o primeiro valor ao seletor. // Se não há, a condicional abaixo não é executada e o seletor segue sendo o da linha acima. if (seletor['valoresAceitos'] !== undefined) { const valor = Object.keys(seletor['valoresAceitos']); seletor = new superclasse_1.SeletorModificador(palavras_reservadas_1.PalavrasReservadas[index], valor[0], null); } ; // Lexador const resultadoLexador = lexador.mapear([ "corpo {", `${palavras_reservadas_1.PalavrasReservadas[index]}: ${seletor['valor']};`, "}" ]); // O Lexador deve montar um objeto de comprimento 7 sem retornar nenhum erro expect(resultadoLexador.simbolos).toHaveLength(7); expect(resultadoLexador.erros).toHaveLength(0); // O Lexador não deve encontrar qualquer número ou quantificador na operação expect(resultadoLexador.simbolos).not.toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), expect.objectContaining({ tipo: foles_1.default.NUMERO }), ])); // O Lexador deve classificar o valor recebido como IDENTIFICADOR expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.IDENTIFICADOR }), ])); // Avaliador Sintático deve conter os nomes FolEs e CSS corretamente const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos); // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS expect(resultadoAvaliadorSintatico.length).toBeGreaterThanOrEqual(1); const primeiroResultado = resultadoAvaliadorSintatico[0]; expect(primeiroResultado).toBeInstanceOf(declaracoes_1.BlocoDeclaracao); const primeiroResultadoTipado = primeiroResultado; expect(primeiroResultadoTipado.modificadores.length).toBeGreaterThanOrEqual(1); expect(primeiroResultadoTipado.modificadores[0].nomeFoles).toStrictEqual(seletor['nomeFoles']); expect(primeiroResultadoTipado.modificadores[0].propriedadeCss).toStrictEqual(seletor['propriedadeCss']); // Tradutor deve tranformar o código corretamente em CSS const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico); expect(resultadoTradutor).toContain('body'); expect(resultadoTradutor).toContain(seletor['propriedadeCss']); } }); it('Caso de falha - Palavra reservada não informada', () => { for (let index = 0; index < Object.keys(palavras_reservadas_1.PalavrasReservadas).length; index += 1) { // Lexador const resultadoLexador = lexador.mapear([ "corpo {", `${palavras_reservadas_1.PalavrasReservadas[index]}: ;`, "}" ]); // Não deve montar o objeto corretamente expect(resultadoLexador.simbolos).not.toHaveLength(7); // Não deve encontrar nenhum QUALITATIVO na operação expect(resultadoLexador.simbolos).not.toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }), ])); // Av. Sintático deve retornar um erro expect(() => { avaliador.analisar(resultadoLexador.simbolos); }).toThrow(`Esperado ';' após declaração de valor de modificador '${palavras_reservadas_1.PalavrasReservadas[index]}'.`); } }); }); }); //# sourceMappingURL=palavras-reservadas.test.js.map