46 lines
1.5 KiB
Go
46 lines
1.5 KiB
Go
package udp
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
// The wire format, byte for byte. A malformed Free Text is discarded in silence
|
|
// by the far end, exactly like a malformed Reply — so a wrong byte here shows up
|
|
// as a button that does nothing.
|
|
func TestEncodeFreeText(t *testing.T) {
|
|
got := EncodeFreeText("JTDX", "73 GL", true)
|
|
want := []byte{
|
|
0xad, 0xbc, 0xcb, 0xda, // magic
|
|
0x00, 0x00, 0x00, 0x02, // schema 2
|
|
0x00, 0x00, 0x00, 0x09, // type 9 — Free Text
|
|
0x00, 0x00, 0x00, 0x04, 'J', 'T', 'D', 'X',
|
|
0x00, 0x00, 0x00, 0x05, '7', '3', ' ', 'G', 'L',
|
|
0x01, // send now
|
|
}
|
|
if !bytes.Equal(got, want) {
|
|
t.Errorf("EncodeFreeText\n got %#v\nwant %#v", got, want)
|
|
}
|
|
}
|
|
|
|
// send=false fills the box without keying — the difference is one byte, and
|
|
// getting it backwards would transmit when the operator only meant to prepare.
|
|
func TestEncodeFreeTextWithoutSending(t *testing.T) {
|
|
got := EncodeFreeText("MSHV", "", false)
|
|
if got[len(got)-1] != 0x00 {
|
|
t.Errorf("send flag = %#x, want 0 — this would transmit unasked", got[len(got)-1])
|
|
}
|
|
// An empty text is a zero-length QString, never the -1 that means null:
|
|
// WSJT-X drops a packet with a null where it expects text.
|
|
if !bytes.Equal(got[len(got)-5:len(got)-1], []byte{0, 0, 0, 0}) {
|
|
t.Errorf("empty text was not encoded as a zero-length string: % X", got)
|
|
}
|
|
}
|
|
|
|
func TestSendFreeTextRejectsEmptyID(t *testing.T) {
|
|
m := &Manager{}
|
|
if err := m.SendFreeText(" ", "73", true); err == nil {
|
|
t.Fatal("expected an error for a blank program id")
|
|
}
|
|
}
|