121 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|