public void TileRightClickedCommand_ShouldMarkOneFlag_AndThenUnmark() { //Arrange var minefieldFactory = new MinefieldFactory(new RandomBooleansGenerator()); var dialogService = Substitute.For <IDialogService>(); var navigationService = Substitute.For <INavigationService>(); dialogService.Show(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <MessageBoxButton>(), Arg.Any <MessageBoxImage>()); MainWindowViewModel vm = new MainWindowViewModel(minefieldFactory, dialogService, navigationService); Tile firstTile = vm.Minefield.Tiles.First().First(); vm.Minefield.TilesFlagged.ShouldBe(0); firstTile.State.ShouldNotBe(Tile.TileState.Flagged); firstTile.State.ShouldBe(Tile.TileState.Covered); //Act vm.TileRightClickedCommand.Execute(firstTile); //Assert vm.Minefield.TilesFlagged.ShouldBe(1); firstTile.State.ShouldBe(Tile.TileState.Flagged); firstTile.State.ShouldNotBe(Tile.TileState.Covered); //Act vm.TileRightClickedCommand.Execute(firstTile); //Assert vm.Minefield.TilesFlagged.ShouldBe(0); firstTile.State.ShouldNotBe(Tile.TileState.Flagged); firstTile.State.ShouldBe(Tile.TileState.Covered); }
public void OneMineMinefield_PropagationShouldUncoverAllButOne() { //Arrange IBooleansGenerator booleansGenerator = Substitute.For <IBooleansGenerator>(); booleansGenerator.GenerateBooleans(Arg.Any <int>(), Arg.Any <int>()) .Returns(x => { var r = new bool[(int)x[0]]; r[0] = true; //Only the first item will be set to true. return(r); }); int horizontalTilesCount = 5; int verticalTilesCount = 5; IMinefieldFactory factory = new MinefieldFactory(booleansGenerator); var minefield = factory.CreateNew(horizontalTilesCount, verticalTilesCount, 1); var someTile = minefield.Tiles[3][3]; //Act minefield.TilesCovered.ShouldBe(horizontalTilesCount * verticalTilesCount); someTile.UncoverTile(); //Assert minefield.TilesCovered.ShouldBe(1); }
public void CreateNew_ShouldThrowArgumentException_WhenMoreMinesThanTiles(int rows, int columns, int bombsCount) { IBooleansGenerator booleansGenerator = new RandomBooleansGenerator(); IMinefieldFactory factory = new MinefieldFactory(booleansGenerator); Should.Throw <ArgumentException>(() => factory.CreateNew(rows, columns, bombsCount)); }
/// <summary> /// Generates the output /// </summary> /// <param name="input"></param> /// <returns></returns> public string GenerateOutput(string input) { List <Minefield> minefields = new List <Minefield>(); Minefield minefield = null; StringBuilder output = new StringBuilder(); string[] delimiter = { Environment.NewLine }; string[] words = input.Split(delimiter, StringSplitOptions.None); foreach (string s in words) { if (MinefieldValidator.IsHeader(s)) { minefield = MinefieldFactory.Create(minefields.Count + 1, s); minefields.Add(minefield); } else if (MinefieldValidator.isFooter(s)) { break; } else { foreach (char c in s.ToCharArray()) { if (CellValidator.isMineOrSafe(c.ToString())) { minefield.Cells.Add(CellFactory.Create(c)); } else { ErroMessage = "Your input data is not valid."; return(output.ToString()); } } } } try { foreach (Minefield field in minefields) { MinesweeperConverter converter = new MinesweeperConverter(); converter.ConvertMinefield(field); //header output.Append(String.Format(MinefieldValidator.headerOutput, field.Id)); output.Append(Environment.NewLine); //result output.Append(converter.output); output.Append(Environment.NewLine); } } catch { ErroMessage = "Your input data is not valid."; return(output.ToString()); } return(output.ToString()); }
public void CreateNew_ShouldReturn_ValidMinefield(int rows, int columns, int bombsCount) { IBooleansGenerator booleansGenerator = new RandomBooleansGenerator(); IMinefieldFactory factory = new MinefieldFactory(booleansGenerator); var result = factory.CreateNew(rows, columns, bombsCount); result.Tiles.SelectMany(t => t).Count().ShouldBe(rows * columns); result.BombsInMinefiled.ShouldBe(bombsCount); result.Tiles.SelectMany(t => t).All(t => t.Neighbours.Count() >= 3 && t.Neighbours.Count() <= 8).ShouldBeTrue(); }
public void DummyCommand_ShouldShowMessage() { //Arrange var minefieldFactory = new MinefieldFactory(new RandomBooleansGenerator()); var dialogService = Substitute.For <IDialogService>(); var navigationService = Substitute.For <INavigationService>(); MainWindowViewModel vm = new MainWindowViewModel(minefieldFactory, dialogService, navigationService); //Act vm.DummyTileClickedCommand.Execute(null); //Assert dialogService.ReceivedWithAnyArgs(1).Show(null, null, 0, 0); }
public void ToggleFlag_ShouldToggle() { IBooleansGenerator booleansGenerator = new RandomBooleansGenerator(); IMinefieldFactory factory = new MinefieldFactory(booleansGenerator); var minefield = factory.CreateNew(5, 5, 10); var firstTile = minefield.Tiles[0][0]; firstTile.State.ShouldBe(Tile.TileState.Covered); firstTile.ToggleFlag(); firstTile.State.ShouldBe(Tile.TileState.Flagged); firstTile.ToggleFlag(); firstTile.State.ShouldBe(Tile.TileState.Covered); }
public void NewGameCommand_ShouldSetShowNewGameDialog() { //Arrange var minefieldFactory = new MinefieldFactory(new RandomBooleansGenerator()); var dialogService = Substitute.For <IDialogService>(); var navigationService = Substitute.For <INavigationService>(); dialogService.Show(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <MessageBoxButton>(), Arg.Any <MessageBoxImage>()); MainWindowViewModel vm = new MainWindowViewModel(minefieldFactory, dialogService, navigationService); //Act vm.NewGameCommand.Execute(null); //Assert navigationService.Received(1).ShowGameConfigDialog(Arg.Any <Window>()); }
public void RestartGameCommand_ShouldSetNewGame() { //Arrange var minefieldFactory = new MinefieldFactory(new RandomBooleansGenerator()); var dialogService = Substitute.For <IDialogService>(); var navigationService = Substitute.For <INavigationService>(); dialogService.Show(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <MessageBoxButton>(), Arg.Any <MessageBoxImage>()); MainWindowViewModel vm = new MainWindowViewModel(minefieldFactory, dialogService, navigationService); int gameHashCode = vm.Minefield.GetHashCode(); //Act vm.RestartGameCommand.Execute(null); //Assert int newGameHashCode = vm.Minefield.GetHashCode(); newGameHashCode.ShouldNotBe(gameHashCode); }
public bool ParseInput(string input) { if (MinefieldValidator.IsHeader(input)) { //Validate cells count of the current minefield if (minefield != null && !MinefieldValidator.isValidCellCount(minefield.Cells.Count, minefield.RowsCount, minefield.ColumnsCount)) { this.Renderer.ClearCurrentLine(); return(true); } //create a new minefield and add to a list of minefields minefield = MinefieldFactory.Create(minefields.Count + 1, input); minefields.Add(minefield); } //Check for end of user input else if (MinefieldValidator.isFooter(input)) { //Validate cells count of the current minefield if (minefield != null && !MinefieldValidator.isValidCellCount(minefield.Cells.Count, minefield.RowsCount, minefield.ColumnsCount)) { this.Renderer.ClearCurrentLine(); return(true); } else { //end of user's input return(false); } } else { //validate that the signs is equal to columns if (minefield != null && minefield.ColumnsCount != input.Length) { this.Renderer.ClearCurrentLine(); return(true); } CreateCells(minefield, input); } return(true); }