Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagesmc
Path: blob/master/src/sage/dev/test/sagedev.py
8815 views
1
r"""
2
SageDev objects for doctesting
3
4
This module provides special versions of :class:`sage.dev.sagedev.SageDev` and
5
:class:`sage.dev.sagedev_wrapper.SageDevWrapper` which are suitable for
6
doctesting.
7
8
AUTHORS:
9
10
- Julian Rueth: initial version
11
12
"""
13
#*****************************************************************************
14
# Copyright (C) 2013 Julian Rueth <[email protected]>
15
#
16
# Distributed under the terms of the GNU General Public License (GPL)
17
# as published by the Free Software Foundation; either version 2 of
18
# the License, or (at your option) any later version.
19
# http://www.gnu.org/licenses/
20
#*****************************************************************************
21
22
import sage.dev.sagedev
23
import sage.dev.sagedev_wrapper
24
25
class DoctestSageDevWrapper(sage.dev.sagedev_wrapper.SageDevWrapper):
26
r"""
27
A :class:`sage.dev.sagedev_wrapper.SageDevWrapper` for doctesting.
28
29
EXAMPLES::
30
31
sage: from sage.dev.test.sagedev import DoctestSageDevWrapper
32
sage: from sage.dev.test.config import DoctestConfig
33
sage: from sage.dev.test.trac_server import DoctestTracServer
34
sage: DoctestSageDevWrapper(DoctestConfig(), DoctestTracServer())
35
SageDev()
36
37
"""
38
def __init__(self, config, trac_server):
39
r"""
40
Initialization.
41
42
TESTS::
43
44
sage: from sage.dev.test.sagedev import DoctestSageDevWrapper
45
sage: from sage.dev.test.config import DoctestConfig
46
sage: from sage.dev.test.trac_server import DoctestTracServer
47
sage: type(DoctestSageDevWrapper(DoctestConfig(), DoctestTracServer()))
48
<class 'sage.dev.test.sagedev.DoctestSageDevWrapper'>
49
50
"""
51
sagedev = DoctestSageDev(config, trac_server)
52
sage.dev.sagedev_wrapper.SageDevWrapper.__init__(self, sagedev)
53
54
self._UI = sagedev._UI
55
56
self._wrap("_chdir")
57
self._wrap("_pull_master_branch")
58
59
class DoctestSageDev(sage.dev.sagedev.SageDev):
60
r"""
61
A :class:`sage.dev.sagedev.SageDev` for doctesting.
62
63
EXAMPLES::
64
65
sage: from sage.dev.test.sagedev import DoctestSageDev
66
sage: from sage.dev.test.config import DoctestConfig
67
sage: from sage.dev.test.trac_server import DoctestTracServer
68
sage: DoctestSageDev(DoctestConfig(), DoctestTracServer())
69
SageDev()
70
71
"""
72
def __init__(self, config, trac_server):
73
r"""
74
Initialization.
75
76
TESTS::
77
78
sage: from sage.dev.test.sagedev import DoctestSageDev
79
sage: from sage.dev.test.config import DoctestConfig
80
sage: from sage.dev.test.trac_server import DoctestTracServer
81
sage: type(DoctestSageDev(DoctestConfig(), DoctestTracServer()))
82
<class 'sage.dev.test.sagedev.DoctestSageDev'>
83
"""
84
from user_interface import DoctestUserInterface
85
UI = DoctestUserInterface(config['UI'])
86
if trac_server is None:
87
from sage.dev.trac_interface import TracInterface
88
trac = TracInterface(config['trac'], UI)
89
else:
90
from trac_interface import DoctestTracInterface
91
trac = DoctestTracInterface(config['trac'], UI, trac_server)
92
repo = trac_server.git._config['src']
93
config['git']['repository_anonymous'] = config['git']['repository'] = repo
94
from sage.dev.git_interface import GitInterface
95
git = GitInterface(config['git'], UI)
96
97
self._trac_server = trac_server
98
99
sage.dev.sagedev.SageDev.__init__(self, config, UI, trac, git)
100
101
def _pull_master_branch(self):
102
r"""
103
Pull the master branch of the repository of the
104
:class:`trac_server.DoctestTracServer` into the local repository.
105
106
EXAMPLES::
107
108
sage: from sage.dev.test.sagedev import DoctestSageDev
109
sage: from sage.dev.test.config import DoctestConfig
110
sage: from sage.dev.test.trac_server import DoctestTracServer
111
sage: dev = DoctestSageDev(DoctestConfig(), DoctestTracServer())
112
sage: dev._pull_master_branch()
113
"""
114
import os
115
old_cwd = os.getcwd()
116
self._chdir()
117
try:
118
from sage.dev.sagedev import MASTER_BRANCH
119
if MASTER_BRANCH != "master":
120
self.git.super_silent.chechkout("-b",MASTER_BRANCH)
121
self.git.super_silent.checkout(MASTER_BRANCH)
122
self.git.super_silent.pull(self._trac_server.git._config['src'], MASTER_BRANCH)
123
finally:
124
os.chdir(old_cwd)
125
126
def _chdir(self):
127
r"""
128
Change the current working directory to the directory of the git
129
repository of this object.
130
131
EXAMPLES::
132
133
sage: from sage.dev.test.sagedev import DoctestSageDev
134
sage: from sage.dev.test.config import DoctestConfig
135
sage: from sage.dev.test.trac_server import DoctestTracServer
136
sage: dev = DoctestSageDev(DoctestConfig(), DoctestTracServer())
137
sage: dev._chdir()
138
"""
139
import os
140
os.chdir(self.config['git']['src'])
141
142
def single_user_setup():
143
r"""
144
Create a typical single user setup for doctesting.
145
146
EXAMPLES::
147
148
sage: from sage.dev.test.sagedev import single_user_setup
149
sage: dev, config, UI, server = single_user_setup()
150
"""
151
from trac_server import DoctestTracServer
152
from config import DoctestConfig
153
server = DoctestTracServer()
154
config = DoctestConfig()
155
config['trac']['password'] = 'secret'
156
dev = DoctestSageDevWrapper(config, server)
157
dev._pull_master_branch()
158
dev._chdir()
159
return dev, config, dev._UI, server
160
161
162
def single_user_setup_with_internet():
163
"""
164
Return a trac interface with internet access.
165
166
This method is for doctests, and assumes internet access. Unlike
167
the actual ``dev`` object, the trac responses are cached in a
168
temporary file.
169
170
EXAMPLES::
171
172
sage: from sage.dev.test.sagedev import single_user_setup_with_internet
173
sage: _ = single_user_setup_with_internet()
174
"""
175
from config import DoctestConfig
176
config = DoctestConfig()
177
config['trac']['password'] = 'secret'
178
dev = DoctestSageDevWrapper(config, None)
179
return dev, config, dev._UI
180
181
182
def two_user_setup():
183
r"""
184
Create a typical two user setup for doctesting.
185
186
EXAMPLES::
187
188
sage: from sage.dev.test.sagedev import two_user_setup
189
sage: alice, alice_config, bob, bob_config, server = two_user_setup()
190
191
"""
192
from trac_server import DoctestTracServer
193
from config import DoctestConfig
194
server = DoctestTracServer()
195
config_alice = DoctestConfig('alice')
196
config_alice['trac']['password'] = 'secret'
197
alice = DoctestSageDevWrapper(config_alice, server)
198
alice._pull_master_branch()
199
200
config_bob = DoctestConfig('bob')
201
config_bob['trac']['password'] = 'secret'
202
bob = DoctestSageDevWrapper(config_bob, server)
203
bob._pull_master_branch()
204
205
return alice, config_alice, bob, config_bob, server
206
207