1""" Testing decorators module 2""" 3 4from numpy.testing import assert_equal 5from skimage._shared.testing import doctest_skip_parser, test_parallel 6from skimage._shared import testing 7 8from skimage._shared._warnings import expected_warnings 9from warnings import warn 10 11 12def test_skipper(): 13 def f(): 14 pass 15 16 class c(): 17 18 def __init__(self): 19 self.me = "I think, therefore..." 20 21 docstring = \ 22 """ Header 23 24 >>> something # skip if not HAVE_AMODULE 25 >>> something + else 26 >>> a = 1 # skip if not HAVE_BMODULE 27 >>> something2 # skip if HAVE_AMODULE 28 """ 29 f.__doc__ = docstring 30 c.__doc__ = docstring 31 32 global HAVE_AMODULE, HAVE_BMODULE 33 HAVE_AMODULE = False 34 HAVE_BMODULE = True 35 36 f2 = doctest_skip_parser(f) 37 c2 = doctest_skip_parser(c) 38 assert f is f2 39 assert c is c2 40 41 expected = \ 42 """ Header 43 44 >>> something # doctest: +SKIP 45 >>> something + else 46 >>> a = 1 47 >>> something2 48 """ 49 assert_equal(f2.__doc__, expected) 50 assert_equal(c2.__doc__, expected) 51 52 HAVE_AMODULE = True 53 HAVE_BMODULE = False 54 f.__doc__ = docstring 55 c.__doc__ = docstring 56 f2 = doctest_skip_parser(f) 57 c2 = doctest_skip_parser(c) 58 59 assert f is f2 60 expected = \ 61 """ Header 62 63 >>> something 64 >>> something + else 65 >>> a = 1 # doctest: +SKIP 66 >>> something2 # doctest: +SKIP 67 """ 68 assert_equal(f2.__doc__, expected) 69 assert_equal(c2.__doc__, expected) 70 71 del HAVE_AMODULE 72 f.__doc__ = docstring 73 c.__doc__ = docstring 74 with testing.raises(NameError): 75 doctest_skip_parser(f) 76 with testing.raises(NameError): 77 doctest_skip_parser(c) 78 79 80def test_test_parallel(): 81 state = [] 82 83 @test_parallel() 84 def change_state1(): 85 state.append(None) 86 change_state1() 87 assert len(state) == 2 88 89 @test_parallel(num_threads=1) 90 def change_state2(): 91 state.append(None) 92 change_state2() 93 assert len(state) == 3 94 95 @test_parallel(num_threads=3) 96 def change_state3(): 97 state.append(None) 98 change_state3() 99 assert len(state) == 6 100 101 102def test_parallel_warning(): 103 @test_parallel() 104 def change_state_warns_fails(): 105 warn("Test warning for test parallel", stacklevel=2) 106 107 with expected_warnings(['Test warning for test parallel']): 108 change_state_warns_fails() 109 110 @test_parallel(warnings_matching=['Test warning for test parallel']) 111 def change_state_warns_passes(): 112 warn("Test warning for test parallel", stacklevel=2) 113 114 change_state_warns_passes() 115 116 117def test_expected_warnings_noop(): 118 # This will ensure the line beolow it behaves like a no-op 119 with expected_warnings(['Expected warnings test']): 120 121 # This should behave as a no-op 122 with expected_warnings(None): 123 warn('Expected warnings test') 124 125