blob: ae34ee08323fe57ffb983c8d761892d37eec95a8 [file] [log] [blame]
import os
import pathlib
import unittest
import tempfile
import shutil
import src.namespace_pkgs
class TempDir:
def __init__(self):
self.dir = tempfile.mkdtemp()
def root(self):
return self.dir
def add_dir(self, rel_path):
d = pathlib.Path(self.dir, rel_path)
d.mkdir(parents=True)
def add_file(self, rel_path, contents=None):
f = pathlib.Path(self.dir, rel_path)
f.parent.mkdir(parents=True, exist_ok=True)
if contents:
with open(f, "w") as writeable_f:
writeable_f.write(contents)
else:
f.touch()
def remove(self):
shutil.rmtree(self.dir)
class TestPkgResourcesStyleNamespacePackages(unittest.TestCase):
def test_finds_correct_namespace_packages(self):
directory = TempDir()
directory.add_file("google/auth/__init__.py")
directory.add_file("google/auth/foo.py")
directory.add_file(
"google_auth-1.8.2.dist-info/namespace_packages.txt",
contents="google\n"
)
expected = {
f"{directory.root()}/google",
}
actual = src.namespace_pkgs.pkg_resources_style_namespace_packages(directory.root())
self.assertEqual(actual, expected)
def test_empty_case(self):
# Even though this directory contains directories with no __init__.py
# it has an empty namespace_packages.txt file so no namespace packages
# should be returned.
directory = TempDir()
directory.add_file("foo/bar/biz.py")
directory.add_file("foo/bee/boo.py")
directory.add_file("foo/buu/__init__.py")
directory.add_file("foo/buu/bii.py")
directory.add_file("foo-1.0.0.dist-info/namespace_packages.txt")
actual = src.namespace_pkgs.pkg_resources_style_namespace_packages(directory.root())
self.assertEqual(actual, set())
def test_missing_namespace_pkgs_record_file(self):
# Even though this directory contains directories with no __init__.py
# it has no namespace_packages.txt file, so no namespace packages should
# be found and returned.
directory = TempDir()
directory.add_file("foo/bar/biz.py")
directory.add_file("foo/bee/boo.py")
directory.add_file("foo/buu/__init__.py")
directory.add_file("foo/buu/bii.py")
directory.add_file("foo-1.0.0.dist-info/METADATA")
directory.add_file("foo-1.0.0.dist-info/RECORD")
actual = src.namespace_pkgs.pkg_resources_style_namespace_packages(directory.root())
self.assertEqual(actual, set())
class TestImplicitNamespacePackages(unittest.TestCase):
def test_finds_correct_namespace_packages(self):
directory = TempDir()
directory.add_file("foo/bar/biz.py")
directory.add_file("foo/bee/boo.py")
directory.add_file("foo/buu/__init__.py")
directory.add_file("foo/buu/bii.py")
expected = {
f"{directory.root()}/foo",
f"{directory.root()}/foo/bar",
f"{directory.root()}/foo/bee",
}
actual = src.namespace_pkgs.implicit_namespace_packages(directory.root())
self.assertEqual(actual, expected)
def test_ignores_empty_directories(self):
directory = TempDir()
directory.add_file("foo/bar/biz.py")
directory.add_dir("foo/cat")
expected = {
f"{directory.root()}/foo",
f"{directory.root()}/foo/bar",
}
actual = src.namespace_pkgs.implicit_namespace_packages(directory.root())
self.assertEqual(actual, expected)
def test_empty_case(self):
directory = TempDir()
directory.add_file("foo/__init__.py")
directory.add_file("foo/bar/__init__.py")
directory.add_file("foo/bar/biz.py")
actual = src.namespace_pkgs.implicit_namespace_packages(directory.root())
self.assertEqual(actual, set())