@designliquido/lincones-sqlite
Version:
Implementação de LinConEs para SQLite.
86 lines • 4.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const avaliador_sintatico_1 = require("../fontes/avaliador-sintatico");
const lexador_1 = require("../fontes/lexador");
describe('Avaliador Sintático', () => {
let lexador;
let avaliadorSintatico;
describe('analisar()', () => {
describe('Cenário de sucesso', () => {
beforeEach(() => {
lexador = new lexador_1.Lexador();
avaliadorSintatico = new avaliador_sintatico_1.AvaliadorSintatico();
});
describe('Operações sobre dados', () => {
it('Atualizar dados em Tabela', () => {
const codigo = [
'ATUALIZAR clientes DEFINIR NOME = "Pernalonga" ONDE ID = 10;'
];
const resultadoLexador = lexador.mapear(codigo);
const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador);
expect(resultadoAvaliadorSintatico).toBeTruthy();
expect(resultadoAvaliadorSintatico.comandos).toHaveLength(1);
expect(resultadoAvaliadorSintatico.erros).toHaveLength(0);
});
it('Excluir em Tabela', () => {
const codigo = [
'EXCLUIR clientes ONDE ID = 3;'
];
const resultadoLexador = lexador.mapear(codigo);
const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador);
expect(resultadoAvaliadorSintatico).toBeTruthy();
expect(resultadoAvaliadorSintatico.comandos).toHaveLength(1);
expect(resultadoAvaliadorSintatico.erros).toHaveLength(0);
});
it('Inserir em Tabela', () => {
const codigo = [
'INSERIR EM clientes (NOME) VALORES ("Pernalonga")'
];
const resultadoLexador = lexador.mapear(codigo);
const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador);
expect(resultadoAvaliadorSintatico).toBeTruthy();
expect(resultadoAvaliadorSintatico.comandos).toHaveLength(1);
expect(resultadoAvaliadorSintatico.erros).toHaveLength(0);
});
it('Selecionar em tabela', () => {
const codigo = [
'SELECIONAR NOME, EMAIL DE clientes ONDE IDADE = 18;'
];
const retornoLexador = lexador.mapear(codigo);
const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador);
expect(retornoAvaliadorSintatico).toBeTruthy();
expect(retornoAvaliadorSintatico.comandos).toHaveLength(1);
expect(retornoAvaliadorSintatico.erros).toHaveLength(0);
});
});
describe('Manipulação de esquemas de tabelas', () => {
it('Criar Tabela', () => {
const codigo = [
'CRIAR TABELA clientes(ID INTEIRO NAO NULO CHAVE PRIMARIA AUTO INCREMENTO, NOME TEXTO(100) NAO NULO, IDADE INTEIRO NAO NULO, EMAIL TEXTO(255) NAO NULO, ATIVO LOGICO NAO NULO);'
];
const resultadoLexador = lexador.mapear(codigo);
const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador);
expect(resultadoAvaliadorSintatico).toBeTruthy();
expect(resultadoAvaliadorSintatico.comandos).toHaveLength(1);
expect(resultadoAvaliadorSintatico.erros).toHaveLength(0);
});
describe('Casos de alteração de tabelas', () => {
it('Adição de restrição', () => {
const codigo = [
'ALTERAR TABELA pedidos ',
'ADICIONAR RESTRIÇÃO chave_estrang ',
'CHAVE ESTRANGEIRA (cliente_id) ',
'REFERENCIA clientes (id);'
];
const resultadoLexador = lexador.mapear(codigo);
const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador);
expect(resultadoAvaliadorSintatico).toBeTruthy();
expect(resultadoAvaliadorSintatico.comandos).toHaveLength(1);
expect(resultadoAvaliadorSintatico.erros).toHaveLength(0);
});
});
});
});
});
});
//# sourceMappingURL=avaliador-sintatico.test.js.map