Files
x/encoding/xml/xml_test.go
Colin Henry 54aae5f242
All checks were successful
Go / build (1.23) (push) Successful in 3m51s
big updates: tests, bug fixed, documentation. oh my
2026-01-03 15:53:50 -08:00

114 lines
2.6 KiB
Go

package xml
import (
"bytes"
"strings"
"testing"
)
type testStruct struct {
XMLName struct{} `xml:"root"`
Name string `xml:"name"`
Value int `xml:"value"`
}
func TestEncoder(t *testing.T) {
t.Run("successful encode", func(t *testing.T) {
var buf bytes.Buffer
data := testStruct{Name: "test", Value: 42}
err := Encoder(&buf, data)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
result := buf.String()
if !strings.Contains(result, "<name>test</name>") {
t.Errorf("expected result to contain '<name>test</name>', got %q", result)
}
if !strings.Contains(result, "<value>42</value>") {
t.Errorf("expected result to contain '<value>42</value>', got %q", result)
}
})
t.Run("encode slice", func(t *testing.T) {
type Item struct {
Value int `xml:"value"`
}
var buf bytes.Buffer
data := []Item{{Value: 1}, {Value: 2}}
err := Encoder(&buf, data)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
result := buf.String()
if !strings.Contains(result, "<value>1</value>") {
t.Error("expected result to contain first item")
}
if !strings.Contains(result, "<value>2</value>") {
t.Error("expected result to contain second item")
}
})
}
func TestDecoder(t *testing.T) {
t.Run("successful decode", func(t *testing.T) {
input := `<root><name>test</name><value>42</value></root>`
reader := strings.NewReader(input)
var result testStruct
err := Decoder(reader, &result)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
if result.Name != "test" {
t.Errorf("expected name 'test', got %q", result.Name)
}
if result.Value != 42 {
t.Errorf("expected value 42, got %d", result.Value)
}
})
t.Run("decode empty XML", func(t *testing.T) {
input := `<root></root>`
reader := strings.NewReader(input)
var result testStruct
err := Decoder(reader, &result)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
if result.Name != "" {
t.Errorf("expected empty name, got %q", result.Name)
}
if result.Value != 0 {
t.Errorf("expected zero value, got %d", result.Value)
}
})
t.Run("decode invalid XML", func(t *testing.T) {
input := `<invalid><unclosed>`
reader := strings.NewReader(input)
var result testStruct
err := Decoder(reader, &result)
if err == nil {
t.Fatal("expected error for invalid XML, got nil")
}
})
t.Run("decode empty input", func(t *testing.T) {
reader := strings.NewReader("")
var result testStruct
err := Decoder(reader, &result)
if err == nil {
t.Fatal("expected error for empty input, got nil")
}
})
}