@@ -2012,3 +2012,65 @@ def test_negative_expressions(self):
20122012
20132013 if err is None :
20142014 self .fail ("test_negative_expressions: expected error executing FilterExpressionParser.evaluate_expression" )
2015+
2016+ def test_misc_expressions (self ):
2017+ with open ("test/MetadataSample2.xml" , "rb" ) as binary_file :
2018+ data = binary_file .read ()
2019+
2020+ dataset , err = DataSet .from_xml (data )
2021+
2022+ if err is not None :
2023+ self .fail (f"test_misc_expressions: error executing DataSet.from_xml: { err } " )
2024+
2025+ datarow = dataset ["DeviceDetail" ][0 ]
2026+
2027+ value_expression , err = FilterExpressionParser .evaluate_datarowexpression (datarow , "AccessID ^ 2 + FramesPerSecond XOR 4" )
2028+
2029+ if err is not None :
2030+ self .fail (f"test_misc_expressions: error executing FilterExpressionParser.evaluate_datarowexpression: { err } " )
2031+
2032+ if value_expression .valuetype != ExpressionValueType .INT32 :
2033+ self .fail (f"test_misc_expressions: expected value type of int32, received { value_expression .valuetype } " )
2034+
2035+ result , err = value_expression .int32value ()
2036+
2037+ if err is not None :
2038+ self .fail (f"test_misc_expressions: error executing value_expression.int32value: { err } " )
2039+
2040+ if result != 38 :
2041+ self .fail (f"test_misc_expressions: unexpected value expression result, expected 38, received { result } " )
2042+
2043+ # test edge case of evaluating standalone Guid not used as a row identifier
2044+ g = uuid1 ()
2045+ value_expression , err = FilterExpressionParser .evaluate_datarowexpression (datarow , str (g ))
2046+
2047+ if err is not None :
2048+ self .fail (f"test_misc_expressions: error executing FilterExpressionParser.evaluate_datarowexpression: { err } " )
2049+
2050+ if value_expression .valuetype != ExpressionValueType .GUID :
2051+ self .fail (f"test_misc_expressions: expected value type of guid, received { value_expression .valuetype } " )
2052+
2053+ result , err = value_expression .guidvalue ()
2054+
2055+ if err is not None :
2056+ self .fail (f"test_misc_expressions: error executing value_expression.guidvalue: { err } " )
2057+
2058+ if result != g :
2059+ self .fail (f"test_misc_expressions: unexpected value expression result, expected { g } , received { result } " )
2060+
2061+ # test computed column with expression defined in schema
2062+ value_expression , err = FilterExpressionParser .evaluate_datarowexpression (datarow , "ComputedCol" )
2063+
2064+ if err is not None :
2065+ self .fail (f"test_misc_expressions: error executing FilterExpressionParser.evaluate_datarowexpression: { err } " )
2066+
2067+ if value_expression .valuetype != ExpressionValueType .INT32 :
2068+ self .fail (f"test_misc_expressions: expected value type of int32, received { value_expression .valuetype } " )
2069+
2070+ result , err = value_expression .int32value ()
2071+
2072+ if err is not None :
2073+ self .fail (f"test_misc_expressions: error executing value_expression.int32value: { err } " )
2074+
2075+ if result != 32 :
2076+ self .fail (f"test_misc_expressions: unexpected value expression result, expected 32, received { result } " )
0 commit comments