diff options
author | PJ Eby <distutils-sig@python.org> | 2005-07-24 22:47:06 +0000 |
---|---|---|
committer | PJ Eby <distutils-sig@python.org> | 2005-07-24 22:47:06 +0000 |
commit | 1c40632b88d76aea178e751483645ec3d32c81d9 (patch) | |
tree | 2cc3fa1af58200d5199b30771053c527ef91bd93 /setuptools/tests/test_resources.py | |
parent | 8618cfa8ac93431ffcede4f3987b559449bbbcb8 (diff) | |
download | external_python_setuptools-1c40632b88d76aea178e751483645ec3d32c81d9.tar.gz external_python_setuptools-1c40632b88d76aea178e751483645ec3d32c81d9.tar.bz2 external_python_setuptools-1c40632b88d76aea178e751483645ec3d32c81d9.zip |
Implement "entry points" for dynamic discovery of drivers and plugins.
Change setuptools to discover setup commands using an entry point group
called "distutils.commands". Thanks to Ian Bicking for the suggestion that
led to designing this super-cool feature.
--HG--
branch : setuptools
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041152
Diffstat (limited to 'setuptools/tests/test_resources.py')
-rw-r--r-- | setuptools/tests/test_resources.py | 84 |
1 files changed, 83 insertions, 1 deletions
diff --git a/setuptools/tests/test_resources.py b/setuptools/tests/test_resources.py index 3345311a..5392e59f 100644 --- a/setuptools/tests/test_resources.py +++ b/setuptools/tests/test_resources.py @@ -185,7 +185,7 @@ class DistroTests(TestCase): d,"Twisted>=1.5 fcgiapp>=0.1 ZConfig>=2.0 docutils>=0.3".split(), ["fastcgi", "docgen"] ) - self.assertRaises(InvalidOption, d.requires, ["foo"]) + self.assertRaises(UnknownExtra, d.requires, ["foo"]) @@ -203,6 +203,88 @@ class DistroTests(TestCase): +class EntryPointTests(TestCase): + + def assertfields(self, ep): + self.assertEqual(ep.name,"foo") + self.assertEqual(ep.module_name,"setuptools.tests.test_resources") + self.assertEqual(ep.attrs, ("EntryPointTests",)) + self.assertEqual(ep.extras, ("x",)) + self.failUnless(ep.load() is EntryPointTests) + self.assertEqual( + str(ep), + "foo = setuptools.tests.test_resources:EntryPointTests [x]" + ) + + def testBasics(self): + ep = EntryPoint( + "foo", "setuptools.tests.test_resources", ["EntryPointTests"], + ["x"] + ) + self.assertfields(ep) + + def testParse(self): + s = "foo = setuptools.tests.test_resources:EntryPointTests [x]" + ep = EntryPoint.parse(s) + self.assertfields(ep) + + ep = EntryPoint.parse("bar baz= spammity[PING]") + self.assertEqual(ep.name,"bar baz") + self.assertEqual(ep.module_name,"spammity") + self.assertEqual(ep.attrs, ()) + self.assertEqual(ep.extras, ("ping",)) + + ep = EntryPoint.parse(" fizzly = wocka:foo") + self.assertEqual(ep.name,"fizzly") + self.assertEqual(ep.module_name,"wocka") + self.assertEqual(ep.attrs, ("foo",)) + self.assertEqual(ep.extras, ()) + + + + + + def testRejects(self): + for ep in [ + "foo", "x=1=2", "x=a:b:c", "q=x/na", "fez=pish:tush-z", "x=f[a]>2", + ]: + try: EntryPoint.parse(ep) + except ValueError: pass + else: raise AssertionError("Should've been bad", ep) + + def checkSubMap(self, m): + self.assertEqual(str(m), + "{" + "'feature2': EntryPoint.parse(" + "'feature2 = another.module:SomeClass [extra1,extra2]'), " + "'feature1': EntryPoint.parse(" + "'feature1 = somemodule:somefunction')" + "}" + ) + + submap_str = """ + # define features for blah blah + feature1 = somemodule:somefunction + feature2 = another.module:SomeClass [extra1,extra2] + """ + + def testParseList(self): + self.checkSubMap(EntryPoint.parse_list("xyz", self.submap_str)) + self.assertRaises(ValueError, EntryPoint.parse_list, "x a", "foo=bar") + self.assertRaises(ValueError, EntryPoint.parse_list, "x", + ["foo=baz", "foo=bar"]) + + def testParseMap(self): + m = EntryPoint.parse_map({'xyz':self.submap_str}) + self.checkSubMap(m['xyz']) + self.assertEqual(m.keys(),['xyz']) + m = EntryPoint.parse_map("[xyz]\n"+self.submap_str) + self.checkSubMap(m['xyz']) + self.assertEqual(m.keys(),['xyz']) + self.assertRaises(ValueError, EntryPoint.parse_map, ["[xyz]", "[xyz]"]) + self.assertRaises(ValueError, EntryPoint.parse_map, self.submap_str) + + class RequirementsTests(TestCase): def testBasics(self): |