Author: znek
Date: Wed Dec 30 22:09:55 2015
New Revision: 39245
URL: http://svn.gna.org/viewcvs/gnustep?rev=39245&view=rev
Log:
Fixed a long standing NSNumberFormatter bug in conjunction with zero padding
and (old) NSNumberFormatterBehavior10_0
Modified:
libs/base/trunk/ChangeLog
libs/base/trunk/Source/NSNumberFormatter.m
libs/base/trunk/Tests/base/NSNumberFormatter/basic.m
Modified: libs/base/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=39245&r1=39244&r2=39245&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog (original)
+++ libs/base/trunk/ChangeLog Wed Dec 30 22:09:55 2015
@@ -1,3 +1,11 @@
+2015-12-30 Marcus Mueller <[email protected]>
+
+ * Source/NSNumberFormatter.m: fixed a subtle off-by-one formatter
+ bug in conjunction with zero padding and NSNumberFormatterBehavior10_0.
+
+ * Tests/base/NSNumberFormatter/basic.m: added a test for this
+ particular issue
+
2015-12-29 Marcus Mueller <[email protected]>
* Source/NSUserNotification.m: "NSUserNotificationDefaultSoundName"
Modified: libs/base/trunk/Source/NSNumberFormatter.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSNumberFormatter.m?rev=39245&r1=39244&r2=39245&view=diff
==============================================================================
--- libs/base/trunk/Source/NSNumberFormatter.m (original)
+++ libs/base/trunk/Source/NSNumberFormatter.m Wed Dec 30 22:09:55 2015
@@ -1271,16 +1271,18 @@
//sort out the padding for the integer part
intPartRange = [useFormat rangeOfCharacterFromSet: placeHolders];
- if (NSMaxRange(intPartRange) < ([useFormat length] - 1))
- {
+ if (intPartRange.location != NSNotFound)
+ {
+ int nextFormatCharLoc = intPartRange.location;
while (([placeHolders characterIsMember:
- [useFormat characterAtIndex: NSMaxRange(intPartRange)]]
+ [useFormat characterAtIndex: nextFormatCharLoc]]
|| [[useFormat substringWithRange:
- NSMakeRange(NSMaxRange(intPartRange), 1)] isEqual:
+ NSMakeRange(nextFormatCharLoc, 1)] isEqual:
defaultThousandsSeparator])
- && NSMaxRange(intPartRange) < [useFormat length] - 1)
+ && nextFormatCharLoc < [useFormat length] - 1)
{
intPartRange.length++;
+ nextFormatCharLoc++;
}
}
intPad = [[[useFormat substringWithRange: intPartRange]
@@ -1298,7 +1300,7 @@
NSRange ipRange;
ipRange =
- NSMakeRange(0, [intPad length] - [intPartString length] + 1);
+ NSMakeRange(0, [intPad length] - [intPartString length]);
[intPartString insertString:
[intPad substringWithRange: ipRange] atIndex: 0];
[intPartString replaceOccurrencesOfString: @"_"
Modified: libs/base/trunk/Tests/base/NSNumberFormatter/basic.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Tests/base/NSNumberFormatter/basic.m?rev=39245&r1=39244&r2=39245&view=diff
==============================================================================
--- libs/base/trunk/Tests/base/NSNumberFormatter/basic.m (original)
+++ libs/base/trunk/Tests/base/NSNumberFormatter/basic.m Wed Dec 30
22:09:55 2015
@@ -49,6 +49,11 @@
PASS_EQUAL([fmt stringForObjectValue: num], @" 001234",
"numeric and space padding OK")
+ [fmt setFormat: @"000"];
+ num = [[[NSNumber alloc] initWithInt: 10] autorelease];
+ PASS_EQUAL([fmt stringForObjectValue: num], @"010",
+ "numeric padding OK")
+
[fmt setAllowsFloats: YES];
num = [[[NSNumber alloc] initWithFloat: 1234.56] autorelease];
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs