def test_global_set_allow_overrides_with_default(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) self._client_context.bot.configuration.override_propertys = True self._client_context.brain.properties.pairs.append(["name", "fred"]) node = TemplateSetNode() self.assertIsNotNone(node) node.name = TemplateWordNode("name") node.local = False node.append(TemplateWordNode("keith")) root.append(node) self.assertEqual(len(root.children), 1) conversation = self._client_context.bot.get_conversation(self._client_context) self.assertIsNotNone(conversation) question = Question.create_from_text(self._client_context.brain.nlp.tokenizer, "Hello") conversation.record_question(question) self.assertIsNotNone(conversation.current_question()) result = node.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("keith", result) self.assertEqual("keith", conversation.property("name"))
def test_type1_node_local_nomatch(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) node = TemplateConditionNode("var1", TemplateWordNode("value1"), var_type=TemplateConditionNode.LOCAL) self.assertIsNotNone(node) node.append(TemplateWordNode("Hello")) root.append(node) self.assertEqual(len(root.children), 1) question = Question.create_from_text( self._client_context.brain.nlp.tokenizer, "Hello") self._client_context.bot.conversation( self._client_context).record_question(question) self._client_context.bot.conversation( self._client_context).current_question().set_property( "var1", "value2") result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual(result, "")
def _parse_node_with_attribs(self, graph, expression): self._name = TextUtils.tag_from_text(expression.tag) for attrib_name in expression.attrib: attrib_value = expression.attrib[attrib_name] if "<" in attrib_value and ">" in attrib_value: start = attrib_value.find("<") end = attrib_value.rfind(">") front = attrib_value[:start] middle = attrib_value[start:end + 1] back = attrib_value[end + 1:] root = TemplateNode() root.append(TemplateWordNode(front)) xml = ET.fromstring(middle) xml_node = TemplateNode() graph.parse_tag_expression(xml, xml_node) root.append(xml_node) root.append(TemplateWordNode(back)) self.set_attrib(attrib_name, root) else: self.set_attrib(attrib_name, TemplateWordNode(attrib_value)) self.parse_text(graph, self.get_text_from_element(expression)) for child in expression: graph.parse_tag_expression(child, self) self.parse_text(graph, self.get_tail_from_element(child))
def test_type2_to_xml_bot(self): root = TemplateNode() node = TemplateConditionNode("cond1", var_type=TemplateConditionNode.BOT, condition_type=2) self.assertIsNotNone(node) cond1 = TemplateConditionListItemNode(value=TemplateWordNode("value1")) cond1.append(TemplateWordNode("Word1")) node.append(cond1) cond2 = TemplateConditionListItemNode(value=TemplateWordNode("value2")) cond2.append(TemplateWordNode("Word2")) node.append(cond2) cond3 = TemplateConditionListItemNode() cond3.append(TemplateWordNode("Word3")) node.append(cond3) root.append(node) xml = root.xml_tree(self._client_context) self.assertIsNotNone(xml) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual( '<template><condition bot="cond1"><li><value>value1</value>Word1</li> <li><value>value2</value>Word2</li> <li>Word3</li></condition></template>', xml_str)
def test_type2_node_global(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) node = TemplateConditionNode("cond1", condition_type=2) self.assertIsNotNone(node) cond1 = TemplateConditionListItemNode(value=TemplateWordNode("value1")) cond1.append(TemplateWordNode("Word1")) node.append(cond1) cond2 = TemplateConditionListItemNode(value=TemplateWordNode("value2")) cond2.append(TemplateWordNode("Word2")) node.append(cond2) cond3 = TemplateConditionListItemNode() cond3.append(TemplateWordNode("Word3")) node.append(cond3) root.append(node) self.assertEqual(len(root.children), 1) self._client_context.bot.conversation( self._client_context).set_property('cond1', "value2") question = Question.create_from_text( self._client_context.brain.nlp.tokenizer, "Hello") self._client_context.bot.conversation( self._client_context).record_question(question) self._client_context.bot.conversation( self._client_context).current_question().set_property( "cond1", "value2") result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("Word2", result)
def test_type2_node_bot(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) node = TemplateConditionNode("cond1", var_type=TemplateConditionNode.BOT, condition_type=2) self.assertIsNotNone(node) cond1 = TemplateConditionListItemNode( value=TemplateWordNode("value1"), var_type=TemplateConditionNode.BOT) cond1.append(TemplateWordNode("Word1")) node.append(cond1) cond2 = TemplateConditionListItemNode( value=TemplateWordNode("value2"), var_type=TemplateConditionNode.BOT) cond2.append(TemplateWordNode("Word2")) node.append(cond2) cond3 = TemplateConditionListItemNode() cond3.append(TemplateWordNode("Word3")) node.append(cond3) root.append(node) self.assertEqual(len(root.children), 1) self._client_context.brain.properties.add_property('cond1', "value2") result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("Word2", result)
def test_carousel_node(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) carousel = TemplateCarouselNode() card = TemplateCardNode() card._image = TemplateWordNode("http://Servusai.com") card._title = TemplateWordNode("Servusai.com") card._subtitle = TemplateWordNode("The home of programr") button = TemplateButtonNode() button._text = TemplateWordNode("More...") button._url = TemplateWordNode("http://Servusai.com/aiml") card._buttons.append(button) carousel._cards.append(card) root.append(carousel) resolved = root.resolve(self._client_context) self.assertIsNotNone(resolved) self.assertEquals( "<carousel><card><image>http://Servusai.com</image><title>Servusai.com</title><subtitle>The home of programr</subtitle><button><text>More...</text><url>http://Servusai.com/aiml</url></button></card></carousel>", resolved) self.assertEquals( "<carousel><card><image>http://Servusai.com</image><title>Servusai.com</title><subtitle>The home of programr</subtitle><button><text>More...</text><url>http://Servusai.com/aiml</url></button></card></carousel>", root.to_xml(self._client_context))
def test_local_no_value(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) node = TemplateGetNode() node.name = TemplateWordNode("name") node.local = True node.append(TemplateWordNode("Fred")) self.assertIsNotNone(node) root.append(node) self.assertEqual(len(root.children), 1) self._client_context.brain.properties.add_property( "default-get", "unknown") conversation = self._client_context.bot.get_conversation( self._client_context) self.assertIsNotNone(conversation) question = Question.create_from_text( self._client_context.brain.nlp.tokenizer, "Hello") conversation.record_question(question) result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("unknown", result)
def test_local_set(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) node = TemplateSetNode() self.assertIsNotNone(node) node.name = TemplateWordNode("name") node.local = True node.append(TemplateWordNode("keith")) root.append(node) self.assertEqual(len(root.children), 1) conversation = self._client_context.bot.get_conversation(self._client_context) self.assertIsNotNone(conversation) question = Question.create_from_text(self._client_context.brain.nlp.tokenizer, "Hello") conversation.record_question(question) self.assertIsNotNone(conversation.current_question()) result = node.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("keith", result) self.assertEqual("keith", question.property("name"))
def test_xml_tree_simple(self): node = TemplateNode() node.append(TemplateWordNode("Word1")) node.append(TemplateWordNode("Word2")) xml = node.xml_tree(self._client_context) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual("<template>Word1 Word2</template>", xml_str)
def test_node(self): root = TemplateNode() node = TemplateAddTripleNode(subj=TemplateWordNode("S"), pred=TemplateWordNode("P"), obj=TemplateWordNode("O")) root.append(node) result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEquals("", result)
def test_to_xml(self): root = TemplateNode() node = TemplateAddTripleNode(subj=TemplateWordNode("S"), pred=TemplateWordNode("P"), obj=TemplateWordNode("O")) root.append(node) xml = root.xml_tree(self._client_context) self.assertIsNotNone(xml) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual("<template><addtriple><subj>S</subj><pred>P</pred><obj>O</obj></addtriple></template>", xml_str)
def test_to_xml_composite(self): node = TemplateNode() node.append(TemplateWordNode("Word1")) node.append(TemplateIdNode()) srai = TemplateSRAINode() srai.append(TemplateWordNode("Srai1")) node.append(srai) node.append(TemplateWordNode("Word2")) self.assertEqual("Word1 <id /> <srai>Srai1</srai> Word2", node.to_xml(self._client_context))
def test_node_children(self): node = TemplateNode() node.append(TemplateWordNode("Word1")) self.assertEqual(len(node.children), 1) node.append(TemplateWordNode("Word2")) self.assertEqual(len(node.children), 2) self.assertEqual("Word1 Word2", node.resolve_children_to_string(self._client_context)) self.assertEqual("Word1 Word2", node.resolve(self._client_context)) self.assertEqual("[NODE]", node.to_string())
def test_node_exception_handling(self): root = TemplateNode() node = MockTemplateDeleteTripleNode(TemplateWordNode("S"), TemplateWordNode("P"), TemplateWordNode("O")) root.append(node) result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEquals("", result)
def test_exception_handling(self): root = TemplateNode() node = MockTemplateAddTripleNode(subj=TemplateWordNode("S"), pred=TemplateWordNode("P"), obj=TemplateWordNode("O")) root.append(node) with self.assertRaises(Exception): node.resolve_to_string(self._client_context) self.assertEquals("", root.resolve(self._client_context))
def test_no_map_for_name_defaultmap_not_set(self): self._client_context.brain.maps._maps['COLOURS'] = {'BLACK': 'WHITE'} node = TemplateMapNode() node.name = TemplateWordNode("UNKNOWN") node.append(TemplateWordNode("BLACK")) root = TemplateNode() root.append(node) result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("", result)
def test_to_xml(self): root = TemplateNode() node = TemplateMapNode() node.name = TemplateWordNode("COLOURS") node.append(TemplateWordNode("BLACK")) root.append(node) xml = root.xml_tree(self._client_context) self.assertIsNotNone(xml) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual( '<template><map name="COLOURS">BLACK</map></template>', xml_str)
def test_to_xml_local_set(self): root = TemplateNode() node = TemplateSetNode() node.name = TemplateWordNode("name") node.local = True root.append(node) node.append(TemplateWordNode("keith")) xml = root.xml_tree(self._client_context) self.assertIsNotNone(xml) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual('<template><set var="name">keith</set></template>', xml_str)
def test_xml_tree_simple_composite(self): node = TemplateNode() node.append(TemplateWordNode("Word1")) node.append(TemplateIdNode()) srai = TemplateSRAINode() srai.append(TemplateWordNode("Srai1")) node.append(srai) node.append(TemplateWordNode("Word2")) xml = node.xml_tree(self._client_context) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual( "<template>Word1 <id /> <srai>Srai1</srai> Word2</template>", xml_str)
def test_to_xml(self): root = TemplateNode() node = TemplateIntervalNode() node.interval_format = TemplateWordNode("%c") node.style = TemplateWordNode("years") node.interval_from = TemplateWordNode("Thu Oct 6 16:35:11 2014") node.interval_to = TemplateWordNode("Fri Oct 7 16:35:11 2016") root.append(node) xml = root.xml_tree(self._client_context) self.assertIsNotNone(xml) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual('<template><interval format="%c" style="years"><from>Thu Oct 6 16:35:11 2014</from><to>Fri Oct 7 16:35:11 2016</to></interval></template>', xml_str)
def test_to_xml(self): root = TemplateNode() random = TemplateRandomNode() root.append(random) random.append(TemplateWordNode("Test1")) random.append(TemplateWordNode("Test2")) xml = root.xml_tree(self._client_context) self.assertIsNotNone(xml) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual( "<template><random><li>Test1</li><li>Test2</li></random></template>", xml_str)
def test_no_var_defaultmap_set(self): self._client_context.brain.maps._maps['COLOURS'] = {'BLACK': 'WHITE'} self._client_context.brain.properties.add_property( 'default-map', "test_value") node = TemplateMapNode() node.name = TemplateWordNode("COLOURS") node.append(TemplateWordNode("UNKNOWN")) root = TemplateNode() root.append(node) result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("test_value", result)
def test_to_xml(self): root = TemplateNode() node = TemplateFirstNode() root.append(node) word1 = TemplateWordNode("Word1") node.append(word1) word2 = TemplateWordNode("Word2") node.append(word2) xml = root.xml_tree(self._client_context) self.assertIsNotNone(xml) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual("<template><first>Word1 Word2</first></template>", xml_str)
def test_type1_to_xml_bot(self): root = TemplateNode() node = TemplateConditionNode("name1", TemplateWordNode("value1"), var_type=TemplateConditionNode.BOT) node.append(TemplateWordNode("Hello")) root.append(node) xml = root.xml_tree(self._client_context) self.assertIsNotNone(xml) xml_str = ET.tostring(xml, "utf-8").decode("utf-8") self.assertEqual( '<template><condition bot="name1"><value>value1</value>Hello</condition></template>', xml_str)
def test_add_pattern_to_graph_basic_zero_or_more_with_patterns(self): graph = PatternGraph(self._client_context.brain.aiml_parser) topic_element = ET.fromstring('<topic>*</topic>') that_element = ET.fromstring('<that>*</that>') element = ET.fromstring('<pattern># HELLO</pattern>') template_graph_root = TemplateWordNode("RESPONSE1") graph.add_pattern_to_graph(element, topic_element, that_element, template_graph_root) element = ET.fromstring('<pattern>WELL HI THERE</pattern>') template_graph_root = TemplateWordNode("RESPONSE2") graph.add_pattern_to_graph(element, topic_element, that_element, template_graph_root)
def test_node_with_timeout(self): self._client_context.brain.configuration.overrides._allow_system_aiml = True root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) node = TemplateSystemNode() node.timeout = 1000 self.assertIsNotNone(node) node.append(TemplateWordNode('echo "Hello World"')) root.append(node) self.assertEqual(len(root.children), 1) response = root.resolve(self._client_context) self.assertIsNotNone(response) if os.name == 'posix': self.assertEqual(response, "Hello World") elif os.name == 'nt': self.assertEqual(response, '"Hello World"') else: self.assertFalse(True)
def test_node(self): learnf_path = self.get_os_specific_path() + os.sep + "testid.aiml" if os.path.exists(learnf_path): os.remove(learnf_path) self.assertFalse(os.path.exists(learnf_path)) root = TemplateNode() self.assertIsNotNone(root) learn = TemplateLearnfNode() self.assertIsNotNone(learn) learn_cat = LearnCategory( ET.fromstring("<pattern>HELLO LEARN</pattern>"), ET.fromstring("<topic>*</topic>"), ET.fromstring("<that>*</that>"), TemplateWordNode("LEARN")) learn.append(learn_cat) root.append(learn) self.assertEqual(1, len(root.children)) self._client_context.brain.configuration.defaults._learn_path = self.get_os_specific_path( ) resolved = root.resolve(self._client_context) self.assertIsNotNone(resolved) self.assertEqual("", resolved) self.assertTrue(os.path.exists(learnf_path)) if os.path.exists(learnf_path): os.remove(learnf_path) self.assertFalse(os.path.exists(learnf_path))
def test_internal_map_succesor(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) node = TemplateMapNode() node.name = TemplateWordNode("SUCCESSOR") node.append(TemplateWordNode("1")) root.append(node) self.assertEqual(len(root.children), 1) result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("2", result)
def test_internal_map_plural(self): root = TemplateNode() self.assertIsNotNone(root) self.assertIsNotNone(root.children) self.assertEqual(len(root.children), 0) node = TemplateMapNode() node.name = TemplateWordNode("PLURAL") node.append(TemplateWordNode("HORSE")) root.append(node) self.assertEqual(len(root.children), 1) result = root.resolve(self._client_context) self.assertIsNotNone(result) self.assertEqual("HORSES", result)