@@ -30,29 +30,53 @@ def test_rebase_resolve_path_traits():
3030 a = rebase_path_traits (spec .trait ('a' ), v , '/some/path' )
3131 assert a == Path ('f1.txt' )
3232
33+ # Idempotence
34+ assert rebase_path_traits (spec .trait ('a' ), a , '/some/path' ) == a
35+
3336 a = resolve_path_traits (spec .trait ('a' ), a , '/some/path' )
3437 assert a == Path (v )
3538
39+ # Idempotence
40+ assert resolve_path_traits (spec .trait ('a' ), a , '/some/path' ) == a
41+
3642 a = rebase_path_traits (spec .trait ('a' ), v , '/some/other/path' )
3743 assert a == Path (v )
3844
45+ # Idempotence
46+ assert rebase_path_traits (spec .trait ('a' ), a , '/some/other/path' ) == a
47+
3948 a = resolve_path_traits (spec .trait ('a' ), a , '/some/path' )
4049 assert a == Path (v )
4150
51+ # Idempotence
52+ assert resolve_path_traits (spec .trait ('a' ), a , '/some/path' ) == a
53+
4254 v = ('/some/path/f1.txt' , '/some/path/f2.txt' )
4355 b = rebase_path_traits (spec .trait ('b' ), v , '/some/path' )
4456 assert b == (Path ('f1.txt' ), Path ('f2.txt' ))
4557
58+ # Idempotence
59+ assert rebase_path_traits (spec .trait ('b' ), b , '/some/path' ) == b
60+
4661 b = resolve_path_traits (spec .trait ('b' ), b , '/some/path' )
4762 assert b == (Path (v [0 ]), Path (v [1 ]))
4863
64+ # Idempotence
65+ assert resolve_path_traits (spec .trait ('b' ), b , '/some/path' ) == b
66+
4967 v = ['/some/path/f1.txt' , '/some/path/f2.txt' , '/some/path/f3.txt' ]
5068 c = rebase_path_traits (spec .trait ('c' ), v , '/some/path' )
5169 assert c == [Path ('f1.txt' ), Path ('f2.txt' ), Path ('f3.txt' )]
5270
71+ # Idempotence
72+ assert rebase_path_traits (spec .trait ('c' ), c , '/some/path' ) == c
73+
5374 c = resolve_path_traits (spec .trait ('c' ), c , '/some/path' )
5475 assert c == [Path (vp ) for vp in v ]
5576
77+ # Idempotence
78+ assert resolve_path_traits (spec .trait ('c' ), c , '/some/path' ) == c
79+
5680 v = 2.0
5781 d = rebase_path_traits (spec .trait ('d' ), v , '/some/path' )
5882 assert d == v
@@ -64,119 +88,215 @@ def test_rebase_resolve_path_traits():
6488 d = rebase_path_traits (spec .trait ('d' ), v , '/some/path' )
6589 assert d == Path ('either.txt' )
6690
91+ # Idempotence
92+ assert rebase_path_traits (spec .trait ('d' ), d , '/some/path' ) == d
93+
6794 d = resolve_path_traits (spec .trait ('d' ), d , '/some/path' )
6895 assert d == Path (v )
6996
97+ # Idempotence
98+ assert resolve_path_traits (spec .trait ('d' ), d , '/some/path' ) == d
99+
70100 v = ['/some/path/f1.txt' , '/some/path/f2.txt' , '/some/path/f3.txt' ]
71101 e = rebase_path_traits (spec .trait ('e' ), v , '/some/path' )
72102 assert e == [Path ('f1.txt' ), Path ('f2.txt' ), Path ('f3.txt' )]
73103
104+ # Idempotence
105+ assert rebase_path_traits (spec .trait ('e' ), e , '/some/path' ) == e
106+
74107 e = resolve_path_traits (spec .trait ('e' ), e , '/some/path' )
75108 assert e == [Path (vp ) for vp in v ]
76109
110+ # Idempotence
111+ assert resolve_path_traits (spec .trait ('e' ), e , '/some/path' ) == e
112+
77113 v = [['/some/path/f1.txt' , '/some/path/f2.txt' ], [['/some/path/f3.txt' ]]]
78114 e = rebase_path_traits (spec .trait ('e' ), v , '/some/path' )
79115 assert e == [[Path ('f1.txt' ), Path ('f2.txt' )], [[Path ('f3.txt' )]]]
80116
117+ # Idempotence
118+ assert rebase_path_traits (spec .trait ('e' ), e , '/some/path' ) == e
119+
81120 e = resolve_path_traits (spec .trait ('e' ), e , '/some/path' )
82121 assert e == [[[Path (vpp ) for vpp in vp ] if isinstance (vp , list ) else Path (vp ) for vp in inner ]
83122 for inner in v ]
84123
124+ # Idempotence
125+ assert resolve_path_traits (spec .trait ('e' ), e , '/some/path' ) == e
126+
85127 # These are Str - no rebasing/resolving should happen
86128 v = [['/some/path/f1.txt' , '/some/path/f2.txt' ], [['/some/path/f3.txt' ]]]
87129 ee = rebase_path_traits (spec .trait ('ee' ), v , '/some/path' )
88130 assert ee == v
89131
132+ # Idempotence
133+ assert rebase_path_traits (spec .trait ('ee' ), ee , '/some/path' ) == ee
134+
90135 ee = resolve_path_traits (spec .trait ('ee' ), [['f1.txt' , 'f2.txt' ], [['f3.txt' ]]], '/some/path' )
91136 assert ee == [['f1.txt' , 'f2.txt' ], [['f3.txt' ]]]
92137
138+ # Idempotence
139+ assert resolve_path_traits (spec .trait ('ee' ), ee , '/some/path' ) == ee
140+
93141 v = {'1' : '/some/path/f1.txt' }
94142 f = rebase_path_traits (spec .trait ('f' ), v , '/some' )
95143 assert f == {'1' : Path ('path/f1.txt' )}
96144
145+ # Idempotence
146+ assert rebase_path_traits (spec .trait ('f' ), f , '/some' ) == f
147+
97148 f = resolve_path_traits (spec .trait ('f' ), f , '/some' )
98149 assert f == {k : Path (val ) for k , val in v .items ()}
99150
151+ # Idempotence
152+ assert resolve_path_traits (spec .trait ('f' ), f , '/some' ) == f
153+
100154 # Either(Str, File): passing in path-like apply manipulation
101155 v = '/some/path/either.txt'
102156 g = rebase_path_traits (spec .trait ('g' ), v , '/some/path' )
103157 assert g == Path ('either.txt' )
104158
159+ # Idempotence
160+ assert rebase_path_traits (spec .trait ('g' ), g , '/some/path' ) == g
161+
105162 g = resolve_path_traits (spec .trait ('g' ), g , '/some/path' )
106163 assert g == Path (v )
107164
165+ # Idempotence
166+ assert resolve_path_traits (spec .trait ('g' ), g , '/some/path' ) == g
167+
108168 g = rebase_path_traits (spec .trait ('g' ), v , '/some' )
109169 assert g == Path ('path/either.txt' )
110170
171+ # Idempotence
172+ assert rebase_path_traits (spec .trait ('g' ), g , '/some/path' ) == g
173+
111174 g = resolve_path_traits (spec .trait ('g' ), g , '/some' )
112175 assert g == Path (v )
113176
177+ # Idempotence
178+ assert resolve_path_traits (spec .trait ('g' ), g , '/some/path' ) == g
179+
114180 # Either(Str, File): passing str discards File
115181 v = 'either.txt'
116182 g = rebase_path_traits (spec .trait ('g' ), v , '/some/path' )
117183 assert g == v
118184
185+ # Idempotence
186+ assert rebase_path_traits (spec .trait ('g' ), g , '/some/path' ) == g
187+
119188 # This is a problematic case, it is impossible to know whether this
120189 # was meant to be a string or a file.
121190 # In this implementation, strings take precedence
122191 g = resolve_path_traits (spec .trait ('g' ), g , '/some/path' )
123192 assert g == v
124193
194+ # Idempotence
195+ assert resolve_path_traits (spec .trait ('g' ), g , '/some/path' ) == g
196+
125197 v = 'string'
126198 g = rebase_path_traits (spec .trait ('g' ), v , '/some' )
127199 assert g == v
128200
201+ # Idempotence
202+ assert rebase_path_traits (spec .trait ('g' ), g , '/some' ) == g
203+
129204 # This is a problematic case, it is impossible to know whether this
130205 # was meant to be a string or a file.
131206 g = resolve_path_traits (spec .trait ('g' ), v , '/some' )
132207 assert g == v
133208
209+ # Idempotence
210+ assert resolve_path_traits (spec .trait ('g' ), g , '/some' ) == g
211+
134212 v = v
135213 g = rebase_path_traits (spec .trait ('g' ), v , '/some/path' )
136214 assert g == v # You dont want this one to be a Path
137215
216+ # Idempotence
217+ assert rebase_path_traits (spec .trait ('g' ), g , '/some/path' ) == g
218+
138219 # This is a problematic case, it is impossible to know whether this
139220 # was meant to be a string or a file.
140221 g = resolve_path_traits (spec .trait ('g' ), g , '/some/path' )
141222 assert g == v # You dont want this one to be a Path
142223
224+ # Idempotence
225+ assert resolve_path_traits (spec .trait ('g' ), g , '/some/path' ) == g
226+
143227 h = rebase_path_traits (spec .trait ('h' ), v , '/some/path' )
144228 assert h == v
145229
230+ # Idempotence
231+ assert rebase_path_traits (spec .trait ('h' ), h , '/some/path' ) == h
232+
146233 h = resolve_path_traits (spec .trait ('h' ), h , '/some/path' )
147234 assert h == v
148235
236+ # Idempotence
237+ assert resolve_path_traits (spec .trait ('h' ), h , '/some/path' ) == h
238+
149239 v = '/some/path/either/file.txt'
150240 i = rebase_path_traits (spec .trait ('i' ), v , '/some/path' )
151241 assert i == Path ('either/file.txt' )
152242
243+ # Idempotence
244+ assert rebase_path_traits (spec .trait ('i' ), i , '/some/path' ) == i
245+
153246 i = resolve_path_traits (spec .trait ('i' ), i , '/some/path' )
154247 assert i == Path (v )
155248
249+ # Idempotence
250+ assert resolve_path_traits (spec .trait ('i' ), i , '/some/path' ) == i
251+
156252 v = ('/some/path/either/tuple/file.txt' , 2 )
157253 i = rebase_path_traits (spec .trait ('i' ), v , '/some/path' )
158254 assert i == (Path ('either/tuple/file.txt' ), 2 )
159255
256+ # Idempotence
257+ assert rebase_path_traits (spec .trait ('i' ), i , '/some/path' ) == i
258+
160259 i = resolve_path_traits (spec .trait ('i' ), i , '/some/path' )
161260 assert i == (Path (v [0 ]), v [1 ])
162261
262+ # Idempotence
263+ assert resolve_path_traits (spec .trait ('i' ), i , '/some/path' ) == i
264+
163265 v = '/some/path/either/file.txt'
164266 j = rebase_path_traits (spec .trait ('j' ), v , '/some/path' )
165267 assert j == Path ('either/file.txt' )
166268
269+ # Idempotence
270+ assert rebase_path_traits (spec .trait ('j' ), j , '/some/path' ) == j
271+
167272 j = resolve_path_traits (spec .trait ('j' ), j , '/some/path' )
168273 assert j == Path (v )
169274
275+ # Idempotence
276+ assert resolve_path_traits (spec .trait ('j' ), j , '/some/path' ) == j
277+
170278 v = ('/some/path/either/tuple/file.txt' , 2 )
171279 j = rebase_path_traits (spec .trait ('j' ), ('/some/path/either/tuple/file.txt' , 2 ), '/some/path' )
172280 assert j == (Path ('either/tuple/file.txt' ), 2 )
173281
282+ # Idempotence
283+ assert rebase_path_traits (spec .trait ('j' ), j , '/some/path' ) == j
284+
174285 j = resolve_path_traits (spec .trait ('j' ), j , '/some/path' )
175286 assert j == (Path (v [0 ]), v [1 ])
176287
288+ # Idempotence
289+ assert resolve_path_traits (spec .trait ('j' ), j , '/some/path' ) == j
290+
177291 v = {'a' : '/some/path/either/dict/file.txt' }
178292 j = rebase_path_traits (spec .trait ('j' ), v , '/some/path' )
179293 assert j == {'a' : Path ('either/dict/file.txt' )}
180294
295+ # Idempotence
296+ assert rebase_path_traits (spec .trait ('j' ), j , '/some/path' ) == j
297+
181298 j = resolve_path_traits (spec .trait ('j' ), j , '/some/path' )
182299 assert j == {k : Path (val ) for k , val in v .items ()}
300+
301+ # Idempotence
302+ assert resolve_path_traits (spec .trait ('j' ), j , '/some/path' ) == j
0 commit comments