@designliquido/foles
Version:
Linguagem de folhas de estilo para documentos em geral em português
192 lines • 9.93 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 lexador_1 = require("../fontes/lexador");
const superclasse_1 = require("../fontes/modificadores/superclasse");
const serializadores_1 = require("../fontes/serializadores");
const valor_quantificador_1 = require("./listas/valor-quantificador");
const importador_1 = require("../fontes/importador");
const estruturas_html_1 = __importDefault(require("../fontes/tradutores/estruturas-html"));
describe('Serializador', () => {
let lexador;
let importador;
let avaliador;
let serializador;
beforeEach(() => {
lexador = new lexador_1.Lexador();
importador = new importador_1.Importador(lexador);
avaliador = new avaliador_sintatico_1.AvaliadorSintatico(importador);
serializador = new serializadores_1.Serializador();
});
describe('Casos de Sucesso', () => {
it('Testando tradução das estruturas HTML', () => {
for (let index = 0; index < Object.keys(estruturas_html_1.default).length; index += 1) {
// Lexador recebe as estruturas FolEs
const resultadoLexador = lexador.mapear([
`${Object.keys(estruturas_html_1.default)[index]} {`,
" tamanho-fonte: 60px;",
"}"
]);
// Avaliador Sintático
const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
// Tradutor deve retornar a estrutura HTML correspondente
const resultadoTradutor = serializador.serializar(resultadoAvaliadorSintatico);
expect(resultadoTradutor).toContain(Object.values(estruturas_html_1.default)[index]);
}
});
it('Casos de sucesso - traduzindo seletores valor-quantificador', () => {
for (let index = 0; index < valor_quantificador_1.ValorQuantificador.length; index += 1) {
const seletor = new superclasse_1.SeletorModificador(valor_quantificador_1.ValorQuantificador[index], '40', 'px');
// Lexador
const resultadoLexador = lexador.mapear([
"lmht {",
`${valor_quantificador_1.ValorQuantificador[index]}: ${seletor['valor']}${seletor['quantificador']};`,
"}"
]);
// Avaliador Sintático
const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
// Tradutor deve funcionar de acordo
const resultadoTradutor = serializador.serializar(resultadoAvaliadorSintatico);
expect(resultadoTradutor).toBeTruthy();
expect(resultadoTradutor).toContain("html");
expect(resultadoTradutor).toContain(seletor['propriedadeCss']);
expect(resultadoTradutor).toContain('40px;');
}
});
it('Qualificador', () => {
// Lexador
const resultadoLexador = lexador.mapear([
"lmht {",
" estilo-contorno: pontilhado;",
"}"
]);
// Avaliador Sintático
const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
// Serializador deve funcionar de acordo
const resultadoSerializador = serializador.serializar(resultadoAvaliadorSintatico);
expect(resultadoSerializador).toBeTruthy();
expect(resultadoSerializador).toContain("html");
expect(resultadoSerializador).toContain("outline-style");
expect(resultadoSerializador).toContain('dotted');
});
describe('Exemplos mais elaborados', () => {
it('Exemplo 1', () => {
const resultadoLexador = lexador.mapear([
'.minha-classe {',
' alinhar-conteudo: inseguro;',
' estilo-contorno: herdar;',
' cor-destaque: hsl(12, 13%, 24%);',
' cor: #f100ff;',
' cor-fundo: vermelho;',
' tamanho-fonte: 16px;',
' largura-maxima: 20cm;',
'}',
'.minha-classe:sobre {',
' cor-fundo: azul;',
'}',
'#elemento-caixa {',
' altura: 40px;',
'}',
'.minha-segunda-classe {',
' margem-superior: 13mm;',
'}',
'#meu-segundo-id {',
' largura: 400mm;',
'}',
'%campos {',
' margem-inferior: 50px;',
'}',
'lmht {',
' cor-fundo: hsl(50, 80%, 80%);',
'}',
]);
const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
const resultadoSerializador = serializador.serializar(resultadoAvaliadorSintatico);
expect(resultadoSerializador).toBeTruthy();
expect(resultadoSerializador).toContain('.minha-classe {');
expect(resultadoSerializador).toContain('align-content: unsafe;');
expect(resultadoSerializador).toContain('outline-style: inherit;');
expect(resultadoSerializador).toContain('accent-color: hsl(12, 13%, 24%);');
expect(resultadoSerializador).toContain('color: #f100ff;');
expect(resultadoSerializador).toContain('background-color: red;');
expect(resultadoSerializador).toContain('font-size: 16px;');
expect(resultadoSerializador).toContain('max-width: 20cm;');
expect(resultadoSerializador).toContain('.minha-classe:hover {');
expect(resultadoSerializador).toContain('background-color: blue;');
expect(resultadoSerializador).toContain('#elemento-caixa {');
expect(resultadoSerializador).toContain('height: 40px;');
expect(resultadoSerializador).toContain('.minha-segunda-classe {');
expect(resultadoSerializador).toContain('margin-top: 13mm;');
expect(resultadoSerializador).toContain('#meu-segundo-id {');
expect(resultadoSerializador).toContain('width: 400mm;');
expect(resultadoSerializador).toContain('html {');
expect(resultadoSerializador).toContain('background-color: hsl(50, 80%, 80%);');
});
it('Exemplo 2', () => {
const resultadoLexador = lexador.mapear([
'/** Valores específicos */',
'lmht {',
' recuo: 10px 10px 100px 20px;',
' borda-direita: 2px pontilhado;',
'}',
'lmht {',
' recursos-fonte: "c2sc", "hist";',
'}',
'lmht {',
' coluna-em-grade: auto / auto;',
'}',
'lmht {',
' animação: 3s alternar 1s deslizar;',
'}',
'lmht {',
' ajustar-tamanho-fonte: altura-cap 0.5;',
'}',
'lmht {',
' propriedade-transicao: todas, test1;',
'}',
'lmht {',
' definir-contador: meu-contador 5 contador2 0;',
' ao-mudar: left, top;',
' coluna-em-grade: 3 span;',
' estilo-lista: dentro meu-estilo;',
' fim-linha-em-grade: span 3;',
' fim-coluna-em-grade: span 3;',
' incrementar-contador: meu-contador -4;',
' início-linha-em-grade: span 2;',
' inicio-coluna-em-grade: span 2;',
' linha-em-grade: span some-grid-area;',
' nome-animacao: test_05;',
' propriedade-transicao: test1, animation4;',
' tamanho-grade: span 2;',
'}'
]);
const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
const resultadoSerializador = serializador.serializar(resultadoAvaliadorSintatico);
expect(resultadoSerializador).toBeTruthy();
});
});
});
describe('Casos de Falha', () => {
it('Casos de Falha - seletores valor-quantificador', () => {
for (let index = 0; index < Object.keys(valor_quantificador_1.ValorQuantificador).length; index += 1) {
// Lexador - valor e quantificador não informados
const resultadoLexador = lexador.mapear([
"lmht {",
`${valor_quantificador_1.ValorQuantificador[index]}: ;`,
"}"
]);
// Tradutor - Não deve ser executado, dado o erro gerado no Avaliador Sintático
expect(() => {
serializador.serializar(avaliador.analisar(resultadoLexador.simbolos));
}).not.toBeTruthy;
expect(() => {
serializador.serializar(avaliador.analisar(resultadoLexador.simbolos));
}).toHaveLength(0);
}
});
});
});
//# sourceMappingURL=serializador.test.js.map