UNPKG

@bufbuild/cel-spec

Version:

CEL definitions and test data

1,065 lines (1,064 loc) 955 kB
"use strict"; // Copyright 2024-2025 Buf Technologies, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. Object.defineProperty(exports, "__esModule", { value: true }); exports.testdataJson = void 0; // Generated from github.com/google/cel-spec v0.24.0 by scripts/fetch-testdata.js exports.testdataJson = [ { "name": "basic", "description": "Basic conformance tests that all implementations should pass.", "section": [ { "name": "self_eval_zeroish", "description": "Simple self-evaluating forms to zero-ish values.", "test": [ { "name": "self_eval_int_zero", "expr": "0", "value": { "int64Value": "0" } }, { "name": "self_eval_uint_zero", "expr": "0u", "value": { "uint64Value": "0" } }, { "name": "self_eval_uint_alias_zero", "expr": "0U", "value": { "uint64Value": "0" } }, { "name": "self_eval_float_zero", "expr": "0.0", "value": { "doubleValue": 0 } }, { "name": "self_eval_float_zerowithexp", "expr": "0e+0", "value": { "doubleValue": 0 } }, { "name": "self_eval_string_empty", "expr": "''", "value": { "stringValue": "" } }, { "name": "self_eval_string_empty_quotes", "expr": "\"\"", "value": { "stringValue": "" } }, { "name": "self_eval_string_raw_prefix", "expr": "r\"\"", "value": { "stringValue": "" } }, { "name": "self_eval_bytes_empty", "expr": "b\"\"", "value": { "bytesValue": "" } }, { "name": "self_eval_bool_false", "expr": "false", "value": { "boolValue": false } }, { "name": "self_eval_null", "expr": "null", "value": { "nullValue": null } }, { "name": "self_eval_empty_list", "expr": "[]", "value": { "listValue": {} } }, { "name": "self_eval_empty_map", "expr": "{}", "value": { "mapValue": {} } }, { "name": "self_eval_string_raw_prefix_triple_double", "expr": "r\"\"\"\"\"\"", "value": { "stringValue": "" } }, { "name": "self_eval_string_raw_prefix_triple_single", "expr": "r''''''", "value": { "stringValue": "" } } ] }, { "name": "self_eval_nonzeroish", "description": "Simple self-evaluating forms to non-zero-ish values.", "test": [ { "name": "self_eval_int_nonzero", "expr": "42", "value": { "int64Value": "42" } }, { "name": "self_eval_uint_nonzero", "expr": "123456789u", "value": { "uint64Value": "123456789" } }, { "name": "self_eval_uint_alias_nonzero", "expr": "123456789U", "value": { "uint64Value": "123456789" } }, { "name": "self_eval_int_negative_min", "expr": "-9223372036854775808", "value": { "int64Value": "-9223372036854775808" } }, { "name": "self_eval_float_negative_exp", "expr": "-2.3e+1", "value": { "doubleValue": -23 } }, { "name": "self_eval_string_excl", "expr": "\"!\"", "value": { "stringValue": "!" } }, { "name": "self_eval_string_escape", "expr": "'\\''", "value": { "stringValue": "'" } }, { "name": "self_eval_bytes_escape", "expr": "b'ÿ'", "value": { "bytesValue": "w78=" } }, { "name": "self_eval_bytes_invalid_utf8", "expr": "b'\\000\\xff'", "value": { "bytesValue": "AP8=" } }, { "name": "self_eval_list_singleitem", "expr": "[-1]", "value": { "listValue": { "values": [ { "int64Value": "-1" } ] } } }, { "name": "self_eval_map_singleitem", "expr": "{\"k\":\"v\"}", "value": { "mapValue": { "entries": [ { "key": { "stringValue": "k" }, "value": { "stringValue": "v" } } ] } } }, { "name": "self_eval_bool_true", "expr": "true", "value": { "boolValue": true } }, { "name": "self_eval_int_hex", "expr": "0x55555555", "value": { "int64Value": "1431655765" } }, { "name": "self_eval_int_hex_negative", "expr": "-0x55555555", "value": { "int64Value": "-1431655765" } }, { "name": "self_eval_uint_hex", "expr": "0x55555555u", "value": { "uint64Value": "1431655765" } }, { "name": "self_eval_uint_alias_hex", "expr": "0x55555555U", "value": { "uint64Value": "1431655765" } }, { "name": "self_eval_unicode_escape_four", "expr": "\"\\u270c\"", "value": { "stringValue": "✌" } }, { "name": "self_eval_unicode_escape_eight", "expr": "\"\\U0001f431\"", "value": { "stringValue": "🐱" } }, { "name": "self_eval_ascii_escape_seq", "expr": "\"\\a\\b\\f\\n\\r\\t\\v\\\"\\'\\\\\"", "value": { "stringValue": "\u0007\b\f\n\r\t\u000b\"'\\" } } ] }, { "name": "variables", "description": "Variable lookups.", "test": [ { "name": "self_eval_bound_lookup", "expr": "x", "typeEnv": [ { "name": "x", "ident": { "type": { "primitive": "INT64" } } } ], "bindings": { "x": { "value": { "int64Value": "123" } } }, "value": { "int64Value": "123" } }, { "name": "self_eval_unbound_lookup", "description": "An unbound variable should be marked as an error during execution. See google/cel-go#154", "expr": "x", "disableCheck": true, "evalError": { "errors": [ { "message": "undeclared reference to 'x' (in container '')" } ] } }, { "name": "unbound_is_runtime_error", "description": "Make sure we can short-circuit around an unbound variable.", "expr": "x || true", "disableCheck": true, "value": { "boolValue": true } } ] }, { "name": "functions", "description": "Basic mechanisms for function calls.", "test": [ { "name": "binop", "expr": "1 + 1", "value": { "int64Value": "2" } }, { "name": "unbound", "expr": "f_unknown(17)", "disableCheck": true, "evalError": { "errors": [ { "message": "unbound function" } ] } }, { "name": "unbound_is_runtime_error", "expr": "f_unknown(17) || true", "disableCheck": true, "value": { "boolValue": true } } ] }, { "name": "reserved_const", "description": "Named constants should never be shadowed by identifiers.", "test": [ { "name": "false", "expr": "false", "typeEnv": [ { "name": "false", "ident": { "type": { "primitive": "BOOL" } } } ], "bindings": { "false": { "value": { "boolValue": true } } }, "value": { "boolValue": false } }, { "name": "true", "expr": "true", "typeEnv": [ { "name": "true", "ident": { "type": { "primitive": "BOOL" } } } ], "bindings": { "true": { "value": { "boolValue": false } } }, "value": { "boolValue": true } }, { "name": "null", "expr": "null", "typeEnv": [ { "name": "null", "ident": { "type": { "primitive": "BOOL" } } } ], "bindings": { "null": { "value": { "boolValue": true } } }, "value": { "nullValue": null } } ] } ] }, { "name": "bindings_ext", "description": "Tests for the bindings extension library.", "section": [ { "name": "bind", "test": [ { "name": "boolean_literal", "expr": "cel.bind(t, true, t)", "value": { "boolValue": true } }, { "name": "string_concat", "expr": "cel.bind(msg, \"hello\", msg + msg + msg)", "value": { "stringValue": "hellohellohello" } }, { "name": "bind_nested", "expr": "cel.bind(t1, true, cel.bind(t2, true, t1 && t2))", "value": { "boolValue": true } }, { "name": "macro_exists", "expr": "cel.bind(valid_elems, [1, 2, 3], [3, 4, 5].exists(e, e in valid_elems))", "value": { "boolValue": true } }, { "name": "macro_not_exists", "expr": "cel.bind(valid_elems, [1, 2, 3], ![4, 5].exists(e, e in valid_elems))", "value": { "boolValue": true } } ] } ] }, { "name": "block_ext", "description": "Tests for cel.block.", "section": [ { "name": "basic", "test": [ { "name": "int_add", "expr": "cel.block([1, cel.index(0) + 1, cel.index(1) + 1, cel.index(2) + 1], cel.index(3))", "value": { "int64Value": "4" } }, { "name": "size_1", "expr": "cel.block([[1, 2], size(cel.index(0)), cel.index(1) + cel.index(1), cel.index(2) + 1], cel.index(3))", "value": { "int64Value": "5" } }, { "name": "size_2", "expr": "cel.block([[1, 2], size(cel.index(0)), 2 + cel.index(1), cel.index(2) + cel.index(1), cel.index(3) + 1], cel.index(4))", "value": { "int64Value": "7" } }, { "name": "size_3", "expr": "cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), cel.index(1) + cel.index(1), cel.index(4) + cel.index(3), cel.index(5) + cel.index(3)], cel.index(6))", "value": { "int64Value": "6" } }, { "name": "size_4", "expr": "cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), [1, 2, 3], size(cel.index(4)), 5 + cel.index(1), cel.index(6) + cel.index(1), cel.index(7) + cel.index(3), cel.index(8) + cel.index(3), cel.index(9) + cel.index(5), cel.index(10) + cel.index(5)], cel.index(11))", "value": { "int64Value": "17" } }, { "name": "timestamp", "expr": "cel.block([timestamp(1000000000), int(cel.index(0)), timestamp(cel.index(1)), cel.index(2).getFullYear(), timestamp(50), int(cel.index(4)), timestamp(cel.index(5)), timestamp(200), int(cel.index(7)), timestamp(cel.index(8)), cel.index(9).getFullYear(), timestamp(75), int(cel.index(11)), timestamp(cel.index(12)), cel.index(13).getFullYear(), cel.index(3) + cel.index(14), cel.index(6).getFullYear(), cel.index(15) + cel.index(16), cel.index(17) + cel.index(3), cel.index(6).getSeconds(), cel.index(18) + cel.index(19), cel.index(20) + cel.index(10), cel.index(21) + cel.index(10), cel.index(13).getMinutes(), cel.index(22) + cel.index(23), cel.index(24) + cel.index(3)], cel.index(25))", "value": { "int64Value": "13934" } }, { "name": "map_index", "expr": "cel.block([{\"a\": 2}, cel.index(0)[\"a\"], cel.index(1) * cel.index(1), cel.index(1) + cel.index(2)], cel.index(3))", "value": { "int64Value": "6" } }, { "name": "nested_map_construction", "expr": "cel.block([{\"b\": 1}, {\"e\": cel.index(0)}], {\"a\": cel.index(0), \"c\": cel.index(0), \"d\": cel.index(1), \"e\": cel.index(1)})", "value": { "mapValue": { "entries": [ { "key": { "stringValue": "a" }, "value": { "mapValue": { "entries": [ { "key": { "stringValue": "b" }, "value": { "int64Value": "1" } } ] } } }, { "key": { "stringValue": "c" }, "value": { "mapValue": { "entries": [ { "key": { "stringValue": "b" }, "value": { "int64Value": "1" } } ] } } }, { "key": { "stringValue": "d" }, "value": { "mapValue": { "entries": [ { "key": { "stringValue": "e" }, "value": { "mapValue": { "entries": [ { "key": { "stringValue": "b" }, "value": { "int64Value": "1" } } ] } } } ] } } }, { "key": { "stringValue": "e" }, "value": { "mapValue": { "entries": [ { "key": { "stringValue": "e" }, "value": { "mapValue": { "entries": [ { "key": { "stringValue": "b" }, "value": { "int64Value": "1" } } ] } } } ] } } } ] } } }, { "name": "nested_list_construction", "expr": "cel.block([[1, 2, 3, 4], [1, 2], [cel.index(1), cel.index(0)]], [1, cel.index(0), 2, cel.index(0), 5, cel.index(0), 7, cel.index(2), cel.index(1)])", "value": { "listValue": { "values": [ { "int64Value": "1" }, { "listValue": { "values": [ { "int64Value": "1" }, { "int64Value": "2" }, { "int64Value": "3" }, { "int64Value": "4" } ] } }, { "int64Value": "2" }, { "listValue": { "values": [ { "int64Value": "1" }, { "int64Value": "2" }, { "int64Value": "3" }, { "int64Value": "4" } ] } }, { "int64Value": "5" }, { "listValue": { "values": [ { "int64Value": "1" }, { "int64Value": "2" }, { "int64Value": "3" }, { "int64Value": "4" } ] } }, { "int64Value": "7" }, { "listValue": { "values": [ { "listValue": { "values": [ { "int64Value": "1" }, { "int64Value": "2" } ] } }, { "listValue": { "values": [ { "int64Value": "1" }, { "int64Value": "2" }, { "int64Value": "3" }, { "int64Value": "4" } ] } } ] } }, { "listValue": { "values": [ { "int64Value": "1" }, { "int64Value": "2" } ] } } ] } } }, { "name": "select", "expr": "cel.block([msg.single_int64, cel.index(0) + cel.index(0)], cel.index(1))", "typeEnv": [ { "name": "msg", "ident": { "type": { "messageType": "cel.expr.conformance.proto3.TestAllTypes" } } } ], "bindings": { "msg": { "value": { "objectValue": { "@type": "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", "singleInt32": 5, "singleInt64": "3", "oneofType": { "payload": { "singleInt32": 8, "singleInt64": "10", "mapInt32Int64": { "0": "1", "1": "5", "2": "2" }, "mapStringString": { "key": "A" } } } } } } }, "value": { "int64Value": "6" } }, { "name": "select_nested_1", "expr": "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, cel.index(1).single_int32, cel.index(2) + cel.index(3), cel.index(4) + cel.index(2), msg.single_int64, cel.index(5) + cel.index(6), cel.index(1).oneof_type, cel.index(8).payload, cel.index(9).single_int64, cel.index(7) + cel.index(10)], cel.index(11))", "typeEnv": [ { "name": "msg", "ident": { "type": { "messageType": "cel.expr.conformance.proto3.TestAllTypes" } } } ], "bindings": { "msg": { "value": { "objectValue": { "@type": "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", "singleInt32": 5, "singleInt64": "3", "oneofType": { "payload": { "singleInt32": 8, "singleInt64": "10", "mapInt32Int64": { "0": "1", "1": "5", "2": "2" }, "mapStringString": { "key": "A" } } } } } } }, "value": { "int64Value": "31" } }, { "name": "select_nested_2", "expr": "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).oneof_type, cel.index(2).payload, cel.index(3).oneof_type, cel.index(4).payload, cel.index(5).oneof_type, cel.index(6).payload, cel.index(7).single_bool, true || cel.index(8), cel.index(4).child, cel.index(10).child, cel.index(11).payload, cel.index(12).single_bool], cel.index(9) || cel.index(13))", "typeEnv": [ { "name": "msg", "ident": { "type": { "messageType": "cel.expr.conformance.proto3.TestAllTypes" } } } ], "bindings": { "msg": { "value": { "objectValue": { "@type": "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", "singleInt32": 5, "singleInt64": "3", "oneofType": { "payload": { "singleInt32": 8, "singleInt64": "10", "mapInt32Int64": { "0": "1", "1": "5", "2": "2" }, "mapStringString": { "key": "A" } } } } } } }, "value": { "boolValue": true } }, { "name": "select_nested_message_map_index_1", "expr": "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[1], cel.index(3) + cel.index(3), cel.index(4) + cel.index(3)], cel.index(5))", "typeEnv": [ { "name": "msg", "ident": { "type": { "messageType": "cel.expr.conformance.proto3.TestAllTypes" } } } ], "bindings": { "msg": { "value": { "objectValue": { "@type": "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", "singleInt32": 5, "singleInt64": "3", "oneofType": { "payload": { "singleInt32": 8, "singleInt64": "10", "mapInt32Int64": { "0": "1", "1": "5", "2": "2" }, "mapStringString": { "key": "A" } } } } } } }, "value": { "int64Value": "15" } }, { "name": "select_nested_message_map_index_2", "expr": "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[0], cel.index(2)[1], cel.index(3) + cel.index(4), cel.index(2)[2], cel.index(5) + cel.index(6)], cel.index(7))", "typeEnv": [ { "name": "msg", "ident": { "type": { "messageType": "cel.expr.conformance.proto3.TestAllTypes" } } } ], "bindings": { "msg": { "value": { "objectValue": { "@type": "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", "singleInt32": 5, "singleInt64": "3", "oneofType": { "payload": { "singleInt32": 8, "singleInt64": "10", "mapInt32Int64": { "0": "1", "1": "5", "2": "2" }, "mapStringString": { "key": "A" } } } } } } }, "value": { "int64Value": "8" } }, { "name": "ternary", "expr": "cel.block([msg.single_int64, cel.index(0) > 0, cel.index(1) ? cel.index(0) : 0], cel.index(2))", "typeEnv": [ { "name": "msg", "ident": { "type": { "messageType": "cel.expr.conformance.proto3.TestAllTypes" } } } ], "bindings": { "msg": { "value": { "objectValue": { "@type": "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", "singleInt32": 5, "singleInt64": "3", "oneofType": { "payload": { "singleInt32": 8, "singleInt64": "10", "mapInt32Int64": { "0": "1", "1": "5", "2": "2" }, "mapStringString": { "key": "A" } } } } } } }, "value": { "int64Value": "3" } }, { "name": "nested_ternary", "expr": "cel.block([msg.single_int64, msg.single_int32, cel.index(0) > 0, cel.index(1) > 0, cel.index(0) + cel.index(1), cel.index(3) ? cel.index(4) : 0, cel.index(2) ? cel.index(5) : 0], cel.index(6))", "typeEnv": [ { "name": "msg", "ident": { "type": { "messageType": "cel.expr.conformance.proto3.TestAllTypes" } } } ], "bindings": { "msg": { "value": { "objectValue": { "@type": "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes", "singleInt32": 5, "singleInt64": "3", "oneofType": { "payload": { "singleInt32": 8, "singleInt64": "10",