basic test
This commit is contained in:
@@ -2,4 +2,9 @@ module it2000.com.cn/tele-proc
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
@@ -1,13 +1,25 @@
|
||||
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/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/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/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/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/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/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
@@ -1,22 +1,44 @@
|
||||
package parser
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Telegram struct {
|
||||
Text string
|
||||
Complete bool
|
||||
Parsed bool
|
||||
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
|
||||
func Parse(text string) (*Telegram, error) {
|
||||
var telegram = &Telegram{Text: 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
|
||||
}
|
||||
|
||||
@@ -24,3 +46,35 @@ func isStartAndEnd(s string) bool {
|
||||
text := strings.TrimSpace(s)
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user