Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unit test for "compare_modules" function #389

Merged
merged 4 commits into from
Oct 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 3 additions & 8 deletions pipreqs/pipreqs.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,10 +149,6 @@ def get_all_imports(
return list(packages - data)


def filter_line(line):
return len(line) > 0 and line[0] != "#"


def generate_requirements_file(path, imports, symbol):
with _open(path, "w") as out_file:
logging.debug('Writing {num} requirements: {imports} to {file}'.format(
Expand Down Expand Up @@ -319,7 +315,7 @@ def parse_requirements(file_):
OSerror: If there's any issues accessing the file.

Returns:
tuple: The contents of the file, excluding comments.
list: The contents of the file, excluding comments.
mateuslatrova marked this conversation as resolved.
Show resolved Hide resolved
"""
modules = []
# For the dependency identifier specification, see
Expand Down Expand Up @@ -357,7 +353,6 @@ def parse_requirements(file_):

return modules


def compare_modules(file_, imports):
"""Compare modules in a file to imported modules in a project.

Expand All @@ -366,8 +361,8 @@ def compare_modules(file_, imports):
imports (tuple): Modules being imported in the project.

Returns:
tuple: The modules not imported in the project, but do exist in the
specified file.
set: The modules not imported in the project, but do exist in the
specified file.
"""
modules = parse_requirements(file_)

Expand Down
4 changes: 2 additions & 2 deletions tests/_data/imports.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
pandas==2.0.0
numpy>=1.2.3
pandas==2.0.0
numpy>=1.2.3
mateuslatrova marked this conversation as resolved.
Show resolved Hide resolved
torch<4.0.0
34 changes: 34 additions & 0 deletions tests/test_pipreqs.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,17 @@

self.project_clean = os.path.join(os.path.dirname(__file__), "_data_clean")
self.project_invalid = os.path.join(os.path.dirname(__file__), "_invalid_data")
self.parsed_packages = [
{"name": "pandas", "version": "2.0.0"},
{"name": "numpy", "version": "1.2.3"},
{"name": "torch", "version": "4.0.0"},
]
self.empty_filepath = os.path.join(self.project, "empty.txt")
self.imports_filepath = os.path.join(self.project, "imports.txt")

self.project_with_ignore_directory = os.path.join(os.path.dirname(__file__), "_data_ignore")
self.project_with_duplicated_deps = os.path.join(os.path.dirname(__file__), "_data_duplicated_deps")

Check warning on line 79 in tests/test_pipreqs.py

View workflow job for this annotation

GitHub Actions / Lint

[flake8] reported by reviewdog 🐶 blank line contains whitespace Raw Output: ./tests/test_pipreqs.py:79:1: W293 blank line contains whitespace
self.requirements_path = os.path.join(self.project, "requirements.txt")
self.alt_requirement_path = os.path.join(self.project, "requirements2.txt")

Expand Down Expand Up @@ -438,6 +447,31 @@
data = f.read().lower()
self.assertTrue(cleaned_module not in data)

def test_compare_modules(self):
test_cases = [
(self.empty_filepath, [], set()), # both empty
(self.empty_filepath, self.parsed_packages, set()), # only file empty
(
self.imports_filepath,
[],
set(package["name"] for package in self.parsed_packages),
), # only imports empty
(self.imports_filepath, self.parsed_packages, set()), # no difference
(
self.imports_filepath,
self.parsed_packages[1:],
set([self.parsed_packages[0]["name"]]),
), # common case
]

for test_case in test_cases:
with self.subTest(test_case):
filename, imports, expected_modules_not_imported = test_case

modules_not_imported = pipreqs.compare_modules(filename, imports)

self.assertSetEqual(modules_not_imported, expected_modules_not_imported)

Check warning on line 474 in tests/test_pipreqs.py

View workflow job for this annotation

GitHub Actions / Lint

[flake8] reported by reviewdog 🐶 blank line contains whitespace Raw Output: ./tests/test_pipreqs.py:474:1: W293 blank line contains whitespace
def test_output_requirements(self):
"""
Test --print parameter
Expand Down
Loading