public void TestWithValidData() { var testNode = StaticHelpers.GetNode( @"<random> <li>random 1</li> <li>random 2</li> <li>random 3</li> <li>random 4</li> <li>random 5</li> </random>"); _tagHandler = new Random(testNode); Assert.IsTrue(_possibleResults.Contains(_tagHandler.ProcessChange())); }
public void TestWithBadListItems() { var testNode = StaticHelpers.GetNode( @"<random> <li>random 1</li> <bad>bad 1</bad> <li>random 2</li> <bad>bad 2</bad> <li>random 3</li> <bad>bad 3</bad> <li>random 4</li> <bad>bad 4</bad> <li>random 5</li> <bad>bad 5</bad> </random>"); _tagHandler = new Random(testNode); Assert.IsTrue(_possibleResults.Contains(_tagHandler.ProcessChange())); }
/// <summary> /// Recursively evaluates the template nodes returned from the ChatBot /// </summary> /// <param name="node">the node to evaluate</param> /// <param name="query">the query that produced this node</param> /// <param name="request">the request from the user</param> /// <param name="user">the user who originated the request</param> /// <returns>the output string</returns> private string ProcessNode(XmlNode node, SubQuery query, Request request, User user) { // process the node var tagName = node.Name.ToLower(); if (tagName == "template") { var templateResult = new StringBuilder(); if (node.HasChildNodes) { // recursively check foreach (XmlNode childNode in node.ChildNodes) { templateResult.Append(ProcessNode(childNode, query, request, user)); } } return templateResult.ToString(); } AIMLTagHandler tagHandler = null; switch (tagName) { case "bot": tagHandler = new Bot(node); break; case "condition": tagHandler = new Condition(user, node); break; case "date": tagHandler = new Date(node); break; case "formal": tagHandler = new Formal(node); break; case "gender": tagHandler = new AIMLTagHandlers.Gender(query, request, node); break; case "get": tagHandler = new Get(user, node); break; case "gossip": tagHandler = new Gossip(user, node); break; case "id": tagHandler = new Id(user, node); break; case "input": tagHandler = new Input(user, request, node); break; case "javascript": tagHandler = new Javascript(node); break; case "learn": tagHandler = new Learn(node); break; case "lowercase": tagHandler = new Lowercase(node); break; case "person": tagHandler = new Person(query, request, node); break; case "person2": tagHandler = new Person2(query, request, node); break; case "random": tagHandler = new Random(node); break; case "sentence": tagHandler = new Sentence(query, request, node); break; case "set": tagHandler = new Set(user, node); break; case "size": tagHandler = new Size(node); break; case "sr": tagHandler = new Sr(this, user, query, request, node); break; case "srai": tagHandler = new Srai(this, user, request, node); break; case "star": tagHandler = new Star(query, request, node); break; case "system": tagHandler = new SystemTag(node); break; case "that": tagHandler = new That(user, request, node); break; case "thatstar": tagHandler = new ThatStar(query, request, node); break; case "think": tagHandler = new Think(node); break; case "topicstar": tagHandler = new Topicstar(query, request, node); break; case "uppercase": tagHandler = new Uppercase(node); break; case "version": tagHandler = new Version(node); break; default: Log.ErrorFormat("Unknown AIML tag: {0}", tagName); break; } if (Equals(null, tagHandler)) { return node.InnerText; } if (tagHandler.IsRecursive) { if (node.HasChildNodes) { // recursively check foreach (XmlNode childNode in node.ChildNodes) { if (childNode.NodeType != XmlNodeType.Text) { childNode.InnerXml = ProcessNode(childNode, query, request, user); } } } return tagHandler.ProcessChange(); } var resultNodeInnerXML = tagHandler.ProcessChange(); var resultNode = AIMLTagHandler.GetNode("<node>" + resultNodeInnerXML + "</node>"); if (resultNode.HasChildNodes) { var recursiveResult = new StringBuilder(); // recursively check foreach (XmlNode childNode in resultNode.ChildNodes) { recursiveResult.Append(ProcessNode(childNode, query, request, user)); } return recursiveResult.ToString(); } return resultNode.InnerXml; }
public void TestWithNoListItems() { var testNode = StaticHelpers.GetNode("<random/>"); _tagHandler = new Random(testNode); Assert.AreEqual("", _tagHandler.ProcessChange()); }