public void TestGetQuotedString_EscapeAtEnd()
        {
            var cursor = new PatternCursor("'abc\\");

            Assert.AreEqual('\'', GetNextCharacter(cursor));
            Assert.Throws <InvalidPatternException>(() => cursor.GetQuotedString('\''));
        }
        public void TestGetEmbeddedPattern_QuotedCloseCharacter()
        {
            var cursor = new PatternCursor("x<oops'>'");

            cursor.MoveNext();
            Assert.Throws <InvalidPatternException>(() => cursor.GetEmbeddedPattern('<', '>'));
        }
        public void TestGetEmbeddedPattern_WrongOpenCharacter()
        {
            var cursor = new PatternCursor("x(oops)");

            cursor.MoveNext();
            Assert.Throws <InvalidPatternException>(() => cursor.GetEmbeddedPattern('<', '>'));
        }
Exemple #4
0
        public void GetEmbeddedPattern_Invalid(string text)
        {
            var cursor = new PatternCursor(text);

            cursor.MoveNext();
            Assert.Throws <InvalidPatternException>(() => cursor.GetEmbeddedPattern());
        }
        public void TestGetRepeatCount_ExceedsMax()
        {
            var cursor = new PatternCursor("aaa");

            Assert.IsTrue(cursor.MoveNext());
            Assert.Throws <InvalidPatternException>(() => cursor.GetRepeatCount(2));
        }
        public void TestGetQuotedString_MissingCloseQuote()
        {
            var  cursor    = new PatternCursor("'abc");
            char openQuote = GetNextCharacter(cursor);

            Assert.Throws <InvalidPatternException>(() => cursor.GetQuotedString(openQuote));
        }
Exemple #7
0
        public void GetQuotedString_Invalid(string pattern)
        {
            var cursor = new PatternCursor(pattern);

            Assert.AreEqual('\'', GetNextCharacter(cursor));
            Assert.Throws <InvalidPatternException>(() => cursor.GetQuotedString('\''));
        }
 private static void HandleZone(PatternCursor pattern,
                                SteppedPatternBuilder <ZonedDateTime, ZonedDateTimeParseBucket> builder)
 {
     builder.AddField(PatternFields.Zone, pattern.Current);
     builder.AddParseAction(ParseZone);
     builder.AddFormatAction((value, sb) => sb.Append(value.Zone.Id));
 }
 private static void HandleZoneAbbreviation(PatternCursor pattern,
                                            SteppedPatternBuilder <ZonedDateTime, ZonedDateTimeParseBucket> builder)
 {
     builder.AddField(PatternFields.ZoneAbbreviation, pattern.Current);
     builder.SetFormatOnly();
     builder.AddFormatAction((value, sb) => sb.Append(value.GetZoneInterval().Name));
 }
        private static void HandleOffset(PatternCursor pattern,
                                         SteppedPatternBuilder <OffsetDateTime, OffsetDateTimeParseBucket> builder)
        {
            builder.AddField(PatternFields.EmbeddedOffset, pattern.Current);
            string embeddedPattern = pattern.GetEmbeddedPattern();
            var    offsetPattern   = OffsetPattern.Create(embeddedPattern, builder.FormatInfo).UnderlyingPattern;

            builder.AddEmbeddedPattern(offsetPattern, (bucket, offset) => bucket.Offset = offset, zdt => zdt.Offset);
        }
        public void TestGetQuotedString_Empty()
        {
            var    cursor    = new PatternCursor("''");
            char   openQuote = GetNextCharacter(cursor);
            string actual    = cursor.GetQuotedString(openQuote);

            Assert.AreEqual(string.Empty, actual);
            Assert.IsFalse(cursor.MoveNext());
        }
        public void TestGetQuotedString_HandlesEscapedCloseQuote()
        {
            var    cursor    = new PatternCursor("'ab\\'c'");
            char   openQuote = GetNextCharacter(cursor);
            string actual    = cursor.GetQuotedString(openQuote);

            Assert.AreEqual("ab'c", actual);
            Assert.IsFalse(cursor.MoveNext());
        }
        public void TestGetQuotedString_HandlesDoubleQuote()
        {
            var    cursor    = new PatternCursor("\"abc\"");
            char   openQuote = GetNextCharacter(cursor);
            string actual    = cursor.GetQuotedString(openQuote);

            Assert.AreEqual("abc", actual);
            Assert.IsFalse(cursor.MoveNext());
        }
        public void TestGetEmbeddedPattern_Valid_WithEscaping()
        {
            var cursor = new PatternCursor(@"x<HH:\Tmm>y");

            cursor.MoveNext();
            string embedded = cursor.GetEmbeddedPattern('<', '>');

            Assert.AreEqual(@"HH:\Tmm", embedded);
            Assert.AreEqual('>', cursor.Current);
        }
