public override ValidationResult Validate(object value, CultureInfo culture) { if (value is string str) { if (culture == null) { if (GpsLocation.TryParse(str, out GpsLocation loc)) { var lat = loc.Latitue; if (lat > 90 || lat < -90) { return(new ValidationResult(false, string.Format("Invalid latitude {0}.", lat))); } var lon = loc.Longitude; if (lon > 180 || lon < -180) { return(new ValidationResult(false, string.Format("Invalid latitude {0}.", lon))); } return(new ValidationResult(true, null)); } else { return(new ValidationResult(false, "Could not parse location string.")); } } else { if (GpsLocation.TryParse(str, culture, out GpsLocation res)) { return(new ValidationResult(true, null)); } else { return(new ValidationResult(false, "Could not parse location string.")); } } } else if (value is GpsLocation loc) { var lat = loc.Latitue; if (lat > 90 || lat < -90) { return(new ValidationResult(false, string.Format("Invalid latitude {0}.", lat))); } var lon = loc.Longitude; if (lon > 180 || lon < -180) { return(new ValidationResult(false, string.Format("Invalid latitude {0}.", lon))); } return(new ValidationResult(true, null)); } else { return(new ValidationResult(false, string.Format("Invalid source type {0}", value.GetType()))); } }
public void TryParseTest() { GpsLocation result; Assert.IsTrue(GpsLocation.TryParse("10.2,45.238", out result)); Assert.AreEqual("10.2, 45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2, 45.016666666", out result)); Assert.AreEqual("10.2, 45.016666666", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2N,45.238", out result)); Assert.AreEqual("10.2, 45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2,45.238E", out result)); Assert.AreEqual("10.2, 45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.256456456894N,45.238E", out result)); Assert.AreEqual("10.256456456894, 45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("-10.2,45.238", out result)); Assert.AreEqual("-10.2, 45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("-10.2, 45", out result)); Assert.AreEqual("-10.2, 45", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2S,45.0166666667", out result)); Assert.AreEqual("-10.2, 45.0166666667", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("-10.2,45.238E", out result)); Assert.AreEqual("-10.2, 45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2S,45.238E", out result)); Assert.AreEqual("-10.2, 45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2,-45.238", out result)); Assert.AreEqual("10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2, -45.238", out result)); Assert.AreEqual("10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2N,-45.238", out result)); Assert.AreEqual("10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2,45.238W", out result)); Assert.AreEqual("10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2N,45.238W", out result)); Assert.AreEqual("10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("-10.2,-45.238", out result)); Assert.AreEqual("-10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("-10.2, -45.238", out result)); Assert.AreEqual("-10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2S,-45.238", out result)); Assert.AreEqual("-10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("-10.2,45.238W", out result)); Assert.AreEqual("-10.2, -45.238", result.ToString()); Assert.IsTrue(GpsLocation.TryParse("10.2S,45.238W", out result)); Assert.AreEqual("-10.2, -45.238", result.ToString()); }
public void TryParse_When_The_Format_Matches_The_Decimal_Separator_Comma_Returns_True() { GpsLocation.TryParse("-41,95;12,45", CultureInfo.GetCultureInfo(1043), out var _).Should().BeTrue(); }
public void TryParse_When_The_Format_Does_Not_Match_The_Decimal_Separator_Comma_Returns_False() { GpsLocation.TryParse("-41,95;12,45", CultureInfo.InvariantCulture, out var _).Should().BeFalse(); }
public void TryParse_When_The_Format_Matches_The_Decimal_Separator_Dot_Returns_True() { GpsLocation.TryParse("-41.95;12.45", CultureInfo.InvariantCulture, out var _).Should().BeTrue(); }
public void TryParse_When_The_Format_Does_Not_Match_The_Decimal_Separator_Dot_Returns_False() { GpsLocation.TryParse("-41.95;12.45", CultureInfo.GetCultureInfo(1043), out var _).Should().BeFalse(); }
public void TryParse_With_A_Location_That_Is_Out_Of_The_Range_Of_Expected_Values_Does_Not_Throw_An_Exception() { GpsLocation.TryParse("400 400", out var _).Should().BeFalse(); }
public void TryParse_Does_Not_Throw_Exception() { GpsLocation.TryParse("abc", out var _).Should().BeFalse(); }
public static object ConvertAny(object value, Type targetType, object parameter, CultureInfo culture) { if (value is null) { return(null); } if (value is string str) { if (targetType.IsAssignableFrom(typeof(GpsLocation))) { if (culture == null) { if (!GpsLocation.TryParse(str, out GpsLocation res)) { return(Binding.DoNothing); } else { return(res); } } else { if (!GpsLocation.TryParse(str, culture, out GpsLocation res)) { return(Binding.DoNothing); } else { return(res); } } } else { throw new NotSupportedException(string.Format("Invalid target type {0}", targetType)); } } else if (value is GpsLocation loc) { if (targetType.IsAssignableFrom(typeof(string))) { if (parameter is string format) { if (culture == null) { return(loc.ToString(format)); } else { return(loc.ToString(format, culture)); } } else { if (culture == null) { return(loc.ToString()); } else { return(loc.ToString(culture)); } } } else { throw new NotSupportedException(string.Format("Invalid target type {0}", targetType)); } } else { throw new NotSupportedException(string.Format("Invalid source type {0}", value.GetType())); } }