Files
ham/protocol/aprs/status_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

121 lines
2.4 KiB
Go

package aprs
import "testing"
func TestParseStatusReport(t *testing.T) {
tests := []struct {
Name string
Raw Raw
Want *Status
}{
{
"without timestamp",
">Net Control Center",
&Status{
Text: "Net Control Center",
},
},
{
"with timestamp",
">092345zNet Control Center",
&Status{
Text: "Net Control Center",
},
},
{
"with beam heading and erp",
">Test^B7",
&Status{
Text: "Test",
BeamHeading: 110,
ERP: 490,
},
},
{
"with maidenhead locator",
">IO91SX/G",
&Status{
Latitude: 51.958333,
Longitude: -0.5,
Symbol: "/G",
},
},
{
"with short maidenhead locator",
">IO91/G",
&Status{
Latitude: 51,
Longitude: -2,
Symbol: "/G",
},
},
{
"with maidenhead locator and comment",
">IO91SX/- My house",
&Status{
Latitude: 51.958333,
Longitude: -0.5,
Symbol: "/-",
Text: "My house",
},
},
{
"with maidenhead locator and beam heading",
">IO91SX/- ^B7",
&Status{
Latitude: 51.958333,
Longitude: -0.5,
Symbol: "/-",
BeamHeading: 110,
ERP: 490,
},
},
}
var decoder statusReportDecoder
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)
}
testCompareStatusReport(t, test.Want, v)
})
}
}
func testCompareStatusReport(t *testing.T, want *Status, value any) {
t.Helper()
test, ok := value.(*Status)
if !ok {
t.Fatalf("expected data to be a %T, got %T", want, value)
return
}
if !testAlmostEqual(test.Latitude, want.Latitude) {
t.Errorf("expected latitude %f, got %f", want.Latitude, test.Latitude)
}
if !testAlmostEqual(test.Longitude, want.Longitude) {
t.Errorf("expected longitude %f, got %f", want.Longitude, test.Longitude)
}
if test.BeamHeading != want.BeamHeading {
t.Errorf("expected beam heading %d, got %d", want.BeamHeading, test.BeamHeading)
}
if test.ERP != want.ERP {
t.Errorf("expected ERP %dW, got %dW", want.ERP, test.ERP)
}
if test.Symbol != want.Symbol {
t.Errorf("expected symbol %q, got %q", want.Symbol, test.Symbol)
}
if test.Text != want.Text {
t.Errorf("expected text %q, got %q", want.Text, test.Text)
}
}