示例#1
0
        public void Lock_CityIdTribe_WhenCityIsNotFound_ShouldReturnEmptyLockAndNullCityAndNullTribe(
            [Frozen] IGameObjectLocator locator,
            [Frozen] ICallbackLock callbackLock,
            ICity city,
            DefaultLocker locker)
        {
            ICity outCity;

            locator.TryGetObjects(1, out outCity).Returns(false);

            ICity  lockedCity;
            ITribe lockedTribe;
            var    multiObjLock = locker.Lock(1, out lockedCity, out lockedTribe);

            lockedTribe.Should().BeNull();
            ((object)lockedCity).Should().BeNull();
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any()));
        }
示例#2
0
        public void Lock_CityIdTribe_WhenPlayerIsInTribe_ShouldReturnLockedCityAndTribe(
            [Frozen] IGameObjectLocator locator,
            [Frozen] ICallbackLock callbackLock,
            ICity city,
            DefaultLocker locker)
        {
            ILockable[] itemsLocked        = {};
            var         callbackLockResult = Substitute.For <IMultiObjectLock>();

            callbackLock.Lock(Arg.Do <CallbackLock.CallbackLockHandler>(callbackLockHandler =>
            {
                itemsLocked = callbackLockHandler(new object[] { city });
            }),
                              Arg.Is <object[]>(lockParams => lockParams.SequenceEqual(new[] { city })),
                              Arg.Is <ILockable[]>(baseLocks => baseLocks.SequenceEqual(new[] { city }))
                              ).Returns(callbackLockResult);

            ICity outCity;

            locator.TryGetObjects(1, out outCity).Returns(call =>
            {
                call[1] = city;
                return(true);
            });

            var tribe = city.Owner.Tribesman.Tribe;

            city.Owner.IsInTribe.Returns(true);

            ICity  lockedCity;
            ITribe lockedTribe;
            var    multiObjLock = locker.Lock(1, out lockedCity, out lockedTribe);

            multiObjLock.Should().Be(callbackLockResult);
            lockedTribe.Should().Be(tribe);
            ((object)lockedCity).Should().Be(city);
            itemsLocked.Should().Equal(tribe);
        }