private void ReadToken()
        {
            // arrange
            byte[] source = Encoding.UTF8.GetBytes(
                "\"\"\"helloWorld_123\r\n\t\tfoo\r\n\tbar\"\"\"");
            var reader = new Utf8GraphQLReader(source);

            // act
            reader.Read();

            // assert
            Assert.Equal(
                "helloWorld_123\r\n\t\tfoo\r\n\tbar",
                reader.GetString(reader.Value));

            Assert.Equal(
                "helloWorld_123\n\tfoo\nbar",
                reader.GetString());

            Assert.Equal(TokenKind.BlockString, reader.Kind);
            Assert.Equal(1, reader.Line);
            Assert.Equal(1, reader.Column);
            Assert.Equal(0, reader.Start);
            Assert.Equal(32, reader.End);
        }
示例#2
0
 // TODO : resources
 public static void UnexpectedProperty(
     Utf8GraphQLReader reader,
     ReadOnlySpan <byte> fieldName) =>
 throw new SyntaxException(
           reader,
           string.Format(
               CultureInfo.InvariantCulture,
               "Unexpected request property name `{0}` found.",
               Utf8GraphQLReader.GetString(fieldName, false)));
示例#3
0
 public static SyntaxException ExpectedStringOrNull(Utf8GraphQLReader reader) =>
 new SyntaxException(
     reader,
     string.Format(
         CultureInfo.InvariantCulture,
         "Expected a string-token or a null-token, " +
         "but found a {0}-token with value `{1}`.",
         reader.Kind.ToString(),
         reader.GetString()));
        private void EscapeCharacters(string sourceText, string expectedResult)
        {
            // arrange
            byte[] source = Encoding.UTF8.GetBytes(sourceText);
            var    reader = new Utf8GraphQLReader(source);

            // act
            reader.Read();

            // assert
            Assert.Equal(expectedResult, reader.GetString());
            Assert.Equal(TokenKind.String, reader.Kind);
        }
        private void ReadToken(string sourceText)
        {
            // arrange
            byte[] source = Encoding.UTF8.GetBytes(sourceText);
            var    reader = new Utf8GraphQLReader(source);

            // act
            reader.Read();

            // assert
            Assert.Equal("üähelloWorld_123", reader.GetString());
            Assert.Equal(TokenKind.String, reader.Kind);
        }
        private void ParseMessageProperty(ref Message message)
        {
            ReadOnlySpan <byte> fieldName = _reader.Expect(TokenKind.String);

            _reader.Expect(TokenKind.Colon);

            switch (fieldName[0])
            {
            case _t:
                if (fieldName.SequenceEqual(_type))
                {
                    message.Type = ParseStringOrNull();
                    return;
                }
                break;

            case _i:
                if (fieldName.SequenceEqual(_id))
                {
                    message.Id = ParseStringOrNull();
                    return;
                }
                break;

            case _p:
                if (fieldName.SequenceEqual(_payload))
                {
                    int start = _reader.Start;
                    message.HasPayload = !IsNullToken();
                    int end = SkipValue();
                    message.Payload = _reader.GraphQLData.Slice(
                        start, end - start);
                    return;
                }
                break;

            default:
                // TODO : resources
                throw new SyntaxException(
                          _reader,
                          string.Format(
                              CultureInfo.InvariantCulture,
                              "Unexpected request property name `{0}` found.",
                              Utf8GraphQLReader.GetString(fieldName, false)));
            }
        }
        private void ReadToken_SingleLine_ParsesCorrectly()
        {
            // arrange
            byte[] source = Encoding.UTF8.GetBytes(
                "\"\"\"helloWorld_123\"\"\"");
            var reader = new Utf8GraphQLReader(source);

            // act
            reader.Read();

            // assert
            Assert.Equal("helloWorld_123", reader.GetString());
            Assert.Equal(TokenKind.BlockString, reader.Kind);
            Assert.Equal(1, reader.Line);
            Assert.Equal(1, reader.Column);
            Assert.Equal(0, reader.Start);
            Assert.Equal(19, reader.End);
        }
