diff --git a/Foundation/CPNumberFormatter.j b/Foundation/CPNumberFormatter.j index 8b485ef13..a9823cf97 100644 --- a/Foundation/CPNumberFormatter.j +++ b/Foundation/CPNumberFormatter.j @@ -309,13 +309,16 @@ var CPNumberFormatterStyleKey = @"CPNumberFormatterStyleKey", _numberStyle = [aCoder decodeIntForKey:CPNumberFormatterStyleKey]; _minimumFractionDigits = [aCoder decodeIntForKey:CPNumberFormatterMinimumFractionDigitsKey]; _maximumFractionDigits = [aCoder decodeIntForKey:CPNumberFormatterMaximumFractionDigitsKey]; - _minimum = [aCoder decodeIntForKey:CPNumberFormatterMinimumKey]; - _maximum = [aCoder decodeIntForKey:CPNumberFormatterMaximumKey]; _roundingMode = [aCoder decodeIntForKey:CPNumberFormatterRoundingModeKey]; _groupingSeparator = [aCoder decodeObjectForKey:CPNumberFormatterGroupingSeparatorKey]; _currencyCode = [aCoder decodeObjectForKey:CPNumberFormatterCurrencyCodeKey]; _currencySymbol = [aCoder decodeObjectForKey:CPNumberFormatterCurrencySymbolKey]; _generatesDecimalNumbers = [aCoder decodeBoolForKey:CPNumberFormatterGeneratesDecimalNumbers]; + + // We decode _minimum and _maximum as object here because otherwise, nil values are not preserved + // causing a min and max always set to 0 after an decoding. + _minimum = [aCoder decodeObjectForKey:CPNumberFormatterMinimumKey]; + _maximum = [aCoder decodeObjectForKey:CPNumberFormatterMaximumKey]; } return self; diff --git a/Tests/Foundation/CPNumberFormatterTest.j b/Tests/Foundation/CPNumberFormatterTest.j index 5f474ed5d..81d994824 100644 --- a/Tests/Foundation/CPNumberFormatterTest.j +++ b/Tests/Foundation/CPNumberFormatterTest.j @@ -251,4 +251,34 @@ [self assert:1.23456 equals:generated]; } +- (void)testEncodingDecodingWithZeroMinMaxValues +{ + var numberFormatter = [CPNumberFormatter new]; + + [numberFormatter setMaximum:0]; + [numberFormatter setMinimum:0]; + + var encoded = [CPKeyedArchiver archivedDataWithRootObject:numberFormatter], + decoded = [CPKeyedUnarchiver unarchiveObjectWithData:encoded]; + + [self assertNotNull:[decoded minimum]]; + [self assertNotNull:[decoded maximum]]; + [self assert:0 equals:[decoded minimum]]; + [self assert:0 equals:[decoded maximum]]; +} + +- (void)testEncodingDecodingWithNilMinMaxValues +{ + var numberFormatter = [CPNumberFormatter new]; + + [numberFormatter setMaximum:nil]; + [numberFormatter setMinimum:nil]; + + var encoded = [CPKeyedArchiver archivedDataWithRootObject:numberFormatter], + decoded = [CPKeyedUnarchiver unarchiveObjectWithData:encoded]; + + [self assertNull:[decoded minimum]]; + [self assertNull:[decoded maximum]]; +} + @end