package adif import ( "strings" "testing" ) func TestParseSimple(t *testing.T) { src := `Header text here Generated by HamLog F4XYZ20mSSB20240101123456 K1AB40mCW202401020930 ` var got []Record err := Parse(strings.NewReader(src), func(r Record) error { got = append(got, r) return nil }) if err != nil { t.Fatalf("parse: %v", err) } if len(got) != 2 { t.Fatalf("want 2 records, got %d", len(got)) } if got[0]["call"] != "F4XYZ" || got[0]["band"] != "20m" || got[0]["mode"] != "SSB" { t.Errorf("record 0 mismatch: %+v", got[0]) } if got[1]["call"] != "K1AB" || got[1]["time_on"] != "0930" { t.Errorf("record 1 mismatch: %+v", got[1]) } } func TestParseValueWithAngleBracket(t *testing.T) { // Length-prefixed value can contain '<' and '>' bytes. src := `F4XYZac` var got []Record err := Parse(strings.NewReader(src), func(r Record) error { got = append(got, r) return nil }) if err != nil { t.Fatalf("parse: %v", err) } if len(got) != 1 { t.Fatalf("want 1, got %d", len(got)) } if got[0]["comment"] != "ac are // discarded by design. Verify nothing is emitted in that case. src := `F4XYZ` var got int err := Parse(strings.NewReader(src), func(r Record) error { got++ return nil }) if err != nil { t.Fatalf("parse: %v", err) } if got != 0 { t.Errorf("expected 0 records without , got %d", got) } } func TestParseTypedField(t *testing.T) { // form (e.g. ). src := `F4XYZ14.250` var got Record err := Parse(strings.NewReader(src), func(r Record) error { got = r return nil }) if err != nil { t.Fatalf("parse: %v", err) } if got["freq"] != "14.250" { t.Errorf("freq mismatch: %q", got["freq"]) } }