diff --git a/cmd/callsign.go b/cmd/callsign.go index 56f606e..46e1dbc 100644 --- a/cmd/callsign.go +++ b/cmd/callsign.go @@ -42,20 +42,28 @@ func ValidateCall(sign string) (call, errorMsg string) { if validCallRegexp.MatchString(sp[0]) { //Callisign with suffix (unchecked) return sign, "" - } else { - //Callsign with prefix - //validate the part that should contain the call (sp[1]) - if !validCallRegexp.MatchString(sp[1]) { - return wrongSign, "Invalid call" - } - //validate the prefix - if !validPrefixRegexp.MatchString(sp[0]) { - return wrongSign, "Invalid prefix" - } - return sign, "" + } + //else we are dealing with a prefixed Callsign + //validate the part that should contain the call (sp[1]) + if !validCallRegexp.MatchString(sp[1]) { + return wrongSign, "Invalid call" + } + //validate the prefix + if !validPrefixRegexp.MatchString(sp[0]) { + return wrongSign, "Invalid prefix" } + return sign, "" case 3: - return sign, "??????" + //validate the part that should contain the call (sp[1]) + if !validCallRegexp.MatchString(sp[1]) { + return wrongSign, "Invalid call" + } + //validate the prefix + if !validPrefixRegexp.MatchString(sp[0]) { + return wrongSign, "Invalid prefix" + } + //We don't check the suffix + return sign, "" } - return sign, "?????" + return wrongSign, "Too many '/'" } \ No newline at end of file diff --git a/cmd/callsign_test.go b/cmd/callsign_test.go index 9bb5e66..ac40c59 100644 --- a/cmd/callsign_test.go +++ b/cmd/callsign_test.go @@ -15,45 +15,63 @@ func TestValidateCall(t *testing.T) { { "Good call (simple)", args{ sign: "on4kjm", }, - "ON4KJM", - "", + "ON4KJM", "", }, { "Good call (suffix)", args{ sign: "on4kjm/p", }, - "ON4KJM/P", - "", + "ON4KJM/P", "", }, { "Good call (prefix only)", args{ sign: "DL/on4KJm", }, - "DL/ON4KJM", - "", + "DL/ON4KJM", "", }, { "Good call (prefix and suffix)", args{ sign: "DL/on4KJm/p", }, - "DL/ON4KJM/P", - "", + "DL/ON4KJM/P", "", + }, + { + "Good call (Numerical prefix)", + args{ sign: "4x/on4KJm/p", }, + "4X/ON4KJM/P", "", + }, + { + "Good call (prefix and long suffix)", + args{ sign: "DL/on4KJm/qrpp ", }, + "DL/ON4KJM/QRPP", "", }, //Error cases { "Pure junk passed", args{ sign: "aaaaaa", }, - "*AAAAAA", - "Invalid call", + "*AAAAAA", "Invalid call", }, { "empty string", args{ sign: "", }, - "*", - "Invalid call", + "*", "Invalid call", }, { "string with spaces", args{ sign: " ", }, - "*", - "Invalid call", + "*", "Invalid call", + }, + { + "invalid prefix", + args{ sign: "xyz/on4kjm", }, + "*XYZ/ON4KJM", "Invalid prefix", + }, + { + "Too many /", + args{ sign: "F/on4kjm/p/x", }, + "*F/ON4KJM/P/X", "Too many '/'", + }, + { + "signe /", + args{ sign: "/", }, + "*/", "Invalid call", }, } for _, tt := range tests {