示例#8
0
        private void UnescapeString()
        {
            // arrange
            byte[] source = Encoding.UTF8.GetBytes("\"abc\"");
            var    reader = new Utf8GraphQLReader(source);

            reader.Read();

            // act
            var buffer = new byte[3 * 4];
            var span   = buffer.AsSpan();

            reader.UnescapeValue(ref span);

            // assert
            Assert.Equal(3, span.Length);
            Assert.Equal("abc", Utf8GraphQLReader.GetString(span));
        }
        private void ReadToken_WithEscapedTrippleQuote2_EscapeIsReplacedWithActualQuotes()
        {
            // arrange
            byte[] source = Encoding.UTF8.GetBytes(
                "\"\"\"hello\\\"\"\"World_123\r\n\t\tfoo\r\n\tbar\"\"\"");
            var reader = new Utf8GraphQLReader(source);

            // act
            reader.Read();

            // assert
            Assert.Equal(
                "hello\"\"\"World_123\n\tfoo\nbar",
                reader.GetString());

            Assert.Equal(TokenKind.BlockString, reader.Kind);
            Assert.Equal(1, reader.Line);
            Assert.Equal(1, reader.Column);
            Assert.Equal(0, reader.Start);
            Assert.Equal(36, reader.End);
        }
        private void ReadToken_WithTrailingBlanks_BlanksAreRemoved()
        {
            // arrange
            byte[] source = Encoding.UTF8.GetBytes(
                "\"\"\"helloWorld_123\r\n\t\tfoo\r\n\tbar" +
                "\r\n\t\r\n\t\r\n\t\r\n\t\"\"\"");
            var reader = new Utf8GraphQLReader(source);

            // act
            reader.Read();

            // assert
            Assert.Equal(
                "helloWorld_123\n\tfoo\nbar",
                reader.GetString());

            Assert.Equal(TokenKind.BlockString, reader.Kind);
            Assert.Equal(1, reader.Line);
            Assert.Equal(1, reader.Column);
            Assert.Equal(0, reader.Start);
            Assert.Equal(44, reader.End);
        }
示例#11
0
        private void ParseRequestProperty(ref Request request)
        {
            ReadOnlySpan <byte> fieldName = _reader.Expect(TokenKind.String);

            _reader.Expect(TokenKind.Colon);

            switch (fieldName[0])
            {
            case _o:
                if (fieldName.SequenceEqual(_operationName))
                {
                    request.OperationName = ParseStringOrNull();
                    return;
                }
                break;

            case _n:
                if (fieldName.SequenceEqual(_queryName))
                {
                    request.NamedQuery = ParseStringOrNull();
                    return;
                }
                break;

            case _q:
                if (fieldName.SequenceEqual(_query))
                {
                    request.IsQueryNull = IsNullToken();
                    if (!request.IsQueryNull &&
                        _reader.Kind != TokenKind.String)
                    {
                        // TODO : resources
                        throw new SyntaxException(
                                  _reader,
                                  "The query field must be a string or null.");
                    }
                    request.Query = _reader.Value;
                    _reader.MoveNext();
                    return;
                }
                break;

            case _v:
                if (fieldName.SequenceEqual(_variables))
                {
                    request.Variables = ParseObjectOrNull();
                    return;
                }
                break;

            case _e:
                if (fieldName.SequenceEqual(_extensions))
                {
                    request.Extensions = ParseObjectOrNull();
                    return;
                }
                break;
            }

            // TODO : resources
            throw new SyntaxException(
                      _reader,
                      string.Format(
                          CultureInfo.InvariantCulture,
                          "Unexpected request property name `{0}` found.",
                          Utf8GraphQLReader.GetString(fieldName, false)));
        }