package internal import ( "bytes" "encoding/xml" "strings" "testing" "time" ) // https://tools.ietf.org/html/rfc4918#section-9.6.2 const exampleDeleteMultistatusStr = ` http://www.example.com/container/resource3 HTTP/1.1 423 Locked ` func TestResponse_Err_error(t *testing.T) { r := strings.NewReader(exampleDeleteMultistatusStr) var ms Multistatus if err := xml.NewDecoder(r).Decode(&ms); err != nil { t.Fatalf("Decode() = %v", err) } if len(ms.Responses) != 1 { t.Fatalf("expected 1 , got %v", len(ms.Responses)) } resp := ms.Responses[0] err := resp.Err() if err == nil { t.Errorf("Multistatus.Get() returned a nil error, expected non-nil") } else if httpErr, ok := err.(*HTTPError); !ok { t.Errorf("Multistatus.Get() = %T, expected an *HTTPError", err) } else if httpErr.Code != 423 { t.Errorf("HTTPError.Code = %v, expected 423", httpErr.Code) } } func TestTimeRoundTrip(t *testing.T) { now := Time(time.Now().UTC()) want, err := now.MarshalText() if err != nil { t.Fatalf("could not marshal time: %+v", err) } var got Time err = got.UnmarshalText(want) if err != nil { t.Fatalf("could not unmarshal time: %+v", err) } raw, err := got.MarshalText() if err != nil { t.Fatalf("could not marshal back: %+v", err) } if got, want := raw, want; !bytes.Equal(got, want) { t.Fatalf("invalid round-trip:\ngot= %s\nwant=%s", got, want) } }