mirror of
https://github.com/on4kjm/FLEcli.git
synced 2025-01-31 06:51:02 +01:00
Improve parsing error reporting
* Better validation error for WWFF and SOTA ref * Better validation error for callsign * Improve frequency parsing errors
This commit is contained in:
parent
156ac9c875
commit
d60bab231f
4 changed files with 34 additions and 32 deletions
|
@ -137,10 +137,10 @@ func ParseLine(inputStr string, previousLine LogLine) (logLine LogLine, errorMsg
|
|||
logLine.Frequency = fmt.Sprintf("%.3f", qrg)
|
||||
} else {
|
||||
logLine.Frequency = ""
|
||||
errorMsg = errorMsg + " Frequency " + element + " is invalid for " + logLine.Band + " band"
|
||||
errorMsg = errorMsg + "Frequency [" + element + "] is invalid for " + logLine.Band + " band."
|
||||
}
|
||||
} else {
|
||||
errorMsg = errorMsg + " Unable to load frequency " + element + ": no band defined."
|
||||
errorMsg = errorMsg + "Unable to load frequency [" + element + "]: no band defined for that frequency."
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
@ -214,7 +214,7 @@ func ParseLine(inputStr string, previousLine LogLine) (logLine LogLine, errorMsg
|
|||
workRST = element
|
||||
} else {
|
||||
workRST = "*" + element
|
||||
errorMsg = errorMsg + "Invalid report (" + element + ") for " + logLine.ModeType + " mode "
|
||||
errorMsg = errorMsg + "Invalid report [" + element + "] for " + logLine.ModeType + " mode."
|
||||
}
|
||||
}
|
||||
if haveSentRST {
|
||||
|
@ -248,7 +248,7 @@ func ParseLine(inputStr string, previousLine LogLine) (logLine LogLine, errorMsg
|
|||
}
|
||||
|
||||
//If we come here, we could not make sense of what we found
|
||||
errorMsg = errorMsg + "Unable to parse " + element + " "
|
||||
errorMsg = errorMsg + "Unable to make sense of [" + element + "]."
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ func TestParseLine(t *testing.T) {
|
|||
{
|
||||
"Wrong mode",
|
||||
args{inputStr: "cww", previousLine: LogLine{Mode: "SSB"}},
|
||||
LogLine{Mode: "SSB", RSTsent: "59", RSTrcvd: "59"}, "Unable to parse cww ",
|
||||
LogLine{Mode: "SSB", RSTsent: "59", RSTrcvd: "59"}, "Unable to make sense of [cww].",
|
||||
},
|
||||
{
|
||||
"Parse OM name",
|
||||
|
@ -74,7 +74,7 @@ func TestParseLine(t *testing.T) {
|
|||
{
|
||||
"Parse frequency out of limit",
|
||||
args{inputStr: "14.453 on4kjm", previousLine: LogLine{Mode: "SSB", Band: "20m", BandLowerLimit: 14.0, BandUpperLimit: 14.35}},
|
||||
LogLine{Band: "20m", BandLowerLimit: 14.0, BandUpperLimit: 14.35, Call: "ON4KJM", Mode: "SSB", RSTsent: "59", RSTrcvd: "59"}, " Frequency 14.453 is invalid for 20m band",
|
||||
LogLine{Band: "20m", BandLowerLimit: 14.0, BandUpperLimit: 14.35, Call: "ON4KJM", Mode: "SSB", RSTsent: "59", RSTrcvd: "59"}, "Frequency [14.453] is invalid for 20m band.",
|
||||
},
|
||||
{
|
||||
"parse partial RST (sent) - CW",
|
||||
|
@ -104,7 +104,7 @@ func TestParseLine(t *testing.T) {
|
|||
{
|
||||
"Incompatible report",
|
||||
args{inputStr: "1230 on4kjm 5 599", previousLine: LogLine{Mode: "FM", ModeType: "PHONE"}},
|
||||
LogLine{Call: "ON4KJM", Time: "1230", ActualTime: "1230", RSTsent: "55", RSTrcvd: "*599", Mode: "FM", ModeType: "PHONE"}, "Invalid report (599) for PHONE mode ",
|
||||
LogLine{Call: "ON4KJM", Time: "1230", ActualTime: "1230", RSTsent: "55", RSTrcvd: "*599", Mode: "FM", ModeType: "PHONE"}, "Invalid report [599] for PHONE mode.",
|
||||
},
|
||||
{
|
||||
"SOTA keywork ",
|
||||
|
|
|
@ -33,7 +33,8 @@ func ValidateSota(inputStr string) (ref, errorMsg string) {
|
|||
if validSotaRegexp.MatchString(inputStr) {
|
||||
return inputStr, ""
|
||||
}
|
||||
return wrongInputStr, "Invalid SOTA reference"
|
||||
errorMsg = "[" + inputStr + "] is an invalid SOTA reference"
|
||||
return wrongInputStr, errorMsg
|
||||
}
|
||||
|
||||
var validWwffRegexp = regexp.MustCompile(`^[\d]{0,1}[A-Z]{1,2}FF-[\d]{4}$`)
|
||||
|
@ -46,7 +47,8 @@ func ValidateWwff(inputStr string) (ref, errorMsg string) {
|
|||
if validWwffRegexp.MatchString(inputStr) {
|
||||
return inputStr, ""
|
||||
}
|
||||
return wrongInputStr, "Invalid WWFF reference"
|
||||
errorMsg = "[" + inputStr + "] is an invalid WWFF reference"
|
||||
return wrongInputStr, errorMsg
|
||||
}
|
||||
|
||||
var validCallRegexp = regexp.MustCompile(`[\d]{0,1}[A-Z]{1,2}\d([A-Z]{1,4}|\d{3,3}|\d{1,3}[A-Z])[A-Z]{0,5}`)
|
||||
|
@ -64,7 +66,7 @@ func ValidateCall(sign string) (call, errorMsg string) {
|
|||
if validCallRegexp.MatchString(sign) {
|
||||
return sign, ""
|
||||
}
|
||||
return wrongSign, "Invalid call"
|
||||
return wrongSign, "[" + sign + "] is an invalid call"
|
||||
case 2:
|
||||
// some ambiguity here we need to resolve, could be a prefix or a suffix
|
||||
if validCallRegexp.MatchString(sp[0]) {
|
||||
|
@ -74,26 +76,26 @@ func ValidateCall(sign string) (call, errorMsg string) {
|
|||
//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"
|
||||
return wrongSign, "[" + sp[1] + "] is an invalid call"
|
||||
}
|
||||
//validate the prefix
|
||||
if !validPrefixRegexp.MatchString(sp[0]) {
|
||||
return wrongSign, "Invalid prefix"
|
||||
return wrongSign, "[" + sp[0] + "] is an invalid prefix"
|
||||
}
|
||||
return sign, ""
|
||||
case 3:
|
||||
//validate the part that should contain the call (sp[1])
|
||||
if !validCallRegexp.MatchString(sp[1]) {
|
||||
return wrongSign, "Invalid call"
|
||||
return wrongSign, "[" + sp[1] + "] is an invalid call"
|
||||
}
|
||||
//validate the prefix
|
||||
if !validPrefixRegexp.MatchString(sp[0]) {
|
||||
return wrongSign, "Invalid prefix"
|
||||
return wrongSign, "[" + sp[0] + "] is an invalid prefix"
|
||||
}
|
||||
//We don't check the suffix
|
||||
return sign, ""
|
||||
}
|
||||
return wrongSign, "Too many '/'"
|
||||
return wrongSign, "[" + sign + "] is invalid: too many '/'"
|
||||
}
|
||||
|
||||
// ValidateDate verifies whether the string is a valid date (YYYY-MM-DD).
|
||||
|
|
|
@ -32,22 +32,22 @@ func TestValidateWwff(t *testing.T) {
|
|||
{
|
||||
"Bad ref (no country prefix)",
|
||||
args{inputStr: "ff-0258"},
|
||||
"*FF-0258", "Invalid WWFF reference",
|
||||
"*FF-0258", "[FF-0258] is an invalid WWFF reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (wrong separator)",
|
||||
args{inputStr: "gff/0258"},
|
||||
"*GFF/0258", "Invalid WWFF reference",
|
||||
"*GFF/0258", "[GFF/0258] is an invalid WWFF reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (reference too short)",
|
||||
args{inputStr: "onff-258"},
|
||||
"*ONFF-258", "Invalid WWFF reference",
|
||||
"*ONFF-258", "[ONFF-258] is an invalid WWFF reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (no country prefix)",
|
||||
args{inputStr: "onff-02589"},
|
||||
"*ONFF-02589", "Invalid WWFF reference",
|
||||
"*ONFF-02589", "[ONFF-02589] is an invalid WWFF reference",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
|
@ -96,37 +96,37 @@ func TestValidateSota(t *testing.T) {
|
|||
{
|
||||
"Bad ref (long prefix)",
|
||||
args{inputStr: "xxxx/ON-001"},
|
||||
"*XXXX/ON-001", "Invalid SOTA reference",
|
||||
"*XXXX/ON-001", "[XXXX/ON-001] is an invalid SOTA reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (missing slash)",
|
||||
args{inputStr: "on ON-001"},
|
||||
"*ON ON-001", "Invalid SOTA reference",
|
||||
"*ON ON-001", "[ON ON-001] is an invalid SOTA reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (numerical region)",
|
||||
args{inputStr: "on/9N-001"},
|
||||
"*ON/9N-001", "Invalid SOTA reference",
|
||||
"*ON/9N-001", "[ON/9N-001] is an invalid SOTA reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (too long region)",
|
||||
args{inputStr: "on/ONA-001"},
|
||||
"*ON/ONA-001", "Invalid SOTA reference",
|
||||
"*ON/ONA-001", "[ON/ONA-001] is an invalid SOTA reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (no dash)",
|
||||
args{inputStr: "on/ON/001"},
|
||||
"*ON/ON/001", "Invalid SOTA reference",
|
||||
"*ON/ON/001", "[ON/ON/001] is an invalid SOTA reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (number too short)",
|
||||
args{inputStr: "on/ON-01"},
|
||||
"*ON/ON-01", "Invalid SOTA reference",
|
||||
"*ON/ON-01", "[ON/ON-01] is an invalid SOTA reference",
|
||||
},
|
||||
{
|
||||
"Bad ref (Number too long)",
|
||||
args{inputStr: "on/ON-9001"},
|
||||
"*ON/ON-9001", "Invalid SOTA reference",
|
||||
"*ON/ON-9001", "[ON/ON-9001] is an invalid SOTA reference",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
|
@ -196,32 +196,32 @@ func TestValidateCall(t *testing.T) {
|
|||
{
|
||||
"Pure junk passed",
|
||||
args{sign: "aaaaaa"},
|
||||
"*AAAAAA", "Invalid call",
|
||||
"*AAAAAA", "[AAAAAA] is an invalid call",
|
||||
},
|
||||
{
|
||||
"empty string",
|
||||
args{sign: ""},
|
||||
"*", "Invalid call",
|
||||
"*", "[] is an invalid call",
|
||||
},
|
||||
{
|
||||
"string with spaces",
|
||||
args{sign: " "},
|
||||
"*", "Invalid call",
|
||||
"*", "[] is an invalid call",
|
||||
},
|
||||
{
|
||||
"invalid prefix",
|
||||
args{sign: "xyz4/on4kjm"},
|
||||
"*XYZ4/ON4KJM", "Invalid prefix",
|
||||
"*XYZ4/ON4KJM", "[XYZ4] is an invalid prefix",
|
||||
},
|
||||
{
|
||||
"Too many /",
|
||||
args{sign: "F/on4kjm/p/x"},
|
||||
"*F/ON4KJM/P/X", "Too many '/'",
|
||||
"*F/ON4KJM/P/X", "[F/ON4KJM/P/X] is invalid: too many '/'",
|
||||
},
|
||||
{
|
||||
"signe /",
|
||||
args{sign: "/"},
|
||||
"*/", "Invalid call",
|
||||
"*/", "[] is an invalid call",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
|
|
Loading…
Reference in a new issue