@designliquido/foles
Version:
Linguagem de folhas de estilo para documentos em geral em português
133 lines • 8.47 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 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