Added Date field parsing

pull/2/head
Jean-Marc MEESSEN 4 years ago
parent 5d2631bb0d
commit 30535269ce

@ -0,0 +1,38 @@
package cmd
/*
Copyright © 2020 Jean-Marc Meessen, ON4KJM <on4kjm@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import (
"strings"
"fmt"
"time"
)
// ValidateDate verifies whether the string is a valid date (YYYY-MM-DD).
func ValidateDate(inputStr string) (ref, errorMsg string) {
const RFC3339FullDate = "2006-01-02"
inputStr = strings.ToUpper(strings.TrimSpace(inputStr))
wrongInputStr := "*" + inputStr
_, err := time.Parse(RFC3339FullDate, inputStr)
if err == nil {
return inputStr, ""
}
return wrongInputStr, fmt.Sprint(err)
}

@ -0,0 +1,38 @@
package cmd
import "testing"
func TestValidateDate(t *testing.T) {
type args struct {
inputStr string
}
tests := []struct {
name string
args args
wantRef string
wantErrorMsg string
}{
{
"Good date (simple)",
args{ inputStr: "2020-06-10", },
"2020-06-10", "",
},
{
"Bad date (simple)",
args{ inputStr: "2020-13-10", },
"*2020-13-10", "parsing time \"2020-13-10\": month out of range",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotRef, gotErrorMsg := ValidateDate(tt.args.inputStr)
if gotRef != tt.wantRef {
t.Errorf("ValidateDate() gotRef = %v, want %v", gotRef, tt.wantRef)
}
if gotErrorMsg != tt.wantErrorMsg {
t.Errorf("ValidateDate() gotErrorMsg = %v, want %v", gotErrorMsg, tt.wantErrorMsg)
}
})
}
}

@ -84,7 +84,7 @@ func loadFile() {
regexpHeaderMySota, _ := regexp.Compile("(?i)^mysota ")
regexpHeaderQslMsg, _ := regexp.Compile("(?i)^qslmsg ")
regexpHeaderNickname, _ := regexp.Compile("(?i)^nickname ")
// regexpHeaderDate, _ := regexp.Compile("(?i)^date ")
regexpHeaderDate, _ := regexp.Compile("(?i)^date ")
headerMyCall := ""
headerOperator := ""
@ -92,6 +92,7 @@ func loadFile() {
headerMySOTA := ""
headerQslMsg := ""
headerNickname := ""
headerDate := ""
lineCount := 0
var isInMultiLine = false
@ -208,7 +209,7 @@ func loadFile() {
continue
}
//QSL Message
//Nickname
if(regexpHeaderNickname.MatchString(eachline)) {
myNicknameList := regexpHeaderNickname.Split(eachline,-1)
if(len(myNicknameList[1]) > 0) {
@ -219,6 +220,21 @@ func loadFile() {
continue
}
// Date
if(regexpHeaderDate.MatchString(eachline)) {
errorMsg := ""
myDateList := regexpHeaderDate.Split(eachline,-1)
if(len(myDateList[1]) > 0) {
headerDate, errorMsg = ValidateDate(myDateList[1])
cleanedInput = append(cleanedInput, fmt.Sprintf("Date: %s", headerDate))
if(len(errorMsg) != 0) {
errorLog = append(errorLog, fmt.Sprintf("Invalid Date at line %d: %s (%s)",lineCount, myDateList[1], errorMsg))
}
}
//If there is no data after the marker, we just skip the data.
continue
}
// ****
// ** Process the data block
// ****

Loading…
Cancel
Save