Ejemplo n.º 1
0
        public void Parse_Document()
        {
            /* Given */
            var idl = @"
                type User {
                    name: String
                    password: String
                }

                type Query {
                }
                schema {
                    query: Query
                }
                ";

            var document = Parser.ParseDocument(idl);
            var reader   = new SdlReader(document);

            /* When */
            var schema = reader.Read().Build();
            var actual = schema.GetNamedType <ObjectType>("User");
            var fields = schema.GetFields(actual.Name);

            /* Then */
            Assert.NotNull(actual);
            Assert.Equal("User", actual.Name);
            Assert.Contains(fields, kv => kv.Key == "name" && (ScalarType)kv.Value.Type == ScalarType.String);
            Assert.Contains(fields,
                            kv => kv.Key == "password" && (ScalarType)kv.Value.Type == ScalarType.String);
        }
Ejemplo n.º 2
0
        public void EndOfFile()
        {
            var parser = new SdlReader("");

            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 3
0
        public void SimpleTag()
        {
            var node = new SdlReader("this:is a=`simple` 1 line=\"tag\" on 2021/03/27").ToAst();

            Assert.Equal(1, node.Children.Count);
            Assert.True(node.HasChildAt(0));
            Assert.True(node.HasChildCalled("this:is"));

            node = node.Children[0];
            Assert.Equal(2, node.Attributes.Count);
            Assert.Equal(3, node.Values.Count);
            Assert.Equal("is", node.Name);
            Assert.Equal("this", node.Namespace);
            Assert.Equal("this:is", node.QualifiedName);
            Assert.True(node.HasAttributeCalled("a"));
            Assert.Equal("simple", node.GetAttributeString("a"));
            Assert.True(node.HasAttributeCalled("line"));
            Assert.Equal("tag", node.GetAttributeString("line"));
            Assert.True(node.HasValueAt(0) && node.HasValueAt(1) && node.HasValueAt(2));
            Assert.Equal(1, node.GetValueInteger(0));
            Assert.True(node.GetValueBoolean(1));
            Assert.Equal(new DateTimeOffset(2021, 03, 27, 0, 0, 0, TimeSpan.Zero), node.GetValueDateTime(2));

            var asString = node.ToSdlString(false);

            Assert.StartsWith("this:is 1 true 2021/03/27 00:00:00 ", asString);
            Assert.True(asString.EndsWith("a=`simple` line=`tag` \n") || asString.EndsWith("line=`tag` a=`simple` \n"));
        }
Ejemplo n.º 4
0
        public void Children()
        {
            var parent = new SdlReader(@"
                parent name=""unga"" {
                    child id=1 name=""ugu""
                    child id=2 name=""gaga""
                    siblings {
                        brother name=""bunga""
                    }
                }
            ").ToAst().Children[0];

            Assert.Equal("unga", parent.GetAttributeString("name"));

            int expectedId = 1;

            foreach (var child in parent.GetChildrenCalled("child"))
            {
                Assert.Equal(expectedId++, child.GetAttributeInteger("id"));
            }

            var brother = parent.GetChildrenCalled("siblings").First().Children[0];

            Assert.Equal("bunga", brother.GetAttributeString("name"));
        }
Ejemplo n.º 5
0
        public void IDontKnowIfThisIsParsingProperlySoThisTestExist()
        {
            var parser = new SdlReader(
                @"`
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent congue accumsan enim, eget pretium erat lobortis id. Suspendisse dapibus velit id facilisis tincidunt. Aenean convallis nibh eget elit congue tincidunt. Fusce blandit orci ac ornare facilisis. Vivamus ut felis a metus euismod sodales. Morbi imperdiet quam lectus, a aliquam ipsum commodo faucibus. Nulla viverra dignissim odio, vitae molestie tortor semper ac. Ut at ultrices est, eget rutrum lacus.

Donec est orci, sollicitudin ac viverra sed, fermentum ut erat. Aenean sed enim eu leo dignissim iaculis nec at justo. Phasellus placerat leo sed aliquam hendrerit. Nam varius mi et sem imperdiet, accumsan semper lectus faucibus. Aenean eu ultrices est. Morbi est ligula, porttitor vitae euismod a, malesuada eget felis. Maecenas in consequat ante, vel pretium metus. Integer vitae orci tortor. Mauris non neque in sapien semper sagittis vitae eu augue. Nulla nulla elit, iaculis id gravida nec, fringilla eget lorem. Vivamus pellentesque cursus ex vitae rutrum. Integer tortor nunc, pharetra ut iaculis dignissim, efficitur blandit turpis. Aliquam erat volutpat. Quisque pulvinar velit est, nec scelerisque odio semper ac.

Nulla fermentum magna sit amet hendrerit lacinia. Pellentesque eu cursus enim. Curabitur pharetra mauris vitae semper ullamcorper. Vestibulum nec ligula accumsan, dictum ex sed, ornare mauris. Curabitur justo eros, lacinia eu eleifend quis, finibus mattis elit. Duis ac neque congue, dapibus urna vel, euismod sem. Nulla feugiat dapibus neque, vitae posuere nisl semper quis. Nam tristique consequat erat, quis vestibulum lectus tristique vitae. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc congue magna id odio auctor, ac ornare turpis aliquam. Cras eu lectus eu mauris porta venenatis.

Curabitur vitae porta quam. Nunc faucibus volutpat mauris non consectetur. Praesent vel ligula tellus. Duis mi odio, venenatis quis odio consequat, tristique volutpat lectus. In hac habitasse platea dictumst. Vestibulum et diam ullamcorper, porttitor dui id, rutrum felis. Sed condimentum ante eget nunc rutrum tincidunt eget a nisi.

Aliquam tempor, libero non tristique suscipit, orci ipsum tempus sapien, ac maximus ante ligula at mi. Suspendisse commodo semper pharetra. Suspendisse id diam dui. Integer tortor orci, ullamcorper at urna et, aliquet congue mauris. Fusce convallis nec mauris vel dictum. Integer imperdiet sodales risus, in scelerisque urna. Fusce ac libero in ex accumsan accumsan non tincidunt arcu. Curabitur aliquet orci ac est tristique, vel egestas mi malesuada. Nunc lacinia ultricies dolor quis posuere. Donec iaculis pretium est, vel tempus risus rhoncus in. Vestibulum elit erat, porttitor id condimentum in, pretium eget nulla. Nullam ac interdum quam. Praesent accumsan arcu sit amet bibendum cursus.

Nulla facilisi. Pellentesque erat risus, gravida sit amet magna vitae, eleifend vehicula risus. Sed tincidunt ultricies felis, non fringilla urna laoreet sit amet. Integer in ex dapibus, aliquet leo quis, fermentum turpis. Etiam non ornare libero. Mauris in enim sed dui efficitur dignissim. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;

Maecenas vitae libero non erat tempor ultrices. Donec a tempus mauris. In suscipit lorem sapien, nec ullamcorper ante cursus pulvinar. Nulla ac nisi lorem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut molestie non eros quis ornare. Quisque sollicitudin, dui ut feugiat tincidunt, ipsum risus convallis metus, lobortis rhoncus magna leo eu tellus. Duis at quam turpis. Integer et nisl facilisis, vehicula erat vitae, sagittis nisi.

Quisque in auctor lectus, sit amet porta mauris. Donec ac nulla vitae erat vestibulum tempus a non tortor. Phasellus sapien nisl, condimentum porta cursus vitae, dapibus sit amet nisl. Praesent sed augue magna. Sed urna risus, aliquam sit amet sem quis, elementum tempus diam. Donec molestie nisi eget ultrices hendrerit. Mauris vitae lacus venenatis, consequat augue a, iaculis nisl. Praesent molestie, velit sit amet ornare tincidunt, nisl est vehicula sapien, auctor tempor quam dolor vitae turpis. Quisque fermentum maximus ex, eget gravida velit rhoncus quis. Etiam at lacus eu neque varius bibendum sit amet sed est. Praesent efficitur erat id massa auctor tincidunt. Proin convallis eleifend justo, nec accumsan nibh luctus eu. Maecenas mollis tincidunt enim, eu placerat nunc rutrum in.

Vivamus lacinia ipsum ac venenatis interdum. Nam fringilla a metus ut eleifend. Curabitur dolor lectus, maximus a nulla sit amet, faucibus convallis lectus. Vestibulum consequat augue elit, id egestas sapien eleifend ac. Fusce finibus dolor a risus congue, a tristique augue accumsan. Nam sollicitudin, lectus vel gravida viverra, erat ante rhoncus urna, et ornare eros elit et leo. Sed condimentum, sapien vitae ultrices volutpat, erat arcu venenatis sapien, eu pretium risus velit quis ipsum. Duis porttitor turpis at purus faucibus tempor quis quis nulla. Vivamus aliquam sollicitudin scelerisque. Suspendisse ornare nec leo varius hendrerit. Praesent pellentesque urna velit, at euismod tellus rhoncus sed. Morbi bibendum erat urna. Vivamus mauris enim, euismod ac efficitur sit amet, euismod vitae erat. Sed tincidunt dolor a eros vestibulum tincidunt. Sed lacinia, ante nec efficitur bibendum, lectus augue vestibulum turpis, sed commodo justo justo non mauris. Aenean ornare sapien leo, id congue leo vestibulum eu.

Cras eu mi rutrum, tempus augue euismod, semper lectus. Etiam tempus est vitae porta vestibulum. Mauris sagittis odio nulla, at facilisis lorem malesuada in. Sed porttitor bibendum lobortis. Vivamus rhoncus quis neque id accumsan. Maecenas id massa sit amet odio rutrum sollicitudin. Ut mattis erat id enim tincidunt, non volutpat risus molestie. Aliquam erat volutpat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec molestie tellus id mi dignissim, et elementum libero elementum. 
`"
                );

            parser.Read();
            Assert.Equal(SdlTokenType.StringBackQuoted, parser.TokenType);
            Assert.Contains("Cras eu mi rutrum", parser.ValueSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 6
0
        public void Parse_EnumType()
        {
            /* Given */
            var idl = @"
                enum Episode {
                  NEWHOPE
                  EMPIRE
                  JEDI
                }

                type Query {
                }
                schema {
                    query: Query
                }
                ";

            var document = Parser.ParseDocument(idl);
            var reader   = new SdlReader(document);

            /* When */
            var actual = reader.Read().Build().GetNamedType <EnumType>("Episode");

            /* Then */
            Assert.Equal("Episode", actual.Name);
            Assert.Contains(actual.Values, kv => kv.Key == "NEWHOPE");
            Assert.Contains(actual.Values, kv => kv.Key == "EMPIRE");
            Assert.Contains(actual.Values, kv => kv.Key == "JEDI");
        }
Ejemplo n.º 7
0
        public void Parse_custom_scalar()
        {
            /* Given */
            var idl       = @"
                scalar Url

                type Query {
                }
                schema {
                    query: Query
                }
                ";
            var urlScalar = new ScalarType("Url", new StringConverter());
            var document  = Parser.ParseDocument(idl);
            var reader    = new SdlReader(document, new SchemaBuilder()
                                          .Include(urlScalar));


            /* When */
            var actual = reader.Read().Build().GetNamedType <ScalarType>("Url");

            /* Then */
            Assert.Equal("Url", actual.Name);
            Assert.Equal(urlScalar, actual);
        }
Ejemplo n.º 8
0
        void AssertCorrectVisit(string code, IEnumerable <VisitType> expectedTypes)
        {
            var visitTypes = new Queue <VisitType>(expectedTypes);
            var reader     = new SdlReader(code);
            var visitor    = new AssertingVisistor(visitTypes);

            SdlTokenPusher.ParseAndVisit(reader, new[] { visitor });
            visitor.AssertEmpty();
        }
Ejemplo n.º 9
0
        public void RawLogiclessParse()
        {
            var parser = new SdlReader(this._input.AsSpan());

            while (parser.TokenType != SdlTokenType.EndOfFile)
            {
                parser.Read();
            }
        }
Ejemplo n.º 10
0
        public void EndOfLine(string code)
        {
            var parser = new SdlReader(code);

            parser.Read();
            Assert.Equal(SdlTokenType.EndOfLine, parser.TokenType);
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 11
0
        public void EscapedNewLineWithCRLF()
        {
            var parser = new SdlReader("\\\r\nb");

            parser.Read();
            Assert.Equal(SdlTokenType.Identifier, parser.TokenType);
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 12
0
        public void StringSimple(string code, SdlTokenType stringType)
        {
            var parser = new SdlReader(code);

            parser.Read();
            Assert.Equal(stringType, parser.TokenType);
            Assert.Equal("Sdlang Rocks!", parser.ValueSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 13
0
        public void EmptyStringWithEscapedLineBreakDoesntCrash()
        {
            var parser = new SdlReader("\"\\\r\n\"");

            parser.Read();
            Assert.Equal(SdlTokenType.StringDoubleQuoted, parser.TokenType);
            Assert.Equal("\\\r\n", parser.ValueSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 14
0
        public void Numbers(string code, SdlTokenType expectedType, string expectedValue)
        {
            var parser = new SdlReader(code);

            parser.Read();
            Assert.Equal(expectedType, parser.TokenType);
            Assert.Equal(expectedValue, parser.ValueSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 15
0
        public void Base64(string code, string value)
        {
            var parser = new SdlReader(code);

            parser.Read();
            Assert.Equal(SdlTokenType.Binary, parser.TokenType);
            Assert.Equal(value, parser.ValueSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 16
0
        public void CommentMultiLine()
        {
            var parser = new SdlReader("/* \nThis\nis\na\ncomment\n */");

            parser.Read();
            Assert.Equal(SdlTokenType.Comment, parser.TokenType);
            Assert.Equal(" \nThis\nis\na\ncomment\n ", parser.ValueSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 17
0
        public void CommentMultiLineIsolatedOneLine()
        {
            var parser = new SdlReader("/* This is a comment */");

            parser.Read();
            Assert.Equal(SdlTokenType.Comment, parser.TokenType);
            Assert.Equal(" This is a comment ", parser.ValueSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 18
0
        public void CommentSingleLineIsolated(string code)
        {
            var parser = new SdlReader(code);

            parser.Read();
            Assert.Equal(SdlTokenType.Comment, parser.TokenType);
            Assert.Equal(" This is a comment", parser.ValueSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 19
0
        public void StringMultiLineDoubleQuoted()
        {
            var parser = new SdlReader("\"Hey \\\n   There lol\"");

            parser.Read();
            Assert.Equal(SdlTokenType.StringDoubleQuoted, parser.TokenType);
            Assert.Equal("Hey \\\n   There lol", parser.ValueSpan.ToString()); // ValueSpan doesn't perform any input conversion.
            Assert.Equal("Hey There lol", parser.GetString());                 // But GetString does.
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 20
0
        public void Time(string code, int days, int hours, int minutes, int seconds, int ms)
        {
            var parser = new SdlReader(code);

            parser.Read();
            Assert.Equal(SdlTokenType.TimeSpan, parser.TokenType);
            Assert.Equal(code, parser.ValueSpan.ToString());
            Assert.Equal(new TimeSpan(days, hours, minutes, seconds, ms), parser.TimeSpanValue);
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 21
0
        public void Date()
        {
            var parser = new SdlReader("2021/03/25");

            parser.Read();
            Assert.Equal(SdlTokenType.Date, parser.TokenType);
            Assert.Equal("2021/03/25", parser.ValueSpan.ToString());
            Assert.Equal(new DateTimeOffset(2021, 03, 25, 0, 0, 0, TimeSpan.Zero), parser.DateTimeValue);
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 22
0
        public void DateTime(string code, int year, int month, int day, int hour, int minute, int second, int ms, int timespanHours)
        {
            var parser = new SdlReader(code);

            parser.Read();
            Assert.Equal(SdlTokenType.DateTime, parser.TokenType);
            Assert.Equal(code, parser.ValueSpan.ToString());
            Assert.Equal(new DateTimeOffset(year, month, day, hour, minute, second, ms, TimeSpan.FromHours(timespanHours)), parser.DateTimeValue);
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 23
0
        public void ChainLineBreakDoesntCrash()
        {
            var parser = new SdlReader("\"\\\n\\\n\\\n\\\n\\\n\"");

            parser.Read();
            Assert.Equal(SdlTokenType.StringDoubleQuoted, parser.TokenType);
            Assert.Equal("\\\n\\\n\\\n\\\n\\\n", parser.ValueSpan.ToString());
            Assert.Equal("", parser.GetString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 24
0
        public void ValuesWithLeadingNewLineKeepNewLine(string code, SdlTokenType expectedType)
        {
            var parser = new SdlReader(code);

            parser.Read();
            Assert.Equal(expectedType, parser.TokenType);
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfLine, parser.TokenType);
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 25
0
        public void StringMultiLineBackQuoted() // Back quotes are WYSIWYG strings.
        {
            var parser = new SdlReader("`Hey \\\n   There lol`");

            parser.Read();
            Assert.Equal(SdlTokenType.StringBackQuoted, parser.TokenType);
            Assert.Equal("Hey \\\n   There lol", parser.ValueSpan.ToString());
            Assert.Equal("Hey \\\n   There lol", parser.GetString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 26
0
        public void IdentifierNamespace()
        {
            var parser = new SdlReader("el:lo");

            parser.Read();
            Assert.Equal(SdlTokenType.Identifier, parser.TokenType);
            Assert.Equal("el:lo", parser.ValueSpan.ToArray());
            Assert.Equal("el", parser.TagNamespaceSpan.ToArray());
            Assert.Equal("lo", parser.TagNameSpan.ToArray());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 27
0
        public void IdentifierOnlyNamespace()
        {
            var parser = new SdlReader("el:");

            parser.Read();
            Assert.Equal(SdlTokenType.Identifier, parser.TokenType);
            Assert.Equal("el:", parser.ValueSpan.ToString());
            Assert.Equal("el", parser.TagNamespaceSpan.ToString());
            Assert.Equal("", parser.TagNameSpan.ToString());
            parser.Read();
            Assert.Equal(SdlTokenType.EndOfFile, parser.TokenType);
        }
Ejemplo n.º 28
0
        private void TokenTypeAssert(string code, params SdlTokenType[] expectedTypes)
        {
            var parser = new SdlReader(code);
            var got    = new List <SdlTokenType>();

            while (parser.TokenType != SdlTokenType.EndOfFile)
            {
                parser.Read();
                got.Add(parser.TokenType);
            }

            if (!got.SequenceEqual(expectedTypes))
            {
                Assert.True(false,
                            $"Got:\n{got.Select(v => $"{v}").Aggregate((a,b)=>a+"\n"+b)}" +
                            $"\n\nExpected:\n{expectedTypes.Select(v => $"{v}").Aggregate((a,b) => a + "\n" + b)}"
                            );
            }
        }
Ejemplo n.º 29
0
        public void SimpleMatrix()
        {
            var node = new SdlReader(@"
                matrix {
                    1 1 1
                    2 2 2
                    3 3 3
                }
            ").ToAst();

            var matrix = node.Children[0];

            Assert.Equal(3, matrix.Children.Count); // 3 anonymous tags.
            Assert.Equal(18, matrix.GetChildrenCalled("content")
                         .SelectMany(c => c.Values)
                         .Select(v => v.Integer)
                         .Aggregate((a, b) => a + b)
                         );

            var asString = node.ToSdlString();

            Assert.Equal("matrix {\n    1 1 1 \n    2 2 2 \n    3 3 3 \n}\n", asString);
        }
Ejemplo n.º 30
0
        public void Parse_Document_with_types()
        {
            /* Given */
            var idl = @"
                scalar JediPowerLevel
                scalar JediTrickLevel

                enum Episode { NEWHOPE, EMPIRE, JEDI }

                interface Character {
                  id: String!
                  name: String
                  friends: [Character]
                  appearsIn: [Episode]
                }

                type Human implements Character {
                  id: String!
                  name: String
                  friends: [Character]
                  appearsIn: [Episode]
                  homePlanet: String
                }

                type Droid implements Character {
                  id: String!
                  name: String
                  friends: [Character]
                  appearsIn: [Episode]
                  primaryFunction: String
                }

                input JediPowerInput {
                    power: String
                    level: JediPowerLevel
                }

                type Query {
                }
                schema {
                    query: Query
                }
                ";

            var jediPowerLevel = new ScalarType("JediPowerLevel", new LongConverter());
            var jediTrickLevel = new ScalarType("JediTrickLevel", new DoubleConverter());

            var document = Parser.ParseDocument(idl);
            var reader   = new SdlReader(document, new SchemaBuilder()
                                         .Include(jediPowerLevel)
                                         .Include(jediTrickLevel));

            /* When */
            var schema = reader.Read().Build();
            var actual = schema.QueryTypes <INamedType>();

            /* Then */
            Assert.Contains(actual, type => type.Name == "Episode" && type is EnumType);
            Assert.Contains(actual, type => type.Name == "Character" && type is InterfaceType);
            Assert.Contains(actual, type => type.Name == "Human" && type is ObjectType);
            Assert.Contains(actual, type => type.Name == "Droid" && type is ObjectType);
            Assert.Contains(actual, type => type.Name == "JediPowerInput" && type is InputObjectType);
            Assert.Contains(actual, type => type.Name == "JediPowerLevel" && type.GetType() == typeof(ScalarType));
            Assert.Contains(actual, type => type.Name == "JediTrickLevel" && type.GetType() == typeof(ScalarType));

            var jediPowerInput = (InputObjectType)actual.Single(t => t.Name == "JediPowerInput");
            var level          = schema.GetInputField(jediPowerInput.Name, "level");

            Assert.Equal(jediPowerLevel, level.Type);
        }