Example #1
0
        public void Lock_ListOfPlayerId_WhenPlayersAreFound_ShouldReturnLockedPlayers(
            [Frozen] IGameObjectLocator locator,
            IPlayer player1,
            IPlayer player2,
            IPlayer player3,
            DefaultLocker locker)
        {
            IPlayer outPlayer2;

            locator.TryGetObjects(Arg.Is <uint>(id => id >= 1 && id <= 3), out outPlayer2).ReturnsForAnyArgs(call =>
            {
                call[1] = player1;
                return(true);
            }, call =>
            {
                call[1] = player2;
                return(true);
            }, call =>
            {
                call[1] = player3;
                return(true);
            });

            Dictionary <uint, IPlayer> lockedPlayers;
            var multiObjLock = locker.Lock(out lockedPlayers, 1, 2, 3);

            lockedPlayers.Should().Contain(new KeyValuePair <uint, IPlayer>(1, player1));
            lockedPlayers.Should().Contain(new KeyValuePair <uint, IPlayer>(2, player2));
            lockedPlayers.Should().Contain(new KeyValuePair <uint, IPlayer>(3, player3));
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => itemsLocked.SequenceEqual(new[]
            {
                player1, player2, player3
            })));
        }
Example #2
0
        public void Lock_ListOfPlayerId_WhenPlayersAreNotFound_ShouldReturnEmptyLockAndEmptyDictionary(
            [Frozen] IGameObjectLocator locator,
            IPlayer player1,
            IPlayer player2,
            IPlayer player3,
            DefaultLocker locker)
        {
            IPlayer outPlayer2;

            locator.TryGetObjects(Arg.Is <uint>(id => id >= 1 && id <= 2), out outPlayer2).ReturnsForAnyArgs(call =>
            {
                call[1] = player1;
                return(true);
            }, call =>
            {
                call[1] = player2;
                return(false);
            });

            Dictionary <uint, IPlayer> lockedPlayers;
            var multiObjLock = locker.Lock(out lockedPlayers, 1, 2);

            lockedPlayers.Should().BeNull();
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any()));
        }
Example #3
0
        public void Lock_ListOfCityId_WhenCitiesAreFound_ShouldReturnLockedCities(
            [Frozen] IGameObjectLocator locator,
            ICity city1,
            ICity city2,
            ICity city3,
            DefaultLocker locker)
        {
            ICity outCity2;

            locator.TryGetObjects(Arg.Is <uint>(id => id >= 1 && id <= 3), out outCity2).ReturnsForAnyArgs(call =>
            {
                call[1] = city1;
                return(true);
            }, call =>
            {
                call[1] = city2;
                return(true);
            }, call =>
            {
                call[1] = city3;
                return(true);
            });

            Dictionary <uint, ICity> lockedCities;
            var multiObjLock = locker.Lock(out lockedCities, 1, 2, 3);

            lockedCities.Should().Contain(new KeyValuePair <uint, ICity>(1, city1));
            lockedCities.Should().Contain(new KeyValuePair <uint, ICity>(2, city2));
            lockedCities.Should().Contain(new KeyValuePair <uint, ICity>(3, city3));
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => itemsLocked.SequenceEqual(new[]
            {
                city1, city2, city3
            })));
        }
Example #4
0
        public void Lock_ListOfCityId_WhenCitiesAreNotFound_ShouldReturnEmptyLockAndEmptyDictionary(
            [Frozen] IGameObjectLocator locator,
            ICity city1,
            ICity city2,
            ICity city3,
            DefaultLocker locker)
        {
            ICity outCity2;

            locator.TryGetObjects(Arg.Is <uint>(id => id >= 1 && id <= 2), out outCity2).ReturnsForAnyArgs(call =>
            {
                call[1] = city1;
                return(true);
            }, call =>
            {
                call[1] = city2;
                return(false);
            });

            Dictionary <uint, ICity> lockedCities;
            var multiObjLock = locker.Lock(out lockedCities, 1, 2);

            lockedCities.Should().BeNull();
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any()));
        }
Example #5
0
        public void Lock_CityIdTroopId_WhenCityIsFound_ShouldReturnLockedCity(
            [Frozen] IGameObjectLocator locator,
            ICity city,
            ITroopObject troop,
            DefaultLocker locker)
        {
            ICity outCity;

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

            ITroopObject outTroop;

            city.TryGetTroop(2, out outTroop).Returns(call =>
            {
                call[1] = troop;
                return(true);
            });

            ICity        lockedCity;
            ITroopObject lockedTroop;
            var          multiObjLock = locker.Lock(1, 2, out lockedCity, out lockedTroop);

            ((object)lockedCity).Should().Be(city);
            lockedTroop.Should().Be(troop);
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => itemsLocked.SequenceEqual(new[] { city })));
        }
