Files
ham/protocol/aprs/message_test.go
maze 63040a44b3
Some checks failed
Run tests / test (1.25) (push) Failing after 1m37s
Run tests / test (stable) (push) Failing after 1m37s
protocol/aprs: refactored
2026-03-02 22:28:17 +01:00

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)
}
}