public void changeTrackingService_hasTransientEntities_should_be_true_after_undo() { var svc = new ChangeTrackingService(); var p = new Person( svc, true ); svc.Undo(); svc.HasTransientEntities.Should().Be.True(); }
public void after_Undo_collection_is_rolledback() { Int32 expected = 0; IChangeTrackingService svc = new ChangeTrackingService(); PersonCollection p = new PersonCollection( svc ); p.Add( new Person( svc, false ) ); svc.Undo(); p.Count.Should().Be.EqualTo( expected ); }
public void after_multiple_change_canRedo_is_false() { ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc, false ); p.Name = "Mauro"; svc.Undo(); p.Name = "Foo"; Assert.IsFalse( svc.CanRedo ); }
public void afterUndo_service_canRedo() { ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc, false ); p.Name = "Mauro"; svc.Undo(); Assert.IsTrue( svc.CanRedo ); }
public void service_after_redo_CanRedo_is_false() { String expected = "Mauro"; ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); p.Name = expected; svc.Undo(); svc.Redo(); Assert.IsFalse( svc.CanRedo ); }
public void afterUndo_service_Redo_restore_previous_value() { ChangeTrackingService svc = new ChangeTrackingService(); Int32 expected = 1; PersonCollection p = new PersonCollection( svc ); p.Add( new Person( null, false ) ); svc.Undo(); svc.Redo(); Assert.AreEqual<Int32>( expected, p.Count ); }
public void changeTrackingService_using_beginAtomicOperation_should_fully_rollback_on_single_undo() { var target = new ChangeTrackingService(); var person = new Person( target ); var list = new PersonCollection( target ); using( var actual = target.BeginAtomicOperation() ) { person.Name = "Mauro"; list.Add( person ); person.Name = "Mauro Servienti"; actual.Complete(); } target.Undo(); list.Count.Should().Be.EqualTo( 0 ); person.Name.Should().Be.EqualTo( String.Empty ); }
public void afterUndo_propertyValue_is_rolledback() { ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc, false ); String expected = p.Name; p.Name = "Mauro"; svc.Undo(); Assert.AreEqual<String>( expected, p.Name ); }
public void after_suspend_cannot_call_Redo() { ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); p.Name = "Mauro"; svc.Undo(); svc.Suspend(); svc.Redo(); }
public void service_on_undo_of_last_change_entity_if_tansient_has_forward_changes_and_is_transient() { EntityTrackingStates expected = EntityTrackingStates.IsTransient | EntityTrackingStates.AutoRemove | EntityTrackingStates.HasForwardChanges; ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); p.Name = "Mauro"; svc.Undo(); EntityTrackingStates actual = svc.GetEntityState( p ); Assert.AreEqual<EntityTrackingStates>( expected, actual ); }
public void service_on_undo_of_last_change_entity_if_not_tansient_has_only_forward_changes() { EntityTrackingStates expected = EntityTrackingStates.HasForwardChanges; ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc, false ); p.Name = "Mauro"; svc.Undo(); EntityTrackingStates actual = svc.GetEntityState( p ); Assert.AreEqual<EntityTrackingStates>( expected, actual ); }
public void service_cannot_revert_to_an_invalid_bookmark() { ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); p.Name = "Mauro"; var bmk = svc.CreateBookmark(); svc.Undo(); svc.Revert( bmk ); }
public void service_redoes_are_in_the_correct_order() { var p1 = new Person( null, false ); var p2 = new Person( null, false ); var p3 = new Person( null, false ); ChangeTrackingService svc = new ChangeTrackingService(); PersonCollection list = new PersonCollection( svc ); list.Add( p1 ); list.Add( p2 ); list.Add( p3 ); list.Move( p2, 0 ); list.Remove( p1 ); while( svc.CanUndo ) { svc.Undo(); } svc.Redo(); Assert.AreEqual<Int32>( 1, list.Count ); Assert.IsTrue( list.Contains( p1 ) ); svc.Redo(); Assert.AreEqual<Int32>( 2, list.Count ); Assert.IsTrue( list.Contains( p2 ) ); svc.Redo(); Assert.AreEqual<Int32>( 3, list.Count ); Assert.IsTrue( list.Contains( p3 ) ); svc.Redo(); Assert.AreEqual<Int32>( 0, list.IndexOf( p2 ) ); svc.Redo(); Assert.AreEqual<Int32>( 2, list.Count ); Assert.IsFalse( list.Contains( p1 ) ); }
public void service_on_clear_undo_entities_are_restored() { var source = new Person[] { new Person( null, false ), new Person( null, false ), new Person( null, false ), new Person( null, false ), new Person( null, false ) }; ChangeTrackingService svc = new ChangeTrackingService(); PersonCollection list = new PersonCollection( svc ); list.BeginInit(); list.AddRange( source ); list.EndInit(); list.Clear(); svc.Undo(); Assert.AreEqual<Int32>( source.Length, list.Count() ); source.ForEach( p => { Int32 expected = Array.IndexOf( source, p ); Int32 actual = list.IndexOf( p ); Assert.AreEqual<Int32>( expected, actual ); } ); }
public void afterUndo_service_Redo_restore_previous_value() { ChangeTrackingService svc = new ChangeTrackingService(); String expected = "Mauro"; Person p = new Person( svc, false ); p.Name = expected; svc.Undo(); svc.Redo(); Assert.AreEqual<String>( expected, p.Name ); }
public void entity_registeredAsTransient_without_autoRemove_on_Undo_is_transient() { ChangeTrackingService svc = new ChangeTrackingService(); EntityTrackingStates expected = EntityTrackingStates.IsTransient; Person p = new Person( svc, false ); svc.RegisterTransient( p, false ); svc.Undo(); EntityTrackingStates actual = svc.GetEntityState( p ); Assert.AreEqual<EntityTrackingStates>( expected, actual ); }
public void service_on_undo_of_last_change_isChanged_false() { ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); p.Name = "Mauro"; svc.Undo(); Assert.IsFalse( svc.IsChanged ); }
public void service_on_undo_with_nothing_to_do_not_raise_trackingServiceStateChanged_event() { Int32 expected = 0; Int32 actual = 0; ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); svc.TrackingServiceStateChanged += ( sender, args ) => { actual++; }; svc.Undo(); Assert.AreEqual<Int32>( expected, actual ); }
public void service_on_redo_raise_trackingServiceStateChanged_event() { Int32 expected = 2; //1: Store actual value, 2: Redo Int32 actual = 0; ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); p.Name = "Mauro"; svc.Undo(); svc.TrackingServiceStateChanged += ( sender, args ) => { actual++; }; svc.Redo(); Assert.AreEqual<Int32>( expected, actual ); }
public void service_validate_a_bookmark_invalid_is_false() { ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); p.Name = "Mauro"; var bmk = svc.CreateBookmark(); svc.Undo(); Assert.IsFalse( svc.Validate( bmk ) ); }
public void service_correcly_handle_multiple_undos_redos() { String expected = "Mauro"; ChangeTrackingService svc = new ChangeTrackingService(); Person p = new Person( svc ); p.Name = expected; svc.Undo(); svc.Redo(); svc.Undo(); svc.Redo(); Assert.AreEqual<String>( expected, p.Name ); }
public void changeTrackingService_using_beginAtomicOperation_redo_should_reapply_all_changes_with_one_pass() { var target = new ChangeTrackingService(); var person = new Person( target ); var list = new PersonCollection( target ); using( var actual = target.BeginAtomicOperation() ) { person.Name = "Mauro"; list.Add( person ); person.Name = "Mauro Servienti"; actual.Complete(); } target.Undo(); target.Redo(); list.Count.Should().Be.EqualTo( 1 ); person.Name.Should().Be.EqualTo( "Mauro Servienti" ); }
public void after_multiple_change_canRedo_is_false() { IChangeTrackingService svc = new ChangeTrackingService(); PersonCollection p = new PersonCollection( svc ); p.Add( new Person( null, false ) ); svc.Undo(); p.Add( new Person( null, false ) ); Assert.IsFalse( svc.CanRedo ); }