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())));
     }
 }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
 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();
 }
Exemplo n.º 4
0
 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();
 }
Exemplo n.º 5
0
 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();
 }
Exemplo n.º 6
0
 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();
 }
Exemplo n.º 7
0
 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();
 }
Exemplo n.º 8
0
 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()));
     }
 }