示例#1
0
        public void RepeatOneCharacter()
        {
            var oneCharRule = new LiteralRule("oneChar", null, "g");
            var rule        = new RepeatRule("Repeat", null, oneCharRule, null, null) as IRule;
            var match       = rule.Match(new ExplorerContext("ggggg")).FirstOrDefault();

            Assert.IsNotNull(match, "Success");
            Assert.AreEqual(rule.RuleName, match.Rule.RuleName, "Rule");
            Assert.AreEqual(5, match.Text.Length, "MatchLength");
            Assert.AreEqual(5, ToList(match.ComputeOutput()).Count(), "Contents");
        }
示例#2
0
        public void Literal()
        {
            var rule    = new LiteralRule("Lit", null, "great") as IRule;
            var match   = rule.Match(new ExplorerContext("great")).FirstOrDefault();
            var nomatch = rule.Match(new ExplorerContext("h")).FirstOrDefault();

            Assert.IsNotNull(match, "Success");
            Assert.AreEqual(rule.RuleName, match.Rule.RuleName, "Rule");
            Assert.AreEqual(5, match.Text.Length, "Content");

            Assert.IsNull(nomatch, "Failure");
        }
示例#3
0
        public void SequenceWithInterleave()
        {
            var interleave = new LiteralRule(null, null, " ");
            var rule       = new SequenceRule("seq", null, new[]
            {
                new TaggedRule(new LiteralRule(null, null, "|")),
                new TaggedRule("t", new LiteralRule(null, null, "a"))
            });
            var text  = "  | a  ";
            var match = rule.Match(new ExplorerContext(text, interleave)).FirstOrDefault();

            Assert.IsNotNull(match, "Success");
            Assert.AreEqual(rule.RuleName, match.Rule.RuleName, "seq");
            Assert.AreEqual(1, ToMap(match.ComputeOutput()).Count(), "Contents");
        }
示例#4
0
        public void RepeatCharacterWithCardinality()
        {
            var oneCharRule = new LiteralRule("oneChar", null, "g");
            var testSet     = new[]
            {
                Tuple.Create <string, int?, int?, bool>("gg", 2, 2, true),
                Tuple.Create <string, int?, int?, bool>("gg", 1, 2, true),
                Tuple.Create <string, int?, int?, bool>("gg", null, 2, true),
                Tuple.Create <string, int?, int?, bool>("gg", 2, null, true),
                Tuple.Create <string, int?, int?, bool>("ggg", 2, 2, false),
                Tuple.Create <string, int?, int?, bool>("ggg", 2, 3, true),
                Tuple.Create <string, int?, int?, bool>("g", 2, 2, false),
                Tuple.Create <string, int?, int?, bool>("g", 2, 3, false)
            };

            for (int i = 0; i != testSet.Length; ++i)
            {
                var text      = testSet[i].Item1;
                var min       = testSet[i].Item2;
                var max       = testSet[i].Item3;
                var isSuccess = testSet[i].Item4;
                var rule      = new RepeatRule("Repeat", null, oneCharRule, min, max) as IRule;
                var match     = rule.Match(new ExplorerContext(text)).FirstOrDefault();

                if (!isSuccess)
                {
                    Assert.IsTrue(
                        match == null || match.Text.Length != text.Length,
                        $"Test case #{i} should have failed");
                }
                else
                {
                    Assert.IsNotNull(match, $"Success - {i}");
                    Assert.AreEqual(rule.RuleName, match.Rule.RuleName, $"Rule - {i}");
                    Assert.AreEqual(text.Length, match.Text.Length, $"MatchLength - {i}");
                    Assert.AreEqual(text.Length, ToList(match.ComputeOutput()).Count(), $"Contents - {i}");
                }
            }
        }