def test__get_numbers_of_lines__one_line(self):
        # Arrange
        content = "This is just one line"

        # Act
        result = FileInspector.get_numbers_of_lines(content)

        # Assert
        self.assertEqual(1, result)
    def test__split_content__pos_minus_one(self):
        # Arrange
        content = "This is just one line"

        # Act
        result_first, result_second = FileInspector.split_content(content, -1)

        # Assert
        self.assertEqual("This is just one line", result_first)
        self.assertEqual("", result_second)
    def test__split_content__at_end(self):
        # Arrange
        content = "This is just one line"

        # Act
        result_first, result_second = FileInspector.split_content(content, len(content))

        # Assert
        self.assertEqual("This is just one line", result_first)
        self.assertEqual("", result_second)
    def test__split_content__in_middle(self):
        # Arrange
        content = "This is just one line"

        # Act
        result_first, result_second = FileInspector.split_content(content, content.find("just"))

        # Assert
        self.assertEqual("This is ", result_first)
        self.assertEqual("just one line", result_second)
    def test__get_numbers_of_lines__using_offset(self):
        # Arrange
        content = "This is the first line\n" \
                  "This is the second line\n" \
                  "and a third one"

        # Act
        result = FileInspector.get_numbers_of_lines(content, 4)

        # Assert
        self.assertEqual(3 + 4, result)
    def test__search_worker__search_show_lines__multiple_terms_case_sensitive(self):
        # Arrange
        path = self.txt_path
        terms = ["sed", "lorem"]

        # Act
        result = FileInspector.search_worker(path, terms, True, True)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(2, len(result))
    def test__inspect_files__multiple_files__search_show_lines(self):
        # Arrange
        paths = [self.txt_path, self.py_path, self.log_path]
        terms = ["2018"]

        # Act
        result = FileInspector.inspect_files(paths, terms, False, True)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(4, len(result))
    def test__search_worker__simple_search__return_multiple_terms(self):
        # Arrange
        path = self.txt_path
        terms = ["sed", "Lorem"]

        # Act
        result = FileInspector.search_worker(path, terms, False, False)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(2, len(result))
    def test__search_worker__search_show_lines__return_one_term(self):
        # Arrange
        path = self.txt_path
        terms = "sed"

        # Act
        result = FileInspector.search_worker(path, terms, False, True)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(2, len(result))
    def test__exec_search_show_lines__term_not_in_file__return_empty(self):
        # Arrange
        path = self.txt_path
        content = self.txt_content
        term = "not-found"

        # Act
        result = FileInspector.exec_search_show_lines(path, content, term)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(0, len(result))
    def test__exec_simple_search__term_has_line_break__return_file(self):
        # Arrange
        path = self.txt_path
        content = self.txt_content
        term = "elitr,\nsed"

        # Act
        result = FileInspector.exec_simple_search(path, content, term)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(1, len(result))
    def test__exec_simple_search__term_in_file__return_file(self):
        # Arrange
        path = self.txt_path
        content = self.txt_content
        term = "sed"

        # Act
        result = FileInspector.exec_simple_search(path, content, term)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(1, len(result))
        self.assertEqual(path, result[0].file)
        self.assertEqual(term, result[0].term)
        self.assertIsNone(result[0].line_number)
    def test__exec_search_show_lines__term_has_line_break__return_file(self):
        # Arrange
        path = self.txt_path
        content = self.txt_content
        term = "elitr,\nsed"

        # Act
        result = FileInspector.exec_search_show_lines(path, content, term)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(1, len(result))
        self.assertEqual(path, result[0].file)
        self.assertEqual(term, result[0].term)
        self.assertEqual(1, result[0].line_number)
    def test__exec_search_show_lines__single_line__return_file(self):
        # Arrange
        path = self.txt_path
        content = "This is just one line"
        term = "just"

        # Act
        result = FileInspector.exec_search_show_lines(path, content, term)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(1, len(result))
        self.assertEqual(path, result[0].file)
        self.assertEqual(term, result[0].term)
        self.assertEqual(1, result[0].line_number)
    def test__exec_search_show_lines__term_has_line_break__multiple_hits__return_files(self):
        # Arrange
        path = self.py_path
        content = self.py_content
        term = "str\n  "

        # Act
        result = FileInspector.exec_search_show_lines(path, content, term)

        # Assert
        self.assertEqual(list, type(result))
        self.assertEqual(2, len(result))
        self.assertEqual(path, result[0].file)
        self.assertEqual(term, result[0].term)
        self.assertEqual(14, result[0].line_number)
        self.assertEqual(path, result[1].file)
        self.assertEqual(term, result[1].term)
        self.assertEqual(15, result[1].line_number)
    def test__read_file__path_to_directory__return_empty(self):
        # Act
        result = FileInspector.read_file(os.path.join(self.sub1_path))

        # Assert
        self.assertEqual("", result)
    def test__read_file__non_existing_file__return_empty(self):
        # Act
        result = FileInspector.read_file(os.path.join(self.sub1_path, 'no-file.txt'))

        # Assert
        self.assertEqual("", result)
    def test__read_file__existing_file__read_all(self):
        # Act
        result = FileInspector.read_file(self.txt_path)

        # Assert
        self.assertEqual(self.txt_content, result)