22
22
23
23
from .... import util
24
24
25
- # In Python 3.8 __len__ is called twice, which impacts some of the test assertions we do below.
26
- PYTHON_38_OR_LATER = sys .version_info [0 ] >= 3 and sys .version_info [1 ] >= 8
25
+
26
+ def unique (collection , key ):
27
+ result = []
28
+ keys = []
29
+ for item in collection :
30
+ k = key (item )
31
+ if k in keys :
32
+ continue
33
+ result .append (item )
34
+ keys .append (k )
35
+ return result
27
36
28
37
29
38
class StubPyTest (util .StubProxy ):
@@ -341,17 +350,16 @@ def test_basic(self):
341
350
("discovered.__getitem__" , (0 ,), None ),
342
351
]
343
352
344
- # In Python 3.8 __len__ is called twice.
345
- if PYTHON_38_OR_LATER :
346
- calls .insert (3 , ("discovered.__len__" , None , None ))
347
-
348
353
parents , tests = _discovery .discover (
349
354
[], _pytest_main = stubpytest .main , _plugin = plugin
350
355
)
351
356
357
+ actual_calls = unique (stub .calls , lambda k : k [0 ])
358
+ expected_calls = unique (calls , lambda k : k [0 ])
359
+
352
360
self .assertEqual (parents , [])
353
361
self .assertEqual (tests , expected )
354
- self .assertEqual (stub . calls , calls )
362
+ self .assertEqual (actual_calls , expected_calls )
355
363
356
364
def test_failure (self ):
357
365
stub = util .Stub ()
@@ -384,17 +392,16 @@ def test_no_tests_found(self):
384
392
("discovered.__getitem__" , (0 ,), None ),
385
393
]
386
394
387
- # In Python 3.8 __len__ is called twice.
388
- if PYTHON_38_OR_LATER :
389
- calls .insert (3 , ("discovered.__len__" , None , None ))
390
-
391
395
parents , tests = _discovery .discover (
392
396
[], _pytest_main = pytest .main , _plugin = plugin
393
397
)
394
398
399
+ actual_calls = unique (stub .calls , lambda k : k [0 ])
400
+ expected_calls = unique (calls , lambda k : k [0 ])
401
+
395
402
self .assertEqual (parents , [])
396
403
self .assertEqual (tests , expected )
397
- self .assertEqual (stub . calls , calls )
404
+ self .assertEqual (actual_calls , expected_calls )
398
405
399
406
def test_stdio_hidden_file (self ):
400
407
stub = util .Stub ()
@@ -409,10 +416,6 @@ def test_stdio_hidden_file(self):
409
416
]
410
417
pytest_stdout = "spamspamspamspamspamspamspammityspam"
411
418
412
- # In Python 3.8 __len__ is called twice.
413
- if PYTHON_38_OR_LATER :
414
- calls .insert (3 , ("discovered.__len__" , None , None ))
415
-
416
419
# to simulate stdio behavior in methods like os.dup,
417
420
# use actual files (rather than StringIO)
418
421
with tempfile .TemporaryFile ("r+" ) as mock :
@@ -430,8 +433,11 @@ def test_stdio_hidden_file(self):
430
433
mock .seek (0 )
431
434
captured = mock .read ()
432
435
436
+ actual_calls = unique (stub .calls , lambda k : k [0 ])
437
+ expected_calls = unique (calls , lambda k : k [0 ])
438
+
433
439
self .assertEqual (captured , "" )
434
- self .assertEqual (stub . calls , calls )
440
+ self .assertEqual (actual_calls , expected_calls )
435
441
436
442
def test_stdio_hidden_fd (self ):
437
443
# simulate cases where stdout comes from the lower layer than sys.stdout
@@ -467,10 +473,6 @@ def test_stdio_not_hidden_file(self):
467
473
]
468
474
pytest_stdout = "spamspamspamspamspamspamspammityspam"
469
475
470
- # In Python 3.8 __len__ is called twice.
471
- if PYTHON_38_OR_LATER :
472
- calls .insert (3 , ("discovered.__len__" , None , None ))
473
-
474
476
buf = StringIO ()
475
477
476
478
sys .stdout = buf
@@ -485,8 +487,11 @@ def test_stdio_not_hidden_file(self):
485
487
sys .stdout = sys .__stdout__
486
488
captured = buf .getvalue ()
487
489
490
+ actual_calls = unique (stub .calls , lambda k : k [0 ])
491
+ expected_calls = unique (calls , lambda k : k [0 ])
492
+
488
493
self .assertEqual (captured , pytest_stdout )
489
- self .assertEqual (stub . calls , calls )
494
+ self .assertEqual (actual_calls , expected_calls )
490
495
491
496
def test_stdio_not_hidden_fd (self ):
492
497
# simulate cases where stdout comes from the lower layer than sys.stdout
0 commit comments