def objcall2testname(object_name, args, output): """Generate a test method name that describes given object call. >>> from test.helper import make_fresh_serialize >>> serialize = make_fresh_serialize() >>> objcall2testname('do_this', {}, serialize(True)) 'test_do_this_returns_true' >>> objcall2testname('compute', {}, serialize('whatever you say')) 'test_compute_returns_whatever_you_say' >>> objcall2testname('square', {'x': serialize(7)}, serialize(49)) 'test_square_returns_49_for_7' >>> objcall2testname('capitalize', {'str': serialize('a word.')}, serialize('A word.')) 'test_capitalize_returns_A_word_for_a_word' Two or more arguments are mentioned by name. >>> objcall2testname('ackermann', {'m': serialize(3), 'n': serialize(2)}, serialize(29)) 'test_ackermann_returns_29_for_m_equal_3_and_n_equal_2' Will sort arguments alphabetically. >>> objcall2testname('concat', {'s1': serialize('Hello '), 's2': serialize('world!')}, serialize('Hello world!')) 'test_concat_returns_Hello_world_for_s1_equal_Hello_and_s2_equal_world' Always starts and ends a word with a letter or number. >>> objcall2testname('strip', {'n': serialize(1), 's': serialize(' A bit of whitespace ')}, serialize(' A bit of whitespace ')) 'test_strip_returns_A_bit_of_whitespace_for_n_equal_1_and_s_equal_A_bit_of_whitespace' Uses argument name when argument is used as a return value. >>> alist = serialize([]) >>> objcall2testname('identity', {'x': alist}, alist) 'test_identity_returns_x_for_x_equal_list' """ if args: # If return value is present in arguments list, use its name as an # identifier. output_name = key_for_value(args, output) if output_name: call_description = "%s_for_%s" % ( output_name, arguments_as_string(args, always_use_argnames=True)) else: call_description = "%s_for_%s" % (object2id(output), arguments_as_string(args)) else: call_description = object2id(output) return "test_%s_returns_%s" % (underscore(object_name), call_description)
def objcall2testname(object_name, args, output): """Generate a test method name that describes given object call. >>> from test.helper import make_fresh_serialize >>> serialize = make_fresh_serialize() >>> objcall2testname('do_this', {}, serialize(True)) 'test_do_this_returns_true' >>> objcall2testname('compute', {}, serialize('whatever you say')) 'test_compute_returns_whatever_you_say' >>> objcall2testname('square', {'x': serialize(7)}, serialize(49)) 'test_square_returns_49_for_7' >>> objcall2testname('capitalize', {'str': serialize('a word.')}, serialize('A word.')) 'test_capitalize_returns_A_word_for_a_word' Two or more arguments are mentioned by name. >>> objcall2testname('ackermann', {'m': serialize(3), 'n': serialize(2)}, serialize(29)) 'test_ackermann_returns_29_for_m_equal_3_and_n_equal_2' Will sort arguments alphabetically. >>> objcall2testname('concat', {'s1': serialize('Hello '), 's2': serialize('world!')}, serialize('Hello world!')) 'test_concat_returns_Hello_world_for_s1_equal_Hello_and_s2_equal_world' Always starts and ends a word with a letter or number. >>> objcall2testname('strip', {'n': serialize(1), 's': serialize(' A bit of whitespace ')}, serialize(' A bit of whitespace ')) 'test_strip_returns_A_bit_of_whitespace_for_n_equal_1_and_s_equal_A_bit_of_whitespace' Uses argument name when argument is used as a return value. >>> alist = serialize([]) >>> objcall2testname('identity', {'x': alist}, alist) 'test_identity_returns_x_for_x_equal_list' """ if args: # If return value is present in arguments list, use its name as an # identifier. output_name = key_for_value(args, output) if output_name: call_description = "%s_for_%s" % (output_name, arguments_as_string(args, always_use_argnames=True)) else: call_description = "%s_for_%s" % (object2id(output), arguments_as_string(args)) else: call_description = object2id(output) return "test_%s_returns_%s" % (underscore(object_name), call_description)
def assign_name_to_object(obj, assigned_names, rename=True): """Assign a right name for given object. May reassign an existing name for an object as a side effect, unless `rename` is False. """ if assigned_names.has_key(obj): return base = get_name_base_for_object(obj) other_obj = key_for_value(assigned_names, base) if other_obj: # Avoid overlapping names by numbering objects with the same base. if rename: assigned_names[other_obj] = base+"1" assigned_names[obj] = base+"2" elif base+"1" in assigned_names.values(): # We have some objects already numbered, insert a name with a new index. assigned_names[obj] = get_next_name(assigned_names.values(), base) else: # It's the first object with that base. assigned_names[obj] = base
def assign_name_to_object(obj, assigned_names, rename=True): """Assign a right name for given object. May reassign an existing name for an object as a side effect, unless `rename` is False. """ if assigned_names.has_key(obj): return base = get_name_base_for_object(obj) other_obj = key_for_value(assigned_names, base) if other_obj: # Avoid overlapping names by numbering objects with the same base. if rename: assigned_names[other_obj] = base + "1" assigned_names[obj] = base + "2" elif base + "1" in assigned_names.values(): # We have some objects already numbered, insert a name with a new index. assigned_names[obj] = get_next_name(assigned_names.values(), base) else: # It's the first object with that base. assigned_names[obj] = base