public void AddNewPiece_EmptyPointAtPosition_ReturnsNewPieceAndIsNotNull()
        {
            // Arrange
            var stubPoints = TestHelper.CreatePointsWithBounds(5);

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreateInitialBoard()
            .Returns(new Tuple <List <PointModel>, List <List <PointModel> > >(stubPoints, null));

            var stubBoardModel = Substitute.For <BoardModel>(stubBoardService);

            var stubEventSubscriber = new MockEventSubscriber();

            stubBoardModel.NewPieceAdded += stubEventSubscriber.Handle;

            var stubPlayer = Substitute.For <PlayerModel>(1, Colors.Yellow);

            var boardController = new BoardController(stubBoardModel);

            // Act
            boardController.AddNewPiece(stubPoints[0], stubPlayer);

            // Assert
            Assert.IsNotNull(stubPoints[0].Piece);
        }
        public void ChangeSelection_PieceSelected_OldPieceIsNotSelected()
        {
            // Arrange
            var stubPoints = TestHelper.CreatePointsWithBounds(5);

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreateInitialBoard()
            .Returns(new Tuple <List <PointModel>, List <List <PointModel> > >(stubPoints, null));

            var mockBoardModel = Substitute.For <BoardModel>(stubBoardService);

            var stubEventSubscriber = new MockEventSubscriber();

            mockBoardModel.NewPieceAdded    += stubEventSubscriber.Handle;
            mockBoardModel.SelectionChanged += stubEventSubscriber.Handle;

            var stubPlayer = Substitute.For <PlayerModel>(1, Colors.Yellow);

            var boardController = new BoardController(mockBoardModel);

            boardController.AddNewPiece(stubPoints[2], stubPlayer);

            boardController.AddNewPiece(stubPoints[4], stubPlayer);

            // Act
            boardController.ChangeSelection(stubPoints[4], stubPlayer, true);

            // Assert
            var oldPoint = mockBoardModel.Points.Where(p => p.Bounds.Contains(stubPoints[2].Bounds)).First();

            Assert.IsFalse(oldPoint.Piece.IsSelected);
        }
        public void AddNewPiece_InvalidPosition_NoPieceIsAdded(
            int pieceCount, int newPointModelIndex, int stubPointModelIndex)
        {
            // Arrange
            var stubPoints = TestHelper.CreatePointsWithBounds(pieceCount);

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreateInitialBoard()
            .Returns(new Tuple <List <PointModel>, List <List <PointModel> > >(stubPoints, null));

            var mockBoardModel = Substitute.For <BoardModel>(stubBoardService);

            var stubEventSubscriber = new MockEventSubscriber();

            mockBoardModel.NewPieceAdded += stubEventSubscriber.Handle;

            var stubPlayer = Substitute.For <PlayerModel>(1, Colors.Yellow);

            var boardController = new BoardController(mockBoardModel);

            boardController.AddNewPiece(stubPoints[stubPointModelIndex], stubPlayer);

            // Act
            boardController.AddNewPiece(stubPoints[newPointModelIndex], stubPlayer);

            // Assert
            Assert.AreEqual(1, mockBoardModel.Points.Count(p => p.Piece != null));
        }
        public void ChangeSelection_ValidPoint_PieceIsSelected()
        {
            // Arrange
            var stubPoints = TestHelper.CreatePointsWithBounds(5);

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreateInitialBoard()
            .Returns(new Tuple <List <PointModel>, List <List <PointModel> > >(stubPoints, null));

            var mockBoardModel = Substitute.For <BoardModel>(stubBoardService);

            var stubEventSubscriber = new MockEventSubscriber();

            mockBoardModel.NewPieceAdded    += stubEventSubscriber.Handle;
            mockBoardModel.SelectionChanged += stubEventSubscriber.Handle;

            var stubPlayer = Substitute.For <PlayerModel>(1, Colors.Yellow);

            var boardController = new BoardController(mockBoardModel);

            boardController.AddNewPiece(stubPoints[2], stubPlayer);

            // Act
            boardController.ChangeSelection(stubPoints[2], stubPlayer, true);

            // Assert
            var selectedCount = mockBoardModel.Points.Count(p => p.Piece != null && p.Piece.IsSelected);

            Assert.AreEqual(1, selectedCount);
        }
        public void ChangeSelection_Position_SelectionChangedRaised(
            int pointCount, int newPointModelIndex, int stubPointModelIndex, int expectedCallCount)
        {
            // Arrange
            var stubPoints = TestHelper.CreatePointsWithBounds(pointCount);

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreateInitialBoard()
            .Returns(new Tuple <List <PointModel>, List <List <PointModel> > >(stubPoints, null));

            var stubBoardModel = Substitute.For <BoardModel>(stubBoardService);

            var mockEventSubscriber = new MockEventSubscriber();

            stubBoardModel.NewPieceAdded    += mockEventSubscriber.Handle;
            stubBoardModel.SelectionChanged += mockEventSubscriber.Handle;

            var stubPlayer = Substitute.For <PlayerModel>(1, Colors.Yellow);

            var boardController = new BoardController(stubBoardModel);

            boardController.AddNewPiece(stubPoints[stubPointModelIndex], stubPlayer);
            mockEventSubscriber.Reset();

            // Act
            boardController.ChangeSelection(stubPoints[newPointModelIndex], stubPlayer, true);

            // Assert
            Assert.AreEqual(expectedCallCount, mockEventSubscriber.HitCount);
        }
        public void RemovePiece_ValidPosition_PieceIsRemoved()
        {
            // Arrange
            var stubPoints = TestHelper.CreatePointsWithBounds(5);

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreateInitialBoard()
            .Returns(new Tuple <List <PointModel>, List <List <PointModel> > >(stubPoints, null));

            var mockBoardModel = Substitute.For <BoardModel>(stubBoardService);

            var stubEventSubscriber = new MockEventSubscriber();

            mockBoardModel.NewPieceAdded += stubEventSubscriber.Handle;
            mockBoardModel.PieceRemoved  += stubEventSubscriber.Handle;

            var stubPlayer = Substitute.For <PlayerModel>(1, Colors.Yellow);

            var boardController = new BoardController(mockBoardModel);

            boardController.AddNewPiece(stubPoints[1], stubPlayer);

            // Act
            boardController.RemovePiece(stubPoints[1]);

            // Assert
            var expectedPoint = mockBoardModel.Points.Where(p => p.Bounds.Contains(stubPoints[1].Bounds)).First();

            Assert.IsNull(expectedPoint.Piece);
        }
        public void MoveSelectedPiece_InvalidNewPoint_PieceIsNotMoved(
            int pointCount, int newPointModelIndex, int stubPointModelIndex)
        {
            // Arrange
            var stubPoints = TestHelper.CreatePointsWithBounds(pointCount);

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreateInitialBoard()
            .Returns(new Tuple <List <PointModel>, List <List <PointModel> > >(stubPoints, null));

            var mockBoardModel = Substitute.For <BoardModel>(stubBoardService);

            var stubEventSubscriber = new MockEventSubscriber();

            mockBoardModel.NewPieceAdded    += stubEventSubscriber.Handle;
            mockBoardModel.SelectionChanged += stubEventSubscriber.Handle;
            mockBoardModel.PieceMoved       += stubEventSubscriber.Handle;

            var stubPlayer = Substitute.For <PlayerModel>(1, Colors.Yellow);

            var boardController = new BoardController(mockBoardModel);

            boardController.AddNewPiece(stubPoints[stubPointModelIndex], stubPlayer);
            boardController.ChangeSelection(stubPoints[stubPointModelIndex], stubPlayer, true);

            // Act
            boardController.MoveSelectedPiece(stubPoints[newPointModelIndex]);

            // Assert
            var expectedPoint = mockBoardModel.Points.Where(p => p.Bounds.Contains(stubPoints[stubPointModelIndex].Bounds)).First();

            Assert.IsNotNull(expectedPoint.Piece);
        }
