@@ -57,6 +57,7 @@ def _create_activation(self, impl) -> cel.Activation:
5757 [cel .Type .STRING ],
5858 False ,
5959 impl ,
60+ return_type = cel .Type .STRING ,
6061 )
6162 ],
6263 )
@@ -93,6 +94,7 @@ def test_error_no_matching_overload(self, ext):
9394 [cel .Type .STRING , cel .Type .INT ],
9495 False ,
9596 lambda _ : "¡Hola Mundo!" ,
97+ return_type = cel .Type .STRING ,
9698 )
9799 ],
98100 )
@@ -189,6 +191,42 @@ def _lost_in_translation_return_none(arg1: str) -> str: # pylint: disable=unuse
189191def _lost_in_translation_raising_error (text : str ) -> str : # pylint: disable=unused-argument
190192 raise LookupError ("Lost in translation" )
191193
194+ TEST_EXPRESSIONS = [
195+ ("getOrDefaultReceiver" , "{'a': 1, 'b': 2}.getOrDefault('c', 3) == 3" ),
196+ ("getOrDefault" , "getOrDefault({'a': 'z', 'b': 'y'}, 'a', 'x') == 'z'" ),
197+ ("lerp_int" , "lerp(1, 2, 0.5) == 1.5" ),
198+ ("lerp_uint" , "lerp(1u, 2u, 0.5) == 1.5" ),
199+ ]
200+
201+
202+ class PythonTypeMappingsTest (parameterized .TestCase ):
203+
204+ def setUp (self ):
205+ super ().setUp ()
206+ self .descriptor_pool = descriptor_pool .Default ()
207+ self .env = cel .NewEnv (
208+ self .descriptor_pool ,
209+ variables = {},
210+ extensions = [sample_cel_ext .SampleCelExtension ()],
211+ )
212+
213+ def _compile_expr (self , expression : str ) -> cel .Expression :
214+ return self .env .compile (expression )
215+
216+ @parameterized .named_parameters (TEST_EXPRESSIONS )
217+ def test_expression (self , expr ):
218+ compiled_expr = self .env .compile (expr )
219+ act = self .env .Activation ()
220+ res = compiled_expr .eval (act )
221+ self .assertEqual (res .value (), True )
222+
223+ def test_lerp_error_out_of_bounds (self ):
224+ compiled_expr = self .env .compile ("lerp(1, 2, 1.5)" )
225+ act = self .env .Activation ()
226+ res = compiled_expr .eval (act )
227+ self .assertEqual (res .type (), cel .Type .ERROR )
228+ self .assertIn ("t must be between 0.0 and 1.0" , res .value ())
229+
192230
193231if __name__ == "__main__" :
194232 absltest .main ()
0 commit comments