annotate tests/test-verify-repo-operations.py @ 50330:eb07591825fa stable

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