| package util |
|
|
| import ( |
| "testing" |
| ) |
|
|
| func TestSanitizeFunctionName(t *testing.T) { |
| tests := []struct { |
| name string |
| input string |
| expected string |
| }{ |
| {"Normal", "valid_name", "valid_name"}, |
| {"With Dots", "name.with.dots", "name.with.dots"}, |
| {"With Colons", "name:with:colons", "name:with:colons"}, |
| {"With Dashes", "name-with-dashes", "name-with-dashes"}, |
| {"Mixed Allowed", "name.with_dots:colons-dashes", "name.with_dots:colons-dashes"}, |
| {"Invalid Characters", "name!with@invalid#chars", "name_with_invalid_chars"}, |
| {"Spaces", "name with spaces", "name_with_spaces"}, |
| {"Non-ASCII", "name_with_你好_chars", "name_with____chars"}, |
| {"Starts with digit", "123name", "_123name"}, |
| {"Starts with dot", ".name", "_.name"}, |
| {"Starts with colon", ":name", "_:name"}, |
| {"Starts with dash", "-name", "_-name"}, |
| {"Starts with invalid char", "!name", "_name"}, |
| {"Exactly 64 chars", "this_is_a_very_long_name_that_exactly_reaches_sixty_four_charact", "this_is_a_very_long_name_that_exactly_reaches_sixty_four_charact"}, |
| {"Too long (65 chars)", "this_is_a_very_long_name_that_exactly_reaches_sixty_four_charactX", "this_is_a_very_long_name_that_exactly_reaches_sixty_four_charact"}, |
| {"Very long", "this_is_a_very_long_name_that_exceeds_the_sixty_four_character_limit_for_function_names", "this_is_a_very_long_name_that_exceeds_the_sixty_four_character_l"}, |
| {"Starts with digit (64 chars total)", "1234567890123456789012345678901234567890123456789012345678901234", "_123456789012345678901234567890123456789012345678901234567890123"}, |
| {"Starts with invalid char (64 chars total)", "!234567890123456789012345678901234567890123456789012345678901234", "_234567890123456789012345678901234567890123456789012345678901234"}, |
| {"Empty", "", ""}, |
| {"Single character invalid", "@", "_"}, |
| {"Single character valid", "a", "a"}, |
| {"Single character digit", "1", "_1"}, |
| {"Single character underscore", "_", "_"}, |
| } |
|
|
| for _, tt := range tests { |
| t.Run(tt.name, func(t *testing.T) { |
| got := SanitizeFunctionName(tt.input) |
| if got != tt.expected { |
| t.Errorf("SanitizeFunctionName(%q) = %v, want %v", tt.input, got, tt.expected) |
| } |
| |
| if len(got) > 64 { |
| t.Errorf("SanitizeFunctionName(%q) result too long: %d", tt.input, len(got)) |
| } |
| if len(got) > 0 { |
| first := got[0] |
| if !((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z') || first == '_') { |
| t.Errorf("SanitizeFunctionName(%q) result starts with invalid char: %c", tt.input, first) |
| } |
| } |
| }) |
| } |
| } |
|
|