예제 #8
0
 public void SetUp()
 {
     this.mockServer = new MockHassServerWebSocket();
     this.connectionChangedSubscriber = new MockEventSubscriber();
     this.connectionCTS = new CancellationTokenSource();
     this.wsClient      = new HassClientWebSocket();
     this.wsClient.ConnectionStateChanged += connectionChangedSubscriber.Handle;
 }
예제 #9
0
        public async Task AddEventHandlerSubscriptionForAnyEvent()
        {
            var testEventHandler = new MockEventHandler <EventResultInfo>();
            var subscriber       = new MockEventSubscriber();

            testEventHandler.Event += subscriber.Handle;
            var result = await this.hassWSApi.AddEventHandlerSubscriptionAsync(testEventHandler.EventHandler);

            Assert.IsTrue(result);

            await this.ForceStateChangedAndGetEventData(subscriber);

            Assert.NotZero(subscriber.HitCount);
        }
예제 #10
0
        public void UserMessage_EventSubscriber_PropertyChangedRaised()
        {
            // Arrange
            var boardViewModel = new BoardViewModel(null, null, null);

            var mockEventSubscriber = new MockEventSubscriber();

            boardViewModel.PropertyChanged += mockEventSubscriber.Handle;

            // Act
            boardViewModel.UserMessage = "Test message";

            // Assert
            Assert.AreEqual(1, mockEventSubscriber.HitCount);
        }
