@designliquido/foles
Version:
Linguagem de folhas de estilo para documentos em geral em português
88 lines • 4.96 kB
JavaScript
;
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 foles_1 = __importDefault(require("../../fontes/tipos-de-simbolos/foles"));
const serializadores_1 = require("../../fontes/serializadores");
const pseudoclasses_1 = require("../listas/pseudoclasses");
const declaracoes_1 = require("../../fontes/declaracoes");
const seletor_pseudoclasse_1 = require("../../fontes/pseudoclasses/seletor-pseudoclasse");
describe('Testando Seletores com PSEUDOCLASSES', () => {
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 - Lexador, Avaliador e Tradutor', () => {
for (let index = 0; index < pseudoclasses_1.Pseudoclasses.length; index += 1) {
// Lexador
const resultadoLexador = lexador.mapear([
`divisão:${pseudoclasses_1.Pseudoclasses[index]} {`,
'tamanho-fonte: 12px;',
"}"
]);
// O Lexador deve montar um objeto de comprimento 7 sem retornar nenhum erro
expect(resultadoLexador.simbolos).toHaveLength(10);
expect(resultadoLexador.erros).toHaveLength(0);
// O Lexador deve mapear o tipo de símbolo Pseudoclasse
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ tipo: foles_1.default.PSEUDO_CLASSE }),
]));
// 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);
// Serializador
const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
// O Serializador deve traduzir devidamente os termos
expect(resultadoTradutor).toContain('div');
expect(resultadoTradutor).toContain(primeiroResultadoTipado.seletores[0].pseudoclasse.pseudoclasseCss);
expect(resultadoTradutor).toContain('12px;');
}
});
it('Caso de falha - Pseudoclasse inexistente', () => {
for (let index = 0; index < pseudoclasses_1.Pseudoclasses.length; index += 1) {
// Causar erro de digitação
const pseudoclasseIncorreta = pseudoclasses_1.Pseudoclasses[index].replace(pseudoclasses_1.Pseudoclasses[index][0], '');
// Lexador
const resultadoLexador = lexador.mapear([
`divisão:${pseudoclasseIncorreta} {`,
'tamanho-fonte: 12px;',
"}"
]);
// Avaliador Sintático - Erro esperado como retorno
expect(() => {
avaliador.analisar(resultadoLexador.simbolos);
}).toThrow('Esperado nome de pseudoclasse');
// Serializador - Não deve traduzir devido ao erro do Avaliador Sintático
expect(() => {
tradutor.serializar(avaliador.analisar(resultadoLexador.simbolos));
}).toHaveLength(0);
}
});
it('Caso de falha - Erro ao instanciar classe SeletorPseudoclasse', () => {
for (let index = 0; index < pseudoclasses_1.Pseudoclasses.length; index += 1) {
// Causar erro de digitação
const pseudoclasseIncorreta = pseudoclasses_1.Pseudoclasses[index].replace(pseudoclasses_1.Pseudoclasses[index][0], '');
expect(() => {
new seletor_pseudoclasse_1.SeletorPseudoclasse(pseudoclasseIncorreta);
}).toThrow(`A pseudoclasse \'${pseudoclasseIncorreta}\' não existe.`);
}
});
});
});
//# sourceMappingURL=pseudoclasses.test.js.map