def test_should_stop_observing(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.add_observer(self.observer.notify)
        buf.prepend_record(self._get_line(2))
        buf.remove_observer(self.observer.notify)
        buf.prepend_record(self._get_line(1))
        self.assertEqual(1, self.observer.count)
    def test_should_stop_observing(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.add_observer(self.observer.notify)
        buf.prepend_record(self._get_line(2))
        buf.remove_observer(self.observer.notify)
        buf.prepend_record(self._get_line(1))
        self.assertEqual(1, self.observer.count)
    def test_should_append_record_on_empty_buffer(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.add_observer(self.observer.notify)
        buf.append_record(self._get_line(2))
        self.assertEqual(1, self.observer.count)

        cur = buf.get_current_lines()
        self.assertEqual(1, len(cur))
        self.assertEqual('2', cur[0].message)
    def test_should_append_record_on_empty_buffer(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.add_observer(self.observer.notify)
        buf.append_record(self._get_line(2))
        self.assertEqual(1, self.observer.count)

        cur = buf.get_current_lines()
        self.assertEqual(1, len(cur))
        self.assertEqual('2', cur[0].message)
    def test_should_prepend_record_on_off_screen_buffer(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.prepend_record(self._get_line(3))
        buf.prepend_record(self._get_line(2))

        buf.add_observer(self.observer.notify)
        buf.prepend_record(self._get_line(1))
        self.assertEqual(0, self.observer.count)

        cur = buf.get_current_lines()
        self.assertEqual(2, len(cur))
        self.assertEqual('2', cur[0].message)
        self.assertEqual('3', cur[1].message)
    def test_should_prepend_record_on_off_screen_buffer(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.prepend_record(self._get_line(3))
        buf.prepend_record(self._get_line(2))

        buf.add_observer(self.observer.notify)
        buf.prepend_record(self._get_line(1))
        self.assertEqual(0, self.observer.count)

        cur = buf.get_current_lines()
        self.assertEqual(2, len(cur))
        self.assertEqual('2', cur[0].message)
        self.assertEqual('3', cur[1].message)
    def test_should_auto_scroll_on_append_if_screen_is_at_end_of_buffer(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.append_record(self._get_line(2))
        buf.append_record(self._get_line(3))

        buf.add_observer(self.observer.notify)
        buf.append_record(self._get_line(4))

        cur = buf.get_current_lines()
        self.assertEqual(2, len(cur))
        self.assertEqual('3', cur[0].message)
        self.assertEqual('4', cur[1].message)

        self.assertEqual(1, self.observer.count)
    def test_should_auto_scroll_on_append_if_screen_is_at_end_of_buffer(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.append_record(self._get_line(2))
        buf.append_record(self._get_line(3))

        buf.add_observer(self.observer.notify)
        buf.append_record(self._get_line(4))

        cur = buf.get_current_lines()
        self.assertEqual(2, len(cur))
        self.assertEqual('3', cur[0].message)
        self.assertEqual('4', cur[1].message)

        self.assertEqual(1, self.observer.count)
    def test_should_not_auto_scroll_if_not_at_end_of_buffer(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.append_record(self._get_line(2))
        buf.append_record(self._get_line(3))
        buf.append_record(self._get_line(4))
        buf.go_to_previous_line()

        buf.add_observer(self.observer.notify)

        buf.append_record(self._get_line(5))
        cur = buf.get_current_lines()
        self.assertEqual(2, len(cur))
        self.assertEqual('2', cur[0].message)

        self.assertEqual(0, self.observer.count)
    def test_should_not_auto_scroll_if_not_at_end_of_buffer(self):
        buf = ScreenBuffer(page_size=2, buffer_size=5)

        buf.append_record(self._get_line(2))
        buf.append_record(self._get_line(3))
        buf.append_record(self._get_line(4))
        buf.go_to_previous_line()

        buf.add_observer(self.observer.notify)

        buf.append_record(self._get_line(5))
        cur = buf.get_current_lines()
        self.assertEqual(2, len(cur))
        self.assertEqual('2', cur[0].message)

        self.assertEqual(0, self.observer.count)