UNPKG

@designliquido/foles

Version:

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

230 lines 13.2 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 serializadores_1 = require("../fontes/serializadores"); const foles_1 = __importDefault(require("../fontes/tipos-de-simbolos/foles")); const seletores_1 = require("../fontes/seletores"); const seletor_espaco_reservado_1 = require("../fontes/seletores/seletor-espaco-reservado"); const declaracoes_1 = require("../fontes/declaracoes"); describe('Testando seletores e estruturas', () => { let lexador; let importador; let avaliadorSintatico; let tradutor; beforeEach(() => { lexador = new lexador_1.Lexador(); importador = new importador_1.Importador(lexador); avaliadorSintatico = new avaliador_sintatico_1.AvaliadorSintatico(importador); tradutor = new serializadores_1.Serializador(); }); it('Seletor Classe - caso de sucesso', () => { // Lexador const resultadoLexador = lexador.mapear([ ".minha-classe {", "margem-superior: 13mm;", "}" ]); // O Lexador deve montar um objeto de comprimento 9 sem retornar nenhum erro expect(resultadoLexador.simbolos).toHaveLength(9); expect(resultadoLexador.erros).toHaveLength(0); // O Lexador deve mapear os tipos de símbolo Ponto e Identificador que compõem o nome da classe expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.PONTO }), expect.objectContaining({ tipo: foles_1.default.IDENTIFICADOR }), ])); // Avaliador Sintático const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador.simbolos); // O Avaliador Sintático deve executar as operações normalmente, sem retornar erros expect(resultadoAvaliadorSintatico.length).toBeGreaterThanOrEqual(1); expect(resultadoAvaliadorSintatico).toBeTruthy(); expect(resultadoAvaliadorSintatico).toHaveLength(1); const primeiroResultado = resultadoAvaliadorSintatico[0]; expect(primeiroResultado).toBeInstanceOf(declaracoes_1.BlocoDeclaracao); const primeiroResultadoTipado = primeiroResultado; expect(primeiroResultadoTipado.modificadores.length).toBeGreaterThanOrEqual(1); // O Avaliador deve mapear uma instância da classe SeletorClasse expect(primeiroResultadoTipado.seletores[0]).toBeInstanceOf(seletores_1.SeletorClasse); // A classe mapeada deve ter o nome 'minha-classe' expect(primeiroResultadoTipado.seletores[0]['nomeClasse']).toBe('minha-classe'); // O resultado do Avaliador deve ser recebido em um formato aceito pelo Serializador const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico); expect(resultadoTradutor).toBeTruthy(); }); it('Seletor Classe - caso de falha', () => { // Lexador - nome de classe escrito sem o ponto como prefixo const resultadoLexador = lexador.mapear([ "minha-classe {", "margem-superior: 13mm;", "}" ]); // Avaliador Sintático deve retornar um erro por não reconhecer o identificador como nome de classe expect(() => { avaliadorSintatico.analisar(resultadoLexador.simbolos); }).toThrow(`Esperado '{' após declaração de seletor.`); }); it('Seletor Classe com pseudoclasse', () => { // Lexador const resultadoLexador = lexador.mapear([ ".classe-personalizada:foco {", "margem-superior: 13mm;", "}" ]); // O Lexador deve montar um objeto de comprimento 11 sem retornar nenhum erro expect(resultadoLexador.simbolos).toHaveLength(11); expect(resultadoLexador.erros).toHaveLength(0); // O Lexador deve mapear os tipos de símbolo Ponto e Identificador que compõem o nome da classe expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.PONTO }), expect.objectContaining({ tipo: foles_1.default.IDENTIFICADOR }), ])); // Avaliador Sintático const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador.simbolos); expect(resultadoAvaliadorSintatico.length).toBeGreaterThanOrEqual(1); const primeiroResultado = resultadoAvaliadorSintatico[0]; expect(primeiroResultado).toBeInstanceOf(declaracoes_1.BlocoDeclaracao); const primeiroResultadoTipado = primeiroResultado; expect(primeiroResultadoTipado.modificadores.length).toBeGreaterThanOrEqual(1); // O Avaliador deve mapear uma instância da classe SeletorClasse e com o nome 'classe-personalizada' expect(primeiroResultadoTipado.seletores[0]).toBeInstanceOf(seletores_1.SeletorClasse); expect(primeiroResultadoTipado.seletores[0]['nomeClasse']).toBe('classe-personalizada'); // O Avaliador deve mapear devidamente a pseudoclasse expect(primeiroResultadoTipado.seletores[0].pseudoclasse).toBeTruthy(); expect(primeiroResultadoTipado.seletores[0].pseudoclasse['nomeFoles']).toBe('foco'); // O resultado do Avaliador deve ser recebido em um formato aceito pelo Serializador const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico); expect(resultadoTradutor).toBeTruthy(); }); it('Seletor Id - caso de sucesso', () => { // Lexador const resultadoLexador = lexador.mapear([ "#meu-id {", "margem-superior: 13mm;", "}" ]); // O Lexador deve montar um objeto de comprimento 9 sem retornar nenhum erro expect(resultadoLexador.simbolos).toHaveLength(9); expect(resultadoLexador.erros).toHaveLength(0); // O Lexador deve mapear os tipos de símbolo Cerquilha e Identificador que compõem a nomenclatura de um Id expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.CERQUILHA }), expect.objectContaining({ tipo: foles_1.default.IDENTIFICADOR }), ])); // Avaliador Sintático const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador.simbolos); // O Avaliador Sintático deve executar as operações normalmente, sem retornar erros expect(resultadoAvaliadorSintatico.length).toBeGreaterThanOrEqual(1); expect(resultadoAvaliadorSintatico).toBeTruthy(); expect(resultadoAvaliadorSintatico).toHaveLength(1); const primeiroResultado = resultadoAvaliadorSintatico[0]; expect(primeiroResultado).toBeInstanceOf(declaracoes_1.BlocoDeclaracao); const primeiroResultadoTipado = primeiroResultado; expect(primeiroResultadoTipado.modificadores.length).toBeGreaterThanOrEqual(1); // O Avaliador deve mapear uma instância da classe SeletorClasse expect(primeiroResultadoTipado.seletores[0]).toBeInstanceOf(seletores_1.SeletorId); // O id mapeado deve ter o nome 'meu-id' expect(primeiroResultadoTipado.seletores[0]['id']).toBe('meu-id'); // O resultado do Avaliador deve ser recebido em um formato aceito pelo Serializador const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico); expect(resultadoTradutor).toBeTruthy(); }); it('Seletor Id - caso de falha', () => { // Lexador - nome de classe escrito sem o ponto como prefixo const resultadoLexador = lexador.mapear([ "meu-id {", "margem-superior: 13mm;", "}" ]); // Avaliador Sintático deve retornar um erro por não reconhecer o identificador como nome de classe expect(() => { avaliadorSintatico.analisar(resultadoLexador.simbolos); }).toThrow(`Esperado '{' após declaração de seletor.`); }); it('Seletor Id com pseudoclasse', () => { // Lexador const resultadoLexador = lexador.mapear([ "#id-personalizado:escopo {", "margem-superior: 13mm;", "}" ]); // O Lexador deve montar um objeto de comprimento 11 sem retornar nenhum erro expect(resultadoLexador.simbolos).toHaveLength(11); expect(resultadoLexador.erros).toHaveLength(0); // O Lexador deve mapear os tipos de símbolo Cerquilha e Identificador que compõem o id expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.CERQUILHA }), expect.objectContaining({ tipo: foles_1.default.IDENTIFICADOR }), ])); // Avaliador Sintático const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador.simbolos); expect(resultadoAvaliadorSintatico.length).toBeGreaterThanOrEqual(1); const primeiroResultado = resultadoAvaliadorSintatico[0]; expect(primeiroResultado).toBeInstanceOf(declaracoes_1.BlocoDeclaracao); const primeiroResultadoTipado = primeiroResultado; expect(primeiroResultadoTipado.modificadores.length).toBeGreaterThanOrEqual(1); // O Avaliador deve mapear uma instância de SeletorId e com o nome 'id-personalizado' expect(primeiroResultadoTipado.seletores[0]).toBeInstanceOf(seletores_1.SeletorId); expect(primeiroResultadoTipado.seletores[0]['id']).toBe('id-personalizado'); // O Avaliador deve mapear devidamente a pseudoclasse expect(primeiroResultadoTipado.seletores[0].pseudoclasse).toBeTruthy(); expect(primeiroResultadoTipado.seletores[0].pseudoclasse['nomeFoles']).toBe('escopo'); // O resultado do Avaliador deve ser recebido em um formato aceito pelo Serializador const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico); expect(resultadoTradutor).toBeTruthy(); }); it('Seletor Espaço Reservado - caso de sucesso', () => { // Lexador const resultadoLexador = lexador.mapear([ "%meu-seletor {", "borda: 13mm;", "}" ]); // O Lexador deve montar um objeto de comprimento 9 sem retornar nenhum erro expect(resultadoLexador.simbolos).toHaveLength(9); expect(resultadoLexador.erros).toHaveLength(0); // O Lexador deve mapear os tipos de símbolo Percentual e Identificador que compõem a estrutura de espaço reservado expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.PERCENTUAL }), expect.objectContaining({ tipo: foles_1.default.IDENTIFICADOR }), ])); // Avaliador Sintático const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador.simbolos); // O Avaliador Sintático deve executar as operações normalmente, sem retornar erros expect(resultadoAvaliadorSintatico.length).toBeGreaterThanOrEqual(1); expect(resultadoAvaliadorSintatico).toBeTruthy(); expect(resultadoAvaliadorSintatico).toHaveLength(1); const primeiroResultado = resultadoAvaliadorSintatico[0]; expect(primeiroResultado).toBeInstanceOf(declaracoes_1.BlocoDeclaracao); const primeiroResultadoTipado = primeiroResultado; expect(primeiroResultadoTipado.modificadores.length).toBeGreaterThanOrEqual(1); // O Avaliador deve mapear uma instância da classe SeletorEspaçoReservado expect(primeiroResultadoTipado.seletores[0]).toBeInstanceOf(seletor_espaco_reservado_1.SeletorEspacoReservado); // O resultado do Avaliador deve ser recebido em um formato aceito pelo Serializador const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico); expect(resultadoTradutor).toHaveLength(0); }); it('Seletor Espaço Reservado - caso de falha', () => { // Lexador const resultadoLexador = lexador.mapear([ "% {", ": 13mm;", "}" ]); // 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 mapear o tipo de símbolo Percentual expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([ expect.objectContaining({ tipo: foles_1.default.PERCENTUAL }), ])); // Avaliador Sintático deve retornar um erro por não reconhecer o identificador expect(() => { avaliadorSintatico.analisar(resultadoLexador.simbolos); }).toThrow('Esperado identificador válido para espaço reservado.'); }); }); //# sourceMappingURL=seletores-estruturas.test.js.map