@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
67 lines • 3.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.construirModuloAfirmar = construirModuloAfirmar;
const erro_de_assertiva_1 = require("../../excecoes/erro-de-assertiva");
const funcao_padrao_1 = require("../../interpretador/estruturas/funcao-padrao");
const modulo_1 = require("../../interpretador/estruturas/modulo");
function simboloAtual(interpretador) {
return {
hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
linha: interpretador.linhaDeclaracaoAtual,
};
}
function construirModuloAfirmar() {
const modulo = new modulo_1.DeleguaModulo('afirmar');
modulo.componentes['igual'] = new funcao_padrao_1.FuncaoPadrao(2, function (interpretador, valorTestado, obtidoTestado) {
const esperado = interpretador.resolverValor(valorTestado);
const obtido = interpretador.resolverValor(obtidoTestado);
if (esperado !== obtido) {
return Promise.reject(new erro_de_assertiva_1.ErroDeAssertiva(simboloAtual(interpretador), `Esperava ${String(esperado)}, mas obteve ${String(obtido)}.`, esperado, obtido));
}
});
modulo.componentes['diferente'] = new funcao_padrao_1.FuncaoPadrao(2, function (interpretador, valorATestado, valorBTestado) {
const valorA = interpretador.resolverValor(valorATestado);
const valorB = interpretador.resolverValor(valorBTestado);
if (valorA === valorB) {
return Promise.reject(new erro_de_assertiva_1.ErroDeAssertiva(simboloAtual(interpretador), `Esperava valores diferentes, mas ambos são ${String(valorA)}.`, undefined, valorA));
}
});
modulo.componentes['verdadeiro'] = new funcao_padrao_1.FuncaoPadrao(1, function (interpretador, valorTestado) {
const valor = interpretador.resolverValor(valorTestado);
if (!valor) {
return Promise.reject(new erro_de_assertiva_1.ErroDeAssertiva(simboloAtual(interpretador), `Esperava verdadeiro, mas obteve ${String(valor)}.`, true, valor));
}
});
modulo.componentes['falso'] = new funcao_padrao_1.FuncaoPadrao(1, function (interpretador, valorTestado) {
const valor = interpretador.resolverValor(valorTestado);
if (valor) {
return Promise.reject(new erro_de_assertiva_1.ErroDeAssertiva(simboloAtual(interpretador), `Esperava falso, mas obteve ${String(valor)}.`, false, valor));
}
});
modulo.componentes['nulo'] = new funcao_padrao_1.FuncaoPadrao(1, function (interpretador, valorTestado) {
const valor = interpretador.resolverValor(valorTestado);
if (valor !== null && valor !== undefined) {
return Promise.reject(new erro_de_assertiva_1.ErroDeAssertiva(simboloAtual(interpretador), `Esperava nulo, mas obteve ${String(valor)}.`, null, valor));
}
});
modulo.componentes['erro'] = new funcao_padrao_1.FuncaoPadrao(1, async function (interpretador, funcaoTestada) {
const funcao = interpretador.resolverValor(funcaoTestada);
let erroLancado = false;
const errosAntes = interpretador.erros.length;
try {
await funcao.chamar(interpretador, [], null);
}
catch (_) {
erroLancado = true;
}
if (!erroLancado && interpretador.erros.length > errosAntes) {
erroLancado = true;
interpretador.erros.splice(errosAntes);
}
if (!erroLancado) {
return Promise.reject(new erro_de_assertiva_1.ErroDeAssertiva(simboloAtual(interpretador), 'Esperava que a função lançasse um erro, mas ela completou sem erros.'));
}
});
return modulo;
}
//# sourceMappingURL=modulo-afirmar.js.map