154 lines
3.4 KiB
Go
154 lines
3.4 KiB
Go
package aprs
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestParseMessage(t *testing.T) {
|
|
tests := []struct {
|
|
Name string
|
|
Raw Raw
|
|
Want *Message
|
|
}{
|
|
{
|
|
"message, no ack expected",
|
|
":WU2Z :Testing",
|
|
&Message{
|
|
Recipient: "WU2Z",
|
|
Text: "Testing",
|
|
},
|
|
},
|
|
{
|
|
"message with sequence number, ack expected",
|
|
":WU2Z :Testing{003",
|
|
&Message{
|
|
ID: 3,
|
|
Recipient: "WU2Z",
|
|
Text: "Testing",
|
|
},
|
|
},
|
|
{
|
|
"an e-mail message",
|
|
":EMAIL :msproul@ap.org Test email",
|
|
&Message{
|
|
Recipient: "EMAIL",
|
|
Text: "msproul@ap.org Test email",
|
|
},
|
|
},
|
|
{
|
|
"message acknowledgement",
|
|
":KB2ICI-14:ack003",
|
|
&Message{
|
|
ID: 3,
|
|
IsAcknowledge: true,
|
|
Recipient: "KB2ICI-14",
|
|
},
|
|
},
|
|
{
|
|
"message rejection",
|
|
":KB2ICI-14:rej003",
|
|
&Message{
|
|
ID: 3,
|
|
IsRejection: true,
|
|
Recipient: "KB2ICI-14",
|
|
},
|
|
},
|
|
{
|
|
"bulletin",
|
|
":BLN3 :Snow expected in Tampa RSN",
|
|
&Message{
|
|
ID: 3,
|
|
IsBulletin: true,
|
|
Recipient: "BLN3",
|
|
Text: "Snow expected in Tampa RSN",
|
|
},
|
|
},
|
|
{
|
|
"annoucement",
|
|
":BLNQ :Mt St Helen digi will be QRT this weekend",
|
|
&Message{
|
|
IsBulletin: true,
|
|
Recipient: "BLNQ",
|
|
AnnoucementID: 'Q',
|
|
Text: "Mt St Helen digi will be QRT this weekend",
|
|
},
|
|
},
|
|
{
|
|
"group bulletin 4 to the WX group",
|
|
":BLN4WX :Stand by your snowplows",
|
|
&Message{
|
|
ID: 4,
|
|
IsBulletin: true,
|
|
Recipient: "BLN4WX",
|
|
Group: "WX",
|
|
Text: "Stand by your snowplows",
|
|
},
|
|
},
|
|
{
|
|
"national weather service alert",
|
|
":NWS-WARN :092010z,THUNDER_STORM,AR_ASHLEY,{S9JbA",
|
|
&Message{
|
|
IsBulletin: true,
|
|
Recipient: "NWS-WARN",
|
|
Severity: "WARN",
|
|
Text: "092010z,THUNDER_STORM,AR_ASHLEY,{S9JbA",
|
|
},
|
|
},
|
|
}
|
|
|
|
var decoder messageDecoder
|
|
for _, test := range tests {
|
|
t.Run(test.Name, func(t *testing.T) {
|
|
frame := &Frame{Raw: test.Raw}
|
|
if !decoder.CanDecode(frame) {
|
|
t.Fatalf("%T can't decode %q", decoder, test.Raw)
|
|
}
|
|
|
|
v, err := decoder.Decode(frame)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
testCompareMessage(t, test.Want, v)
|
|
})
|
|
}
|
|
}
|
|
|
|
func testCompareMessage(t *testing.T, want *Message, value any) {
|
|
t.Helper()
|
|
|
|
test, ok := value.(*Message)
|
|
if !ok {
|
|
t.Fatalf("expected data to be a %T, got %T", want, value)
|
|
return
|
|
}
|
|
|
|
if test.ID != want.ID {
|
|
t.Errorf("expected id %d, got %d", want.ID, test.ID)
|
|
}
|
|
if test.IsAcknowledge != want.IsAcknowledge {
|
|
t.Errorf("expected is acknowledge %t, got %t", want.IsAcknowledge, test.IsAcknowledge)
|
|
}
|
|
if test.IsRejection != want.IsRejection {
|
|
t.Errorf("expected is rejection %t, got %t", want.IsRejection, test.IsRejection)
|
|
}
|
|
if test.IsBulletin != want.IsBulletin {
|
|
t.Errorf("expected is bulletin %t, got %t", want.IsBulletin, test.IsBulletin)
|
|
}
|
|
if test.Recipient != want.Recipient {
|
|
t.Errorf("expected recipient %q, got %q", want.Recipient, test.Recipient)
|
|
}
|
|
if test.AnnoucementID != want.AnnoucementID {
|
|
t.Errorf("expected annoucement id %q, got %q", want.AnnoucementID, test.AnnoucementID)
|
|
}
|
|
if test.Group != want.Group {
|
|
t.Errorf("expected group %q, got %q", want.Group, test.Group)
|
|
}
|
|
if test.Severity != want.Severity {
|
|
t.Errorf("expected severity %q, got %q", want.Severity, test.Severity)
|
|
}
|
|
if test.Text != want.Text {
|
|
t.Errorf("expected text %q, got %q", want.Text, test.Text)
|
|
}
|
|
}
|