Mercurial > hg
annotate tests/test-verify-repo-operations.py @ 28338:9974b8236cac
tests: Solaris grep doesn't add a trailing newline when it's missing
The bad-extension tests emits a list of not-loaded extensions, and pipes
that output through grep. On Solaris, the test-output gets "(no-eol)"
appended because although the message has no trailing newline, GNU grep
adds it. If we simply add the newline to the message, the problem goes
away for both versions of grep.
author | Danek Duvall <danek.duvall@oracle.com> |
---|---|
date | Wed, 02 Mar 2016 15:01:41 -0800 |
parents | c1fbc92d6238 |
children | 8b90367c4cf3 |
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 |
28259
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
44 from hypothesis.database import ExampleDatabase |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
45 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
46 testdir = os.path.abspath(os.environ["TESTDIR"]) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
47 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
48 # 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
|
49 # 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
|
50 # 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
|
51 # but is useful to have for development. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
52 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
|
53 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
54 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
|
55 testtmp = os.environ["TESTTMP"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
56 assert os.path.isdir(testtmp) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
57 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
58 generatedtests = os.path.join(testdir, "hypothesis-generated") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
59 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
60 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
61 os.makedirs(generatedtests) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
62 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
63 pass |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
64 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
65 # 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
|
66 # 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
|
67 # 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
|
68 # 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
|
69 # name. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
70 file_index = 0 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
71 while True: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
72 file_index += 1 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
73 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
|
74 file_index, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
75 )) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
76 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
77 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
|
78 break |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
79 except OSError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
80 if e.errno != errno.EEXIST: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
81 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
82 assert os.path.exists(savefile) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
83 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
84 hgrc = os.path.join(".hg", "hgrc") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
85 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
86 filecharacters = ( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
87 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" |
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 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
91 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
|
92 bool).map(lambda s: s.encode('ascii')) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
93 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
94 safetext = st.text(st.characters( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
95 min_codepoint=1, max_codepoint=127, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
96 blacklist_categories=('Cc', 'Cs')), min_size=1).map( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
97 lambda s: s.encode('utf-8') |
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 |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
100 extensions = st.sampled_from(('shelve', 'mq', 'blackbox',)) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
101 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
102 @contextmanager |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
103 def acceptableerrors(*args): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
104 """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
|
105 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
|
106 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
|
107 substrings of the error message Mercurial emits.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
108 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
109 yield |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
110 except subprocess.CalledProcessError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
111 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
|
112 note(e.output) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
113 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
114 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
115 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
|
116 lambda s: s.encode('ascii') |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
117 ) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
118 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
119 class verifyingstatemachine(RuleBasedStateMachine): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
120 """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
|
121 using Hypothesis's RuleBasedStateMachine. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
122 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
123 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
|
124 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
|
125 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
|
126 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
|
127 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
128 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
|
129 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
|
130 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
|
131 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
|
132 .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
|
133 exhibit that failure. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
134 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
135 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
|
136 Hypothesis documentation at |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
137 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
|
138 details.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
139 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
140 # 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
|
141 # 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
|
142 repos = Bundle('repos') |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
143 paths = Bundle('paths') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
144 contents = Bundle('contents') |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
145 branches = Bundle('branches') |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
146 committimes = Bundle('committimes') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
147 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
148 def __init__(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
149 super(verifyingstatemachine, self).__init__() |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
150 self.repodir = os.path.join(testtmp, "repos") |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
151 if os.path.exists(self.repodir): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
152 shutil.rmtree(self.repodir) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
153 os.chdir(testtmp) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
154 self.log = [] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
155 self.failed = False |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
156 self.configperrepo = {} |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
157 self.all_extensions = set() |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
158 self.non_skippable_extensions = set() |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
159 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
160 self.mkdirp("repos") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
161 self.cd("repos") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
162 self.mkdirp("repo1") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
163 self.cd("repo1") |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
164 self.hg("init") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
165 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
166 def teardown(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
167 """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
|
168 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
|
169 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
|
170 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
171 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
|
172 each passes the same test.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
173 super(verifyingstatemachine, self).teardown() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
174 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
175 shutil.rmtree(self.repodir) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
176 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
177 pass |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
178 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
|
179 os.chdir(testtmp) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
180 path = os.path.join(testtmp, "test-generated.t") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
181 with open(path, 'w') as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
182 o.write(ttest + os.linesep) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
183 with open(os.devnull, "w") as devnull: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
184 rewriter = subprocess.Popen( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
185 [runtests, "--local", "-i", path], stdin=subprocess.PIPE, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
186 stdout=devnull, stderr=devnull, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
187 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
188 rewriter.communicate("yes") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
189 with open(path, 'r') as i: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
190 ttest = i.read() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
191 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
192 e = None |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
193 if not self.failed: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
194 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
195 output = subprocess.check_output([ |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
196 runtests, path, "--local", "--pure" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
197 ], stderr=subprocess.STDOUT) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
198 assert "Ran 1 test" in output, output |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
199 for ext in ( |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
200 self.all_extensions - self.non_skippable_extensions |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
201 ): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
202 tf = os.path.join(testtmp, "test-generated-no-%s.t" % ( |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
203 ext, |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
204 )) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
205 with open(tf, 'w') as o: |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
206 for l in ttest.splitlines(): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
207 if l.startswith(" $ hg"): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
208 l = l.replace( |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
209 "--config %s=" % ( |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
210 extensionconfigkey(ext),), "") |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
211 o.write(l + os.linesep) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
212 with open(tf, 'r') as r: |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
213 t = r.read() |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
214 assert ext not in t, t |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
215 output = subprocess.check_output([ |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
216 runtests, tf, "--local", |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
217 ], stderr=subprocess.STDOUT) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
218 assert "Ran 1 test" in output, output |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
219 except subprocess.CalledProcessError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
220 note(e.output) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
221 if self.failed or e is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
222 with open(savefile, "wb") as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
223 o.write(ttest) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
224 if e is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
225 raise e |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
226 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
227 def execute_step(self, step): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
228 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
229 return super(verifyingstatemachine, self).execute_step(step) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
230 except (HypothesisException, KeyboardInterrupt): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
231 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
232 except Exception: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
233 self.failed = True |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
234 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
235 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
236 # Section: Basic commands. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
237 def mkdirp(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
238 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
239 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
240 self.log.append( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
241 "$ 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
|
242 os.makedirs(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
243 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
244 def cd(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
245 path = os.path.relpath(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
246 if path == ".": |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
247 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
248 os.chdir(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
249 self.log.append("$ cd -- %s" % (pipes.quote(path),)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
250 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
251 def hg(self, *args): |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
252 extra_flags = [] |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
253 for key, value in self.config.items(): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
254 extra_flags.append("--config") |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
255 extra_flags.append("%s=%s" % (key, value)) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
256 self.command("hg", *(tuple(extra_flags) + args)) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
257 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
258 def command(self, *args): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
259 self.log.append("$ " + ' '.join(map(pipes.quote, args))) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
260 subprocess.check_output(args, stderr=subprocess.STDOUT) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
261 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
262 # Section: Set up basic data |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
263 # 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
|
264 # to use later. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
265 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
266 target=paths, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
267 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
|
268 def genpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
269 return source |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
270 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
271 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
272 target=committimes, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
273 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
|
274 def gentime(self, when): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
275 return when |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
276 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
277 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
278 target=contents, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
279 content=st.one_of( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
280 st.binary(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
281 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
|
282 )) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
283 def gencontent(self, content): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
284 return content |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
285 |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
286 @rule( |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
287 target=branches, |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
288 name=safetext, |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
289 ) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
290 def genbranch(self, name): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
291 return name |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
292 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
293 @rule(target=paths, source=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
294 def lowerpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
295 return source.lower() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
296 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
297 @rule(target=paths, source=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
298 def upperpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
299 return source.upper() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
300 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
301 # Section: Basic path operations |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
302 @rule(path=paths, content=contents) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
303 def writecontent(self, path, content): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
304 self.unadded_changes = True |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
305 if os.path.isdir(path): |
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 parent = os.path.dirname(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
308 if parent: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
309 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
310 self.mkdirp(parent) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
311 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
312 # 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
|
313 # 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
|
314 # 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
|
315 # 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
|
316 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
317 with open(path, 'wb') as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
318 o.write(content) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
319 self.log.append(( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
320 "$ python -c 'import binascii; " |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
321 "print(binascii.unhexlify(\"%s\"))' > %s") % ( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
322 binascii.hexlify(content), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
323 pipes.quote(path), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
324 )) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
325 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
326 @rule(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
327 def addpath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
328 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
329 self.hg("add", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
330 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
331 @rule(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
332 def forgetpath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
333 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
334 with acceptableerrors( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
335 "file is already untracked", |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
336 ): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
337 self.hg("forget", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
338 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
339 @rule(s=st.none() | st.integers(0, 100)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
340 def addremove(self, s): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
341 args = ["addremove"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
342 if s is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
343 args.extend(["-s", str(s)]) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
344 self.hg(*args) |
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(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
347 def removepath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
348 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
349 with acceptableerrors( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
350 'file is untracked', |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
351 'file has been marked for add', |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
352 'file is modified', |
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 self.hg("remove", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
355 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
356 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
357 message=safetext, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
358 amend=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
359 when=committimes, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
360 addremove=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
361 secret=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
362 close_branch=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
363 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
364 def maybecommit( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
365 self, message, amend, when, addremove, secret, close_branch |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
366 ): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
367 command = ["commit"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
368 errors = ["nothing changed"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
369 if amend: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
370 errors.append("cannot amend public changesets") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
371 command.append("--amend") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
372 command.append("-m" + pipes.quote(message)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
373 if secret: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
374 command.append("--secret") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
375 if close_branch: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
376 command.append("--close-branch") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
377 errors.append("can only close branch heads") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
378 if addremove: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
379 command.append("--addremove") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
380 if when is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
381 if when.year == 1970: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
382 errors.append('negative date value') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
383 if when.year == 2038: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
384 errors.append('exceeds 32 bits') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
385 command.append("--date=%s" % ( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
386 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
|
387 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
388 with acceptableerrors(*errors): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
389 self.hg(*command) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
390 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
391 # Section: Repository management |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
392 @property |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
393 def currentrepo(self): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
394 return os.path.basename(os.getcwd()) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
395 |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
396 @property |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
397 def config(self): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
398 return self.configperrepo.setdefault(self.currentrepo, {}) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
399 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
400 @rule( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
401 target=repos, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
402 source=repos, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
403 name=reponames, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
404 ) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
405 def clone(self, source, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
406 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
|
407 self.cd("..") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
408 self.hg("clone", source, name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
409 self.cd(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
410 return name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
411 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
412 @rule( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
413 target=repos, |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
414 name=reponames, |
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 def fresh(self, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
417 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
|
418 self.cd("..") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
419 self.mkdirp(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
420 self.cd(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
421 self.hg("init") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
422 return name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
423 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
424 @rule(name=repos) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
425 def switch(self, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
426 self.cd(os.path.join("..", name)) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
427 assert self.currentrepo == name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
428 assert os.path.exists(".hg") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
429 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
430 @rule(target=repos) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
431 def origin(self): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
432 return "repo1" |
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 @rule() |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
435 def pull(self, repo=repos): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
436 with acceptableerrors( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
437 "repository default not found", |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
438 "repository is unrelated", |
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("pull") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
441 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
442 @rule(newbranch=st.booleans()) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
443 def push(self, newbranch): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
444 with acceptableerrors( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
445 "default repository not configured", |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
446 "no changes found", |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
447 ): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
448 if newbranch: |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
449 self.hg("push", "--new-branch") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
450 else: |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
451 with acceptableerrors( |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
452 "creates new branches" |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
453 ): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
454 self.hg("push") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
455 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
456 # Section: Simple side effect free "check" operations |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
457 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
458 def log(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
459 self.hg("log") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
460 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
461 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
462 def verify(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
463 self.hg("verify") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
464 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
465 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
466 def diff(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
467 self.hg("diff", "--nodates") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
468 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
469 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
470 def status(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
471 self.hg("status") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
472 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
473 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
474 def export(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
475 self.hg("export") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
476 |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
477 # Section: Branch management |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
478 @rule() |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
479 def checkbranch(self): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
480 self.hg("branch") |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
481 |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
482 @rule(branch=branches) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
483 def switchbranch(self, branch): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
484 with acceptableerrors( |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
485 '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
|
486 'cannot be used in a name', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
487 '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
|
488 'is reserved', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
489 ): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
490 self.hg("branch", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
491 |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
492 @rule(branch=branches, clean=st.booleans()) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
493 def update(self, branch, clean): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
494 with acceptableerrors( |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
495 'unknown revision', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
496 'parse error', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
497 ): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
498 if clean: |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
499 self.hg("update", "-C", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
500 else: |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
501 self.hg("update", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
502 |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
503 # Section: Extension management |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
504 def hasextension(self, extension): |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
505 return extensionconfigkey(extension) in self.config |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
506 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
507 def commandused(self, extension): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
508 assert extension in self.all_extensions |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
509 self.non_skippable_extensions.add(extension) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
510 |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
511 @rule(extension=extensions) |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
512 def addextension(self, extension): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
513 self.all_extensions.add(extension) |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
514 self.config[extensionconfigkey(extension)] = "" |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
515 |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
516 @rule(extension=extensions) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
517 def removeextension(self, extension): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
518 self.config.pop(extensionconfigkey(extension), None) |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
519 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
520 # Section: Commands from the shelve extension |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
521 @rule() |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
522 @precondition(lambda self: self.hasextension("shelve")) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
523 def shelve(self): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
524 self.commandused("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
525 with acceptableerrors("nothing changed"): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
526 self.hg("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
527 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
528 @rule() |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
529 @precondition(lambda self: self.hasextension("shelve")) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
530 def unshelve(self): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
531 self.commandused("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
532 with acceptableerrors("no shelved changes to apply"): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
533 self.hg("unshelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
534 |
28259
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
535 class writeonlydatabase(ExampleDatabase): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
536 def __init__(self, underlying): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
537 super(ExampleDatabase, self).__init__() |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
538 self.underlying = underlying |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
539 |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
540 def fetch(self, key): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
541 return () |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
542 |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
543 def save(self, key, value): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
544 self.underlying.save(key, value) |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
545 |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
546 def delete(self, key, value): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
547 self.underlying.delete(key, value) |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
548 |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
549 def close(self): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
550 self.underlying.close() |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
551 |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
552 def extensionconfigkey(extension): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
553 return "extensions." + extension |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
554 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
555 settings.register_profile( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
556 'default', settings( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
557 timeout=300, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
558 stateful_step_count=50, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
559 max_examples=10, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
560 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
561 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
562 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
563 settings.register_profile( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
564 'fast', settings( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
565 timeout=10, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
566 stateful_step_count=20, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
567 max_examples=5, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
568 min_satisfying_examples=1, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
569 max_shrinks=0, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
570 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
571 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
572 |
28259
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
573 settings.register_profile( |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
574 'continuous', settings( |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
575 timeout=-1, |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
576 stateful_step_count=1000, |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
577 max_examples=10 ** 8, |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
578 max_iterations=10 ** 8, |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
579 database=writeonlydatabase(settings.default.database) |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
580 ) |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
581 ) |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
582 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
583 settings.load_profile(os.getenv('HYPOTHESIS_PROFILE', 'default')) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
584 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
585 verifyingtest = verifyingstatemachine.TestCase |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
586 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
587 verifyingtest.settings = settings.default |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
588 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
589 if __name__ == '__main__': |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
590 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
591 silenttestrunner.main(__name__) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
592 finally: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
593 # 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
|
594 # 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
|
595 # the file for doing so that we owned. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
596 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
|
597 os.unlink(savefile) |