@@ -520,13 +520,41 @@ def units():
520520 if d : d .unlink (force = True )
521521 helpers .remove_unused_metadata (session )
522522
523+ def test_AVUs_populated_improperly_with_empties_or_nonstrings_fail_identically__issue_547 (self ):
524+ try :
525+ to_delete = []
526+ hc = helpers .home_collection (self .sess )
527+ mtemplate = iRODSMeta ('some_name' , 'some_value' , 'some_units' )
528+ for index in ('name' ,'value' ,'units' ):
529+ for edge_case_arg in ('' , 3 ):
530+ # Empty units are permitted, ie. iRODSMeta(attr,value,'') and iRODSMeta(attr,value) are equivalent.
531+ if edge_case_arg in ('' ,b'' ) and index == 'units' :
532+ continue
533+ for method in ('set' ,'add' ):
534+ data = self .sess .data_objects .create ("{hc}/{index}_{edge_case_arg}_{method}_AZ__issue_547" .format (** locals ()))
535+ to_delete .append (data )
536+ m = iRODSMeta (* mtemplate )
537+ setattr (m , index , edge_case_arg )
538+ with self .assertRaises (Bad_AVU_Field ):
539+ getattr (data .metadata , method )(* m )
540+ finally :
541+ for d in to_delete :
542+ d .unlink (force = True )
543+
523544 def test_nonstring_as_AVU_value_raises_an_error__issue_434 (self ):
545+ args = ("an_attribute" ,0 )
524546 with self .assertRaisesRegexp (Bad_AVU_Field ,'incorrect type' ):
525- self .coll .metadata .set ("an_attribute" ,0 )
547+ self .coll .metadata .set (* args )
548+ with self .assertRaisesRegexp (Bad_AVU_Field ,'incorrect type' ):
549+ self .coll .metadata .add (* args )
526550
527551 def test_empty_string_as_AVU_value_raises_an_error__issue_434 (self ):
552+ args = ("an_attribute" ,"" )
553+ with self .assertRaisesRegexp (Bad_AVU_Field ,'zero-length' ):
554+ self .coll .metadata .set (* args )
528555 with self .assertRaisesRegexp (Bad_AVU_Field ,'zero-length' ):
529- self .coll .metadata .set ("an_attribute" ,"" )
556+ self .coll .metadata .add (* args )
557+
530558
531559if __name__ == '__main__' :
532560 # let the tests find the parent irods lib
0 commit comments