# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile 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: { int64_value: 0 } } test { name: "self_eval_uint_zero" expr: "0u" value: { uint64_value: 0 } } test { name: "self_eval_uint_alias_zero" expr: "0U" value: { uint64_value: 0 } } test { name: "self_eval_float_zero" expr: "0.0" value: { double_value: 0 } } test { name: "self_eval_float_zerowithexp" expr: "0e+0" value: { double_value: 0 } } test { name: "self_eval_string_empty" expr: "''" value: { string_value: "" } } test { name: "self_eval_string_empty_quotes" expr: '""' value: { string_value: "" } } test { name: "self_eval_string_raw_prefix" expr: 'r""' value: { string_value: "" } } test { name: "self_eval_bytes_empty" expr: 'b""' value: { bytes_value: "" } } test { name: "self_eval_bool_false" expr: "false" value: { bool_value: false } } test { name: "self_eval_null" expr: "null" value: { null_value: NULL_VALUE } } test { name: "self_eval_empty_list" expr: '[]' value: { list_value: {} } } test { name: "self_eval_empty_map" expr: '{}' value: { map_value: {} } } test { name: "self_eval_string_raw_prefix_triple_double" expr: 'r""""""' value: { string_value: "" } } test { name: "self_eval_string_raw_prefix_triple_single" expr: "r''''''" value: { string_value: "" } } } section { name: "self_eval_nonzeroish" description: "Simple self-evaluating forms to non-zero-ish values." test { name: "self_eval_int_nonzero" expr: "42" value: { int64_value: 42 } } test { name: "self_eval_uint_nonzero" expr: "123456789u" value: { uint64_value: 123456789 } } test { name: "self_eval_uint_alias_nonzero" expr: "123456789U" value: { uint64_value: 123456789 } } test { name: "self_eval_int_negative_min" expr: "-9223372036854775808" value: { int64_value: -9223372036854775808 } } test { name: "self_eval_float_negative_exp" expr: "-2.3e+1" value: { double_value: -23.0 } } test { name: "self_eval_string_excl" expr: '"!"' value: { string_value: "!" } } test { name: "self_eval_string_escape" expr: "'\\''" value: { string_value: "'" } } test { name: "self_eval_bytes_escape" expr: "b'ΓΏ'" value: { bytes_value: "\303\277" } } test { name: "self_eval_bytes_invalid_utf8" expr: "b'\\000\\xff'" value: { bytes_value: "\000\377" } } test { name: "self_eval_list_singleitem" expr: "[-1]" value: { list_value { values: { int64_value: -1 } } } } test { name: "self_eval_map_singleitem" expr: '{"k":"v"}' value: { map_value { entries { key: { string_value: "k" } value: { string_value: "v" } } } } } test { name: "self_eval_bool_true" expr: "true" value: { bool_value: true } } test { name: "self_eval_int_hex" expr: "0x55555555" value: { int64_value: 1431655765 } } test { name: "self_eval_int_hex_negative" expr: "-0x55555555" value: { int64_value: -1431655765 } } test { name: "self_eval_uint_hex" expr: "0x55555555u" value: { uint64_value: 1431655765 } } test { name: "self_eval_uint_alias_hex" expr: "0x55555555U" value: { uint64_value: 1431655765 } } test { name: "self_eval_unicode_escape_four" expr: '"\\u270c"' value: { string_value: "\xe2\x9c\x8c" } } test { name: "self_eval_unicode_escape_eight" expr: '"\\U0001f431"' value: { string_value: "\xf0\x9f\x90\xb1" } } test { name: "self_eval_ascii_escape_seq" expr: '"\\a\\b\\f\\n\\r\\t\\v\\"\\\'\\\\"' value: { string_value: "\a\b\f\n\r\t\v\"'\\" } } } section { name: "variables" description: "Variable lookups." test { name: "self_eval_bound_lookup" expr: "x" type_env: { name: "x", ident: { type: { primitive: INT64 } } } bindings: { key: "x" value: { value: { int64_value: 123 } } } value: { int64_value: 123 } } test { name: "self_eval_unbound_lookup" description: "An unbound variable should be marked as an error during execution. See google/cel-go#154" expr: "x" disable_check: true eval_error: { errors: { message: "undeclared reference to 'x' (in container '')" } } } test { name: "unbound_is_runtime_error" description: "Make sure we can short-circuit around an unbound variable." expr: "x || true" disable_check: true value { bool_value: true } } } section { name: "functions" description: "Basic mechanisms for function calls." test { name: "binop" expr: "1 + 1" value { int64_value: 2 } } test { name: "unbound" expr: "f_unknown(17)" disable_check: true eval_error { errors { message: "unbound function" } } } test { name: "unbound_is_runtime_error" expr: "f_unknown(17) || true" disable_check: true value { bool_value: true } } } section { name: "reserved_const" description: "Named constants should never be shadowed by identifiers." test { name: "false" expr: "false" type_env: { name: "false" ident: { type: { primitive: BOOL } } } bindings { key: "false" value: { value: { bool_value: true } } } value: { bool_value: false } } test { name: "true" expr: "true" type_env: { name: "true" ident: { type: { primitive: BOOL } } } bindings { key: "true" value: { value: { bool_value: false } } } value: { bool_value: true } } test { name: "null" expr: "null" type_env: { name: "null" ident: { type: { primitive: BOOL } } } bindings { key: "null" value: { value: { bool_value: true } } } value: { null_value: 0 } } }