def test_up_down_left_right(self): square = self.puzzle.get_square(2, 3) cursor = xword.Cursor(square, xword.Direction.ACROSS, self.puzzle) self.assertEqual(tuple(cursor.h().square), (1, 3)) self.assertEqual(tuple(cursor.j().square), (2, 4)) self.assertEqual(tuple(cursor.k().square), (2, 2)) self.assertEqual(tuple(cursor.l().square), (4, 3)) # skip black square
def test_toggle_direction(self): square = next(self.puzzle.itersquares()) cursor = xword.Cursor(square, xword.Direction.ACROSS, self.puzzle) cursor = cursor.space() self.assertIs(cursor.direction, xword.Direction.DOWN) cursor = cursor.space() self.assertIs(cursor.direction, xword.Direction.ACROSS)
def test_next_squares(self): square = self.puzzle.get_square(2, 3) cursor = xword.Cursor(square, xword.Direction.ACROSS, self.puzzle) self.assertEqual([(direction, ''.join(square.solution for square, _ in pairs)) for direction, pairs in itertools.groupby(cursor.next_squares(), key=operator.itemgetter(1))], [(xword.Direction.ACROSS, 'CHEKIRSTIEESTREETMAIDS'), (xword.Direction.DOWN, 'REALISMALBERTACATERECTEDDUCHIESBLAKESHEETSRI'), (xword.Direction.ACROSS, 'RACEDBELARUSLABTECHAL')])
def test_word_motions(self): square = self.puzzle.get_square(3, 0) cursor = xword.Cursor(square, xword.Direction.ACROSS, self.puzzle) cursor = cursor.w() self.assertEqual(tuple(cursor.square), (0, 1)) cursor = cursor.b().b() self.assertEqual(tuple(cursor.square), (3, 4)) cursor = cursor.e().e().e() self.assertEqual(tuple(cursor.square), (6, 1)) cursor = cursor.ge().ge().ge().ge() self.assertEqual(tuple(cursor.square), (0, 5))
def test_rendering(self): square = self.puzzle.get_square(6, 3) cursor = xword.Cursor(square, xword.Direction.DOWN, self.puzzle) self.assertEqual(list(self.puzzle.render_grid(cursor)), ['┌───┬1──┬2──┬3──┬4──┬5──┬───┐', '│░░░│ │ │ │ │ │░░░│', '├6──┼───┼───┼───┼───┼───╆7━━┪'.replace('7', term.bold('7')), '│ │ │ │ │ │ ┃ ┃', '├8──┼───┼───┼───┼───┼───╂───┨', '│ │ │ │ │ │ ┃ ┃', '├9──┼───┼───┼───┼10─┼───╂───┨', '│ │ │ │░░░│ │ ┃ ┃', '├11─┼───┼───┼12─┼───┼───╂───┨', '│ │ │ │ │ │ ┃ ┃', '├13─┼───┼───┼───┼───┼───╂───┨', '│ │ │ │ │ │ ┃ ┃', '├───┼14─┼───┼───┼───┼───╄━━━┩', '│░░░│ │ │ │ │ │░░░│', '└───┴───┴───┴───┴───┴───┴───┘']) self.assertEqual(cursor.displayed_coords(), (26, 7))
def test_pencilling(self): square = next(self.puzzle.itersquares()) word = next(self.puzzle.iterwords(xword.Direction.ACROSS)) cursor = xword.Cursor(square, xword.Direction.ACROSS, self.puzzle) cursor = cursor.type('S').type('K').type('I').type('e').type('d') self.assertEqual([(square.status, square.guess) for square in word], [(xword.Status.PENCILLED_IN, 'S'), (xword.Status.PENCILLED_IN, 'K'), (xword.Status.PENCILLED_IN, 'I'), (xword.Status.NORMAL, 'E'), (xword.Status.NORMAL, 'D')]) cursor = cursor.b().tilde().tilde().tilde().tilde().tilde() self.assertEqual([(square.status, square.guess) for square in word], [(xword.Status.NORMAL, 'S'), (xword.Status.NORMAL, 'K'), (xword.Status.NORMAL, 'I'), (xword.Status.PENCILLED_IN, 'E'), (xword.Status.PENCILLED_IN, 'D')]) self.assertEqual(tuple(cursor.square), (0, 1)) cursor = cursor.tilde() # should have no effect on an empty square self.assertEqual(tuple(cursor.square), (1, 1)) square = self.puzzle.get_square(0, 1) self.assertEqual((square.status, square.guess), (xword.Status.NORMAL, None))
def test_text_editing(self): square = next(self.puzzle.itersquares()) word = next(self.puzzle.iterwords(xword.Direction.ACROSS)) cursor = xword.Cursor(square, xword.Direction.ACROSS, self.puzzle) self.assertEqual(tuple(cursor.square), (1, 0)) self.assertEqual([square.guess for square in word], [None, None, None, None, None]) cursor = cursor.type('s').type('k').type('i').type('d') self.assertEqual(tuple(cursor.square), (5, 0)) self.assertEqual([square.guess for square in word], ['S', 'K', 'I', 'D', None]) cursor = cursor.backspace() self.assertEqual(tuple(cursor.square), (4, 0)) self.assertEqual([square.guess for square in word], ['S', 'K', 'I', None, None]) cursor = cursor.type('e').type('d') self.assertEqual(tuple(cursor.square), (0, 1)) self.assertEqual([square.guess for square in word], ['S', 'K', 'I', 'E', 'D']) cursor = cursor.b().type('r') self.assertEqual(tuple(cursor.square), (2, 0)) self.assertEqual([square.guess for square in word], ['R', 'K', 'I', 'E', 'D']) cursor = cursor.x() self.assertEqual(tuple(cursor.square), (2, 0)) self.assertEqual([square.guess for square in word], ['R', None, 'I', 'E', 'D']) cursor = cursor.type('a').r('c') self.assertEqual(tuple(cursor.square), (3, 0)) self.assertEqual([square.guess for square in word], ['R', 'A', 'C', 'E', 'D'])