@@ -67,7 +67,7 @@ def test_still_running_at_exit(self):
67
67
class TestBase (unittest .TestCase ):
68
68
69
69
def tearDown (self ):
70
- for id in interpreters ._enumerate ():
70
+ for id in interpreters .enumerate ():
71
71
if id == 0 : # main
72
72
continue
73
73
try :
@@ -76,13 +76,49 @@ def tearDown(self):
76
76
pass # already destroyed
77
77
78
78
79
+ class EnumerateTests (TestBase ):
80
+
81
+ def test_multiple (self ):
82
+ main , = interpreters .enumerate ()
83
+ id1 = interpreters .create ()
84
+ id2 = interpreters .create ()
85
+ ids = interpreters .enumerate ()
86
+
87
+ self .assertEqual (set (ids ), {main , id1 , id2 })
88
+
89
+ def test_main_only (self ):
90
+ main , = interpreters .enumerate ()
91
+
92
+ self .assertEqual (main , 0 )
93
+
94
+
95
+ class GetCurrentTests (TestBase ):
96
+
97
+ def test_main (self ):
98
+ main , = interpreters .enumerate ()
99
+ id = interpreters .get_current ()
100
+
101
+ self .assertEqual (id , main )
102
+
103
+ def test_sub (self ):
104
+ id1 = interpreters .create ()
105
+ ns = interpreters .run_string_unrestricted (id1 , dedent ("""
106
+ import _interpreters
107
+ id = _interpreters.get_current()
108
+ """ ))
109
+ id2 = ns ['id' ]
110
+
111
+ self .assertEqual (id2 , id1 )
112
+
113
+
79
114
class CreateTests (TestBase ):
80
115
81
116
def test_in_main (self ):
82
117
id = interpreters .create ()
83
118
84
- self .assertIn (id , interpreters ._enumerate ())
119
+ self .assertIn (id , interpreters .enumerate ())
85
120
121
+ @unittest .skip ('enable this test when working on pystate.c' )
86
122
def test_unique_id (self ):
87
123
seen = set ()
88
124
for _ in range (100 ):
@@ -105,21 +141,21 @@ def f():
105
141
with lock :
106
142
t .start ()
107
143
t .join ()
108
- self .assertIn (id , interpreters ._enumerate ())
144
+ self .assertIn (id , interpreters .enumerate ())
109
145
110
146
def test_in_subinterpreter (self ):
111
- main , = interpreters ._enumerate ()
147
+ main , = interpreters .enumerate ()
112
148
id1 = interpreters .create ()
113
149
ns = interpreters .run_string_unrestricted (id1 , dedent ("""
114
150
import _interpreters
115
151
id = _interpreters.create()
116
152
""" ))
117
153
id2 = ns ['id' ]
118
154
119
- self .assertEqual (set (interpreters ._enumerate ()), {main , id1 , id2 })
155
+ self .assertEqual (set (interpreters .enumerate ()), {main , id1 , id2 })
120
156
121
157
def test_in_threaded_subinterpreter (self ):
122
- main , = interpreters ._enumerate ()
158
+ main , = interpreters .enumerate ()
123
159
id1 = interpreters .create ()
124
160
ns = None
125
161
script = dedent ("""
@@ -135,11 +171,11 @@ def f():
135
171
t .join ()
136
172
id2 = ns ['id' ]
137
173
138
- self .assertEqual (set (interpreters ._enumerate ()), {main , id1 , id2 })
174
+ self .assertEqual (set (interpreters .enumerate ()), {main , id1 , id2 })
139
175
140
176
141
177
def test_after_destroy_all (self ):
142
- before = set (interpreters ._enumerate ())
178
+ before = set (interpreters .enumerate ())
143
179
# Create 3 subinterpreters.
144
180
ids = []
145
181
for _ in range (3 ):
@@ -150,10 +186,10 @@ def test_after_destroy_all(self):
150
186
interpreters .destroy (id )
151
187
# Finally, create another.
152
188
id = interpreters .create ()
153
- self .assertEqual (set (interpreters ._enumerate ()), before | {id })
189
+ self .assertEqual (set (interpreters .enumerate ()), before | {id })
154
190
155
191
def test_after_destroy_some (self ):
156
- before = set (interpreters ._enumerate ())
192
+ before = set (interpreters .enumerate ())
157
193
# Create 3 subinterpreters.
158
194
id1 = interpreters .create ()
159
195
id2 = interpreters .create ()
@@ -163,7 +199,7 @@ def test_after_destroy_some(self):
163
199
interpreters .destroy (id3 )
164
200
# Finally, create another.
165
201
id = interpreters .create ()
166
- self .assertEqual (set (interpreters ._enumerate ()), before | {id , id2 })
202
+ self .assertEqual (set (interpreters .enumerate ()), before | {id , id2 })
167
203
168
204
169
205
class DestroyTests (TestBase ):
@@ -172,25 +208,25 @@ def test_one(self):
172
208
id1 = interpreters .create ()
173
209
id2 = interpreters .create ()
174
210
id3 = interpreters .create ()
175
- self .assertIn (id2 , interpreters ._enumerate ())
211
+ self .assertIn (id2 , interpreters .enumerate ())
176
212
interpreters .destroy (id2 )
177
- self .assertNotIn (id2 , interpreters ._enumerate ())
178
- self .assertIn (id1 , interpreters ._enumerate ())
179
- self .assertIn (id3 , interpreters ._enumerate ())
213
+ self .assertNotIn (id2 , interpreters .enumerate ())
214
+ self .assertIn (id1 , interpreters .enumerate ())
215
+ self .assertIn (id3 , interpreters .enumerate ())
180
216
181
217
def test_all (self ):
182
- before = set (interpreters ._enumerate ())
218
+ before = set (interpreters .enumerate ())
183
219
ids = set ()
184
220
for _ in range (3 ):
185
221
id = interpreters .create ()
186
222
ids .add (id )
187
- self .assertEqual (set (interpreters ._enumerate ()), before | ids )
223
+ self .assertEqual (set (interpreters .enumerate ()), before | ids )
188
224
for id in ids :
189
225
interpreters .destroy (id )
190
- self .assertEqual (set (interpreters ._enumerate ()), before )
226
+ self .assertEqual (set (interpreters .enumerate ()), before )
191
227
192
228
def test_main (self ):
193
- main , = interpreters ._enumerate ()
229
+ main , = interpreters .enumerate ()
194
230
with self .assertRaises (RuntimeError ):
195
231
interpreters .destroy (main )
196
232
@@ -217,7 +253,7 @@ def test_bad_id(self):
217
253
interpreters .destroy (- 1 )
218
254
219
255
def test_from_current (self ):
220
- main , = interpreters ._enumerate ()
256
+ main , = interpreters .enumerate ()
221
257
id = interpreters .create ()
222
258
script = dedent ("""
223
259
import _interpreters
@@ -226,10 +262,10 @@ def test_from_current(self):
226
262
227
263
with self .assertRaises (RuntimeError ):
228
264
interpreters .run_string (id , script )
229
- self .assertEqual (set (interpreters ._enumerate ()), {main , id })
265
+ self .assertEqual (set (interpreters .enumerate ()), {main , id })
230
266
231
267
def test_from_sibling (self ):
232
- main , = interpreters ._enumerate ()
268
+ main , = interpreters .enumerate ()
233
269
id1 = interpreters .create ()
234
270
id2 = interpreters .create ()
235
271
script = dedent ("""
@@ -238,7 +274,7 @@ def test_from_sibling(self):
238
274
""" ).format (id2 )
239
275
interpreters .run_string (id1 , script )
240
276
241
- self .assertEqual (set (interpreters ._enumerate ()), {main , id1 })
277
+ self .assertEqual (set (interpreters .enumerate ()), {main , id1 })
242
278
243
279
def test_from_other_thread (self ):
244
280
id = interpreters .create ()
@@ -252,7 +288,7 @@ def f():
252
288
def test_still_running (self ):
253
289
# XXX Rewrite this test without files by using
254
290
# run_string_unrestricted().
255
- main , = interpreters ._enumerate ()
291
+ main , = interpreters .enumerate ()
256
292
id = interpreters .create ()
257
293
def f ():
258
294
interpreters .run_string (id , wait_script )
@@ -265,7 +301,7 @@ def f():
265
301
interpreters .destroy (id )
266
302
267
303
t .join ()
268
- self .assertEqual (set (interpreters ._enumerate ()), {main , id })
304
+ self .assertEqual (set (interpreters .enumerate ()), {main , id })
269
305
270
306
271
307
class RunStringTests (TestBase ):
@@ -389,7 +425,7 @@ def f():
389
425
390
426
def test_does_not_exist (self ):
391
427
id = 0
392
- while id in interpreters ._enumerate ():
428
+ while id in interpreters .enumerate ():
393
429
id += 1
394
430
with self .assertRaises (RuntimeError ):
395
431
interpreters .run_string (id , 'print("spam")' )
0 commit comments