def test_that_to_topic(self): node1 = PatternTopicNode() node2 = PatternThatNode() with self.assertRaises(ParserException) as raised: node1.can_add(node2) self.assertEqual(str(raised.exception), "Cannot add that node to topic node")
def add_topic_to_node(self, topic_element, base_node): try: current_node = PatternTopicNode() current_node = base_node.add_topic(current_node) head_text = self.get_text_from_element(topic_element) if head_text is not None: current_node = self._parse_text(head_text, current_node) added_child = False for sub_element in topic_element: new_node = PatternGraph.node_from_element(sub_element) current_node = current_node.add_child(new_node) tail_text = self.get_tail_from_element(sub_element) if tail_text is not None: current_node = self._parse_text(tail_text, current_node) added_child = True if head_text is None: if added_child is False: raise ParserException("Topic node text is empty", xml_element=topic_element) return current_node except ParserException as parser_excep: parser_excep._xml_element = topic_element raise parser_excep
def test_equivalent(self): node1 = PatternTopicNode() node2 = PatternTopicNode() node3 = PatternThatNode() node4 = PatternTopicNode(userid="testid") self.assertTrue(node1.equivalent(node2)) self.assertFalse(node1.equivalent(node3)) self.assertFalse(node1.equivalent(node4))
def test_to_string(self): node1 = PatternTopicNode() self.assertEqual(node1.to_string(verbose=False), "TOPIC") self.assertEqual(node1.to_string(verbose=True), "TOPIC [*] [P(0)^(0)#(0)C(0)_(0)*(0)To(0)Th(0)Te(0)]") node2 = PatternTopicNode(userid="testid") self.assertEqual(node2.to_string(verbose=False), "TOPIC") self.assertEqual(node2.to_string(verbose=True), "TOPIC [testid] [P(0)^(0)#(0)C(0)_(0)*(0)To(0)Th(0)Te(0)]")
def test_topic_node_exists(self): node = PatternNode() self.assertIsNotNone(node) new_node1 = PatternTopicNode() self.assertIsNone(node._topic_node_exist(new_node1)) node.add_topic(new_node1) self.assertIsNotNone(node._topic_node_exist(new_node1)) new_node2 = PatternTopicNode(userid="testid2") self.assertIsNotNone(node._topic_node_exist(new_node2)) node.add_topic(new_node2) self.assertIsNotNone(node._topic_node_exist(new_node2))
def test_to_xml(self): node1 = PatternTopicNode() self.assertEqual('<topic></topic>\n', node1.to_xml(self._client_context)) self.assertEqual('<topic userid="*"></topic>\n', node1.to_xml(self._client_context, include_user=True)) node2 = PatternTopicNode(userid="testid") self.assertEqual('<topic></topic>\n', node2.to_xml(self._client_context)) self.assertEqual('<topic userid="testid"></topic>\n', node2.to_xml(self._client_context, include_user=True))
def test_consume_search_depth_exceeded(self): node = PatternTopicNode() self.assertIsNotNone(node) match_context = MatchContext(max_search_depth=0, max_search_timeout=100) words = Sentence(self._client_context) result = node.consume(self._client_context, match_context, words, 0, Match.WORD, 1, parent=False) self.assertIsNone(result)
def test_topic_to_template(self): node1 = PatternTemplateNode(TemplateNode()) node2 = PatternTopicNode() with self.assertRaises(ParserException) as raised: node1.can_add(node2) self.assertEqual(str(raised.exception), "Cannot add topic node to template node")
def test_init(self): node = PatternTemplateNode(TemplateNode()) self.assertIsNotNone(node) self.assertFalse(node.is_root()) self.assertFalse(node.is_priority()) self.assertFalse(node.is_wildcard()) self.assertFalse(node.is_zero_or_more()) self.assertFalse(node.is_one_or_more()) self.assertFalse(node.is_set()) self.assertFalse(node.is_bot()) self.assertTrue(node.is_template()) self.assertFalse(node.is_that()) self.assertFalse(node.is_topic()) self.assertFalse(node.is_wildcard()) self.assertIsNotNone(node.children) self.assertFalse(node.has_children()) self.assertTrue(node.equivalent(PatternTemplateNode(TemplateNode()))) self.assertEqual(node.to_string(), "PTEMPLATE [P(0)^(0)#(0)C(0)_(0)*(0)To(0)Th(0)Te(1)] ") self.assertEqual(node.to_string(verbose=False), "PTEMPLATE") self.assertEqual('<template></template>\n', node.to_xml(self.bot, self.clientid)) self.assertFalse(node.equivalent(PatternTopicNode()))
def test_init(self): node = PatternTopicNode() self.assertIsNotNone(node) self.assertFalse(node.is_root()) self.assertFalse(node.is_priority()) self.assertFalse(node.is_wildcard()) self.assertFalse(node.is_zero_or_more()) self.assertFalse(node.is_one_or_more()) self.assertIsNotNone(node.children) self.assertFalse(node.has_children()) self.assertTrue(node.equivalent(PatternTopicNode())) self.assertEqual(node.to_string(), "TOPIC [P(0)^(0)#(0)C(0)_(0)*(0)To(0)Th(0)Te(0)]")
def test_equivalent(self): node1 = PatternThatNode() node2 = PatternThatNode() node3 = PatternTopicNode() node4 = PatternThatNode(userid="testid") self.assertTrue(node1.equivalent(node2)) self.assertFalse(node1.equivalent(node3)) self.assertFalse(node1.equivalent(node4))
def test_topic_nodes(self): node = PatternNode() self.assertIsNotNone(node) self.assertFalse(node.has_nodes()) self.assertFalse(node.has_topic()) node = PatternNode() node.add_topic(PatternTopicNode()) self.assertFalse(node.has_nodes()) self.assertTrue(node.has_topic())
def add_topic_to_node(self, topic_element, base_node): current_node = PatternTopicNode() current_node = base_node.add_topic(current_node) head_text = self.get_text_from_element(topic_element) if head_text is not None: current_node = self._parse_text(head_text, current_node) added_child = False for sub_element in topic_element: new_node = PatternGraph.node_from_element(sub_element) current_node = current_node.add_child(new_node) tail_text = self.get_tail_from_element(sub_element) if tail_text is not None: current_node = self._parse_text(tail_text, current_node) added_child = True if head_text is None: if added_child is False: raise ParserException("Topic node text is empty", xml_element=topic_element) return current_node
def test_consume_topic(self): node = PatternNode() self.assertIsNotNone(node) node.add_topic(PatternTopicNode()) match_context = MatchContext(max_search_depth=100, max_search_timeout=100) words = Sentence(self._client_context, text="__TOPIC__") result = node.consume(self._client_context, match_context, words, 0, Match.WORD, 1, parent=False) self.assertIsNone(result)
def test_node_exists(self): node = PatternNode() self.assertIsNotNone(node) self.assert_child_node_exists(node, PatternWordNode("word"), PatternWordNode("word")) self.assert_child_node_exists(node, PatternPriorityWordNode("priority"), PatternPriorityWordNode("priority")) self.assert_child_node_exists(node, PatternOneOrMoreWildCardNode('_'), PatternOneOrMoreWildCardNode('_')) self.assert_child_node_exists(node, PatternOneOrMoreWildCardNode('*'), PatternOneOrMoreWildCardNode('*')) self.assert_child_node_exists(node, PatternZeroOrMoreWildCardNode('#'), PatternZeroOrMoreWildCardNode('#')) self.assert_child_node_exists(node, PatternZeroOrMoreWildCardNode('^'), PatternZeroOrMoreWildCardNode('^')) self.assert_child_node_exists(node, PatternSetNode({}, "setname"), PatternSetNode([], "setname")) self.assert_child_node_exists(node, PatternBotNode({}, "botname"), PatternBotNode([], "botname")) self.assert_child_node_exists(node, PatternISetNode({}, "word1 word2"), PatternISetNode([], "word1 word2")) self.assert_child_node_exists( node, PatternRegexNode({"pattern": "^LEGION$"}, None), PatternRegexNode({"pattern": "^LEGION$"}, None)) self.assert_child_node_exists( node, PatternRegexNode({"template": "LEGION"}, None), PatternRegexNode({"template": "LEGION"}, None)) topic1 = PatternTopicNode() topic2 = PatternTopicNode() self.assertIsNone(node._node_exists(topic1)) node.add_topic(topic1) new_node = node._node_exists(topic1) self.assertIsNotNone(new_node) self.assertEquals(new_node, topic1) new_node = node.add_topic(topic2) self.assertIsNotNone(new_node) self.assertEquals(new_node, topic1) that1 = PatternThatNode() that2 = PatternThatNode() self.assertIsNone(node._node_exists(that1)) node.add_that(that1) new_node = node._node_exists(that1) self.assertIsNotNone(new_node) self.assertEquals(new_node, that1) new_node = node.add_that(that2) self.assertIsNotNone(new_node) self.assertEquals(new_node, that1) template1 = PatternTemplateNode(None) template2 = PatternTemplateNode(None) self.assertIsNone(node._node_exists(template1)) node.add_template(template1) new_node = node._node_exists(template1) self.assertIsNotNone(new_node) self.assertEquals(new_node, template1) new_node = node.add_template(template2) self.assertIsNotNone(new_node) self.assertEquals(new_node, template1) node.dump("") self.assertEqual( node.to_xml(None, None), """<priority word="priority"></priority> <zerormore wildcard="^"> </zerormore> <zerormore wildcard="#"> </zerormore> <oneormore wildcard="_"> </oneormore> <oneormore wildcard="*"> </oneormore> <topic></topic> <that></that> <template></template> <word word="word"></word> <set name="SETNAME"> </set><bot property="botname"> </bot><iset words="WORD1 WORD2"></iset> <regex pattern="^LEGION$"></regex> <regex template="LEGION"></regex> """)
def test_init(self): node = PatternTopicNode() self.assertIsNotNone(node) self.assertFalse(node.is_root()) self.assertFalse(node.is_priority()) self.assertFalse(node.is_wildcard()) self.assertFalse(node.is_zero_or_more()) self.assertFalse(node.is_one_or_more()) self.assertFalse(node.is_set()) self.assertFalse(node.is_bot()) self.assertFalse(node.is_template()) self.assertFalse(node.is_that()) self.assertTrue(node.is_topic()) self.assertFalse(node.is_wildcard()) self.assertFalse(node.is_iset()) self.assertFalse(node.is_nlu()) self.assertIsNotNone(node.children) self.assertFalse(node.has_children()) self.assertTrue(node.equivalent(PatternTopicNode())) self.assertEqual( node.to_string(), "TOPIC [*] [P(0)^(0)#(0)C(0)_(0)*(0)To(0)Th(0)Te(0)]") self.assertEqual(node.to_string(verbose=False), "TOPIC") self.assertEqual("<topic></topic>\n", node.to_xml(self._client_context))
def test_init(self): node = PatternTopicNode() self.assertIsNotNone(node) self.assertFalse(node.is_root()) self.assertFalse(node.is_priority()) self.assertFalse(node.is_wildcard()) self.assertFalse(node.is_zero_or_more()) self.assertFalse(node.is_one_or_more()) self.assertFalse(node.is_set()) self.assertFalse(node.is_bot()) self.assertFalse(node.is_template()) self.assertFalse(node.is_that()) self.assertTrue(node.is_topic()) self.assertFalse(node.is_wildcard()) self.assertIsNotNone(node.children) self.assertFalse(node.has_children()) self.assertTrue(node.equivalent(PatternTopicNode())) self.assertEqual(node.to_string(), "TOPIC [*] [P(0)^(0)#(0)C(0)_(0)*(0)To(0)Th(0)Te(0)]") self.assertEqual(node.to_string(verbose=False), "TOPIC") self.assertEqual("<topic></topic>\n", node.to_xml(self._client_context))
def test_init(self): node = PatternTopicNode() self.assertIsNotNone(node) self.assertFalse(node.is_root()) self.assertFalse(node.is_priority()) self.assertFalse(node.is_wildcard()) self.assertFalse(node.is_zero_or_more()) self.assertFalse(node.is_one_or_more()) self.assertFalse(node.is_set()) self.assertFalse(node.is_bot()) self.assertFalse(node.is_template()) self.assertFalse(node.is_that()) self.assertTrue(node.is_topic()) self.assertFalse(node.is_wildcard()) self.assertIsNotNone(node.children) self.assertFalse(node.has_children()) self.assertTrue(node.equivalent(PatternTopicNode())) self.assertEqual(node.to_string(), "TOPIC [P(0)^(0)#(0)C(0)_(0)*(0)To(0)Th(0)Te(0)]")