use of org.projectnessie.cel.Program.EvalResult in project cel-java by projectnessie.
the class CELTest method Abbrevs_Parsed.
@Test
void Abbrevs_Parsed() {
// Test whether abbreviations are resolved properly at evaluation time.
Env env = newEnv(abbrevs("qualified.identifier.name"));
AstIssuesTuple astIss = env.parse("\"hello \" + name.first");
assertThat(astIss.hasIssues()).isFalse();
// abbreviation resolved here.
Program prg = env.program(astIss.getAst());
EvalResult out = prg.eval(mapOf("qualified.identifier.name", mapOf("first", "Jim")));
assertThat(out.getVal().value()).isEqualTo("hello Jim");
}
use of org.projectnessie.cel.Program.EvalResult in project cel-java by projectnessie.
the class CELTest method ResidualAst_Complex.
@Test
void ResidualAst_Complex() {
Env e = newEnv(declarations(Decls.newVar("resource.name", Decls.String), Decls.newVar("request.time", Decls.Timestamp), Decls.newVar("request.auth.claims", Decls.newMapType(Decls.String, Decls.String))));
PartialActivation unkVars = partialVars(mapOf("resource.name", "bucket/my-bucket/objects/private", "request.auth.claims", mapOf("email_verified", "true")), attributePattern("request.auth.claims").qualString("email"));
AstIssuesTuple astIss = e.compile("resource.name.startsWith(\"bucket/my-bucket\") &&\n" + "\t\t bool(request.auth.claims.email_verified) == true &&\n" + "\t\t request.auth.claims.email == \"wiley@acme.co\"");
assertThat(astIss.hasIssues()).isFalse();
Program prg = e.program(astIss.getAst(), evalOptions(OptTrackState, OptPartialEval));
EvalResult outDet = prg.eval(unkVars);
assertThat(outDet.getVal()).matches(UnknownT::isUnknown);
Ast residual = e.residualAst(astIss.getAst(), outDet.getEvalDetails());
String expr = astToString(residual);
assertThat(expr).isEqualTo("request.auth.claims.email == \"wiley@acme.co\"");
}
use of org.projectnessie.cel.Program.EvalResult in project cel-java by projectnessie.
the class CELTest method ResidualAst_AttributeQualifiers.
@Test
void ResidualAst_AttributeQualifiers() {
Env e = newEnv(declarations(Decls.newVar("x", Decls.newMapType(Decls.String, Decls.Dyn)), Decls.newVar("y", Decls.newListType(Decls.Int)), Decls.newVar("u", Decls.Int)));
AstIssuesTuple astIss = e.parse("x.abc == u && x[\"abc\"] == u && x[x.string] == u && y[0] == u && y[x.zero] == u && (true ? x : y).abc == u && (false ? y : x).abc == u");
Program prg = e.program(astIss.getAst(), evalOptions(OptTrackState, OptPartialEval));
PartialActivation vars = partialVars(mapOf("x", mapOf("zero", 0, "abc", 123, "string", "abc"), "y", singletonList(123)), attributePattern("u"));
EvalResult outDet = prg.eval(vars);
assertThat(outDet.getVal()).matches(UnknownT::isUnknown);
Ast residual = e.residualAst(astIss.getAst(), outDet.getEvalDetails());
String expr = astToString(residual);
assertThat(expr).isEqualTo("123 == u && 123 == u && 123 == u && 123 == u && 123 == u && 123 == u && 123 == u");
}
use of org.projectnessie.cel.Program.EvalResult in project cel-java by projectnessie.
the class CELTest method ResidualAst.
@Test
void ResidualAst() {
Env e = newEnv(declarations(Decls.newVar("x", Decls.Int), Decls.newVar("y", Decls.Int)));
PartialActivation unkVars = e.getUnknownVars();
AstIssuesTuple astIss = e.parse("x < 10 && (y == 0 || 'hello' != 'goodbye')");
Program prg = e.program(astIss.getAst(), evalOptions(OptTrackState, OptPartialEval));
EvalResult outDet = prg.eval(unkVars);
assertThat(outDet.getVal()).matches(UnknownT::isUnknown);
Ast residual = e.residualAst(astIss.getAst(), outDet.getEvalDetails());
String expr = astToString(residual);
assertThat(expr).isEqualTo("x < 10");
}
use of org.projectnessie.cel.Program.EvalResult in project cel-java by projectnessie.
the class CELTest method CustomEnv.
@Test
void CustomEnv() {
Env e = newCustomEnv(declarations(Decls.newVar("a.b.c", Decls.Bool)));
// t.Run("err", func(t *testing.T) {
AstIssuesTuple xIss = e.compile("a.b.c == true");
assertThat(xIss.hasIssues()).isTrue();
// t.Run("ok", func(t *testing.T) {
AstIssuesTuple astIss = e.compile("a.b.c");
assertThat(astIss.hasIssues()).isFalse();
Program prg = e.program(astIss.getAst());
EvalResult out = prg.eval(mapOf("a.b.c", true));
assertThat(out.getVal()).isSameAs(True);
}
Aggregations