Mercurial > public > mercurial-scm > hg
annotate tests/test-verify-repo-operations.py @ 28258:fc7ee50a0d65
testing: allow Hypothesis to enable extensions
This adds support for testing extensions, including both tests
that extensions don't change behaviour and test for specific
commands.
We use the precondition system to determine what commands are
available to us. If we never use any commands enabled by an
extension then that extension is *skippable* and should not
have changed the behaviour of the test. We thus rerun the test
with an environment variable which is designed to turn off the
extension.
author | David R. MacIver <david@drmaciver.com> |
---|---|
date | Wed, 24 Feb 2016 13:11:30 +0000 |
parents | 7ff725db2fdf |
children | 7829d0ba7459 |
rev | line source |
---|---|
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
1 from __future__ import print_function, absolute_import |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
2 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
3 """Fuzz testing for operations against a Mercurial repository |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
4 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
5 This uses Hypothesis's stateful testing to generate random repository |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
6 operations and test Mercurial using them, both to see if there are any |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
7 unexpected errors and to compare different versions of it.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
8 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
9 import os |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
10 import sys |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
11 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
12 # These tests require Hypothesis and pytz to be installed. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
13 # Running 'pip install hypothesis pytz' will achieve that. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
14 # Note: This won't work if you're running Python < 2.7. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
15 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
16 from hypothesis.extra.datetime import datetimes |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
17 except ImportError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
18 sys.stderr.write("skipped: hypothesis or pytz not installed" + os.linesep) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
19 sys.exit(80) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
20 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
21 # If you are running an old version of pip you may find that the enum34 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
22 # backport is not installed automatically. If so 'pip install enum34' will |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
23 # fix this problem. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
24 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
25 import enum |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
26 assert enum # Silence pyflakes |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
27 except ImportError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
28 sys.stderr.write("skipped: enum34 not installed" + os.linesep) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
29 sys.exit(80) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
30 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
31 import binascii |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
32 from contextlib import contextmanager |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
33 import errno |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
34 import pipes |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
35 import shutil |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
36 import silenttestrunner |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
37 import subprocess |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
38 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
39 from hypothesis.errors import HypothesisException |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
40 from hypothesis.stateful import ( |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
41 rule, RuleBasedStateMachine, Bundle, precondition) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
42 from hypothesis import settings, note, strategies as st |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
43 from hypothesis.configuration import set_hypothesis_home_dir |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
44 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
45 testdir = os.path.abspath(os.environ["TESTDIR"]) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
46 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
47 # We store Hypothesis examples here rather in the temporary test directory |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
48 # so that when rerunning a failing test this always results in refinding the |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
49 # previous failure. This directory is in .hgignore and should not be checked in |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
50 # but is useful to have for development. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
51 set_hypothesis_home_dir(os.path.join(testdir, ".hypothesis")) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
52 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
53 runtests = os.path.join(os.environ["RUNTESTDIR"], "run-tests.py") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
54 testtmp = os.environ["TESTTMP"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
55 assert os.path.isdir(testtmp) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
56 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
57 generatedtests = os.path.join(testdir, "hypothesis-generated") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
58 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
59 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
60 os.makedirs(generatedtests) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
61 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
62 pass |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
63 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
64 # We write out generated .t files to a file in order to ease debugging and to |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
65 # give a starting point for turning failures Hypothesis finds into normal |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
66 # tests. In order to ensure that multiple copies of this test can be run in |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
67 # parallel we use atomic file create to ensure that we always get a unique |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
68 # name. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
69 file_index = 0 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
70 while True: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
71 file_index += 1 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
72 savefile = os.path.join(generatedtests, "test-generated-%d.t" % ( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
73 file_index, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
74 )) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
75 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
76 os.close(os.open(savefile, os.O_CREAT | os.O_EXCL | os.O_WRONLY)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
77 break |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
78 except OSError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
79 if e.errno != errno.EEXIST: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
80 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
81 assert os.path.exists(savefile) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
82 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
83 hgrc = os.path.join(".hg", "hgrc") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
84 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
85 filecharacters = ( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
86 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
87 "[]^_`;=@{}~ !#$%&'()+,-" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
88 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
89 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
90 files = st.text(filecharacters, min_size=1).map(lambda x: x.strip()).filter( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
91 bool).map(lambda s: s.encode('ascii')) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
92 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
93 safetext = st.text(st.characters( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
94 min_codepoint=1, max_codepoint=127, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
95 blacklist_categories=('Cc', 'Cs')), min_size=1).map( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
96 lambda s: s.encode('utf-8') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
97 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
98 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
99 @contextmanager |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
100 def acceptableerrors(*args): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
101 """Sometimes we know an operation we're about to perform might fail, and |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
102 we're OK with some of the failures. In those cases this may be used as a |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
103 context manager and will swallow expected failures, as identified by |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
104 substrings of the error message Mercurial emits.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
105 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
106 yield |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
107 except subprocess.CalledProcessError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
108 if not any(a in e.output for a in args): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
109 note(e.output) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
110 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
111 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
112 reponames = st.text("abcdefghijklmnopqrstuvwxyz01234556789", min_size=1).map( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
113 lambda s: s.encode('ascii') |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
114 ) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
115 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
116 class verifyingstatemachine(RuleBasedStateMachine): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
117 """This defines the set of acceptable operations on a Mercurial repository |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
118 using Hypothesis's RuleBasedStateMachine. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
119 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
120 The general concept is that we manage multiple repositories inside a |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
121 repos/ directory in our temporary test location. Some of these are freshly |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
122 inited, some are clones of the others. Our current working directory is |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
123 always inside one of these repositories while the tests are running. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
124 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
125 Hypothesis then performs a series of operations against these repositories, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
126 including hg commands, generating contents and editing the .hgrc file. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
127 If these operations fail in unexpected ways or behave differently in |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
128 different configurations of Mercurial, the test will fail and a minimized |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
129 .t test file will be written to the hypothesis-generated directory to |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
130 exhibit that failure. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
131 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
132 Operations are defined as methods with @rule() decorators. See the |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
133 Hypothesis documentation at |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
134 http://hypothesis.readthedocs.org/en/release/stateful.html for more |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
135 details.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
136 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
137 # A bundle is a reusable collection of previously generated data which may |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
138 # be provided as arguments to future operations. |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
139 repos = Bundle('repos') |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
140 paths = Bundle('paths') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
141 contents = Bundle('contents') |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
142 branches = Bundle('branches') |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
143 committimes = Bundle('committimes') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
144 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
145 def __init__(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
146 super(verifyingstatemachine, self).__init__() |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
147 self.repodir = os.path.join(testtmp, "repos") |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
148 if os.path.exists(self.repodir): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
149 shutil.rmtree(self.repodir) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
150 os.chdir(testtmp) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
151 self.log = [] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
152 self.failed = False |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
153 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
154 self.mkdirp("repos") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
155 self.cd("repos") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
156 self.mkdirp("repo1") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
157 self.cd("repo1") |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
158 self.hg("init") |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
159 self.extensions = {} |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
160 self.all_extensions = set() |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
161 self.non_skippable_extensions = set() |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
162 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
163 def teardown(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
164 """On teardown we clean up after ourselves as usual, but we also |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
165 do some additional testing: We generate a .t file based on our test |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
166 run using run-test.py -i to get the correct output. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
167 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
168 We then test it in a number of other configurations, verifying that |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
169 each passes the same test.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
170 super(verifyingstatemachine, self).teardown() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
171 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
172 shutil.rmtree(self.repodir) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
173 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
174 pass |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
175 ttest = os.linesep.join(" " + l for l in self.log) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
176 os.chdir(testtmp) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
177 path = os.path.join(testtmp, "test-generated.t") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
178 with open(path, 'w') as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
179 o.write(ttest + os.linesep) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
180 with open(os.devnull, "w") as devnull: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
181 rewriter = subprocess.Popen( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
182 [runtests, "--local", "-i", path], stdin=subprocess.PIPE, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
183 stdout=devnull, stderr=devnull, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
184 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
185 rewriter.communicate("yes") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
186 with open(path, 'r') as i: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
187 ttest = i.read() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
188 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
189 e = None |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
190 if not self.failed: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
191 try: |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
192 for ext in ( |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
193 self.all_extensions - self.non_skippable_extensions |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
194 ): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
195 try: |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
196 os.environ["SKIP_EXTENSION"] = ext |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
197 output = subprocess.check_output([ |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
198 runtests, path, "--local", |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
199 ], stderr=subprocess.STDOUT) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
200 assert "Ran 1 test" in output, output |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
201 finally: |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
202 del os.environ["SKIP_EXTENSION"] |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
203 output = subprocess.check_output([ |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
204 runtests, path, "--local", "--pure" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
205 ], stderr=subprocess.STDOUT) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
206 assert "Ran 1 test" in output, output |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
207 except subprocess.CalledProcessError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
208 note(e.output) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
209 finally: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
210 os.unlink(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
211 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
212 os.unlink(path + ".err") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
213 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
214 pass |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
215 if self.failed or e is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
216 with open(savefile, "wb") as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
217 o.write(ttest) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
218 if e is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
219 raise e |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
220 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
221 def execute_step(self, step): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
222 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
223 return super(verifyingstatemachine, self).execute_step(step) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
224 except (HypothesisException, KeyboardInterrupt): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
225 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
226 except Exception: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
227 self.failed = True |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
228 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
229 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
230 # Section: Basic commands. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
231 def mkdirp(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
232 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
233 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
234 self.log.append( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
235 "$ mkdir -p -- %s" % (pipes.quote(os.path.relpath(path)),)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
236 os.makedirs(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
237 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
238 def cd(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
239 path = os.path.relpath(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
240 if path == ".": |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
241 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
242 os.chdir(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
243 self.log.append("$ cd -- %s" % (pipes.quote(path),)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
244 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
245 def hg(self, *args): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
246 self.command("hg", *args) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
247 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
248 def command(self, *args): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
249 self.log.append("$ " + ' '.join(map(pipes.quote, args))) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
250 subprocess.check_output(args, stderr=subprocess.STDOUT) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
251 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
252 # Section: Set up basic data |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
253 # This section has no side effects but generates data that we will want |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
254 # to use later. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
255 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
256 target=paths, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
257 source=st.lists(files, min_size=1).map(lambda l: os.path.join(*l))) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
258 def genpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
259 return source |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
260 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
261 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
262 target=committimes, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
263 when=datetimes(min_year=1970, max_year=2038) | st.none()) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
264 def gentime(self, when): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
265 return when |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
266 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
267 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
268 target=contents, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
269 content=st.one_of( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
270 st.binary(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
271 st.text().map(lambda x: x.encode('utf-8')) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
272 )) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
273 def gencontent(self, content): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
274 return content |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
275 |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
276 @rule( |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
277 target=branches, |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
278 name=safetext, |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
279 ) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
280 def genbranch(self, name): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
281 return name |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
282 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
283 @rule(target=paths, source=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
284 def lowerpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
285 return source.lower() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
286 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
287 @rule(target=paths, source=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
288 def upperpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
289 return source.upper() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
290 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
291 # Section: Basic path operations |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
292 @rule(path=paths, content=contents) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
293 def writecontent(self, path, content): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
294 self.unadded_changes = True |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
295 if os.path.isdir(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
296 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
297 parent = os.path.dirname(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
298 if parent: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
299 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
300 self.mkdirp(parent) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
301 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
302 # It may be the case that there is a regular file that has |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
303 # previously been created that has the same name as an ancestor |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
304 # of the current path. This will cause mkdirp to fail with this |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
305 # error. We just turn this into a no-op in that case. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
306 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
307 with open(path, 'wb') as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
308 o.write(content) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
309 self.log.append(( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
310 "$ python -c 'import binascii; " |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
311 "print(binascii.unhexlify(\"%s\"))' > %s") % ( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
312 binascii.hexlify(content), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
313 pipes.quote(path), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
314 )) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
315 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
316 @rule(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
317 def addpath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
318 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
319 self.hg("add", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
320 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
321 @rule(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
322 def forgetpath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
323 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
324 with acceptableerrors( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
325 "file is already untracked", |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
326 ): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
327 self.hg("forget", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
328 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
329 @rule(s=st.none() | st.integers(0, 100)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
330 def addremove(self, s): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
331 args = ["addremove"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
332 if s is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
333 args.extend(["-s", str(s)]) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
334 self.hg(*args) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
335 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
336 @rule(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
337 def removepath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
338 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
339 with acceptableerrors( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
340 'file is untracked', |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
341 'file has been marked for add', |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
342 'file is modified', |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
343 ): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
344 self.hg("remove", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
345 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
346 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
347 message=safetext, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
348 amend=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
349 when=committimes, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
350 addremove=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
351 secret=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
352 close_branch=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
353 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
354 def maybecommit( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
355 self, message, amend, when, addremove, secret, close_branch |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
356 ): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
357 command = ["commit"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
358 errors = ["nothing changed"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
359 if amend: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
360 errors.append("cannot amend public changesets") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
361 command.append("--amend") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
362 command.append("-m" + pipes.quote(message)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
363 if secret: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
364 command.append("--secret") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
365 if close_branch: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
366 command.append("--close-branch") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
367 errors.append("can only close branch heads") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
368 if addremove: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
369 command.append("--addremove") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
370 if when is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
371 if when.year == 1970: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
372 errors.append('negative date value') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
373 if when.year == 2038: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
374 errors.append('exceeds 32 bits') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
375 command.append("--date=%s" % ( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
376 when.strftime('%Y-%m-%d %H:%M:%S %z'),)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
377 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
378 with acceptableerrors(*errors): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
379 self.hg(*command) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
380 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
381 # Section: Repository management |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
382 @property |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
383 def currentrepo(self): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
384 return os.path.basename(os.getcwd()) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
385 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
386 @rule( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
387 target=repos, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
388 source=repos, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
389 name=reponames, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
390 ) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
391 def clone(self, source, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
392 if not os.path.exists(os.path.join("..", name)): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
393 self.cd("..") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
394 self.hg("clone", source, name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
395 self.cd(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
396 return name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
397 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
398 @rule( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
399 target=repos, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
400 name=reponames, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
401 ) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
402 def fresh(self, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
403 if not os.path.exists(os.path.join("..", name)): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
404 self.cd("..") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
405 self.mkdirp(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
406 self.cd(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
407 self.hg("init") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
408 return name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
409 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
410 @rule(name=repos) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
411 def switch(self, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
412 self.cd(os.path.join("..", name)) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
413 assert self.currentrepo == name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
414 assert os.path.exists(".hg") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
415 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
416 @rule(target=repos) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
417 def origin(self): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
418 return "repo1" |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
419 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
420 @rule() |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
421 def pull(self, repo=repos): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
422 with acceptableerrors( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
423 "repository default not found", |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
424 "repository is unrelated", |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
425 ): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
426 self.hg("pull") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
427 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
428 @rule(newbranch=st.booleans()) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
429 def push(self, newbranch): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
430 with acceptableerrors( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
431 "default repository not configured", |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
432 "no changes found", |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
433 ): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
434 if newbranch: |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
435 self.hg("push", "--new-branch") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
436 else: |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
437 with acceptableerrors( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
438 "creates new branches" |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
439 ): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
440 self.hg("push") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
441 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
442 # Section: Simple side effect free "check" operations |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
443 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
444 def log(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
445 self.hg("log") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
446 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
447 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
448 def verify(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
449 self.hg("verify") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
450 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
451 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
452 def diff(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
453 self.hg("diff", "--nodates") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
454 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
455 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
456 def status(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
457 self.hg("status") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
458 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
459 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
460 def export(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
461 self.hg("export") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
462 |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
463 # Section: Branch management |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
464 @rule() |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
465 def checkbranch(self): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
466 self.hg("branch") |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
467 |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
468 @rule(branch=branches) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
469 def switchbranch(self, branch): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
470 with acceptableerrors( |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
471 'cannot use an integer as a name', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
472 'cannot be used in a name', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
473 'a branch of the same name already exists', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
474 'is reserved', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
475 ): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
476 self.hg("branch", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
477 |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
478 @rule(branch=branches, clean=st.booleans()) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
479 def update(self, branch, clean): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
480 with acceptableerrors( |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
481 'unknown revision', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
482 'parse error', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
483 ): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
484 if clean: |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
485 self.hg("update", "-C", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
486 else: |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
487 self.hg("update", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
488 |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
489 # Section: Extension management |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
490 def hasextension(self, extension): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
491 repo = self.currentrepo |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
492 return repo in self.extensions and extension in self.extensions[repo] |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
493 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
494 def commandused(self, extension): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
495 assert extension in self.all_extensions |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
496 self.non_skippable_extensions.add(extension) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
497 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
498 @rule(extension=st.sampled_from(( |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
499 'shelve', 'mq', 'blackbox', |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
500 ))) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
501 def addextension(self, extension): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
502 self.all_extensions.add(extension) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
503 extensions = self.extensions.setdefault(self.currentrepo, set()) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
504 if extension in extensions: |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
505 return |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
506 extensions.add(extension) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
507 if not os.path.exists(hgrc): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
508 self.command("touch", hgrc) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
509 with open(hgrc, 'a') as o: |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
510 line = "[extensions]\n%s=\n" % (extension,) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
511 o.write(line) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
512 for l in line.splitlines(): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
513 self.log.append(( |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
514 '$ if test "$SKIP_EXTENSION" != "%s" ; ' |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
515 'then echo %r >> %s; fi') % ( |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
516 extension, l, hgrc,)) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
517 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
518 # Section: Commands from the shelve extension |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
519 @rule() |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
520 @precondition(lambda self: self.hasextension("shelve")) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
521 def shelve(self): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
522 self.commandused("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
523 with acceptableerrors("nothing changed"): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
524 self.hg("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
525 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
526 @rule() |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
527 @precondition(lambda self: self.hasextension("shelve")) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
528 def unshelve(self): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
529 self.commandused("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
530 with acceptableerrors("no shelved changes to apply"): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
531 self.hg("unshelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
532 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
533 settings.register_profile( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
534 'default', settings( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
535 timeout=300, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
536 stateful_step_count=50, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
537 max_examples=10, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
538 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
539 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
540 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
541 settings.register_profile( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
542 'fast', settings( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
543 timeout=10, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
544 stateful_step_count=20, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
545 max_examples=5, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
546 min_satisfying_examples=1, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
547 max_shrinks=0, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
548 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
549 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
550 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
551 settings.load_profile(os.getenv('HYPOTHESIS_PROFILE', 'default')) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
552 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
553 verifyingtest = verifyingstatemachine.TestCase |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
554 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
555 verifyingtest.settings = settings.default |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
556 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
557 if __name__ == '__main__': |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
558 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
559 silenttestrunner.main(__name__) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
560 finally: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
561 # So as to prevent proliferation of useless test files, if we never |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
562 # actually wrote a failing test we clean up after ourselves and delete |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
563 # the file for doing so that we owned. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
564 if os.path.exists(savefile) and os.path.getsize(savefile) == 0: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
565 os.unlink(savefile) |