protected override void updateBackingMatcher(IMatcher <IComparable> matcher, GeneralMatcherVM parent) { NumberMatcher backingMatcher = (NumberMatcher)matcher; backingMatcher.ignoredPrefix = parent.Prefix; backingMatcher.ignoredSuffix = parent.Suffix; if (DecimalSeparator != "") { backingMatcher.decimalSeparator = DecimalSeparator[0]; } else { backingMatcher.decimalSeparator = null; } if (GroupSeparator != "") { backingMatcher.groupSeparator = GroupSeparator[0]; } else { backingMatcher.groupSeparator = null; } }
public void TestNumberMatcher() { NumberMatcher matcher = new NumberMatcher(Delimiters); StringTokenizer data = new StringTokenizer("1 454 12h 0xa 0x 0xA12 0x1G 1.0 0.33 0x22.3 123.13a 1xA"); SourcePosition streamPos = new SourcePosition(0, 0, 0); // Match a single integer Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, "1"); Assert.AreEqual(data.CurrentItem, " "); data.Advance(); // Match several chars Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Type, TokenType.IntegerNumber); Assert.AreEqual(data.CurrentItem, " "); data.Advance(); // Try to match a number that is actually a word Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, "1"); data.Advance(4); // Match a hexadecimal number Assert.IsNotNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, " "); data.Advance(); // fail to match a partial hex number Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, "0"); data.Advance(3); // Match and assert value of hexadecimal number converted to decimal Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, (0xA12).ToString("D")); Assert.AreEqual(data.CurrentItem, " "); data.Advance(); // fail to match a malformed hex number Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, "0"); data.Advance(5); // Match a floating point number Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Type, TokenType.FloatingNumber); Assert.AreEqual(data.CurrentItem, " "); data.Advance(); // Match a float and assert value Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, "0.33"); Assert.AreEqual(data.CurrentItem, " "); data.Advance(); // Fail parsing a malformed hex-float Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, "0"); data.Advance(7); // Fail parsing a malformed float-hex Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, "1"); data.Advance(8); // Fail parsing a malformed hex prefix Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, "1"); data.Advance(3); Assert.IsTrue(data.AtEnd()); }
private static int GetMaxDate(NumberMatcher month) { if (month.MatcherType == NumberMatcherType.ConstInt) { switch (month.IntValue) { case 2: return(29); case 4: case 6: case 9: case 11: return(30); } } return(31); }
public void TestInvalidNumber( [Values('a')] char input) { Assert.Null(NumberMatcher.Match(input)); }
public void TestValidNumber( [Values('1')] char input) { Assert.NotNull(NumberMatcher.Match(input)); }