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