public void CreateDtoGeneric_CreatesINotifyPropertyChanged() { IDtoFactory factory = new DtoFactory(); IDataTransferObject dto = factory.CreateDto <TestPersonDto> (); Assert.IsInstanceOfType(dto, typeof(INotifyPropertyChanged)); }
public void CreateDto_CreatesINotifyPropertyChanged() { IDtoFactory factory = new DtoFactory (); IDataTransferObject dto = factory.CreateDto ( typeof ( TestPersonDto ) ) as IDataTransferObject; Assert.IsInstanceOfType ( dto, typeof ( INotifyPropertyChanged ) ); }
public void DataTransferObject_PublicPropertySetterCallsOnPropertyChanged_Succeeds() { List<string> ignoredDtoProperties = new List<string> () { "Notifications" }; IDtoFactory dtoFactory = new DtoFactory (); foreach ( AssemblyPart assemblyPart in Deployment.Current.Parts ) { StreamResourceInfo sri = Application.GetResourceStream ( new Uri ( assemblyPart.Source, UriKind.Relative ) ); Assembly dtoAssembly = new AssemblyPart ().Load ( sri.Stream ); var allDtos = dtoAssembly.GetTypes () .Where ( t => typeof ( EditableDataTransferObject ).IsAssignableFrom ( t ) && !t.IsAbstract ) .Select ( t => new { Dto = dtoFactory.CreateDto ( t ), PropSet = t.GetProperties () .Select ( p => new { PropertyName = p.Name, PropertySetter = p.GetSetMethod () } ) .Where ( p => p.PropertySetter != null && !ignoredDtoProperties.Contains ( p.PropertyName ) ) } ); foreach ( var d in allDtos ) { INotifyPropertyChanged inpc = d.Dto; foreach ( var p in d.PropSet ) { // Setup event handler for the property being examined string changedPropertyName = String.Empty; // use named variable (as opposed to anonymous delegate) so we can unsubscribe PropertyChangedEventHandler inpcOnPropertyChanged = ( obj, e ) => changedPropertyName = e.PropertyName; inpc.PropertyChanged += inpcOnPropertyChanged; // Simulate property change by invoking setter directly p.PropertySetter.Invoke ( d.Dto, new object[] { null } ); Assert.AreEqual ( p.PropertyName, changedPropertyName, String.Format ( "Offending DTO type::property {0}::{1}", d.Dto.GetType (), p.PropertyName ) ); // Reset event handler inpc.PropertyChanged -= inpcOnPropertyChanged; } } } }
public void DataTransferObject_PublicPropertySetterCallsOnPropertyChanged_Succeeds() { List <string> ignoredDtoProperties = new List <string> () { "Notifications" }; IDtoFactory dtoFactory = new DtoFactory(); foreach (AssemblyPart assemblyPart in Deployment.Current.Parts) { StreamResourceInfo sri = Application.GetResourceStream( new Uri(assemblyPart.Source, UriKind.Relative)); Assembly dtoAssembly = new AssemblyPart().Load(sri.Stream); var allDtos = dtoAssembly.GetTypes() .Where(t => typeof(EditableDataTransferObject).IsAssignableFrom(t) && !t.IsAbstract) .Select (t => new { Dto = dtoFactory.CreateDto(t), PropSet = t.GetProperties() .Select (p => new { PropertyName = p.Name, PropertySetter = p.GetSetMethod() } ) .Where(p => p.PropertySetter != null && !ignoredDtoProperties.Contains(p.PropertyName)) } ); foreach (var d in allDtos) { INotifyPropertyChanged inpc = d.Dto; foreach (var p in d.PropSet) { // Setup event handler for the property being examined string changedPropertyName = String.Empty; // use named variable (as opposed to anonymous delegate) so we can unsubscribe PropertyChangedEventHandler inpcOnPropertyChanged = (obj, e) => changedPropertyName = e.PropertyName; inpc.PropertyChanged += inpcOnPropertyChanged; // Simulate property change by invoking setter directly p.PropertySetter.Invoke(d.Dto, new object[] { null }); Assert.AreEqual( p.PropertyName, changedPropertyName, String.Format( "Offending DTO type::property {0}::{1}", d.Dto.GetType(), p.PropertyName)); // Reset event handler inpc.PropertyChanged -= inpcOnPropertyChanged; } } } }