# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "namespace" description: "Uses of qualified identifiers and namespaces." section { name: "qualified" description: "Qualified variable lookups." test { name: "self_eval_qualified_lookup" expr: "x.y" value: { bool_value: true } type_env: { name: "x.y" ident: { type: { primitive: BOOL } } } bindings: { key: "x.y" value: { value: { bool_value: true } } } } } section { name: "namespace" description: "Namespaced identifiers." test { name: "self_eval_container_lookup" expr: "y" container: "x" type_env: { name: "x.y" ident: { type: { primitive: BOOL } } } type_env: { name: "y" ident: { type: { primitive: STRING } } } bindings: { key: "x.y" value: { value: { bool_value: true } } } bindings: { key: "y" value: { value: { string_value: "false" } } } value: { bool_value: true } } test { name: "self_eval_container_lookup_unchecked" expr: "y" container: "x" type_env: { name: "x.y" ident: { type: { primitive: BOOL } } } type_env: { name: "y" ident: { type: { primitive: BOOL } } } bindings: { key: "x.y" value: { value: { bool_value: true } } } bindings: { key: "y" value: { value: { bool_value: false } } } disable_check: true ## ensure unchecked ASTs resolve the same as checked ASTs value: { bool_value: true } } } section { name: "namespace_shadowing" description: "Variable shadowing in comprehensions" test { name: "basic" expr: "y" container: "com.example" type_env: { name: "com.example.y" ident: { type: { primitive: BOOL } } } type_env: { name: "y" ident: { type: { primitive: STRING } } } bindings: { key: "com.example.y" value: { value: { bool_value: true } } } bindings: { key: "y" value: { value: { string_value: "string" } } } value: { bool_value: true } } test { name: "disambiguation" expr: ".y" container: "com.example" type_env: { name: "com.example.y" ident: { type: { primitive: STRING } } } type_env: { name: "y" ident: { type: { primitive: STRING } } } bindings: { key: "com.example.y" value: { value: { string_value: "com.example.y" } } } bindings: { key: "y" value: { value: { string_value: "y" } } } value: { string_value: "y" } } test { name: "comprehension_shadowing" expr: "[0].exists(y, y == 0)" container: "com.example" type_env: { name: "com.example.y" ident: { type: { primitive: INT64 } } } bindings: { key: "com.example.y" value: { value: { int64_value: 42 } } } value: { bool_value: true } } test { name: "comprehension_shadowing_disambiguation" expr: "['compre'].exists(y, .y == 'y')" container: "com.example" type_env: { name: "y" ident: { type: { primitive: STRING } } } bindings: { key: "y" value: { value: { string_value: "y" } } } value: { bool_value: true } } test { name: "comprehension_shadowing_parse_only" expr: "[0].exists(y, y == 0)" container: "com.example" type_env: { name: "com.example.y" ident: { type: { primitive: INT64 } } } bindings: { key: "com.example.y" value: { value: { int64_value: 42 } } } disable_check: true value: { bool_value: true } } test { name: "comprehension_shadowing_selector" expr: "[{'z': 0}].exists(y, y.z == 0)" type_env: { name: "y.z" ident: { type: { primitive: INT64 } } } bindings: { key: "y.z" value: { value: { int64_value: 42 } } } value: { bool_value: true } } test { name: "comprehension_shadowing_selector_parse_only" expr: "[{'z': 0}].exists(y, y.z == 0)" type_env: { name: "y.z" ident: { type: { primitive: INT64 } } } bindings: { key: "y.z" value: { value: { int64_value: 42 } } } disable_check: true value: { bool_value: true } } test { name: "comprehension_shadowing_namespaced_selector" expr: "[{'z': 0}].exists(y, y.z == 0)" container: "com.example" type_env: { name: "com.example.y.z" ident: { type: { primitive: INT64 } } } bindings: { key: "com.example.y.z" value: { value: { int64_value: 42 } } } value: { bool_value: true } } test { name: "comprehension_shadowing_namespaced_selector_parse_only" expr: "[{'z': 0}].exists(y, y.z == 0)" container: "com.example" type_env: { name: "com.example.y.z" ident: { type: { primitive: INT64 } } } bindings: { key: "com.example.y.z" value: { value: { int64_value: 42 } } } disable_check: true value: { bool_value: true } } test { name: "comprehension_shadowing_namespaced_selector_disambiguation" expr: "[{'z': 'compre'}].exists(y, .y.z == 'y.z')" container: "com.example" type_env: { name: "com.example.y.z" ident: { type: { primitive: STRING } } } type_env: { name: "y.z" ident: { type: { primitive: STRING } } } bindings: { key: "com.example.y.z" value: { value: { string_value: "com.example.y.z" } } } bindings: { key: "y.z" value: { value: { string_value: "y.z" } } } value: { bool_value: true } } test { name: "comprehension_shadowing_nesting" expr: "[1].exists(y, [0].exists(y, y == 0))" container: "com.example" type_env: { name: "com.example.y" ident: { type: { primitive: INT64 } } } type_env: { name: "y" ident: { type: { primitive: INT64 } } } bindings: { key: "com.example.y" value: { value: { int64_value: 42 } } } bindings: { key: "y" value: { value: { int64_value: 42 } } } value: { bool_value: true } } }