Mercurial > hg
annotate tests/test-verify-repo-operations.py @ 48598:a6f16ec07ed7
stream-clone: add a explicit test for format change during stream clone
They are different kind of requirements, the one which impact the data storage
and are relevant to the files being streamed and the one which does not. For
example some requirements are only relevant to the working copy, like sparse, or
dirstate-v2.
Since they are irrelevant to the content being streamed, they do not prevent the
receiving side to use streaming clone and mercurial skip adverting them over
the wire and, ideally, within the bundle.
In addition, this let the client decide to use whichever format it desire for
the part that does not affect the store itself. So the configuration related to
these format are used as normal when doing a streaming clone.
In practice, the feature was not really tested and is badly broken with bundle-2,
since the requirements are not filtered out from the stream bundle.
So we start with adding simple tests as a good base before the fix and adjust
the feature.
Differential Revision: https://phab.mercurial-scm.org/D12029
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 17 Jan 2022 18:51:47 +0100 |
parents | 1d075b857c90 |
children | 6000f5b25c9b |
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 |
28499
8b90367c4cf3
tests: make test-verify-repo-operations.py not run by default
Martin von Zweigbergk <martinvonz@google.com>
parents:
28279
diff
changeset
|
10 import subprocess |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
11 import sys |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
12 |
28499
8b90367c4cf3
tests: make test-verify-repo-operations.py not run by default
Martin von Zweigbergk <martinvonz@google.com>
parents:
28279
diff
changeset
|
13 # Only run if slow tests are allowed |
46226
0826d684a1b5
test: replace a many occurence of `python` with `$PYTHON`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
14 if subprocess.call( |
0826d684a1b5
test: replace a many occurence of `python` with `$PYTHON`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
15 [os.environ['PYTHON'], '%s/hghave' % os.environ['TESTDIR'], 'slow'] |
0826d684a1b5
test: replace a many occurence of `python` with `$PYTHON`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
16 ): |
28499
8b90367c4cf3
tests: make test-verify-repo-operations.py not run by default
Martin von Zweigbergk <martinvonz@google.com>
parents:
28279
diff
changeset
|
17 sys.exit(80) |
8b90367c4cf3
tests: make test-verify-repo-operations.py not run by default
Martin von Zweigbergk <martinvonz@google.com>
parents:
28279
diff
changeset
|
18 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
19 # 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
|
20 # Running 'pip install hypothesis pytz' will achieve that. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
21 # 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
|
22 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
23 from hypothesis.extra.datetime import datetimes |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
24 except ImportError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
25 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
|
26 sys.exit(80) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
27 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
28 # 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
|
29 # 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
|
30 # fix this problem. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
31 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
32 import enum |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
33 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
34 assert enum # Silence pyflakes |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
35 except ImportError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
36 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
|
37 sys.exit(80) |
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 import binascii |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
40 from contextlib import contextmanager |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
41 import errno |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
42 import pipes |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
43 import shutil |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
44 import silenttestrunner |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
45 import subprocess |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
46 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
47 from hypothesis.errors import HypothesisException |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
48 from hypothesis.stateful import ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
49 rule, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
50 RuleBasedStateMachine, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
51 Bundle, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
52 precondition, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
53 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
54 from hypothesis import settings, note, strategies as st |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
55 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
|
56 from hypothesis.database import ExampleDatabase |
28255
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 testdir = os.path.abspath(os.environ["TESTDIR"]) |
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 # 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
|
61 # 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
|
62 # 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
|
63 # but is useful to have for development. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
64 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
|
65 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
66 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
|
67 testtmp = os.environ["TESTTMP"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
68 assert os.path.isdir(testtmp) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
69 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
70 generatedtests = os.path.join(testdir, "hypothesis-generated") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
71 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
72 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
73 os.makedirs(generatedtests) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
74 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
75 pass |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
76 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
77 # 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
|
78 # 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
|
79 # 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
|
80 # 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
|
81 # name. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
82 file_index = 0 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
83 while True: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
84 file_index += 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
85 savefile = os.path.join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
86 generatedtests, "test-generated-%d.t" % (file_index,) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
87 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
88 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
89 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
|
90 break |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
91 except OSError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
92 if e.errno != errno.EEXIST: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
93 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
94 assert os.path.exists(savefile) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
95 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
96 hgrc = os.path.join(".hg", "hgrc") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
97 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
98 filecharacters = ( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
99 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
100 "[]^_`;=@{}~ !#$%&'()+,-" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
101 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
102 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
103 files = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
104 st.text(filecharacters, min_size=1) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
105 .map(lambda x: x.strip()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
106 .filter(bool) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
107 .map(lambda s: s.encode('ascii')) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
108 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
109 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
110 safetext = st.text( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
111 st.characters( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
112 min_codepoint=1, max_codepoint=127, blacklist_categories=('Cc', 'Cs') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
113 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
114 min_size=1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
115 ).map(lambda s: s.encode('utf-8')) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
116 |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
117 extensions = st.sampled_from( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
118 ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
119 'shelve', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
120 'mq', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
121 'blackbox', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
122 ) |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
123 ) |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
124 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
125 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
126 @contextmanager |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
127 def acceptableerrors(*args): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
128 """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
|
129 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
|
130 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
|
131 substrings of the error message Mercurial emits.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
132 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
133 yield |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
134 except subprocess.CalledProcessError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
135 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
|
136 note(e.output) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
137 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
138 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
139 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
140 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
|
141 lambda s: s.encode('ascii') |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
142 ) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
143 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
144 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
145 class verifyingstatemachine(RuleBasedStateMachine): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
146 """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
|
147 using Hypothesis's RuleBasedStateMachine. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
148 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
149 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
|
150 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
|
151 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
|
152 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
|
153 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
154 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
|
155 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
|
156 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
|
157 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
|
158 .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
|
159 exhibit that failure. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
160 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
161 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
|
162 Hypothesis documentation at |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
163 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
|
164 details.""" |
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 # 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
|
167 # 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
|
168 repos = Bundle('repos') |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
169 paths = Bundle('paths') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
170 contents = Bundle('contents') |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
171 branches = Bundle('branches') |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
172 committimes = Bundle('committimes') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
173 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
174 def __init__(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
175 super(verifyingstatemachine, self).__init__() |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
176 self.repodir = os.path.join(testtmp, "repos") |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
177 if os.path.exists(self.repodir): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
178 shutil.rmtree(self.repodir) |
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 self.log = [] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
181 self.failed = False |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
182 self.configperrepo = {} |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
183 self.all_extensions = set() |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
184 self.non_skippable_extensions = set() |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
185 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
186 self.mkdirp("repos") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
187 self.cd("repos") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
188 self.mkdirp("repo1") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
189 self.cd("repo1") |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
190 self.hg("init") |
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 def teardown(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
193 """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
|
194 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
|
195 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
|
196 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
197 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
|
198 each passes the same test.""" |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
199 super(verifyingstatemachine, self).teardown() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
200 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
201 shutil.rmtree(self.repodir) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
202 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
203 pass |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
204 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
|
205 os.chdir(testtmp) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
206 path = os.path.join(testtmp, "test-generated.t") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
207 with open(path, 'w') as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
208 o.write(ttest + os.linesep) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
209 with open(os.devnull, "w") as devnull: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
210 rewriter = subprocess.Popen( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
211 [runtests, "--local", "-i", path], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
212 stdin=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
213 stdout=devnull, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
214 stderr=devnull, |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
215 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
216 rewriter.communicate("yes") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
217 with open(path, 'r') as i: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
218 ttest = i.read() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
219 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
220 e = None |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
221 if not self.failed: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
222 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
223 output = subprocess.check_output( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
224 [runtests, path, "--local", "--pure"], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
225 stderr=subprocess.STDOUT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
226 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
227 assert "Ran 1 test" in output, output |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
228 for ext in self.all_extensions - self.non_skippable_extensions: |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
229 tf = os.path.join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
230 testtmp, "test-generated-no-%s.t" % (ext,) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
231 ) |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
232 with open(tf, 'w') as o: |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
233 for l in ttest.splitlines(): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
234 if l.startswith(" $ hg"): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
235 l = l.replace( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
236 "--config %s=" % (extensionconfigkey(ext),), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
237 "", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
238 ) |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
239 o.write(l + os.linesep) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
240 with open(tf, 'r') as r: |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
241 t = r.read() |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
242 assert ext not in t, t |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
243 output = subprocess.check_output( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
244 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
245 runtests, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
246 tf, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
247 "--local", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
248 ], |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
249 stderr=subprocess.STDOUT, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
250 ) |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
251 assert "Ran 1 test" in output, output |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
252 except subprocess.CalledProcessError as e: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
253 note(e.output) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
254 if self.failed or e is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
255 with open(savefile, "wb") as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
256 o.write(ttest) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
257 if e is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
258 raise e |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
259 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
260 def execute_step(self, step): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
261 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
262 return super(verifyingstatemachine, self).execute_step(step) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
263 except (HypothesisException, KeyboardInterrupt): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
264 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
265 except Exception: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
266 self.failed = True |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
267 raise |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
268 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
269 # Section: Basic commands. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
270 def mkdirp(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
271 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
272 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
273 self.log.append( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
274 "$ mkdir -p -- %s" % (pipes.quote(os.path.relpath(path)),) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
275 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
276 os.makedirs(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
277 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
278 def cd(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
279 path = os.path.relpath(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
280 if path == ".": |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
281 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
282 os.chdir(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
283 self.log.append("$ cd -- %s" % (pipes.quote(path),)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
284 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
285 def hg(self, *args): |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
286 extra_flags = [] |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
287 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
|
288 extra_flags.append("--config") |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
289 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
|
290 self.command("hg", *(tuple(extra_flags) + args)) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
291 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
292 def command(self, *args): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
293 self.log.append("$ " + ' '.join(map(pipes.quote, args))) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
294 subprocess.check_output(args, stderr=subprocess.STDOUT) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
295 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
296 # Section: Set up basic data |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
297 # 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
|
298 # to use later. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
299 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
300 target=paths, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
301 source=st.lists(files, min_size=1).map(lambda l: os.path.join(*l)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
302 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
303 def genpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
304 return source |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
305 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
306 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
307 target=committimes, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
308 when=datetimes(min_year=1970, max_year=2038) | st.none(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
309 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
310 def gentime(self, when): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
311 return when |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
312 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
313 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
314 target=contents, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
315 content=st.one_of( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
316 st.binary(), st.text().map(lambda x: x.encode('utf-8')) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
317 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
318 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
319 def gencontent(self, content): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
320 return content |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
321 |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
322 @rule( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
323 target=branches, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
324 name=safetext, |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
325 ) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
326 def genbranch(self, name): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
327 return name |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
328 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
329 @rule(target=paths, source=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
330 def lowerpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
331 return source.lower() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
332 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
333 @rule(target=paths, source=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
334 def upperpath(self, source): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
335 return source.upper() |
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 # Section: Basic path operations |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
338 @rule(path=paths, content=contents) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
339 def writecontent(self, path, content): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
340 self.unadded_changes = True |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
341 if os.path.isdir(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
342 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
343 parent = os.path.dirname(path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
344 if parent: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
345 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
346 self.mkdirp(parent) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
347 except OSError: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
348 # 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
|
349 # 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
|
350 # 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
|
351 # 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
|
352 return |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
353 with open(path, 'wb') as o: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
354 o.write(content) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
355 self.log.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
356 ( |
47063
1d075b857c90
tests: ensure `$PYTHON` is quoted for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
46226
diff
changeset
|
357 "$ \"$PYTHON\" -c 'import binascii; " |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
358 "print(binascii.unhexlify(\"%s\"))' > %s" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
359 ) |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
360 % ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
361 binascii.hexlify(content), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
362 pipes.quote(path), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
363 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
364 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
365 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
366 @rule(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
367 def addpath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
368 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
369 self.hg("add", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
370 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
371 @rule(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
372 def forgetpath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
373 if os.path.exists(path): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
374 with acceptableerrors( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
375 "file is already untracked", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
376 ): |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
377 self.hg("forget", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
378 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
379 @rule(s=st.none() | st.integers(0, 100)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
380 def addremove(self, s): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
381 args = ["addremove"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
382 if s is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
383 args.extend(["-s", str(s)]) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
384 self.hg(*args) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
385 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
386 @rule(path=paths) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
387 def removepath(self, path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
388 if os.path.exists(path): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
389 with acceptableerrors( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
390 'file is untracked', |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
391 'file has been marked for add', |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
392 'file is modified', |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
393 ): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
394 self.hg("remove", "--", path) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
395 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
396 @rule( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
397 message=safetext, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
398 amend=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
399 when=committimes, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
400 addremove=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
401 secret=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
402 close_branch=st.booleans(), |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
403 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
404 def maybecommit( |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
405 self, message, amend, when, addremove, secret, close_branch |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
406 ): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
407 command = ["commit"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
408 errors = ["nothing changed"] |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
409 if amend: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
410 errors.append("cannot amend public changesets") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
411 command.append("--amend") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
412 command.append("-m" + pipes.quote(message)) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
413 if secret: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
414 command.append("--secret") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
415 if close_branch: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
416 command.append("--close-branch") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
417 errors.append("can only close branch heads") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
418 if addremove: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
419 command.append("--addremove") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
420 if when is not None: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
421 if when.year == 1970: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
422 errors.append('negative date value') |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
423 if when.year == 2038: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
424 errors.append('exceeds 32 bits') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
425 command.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
426 "--date=%s" % (when.strftime('%Y-%m-%d %H:%M:%S %z'),) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
427 ) |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
428 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
429 with acceptableerrors(*errors): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
430 self.hg(*command) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
431 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
432 # Section: Repository management |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
433 @property |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
434 def currentrepo(self): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
435 return os.path.basename(os.getcwd()) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
436 |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
437 @property |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
438 def config(self): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
439 return self.configperrepo.setdefault(self.currentrepo, {}) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
440 |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
441 @rule( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
442 target=repos, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
443 source=repos, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
444 name=reponames, |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
445 ) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
446 def clone(self, source, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
447 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
|
448 self.cd("..") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
449 self.hg("clone", source, name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
450 self.cd(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
451 return name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
452 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
453 @rule( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
454 target=repos, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
455 name=reponames, |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
456 ) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
457 def fresh(self, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
458 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
|
459 self.cd("..") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
460 self.mkdirp(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
461 self.cd(name) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
462 self.hg("init") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
463 return name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
464 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
465 @rule(name=repos) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
466 def switch(self, name): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
467 self.cd(os.path.join("..", name)) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
468 assert self.currentrepo == name |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
469 assert os.path.exists(".hg") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
470 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
471 @rule(target=repos) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
472 def origin(self): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
473 return "repo1" |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
474 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
475 @rule() |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
476 def pull(self, repo=repos): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
477 with acceptableerrors( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
478 "repository default not found", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
479 "repository is unrelated", |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
480 ): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
481 self.hg("pull") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
482 |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
483 @rule(newbranch=st.booleans()) |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
484 def push(self, newbranch): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
485 with acceptableerrors( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
486 "default repository not configured", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
487 "no changes found", |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
488 ): |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
489 if newbranch: |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
490 self.hg("push", "--new-branch") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
491 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
492 with acceptableerrors("creates new branches"): |
28257
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
493 self.hg("push") |
7ff725db2fdf
testing: test multiple repositories with Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
28256
diff
changeset
|
494 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
495 # Section: Simple side effect free "check" operations |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
496 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
497 def log(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
498 self.hg("log") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
499 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
500 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
501 def verify(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
502 self.hg("verify") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
503 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
504 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
505 def diff(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
506 self.hg("diff", "--nodates") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
507 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
508 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
509 def status(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
510 self.hg("status") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
511 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
512 @rule() |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
513 def export(self): |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
514 self.hg("export") |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
515 |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
516 # Section: Branch management |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
517 @rule() |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
518 def checkbranch(self): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
519 self.hg("branch") |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
520 |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
521 @rule(branch=branches) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
522 def switchbranch(self, branch): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
523 with acceptableerrors( |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
524 '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
|
525 'cannot be used in a name', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
526 '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
|
527 'is reserved', |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
528 ): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
529 self.hg("branch", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
530 |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
531 @rule(branch=branches, clean=st.booleans()) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
532 def update(self, branch, clean): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
533 with acceptableerrors( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
534 'unknown revision', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
535 'parse error', |
28256
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
536 ): |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
537 if clean: |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
538 self.hg("update", "-C", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
539 else: |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
540 self.hg("update", "--", branch) |
55325bdf6c13
testing: expand Hypothesis tests with branch commands
David R. MacIver <david@drmaciver.com>
parents:
28255
diff
changeset
|
541 |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
542 # Section: Extension management |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
543 def hasextension(self, extension): |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
544 return extensionconfigkey(extension) in self.config |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
545 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
546 def commandused(self, extension): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
547 assert extension in self.all_extensions |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
548 self.non_skippable_extensions.add(extension) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
549 |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
550 @rule(extension=extensions) |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
551 def addextension(self, extension): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
552 self.all_extensions.add(extension) |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
553 self.config[extensionconfigkey(extension)] = "" |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
554 |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
555 @rule(extension=extensions) |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
556 def removeextension(self, extension): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
557 self.config.pop(extensionconfigkey(extension), None) |
28258
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
558 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
559 # Section: Commands from the shelve extension |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
560 @rule() |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
561 @precondition(lambda self: self.hasextension("shelve")) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
562 def shelve(self): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
563 self.commandused("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
564 with acceptableerrors("nothing changed"): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
565 self.hg("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
566 |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
567 @rule() |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
568 @precondition(lambda self: self.hasextension("shelve")) |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
569 def unshelve(self): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
570 self.commandused("shelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
571 with acceptableerrors("no shelved changes to apply"): |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
572 self.hg("unshelve") |
fc7ee50a0d65
testing: allow Hypothesis to enable extensions
David R. MacIver <david@drmaciver.com>
parents:
28257
diff
changeset
|
573 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
574 |
28259
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
575 class writeonlydatabase(ExampleDatabase): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
576 def __init__(self, underlying): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
577 super(ExampleDatabase, self).__init__() |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
578 self.underlying = underlying |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
579 |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
580 def fetch(self, key): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
581 return () |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
582 |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
583 def save(self, key, value): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
584 self.underlying.save(key, value) |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
585 |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
586 def delete(self, key, value): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
587 self.underlying.delete(key, value) |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
588 |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
589 def close(self): |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
590 self.underlying.close() |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
591 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
592 |
28279
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
593 def extensionconfigkey(extension): |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
594 return "extensions." + extension |
c1fbc92d6238
testing: allow Hypothesis tests to disable extensions
David R. MacIver <david@drmaciver.com>
parents:
28259
diff
changeset
|
595 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
596 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
597 settings.register_profile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
598 'default', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
599 settings( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
600 timeout=300, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
601 stateful_step_count=50, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
602 max_examples=10, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43076
diff
changeset
|
603 ), |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
604 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
605 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
606 settings.register_profile( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
607 'fast', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
608 settings( |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
609 timeout=10, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
610 stateful_step_count=20, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
611 max_examples=5, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
612 min_satisfying_examples=1, |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
613 max_shrinks=0, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
614 ), |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
615 ) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
616 |
28259
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
617 settings.register_profile( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
618 'continuous', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
619 settings( |
28259
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
620 timeout=-1, |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
621 stateful_step_count=1000, |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
622 max_examples=10 ** 8, |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
623 max_iterations=10 ** 8, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
624 database=writeonlydatabase(settings.default.database), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
28499
diff
changeset
|
625 ), |
28259
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
626 ) |
7829d0ba7459
testing: add a 'continuous' profile
David R. MacIver <david@drmaciver.com>
parents:
28258
diff
changeset
|
627 |
28255
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
628 settings.load_profile(os.getenv('HYPOTHESIS_PROFILE', 'default')) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
629 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
630 verifyingtest = verifyingstatemachine.TestCase |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
631 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
632 verifyingtest.settings = settings.default |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
633 |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
634 if __name__ == '__main__': |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
635 try: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
636 silenttestrunner.main(__name__) |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
637 finally: |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
638 # 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
|
639 # 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
|
640 # the file for doing so that we owned. |
f75f7d39cca3
testing: generate tests operations using Hypothesis
David R. MacIver <david@drmaciver.com>
parents:
diff
changeset
|
641 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
|
642 os.unlink(savefile) |