@@ -135,29 +135,66 @@ def test_match_args_with_unnamed_fields(self):
135
135
self .assertEqual (os .stat_result .__match_args__ , expected_args )
136
136
137
137
def test_copy_replace_all_fields_visible (self ):
138
+ assert os .times_result .n_unnamed_fields == 0 and os .times_result .n_sequence_fields == os .times_result .n_fields
139
+
140
+ expected_args = ('user' , 'system' , 'children_user' , 'children_system' , 'elapsed' )
141
+ self .assertEqual (os .times_result .__match_args__ , expected_args )
142
+ self .assertEqual (os .times_result .n_fields , len (expected_args ))
143
+
144
+ n_fields = os .times_result .n_fields # 5
145
+ t = os .times_result (range (os .times_result .n_fields ))
146
+
147
+ # visible fields
148
+ self .assertEqual (copy .replace (t ), tuple (range (n_fields )))
149
+ self .assertEqual (copy .replace (t , user = 1 ), (1 , * range (1 , n_fields )))
150
+ self .assertEqual (copy .replace (t , system = 2 ), (0 , 2 , * range (2 , n_fields )))
151
+ self .assertEqual (copy .replace (t , user = 1 , system = 2 ), (1 , 2 , * range (2 , n_fields )))
152
+
153
+ # named invisible fields
154
+ with self .assertRaisesRegex (ValueError , 'unexpected field name' ):
155
+ copy .replace (t , error = - 1 )
156
+ with self .assertRaisesRegex (ValueError , 'unexpected field name' ):
157
+ copy .replace (t , user = 1 , error = - 1 )
158
+
159
+ def test_copy_replace_has_invisible_fields (self ):
138
160
t = time .gmtime (0 )
139
- assert t .n_unnamed_fields == 0 and t .n_sequence_fields == t .n_fields
161
+ assert t .n_unnamed_fields == 0 and t .n_sequence_fields < t .n_fields
140
162
163
+ # visible fields
141
164
self .assertEqual (copy .replace (t ), (1970 , 1 , 1 , 0 , 0 , 0 , 3 , 1 , 0 ))
142
165
self .assertEqual (copy .replace (t , tm_year = 2000 ),
143
166
(2000 , 1 , 1 , 0 , 0 , 0 , 3 , 1 , 0 ))
144
167
self .assertEqual (copy .replace (t , tm_mon = 2 ),
145
168
(1970 , 2 , 1 , 0 , 0 , 0 , 3 , 1 , 0 ))
146
169
self .assertEqual (copy .replace (t , tm_year = 2000 , tm_mon = 2 ),
147
170
(2000 , 2 , 1 , 0 , 0 , 0 , 3 , 1 , 0 ))
148
- with self .assertRaisesRegex (ValueError , 'unexpected field name' ):
149
- copy .replace (t , tm_year = 2000 , error = 2 )
150
171
151
- def test_copy_replace_has_invisible_fields (self ):
152
- assert os .stat_result .n_sequence_fields + os .stat_result .n_unnamed_fields < os .stat_result .n_fields
153
- r = os .stat_result (range (os .stat_result .n_sequence_fields ), {'st_atime_ns' : - 1 })
154
- self .assertHasAttr (r , 'st_atime_ns' )
155
- self .assertEqual (r .st_atime_ns , - 1 )
172
+ # named invisible fields
156
173
with self .assertRaisesRegex (AttributeError , 'readonly attribute' ):
157
- r .st_atime_ns = - 2
158
- r2 = copy .replace (r , st_atime_ns = - 3 )
159
- self .assertHasAttr (r2 , 'st_atime_ns' )
160
- self .assertEqual (r2 .st_atime_ns , - 3 )
174
+ t .tm_zone = 'some other zone'
175
+ self .assertHasAttr (t , 'tm_zone' )
176
+ self .assertEqual (copy .replace (t , tm_zone = 'some other zone' ).tm_zone ,
177
+ 'some other zone' )
178
+
179
+ # unknown fields
180
+ with self .assertRaisesRegex (ValueError , 'unexpected field name' ):
181
+ copy .replace (t , error = 2 )
182
+ with self .assertRaisesRegex (ValueError , 'unexpected field name' ):
183
+ copy .replace (t , tm_year = 2000 , error = 2 )
184
+ with self .assertRaisesRegex (ValueError , 'unexpected field name' ):
185
+ copy .replace (t , tm_zone = 'some other zone' , error = 2 )
186
+
187
+ def test_copy_replace_has_unnamed_fields (self ):
188
+ assert os .stat_result .n_unnamed_fields > 0
189
+ r = os .stat_result (range (os .stat_result .n_sequence_fields ))
190
+ with self .assertRaisesRegex (TypeError , '__replace__() is not supported' ):
191
+ copy .replace (r )
192
+ with self .assertRaisesRegex (TypeError , '__replace__() is not supported' ):
193
+ copy .replace (r , st_mode = 1 )
194
+ with self .assertRaisesRegex (TypeError , '__replace__() is not supported' ):
195
+ copy .replace (r , error = 2 )
196
+ with self .assertRaisesRegex (TypeError , '__replace__() is not supported' ):
197
+ copy .replace (r , st_mode = 1 , error = 2 )
161
198
162
199
163
200
if __name__ == "__main__" :
0 commit comments