]> granicus.if.org Git - python/commitdiff
Added test for namespace package dynamic path updates.
authorEric V. Smith <eric@trueblade.com>
Fri, 25 May 2012 15:25:27 +0000 (11:25 -0400)
committerEric V. Smith <eric@trueblade.com>
Fri, 25 May 2012 15:25:27 +0000 (11:25 -0400)
Lib/test/test_namespace_pkgs.py

index 176ddd36ea271fce9145dac4599c333e6eea7790..02b55281cf0b13a37833ecc809ec1a54274ec957 100644 (file)
@@ -206,6 +206,51 @@ class LegacySupport(NamespacePackageTest):
         self.assertNotIn('namespace', str(foo.__loader__).lower())
 
 
+class DynamicPathCalculation(NamespacePackageTest):
+    paths = ['project1', 'project2']
+
+    def test_project3_fails(self):
+        import parent.child.one
+        self.assertEqual(len(parent.__path__), 2)
+        self.assertEqual(len(parent.child.__path__), 2)
+        import parent.child.two
+        self.assertEqual(len(parent.__path__), 2)
+        self.assertEqual(len(parent.child.__path__), 2)
+
+        self.assertEqual(parent.child.one.attr, 'parent child one')
+        self.assertEqual(parent.child.two.attr, 'parent child two')
+
+        with self.assertRaises(ImportError):
+            import parent.child.three
+
+        self.assertEqual(len(parent.__path__), 2)
+        self.assertEqual(len(parent.child.__path__), 2)
+
+    def test_project3_succeeds(self):
+        import parent.child.one
+        self.assertEqual(len(parent.__path__), 2)
+        self.assertEqual(len(parent.child.__path__), 2)
+        import parent.child.two
+        self.assertEqual(len(parent.__path__), 2)
+        self.assertEqual(len(parent.child.__path__), 2)
+
+        self.assertEqual(parent.child.one.attr, 'parent child one')
+        self.assertEqual(parent.child.two.attr, 'parent child two')
+
+        with self.assertRaises(ImportError):
+            import parent.child.three
+
+        # now add project3
+        sys.path.append(os.path.join(self.root, 'project3'))
+        import parent.child.three
+
+        # the paths dynamically get longer, to include the new directories
+        self.assertEqual(len(parent.__path__), 3)
+        self.assertEqual(len(parent.child.__path__), 3)
+
+        self.assertEqual(parent.child.three.attr, 'parent child three')
+
+
 class ZipWithMissingDirectory(NamespacePackageTest):
     paths = ['missing_directory.zip']