Exemple #15
0
        public void GetQuotedString_Valid(string pattern, string expected)
        {
            var cursor = new PatternCursor(pattern);

            Assert.AreEqual('\'', GetNextCharacter(cursor));
            string actual = cursor.GetQuotedString('\'');

            Assert.AreEqual(expected, actual);
            Assert.IsFalse(cursor.MoveNext());
        }
        public void TestGetQuotedString_HandlesOtherQuote()
        {
            var cursor = new PatternCursor("[abc]");

            GetNextCharacter(cursor);
            string actual = cursor.GetQuotedString(']');

            Assert.AreEqual("abc", actual);
            Assert.IsFalse(cursor.MoveNext());
        }
Exemple #17
0
        public void GetRepeatCount_Valid(string text, int expectedCount)
        {
            var cursor = new PatternCursor(text);

            Assert.IsTrue(cursor.MoveNext());
            int actual = cursor.GetRepeatCount(10);

            Assert.AreEqual(expectedCount, actual);
            ValidateCurrentCharacter(cursor, expectedCount - 1, 'a');
        }
        public void TestGetQuotedString()
        {
            var cursor = new PatternCursor("'abc'");

            Assert.AreEqual('\'', GetNextCharacter(cursor));
            string actual = cursor.GetQuotedString('\'');

            Assert.AreEqual("abc", actual);
            Assert.IsFalse(cursor.MoveNext());
        }
        public void TestGetRepeatCount_Three()
        {
            var cursor = new PatternCursor("aaa");

            Assert.IsTrue(cursor.MoveNext());
            int actual = cursor.GetRepeatCount(10);

            Assert.AreEqual(3, actual);
            ValidateCurrentCharacter(cursor, 2, 'a');
        }
        public void TestGetEmbeddedPattern_Valid()
        {
            var cursor = new PatternCursor("x<HH:mm>y");

            cursor.MoveNext();
            string embedded = cursor.GetEmbeddedPattern('<', '>');

            Assert.AreEqual("HH:mm", embedded);
            ValidateCurrentCharacter(cursor, 7, '>');
        }
Exemple #21
0
        public void GetEmbeddedPattern_Valid(string pattern, string expectedEmbedded)
        {
            var cursor = new PatternCursor(pattern);

            cursor.MoveNext();
            string embedded = cursor.GetEmbeddedPattern();

            Assert.AreEqual(expectedEmbedded, embedded);
            ValidateCurrentCharacter(cursor, expectedEmbedded.Length + 2, '>');
        }
        public void TestGetQuotedString_NotAtEnd()
        {
            var    cursor    = new PatternCursor("'abc'more");
            char   openQuote = GetNextCharacter(cursor);
            string actual    = cursor.GetQuotedString(openQuote);

            Assert.AreEqual("abc", actual);
            ValidateCurrentCharacter(cursor, 4, '\'');

            Assert.AreEqual('m', GetNextCharacter(cursor));
        }
