mirror of
https://github.com/claunia/plist-cil.git
synced 2025-12-16 19:14:26 +00:00
Make sure to always specify CultureInfo when parsing numbers.
This commit is contained in:
@@ -2,8 +2,10 @@
|
||||
using NUnit.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace plistcil.test
|
||||
@@ -18,5 +20,56 @@ namespace plistcil.test
|
||||
Assert.AreEqual(NSNumber.INTEGER, number.GetNSNumberType());
|
||||
Assert.AreEqual(10032936613, number.ToObject());
|
||||
}
|
||||
|
||||
// The tests below make sure the numbers are being parsed correctly, and do not depend on the culture info
|
||||
// being set. Especially, decimal point may vary between cultures and we don't want to take a dependency on that
|
||||
// The value being used comes seen in a real property list:
|
||||
// <key>TimeZoneOffsetFromUTC</key>
|
||||
// <real>7200.000000</real>
|
||||
|
||||
[Test]
|
||||
[SetCulture("en-US")]
|
||||
public static void ParseNumberEnTest()
|
||||
{
|
||||
var number = new NSNumber("7200.000001");
|
||||
Assert.IsTrue(number.isReal());
|
||||
Assert.AreEqual(7200.000001d, number.ToDouble());
|
||||
}
|
||||
|
||||
[Test]
|
||||
[SetCulture("nl-BE")]
|
||||
public static void ParseNumberNlTest()
|
||||
{
|
||||
// As seen in a real property list:
|
||||
// <key>TimeZoneOffsetFromUTC</key>
|
||||
// <real>7200.000000</real>
|
||||
var number = new NSNumber("7200.000001");
|
||||
Assert.IsTrue(number.isReal());
|
||||
Assert.AreEqual(7200.000001d, number.ToDouble());
|
||||
}
|
||||
|
||||
[Test]
|
||||
[SetCulture("en-US")]
|
||||
public static void ParseNumberEnTest2()
|
||||
{
|
||||
// As seen in a real property list:
|
||||
// <key>TimeZoneOffsetFromUTC</key>
|
||||
// <real>7200.000000</real>
|
||||
var number = new NSNumber("7200.000000", NSNumber.REAL);
|
||||
Assert.IsTrue(number.isReal());
|
||||
Assert.AreEqual(7200d, number.ToDouble());
|
||||
}
|
||||
|
||||
[Test]
|
||||
[SetCulture("nl-BE")]
|
||||
public static void ParseNumberNlTest2()
|
||||
{
|
||||
// As seen in a real property list:
|
||||
// <key>TimeZoneOffsetFromUTC</key>
|
||||
// <real>7200.000000</real>
|
||||
var number = new NSNumber("7200.000000", NSNumber.REAL);
|
||||
Assert.IsTrue(number.isReal());
|
||||
Assert.AreEqual(7200d, number.ToDouble());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +94,12 @@ namespace Claunia.PropertyList
|
||||
{
|
||||
case INTEGER:
|
||||
{
|
||||
doubleValue = longValue = long.Parse(text);
|
||||
doubleValue = longValue = long.Parse(text, CultureInfo.InvariantCulture);
|
||||
break;
|
||||
}
|
||||
case REAL:
|
||||
{
|
||||
doubleValue = double.Parse(text);
|
||||
doubleValue = double.Parse(text, CultureInfo.InvariantCulture);
|
||||
longValue = (long)Math.Round(doubleValue);
|
||||
break;
|
||||
}
|
||||
@@ -126,12 +126,12 @@ namespace Claunia.PropertyList
|
||||
long l;
|
||||
double d;
|
||||
|
||||
if (long.TryParse(text, out l))
|
||||
if (long.TryParse(text, NumberStyles.Number, CultureInfo.InvariantCulture, out l))
|
||||
{
|
||||
doubleValue = longValue = l;
|
||||
type = INTEGER;
|
||||
}
|
||||
else if (double.TryParse(text, out d))
|
||||
else if (double.TryParse(text, NumberStyles.Number, CultureInfo.InvariantCulture, out d))
|
||||
{
|
||||
doubleValue = d;
|
||||
longValue = (long)Math.Round(doubleValue);
|
||||
@@ -139,8 +139,8 @@ namespace Claunia.PropertyList
|
||||
}
|
||||
else
|
||||
{
|
||||
bool isTrue = text.ToLower().Equals("true") || text.ToLower().Equals("yes");
|
||||
bool isFalse = text.ToLower().Equals("false") || text.ToLower().Equals("no");
|
||||
bool isTrue = string.Equals(text, "true", StringComparison.InvariantCultureIgnoreCase) || string.Equals(text, "yes", StringComparison.InvariantCultureIgnoreCase);
|
||||
bool isFalse = string.Equals(text, "false", StringComparison.InvariantCultureIgnoreCase) || string.Equals(text, "no", StringComparison.InvariantCultureIgnoreCase);
|
||||
|
||||
if (isTrue || isFalse)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user