Esempio n. 1
0
        public void ParseInt64_Negative()
        {
            var value = new ValueCursor("-56x");

            Assert.True(value.MoveNext());
            long result;

            Assert.IsNull(value.ParseInt64 <string>(out result));
            Assert.AreEqual(-56L, result);
        }
Esempio n. 2
0
        public void ParseInt64Digits_TooFewDigits()
        {
            var value = new ValueCursor("a12b");

            Assert.True(value.MoveNext());
            ValidateCurrentCharacter(value, 0, 'a');
            Assert.True(value.MoveNext());
            Assert.False(value.ParseInt64Digits(3, 3, out long actual));
            ValidateCurrentCharacter(value, 1, '1');
        }
        public void Parse_Partial_Invalid()
        {
            var value = new ValueCursor("x20:y");

            value.MoveNext();
            value.MoveNext();
            var result = SimpleOffsetPattern.ParsePartial(value);

            Assert.Throws <UnparsableValueException>(() => result.GetValueOrThrow());
        }
Esempio n. 4
0
        public void ParseInt64Digits_Maximum()
        {
            var value = new ValueCursor("12");

            Assert.True(value.MoveNext());
            long actual;

            Assert.True(value.ParseInt64Digits(1, 2, out actual));
            Assert.AreEqual(12, actual);
        }
Esempio n. 5
0
        public void ParseInt64_Simple()
        {
            var value = new ValueCursor("56x");

            Assert.True(value.MoveNext());
            Assert.IsNull(value.ParseInt64 <string>(out long result));
            Assert.AreEqual(56L, result);
            // Cursor ends up post-number
            Assert.AreEqual(2, value.Index);
        }
Esempio n. 6
0
        public void ParseInt64Digits_NoNumber()
        {
            var value = new ValueCursor("abc");

            Assert.True(value.MoveNext());
            long actual;

            Assert.False(value.ParseInt64Digits(1, 2, out actual));
            ValidateCurrentCharacter(value, 0, 'a');
        }
Esempio n. 7
0
        public void Match_Char()
        {
            var value = new ValueCursor("abc");

            Assert.True(value.MoveNext(), "GetNext() 1");
            Assert.True(value.Match('a'), "First character");
            Assert.True(value.Match('b'), "Second character");
            Assert.True(value.Match('c'), "Third character");
            Assert.False(value.MoveNext(), "GetNext() end");
        }
Esempio n. 8
0
        public void ParseInt64_MaxValue()
        {
            var value = new ValueCursor("9223372036854775807");

            Assert.True(value.MoveNext());
            long result;

            Assert.IsNull(value.ParseInt64 <string>(out result));
            Assert.AreEqual(long.MaxValue, result);
        }
Esempio n. 9
0
        public void ParseInt64_NumberOutOfRange_MinValueLeadingDigits()
        {
            var value = new ValueCursor("-9223372036854775809");

            Assert.True(value.MoveNext());
            long result;

            Assert.IsNotNull(value.ParseInt64 <string>(out result));
            // Cursor has not moved
            Assert.AreEqual(0, value.Index);
        }
Esempio n. 10
0
        public void ParseFraction_NonAscii_NeverMatches()
        {
            // Arabic-Indic digits 0 and 1. See
            // http://www.unicode.org/charts/PDF/U0600.pdf
            var value = new ValueCursor("\u0660\u0661");

            Assert.True(value.MoveNext());
            int actual;

            Assert.False(value.ParseFraction(2, 2, out actual, true));
        }
Esempio n. 11
0
        public void ParseInt64Digits_LargeNumber()
        {
            var value = new ValueCursor("9999999999999");

            Assert.True(value.MoveNext());
            long actual;

            Assert.True(value.ParseInt64Digits(1, 13, out actual));
            Assert.AreEqual(actual, 9999999999999L);
            Assert.Greater(9999999999999L, int.MaxValue);
        }
Esempio n. 12
0
        public void ParseInt64Digits_MinimumNonDigits()
        {
            var value = new ValueCursor("1abc");

            Assert.True(value.MoveNext());
            long actual;

            Assert.True(value.ParseInt64Digits(1, 2, out actual));
            Assert.AreEqual(1, actual);
            ValidateCurrentCharacter(value, 1, 'a');
        }
Esempio n. 13
0
        public void ParseInt64Digits_Minimum()
        {
            var value = new ValueCursor("1");

            value.MoveNext();
            long actual;

            Assert.True(value.ParseInt64Digits(1, 2, out actual));
            Assert.AreEqual(1, actual);
            ValidateEndOfString(value);
        }
Esempio n. 14
0
        public void ParseInt64Digits_MaximumMoreDigits()
        {
            var value = new ValueCursor("1234");

            Assert.True(value.MoveNext());
            long actual;

            Assert.True(value.ParseInt64Digits(1, 2, out actual));
            Assert.AreEqual(12, actual);
            ValidateCurrentCharacter(value, 2, '3');
        }