예제 #11
0
        public async Task AddEventHandlerSubscriptionForStateChangedEvents()
        {
            var testEventHandler = new MockEventHandler <EventResultInfo>();
            var subscriber       = new MockEventSubscriber();

            testEventHandler.Event += subscriber.Handle;
            var result = await this.hassWSApi.AddEventHandlerSubscriptionAsync(testEventHandler.EventHandler, KnownEventTypes.StateChanged);

            Assert.IsTrue(result);

            var eventData = await this.ForceStateChangedAndGetEventData(subscriber);

            Assert.NotZero(subscriber.HitCount);
            Assert.IsTrue(eventData.EntityId == testEntitytId);
            Assert.NotNull(eventData.NewState.State);
        }
예제 #12
0
        private async Task <StateChangedEvent> ForceStateChangedAndGetEventData(MockEventSubscriber subscriber)
        {
            var domain = testEntitytId.GetDomain();
            var update = await this.hassWSApi.CallServiceForEntitiesAsync(domain, "toggle", testEntitytId);

            Assert.NotNull(update, "SetUp failed");

            var eventResultInfo = await subscriber.WaitFirstEventArgWithTimeoutAsync <EventResultInfo>(
                (x) => HassSerializer.TryGetEnumFromSnakeCase <KnownEventTypes>(x.EventType, out var knownEventType) &&
                knownEventType == KnownEventTypes.StateChanged,
                500);

            Assert.NotNull(eventResultInfo, "SetUp failed");

            return(eventResultInfo.DeserializeData <StateChangedEvent>());
        }
예제 #13
0
        public void CurrentPlayerColor_EventSubscriber_PropertyChangedRaised()
        {
            // Arrange
            var boardViewModel = new BoardViewModel(null, null, null);

            var mockEventSubscriber = new MockEventSubscriber();

            boardViewModel.PropertyChanged += mockEventSubscriber.Handle;

            // Act
            boardViewModel.CurrentPlayerColor = new SolidColorBrush()
            {
                Color = Colors.Black
            };

            // Assert
            Assert.AreEqual(1, mockEventSubscriber.HitCount);
        }
예제 #14
0
        public void RemovingItemRemovesSubscribersAndPublishers()
        {
            WorkItem            workItem = new TestableRootWorkItem();
            EventBrokerStrategy strat    = new EventBrokerStrategy();
            MockBuilderContext  context  = new MockBuilderContext(strat);
            MockEventObject     thing    = new MockEventObject();
            MockEventSubscriber sub      = new MockEventSubscriber();

            context.Locator.Add(new DependencyResolutionLocatorKey(typeof(WorkItem), null), workItem);

            strat.BuildUp(context, typeof(MockEventObject), thing, null);
            strat.BuildUp(context, typeof(MockEventSubscriber), sub, null);

            Assert.IsFalse(thing.SomeEventIsNull());
            Assert.IsFalse(thing.SomeEvent2IsNull());

            strat.TearDown(context, thing);

            Assert.IsTrue(thing.SomeEventIsNull());
            Assert.IsTrue(thing.SomeEvent2IsNull());
        }
