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);
}
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);
}
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());
}
}
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();
}
}
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);
}
}
Aggregations