Пример #1
0
        public void should_only_execute_system_when_predicate_met()
        {
            var entityToMatch = Substitute.For <IEntity>();
            var idToMatch     = 1;

            entityToMatch.Id.Returns(idToMatch);

            var fakeEntities = new List <IEntity>
            {
                entityToMatch,
                Substitute.For <IEntity>()
            };

            var mockObservableGroup = Substitute.For <IObservableGroup>();

            mockObservableGroup.GetEnumerator().Returns(fakeEntities.GetEnumerator());
            mockObservableGroup[0].Returns(fakeEntities[0]);
            mockObservableGroup[1].Returns(fakeEntities[1]);
            mockObservableGroup.Count.Returns(fakeEntities.Count);

            var observableGroupManager = Substitute.For <IObservableGroupManager>();
            var threadHandler          = Substitute.For <IThreadHandler>();
            var observableScheduler    = Substitute.For <IUpdateScheduler>();
            var observableSubject      = new Subject <ElapsedTime>();

            observableScheduler.OnUpdate.Returns(observableSubject);

            var fakeGroup = new GroupWithPredicate(x => x.Id == idToMatch);

            observableGroupManager.GetObservableGroup(Arg.Is(fakeGroup), Arg.Any <int[]>()).Returns(mockObservableGroup);

            var mockSystem = Substitute.For <IBasicEntitySystem>();

            mockSystem.Group.Returns(fakeGroup);

            var systemHandler = new BasicEntitySystemHandler(observableGroupManager, threadHandler, observableScheduler);

            systemHandler.SetupSystem(mockSystem);

            observableSubject.OnNext(new ElapsedTime());

            mockSystem.ReceivedWithAnyArgs(1).Process(Arg.Is(entityToMatch));
            Assert.Equal(1, systemHandler._systemSubscriptions.Count);
            Assert.NotNull(systemHandler._systemSubscriptions[mockSystem]);
        }