Ok, I just wanted *something* simpler than what we had, since these patches introduced a fair number of new extension functions.
On Mon, Dec 13, 2010 at 04:10, Jelmer Vernooij <[email protected]> wrote: > On Thu, 2010-12-02 at 16:22 -0800, [email protected] wrote: > > diff --git a/dulwich/tests/utils.py b/dulwich/tests/utils.py > > index 8df2a83..2535e3f 100644 > > --- a/dulwich/tests/utils.py > > +++ b/dulwich/tests/utils.py > > @@ -25,12 +25,16 @@ import os > > import shutil > > import tempfile > > import time > > +import types > > > > from dulwich.objects import ( > > FixedSha, > > Commit, > > ) > > from dulwich.repo import Repo > > +from dulwich.tests import ( > > + TestSkipped, > > + ) > > > > > > def open_repo(name): > > @@ -105,3 +109,41 @@ def make_commit(**attrs): > > 'tree': '0' * 40} > > all_attrs.update(attrs) > > return make_object(Commit, **all_attrs) > > + > > + > > +def functest_builder(method, func): > > + """Generate a test method that tests the given function.""" > > + > > + def do_test(self): > > + method(self, func) > > + > > + return do_test > > + > > + > > +def ext_functest_builder(method, func): > > + """Generate a test method that tests the given extension function. > > + > > + This is intended to generate test methods that test both a > pure-Python > > + version and an extension version using common test code. The > extension test > > + will raise TestSkipped if the extension is not found. > > + > > + Sample usage: > > + > > + class MyTest(TestCase); > > + def _do_some_test(self, func_impl): > > + self.assertEqual('foo', func_impl()) > > + > > + test_foo = functest_builder(_do_some_test, foo_py) > > + test_foo_extension = ext_functest_builder(_do_some_test, _foo_c) > > + > > + :param method: The method to run. It must must two parameters, self > and the > > + function implementation to test. > > + :param func: The function implementation to pass to method. > > + """ > > + > > + def do_test(self): > > + if not isinstance(func, types.BuiltinFunctionType): > > + raise TestSkipped("%s extension not found", func.func_name) > > + method(self, func) > > + > > + return do_test > I'm not crazy about this pattern, the approach that's used in Bazaar for > this kind of thing is nicer imho. I'll see if I can propose an > alternative. > > Cheers, > > Jelmer >
_______________________________________________ Mailing list: https://launchpad.net/~dulwich-users Post to : [email protected] Unsubscribe : https://launchpad.net/~dulwich-users More help : https://help.launchpad.net/ListHelp

