public void TestSRAIWithValidInput() { var testNode = StaticHelpers.GetNode("<sr/>"); _query.InputStar.Insert(0, "sraisucceeded"); _tagHandler = new Sr(_chatBot, _user, _query, _request, testNode); Assert.AreEqual("Test passed.", _tagHandler.ProcessChange()); }
public void TestSRAIEmpty() { var testNode = StaticHelpers.GetNode("<sr/>"); _tagHandler = new Sr(_chatBot, _user, _query, _request, testNode); Assert.AreEqual("", _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; }