예제 #15
0
        public async Task AddMultipleEventHandlerSubscriptionForAnyEvent()
        {
            var testEventHandler1 = new MockEventHandler <EventResultInfo>();
            var testEventHandler2 = new MockEventHandler <EventResultInfo>();
            var subscriber1       = new MockEventSubscriber();
            var subscriber2       = new MockEventSubscriber();

            testEventHandler1.Event += subscriber1.Handle;
            testEventHandler2.Event += subscriber2.Handle;
            var result1 = await this.hassWSApi.AddEventHandlerSubscriptionAsync(testEventHandler1.EventHandler);

            var result2 = await this.hassWSApi.AddEventHandlerSubscriptionAsync(testEventHandler2.EventHandler);

            Assert.IsTrue(result1);
            Assert.IsTrue(result2);

            var eventData = await this.ForceStateChangedAndGetEventData(subscriber1);

            Assert.NotZero(subscriber1.HitCount);
            Assert.AreEqual(subscriber1.HitCount, subscriber2.HitCount);
            Assert.IsTrue(eventData.EntityId == testEntitytId);
        }
예제 #16
0
        public void StartGame_EmptyBoard_CurrentPlayerIsSet()
        {
            // Arrange
            var stubPlayers = TestHelper.CreateDefaultPlayers();

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreatePlayers().Returns(stubPlayers);

            var mockGameModel = Substitute.For <GameModel>(stubBoardService);

            var stubEventSubscriber = new MockEventSubscriber();

            mockGameModel.TurnTaken += stubEventSubscriber.Handle;

            var gameController = new GameController(mockGameModel);

            // Act
            gameController.StartGame();

            // Assert
            Assert.IsNotNull(mockGameModel.CurrentPlayer);
        }
예제 #17
0
        public void StartGame_EmptyBoard_RaisesTurnTaken()
        {
            // Arrange
            var stubPlayers = TestHelper.CreateDefaultPlayers();

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreatePlayers().Returns(stubPlayers);

            var stubGameModel = Substitute.For <GameModel>(stubBoardService);

            var mockEventSubscriber = new MockEventSubscriber();

            stubGameModel.TurnTaken += mockEventSubscriber.Handle;

            var gameController = new GameController(stubGameModel);

            // Act
            gameController.StartGame();

            // Assert
            Assert.AreEqual(1, mockEventSubscriber.HitCount);
        }
        public void MoveSelectedPiece_ValidSelectedPoint_PieceIsMovedToCorrectPoint()
        {
            // Arrange
            var stubPoints = TestHelper.CreatePointsWithBounds(5);

            stubPoints[2].Neighbors = new List <PointModel> {
                stubPoints[3]
            };

            var stubBoardService = Substitute.For <IBoardService>();

            stubBoardService.CreateInitialBoard()
            .Returns(new Tuple <List <PointModel>, List <List <PointModel> > >(stubPoints, null));

            var mockBoardModel = Substitute.For <BoardModel>(stubBoardService);

            var stubEventSubscriber = new MockEventSubscriber();

            mockBoardModel.NewPieceAdded    += stubEventSubscriber.Handle;
            mockBoardModel.SelectionChanged += stubEventSubscriber.Handle;
            mockBoardModel.PieceMoved       += stubEventSubscriber.Handle;

            var stubPlayer = Substitute.For <PlayerModel>(1, Colors.Yellow);

            var boardController = new BoardController(mockBoardModel);

            boardController.AddNewPiece(stubPoints[1], stubPlayer);
            boardController.ChangeSelection(stubPoints[1], stubPlayer, true);

            // Act
            boardController.MoveSelectedPiece(stubPoints[2]);

            // Assert
            var expectedPoint = mockBoardModel.Points.Where(p => p.Bounds.Contains(stubPoints[2].Bounds)).First();

            Assert.AreEqual(stubPoints[2].Piece, expectedPoint.Piece);
        }