def test_has_returned_every_line_empty_file(self):
        """With empty file (a degenerate case), it is expected to have returned everything."""
        with patch("file_read_backwards.buffer_work_space._get_file_size"
                   ) as _get_file_size_mock:
            fp_mock = Mock()
            _get_file_size_mock.return_value = 0

            b = BufferWorkSpace(fp_mock, chunk_size=io.DEFAULT_BUFFER_SIZE)
            r = b.has_returned_every_line()
            self.assertTrue(r)
    def test_has_returned_every_line_with_not_fully_read_in_buffer_space(self):
        """With BufferWorkSpace that has not fully read in, it definitely has not returned everything.

        Note that: not fully read in is represented by read_position != 0
        """
        with patch("file_read_backwards.buffer_work_space._get_file_size"
                   ) as _get_file_size_mock:
            fp_mock = Mock()
            _get_file_size_mock.return_value = 1024

            b = BufferWorkSpace(fp_mock, chunk_size=io.DEFAULT_BUFFER_SIZE)
            b.read_position = 1
            r = b.has_returned_every_line()
            self.assertFalse(r)
    def test_has_returned_every_line_with_fully_read_in_and_processed_buffer_space(
            self):
        """BufferWorkSpace that has been fully read in and fully processed has not returned everything.

        Note: not fully read in and some unprocessed buffer is represented by read_position = 0 and read_buffer = None
        """
        with patch("file_read_backwards.buffer_work_space._get_file_size"
                   ) as _get_file_size_mock:
            fp_mock = Mock()
            _get_file_size_mock.return_value = 1024

            b = BufferWorkSpace(fp_mock, chunk_size=io.DEFAULT_BUFFER_SIZE)
            b.read_position = 0
            b.read_buffer = None
            r = b.has_returned_every_line()
            self.assertTrue(r)