Search in sources :

Example 1 with Err

use of org.projectnessie.cel.common.types.Err in project cel-java by projectnessie.

the class PbObjectTest method protoObjectIsSet.

@Test
void protoObjectIsSet() {
    TypeRegistry reg = newRegistry(Expr.getDefaultInstance());
    ParsedExpr msg = ParsedExpr.newBuilder().setSourceInfo(SourceInfo.newBuilder().addAllLineOffsets(Arrays.asList(1, 2, 3)).build()).build();
    Val obj = reg.nativeToValue(msg);
    assertThat(obj).isInstanceOf(ObjectT.class);
    ObjectT objVal = (ObjectT) obj;
    assertThat(objVal.isSet(stringOf("source_info"))).isSameAs(True);
    assertThat(objVal.isSet(stringOf("expr"))).isSameAs(False);
    assertThat(objVal.isSet(stringOf("bad_field"))).matches(Err::isError);
    assertThat(objVal.isSet(IntZero)).matches(Err::isError);
}
Also used : Val(org.projectnessie.cel.common.types.ref.Val) Err(org.projectnessie.cel.common.types.Err) ParsedExpr(com.google.api.expr.v1alpha1.ParsedExpr) ObjectT(org.projectnessie.cel.common.types.ObjectT) TypeRegistry(org.projectnessie.cel.common.types.ref.TypeRegistry) Test(org.junit.jupiter.api.Test)

Example 2 with Err

use of org.projectnessie.cel.common.types.Err in project cel-java by projectnessie.

the class Script method execute.

@SuppressWarnings("unchecked")
public <T> T execute(Class<T> resultType, Map<String, Object> arguments) throws ScriptException {
    Objects.requireNonNull(resultType, "resultType missing");
    Objects.requireNonNull(arguments, "arguments missing");
    EvalResult evalResult = prg.eval(arguments);
    Val result = evalResult.getVal();
    if (isError(result)) {
        Err err = (Err) result;
        throw new ScriptExecutionException(err.toString(), err.getCause());
    }
    if (isUnknown(result)) {
        if (resultType == Val.class || resultType == Object.class) {
            return (T) result;
        }
        throw new ScriptExecutionException(String.format("script returned unknown %s, but expected result type is %s", result, resultType.getName()));
    }
    return result.convertToNative(resultType);
}
Also used : Val(org.projectnessie.cel.common.types.ref.Val) Err(org.projectnessie.cel.common.types.Err) EvalResult(org.projectnessie.cel.Program.EvalResult)

Example 3 with Err

use of org.projectnessie.cel.common.types.Err in project cel-java by projectnessie.

the class ConformanceServiceImpl method eval.

