tests/test-verify-repo-operations.py
changeset 28258 fc7ee50a0d65
parent 28257 7ff725db2fdf
child 28259 7829d0ba7459
equal deleted inserted replaced
28257:7ff725db2fdf 28258:fc7ee50a0d65
    35 import shutil
    35 import shutil
    36 import silenttestrunner
    36 import silenttestrunner
    37 import subprocess
    37 import subprocess
    38 
    38 
    39 from hypothesis.errors import HypothesisException
    39 from hypothesis.errors import HypothesisException
    40 from hypothesis.stateful import rule, RuleBasedStateMachine, Bundle
    40 from hypothesis.stateful import (
       
    41     rule, RuleBasedStateMachine, Bundle, precondition)
    41 from hypothesis import settings, note, strategies as st
    42 from hypothesis import settings, note, strategies as st
    42 from hypothesis.configuration import set_hypothesis_home_dir
    43 from hypothesis.configuration import set_hypothesis_home_dir
    43 
    44 
    44 testdir = os.path.abspath(os.environ["TESTDIR"])
    45 testdir = os.path.abspath(os.environ["TESTDIR"])
    45 
    46 
   153         self.mkdirp("repos")
   154         self.mkdirp("repos")
   154         self.cd("repos")
   155         self.cd("repos")
   155         self.mkdirp("repo1")
   156         self.mkdirp("repo1")
   156         self.cd("repo1")
   157         self.cd("repo1")
   157         self.hg("init")
   158         self.hg("init")
       
   159         self.extensions = {}
       
   160         self.all_extensions = set()
       
   161         self.non_skippable_extensions = set()
   158 
   162 
   159     def teardown(self):
   163     def teardown(self):
   160         """On teardown we clean up after ourselves as usual, but we also
   164         """On teardown we clean up after ourselves as usual, but we also
   161         do some additional testing: We generate a .t file based on our test
   165         do some additional testing: We generate a .t file based on our test
   162         run using run-test.py -i to get the correct output.
   166         run using run-test.py -i to get the correct output.
   183                 ttest = i.read()
   187                 ttest = i.read()
   184 
   188 
   185         e = None
   189         e = None
   186         if not self.failed:
   190         if not self.failed:
   187             try:
   191             try:
       
   192                 for ext in (
       
   193                     self.all_extensions - self.non_skippable_extensions
       
   194                 ):
       
   195                     try:
       
   196                         os.environ["SKIP_EXTENSION"] = ext
       
   197                         output = subprocess.check_output([
       
   198                             runtests, path, "--local",
       
   199                         ], stderr=subprocess.STDOUT)
       
   200                         assert "Ran 1 test" in output, output
       
   201                     finally:
       
   202                         del os.environ["SKIP_EXTENSION"]
   188                 output = subprocess.check_output([
   203                 output = subprocess.check_output([
   189                     runtests, path, "--local", "--pure"
   204                     runtests, path, "--local", "--pure"
   190                 ], stderr=subprocess.STDOUT)
   205                 ], stderr=subprocess.STDOUT)
   191                 assert "Ran 1 test" in output, output
   206                 assert "Ran 1 test" in output, output
   192             except subprocess.CalledProcessError as e:
   207             except subprocess.CalledProcessError as e:
   469             if clean:
   484             if clean:
   470                 self.hg("update", "-C", "--", branch)
   485                 self.hg("update", "-C", "--", branch)
   471             else:
   486             else:
   472                 self.hg("update", "--", branch)
   487                 self.hg("update", "--", branch)
   473 
   488 
       
   489     # Section: Extension management
       
   490     def hasextension(self, extension):
       
   491         repo = self.currentrepo
       
   492         return repo in self.extensions and extension in self.extensions[repo]
       
   493 
       
   494     def commandused(self, extension):
       
   495         assert extension in self.all_extensions
       
   496         self.non_skippable_extensions.add(extension)
       
   497 
       
   498     @rule(extension=st.sampled_from((
       
   499         'shelve', 'mq', 'blackbox',
       
   500     )))
       
   501     def addextension(self, extension):
       
   502         self.all_extensions.add(extension)
       
   503         extensions = self.extensions.setdefault(self.currentrepo, set())
       
   504         if extension in extensions:
       
   505             return
       
   506         extensions.add(extension)
       
   507         if not os.path.exists(hgrc):
       
   508             self.command("touch", hgrc)
       
   509         with open(hgrc, 'a') as o:
       
   510             line = "[extensions]\n%s=\n" % (extension,)
       
   511             o.write(line)
       
   512         for l in line.splitlines():
       
   513             self.log.append((
       
   514                 '$ if test "$SKIP_EXTENSION" != "%s" ; '
       
   515                 'then echo %r >> %s; fi') % (
       
   516                     extension, l, hgrc,))
       
   517 
       
   518     # Section: Commands from the shelve extension
       
   519     @rule()
       
   520     @precondition(lambda self: self.hasextension("shelve"))
       
   521     def shelve(self):
       
   522         self.commandused("shelve")
       
   523         with acceptableerrors("nothing changed"):
       
   524             self.hg("shelve")
       
   525 
       
   526     @rule()
       
   527     @precondition(lambda self: self.hasextension("shelve"))
       
   528     def unshelve(self):
       
   529         self.commandused("shelve")
       
   530         with acceptableerrors("no shelved changes to apply"):
       
   531             self.hg("unshelve")
       
   532 
   474 settings.register_profile(
   533 settings.register_profile(
   475     'default',  settings(
   534     'default',  settings(
   476         timeout=300,
   535         timeout=300,
   477         stateful_step_count=50,
   536         stateful_step_count=50,
   478         max_examples=10,
   537         max_examples=10,