Mercurial > hg
view tests/test-dicthelpers.py @ 18969:257afe5489d4
largefiles: improve repo wrapping detection
Before this patch, repo wrapping detection in "reposetup()" of
largefiles can detect only limited repo wrapping: replacing target
functions by another one named as "wrap".
So, it can't detect repo wrapping even in recommended style: replacing
"__class__" of repo by derived class.
This patch can detect repo wrapping in both styles below:
- replacing "__class__" of repo by derived class (recommended style):
class derived(repo.__class__):
def push(self, *args, **kwargs):
return super(derived, self).push(*args, **kwargs)
repo.__class__ = derived
- replacing function of repo by another one (not recommended style):
orgpush = repo.push
def push(*args, **kwargs):
return orgpush(*args, **kwargs)
repo.push = push
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Wed, 10 Apr 2013 02:27:35 +0900 |
parents | ed46c2b98b0d |
children |
line wrap: on
line source
from mercurial.dicthelpers import diff, join import unittest import silenttestrunner class testdicthelpers(unittest.TestCase): def test_dicthelpers(self): # empty dicts self.assertEqual(diff({}, {}), {}) self.assertEqual(join({}, {}), {}) d1 = {} d1['a'] = 'foo' d1['b'] = 'bar' d1['c'] = 'baz' # same identity self.assertEqual(diff(d1, d1), {}) self.assertEqual(join(d1, d1), {'a': ('foo', 'foo'), 'b': ('bar', 'bar'), 'c': ('baz', 'baz')}) # vs empty self.assertEqual(diff(d1, {}), {'a': ('foo', None), 'b': ('bar', None), 'c': ('baz', None)}) self.assertEqual(diff(d1, {}), {'a': ('foo', None), 'b': ('bar', None), 'c': ('baz', None)}) d2 = {} d2['a'] = 'foo2' d2['b'] = 'bar' d2['d'] = 'quux' self.assertEqual(diff(d1, d2), {'a': ('foo', 'foo2'), 'c': ('baz', None), 'd': (None, 'quux')}) self.assertEqual(join(d1, d2), {'a': ('foo', 'foo2'), 'b': ('bar', 'bar'), 'c': ('baz', None), 'd': (None, 'quux')}) # with default argument self.assertEqual(diff(d1, d2, 123), {'a': ('foo', 'foo2'), 'c': ('baz', 123), 'd': (123, 'quux')}) self.assertEqual(join(d1, d2, 456), {'a': ('foo', 'foo2'), 'b': ('bar', 'bar'), 'c': ('baz', 456), 'd': (456, 'quux')}) # check that we compare against default self.assertEqual(diff(d1, d2, 'baz'), {'a': ('foo', 'foo2'), 'd': ('baz', 'quux')}) self.assertEqual(diff(d1, d2, 'quux'), {'a': ('foo', 'foo2'), 'c': ('baz', 'quux')}) if __name__ == '__main__': silenttestrunner.main(__name__)