@designliquido/lincones-sqlite
Version:
Implementação de LinConEs para SQLite.
123 lines • 5.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const lexador_1 = require("../fontes/lexador");
describe('Lexador', () => {
let lexador;
beforeEach(() => {
lexador = new lexador_1.Lexador();
});
describe('mapear()', () => {
describe('Cenário de sucesso', () => {
it('Código vazio', () => {
const codigo = [''];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(0);
});
it('Código com apenas espaços', () => {
const codigo = [' '];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(0);
});
it('Código repetindo instruções', () => {
const codigo = [
'((((((((((((((((((((((((((',
')))))))))))))))))))))))))',
'CRIAR CRIAR CRIAR CRIAR CRIAR CRIAR'
];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(57);
});
it('Números', () => {
const codigo = [
'12 ',
' 3.75'
];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(2);
});
it('Comparadores', () => {
const codigo = [
'12 > 18 ',
' 3.75 < 1',
' 123 >= 456',
'0 <= -1'
];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(12);
});
it('Literais', () => {
const codigo = [
"'123'"
];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(1);
});
it('CRIAR TABELA', () => {
const codigo = ['CRIAR TABELA usuarios'];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(3);
});
it('ATUALIZAR', () => {
const codigo = ['ATUALIZAR usuarios'];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(2);
});
describe('Comandos completos', () => {
it('Criar Tabela Clientes', () => {
const codigo = [
'CRIAR TABELA clientes(id INTEIRO NAO NULO CHAVE PRIMARIA AUTOINCREMENTO, nome TEXTO(100) NAO NULO, idade INTEIRO NAO NULO, email TEXTO(255) NAO NULO, ativo LOGICO NAO NULO)'
];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(38);
});
it('CRUD', () => {
const codigo = [
'INSERIR EM clientes VALORES(1, "João", 20, "joao@gmail.com", VERDADEIRO)',
'INSERIR EM clientes VALORES(2, "Carlos", 23, "carlos@gmail.com", VERDADEIRO)',
'INSERIR EM clientes VALORES(3, "Thiago", 40, "thiago@gmail.com", VERDADEIRO)',
'INSERIR EM clientes VALORES(4, "Jose", 44, "jose@gmail.com", VERDADEIRO)'
];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(60);
});
it('Selecionar', () => {
const codigo = ['SELECIONAR * DE clientes'];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(4);
});
it('Criar Tabela Clientes', () => {
const codigo = [
'CRIAR TABELA clientes(id INTEIRO NAO NULO CHAVE PRIMARIA AUTOINCREMENTO, nome TEXTO(100) NAO NULO, idade INTEIRO NAO NULO, email TEXTO(255) NAO NULO, ativo LOGICO NAO NULO);'
];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.simbolos).toHaveLength(39);
});
});
});
describe('Cenários de falha', () => {
it('Texto não finalizado', () => {
const codigo = [
'"texto sem fim'
];
const resultado = lexador.mapear(codigo);
expect(resultado).toBeTruthy();
expect(resultado.erros.length).toBe(1);
const erro = resultado.erros[0];
expect(erro.mensagem).toBe('Texto não finalizado.');
});
});
});
});
//# sourceMappingURL=lexador.test.js.map