Skip to content

Commit

Permalink
Merge pull request #389 from mateuslatrova/compare_modules_test
Browse files Browse the repository at this point in the history
Add unit test for "compare_modules" function
  • Loading branch information
alan-barzilay authored Oct 10, 2023
2 parents 12cc1e5 + 2ebfc46 commit 6f232bd
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 10 deletions.
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.
"""
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
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 @@ def setUp(self):

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")

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 @@ def test_clean_with_imports_to_clean(self):
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)

def test_output_requirements(self):
"""
Test --print parameter
Expand Down

0 comments on commit 6f232bd

Please sign in to comment.