public IMathSpreadsheet Read() { var spreadsheet = new MathSpreadsheet(new Parser(), new Tokenizer()); System.Console.WriteLine("Please provide spreadsheet size."); System.Console.Write("Columns count: "); if (!int.TryParse(System.Console.ReadLine(), out var columnsCount)) { throw new SpreadsheetFormatException("Invalid columns count."); } System.Console.Write("Rows count: "); if (!int.TryParse(System.Console.ReadLine(), out var rowsCount)) { throw new SpreadsheetFormatException("Invalid rows count"); } var showInteractiveInput = columnsCount <= ColumnsThreshold && rowsCount <= RowsThreshold; if (!showInteractiveInput) { System.Console.WriteLine($"Spreadsheet size exceed {ColumnsThreshold} x {RowsThreshold} interactive output will be hidden because spreadsheet will not feet in console."); } spreadsheet.SetSize(columnsCount, rowsCount); System.Console.WriteLine(string.Empty); var left = System.Console.CursorLeft; var top = System.Console.CursorTop; for (var rowNumber = 1; rowNumber <= rowsCount; rowNumber++) { for (var columnNumber = 1; columnNumber <= columnsCount; columnNumber++) { if (showInteractiveInput) { CleanConsole(left, top); System.Console.WriteLine(Print.PrintSpreadsheet(spreadsheet, true)); } System.Console.Write($"Please enter { CellPosition.CoordinatesToKey(columnNumber, rowNumber) }: "); var cellValue = System.Console.ReadLine(); spreadsheet.SetValue(columnNumber, rowNumber, cellValue); } } if (showInteractiveInput) { CleanConsole(left, top); System.Console.WriteLine(Print.PrintSpreadsheet(spreadsheet, true)); } return(spreadsheet); }
public void CoordinatesToKey_ValidCoordinates_CellKey(int column, int row, string expectedKey) { var key = CellPosition.CoordinatesToKey(column, row); Assert.Equal(expectedKey, key); }