Example #1
0
        public void testResultHandlers()
        {
            XmlNode testNode = StaticHelpers.GetNode("<input/>");
            Result mockResult = new Result(_user, _request);
            _botTagHandler = new Input(_user, _request, testNode);
            Assert.AreEqual("", _botTagHandler.ProcessChange());
            _request = new Request("Sentence 1. Sentence 2", _user);
            mockResult.InputSentences.Add("Result 1");
            mockResult.InputSentences.Add("Result 2");
            _user.AddResult(mockResult);
            Result mockResult2 = new Result(_user, _request);
            mockResult2.InputSentences.Add("Result 3");
            mockResult2.InputSentences.Add("Result 4");
            _user.AddResult(mockResult2);

            Assert.AreEqual("Result 3", _botTagHandler.ProcessChange());

            testNode = StaticHelpers.GetNode("<input index=\"1\"/>");
            _botTagHandler = new Input(_user, _request, testNode);
            Assert.AreEqual("Result 3", _botTagHandler.ProcessChange());

            testNode = StaticHelpers.GetNode("<input index=\"2,1\"/>");
            _botTagHandler = new Input(_user, _request, testNode);
            Assert.AreEqual("Result 1", _botTagHandler.ProcessChange());

            testNode = StaticHelpers.GetNode("<input index=\"1,2\"/>");
            _botTagHandler = new Input(_user, _request, testNode);
            Assert.AreEqual("Result 4", _botTagHandler.ProcessChange());

            testNode = StaticHelpers.GetNode("<input index=\"2,2\"/>");
            _botTagHandler = new Input(_user, _request, testNode);
            Assert.AreEqual("Result 2", _botTagHandler.ProcessChange());

            testNode = StaticHelpers.GetNode("<input index=\"1,3\"/>");
            _botTagHandler = new Input(_user, _request, testNode);
            Assert.AreEqual("", _botTagHandler.ProcessChange());

            testNode = StaticHelpers.GetNode("<input index=\"3\"/>");
            _botTagHandler = new Input(_user, _request, testNode);
            Assert.AreEqual("", _botTagHandler.ProcessChange());
        }
Example #2
0
 /// <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;
 }