Beispiel #1
0
 def test_parsing_with_no_localized_grammars(self):
     mgr = EvaluableParseManager(self.symbol_table, Grammar())
     parse_tree1 = mgr.parse('message == "2009-07-13"')
     parse_tree2 = mgr.parse('message == "2009-07-13"', None)
     expected_tree = EvaluableParseTree(
         Equal(String("Hello world"), String("2009-07-13")))
     eq_(parse_tree1, parse_tree2)
     eq_(parse_tree1, expected_tree)
Beispiel #2
0
 def test_operand(self):
     """Operands alone can valid evaluable parse trees."""
     operand = TrafficLightVar()
     tree = EvaluableParseTree(operand)
     # True
     context = {'traffic_light': "red"}
     ok_(tree(context))
     # False
     context = {'traffic_light': None}
     assert_false(tree(context))
Beispiel #3
0
 def test_parsing_with_localized_grammars(self):
     castilian_grammar = Grammar(decimal_separator=",",
                                 thousands_separator=".")
     mgr = EvaluableParseManager(self.symbol_table,
                                 Grammar(),
                                 es=castilian_grammar)
     parse_tree = mgr.parse(u"tráfico:peatones_cruzando_calle <= 3,00",
                            "es")
     expected_tree = EvaluableParseTree(
         LessEqual(PedestriansCrossingRoad(), Number(3.0)))
     eq_(parse_tree, expected_tree)
Beispiel #4
0
 def test_adding_grammar(self):
     """It should be possible to add grammars after instantiation."""
     castilian_grammar = Grammar(decimal_separator=",",
                                 thousands_separator=".")
     mgr = EvaluableParseManager(self.symbol_table, Grammar())
     mgr.add_parser("es", castilian_grammar)
     parse_tree = mgr.parse(u'tráfico:peatones_cruzando_calle <= 3,00',
                            "es")
     expected_tree = EvaluableParseTree(
         LessEqual(PedestriansCrossingRoad(), Number(3.0)))
     eq_(parse_tree, expected_tree)
Beispiel #5
0
 def test_equivalence(self):
     tree1 = EvaluableParseTree(BoolVar())
     tree2 = EvaluableParseTree(BoolVar())
     tree3 = EvaluableParseTree(PedestriansCrossingRoad())
     tree4 = ConvertibleParseTree(PlaceholderVariable("my_variable"))
     
     ok_(tree1 == tree2)
     ok_(tree2 == tree1)
     
     ok_(tree1 != None)
     ok_(tree1 != tree3)
     ok_(tree1 != tree4)
     ok_(tree2 != tree3)
     ok_(tree2 != tree4)
     ok_(tree3 != tree1)
     ok_(tree3 != tree2)
     ok_(tree3 != tree4)
     ok_(tree4 != tree1)
     ok_(tree4 != tree2)
     ok_(tree4 != tree3)
Beispiel #6
0
 def test_operation(self):
     """Operations are valid evaluable parse trees."""
     operation = And(PedestriansCrossingRoad(),
                     DriversAwaitingGreenLightVar())
     tree = EvaluableParseTree(operation)
     # True
     context = {'pedestrians_crossroad': ("gustavo", "carla"),
                'drivers_trafficlight': ("andreina", "juan")}
     ok_(tree(context))
     # False
     context = {'pedestrians_crossroad': (),
                'drivers_traffic_light': ()}
     assert_false(tree(context))
Beispiel #7
0
    def test_parsing_with_defined_grammar_but_no_available_translations(self):
        """
        When an expression is written in an supported grammar but there are no
        translated bindings, the default names must be used along with the
        custom grammar.

        """
        french_grammar = Grammar(decimal_separator=",",
                                 thousands_separator=".")
        mgr = EvaluableParseManager(self.symbol_table,
                                    Grammar(),
                                    fr=french_grammar)
        # French grammar is not supported:
        parse_tree = mgr.parse("traffic:pedestrians_crossing_road <= 3,0",
                               "fr")
        expected_tree = EvaluableParseTree(
            LessEqual(PedestriansCrossingRoad(), Number(3)))
        eq_(parse_tree, expected_tree)
Beispiel #8
0
 def test_parsing_with_undefined_grammar_but_available_translations(self):
     """
     When an expression is written in an unsupported grammar, a parser
     based on the generic grammar must be created and used.
     
     The respective translated bindings must be used if available.
     
     """
     log_handler = LoggingHandlerFixture()
     mgr = EvaluableParseManager(self.symbol_table, Grammar())
     # Castilian grammar is not supported:
     parse_tree = mgr.parse(u"tráfico:peatones_cruzando_calle <= 3.0", "es")
     expected_tree = EvaluableParseTree(
         LessEqual(PedestriansCrossingRoad(), Number(3)))
     eq_(parse_tree, expected_tree)
     # Checking the log:
     info = "Generated parser for unknown grammar 'es'"
     ok_(info in log_handler.handler.messages['info'])
     log_handler.undo()
Beispiel #9
0
    def test_parsing_with_undefined_grammar_and_no_translated_bindings(self):
        """
        When an expression is written in an unsupported grammar, a parser
        based on the generic grammar must be created and used.

        If there are no translated bindings, the default names must be used.

        """
        log_handler = LoggingHandlerFixture()
        mgr = EvaluableParseManager(self.symbol_table, Grammar())
        # French grammar is not supported:
        parse_tree = mgr.parse("traffic:pedestrians_crossing_road <= 3.0",
                               "fr")
        expected_tree = EvaluableParseTree(
            LessEqual(PedestriansCrossingRoad(), Number(3)))
        eq_(parse_tree, expected_tree)
        # Checking the log:
        info = "Generated parser for unknown grammar %s" % repr('fr')
        ok_(info in log_handler.handler.messages['info'])
        log_handler.undo()
Beispiel #10
0
 def test_equivalence(self):
     tree1 = ConvertibleParseTree(PlaceholderVariable("my_variable"))
     tree2 = ConvertibleParseTree(PlaceholderVariable("my_variable"))
     tree3 = ConvertibleParseTree(String("hello"))
     tree4 = EvaluableParseTree(BoolVar())
     
     ok_(tree1 == tree2)
     ok_(tree2 == tree1)
     
     ok_(tree1 != None)
     ok_(tree1 != tree3)
     ok_(tree1 != tree4)
     ok_(tree2 != tree3)
     ok_(tree2 != tree4)
     ok_(tree3 != tree1)
     ok_(tree3 != tree2)
     ok_(tree3 != tree4)
     ok_(tree4 != tree1)
     ok_(tree4 != tree2)
     ok_(tree4 != tree3)
Beispiel #11
0
 def test_representation(self):
     tree = EvaluableParseTree(BoolVar())
     expected = "<Parse tree (evaluable) <Anonymous variable [BoolVar]>>"
     eq_(repr(tree), expected)
Beispiel #12
0
 def test_string(self):
     tree = EvaluableParseTree(BoolVar())
     as_unicode = unicode(tree)
     expected = "Evaluable parse tree (Anonymous variable [BoolVar])"
     eq_(as_unicode, expected)