@designliquido/foles
Version:
Linguagem de folhas de estilo para documentos em geral em português
230 lines • 13.2 kB
JavaScript
"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