@Override
public void eval(EvalRequest request, io.grpc.stub.StreamObserver<EvalResponse> responseObserver) {
    try {
        Env env = newEnv(container(request.getContainer()), types(com.google.api.expr.test.v1.proto2.TestAllTypesProto.TestAllTypes.getDefaultInstance(), com.google.api.expr.test.v1.proto3.TestAllTypesProto.TestAllTypes.getDefaultInstance()));
        Program prg;
        Ast ast;
        switch(request.getExprKindCase()) {
            case PARSED_EXPR:
                ast = parsedExprToAst(request.getParsedExpr());
                break;
            case CHECKED_EXPR:
                ast = checkedExprToAst(request.getCheckedExpr());
                break;
            default:
                throw new IllegalArgumentException("No expression.");
        }
        prg = env.program(ast);
        Map<String, Object> args = new HashMap<>();
        request.getBindingsMap().forEach((name, exprValue) -> {
            Val refVal = exprValueToRefValue(env.getTypeAdapter(), exprValue);
            args.put(name, refVal);
        });
        // NOTE: the EvalState is currently discarded
        EvalResult res = prg.eval(args);
        ExprValue resultExprVal;
        if (!isError(res.getVal())) {
            resultExprVal = refValueToExprValue(res.getVal());
        } else {
            Err err = (Err) res.getVal();
            if (verboseEvalErrors) {
                System.err.printf("%n" + "Eval error (not necessarily a bug!!!):%n" + "  error: %s%n" + "%s", err, err.hasCause() ? (stacktrace(err.toRuntimeException()) + "\n") : "");
            }
            resultExprVal = ExprValue.newBuilder().setError(ErrorSet.newBuilder().addErrors(Status.newBuilder().setMessage(err.toString()))).build();
        }
        EvalResponse.Builder resp = EvalResponse.newBuilder().setResult(resultExprVal);
        responseObserver.onNext(resp.build());
        responseObserver.onCompleted();
    } catch (Exception e) {
        responseObserver.onError(io.grpc.Status.fromCode(io.grpc.Status.Code.UNKNOWN).withDescription(stacktrace(e)).asException());
    }
}
Also used : Val(org.projectnessie.cel.common.types.ref.Val) Program(org.projectnessie.cel.Program) Ast(org.projectnessie.cel.Ast) CEL.parsedExprToAst(org.projectnessie.cel.CEL.parsedExprToAst) CEL.checkedExprToAst(org.projectnessie.cel.CEL.checkedExprToAst) Err(org.projectnessie.cel.common.types.Err) Err.newErr(org.projectnessie.cel.common.types.Err.newErr) HashMap(java.util.HashMap) EvalResult(org.projectnessie.cel.Program.EvalResult) ByteString(com.google.protobuf.ByteString) Env.newEnv(org.projectnessie.cel.Env.newEnv) Env(org.projectnessie.cel.Env) Env.newCustomEnv(org.projectnessie.cel.Env.newCustomEnv) EvalResponse(com.google.api.expr.v1alpha1.EvalResponse) ExprValue(com.google.api.expr.v1alpha1.ExprValue)

Example 4 with Err

use of org.projectnessie.cel.common.types.Err in project cel-java by projectnessie.

the class InterpreterTest method interpreter.

@ParameterizedTest
@MethodSource("testCases")
void interpreter(TestCase tc) {
    Assumptions.assumeTrue(tc.disabled == null, tc.disabled);
    Program prg = program(tc);
    Val want = True;
    if (tc.out != null) {
        want = (Val) tc.out;
    }
    Val got = prg.interpretable.eval(prg.activation);
    if (UnknownT.isUnknown(want)) {
        assertThat(got).isEqualTo(want);
    } else if (tc.err != null) {
        assertThat(got).isInstanceOf(Err.class).extracting(Object::toString).isEqualTo(tc.err);
    } else if (isError(want)) {
        assertThat(got).isEqualTo(want);
        assertThat(got.equal(want)).isSameAs(True);
    } else {
        if (isError(got) && ((Err) got).hasCause()) {
            throw ((Err) got).toRuntimeException();
        }
        assertThat(got).isEqualTo(want);
        assertThat(got.equal(want)).isSameAs(True);
    }
    if (tc.cost != null) {
        Cost cost = estimateCost(prg.interpretable);
        assertThat(cost).isEqualTo(tc.cost);
    }
    EvalState state = newEvalState();
    Map<String, InterpretableDecorator> opts = new HashMap<>();
    opts.put("optimize", optimize());
    opts.put("exhaustive", exhaustiveEval(state));
    opts.put("track", trackState(state));
    for (Entry<String, InterpretableDecorator> en : opts.entrySet()) {
        String mode = en.getKey();
        InterpretableDecorator opt = en.getValue();
        prg = program(tc, opt);
        got = prg.interpretable.eval(prg.activation);
        if (UnknownT.isUnknown(want)) {
            assertThat(got).isEqualTo(want);
        } else if (tc.err != null) {
            assertThat(got).isInstanceOf(Err.class).extracting(Object::toString).asString().startsWith(tc.err);
        } else {
            assertThat(got).isEqualTo(want);
            assertThat(got.equal(want)).isSameAs(True);
        }
        if ("exhaustive".equals(mode) && tc.cost != null) {
            Cost wantedCost = tc.cost;
            if (tc.exhaustiveCost != null) {
                wantedCost = tc.exhaustiveCost;
            }
            Cost cost = estimateCost(prg.interpretable);
            assertThat(cost).isEqualTo(wantedCost);
        }
        if ("optimize".equals(mode) && tc.cost != null) {
            Cost wantedCost = tc.cost;
            if (tc.optimizedCost != null) {
                wantedCost = tc.optimizedCost;
            }
            Cost cost = estimateCost(prg.interpretable);
            assertThat(cost).isEqualTo(wantedCost);
        }
        state.reset();
    }
}
Also used : Val(org.projectnessie.cel.common.types.ref.Val) Err(org.projectnessie.cel.common.types.Err) HashMap(java.util.HashMap) EvalState.newEvalState(org.projectnessie.cel.interpreter.EvalState.newEvalState) ByteString(com.google.protobuf.ByteString) Cost.estimateCost(org.projectnessie.cel.interpreter.Coster.Cost.estimateCost) Cost(org.projectnessie.cel.interpreter.Coster.Cost) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 5 with Err

