def test_evaluation_expression4(self): script = dedent(""" match(short_description, ?hr_service)?matched; """) exe = engine.compile_norm(script) cmd = exe.stack.pop() self.assertEqual(cmd.variable_name, 'match') self.assertEqual(cmd.args, engine.ListExpr( [engine.ArgumentExpr(engine.BaseExpr('variable', 'short_description'), None), engine.ArgumentExpr(None, engine.Projection(None, 'hr_service'))])) self.assertEqual(cmd.projection, engine.Projection(None, 'matched'))
def test_assignment_expression(self): script = dedent(""" a = Company('google')?*; """) exe = engine.compile_norm(script) cmd = exe.stack.pop() google = engine.BaseExpr('constant', engine.Constant('string', 'google')) self.assertEqual(cmd.variable_name, 'a') self.assertEqual(cmd.expr, engine.EvaluationExpr(engine.TypeName('Company', None), None, engine.ListExpr([engine.ArgumentExpr(google, None)]), engine.Projection(1000000, None)))
def test_aggregation_function_expression(self): script = dedent(""" Company(name ~ 'google')?*.Group(by="founders"); """) exe = engine.compile_norm(script) cmd = exe.stack.pop() google = engine.BaseExpr('constant', engine.Constant('string', 'google')) condition = engine.ConditionExpr('name', '~', google) assignment = engine.AssignmentExpr('by', engine.BaseExpr('constant', engine.Constant('string', 'founders'))) self.assertEqual(cmd.qexpr, engine.EvaluationExpr(engine.TypeName('Company', None), None, engine.ListExpr([engine.ArgumentExpr(condition, None)]), engine.Projection(1000000, None))) self.assertEqual(cmd.eexpr, engine.EvaluationExpr(engine.TypeName('Group', None), None, engine.ListExpr([engine.ArgumentExpr(assignment, None)]), None))
def test_combined_evaluation_expression(self): script = dedent(""" Company(name ~ 'google')?comp & Develop(comp, 'AI'); """) exe = engine.compile_norm(script) cmd = exe.stack.pop() google = engine.BaseExpr('constant', engine.Constant('string', 'google')) ai = engine.BaseExpr('constant', engine.Constant('string', 'AI')) comp = engine.BaseExpr('variable', value='comp') condition = engine.ConditionExpr('name', '~', google) expr1 = engine.EvaluationExpr(engine.TypeName('Company', None), None, engine.ListExpr([engine.ArgumentExpr(condition, None)]), engine.Projection(None, 'comp')) expr2 = engine.EvaluationExpr(engine.TypeName('Develop', None), None, engine.ListExpr([engine.ArgumentExpr(comp, None), engine.ArgumentExpr(ai, None)]), None) self.assertEqual(cmd.op, '&') self.assertEqual(cmd.expr1, expr1) self.assertEqual(cmd.expr2, expr2)