@@ -17,7 +17,8 @@
from hypothesis.extra.datetime import datetimes
from hypothesis.errors import HypothesisException
-from hypothesis.stateful import rule, RuleBasedStateMachine, Bundle
+from hypothesis.stateful import (
+ rule, RuleBasedStateMachine, Bundle, precondition)
import hypothesis.strategies as st
from hypothesis import settings, note
from hypothesis.configuration import set_hypothesis_home_dir
@@ -137,6 +138,9 @@
self.mkdirp("repo1")
self.cd("repo1")
self.hg("init")
+ self.extensions = {}
+ self.all_extensions = set()
+ self.non_skippable_extensions = set()
def teardown(self):
"""On teardown we clean up after ourselves as usual, but we also
@@ -169,6 +173,17 @@
e = None
if not self.failed:
try:
+ for ext in (
+ self.all_extensions - self.non_skippable_extensions
+ ):
+ try:
+ os.environ["SKIP_EXTENSION"] = ext
+ output = subprocess.check_output([
+ runtests, path, "--local",
+ ], stderr=subprocess.STDOUT)
+ assert "Ran 1 test" in output, output
+ finally:
+ del os.environ["SKIP_EXTENSION"]
output = subprocess.check_output([
runtests, path, "--local", "--pure"
], stderr=subprocess.STDOUT)
@@ -445,6 +460,56 @@
else:
self.hg("update", "--", branch)
+ # Section: Extension management
+ def hasextension(self, extension):
+ repo = self.currentrepo
+ return repo in self.extensions and extension in self.extensions[repo]
+
+ def commandused(self, extension):
+ assert extension in self.all_extensions
+ self.non_skippable_extensions.add(extension)
+
+ @rule(extension=st.sampled_from((
+ 'shelve', 'mq', 'blackbox', 'evolve'
+ )))
+ def addextension(self, extension):
+ self.all_extensions.add(extension)
+ extensions = self.extensions.setdefault(self.currentrepo, set())
+ if extension in extensions:
+ return
+ extensions.add(extension)
+ if not os.path.exists(hgrc):
+ self.command("touch", hgrc)
+ with open(hgrc, "r") as i:
+ existing = i.read()
+ if "[extensions]" not in existing:
+ with open(hgrc, "a") as o:
+ o.write("[extensions]\n")
+ self.log.append("$ echo '[extensions]' >> %s" % (hgrc,))
+ with open(hgrc, 'a') as o:
+ line = "%s=" % (extension,)
+ o.write(line)
+ o.write("\n")
+ self.log.append((
+ '$ if [[ "$SKIP_EXTENSION" == "%s" ]; '
+ 'then echo %s >> %s; fi') % (
+ extension, line, hgrc,))
+
+ # Section: Commands from the shelve extension
+ @rule()
+ @precondition(lambda self: self.hasextension("shelve"))
+ def shelve(self):
+ self.commandused("shelve")
+ with acceptableerrors("nothing changed"):
+ self.hg("shelve")
+
+ @rule()
+ @precondition(lambda self: self.hasextension("shelve"))
+ def unshelve(self):
+ self.commandused("shelve")
+ with acceptableerrors("no shelved changes to apply"):
+ self.hg("unshelve")
+
settings.register_profile(
'default', settings(
timeout=300,