(t *testing.T)
| 176 | } |
| 177 | |
| 178 | func TestXMLNodeDecoder_Value(t *testing.T) { |
| 179 | cases := map[string]struct { |
| 180 | responseBody io.Reader |
| 181 | expectedValue []byte |
| 182 | expectedDone bool |
| 183 | expectedError string |
| 184 | }{ |
| 185 | "simple success case": { |
| 186 | responseBody: bytes.NewReader([]byte(`<Response>abc</Response>`)), |
| 187 | expectedValue: []byte(`abc`), |
| 188 | }, |
| 189 | "no value": { |
| 190 | responseBody: bytes.NewReader([]byte(`<Response></Response>`)), |
| 191 | expectedValue: []byte{}, |
| 192 | }, |
| 193 | "self-closing": { |
| 194 | responseBody: bytes.NewReader([]byte(`<Response />`)), |
| 195 | expectedValue: []byte{}, |
| 196 | }, |
| 197 | "empty body": { |
| 198 | responseBody: bytes.NewReader([]byte(``)), |
| 199 | expectedError: "EOF", |
| 200 | }, |
| 201 | "start element retrieved": { |
| 202 | responseBody: bytes.NewReader([]byte(`<Response><Struct>abc</Struct></Response>`)), |
| 203 | expectedError: "expected value for Response element, got xml.StartElement type", |
| 204 | }, |
| 205 | } |
| 206 | |
| 207 | for name, c := range cases { |
| 208 | t.Run(name, func(t *testing.T) { |
| 209 | xmlDecoder := xml.NewDecoder(c.responseBody) |
| 210 | st, err := FetchRootElement(xmlDecoder) |
| 211 | if err != nil { |
| 212 | if len(c.expectedError) == 0 { |
| 213 | t.Fatalf("Expected no error, got %v", err) |
| 214 | } |
| 215 | |
| 216 | if e, a := c.expectedError, err; !strings.Contains(err.Error(), c.expectedError) { |
| 217 | t.Fatalf("expected error to contain %v, found %v", e, a.Error()) |
| 218 | } |
| 219 | } |
| 220 | nodeDecoder := WrapNodeDecoder(xmlDecoder, st) |
| 221 | token, err := nodeDecoder.Value() |
| 222 | if err != nil { |
| 223 | if len(c.expectedError) == 0 { |
| 224 | t.Fatalf("Expected no error, got %v", err) |
| 225 | } |
| 226 | |
| 227 | if e, a := c.expectedError, err; !strings.Contains(err.Error(), c.expectedError) { |
| 228 | t.Fatalf("expected error to contain %v, found %v", e, a.Error()) |
| 229 | } |
| 230 | } |
| 231 | |
| 232 | if !reflect.DeepEqual(c.expectedValue, token) { |
| 233 | t.Fatalf("%v != %v", c.expectedValue, token) |
| 234 | } |
| 235 | }) |
nothing calls this directly
no test coverage detected