/// <summary> /// プロパティのset/getを範囲外の値で設定して、エラーとなることを確認する /// </summary> /// <param name="obj">チェック対象のオブジェクト</param> /// <param name="propertyName">プロパティ名</param> /// <param name="start">初期値</param> /// <param name="min">最小値</param> /// <param name="max">最大値</param> public static void CheckInvalid <T1>(T1 obj, string propertyName, int start, int min, int max) where T1 : INotifyDataErrorInfo, INotifyPropertyChanged { PropertyInfo property = obj.GetType().GetProperty(propertyName); if (property == null || (!property.CanRead && !property.CanWrite)) { Assert.Fail(); } var original = Thread.CurrentThread.CurrentUICulture; try { string[] lang = { "en", "ja-JP" }; for (int i = 0; i < 2; i++) { Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang[i]); var target = (int)(property.GetValue(obj)); property.SetValue(obj, start); var prop = new Microsoft.Practices.Prism.TestSupport.PropertyChangeTracker(obj); property.SetValue(obj, min - 1); Assert.AreEqual((int)(property.GetValue(obj)), min - 1); errorcheck(obj, propertyName, min, max, true); Assert.AreEqual(prop.ChangedProperties.Length, 2); Assert.AreEqual(prop.ChangedProperties[0], propertyName); Assert.AreEqual(prop.ChangedProperties[1], propertyName); property.SetValue(obj, max + 1); Assert.AreEqual((int)(property.GetValue(obj)), max + 1); errorcheck(obj, propertyName, min, max, true); } } finally { Thread.CurrentThread.CurrentUICulture = original; } }
/// <summary> /// プロパティのset/getを範囲内の値で設定して、エラーとならないことを確認する /// </summary> /// <param name="obj">チェック対象のオブジェクト</param> /// <param name="propertyName">プロパティ名</param> /// <param name="start">初期値</param> /// <param name="min">最小値</param> /// <param name="max">最大値</param> public static void CheckValid <T1, T2>(T1 obj, string propertyName, T2 start, T2 min, T2 max) where T1 : INotifyDataErrorInfo, INotifyPropertyChanged { PropertyInfo property = obj.GetType().GetProperty(propertyName); if (property == null || (!property.CanRead && !property.CanWrite)) { Assert.Fail(); } var target = (T2)(property.GetValue(obj)); property.SetValue(obj, start); var prop = new Microsoft.Practices.Prism.TestSupport.PropertyChangeTracker(obj); property.SetValue(obj, min); Assert.AreEqual((T2)(property.GetValue(obj)), min); Assert.AreEqual(obj.HasErrors, false); Assert.AreEqual(prop.ChangedProperties.Length, 1); Assert.AreEqual(prop.ChangedProperties[0], propertyName); property.SetValue(obj, max); Assert.AreEqual((T2)(property.GetValue(obj)), max); Assert.AreEqual(obj.HasErrors, false); }