Example #6
0
        public void Lock_CityIdStructureId_WhenCityIsFound_ShouldReturnLockedCity(
            [Frozen] IGameObjectLocator locator,
            ICity city,
            IStructure structure,
            DefaultLocker locker)
        {
            ICity outCity;

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

            IStructure outStructure;

            city.TryGetStructure(2, out outStructure).Returns(call =>
            {
                call[1] = structure;
                return(true);
            });

            ICity      lockedCity;
            IStructure lockedStructure;
            var        multiObjLock = locker.Lock(1, 2, out lockedCity, out lockedStructure);

            ((object)lockedCity).Should().Be(city);
            lockedStructure.Should().Be(structure);
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => itemsLocked.SequenceEqual(new[] { city })));
        }
Example #7
0
        public void Lock_PlayerId_WhenPlayerIsNotFound_ShouldReturnEmptyLockObject(
            [Frozen] IGameObjectLocator locator,
            IPlayer player,
            DefaultLocker locker)
        {
            IPlayer outPlayer;

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

            IPlayer lockedPlayer;
            var     multiObjLock = locker.Lock(1, out lockedPlayer);

            lockedPlayer.Should().BeNull();
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any()));
        }
Example #8
0
        public void Lock_CityId_WhenCityIsNotFound_ShouldReturnEmptyLockObject(
            [Frozen] IGameObjectLocator locator,
            ICity city,
            DefaultLocker locker)
        {
            ICity outCity;

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

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

            ((object)lockedCity).Should().BeNull();
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any()));
        }
Example #9
0
        public void Lock_TribeId_WhenTribeIsNotFound_ShouldReturnEmptyLockObject(
            [Frozen] IGameObjectLocator locator,
            ITribe tribe,
            DefaultLocker locker)
        {
            ITribe outTribe;

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

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

            lockedTribe.Should().BeNull();
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any()));
        }
Example #10
0
        public void Lock_StrongholdId_WhenStrongholdIsNotFound_ShouldReturnEmptyLockObject(
            [Frozen] IGameObjectLocator locator,
            IStronghold stronghold,
            DefaultLocker locker)
        {
            IStronghold outStronghold;

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

            IStronghold lockedStronghold;
            var         multiObjLock = locker.Lock(1, out lockedStronghold);

            lockedStronghold.Should().BeNull();
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any()));
        }
Example #11
0
        public void Lock_PlayerId_WhenPlayerIsFound_ShouldReturnLockedPlayer(
            [Frozen] IGameObjectLocator locator,
            IPlayer player,
            DefaultLocker locker)
        {
            IPlayer outPlayer;

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

            IPlayer lockedPlayer;
            var     multiObjLock = locker.Lock(1, out lockedPlayer);

            lockedPlayer.Should().Be(player);
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => itemsLocked.SequenceEqual(new[] { player })));
        }
Example #12
0
        public void Lock_TribeId_WhenTribeIsFound_ShouldReturnLockedTribe(
            [Frozen] IGameObjectLocator locator,
            ITribe tribe,
            DefaultLocker locker)
        {
            ITribe outTribe;

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

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

            lockedTribe.Should().Be(tribe);
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => itemsLocked.SequenceEqual(new[] { tribe })));
        }
Example #13
0
        public void Lock_StrongholdId_WhenStrongholdIsFound_ShouldReturnLockedStronghold(
            [Frozen] IGameObjectLocator locator,
            IStronghold stronghold,
            DefaultLocker locker)
        {
            IStronghold outStronghold;

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

            IStronghold lockedStronghold;
            var         multiObjLock = locker.Lock(1, out lockedStronghold);

            lockedStronghold.Should().Be(stronghold);
            multiObjLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => itemsLocked.SequenceEqual(new[] { stronghold })));
        }
Example #14
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);
        }
Example #15
0
        public void Lock_CityIdTroopId_WhenTroopIsNotFound_ShouldReturnEmptyLockAndNullCity(
            [Frozen] IGameObjectLocator locator,
            [FrozenMock] DefaultMultiObjectLock.Factory lockFactory,
            IMultiObjectLock cityLock,
            IMultiObjectLock emptyLock,
            ICity city,
            ITroopObject troop,
            DefaultLocker locker)
        {
            lockFactory().Returns(cityLock, emptyLock);

            ICity outCity;

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

            ITroopObject outTroop;

            city.TryGetTroop(2, out outTroop).Returns(false);

            ICity        lockedCity;
            ITroopObject lockedTroop;
            var          multiObjLock = locker.Lock(1, 2, out lockedCity, out lockedTroop);

            ((object)lockedCity).Should().BeNull();
            lockedTroop.Should().BeNull();
            multiObjLock.Should().Be(emptyLock);
            emptyLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any()));
            cityLock.Received(1)
            .Lock(Arg.Is <ILockable[]>(itemsLocked => itemsLocked.SequenceEqual(new[] { city })));
            cityLock.Received(1).UnlockAll();
        }