basic test

This commit is contained in:
zhiqiang feng
2020-12-31 17:57:24 +08:00
parent 3813cab9ab
commit 220b1d269d
4 changed files with 129 additions and 6 deletions
+6 -1
View File
@@ -2,4 +2,9 @@ module it2000.com.cn/tele-proc
go 1.15 go 1.15
require github.com/urfave/cli/v2 v2.3.0 // indirect require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/stretchr/testify v1.6.1
github.com/urfave/cli/v2 v2.3.0
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
)
+13 -1
View File
@@ -1,13 +1,25 @@
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+58 -4
View File
@@ -1,22 +1,44 @@
package parser package parser
import "strings" import (
"regexp"
"strconv"
"strings"
)
type Telegram struct { type Telegram struct {
Text string Text string
Complete bool Complete bool
Parsed bool Parsed bool
Fields []string Fields []string
Sequence uint16 Sequence int
Type string
} }
const Start = "ZCZC"
const End = "NNN"
const (
Start = "ZCZC"
End = "NNNN"
TmqRegex = `TMQ(?P<tmq>\d{4})`
FlopRegex = `^\((?P<flop>\w{3})-.*`
TypePLN = "PLN"
)
//Parse //Parse
func Parse(text string) (*Telegram, error) { func Parse(text string) (*Telegram, error) {
var telegram = &Telegram{Text: text} var telegram = &Telegram{Text: text}
telegram.Complete = isStartAndEnd(text) telegram.Complete = isStartAndEnd(text)
telegram.Fields = strings.Split(strings.Replace(text, "\r\n", "\n", -1), "\n")
telegram.Fields = clean(telegram.Fields)
seq := getFields(TmqRegex, telegram.Fields[0])
telegram.Sequence, _ = strconv.Atoi( seq["tmq"])
if isPln(*telegram) {
telegram.Type = TypePLN
} else if t := getFields(FlopRegex, telegram.Fields[3]); t != nil {
telegram.Type = t["flop"]
}
return telegram, nil return telegram, nil
} }
@@ -24,3 +46,35 @@ func isStartAndEnd(s string) bool {
text := strings.TrimSpace(s) text := strings.TrimSpace(s)
return strings.HasPrefix(text, Start) && strings.HasSuffix(text, End) return strings.HasPrefix(text, Start) && strings.HasSuffix(text, End)
} }
func clean(fields []string) []string {
var values []string
for _, s := range fields {
values = append(values, strings.TrimSpace(s))
}
return values[:len(values)-1]
}
func getFields(regEx, field string) (fields map[string]string) {
var compRegEx = regexp.MustCompile(regEx)
match := compRegEx.FindStringSubmatch(field)
fields = make(map[string]string)
for i, name := range compRegEx.SubexpNames() {
if i > 0 && i <= len(match) {
fields[name] = match[i]
}
}
return
}
func isPln(telegram Telegram) bool {
for _, value := range telegram.Fields {
if strings.HasPrefix(value, TypePLN) {
return true
}
}
return false
}
+52
View File
@@ -0,0 +1,52 @@
package parser
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestBasicFlop(t *testing.T) {
ast := assert.New(t)
s :=`ZCZC TMQ2526 141605
FF ZBTJZPZX
141604 ZBACZQZX
(ARR-JAE7433/A0132-RKSI-ZBTJ1604)
NNNN`
tele, err := Parse(s)
ast.Nil(err, "Should be no error")
ast.Equal(tele.Complete, true, "Should be complete telegram")
ast.Equal(4, len(tele.Fields), "get 4 lines")
ast.Equal("ZCZC TMQ2526 141605", tele.Fields[0])
ast.Equal(2526, tele.Sequence, "TMQ must be 2526")
ast.Equal(false, tele.Type == "PLN", "Not a plan")
ast.Equal("ARR", tele.Type, "Flop type is ARR")
}
func TestBasicPln(t *testing.T) {
ast := assert.New(t)
s := `ZCZC TMQ2886 142347
QU TSNZPCA
.
QU WUHZPCA WUHTZ8X TSNZPCA TSNTZCR FOCZPCA FOCTZMF XIYZPCA XIYKL8X
KWLZPCA KWLTF8X CANZPCA CANUOCZ CANKNCZ
.XMNUOMF 142346
PLN
15MAY
01) MF8138 B5162 ILS(8) TSN0010 0155WUH0245 0355FOC
02) MF8323 B5308 ILS(8) TSN0625 0810XIY0910 1050KWL
03) MF8324 B5308 ILS(8) KWL1135 1315XIY1405 1535TSN
04) MF8347 B5162 ILS(8) FOC0650 0815CAN
05) MF8348 B5162 ILS(8) CAN0920 1050FOC
SI:A/C CHG
=
NNNN`
tele, err := Parse(s)
ast.Nil(err, "Should be no error")
ast.Equal(tele.Complete, true, "Should be complete telegram")
ast.Equal(15, len(tele.Fields), "get 15 lines")
ast.Equal("ZCZC TMQ2886 142347", tele.Fields[0])
ast.Equal(2886, tele.Sequence, "TMQ must be 2886")
ast.Equal(true, tele.Type == "PLN", "This is a plan")
}