Mercurial > hgsubversion
view tests/test_fetch_exec.py @ 1056:0932bb4d8870
tests: add a metaclass for triggering stupid on a class level
We use a metaclass similar to the tests for obsolete mode. This
metaclass deliberately duplicates each test for each mode; enabling
both means that each test function is run four times.
This makes it less likely that a fix is accidentally applied to replay
mode only, as new tests will often automatically cover both
modes. However, as certiain features remain deliberately unimplemented
in stupid modes -- filemaps being a notable example -- we also add a
decorator function for marking methods testing them.
We do this for reasons of both consistency and coverage; we avoid
littering the tests with *_stupid variants, and thus are less likely
to forget adding them. I already found a couple of bugs in stupid mode
thanks to this increased coverage.
author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
---|---|
date | Fri, 09 Aug 2013 23:34:16 +0200 |
parents | d741f536f23a |
children | 449c61eeace7 |
line wrap: on
line source
import test_util import unittest from mercurial import node class TestFetchExec(test_util.TestBase): def assertexec(self, ctx, files, isexec=True): for f in files: self.assertEqual(isexec, 'x' in ctx[f].flags()) def test_exec(self, stupid=False): repo = self._load_fixture_and_fetch('executebit.svndump', stupid=stupid) self.assertexec(repo[0], ['text1', 'binary1', 'empty1'], True) self.assertexec(repo[0], ['text2', 'binary2', 'empty2'], False) self.assertexec(repo[1], ['text1', 'binary1', 'empty1'], False) self.assertexec(repo[1], ['text2', 'binary2', 'empty2'], True) def test_exec_stupid(self): self.test_exec(True) def test_empty_prop_val_executable(self, stupid=False): repo = self._load_fixture_and_fetch('executable_file_empty_prop.svndump', stupid=stupid) self.assertEqual(node.hex(repo['tip'].node()), '08e6b380bf291b361a418203a1cb9427213cd1fd') self.assertEqual(repo['tip']['foo'].flags(), 'x') def test_empty_prop_val_executable_stupid(self): self.test_empty_prop_val_executable(True)