package parse import ( "strings" "testing" ) func TestReadUntil(t *testing.T) { s := "until=" want := "until" msg, _, err := ReadUntil(strings.NewReader(s), []byte{'='}) if err != nil { t.Fatal(err) } if want != msg { t.Errorf(`ReadUntil(strings.NewReader(s), []byte{'='}) = %q, %v want "", error`, msg, err) } } func TestReadTag(t *testing.T) { tag := "" want := new(Tag) want.name = "hello" r := strings.NewReader(tag) b := make([]byte, 1) // Consume '<' _, _ = r.Read(b) msg, err := ReadTag(r) if err != nil { t.Fatal(err) } if want.name != msg.name { t.Errorf(`ReadTag(strings.NewReader("")) = %q, %v, want "", error`, msg.name, err) } } func TestReadTagAttributes(t *testing.T) { tag := `` want := new(Tag) want.attributes = make(map[string]string) want.attributes["attribute"] = "value" want.attributes["and"] = "another one" r := strings.NewReader(tag) b := make([]byte, 1) // Consume '<' _, _ = r.Read(b) msg, err := ReadTag(r) if err != nil { t.Fatal(err) } if want.attributes["attribute"] != msg.attributes["attribute"] { t.Errorf(`ReadTag(strings.NewReader()) = %q, %v, want "", error`, msg.attributes["attribute"], err) } } func TestParseTagContents(t *testing.T) { elementString := `

Contents

` want := make([]any, 3) { e := new(Tag) e.name = "p" want[0] = e } want[1] = "Contents" { e := new(Tag) e.name = "/p" want[2] = e } msg, err := Parse(strings.NewReader(elementString)) if err != nil { t.Fatal(err) } for e := range msg { same := true switch msg[e].(type) { case Tag: same = msg[e].(Tag).name == want[e].(Tag).name for k := range msg[e].(Tag).attributes { if msg[e].(Tag).attributes[k] != want[e].(Tag).attributes[k] { same = false break } } case string: same = msg[e] == want[e] } if !same { t.Errorf(`Parse(strings.NewReader(elementString)) = %q, %v, want "", error`, msg[e], err) } } }