Esempio n. 15
0
        public void ParseInt64_NegativeThenNonDigit()
        {
            var value = new ValueCursor("-x");

            Assert.True(value.MoveNext());
            long result;

            Assert.IsNotNull(value.ParseInt64 <string>(out result));
            // Cursor has not moved
            Assert.AreEqual(0, value.Index);
        }
Esempio n. 16
0
        public void ParseInt64_TooManyDigits()
        {
            // We can cope as far as 9223372036854775807, but the trailing 1 causes a failure.
            var value = new ValueCursor("92233720368547758071");

            value.Move(0);
            var parseResult = value.ParseInt64 <string>(out long result);

            Assert.IsFalse(parseResult.Success);
            Assert.IsInstanceOf <UnparsableValueException>(parseResult.Exception);
            Assert.AreEqual(0, value.Index); // Cursor hasn't moved
        }
        public void ParsePartial_ValidAtEnd()
        {
            var value = new ValueCursor("x17:30");

            value.MoveNext();
            value.MoveNext();
            var result = SimpleOffsetPattern.ParsePartial(value);

            Assert.AreEqual(Offset.FromHoursAndMinutes(17, 30), result.Value);
            // Finish just after the value, which in this case is at the end.
            Assert.AreEqual(TextCursor.Nul, value.Current);
        }
Esempio n. 18
0
            public ParseResult <TResult> ParsePartial(ValueCursor cursor)
            {
                TBucket bucket = bucketProvider();

                foreach (var action in parseActions)
                {
                    ParseResult <TResult> failure = action(cursor, bucket);
                    if (failure != null)
                    {
                        return(failure);
                    }
                }
                return(bucket.CalculateValue(usedFields, cursor.Value));
            }
        public void ParsePartial_ValidInMiddle()
        {
            var value = new ValueCursor("x17:30y");

            value.MoveNext();
            value.MoveNext();
            // Start already looking at the value to parse
            Assert.AreEqual('1', value.Current);
            var result = SimpleOffsetPattern.ParsePartial(value);

            Assert.AreEqual(Offset.FromHoursAndMinutes(17, 30), result.Value);
            // Finish just after the value
            Assert.AreEqual('y', value.Current);
        }
Esempio n. 20
0
        public ParseResult <T> ParsePartial(ValueCursor cursor)
        {
            int index = cursor.Index;

            foreach (IPartialPattern <T> pattern in parsePatterns)
            {
                cursor.Move(index);
                ParseResult <T> result = pattern.ParsePartial(cursor);
                if (result.Success || !result.ContinueAfterErrorWithMultipleFormats)
                {
                    return(result);
                }
            }
            return(ParseResult <T> .NoMatchingFormat);
        }
Esempio n. 21
0
 /// <summary>
 /// Find the longest match from a given set of candidate strings, updating the index/length of the best value
 /// accordingly.
 /// </summary>
 private static void FindLongestMatch(CompareInfo compareInfo, ValueCursor cursor, IReadOnlyList <string> values, ref int bestIndex, ref int longestMatch)
 {
     for (int i = 0; i < values.Count; i++)
     {
         string candidate = values[i];
         if (candidate is null || candidate.Length <= longestMatch)
         {
             continue;
         }
         if (cursor.MatchCaseInsensitive(candidate, compareInfo, false))
         {
             bestIndex    = i;
             longestMatch = candidate.Length;
         }
     }
 }
        public void FormatOnly_ParsingFails()
        {
            var builder = new SteppedPatternBuilder <LocalDate, SampleBucket>(
                NodaFormatInfo.InvariantInfo, () => new SampleBucket());

            builder.AddFormatAction((date, sb) => sb.Append("Formatted"));
            builder.SetFormatOnly();
            var pattern = builder.Build(LocalDate.MinIsoValue);

            var value  = new ValueCursor("xyz");
            var result = pattern.ParsePartial(value);

            Assert.AreEqual(ParseResult <LocalDate> .FormatOnlyPattern, result);
            result = pattern.Parse("xyz");
            Assert.AreEqual(ParseResult <LocalDate> .FormatOnlyPattern, result);
        }
Esempio n. 23
0
        internal void TestParsePartial()
        {
            var pattern = CreatePartialPattern();

            Assert.IsNull(Message);
            var cursor = new ValueCursor("^" + Text + "#");

            // Move to the ^
            cursor.MoveNext();
            // Move to the start of the text
            cursor.MoveNext();
            var result      = pattern.ParsePartial(cursor);
            var actualValue = result.Value;

            Assert.AreEqual(Value, actualValue);
            Assert.AreEqual('#', cursor.Current);
        }
Esempio n. 24
0
            public ParseResult <TResult> ParsePartial(ValueCursor cursor)
            {
                // At the moment we shouldn't get a partial parse for a format-only pattern, but
                // let's guard against it for the future.
                if (parseActions is null)
                {
                    return(ParseResult <TResult> .FormatOnlyPattern);
                }

                TBucket bucket = bucketProvider();

                foreach (var action in parseActions)
                {
                    ParseResult <TResult>?failure = action(cursor, bucket);
                    if (failure != null)
                    {
                        return(failure);
                    }
                }
                return(bucket.CalculateValue(usedFields, cursor.Value));
            }