public void IntentOpenContainer_SetContainerAndMethod_ReturnsTask() { //ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(0, 0); var actor = CreateActor(map, startNode); var taskSource = InitTaskSource(actor); var actorManager = CreateActorManager(actor); var containerMock = new Mock <IPropContainer>(); var container = containerMock.Object; var methodMock = new Mock <IOpenContainerMethod>(); var method = methodMock.Object; var intention = new Intention <OpenContainerTask>(a => new OpenContainerTask(a, container, method)); // ACT var tasks = SetHumanIntention(actor, taskSource, intention); // ASSERT tasks.Should().NotBeNullOrEmpty(); tasks[0].Should().BeOfType <OpenContainerTask>(); }
public void Intent_TargetToStartPoint_GenerateMoveCommand() { // ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var actor = CreateActor(map, startNode); var taskSource = InitTaskSource(actor); var moveIntention = new MoveIntention(startNode, map); // ACT var tasks = SetHumanIntention(actor, taskSource, moveIntention); // ASSERT tasks.Should().NotBeNullOrEmpty(); tasks[0].Should().BeOfType <MoveTask>(); }
public void Execute_ValidLength_ActorOpenedContainer() { // ARRANGE var map = new TestGridGenMap(); var actorNode = map.Nodes.Cast <HexNode>().SelectBy(0, 0); var actorMock = new Mock <IActor>(); actorMock.SetupGet(x => x.Node).Returns(actorNode); var actor = actorMock.Object; var containerNode = map.Nodes.Cast <HexNode>().SelectBy(1, 0); var container = CreateContainer(containerNode); var method = CreateMethod(); var task = new OpenContainerTask(actor, container, method); // ACT task.Execute(); // ASSERT actorMock.Verify(x => x.OpenContainer(It.IsAny <IPropContainer>(), It.IsAny <IOpenContainerMethod>())); }
public void IntentAttack_SetTarget_ReturnsAttackTask() { //ARRANGE var usageService = _container.GetInstance <ITacticalActUsageService>(); var map = new TestGridGenMap(); var attackerStartNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var targetStartNode = map.Nodes.Cast <HexNode>().SelectBy(2, 3); var attackerActor = CreateActor(map, attackerStartNode); var targetActor = CreateActor(map, targetStartNode); var taskSource = InitTaskSource(attackerActor); var actorManager = CreateActorManager(attackerActor, targetActor); var attackIntention = new Intention <AttackTask>(a => new AttackTask(a, targetActor, usageService)); // ACT var tasks = SetHumanIntention(attackerActor, taskSource, attackIntention); // ASSERT tasks.Should().NotBeNullOrEmpty(); tasks[0].Should().BeOfType <AttackTask>(); }
public void CreateSector(int mapSize) { var map = new TestGridGenMap(mapSize); Container.Register <IMap>(factory => map, new PerContainerLifetime()); Container.Register <ISector, Sector>(new PerContainerLifetime()); // Это нужно для того, чтобы объкт был создан и выполнился код из конструктора. // Там обработка на события внутренних сервисов. var sector = Container.GetInstance <ISector>(); }
public void Intent_AssignAfterTaskComplete_NoNullCommand() { // ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var finishNode = map.Nodes.Cast <HexNode>().SelectBy(1, 5); var finishNode2 = map.Nodes.Cast <HexNode>().SelectBy(3, 2); var actor = CreateActor(map, startNode); var taskSource = InitTaskSource(actor); var actorManager = CreateActorManager(actor); var moveIntention = new MoveIntention(finishNode, map); var moveIntention2 = new MoveIntention(finishNode2, map); // ACT // 1. Ждём, пока задача на перемещение не отработает. // В конце текущая задача актёра будет IsComplete. var tasks = SetHumanIntention(actor, taskSource, moveIntention); for (var i = 0; i < 3; i++) { foreach (var task in tasks) { task.Execute(); } } foreach (var task in tasks) { task.IsComplete.Should().Be(true); } // 2. Указываем намерение на ещё одну задачу. var factTasks = SetHumanIntention(actor, taskSource, moveIntention2); // ASSERT factTasks.Should().NotBeNullOrEmpty(); }
public void Intent_AssignTaskBeforeCurrentTaskComplete_NoNullCommand() { // ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var finishNode = map.Nodes.Cast <HexNode>().SelectBy(1, 5); var finishNode2 = map.Nodes.Cast <HexNode>().SelectBy(3, 2); var actor = CreateActor(map, startNode); var taskSource = InitTaskSource(actor); var actorManager = CreateActorManager(actor); var moveIntention = new MoveIntention(finishNode, map); var moveIntention2 = new MoveIntention(finishNode2, map); // ACT // 1. Продвигаем выполнение текущего намерения. НО НЕ ДО ОКОНЧАНИЯ. var tasks = SetHumanIntention(actor, taskSource, moveIntention); for (var i = 0; i < 1; i++) { foreach (var task in tasks) { task.Execute(); } } foreach (var task in tasks) { task.IsComplete.Should().Be(false); } // 2. Указываем другое намерение до того, как текущая задача на перемещение выполнена до конца. var factTasks = SetHumanIntention(actor, taskSource, moveIntention2); // ASSERT factTasks.Should().NotBeNullOrEmpty(); }
public void ExecuteTest_OpenGridMap_ActorReachPointAndTaskComplete() { // ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var finishNode = map.Nodes.Cast <HexNode>().SelectBy(1, 5); var expectedPath = new[] { map.Nodes.Cast <HexNode>().SelectBy(2, 3), map.Nodes.Cast <HexNode>().SelectBy(2, 4), finishNode }; var actor = CreateActor(map, startNode); var task = new MoveTask(actor, finishNode, map); // ACT for (var step = 1; step <= expectedPath.Count(); step++) { task.Execute(); // ASSERT var expectedIsComplete = step >= 3; task.IsComplete.Should().Be(expectedIsComplete); actor.Node.Should().Be(expectedPath[step - 1]); } // ASSERT task.IsComplete.Should().Be(true); actor.Node.Should().Be(finishNode); }
public void Intent_SetNullTarget_ThrownException() { // ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var actor = CreateActor(map, startNode); var taskSource = InitTaskSource(actor); // ACT Action act = () => { taskSource.Intent(null); }; // ASSERT act.Should().Throw <ArgumentException>(); }
public void AttackTaskTest() { // ARRANGE // Подготовка. Два актёра через клетку. Радиус действия 1-2, достаёт. var testMap = new TestGridGenMap(3); var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(new TacticalActStatsSubScheme { Range = new Range <int>(1, 2) }); var act = actMock.Object; var actCarrierMock = new Mock <ITacticalActCarrier>(); actCarrierMock.SetupGet(x => x.Acts) .Returns(new ITacticalAct[] { act }); var actCarrier = actCarrierMock.Object; var personMock = new Mock <IPerson>(); personMock.SetupGet(x => x.TacticalActCarrier).Returns(actCarrier); var person = personMock.Object; var actorMock = new Mock <IActor>(); var actorNode = testMap.Nodes.OfType <HexNode>().SelectBy(0, 0); actorMock.SetupGet(x => x.Node).Returns(actorNode); actorMock.SetupGet(x => x.Person).Returns(person); actorMock.Setup(x => x.UseAct(It.IsAny <IAttackTarget>(), It.IsAny <ITacticalAct>())) .Raises <IAttackTarget, ITacticalAct>(x => x.UsedAct += null, (target1, act1) => new UsedActEventArgs(target1, act1)); var actor = actorMock.Object; var targetMock = new Mock <IActor>(); var targetNode = testMap.Nodes.OfType <HexNode>().SelectBy(2, 0); targetMock.Setup(x => x.CanBeDamaged()).Returns(true); targetMock.SetupGet(x => x.Node).Returns(targetNode); var target = targetMock.Object; var actServiceMock = new Mock <ITacticalActUsageService>(); var actService = actServiceMock.Object; // Создаём саму команду var attackTask = new AttackTask(actor, target, actService); using (var monitor = actor.Monitor()) { // ACT attackTask.Execute(); // ASSERT monitor.Should().Raise(nameof(IActor.UsedAct)); } }
public void SetUp() { _container = new ServiceContainer(); var testMap = new TestGridGenMap(3); var sectorMock = new Mock <ISector>(); sectorMock.SetupGet(x => x.Map).Returns(testMap); var sector = sectorMock.Object; var sectorManagerMock = new Mock <ISectorManager>(); sectorManagerMock.SetupProperty(x => x.CurrentSector, sector); var sectorManager = sectorManagerMock.Object; var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(new TacticalActStatsSubScheme { Range = new Range <int>(1, 2) }); var act = actMock.Object; var actCarrierMock = new Mock <ITacticalActCarrier>(); actCarrierMock.SetupGet(x => x.Acts) .Returns(new[] { act }); var actCarrier = actCarrierMock.Object; var equipmentCarrierMock = new Mock <IEquipmentCarrier>(); equipmentCarrierMock.SetupGet(x => x.Slots).Returns(new[] { new PersonSlotSubScheme { Types = EquipmentSlotTypes.Hand } }); var equipmentCarrier = equipmentCarrierMock.Object; var personMock = new Mock <IPerson>(); personMock.SetupGet(x => x.TacticalActCarrier).Returns(actCarrier); personMock.SetupGet(x => x.EquipmentCarrier).Returns(equipmentCarrier); var person = personMock.Object; var actorMock = new Mock <IActor>(); var actorNode = testMap.Nodes.OfType <HexNode>().SelectBy(0, 0); actorMock.SetupGet(x => x.Node).Returns(actorNode); actorMock.SetupGet(x => x.Person).Returns(person); var actor = actorMock.Object; var actorVmMock = new Mock <IActorViewModel>(); actorVmMock.SetupProperty(x => x.Actor, actor); var actorVm = actorVmMock.Object; var humanTaskSourceMock = new Mock <IHumanActorTaskSource>(); var humanTaskSource = humanTaskSourceMock.Object; var playerStateMock = new Mock <IPlayerState>(); playerStateMock.SetupProperty(x => x.ActiveActor, actorVm); playerStateMock.SetupProperty(x => x.TaskSource, humanTaskSource); var playerState = playerStateMock.Object; var gameLoopMock = new Mock <IGameLoop>(); var gameLoop = gameLoopMock.Object; var usageServiceMock = new Mock <ITacticalActUsageService>(); var usageService = usageServiceMock.Object; _container.Register(factory => sectorManager, new PerContainerLifetime()); _container.Register(factory => humanTaskSourceMock, new PerContainerLifetime()); _container.Register(factory => playerState, new PerContainerLifetime()); _container.Register(factory => gameLoop, new PerContainerLifetime()); _container.Register(factory => usageService, new PerContainerLifetime()); RegisterSpecificServices(testMap, playerStateMock); }