@designliquido/foles
Version:
Linguagem de folhas de estilo para documentos em geral em português
111 lines • 5.5 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 lexador_reverso_1 = require("../fontes/lexador/lexador-reverso");
const css_1 = __importDefault(require("../fontes/tipos-de-simbolos/css"));
describe('Lexador Reverso', () => {
let lexadorReverso;
beforeEach(() => {
lexadorReverso = new lexador_reverso_1.LexadorReverso();
});
it('Caso de sucesso - função mapear() monta objeto corretamente', () => {
const resultadoLexador = lexadorReverso.mapear([
"html {",
" font-size: 12px;",
"}"
]);
expect(resultadoLexador).toBeTruthy();
expect(resultadoLexador.simbolos).toHaveLength(8);
expect(resultadoLexador.erros).toHaveLength(0);
// Tipos devem estar mapeados
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ tipo: css_1.default.TAG }),
expect.objectContaining({ tipo: css_1.default.CHAVE_ESQUERDA }),
expect.objectContaining({ tipo: css_1.default.IDENTIFICADOR }),
expect.objectContaining({ tipo: css_1.default.DOIS_PONTOS }),
expect.objectContaining({ tipo: css_1.default.NUMERO }),
expect.objectContaining({ tipo: css_1.default.QUANTIFICADOR }),
expect.objectContaining({ tipo: css_1.default.PONTO_E_VIRGULA }),
expect.objectContaining({ tipo: css_1.default.CHAVE_DIREITA }),
]));
// Lexemas devem estar mapeados
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ lexema: '12' }),
expect.objectContaining({ lexema: 'px' }),
]));
});
it('Caso de sucesso - função analisarNumero() mapeia números com denotação pontual', () => {
const resultadoLexador = lexadorReverso.mapear([
"html {",
" font-size: 1.5;",
"}"
]);
expect(resultadoLexador).toBeTruthy();
expect(resultadoLexador.simbolos).toHaveLength(7);
expect(resultadoLexador.erros).toHaveLength(0);
// Tipos devem estar mapeados
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ tipo: css_1.default.TAG }),
expect.objectContaining({ tipo: css_1.default.CHAVE_ESQUERDA }),
expect.objectContaining({ tipo: css_1.default.IDENTIFICADOR }),
expect.objectContaining({ tipo: css_1.default.DOIS_PONTOS }),
expect.objectContaining({ tipo: css_1.default.NUMERO }),
expect.objectContaining({ tipo: css_1.default.PONTO_E_VIRGULA }),
expect.objectContaining({ tipo: css_1.default.CHAVE_DIREITA }),
]));
// Lexemas devem estar mapeados
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ lexema: '1.5' }),
]));
});
it('Caso de sucesso - mapeamento de classes e IDs', () => {
const classeId = ['.', '#'];
for (let index = 0; index < classeId.length; index += 1) {
const resultadoLexador = lexadorReverso.mapear([
`${classeId[index]}meu-seletor {`,
" padding: 10px;",
"}"
]);
expect(resultadoLexador).toBeTruthy();
expect(resultadoLexador.simbolos).toHaveLength(9);
expect(resultadoLexador.erros).toHaveLength(0);
// Deve mapear PONTO ou CERQUILHA corretamente
if (index === 0) {
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ tipo: css_1.default.PONTO }),
]));
}
else {
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ tipo: css_1.default.CERQUILHA }),
]));
}
// Todos os demais tipos devem estar mapeados
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ tipo: css_1.default.CHAVE_ESQUERDA }),
expect.objectContaining({ tipo: css_1.default.IDENTIFICADOR }),
expect.objectContaining({ tipo: css_1.default.DOIS_PONTOS }),
expect.objectContaining({ tipo: css_1.default.NUMERO }),
expect.objectContaining({ tipo: css_1.default.QUANTIFICADOR }),
expect.objectContaining({ tipo: css_1.default.PONTO_E_VIRGULA }),
expect.objectContaining({ tipo: css_1.default.CHAVE_DIREITA }),
]));
// Lexemas devem estar mapeados
expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
expect.objectContaining({ lexema: 'meu-seletor' }),
]));
}
});
it('Caso de falha - caractere inesperado', () => {
const resultadoLexador = lexadorReverso.mapear([
`html {`,
" padding: 10px&;",
"}"
]);
expect(resultadoLexador.erros).toHaveLength(1);
expect(resultadoLexador.erros).toEqual([{ "caractere": "&", "linha": 2, "mensagem": "Caractere inesperado." }]);
});
});
//# sourceMappingURL=lexador-reverso.test.js.map