UNPKG

@designliquido/foles

Version:

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

281 lines 17.8 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 valor_quantificador_1 = require("../listas/valor-quantificador"); const declaracoes_1 = require("../../fontes/declaracoes"); describe('Testes: Valor-Quantificador', () => { let lexador; let importador; let avaliador; let tradutor; describe('Testando Seletores que aceitam QUALQUER Valor e Quantificador', () => { 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('Casos de sucesso - Lexador, Avaliador e Tradutor', () => { for (let index = 0; index < valor_quantificador_1.ValorQuantificador.length; index += 1) { const seletor = new superclasse_1.SeletorModificador(valor_quantificador_1.ValorQuantificador[index], '12', 'px'); // Lexador const resultadoLexador = lexador.mapear([ "lmht {", `${valor_quantificador_1.ValorQuantificador[index]}: ${seletor['valor']}${seletor['quantificador']};`, "}" ]); expect(resultadoLexador.simbolos).toHaveLength(8); expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.NUMERO }), expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), ])); // 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('html'); expect(resultadoTradutor).toContain(seletor['propriedadeCss']); expect(resultadoTradutor).toContain('12px'); } }); it('Casos de Falha - Lexador, Avaliador e Tradutor', () => { for (let index = 0; index < Object.keys(valor_quantificador_1.ValorQuantificador).length; index += 1) { // Lexador - valor numérico não informado const resultadoLexador = lexador.mapear([ "lmht {", `${valor_quantificador_1.ValorQuantificador[index]}: ;`, "}" ]); // Lexador não deve identificar número ou quantificador na estrutura expect(resultadoLexador.simbolos).not.toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.NUMERO }), expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), ])); // Avaliador Sintático deve retornar erro expect(() => { avaliador.analisar(resultadoLexador.simbolos); }).toThrow(`Esperado ';' após declaração de valor de modificador '${valor_quantificador_1.ValorQuantificador[index]}'.`); } }); it('Casos de Falha - Atribuição de valor inválido', () => { for (let index = 0; index < Object.keys(valor_quantificador_1.ValorQuantificadorInvalido).length; index += 1) { // Lexador - valor numérico não informado const resultadoLexador = lexador.mapear([ "lmht {", `${valor_quantificador_1.ValorQuantificadorInvalido[index]}: pontilhado;`, "}" ]); // Lexador não deve identificar número ou quantificador na estrutura expect(resultadoLexador.simbolos).not.toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.NUMERO }), expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), ])); // Avaliador Sintático deve retornar erro expect(() => { avaliador.analisar(resultadoLexador.simbolos); }).toThrow(`Propriedade '${valor_quantificador_1.ValorQuantificadorInvalido[index]}' com valor pontilhado inválido.`); } }); it('Caso de Sucesso - Valor numérico atribuído por meio de variável', () => { for (let index = 0; index < valor_quantificador_1.ValorQuantificador.length; index += 1) { const seletor = new superclasse_1.SeletorModificador(valor_quantificador_1.ValorQuantificador[index], '12', 'px'); // Lexador const resultadoLexador = lexador.mapear([ `$valor-padrao: 20px;`, "lmht {", `${valor_quantificador_1.ValorQuantificador[index]}: $valor-padrao;`, "}" ]); // O Lexador deve montar o objeto de acordo, sem retornar erros. expect(resultadoLexador.simbolos).toHaveLength(14); expect(resultadoLexador.erros).toHaveLength(0); // O mapeamento deve conter o tipo variável expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.VARIAVEL }), ])); // 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); // O primeiro item do mapeamento deve ser a declaração da variável const primeiroResultado = resultadoAvaliadorSintatico[0]; expect(primeiroResultado).toBeInstanceOf(declaracoes_1.DeclaracaoVariavel); // O segundo item do mapeamento deve conter as devidas traduções const segundoResultado = resultadoAvaliadorSintatico[1]; const segundoResultadoTipado = segundoResultado; expect(segundoResultadoTipado.modificadores.length).toBeGreaterThanOrEqual(1); expect(segundoResultadoTipado.modificadores[0].nomeFoles).toStrictEqual(seletor['nomeFoles']); expect(segundoResultadoTipado.modificadores[0].propriedadeCss).toStrictEqual(seletor['propriedadeCss']); // Tradutor const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico); expect(resultadoTradutor).toContain(seletor['propriedadeCss']); expect(resultadoTradutor).toContain('20px'); } }); }); describe('Testando Seletores que recebem Quantificador PERCENTUAL', () => { 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('Casos de sucesso - Lexador, Avaliador e Tradutor', () => { for (let index = 0; index < valor_quantificador_1.ValorPercentual.length; index += 1) { const seletor = new superclasse_1.SeletorModificador(valor_quantificador_1.ValorPercentual[index], '12', '%'); // Lexador const resultadoLexador = lexador.mapear([ "lmht {", `${valor_quantificador_1.ValorPercentual[index]}: ${seletor['valor']}${seletor['quantificador']};`, "}" ]); expect(resultadoLexador.simbolos).toHaveLength(8); expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.NUMERO }), expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), ])); // 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(seletor['propriedadeCss']); } }); }); describe('Testando Seletores que recebem Quantificador DE TEMPO', () => { 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('Casos de sucesso - Lexador, Avaliador e Tradutor', () => { for (let index = 0; index < valor_quantificador_1.ValorTempo.length; index += 1) { const seletor = new superclasse_1.SeletorModificador(valor_quantificador_1.ValorTempo[index], '12', 's'); // Lexador const resultadoLexador = lexador.mapear([ "lmht {", `${valor_quantificador_1.ValorTempo[index]}: ${seletor['valor']}${seletor['quantificador']};`, "}" ]); expect(resultadoLexador.simbolos).toHaveLength(8); expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.NUMERO }), expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), ])); // 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(seletor['propriedadeCss']); } }); }); describe('Testando Seletores que recebem Quantificador DE COMPRIMENTO', () => { 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('Casos de sucesso - Lexador, Avaliador e Tradutor', () => { for (let index = 0; index < valor_quantificador_1.ValorComprimento.length; index += 1) { const seletor = new superclasse_1.SeletorModificador(valor_quantificador_1.ValorComprimento[index], '12', 'cm'); // Lexador const resultadoLexador = lexador.mapear([ "lmht {", `${valor_quantificador_1.ValorComprimento[index]}: ${seletor['valor']}${seletor['quantificador']};`, "}" ]); expect(resultadoLexador.simbolos).toHaveLength(8); expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.NUMERO }), expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), ])); // 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(seletor['propriedadeCss']); } }); }); describe('Testando Seletores que recebem Quantificador DE ÂNGULO', () => { 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('Casos de sucesso - Lexador, Avaliador e Tradutor', () => { for (let index = 0; index < valor_quantificador_1.ValorAngulo.length; index += 1) { const seletor = new superclasse_1.SeletorModificador(valor_quantificador_1.ValorAngulo[index], '12', 'deg'); // Lexador const resultadoLexador = lexador.mapear([ "lmht {", `${valor_quantificador_1.ValorAngulo[index]}: ${seletor['valor']}${seletor['quantificador']};`, "}" ]); expect(resultadoLexador.simbolos).toHaveLength(8); expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.NUMERO }), expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }), ])); // 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(seletor['propriedadeCss']); } }); }); }); //# sourceMappingURL=valor-quantificador.test.js.map