public void should_execute_systems_when_predicate_met_after_period() { var id1 = 1; var id2 = 2; var expectedDate = DateTime.Now + TimeSpan.FromMilliseconds(500); var fakeEntity1 = Substitute.For <IEntity>(); var fakeEntity2 = Substitute.For <IEntity>(); var fakeEntities = new List <IEntity> { fakeEntity1, fakeEntity2 }; fakeEntity1.Id.Returns(id1); fakeEntity2.Id.Returns(id2); var mockObservableGroup = Substitute.For <IObservableGroup>(); mockObservableGroup.OnEntityAdded.Returns(new Subject <IEntity>()); mockObservableGroup.OnEntityRemoved.Returns(new Subject <IEntity>()); mockObservableGroup.GetEnumerator().Returns(fakeEntities.GetEnumerator()); var observableGroupManager = Substitute.For <IObservableGroupManager>(); var fakeGroup = new GroupWithPredicate(x => x.Id == fakeEntity1.Id && DateTime.Now >= expectedDate); observableGroupManager.GetObservableGroup(Arg.Is(fakeGroup), Arg.Any <int[]>()).Returns(mockObservableGroup); var mockSystem = Substitute.For <ISetupSystem>(); mockSystem.Group.Returns(fakeGroup); var systemHandler = new SetupSystemHandler(observableGroupManager); systemHandler.SetupSystem(mockSystem); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(2, systemHandler._entitySubscriptions[mockSystem].Count); Assert.True(systemHandler._entitySubscriptions[mockSystem].ContainsKey(fakeEntity1.Id)); Assert.True(systemHandler._entitySubscriptions[mockSystem].ContainsKey(fakeEntity2.Id)); Thread.Sleep(2000); mockSystem.Received(1).Setup(Arg.Is(fakeEntity1)); mockSystem.Received(0).Setup(Arg.Is(fakeEntity2)); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(1, systemHandler._entitySubscriptions[mockSystem].Count); Assert.True(systemHandler._entitySubscriptions[mockSystem].ContainsKey(fakeEntity2.Id)); }
public void should_execute_systems_when_predicate_met_after_period() { var guid1 = Guid.NewGuid(); var guid2 = Guid.NewGuid(); var expectedDate = DateTime.Now + TimeSpan.FromSeconds(1); var fakeEntity1 = Substitute.For <IEntity>(); var fakeEntity2 = Substitute.For <IEntity>(); var fakeEntities = new[] { fakeEntity1, fakeEntity2 }; fakeEntity1.Id.Returns(guid1); fakeEntity2.Id.Returns(guid2); var mockObservableGroup = Substitute.For <IObservableGroup>(); mockObservableGroup.OnEntityAdded.Returns(new Subject <IEntity>()); mockObservableGroup.OnEntityRemoved.Returns(new Subject <IEntity>()); mockObservableGroup.Entities.Returns(fakeEntities); var mockCollectionManager = Substitute.For <IEntityCollectionManager>(); var fakeGroup = new Group(x => x.Id == fakeEntity1.Id && DateTime.Now >= expectedDate); mockCollectionManager.CreateObservableGroup(Arg.Is(fakeGroup)).Returns(mockObservableGroup); var mockSystem = Substitute.For <ISetupSystem>(); mockSystem.TargetGroup.Returns(fakeGroup); var systemHandler = new SetupSystemHandler(mockCollectionManager); systemHandler.SetupSystem(mockSystem); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(2, systemHandler._entitySubscriptions[mockSystem].Count); Assert.True(systemHandler._entitySubscriptions[mockSystem].ContainsKey(fakeEntity1.Id)); Assert.True(systemHandler._entitySubscriptions[mockSystem].ContainsKey(fakeEntity2.Id)); Thread.Sleep(1100); mockSystem.Received(1).Setup(Arg.Is(fakeEntity1)); mockSystem.Received(0).Setup(Arg.Is(fakeEntity2)); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(1, systemHandler._entitySubscriptions[mockSystem].Count); Assert.True(systemHandler._entitySubscriptions[mockSystem].ContainsKey(fakeEntity2.Id)); }
public void should_execute_system_when_entity_added_without_predicate() { var fakeEntity1 = Substitute.For <IEntity>(); var fakeEntity2 = Substitute.For <IEntity>(); fakeEntity1.Id.Returns(Guid.NewGuid()); fakeEntity2.Id.Returns(Guid.NewGuid()); var fakeEntities = new IEntity[] { }; var mockObservableGroup = Substitute.For <IObservableGroup>(); var addingSubject = new Subject <IEntity>(); mockObservableGroup.OnEntityAdded.Returns(addingSubject); mockObservableGroup.OnEntityRemoved.Returns(new Subject <IEntity>()); mockObservableGroup.Entities.Returns(fakeEntities); var mockCollectionManager = Substitute.For <IEntityCollectionManager>(); var fakeGroup = Substitute.For <IGroup>(); fakeGroup.MatchesComponents.Returns(new Type[0]); mockCollectionManager.CreateObservableGroup(Arg.Is(fakeGroup)).Returns(mockObservableGroup); var mockSystem = Substitute.For <ISetupSystem>(); mockSystem.TargetGroup.Returns(fakeGroup); var systemHandler = new SetupSystemHandler(mockCollectionManager); systemHandler.SetupSystem(mockSystem); mockSystem.Received(0).Setup(Arg.Is(fakeEntity1)); mockSystem.Received(0).Setup(Arg.Is(fakeEntity2)); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(0, systemHandler._entitySubscriptions[mockSystem].Count); addingSubject.OnNext(fakeEntity1); addingSubject.OnNext(fakeEntity2); mockSystem.Received(1).Setup(Arg.Is(fakeEntity1)); mockSystem.Received(1).Setup(Arg.Is(fakeEntity2)); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(0, systemHandler._entitySubscriptions[mockSystem].Count); }
public void should_execute_system_when_entity_added_without_predicate() { var fakeEntity1 = Substitute.For <IEntity>(); var fakeEntity2 = Substitute.For <IEntity>(); fakeEntity1.Id.Returns(1); fakeEntity2.Id.Returns(2); var fakeEntities = new List <IEntity>(); var mockObservableGroup = Substitute.For <IObservableGroup>(); var addingSubject = new Subject <IEntity>(); mockObservableGroup.OnEntityAdded.Returns(addingSubject); mockObservableGroup.OnEntityRemoved.Returns(new Subject <IEntity>()); mockObservableGroup.GetEnumerator().Returns(fakeEntities.GetEnumerator()); var observableGroupManager = Substitute.For <IObservableGroupManager>(); var fakeGroup = Substitute.For <IGroup>(); fakeGroup.RequiredComponents.Returns(new Type[0]); observableGroupManager.GetObservableGroup(Arg.Is(fakeGroup), Arg.Any <int[]>()).Returns(mockObservableGroup); var mockSystem = Substitute.For <ISetupSystem>(); mockSystem.Group.Returns(fakeGroup); var systemHandler = new SetupSystemHandler(observableGroupManager); systemHandler.SetupSystem(mockSystem); mockSystem.Received(0).Setup(Arg.Is(fakeEntity1)); mockSystem.Received(0).Setup(Arg.Is(fakeEntity2)); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(0, systemHandler._entitySubscriptions[mockSystem].Count); addingSubject.OnNext(fakeEntity1); addingSubject.OnNext(fakeEntity2); mockSystem.Received(1).Setup(Arg.Is(fakeEntity1)); mockSystem.Received(1).Setup(Arg.Is(fakeEntity2)); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(0, systemHandler._entitySubscriptions[mockSystem].Count); }
public void should_execute_systems_when_predicate_met() { var id1 = 1; var id2 = 2; var fakeEntity1 = Substitute.For <IEntity>(); var fakeEntity2 = Substitute.For <IEntity>(); var fakeEntities = new List <IEntity> { fakeEntity1, fakeEntity2 }; fakeEntity1.Id.Returns(id1); fakeEntity2.Id.Returns(id2); var mockObservableGroup = Substitute.For <IObservableGroup>(); mockObservableGroup.OnEntityAdded.Returns(new Subject <IEntity>()); mockObservableGroup.OnEntityRemoved.Returns(new Subject <IEntity>()); mockObservableGroup.GetEnumerator().Returns(fakeEntities.GetEnumerator()); var mockCollectionManager = Substitute.For <IEntityCollectionManager>(); var fakeGroup = new Group(x => x.Id == fakeEntity1.Id); mockCollectionManager.GetObservableGroup(Arg.Is(fakeGroup)).Returns(mockObservableGroup); var mockSystem = Substitute.For <ISetupSystem>(); mockSystem.Group.Returns(fakeGroup); var systemHandler = new SetupSystemHandler(mockCollectionManager); systemHandler.SetupSystem(mockSystem); mockSystem.Received(1).Setup(Arg.Is(fakeEntity1)); mockSystem.Received(0).Setup(Arg.Is(fakeEntity2)); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(1, systemHandler._entitySubscriptions[mockSystem].Count); Assert.True(systemHandler._entitySubscriptions[mockSystem].ContainsKey(fakeEntity2.Id)); }
public void should_dispose_observables_when_entity_removed() { var fakeEntity1 = Substitute.For <IEntity>(); fakeEntity1.Id.Returns(Guid.NewGuid()); var fakeEntities = new IEntity[] { }; var mockObservableGroup = Substitute.For <IObservableGroup>(); var removingSubject = new Subject <IEntity>(); mockObservableGroup.OnEntityAdded.Returns(new Subject <IEntity>()); mockObservableGroup.OnEntityRemoved.Returns(removingSubject); mockObservableGroup.Entities.Returns(fakeEntities); var mockCollectionManager = Substitute.For <IEntityCollectionManager>(); var fakeGroup = Substitute.For <IGroup>(); fakeGroup.MatchesComponents.Returns(new Type[0]); mockCollectionManager.CreateObservableGroup(Arg.Is(fakeGroup)).Returns(mockObservableGroup); var mockSystem = Substitute.For <ISetupSystem>(); mockSystem.TargetGroup.Returns(fakeGroup); var systemHandler = new SetupSystemHandler(mockCollectionManager); systemHandler.SetupSystem(mockSystem); var mockDisposable = Substitute.For <IDisposable>(); systemHandler._entitySubscriptions[mockSystem].Add(fakeEntity1.Id, mockDisposable); removingSubject.OnNext(fakeEntity1); mockDisposable.Received(1).Dispose(); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(0, systemHandler._entitySubscriptions[mockSystem].Count); }
public void should_dispose_observables_when_entity_removed() { var fakeEntity1 = Substitute.For <IEntity>(); fakeEntity1.Id.Returns(1); var fakeEntities = new List <IEntity>(); var mockObservableGroup = Substitute.For <IObservableGroup>(); var removingSubject = new Subject <IEntity>(); mockObservableGroup.OnEntityAdded.Returns(new Subject <IEntity>()); mockObservableGroup.OnEntityRemoved.Returns(removingSubject); mockObservableGroup.GetEnumerator().Returns(fakeEntities.GetEnumerator()); var observableGroupManager = Substitute.For <IObservableGroupManager>(); var fakeGroup = Substitute.For <IGroup>(); fakeGroup.RequiredComponents.Returns(new Type[0]); observableGroupManager.GetObservableGroup(Arg.Is(fakeGroup), Arg.Any <int[]>()).Returns(mockObservableGroup); var mockSystem = Substitute.For <ISetupSystem>(); mockSystem.Group.Returns(fakeGroup); var systemHandler = new SetupSystemHandler(observableGroupManager); systemHandler.SetupSystem(mockSystem); var mockDisposable = Substitute.For <IDisposable>(); systemHandler._entitySubscriptions[mockSystem].Add(fakeEntity1.Id, mockDisposable); removingSubject.OnNext(fakeEntity1); mockDisposable.Received(1).Dispose(); Assert.Equal(1, systemHandler._systemSubscriptions.Count); Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]); Assert.Equal(1, systemHandler._entitySubscriptions.Count); Assert.Equal(0, systemHandler._entitySubscriptions[mockSystem].Count); }