cel-interpreter 0.5.0

An interpreter for the Common Expression Language (CEL)
Documentation
Feature: basic
  Scenario: self_eval_int_zero
   ✔  When CEL expression "0" is evaluated
   ✔  Then value is IntType(source=0)
  Scenario: self_eval_uint_zero
   ✔  When CEL expression "0u" is evaluated
   ✘  Then value is UintType(source=0)
      Step failed:
      Defined: tests/features/basic.feature:18:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ParseError { msg: "Unrecognized token `u` found at 1:2\nExpected one of \"!=\", \"%\", \"&&\", \"*\", \"+\", \"-\", \".\", \"/\", \"<\", \"<=\", \"==\", \">\", \">=\", \"?\", \"[\", \"in\", \"{\" or \"||\"" }
  Scenario: self_eval_float_zero
   ✔  When CEL expression "0.0" is evaluated
   ✔  Then value is DoubleType(source=0)
  Scenario: self_eval_float_zerowithexp
   ✔  When CEL expression "0e+0" is evaluated
   ✔  Then value is DoubleType(source=0)
  Scenario: self_eval_string_empty
   ✔  When CEL expression "''" is evaluated
   ✔  Then value is StringType(source='')
  Scenario: self_eval_string_empty_quotes
   ✔  When CEL expression '""' is evaluated
   ✔  Then value is StringType(source='')
  Scenario: self_eval_string_raw_prefix
   ✔  When CEL expression 'r""' is evaluated
   ✘  Then value is StringType(source='')
      Step failed:
      Defined: tests/features/basic.feature:53:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ParseError { msg: "Unrecognized token `\"\"` found at 1:3\nExpected one of \"!=\", \"%\", \"&&\", \"(\", \"*\", \"+\", \"-\", \".\", \"/\", \"<\", \"<=\", \"==\", \">\", \">=\", \"?\", \"[\", \"in\", \"{\" or \"||\"" }
  Scenario: self_eval_bytes_empty
   ✔  When CEL expression 'b""' is evaluated
   ✔  Then value is BytesType(source=b'')
  Scenario: self_eval_bool_false
   ✔  When CEL expression "false" is evaluated
   ✔  Then value is BoolType(source=False)
  Scenario: self_eval_null
   ✔  When CEL expression "null" is evaluated
   ✔  Then value is None
  Scenario: self_eval_empty_list
   ✔  When CEL expression "[]" is evaluated
   ✔  Then value is []
  Scenario: self_eval_empty_map
   ✔  When CEL expression "{}" is evaluated
   ✔  Then value is MapType({})
  Scenario: self_eval_string_raw_prefix_triple_double
   ✔  When CEL expression 'r""""""' is evaluated
   ✘  Then value is StringType(source='')
      Step failed:
      Defined: tests/features/basic.feature:95:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ParseError { msg: "Unrecognized token `\"\"` found at 1:3\nExpected one of \"!=\", \"%\", \"&&\", \"(\", \"*\", \"+\", \"-\", \".\", \"/\", \"<\", \"<=\", \"==\", \">\", \">=\", \"?\", \"[\", \"in\", \"{\" or \"||\"" }
  Scenario: self_eval_string_raw_prefix_triple_single
   ✔  When CEL expression "r''''''" is evaluated
   ✘  Then value is StringType(source='')
      Step failed:
      Defined: tests/features/basic.feature:102:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ParseError { msg: "Unrecognized token `''` found at 1:3\nExpected one of \"!=\", \"%\", \"&&\", \"(\", \"*\", \"+\", \"-\", \".\", \"/\", \"<\", \"<=\", \"==\", \">\", \">=\", \"?\", \"[\", \"in\", \"{\" or \"||\"" }
  Scenario: self_eval_int_nonzero
   ✔  When CEL expression "42" is evaluated
   ✔  Then value is IntType(source=42)
  Scenario: self_eval_uint_nonzero
   ✔  When CEL expression "123456789u" is evaluated
   ✘  Then value is UintType(source=123456789)
      Step failed:
      Defined: tests/features/basic.feature:119:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ParseError { msg: "Unrecognized token `u` found at 9:10\nExpected one of \"!=\", \"%\", \"&&\", \"*\", \"+\", \"-\", \".\", \"/\", \"<\", \"<=\", \"==\", \">\", \">=\", \"?\", \"[\", \"in\", \"{\" or \"||\"" }
  Scenario: self_eval_int_negative_min
   ✔  When CEL expression "-9223372036854775808" is evaluated
   ✔  Then value is IntType(source=-9223372036854775808)
  Scenario: self_eval_float_negative_exp
   ✔  When CEL expression "-2.3e+1" is evaluated
   ✔  Then value is DoubleType(source=-23)
  Scenario: self_eval_string_excl
   ✔  When CEL expression '"!"' is evaluated
   ✔  Then value is StringType(source='!')
  Scenario: self_eval_string_escape
   ✔  When CEL expression "'\''" is evaluated
   ✘  Then value is StringType(source="'")
      Step failed:
      Defined: tests/features/basic.feature:147:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: assertion `left == right` failed
        left: String("")
       right: String("\\'")
  Scenario: self_eval_bytes_escape
   ✔  When CEL expression "b'ÿ'" is evaluated
   ✘  Then value is BytesType(source=b'\xc3\xbf')
      Step failed:
      Defined: tests/features/basic.feature:154:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ()
  Scenario: self_eval_bytes_invalid_utf8
   ✔  When CEL expression "b'\000\xff'" is evaluated
   ✘  Then value is BytesType(source=b'\x00\xff')
      Step failed:
      Defined: tests/features/basic.feature:161:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ()
  Scenario: self_eval_list_singleitem
   ✔  When CEL expression "[-1]" is evaluated
   ✘  Then value is [IntType(source=-1)]
      Step failed:
      Defined: tests/features/basic.feature:168:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ()
  Scenario: self_eval_map_singleitem
   ✔  When CEL expression '{"k":"v"}' is evaluated
   ✘  Then value is MapType({StringType(source='k'): StringType(source='v')})
      Step failed:
      Defined: tests/features/basic.feature:175:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ()
  Scenario: self_eval_bool_true
   ✔  When CEL expression "true" is evaluated
   ✔  Then value is BoolType(source=True)
  Scenario: self_eval_int_hex
   ✔  When CEL expression "0x55555555" is evaluated
   ✘  Then value is IntType(source=1431655765)
      Step failed:
      Defined: tests/features/basic.feature:189:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ParseIntError { kind: InvalidDigit }
  Scenario: self_eval_int_hex_negative
   ✔  When CEL expression "-0x55555555" is evaluated
   ✘  Then value is IntType(source=-1431655765)
      Step failed:
      Defined: tests/features/basic.feature:196:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ParseIntError { kind: InvalidDigit }
  Scenario: self_eval_uint_hex
   ✔  When CEL expression "0x55555555u" is evaluated
   ✘  Then value is UintType(source=1431655765)
      Step failed:
      Defined: tests/features/basic.feature:203:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ParseError { msg: "Unrecognized token `u` found at 10:11\nExpected one of \"!=\", \"%\", \"&&\", \"*\", \"+\", \"-\", \".\", \"/\", \"<\", \"<=\", \"==\", \">\", \">=\", \"?\", \"[\", \"in\", \"{\" or \"||\"" }
  Scenario: self_eval_unicode_escape_four
   ✔  When CEL expression '"\u270c"' is evaluated
   ✘  Then value is StringType(source='✌')
      Step failed:
      Defined: tests/features/basic.feature:210:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ()
  Scenario: self_eval_unicode_escape_eight
   ✔  When CEL expression '"\U0001f431"' is evaluated
   ✘  Then value is StringType(source='🐱')
      Step failed:
      Defined: tests/features/basic.feature:217:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ()
  Scenario: self_eval_ascii_escape_seq
   ✔  When CEL expression '"\a\b\f\n\r\t\v\"\'\\"' is evaluated
   ✘  Then value is StringType(source='\x07\x08\x0c\n\r\t\x0b"\'\\')
      Step failed:
      Defined: tests/features/basic.feature:224:5
      Matched: interpreter/tests/conformance.rs:29:1
      Step panicked. Captured output: called `Result::unwrap()` on an `Err` value: ()
  Scenario: self_eval_bound_lookup
   ?  Given type_env parameter "x" is TypeType(value='INT64')
      Step skipped: tests/features/basic.feature:233:4
  Scenario: self_eval_unbound_lookup
   ✔  When CEL expression "x" is evaluated
   ?  Then eval_error is "undeclared reference to 'x' (in container '')"
      Step skipped: tests/features/basic.feature:247:5
  Scenario: unbound_is_runtime_error
   ?  When CEL expression "x || true" is evaluated
      Step skipped: tests/features/basic.feature:252:5
  Scenario: binop
   ?  When CEL expression "1 + 1" is evaluated
      Step skipped: tests/features/basic.feature:262:5
  Scenario: unbound
   ✔  When CEL expression "f_unknown(17)" is evaluated
   ?  Then eval_error is 'unbound function'
      Step skipped: tests/features/basic.feature:271:5
  Scenario: unbound_is_runtime_error
   ?  When CEL expression "f_unknown(17) || true" is evaluated
      Step skipped: tests/features/basic.feature:276:5
  Scenario: false
   ?  Given type_env parameter "false" is TypeType(value='BOOL')
      Step skipped: tests/features/basic.feature:287:4
  Scenario: true
   ?  Given type_env parameter "true" is TypeType(value='BOOL')
      Step skipped: tests/features/basic.feature:300:4
  Scenario: null
   ?  Given type_env parameter "null" is TypeType(value='BOOL')
      Step skipped: tests/features/basic.feature:313:4
[Summary]
1 feature
40 scenarios (15 passed, 9 skipped, 16 failed)
73 steps (48 passed, 9 skipped, 16 failed)