diff --git a/oec/controller.py b/oec/controller.py index 28cb9ee..d6332a4 100644 --- a/oec/controller.py +++ b/oec/controller.py @@ -88,7 +88,7 @@ class Controller: self.logger.info(f'Rows = {rows}, Columns = {columns}, Keymap = {keymap_name}') - self.terminal.display.clear(include_status_line=True) + self.terminal.display.clear(clear_status_line=True) # Show the attached indicator on the status line. self.terminal.display.status_line.write_string(0, 'S') diff --git a/oec/display.py b/oec/display.py index b70223c..3cd757b 100644 --- a/oec/display.py +++ b/oec/display.py @@ -170,11 +170,9 @@ class Display: self.status_line = StatusLine(self.interface, columns) - def move_cursor(self, address=None, index=None, row=None, column=None, - force_load=False): + def move_cursor(self, row, column, force_load=False): """Load the address counter.""" - if address is None: - address = self._calculate_address(index=index, row=row, column=column) + address = self._calculate_address(row=row, column=column) # TODO: Verify that the address is within range - exclude status line. @@ -187,12 +185,8 @@ class Display: return True - def write_buffer(self, byte, index=None, row=None, column=None): - if index is None: - if row is not None and column is not None: - index = self._get_index(row, column) - else: - raise ValueError('Either index or row and column is required') + def buffered_write(self, byte, row, column): + index = self._get_index(row, column) # TODO: Verify that index is within range. @@ -209,11 +203,11 @@ class Display: for (start_index, end_index) in self._get_dirty_ranges(): self._flush_range(start_index, end_index) - def clear(self, include_status_line=False): + def clear(self, clear_status_line=False): """Clear the screen.""" (rows, columns) = self.dimensions - if include_status_line: + if clear_status_line: address = 0 repeat = ((rows + 1) * columns) - 1 else: @@ -228,7 +222,7 @@ class Display: self.dirty.clear() - self.move_cursor(index=0, force_load=True) + self.move_cursor(0, 0, force_load=True) def _get_index(self, row, column): return (row * self.dimensions.columns) + column diff --git a/oec/vt100.py b/oec/vt100.py index 87e64ca..ae083ae 100644 --- a/oec/vt100.py +++ b/oec/vt100.py @@ -99,7 +99,7 @@ class VT100Session(Session): self.terminal.display.status_line.write_string(45, 'VT100') # Reset the cursor. - self.terminal.display.move_cursor(row=0, column=0) + self.terminal.display.move_cursor(0, 0) def terminate(self): if self.host_process: @@ -195,7 +195,7 @@ class VT100Session(Session): # TODO: Add additional mapping for special cases such as '^'... byte = encode_ascii_character(ord(character.data)) if len(character.data) == 1 else 0x00 - self.terminal.display.write_buffer(byte, row=row, column=column) + self.terminal.display.buffered_write(byte, row, column) def _flush(self): self.terminal.display.flush() @@ -204,4 +204,4 @@ class VT100Session(Session): # reliable - maybe it needs to be forced sometimes. cursor = self.vt100_screen.cursor - self.terminal.display.move_cursor(row=cursor.y, column=cursor.x) + self.terminal.display.move_cursor(cursor.y, cursor.x) diff --git a/tests/test_display.py b/tests/test_display.py index 9fdcd5d..4583100 100644 --- a/tests/test_display.py +++ b/tests/test_display.py @@ -13,27 +13,9 @@ class DisplayMoveCursorTestCase(unittest.TestCase): self.display = Display(self.interface, dimensions) - def test_with_address(self): + def test(self): # Act - self.display.move_cursor(address=80) - - # Assert - self.assertEqual(self.display.address_counter, 80) - - self.interface.offload_load_address_counter.assert_called_with(80) - - def test_with_index(self): - # Act - self.display.move_cursor(index=15) - - # Assert - self.assertEqual(self.display.address_counter, 95) - - self.interface.offload_load_address_counter.assert_called_with(95) - - def test_with_coordinates(self): - # Act - self.display.move_cursor(row=10, column=15) + self.display.move_cursor(10, 15) # Assert self.assertEqual(self.display.address_counter, 895) @@ -42,12 +24,12 @@ class DisplayMoveCursorTestCase(unittest.TestCase): def test_no_change(self): # Arrange - self.display.move_cursor(address=80) + self.display.move_cursor(0, 0) self.interface.offload_load_address_counter.reset_mock() # Act - self.display.move_cursor(address=80) + self.display.move_cursor(0, 0) # Assert self.assertEqual(self.display.address_counter, 80) @@ -56,19 +38,19 @@ class DisplayMoveCursorTestCase(unittest.TestCase): def test_no_change_force(self): # Arrange - self.display.move_cursor(address=80) + self.display.move_cursor(0, 0) self.interface.offload_load_address_counter.reset_mock() # Act - self.display.move_cursor(address=80, force_load=True) + self.display.move_cursor(0, 0, force_load=True) # Assert self.assertEqual(self.display.address_counter, 80) self.interface.offload_load_address_counter.assert_called_with(80) -class DisplayWriteBufferTestCase(unittest.TestCase): +class DisplayBufferedWriteTestCase(unittest.TestCase): def setUp(self): self.interface = Mock() @@ -76,20 +58,10 @@ class DisplayWriteBufferTestCase(unittest.TestCase): self.display = Display(self.interface, dimensions) - def test_with_index(self): + def test(self): # Act - self.display.write_buffer(0x01, index=15) - self.display.write_buffer(0x02, index=97) - - # Assert - self.assertEqual(self.display.buffer[15], 0x01) - self.assertEqual(self.display.buffer[97], 0x02) - self.assertSequenceEqual(self.display.dirty, [15, 97]) - - def test_with_coordinates(self): - # Act - self.display.write_buffer(0x01, row=0, column=15) - self.display.write_buffer(0x02, row=1, column=17) + self.display.buffered_write(0x01, 0, 15) + self.display.buffered_write(0x02, 1, 17) # Assert self.assertEqual(self.display.buffer[15], 0x01) @@ -97,15 +69,15 @@ class DisplayWriteBufferTestCase(unittest.TestCase): self.assertSequenceEqual(self.display.dirty, [15, 97]) def test_change(self): - self.assertTrue(self.display.write_buffer(0x01, index=0)) - self.assertTrue(self.display.write_buffer(0x02, index=0)) + self.assertTrue(self.display.buffered_write(0x01, 0, 0)) + self.assertTrue(self.display.buffered_write(0x02, 0, 0)) self.assertEqual(self.display.buffer[0], 0x02) self.assertSequenceEqual(self.display.dirty, [0]) def test_no_change(self): - self.assertTrue(self.display.write_buffer(0x01, index=0)) - self.assertFalse(self.display.write_buffer(0x01, index=0)) + self.assertTrue(self.display.buffered_write(0x01, 0, 0)) + self.assertFalse(self.display.buffered_write(0x01, 0, 0)) self.assertEqual(self.display.buffer[0], 0x01) self.assertSequenceEqual(self.display.dirty, [0]) @@ -129,9 +101,9 @@ class DisplayFlushTestCase(unittest.TestCase): def test_single_range(self): # Arrange - self.display.write_buffer(0x01, index=0) - self.display.write_buffer(0x02, index=1) - self.display.write_buffer(0x03, index=2) + self.display.buffered_write(0x01, 0, 0) + self.display.buffered_write(0x02, 0, 1) + self.display.buffered_write(0x03, 0, 2) # Act self.display.flush() @@ -141,12 +113,12 @@ class DisplayFlushTestCase(unittest.TestCase): def test_multiple_ranges(self): # Arrange - self.display.write_buffer(0x01, index=0) - self.display.write_buffer(0x02, index=1) - self.display.write_buffer(0x03, index=2) - self.display.write_buffer(0x05, index=30) - self.display.write_buffer(0x06, index=31) - self.display.write_buffer(0x04, index=20) + self.display.buffered_write(0x01, 0, 0) + self.display.buffered_write(0x02, 0, 1) + self.display.buffered_write(0x03, 0, 2) + self.display.buffered_write(0x05, 0, 30) + self.display.buffered_write(0x06, 0, 31) + self.display.buffered_write(0x04, 0, 20) # Act self.display.flush() @@ -164,13 +136,13 @@ class DisplayClearTestCase(unittest.TestCase): def test_excluding_status_line(self): # Arrange - self.display.write_buffer(0x01, index=0) + self.display.buffered_write(0x01, 0, 0) self.assertEqual(self.display.buffer[0], 0x01) self.assertTrue(self.display.dirty) # Act - self.display.clear(include_status_line=False) + self.display.clear(clear_status_line=False) # Assert self.interface.offload_write.assert_called_with(b'\x00', address=80, repeat=1919) @@ -181,13 +153,13 @@ class DisplayClearTestCase(unittest.TestCase): def test_including_status_line(self): # Arrange - self.display.write_buffer(0x01, index=0) + self.display.buffered_write(0x01, 0, 0) self.assertEqual(self.display.buffer[0], 0x01) self.assertTrue(self.display.dirty) # Act - self.display.clear(include_status_line=True) + self.display.clear(clear_status_line=True) # Assert self.interface.offload_write.assert_called_with(b'\x00', address=0, repeat=1999) @@ -206,11 +178,11 @@ class DisplayFlushRangeTestCase(unittest.TestCase): def test_when_start_address_is_current_address_counter(self): # Arrange - self.display.move_cursor(index=0) + self.display.move_cursor(0, 0) - self.display.write_buffer(0x01, index=0) - self.display.write_buffer(0x02, index=1) - self.display.write_buffer(0x03, index=2) + self.display.buffered_write(0x01, 0, 0) + self.display.buffered_write(0x02, 0, 1) + self.display.buffered_write(0x03, 0, 2) # Act self.display.flush() @@ -223,11 +195,11 @@ class DisplayFlushRangeTestCase(unittest.TestCase): def test_when_start_address_is_not_current_address_counter(self): # Arrange - self.display.move_cursor(index=70) + self.display.move_cursor(0, 70) - self.display.write_buffer(0x01, index=0) - self.display.write_buffer(0x02, index=1) - self.display.write_buffer(0x03, index=2) + self.display.buffered_write(0x01, 0, 0) + self.display.buffered_write(0x02, 0, 1) + self.display.buffered_write(0x03, 0, 2) # Act self.display.flush()