@bufbuild/cel-spec
Version:
CEL definitions and test data
1,065 lines (1,064 loc) • 955 kB
JavaScript
"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",