Exemple #1
0
        public void RequiredSequenceTest(string data, int ruleNumber, bool shouldPass)
        {
            var          parser = new LexicalParser <TokenType>(_Rules[ruleNumber]);
            ParserResult result = parser.Parse(data);

            result.Should().NotBeNull();
            result.IsSuccess.Should().Be(shouldPass);
        }
        public void LetNodeSingleFailTests(string data)
        {
            var          parser = new LexicalParser <TokenType>(_onlyPlusRules);
            ParserResult result = parser.Parse(data);

            result.Should().NotBeNull();
            result.IsSuccess.Should().BeFalse();
        }
Exemple #3
0
        public void ForumlaTest(string data, bool shouldPass)
        {
            var          parser = new LexicalParser <TokenType>(_forumalRules);
            ParserResult result = parser.Parse(data);

            result.Should().NotBeNull();
            result.IsSuccess.Should().Be(shouldPass);
        }
Exemple #4
0
        private void TestParsedEchoVerb <T>(ParserResult <object> result, string input)
            where T : EchoVerb
        {
            result.Should().BeOfType(typeof(Parsed <object>), "the args should have been parsed.");

            Parsed <object> parsedResult = (Parsed <object>)result;

            parsedResult.Value.Should().BeOfType(typeof(T), $"the args should have been mapped to the {typeof(T).Name} type.");

            ((T)parsedResult.Value).Input.Should().Be(input);
        }
        private void TestParsedAddVerb <T>(ParserResult <object> result, int first, int second)
            where T : AddVerb
        {
            result.Should().BeOfType(typeof(Parsed <object>), "the args should have been parsed.");

            Parsed <object> parsedResult = (Parsed <object>)result;

            parsedResult.Value.Should().BeOfType(typeof(T), $"the args should have been mapped to the {typeof(T).Name} type.");

            T addResult = (T)parsedResult.Value;

            addResult.First.Should().Be(first);
            addResult.Second.Should().Be(second);
        }
        public void NoClassNameFailTest()
        {
            IEnumerable <string> data = new List <string>
            {
                "public class",
                "{",
                "    public static string Cleanse(string name)",
                "}",
            };

            var          parser = new LexicalParser <TokenType>(_rules);
            ParserResult result = parser.Parse(string.Join(" ", data));

            result.Should().NotBeNull();
            result.IsSuccess.Should().BeFalse();
        }
        public void NoStaticTest()
        {
            IEnumerable <string> data = new List <string>
            {
                "public class TestClass",
                "{",
                "    public static string Cleanse(string name)",
                "}",
            };

            var          parser = new LexicalParser <TokenType>(_rules);
            ParserResult result = parser.Parse(string.Join(" ", data));

            result.Should().NotBeNull();
            result.IsSuccess.Should().BeTrue();

            result.RootNode.OfType <Symbol <TokenType> >().Any(x => Language.SymStatic.Equals(x)).Should().BeFalse();
            result.RootNode.OfType <Expression <TokenType> >().Single(x => Language.ClassName.Equals(x)).Value.Should().Be("TestClass");
            result.RootNode.OfType <Expression <TokenType> >().Any(x => Language.SubclassName.Equals(x)).Should().BeFalse();
        }
        public void LetDifferentOpsValues(string data, string[] testValues)
        {
            var          parser = new LexicalParser <TokenType>(_Rules);
            ParserResult result = parser.Parse(data);

            result.Should().NotBeNull();
            result.IsSuccess.Should().BeTrue();

            result.RootNode.OfType <Expression <TokenType> >().Single(x => Language.VariableName.Equals(x)).Value.Should().Be("MyVariable");
            result.RootNode.OfType <Expression <TokenType> >().Single(x => Language.VariableType.Equals(x)).Value.Should().Be("double");

            var values = result.RootNode.OfType <Expression <TokenType> >()
                         .Where(x => Language.Variable.Equals(x));

            values.Count().Should().Be(testValues.Length);

            values.Select(x => x.Value).OrderBy(x => x)
            .Zip(testValues.OrderBy(x => x), (o, i) => new { o, i })
            .All(x => x.o == x.i)
            .Should().BeTrue();
        }
        public void LetNodeSingleVariableTest()
        {
            IEnumerable <string> data = new List <string>
            {
                "let EmptyLong long? = null;",
            };

            var          parser = new LexicalParser <TokenType>(_onlyPlusRules);
            ParserResult result = parser.Parse(string.Join(" ", data));

            result.Should().NotBeNull();
            result.IsSuccess.Should().BeTrue();

            result.RootNode.OfType <Expression <TokenType> >().Single(x => Language.VariableName.Equals(x)).Value.Should().Be("EmptyLong");
            result.RootNode.OfType <Expression <TokenType> >().Single(x => Language.VariableType.Equals(x)).Value.Should().Be("long?");

            var values = result.RootNode.OfType <Expression <TokenType> >()
                         .Where(x => Language.Variable.Equals(x));

            values.Count().Should().Be(1);
            values.First().Value.Should().Be("null");
        }
        public void FullClassTest()
        {
            IEnumerable <string> data = new List <string>
            {
                "public static class NameCleaner",
                "{",
                "    public static string Cleanse(string name)",
                "    {",
                "        Dictionary<string, string> changes = new Dictionary<string, string>();",
                "",
                "        changes.Add(\" Twp\", \" Township\");",
                "        changes.Add(\", Town of\", \"\");",
                "        changes.Add(\" Town of\", \"\");",
                "        changes.Add(\", Village of\", \"\");",
                "",
                "        foreach (KeyValuePair<string, string> kvp in changes)",
                "        {",
                "            if (true == name.EndsWith(kvp.Key))",
                "            {",
                "                name = name.Substring(0, name.Length - kvp.Key.Length) + kvp.Value;",
                "            }",
                "        }",
                "",
                "        return name;",
                "    }",
                "}",
            };

            var          parser = new LexicalParser <TokenType>(_rules);
            ParserResult result = parser.Parse(string.Join(" ", data));

            result.Should().NotBeNull();
            result.IsSuccess.Should().BeTrue();

            result.RootNode.OfType <Symbol <TokenType> >().Any(x => Language.SymStatic.Equals(x)).Should().BeTrue();
            result.RootNode.OfType <Expression <TokenType> >().Single(x => Language.ClassName.Equals(x)).Value.Should().Be("NameCleaner");
            result.RootNode.OfType <Expression <TokenType> >().Any(x => Language.SubclassName.Equals(x)).Should().BeFalse();
        }