use of org.projectnessie.cel.common.types.Err in project cel-java by projectnessie.

the class StringsTest method testExpression.

private static void testExpression(TestData testData) {
    Env env = Env.newCustomEnv(ProtoTypeRegistry.newRegistry(), Arrays.asList(Library.StdLib(), StringsLib.strings()));
    Env.AstIssuesTuple astIssue = env.parse(testData.expression);
    assertThat(astIssue.hasIssues()).isFalse();
    Env.AstIssuesTuple checked = env.check(astIssue.getAst());
    if (testData.isParseOnly()) {
        assertThat(checked.hasIssues()).isTrue();
        assertThat(checked.getIssues().toString()).contains(testData.getErr());
        return;
    } else {
        assertThat(checked.hasIssues()).isFalse();
    }
    Program program = env.program(astIssue.getAst());
    Program.EvalResult result = program.eval(new HashMap<>());
    if (testData.getErr() != null) {
        assertThat(result.getVal() instanceof Err).isTrue();
        assertThat(result.getVal()).extracting(Val::toString).isEqualTo(testData.getErr());
    } else {
        assertThat(result.getVal()).isEqualTo(BoolT.True);
    }
}
Also used : Program(org.projectnessie.cel.Program) Err(org.projectnessie.cel.common.types.Err) Env(org.projectnessie.cel.Env)

Aggregations

Err (org.projectnessie.cel.common.types.Err)7 Val (org.projectnessie.cel.common.types.ref.Val)6 Test (org.junit.jupiter.api.Test)3 ObjectT (org.projectnessie.cel.common.types.ObjectT)3 ParsedExpr (com.google.api.expr.v1alpha1.ParsedExpr)2 ByteString (com.google.protobuf.ByteString)2 HashMap (java.util.HashMap)2 Env (org.projectnessie.cel.Env)2 Program (org.projectnessie.cel.Program)2 EvalResult (org.projectnessie.cel.Program.EvalResult)2 TypeRegistry (org.projectnessie.cel.common.types.ref.TypeRegistry)2 EvalResponse (com.google.api.expr.v1alpha1.EvalResponse)1 ExprValue (com.google.api.expr.v1alpha1.ExprValue)1 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)1 MethodSource (org.junit.jupiter.params.provider.MethodSource)1 Ast (org.projectnessie.cel.Ast)1 CEL.checkedExprToAst (org.projectnessie.cel.CEL.checkedExprToAst)1 CEL.parsedExprToAst (org.projectnessie.cel.CEL.parsedExprToAst)1 Env.newCustomEnv (org.projectnessie.cel.Env.newCustomEnv)1 Env.newEnv (org.projectnessie.cel.Env.newEnv)1