Exemple #23
0
        private static void AssertValidNodaPattern(CultureInfo culture, string pattern)
        {
            PatternCursor cursor = new PatternCursor(pattern);

            while (cursor.MoveNext())
            {
                if (cursor.Current == '\'')
                {
                    cursor.GetQuotedString('\'');
                }
                else
                {
                    Assert.IsTrue(ExpectedCharacters.Contains(cursor.Current),
                                  "Pattern '" + pattern + "' contains unquoted, unexpected characters");
                }
            }
            // Check that the pattern parses
            LocalTimePattern.Create(pattern, culture);
        }
        private static void HandleOffset(PatternCursor pattern,
                                         SteppedPatternBuilder <OffsetDateTime, OffsetDateTimeParseBucket> builder)
        {
            builder.AddField(PatternFields.EmbeddedOffset, pattern.Current);
            string embeddedPattern = pattern.GetEmbeddedPattern('<', '>');
            var    offsetPattern   = OffsetPattern.Create(embeddedPattern, builder.FormatInfo).UnderlyingPattern;

            builder.AddParseAction((value, bucket) =>
            {
                var result = offsetPattern.ParsePartial(value);
                if (!result.Success)
                {
                    return(result.ConvertError <OffsetDateTime>());
                }
                bucket.Offset = result.Value;
                return(null);
            });
            builder.AddFormatAction((value, sb) => offsetPattern.AppendFormat(value.Offset, sb));
        }
Exemple #25
0
        private static void HandleDayOfMonth(PatternCursor pattern, SteppedPatternBuilder <AnnualDate, AnnualDateParseBucket> builder)
        {
            int           count = pattern.GetRepeatCount(2);
            PatternFields field;

            switch (count)
            {
            case 1:
            case 2:
                field = PatternFields.DayOfMonth;
                // Handle real maximum value in the bucket
                builder.AddParseValueAction(count, 2, pattern.Current, 1, 99, (bucket, value) => bucket.DayOfMonth = value);
                builder.AddFormatLeftPad(count, value => value.Day, assumeNonNegative: true, assumeFitsInCount: count == 2);
                break;

            default:
                throw new InvalidOperationException("Invalid count!");
            }
            builder.AddField(field, pattern.Current);
        }
        private static void AssertValidNodaPattern(CultureInfo culture, string pattern)
        {
            PatternCursor cursor = new PatternCursor(pattern);

            while (cursor.MoveNext())
            {
                if (cursor.Current == '\'')
                {
                    cursor.GetQuotedString('\'');
                }
                else
                {
                    // We'll never do anything "special" with non-ascii characters anyway,
                    // so we don't mind if they're not quoted.
                    if (cursor.Current < '\u0080')
                    {
                        Assert.IsTrue(ExpectedCharacters.Contains(cursor.Current),
                                      "Pattern '" + pattern + "' contains unquoted, unexpected characters");
                    }
                }
            }
            // Check that the pattern parses
            LocalTimePattern.Create(pattern, culture);
        }
Exemple #27
0
 private static void HandlePlus(PatternCursor pattern, SteppedPatternBuilder <Duration, DurationParseBucket> builder)
 {
     builder.AddField(PatternFields.Sign, pattern.Current);
     builder.AddRequiredSign((bucket, positive) => bucket.IsNegative = !positive, duration => duration.Ticks >= 0);
 }
 private static void HandleMinus(PatternCursor pattern, SteppedPatternBuilder <Duration, DurationParseBucket> builder)
 {
     builder.AddField(PatternFields.Sign, pattern.Current);
     builder.AddNegativeOnlySign((bucket, positive) => bucket.IsNegative = !positive, duration => duration.FloorDays >= 0);
 }
 private static void HandleMinus(PatternCursor pattern, SteppedPatternBuilder <Offset, OffsetParseBucket> builder)
 {
     builder.AddField(PatternFields.Sign, pattern.Current);
     builder.AddNegativeOnlySign((bucket, positive) => bucket.IsNegative = !positive, offset => offset.Milliseconds >= 0);
 }