Exemplo n.º 1
0
        private ParsedScrubfuTag GetParsedTagFromTagString(string tagName, string tagOptions, int?columnArrayIndex, int lineNum)
        {
            ParsedScrubfuTag tag = null;

            switch (tagName.ToUpper())
            {
            case "MA":
            case "MASK":
                tag = new MaskTag(tagOptions, columnArrayIndex);
                break;

            case "RE":
            case "REPLACE":
                tag = new ReplaceTag(tagOptions, columnArrayIndex);
                break;

            case "RA":
            case "RANDOM":
                tag = new RandomTag(tagOptions, columnArrayIndex);
                break;

            case "FZ":
            case "FUZZ":
                tag = new FuzzTag(tagOptions, columnArrayIndex);
                break;
            }

            if (tag != null && !tag.ValidateTag())
            {
                LogWarning(string.Format("A potentially invalidly formatted Scrubfu tag was found while processing line {0}.", lineNum));
                tag = null;
            }

            return(tag);
        }
Exemplo n.º 2
0
        public void Apply_EmptyString_EmptyReturned()
        {
            var TagOptions = string.Empty;
            var text       = string.Empty;

            var    randomTag = new RandomTag(TagOptions);
            string result    = randomTag.Apply(text);

            Assert.True((result != null && result.Length == 0), "Empty input text should return empty output text");
        }
Exemplo n.º 3
0
        public void Apply_LowerAlphas_ReturnsRandomizedNumber()
        {
            // This test caters for mask rules in accordance with the test input
            var TagOptions = "";
            var text       = "aaaa.aa.a.aaaa!";

            var randomTag = new RandomTag(TagOptions);

            string result = randomTag.Apply(text);

            Match match = Regex.Match(result, @"[a-z]{4}\.[a-z]{2}\.[a-z]\.[a-z]{4}!", RegexOptions.Singleline);

            Assert.True(match.Success, "Fuzz logic should work according to the random tag rules");
        }
Exemplo n.º 4
0
        public void Apply_Numerics_ReturnsRandomizedNumber()
        {
            // This test caters for mask rules in accordance with the test input
            var TagOptions = "";
            var text       = "+NNN(NNN) NNN-NNNN";

            var randomTag = new RandomTag(TagOptions);

            string result = randomTag.Apply(text);

            Match match = Regex.Match(result, @"\+[0-9]{3}\([0-9]{3}\) [0-9]{3}-[0-9]{4}", RegexOptions.Singleline);

            Assert.True(match.Success, "Fuzz logic should work according to the random tag rules");
        }
Exemplo n.º 5
0
        public void Apply_NonRandomOption_ExceptionReturned(Type type)
        {
            var TagOptions      = string.Empty;
            var text            = "mock text";
            var returnException = new Exception();

            dynamic nonRandomOption = Activator.CreateInstance(type);
            var     randomTag       = new RandomTag(TagOptions);

            try
            {
                randomTag.Apply(text, nonRandomOption);
            }
            catch (Exception ex)
            {
                returnException = ex;
            }

            Assert.True((returnException.GetType().Equals(new NoOptionsSuppliedException().GetType())), "Exception should be thrown if a non RandomOption is supplied.");
        }
Exemplo n.º 6
0
        /// <summary>
        /// Recursively evaluates the template nodes returned from the bot
        /// </summary>
        /// <param name="node">the node to evaluate</param>
        /// <param name="request">the request from the user</param>
        /// <param name="result">the result to be sent to the user</param>
        /// <param name="user">the user who originated the request</param>
        /// <returns>the output string</returns>
        private string ProcessNode(XmlNode node, Request request, Result result, User user)
        {
            StringBuilder newInnerText = new StringBuilder();

            if (node.HasChildNodes)
            {
                // recursively check
                foreach (XmlNode childNode in node.ChildNodes)
                {
                    childNode.InnerText = this.ProcessNode(childNode, request, result, user);
                }
            }

            // process the node itself
            AIMLTagHandler tagHandler = null;

            switch (node.Name.ToLower())
            {
            case "bot":
                tagHandler = new BotTag(this, user, request, result, node);
                break;

            case "condition":
                tagHandler = new ConditionTag(this, user, request, result, node);
                break;

            case "date":
                tagHandler = new DateTag(this, user, request, result, node);
                break;

            case "formal":
                tagHandler = new FormalTag(this, user, request, result, node);
                break;

            case "gender":
                tagHandler = new GenderTag(this, user, request, result, node);
                break;

            case "get":
                tagHandler = new GetTag(this, user, request, result, node);
                break;

            case "gossip":
                tagHandler = new GossipTag(this, user, request, result, node);
                break;

            case "id":
                tagHandler = new IdTag(this, user, request, result, node);
                break;

            case "input":
                tagHandler = new InputTag(this, user, request, result, node);
                break;

            case "javascript":
                tagHandler = new JavascriptTag(this, user, request, result, node);
                break;

            case "learn":
                tagHandler = new LearnTag(this, user, request, result, node);
                break;

            case "lowercase":
                tagHandler = new LowercaseTag(this, user, request, result, node);
                break;

            case "person":
                tagHandler = new PersonTag(this, user, request, result, node);
                break;

            case "person2":
                tagHandler = new Person2Tag(this, user, request, result, node);
                break;

            case "random":
                tagHandler = new RandomTag(this, user, request, result, node);
                break;

            case "sentence":
                tagHandler = new SentenceTag(this, user, request, result, node);
                break;

            case "set":
                tagHandler = new SetTag(this, user, request, result, node);
                break;

            case "size":
                tagHandler = new SizeTag(this, user, request, result, node);
                break;

            case "sr":
                tagHandler = new SrTag(this, user, request, result, node);
                break;

            case "srai":
                tagHandler = new SraiTag(this, user, request, result, node);
                break;

            case "star":
                tagHandler = new StarTag(this, user, request, result, node);
                break;

            case "system":
                tagHandler = new SystemTag(this, user, request, result, node);
                break;

            case "that":
                tagHandler = new ThatTag(this, user, request, result, node);
                break;

            case "thatstar":
                tagHandler = new ThatStarTag(this, user, request, result, node);
                break;

            case "think":
                tagHandler = new ThinkTag(this, user, request, result, node);
                break;

            case "topicstar":
                tagHandler = new TopicStarTag(this, user, request, result, node);
                break;

            case "uppercase":
                tagHandler = new UppercaseTag(this, user, request, result, node);
                break;

            case "version":
                tagHandler = new VersionTag(this, user, request, result, node);
                break;

            default:
                tagHandler = this.GetBespokeTags(user, request, result, node);
                break;
            }
            if (object.Equals(null, tagHandler))
            {
                return(node.InnerText);
            }
            else
            {
                return(tagHandler.Transform());
            }
        }