// Copyright 2024 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package junitxml import ( "bytes" "encoding/xml" "errors" "testing" ) func TestJunitOutput(t *testing.T) { var buf bytes.Buffer var test JUnitXML x := FakeTestSuites() if err := x.WriteXML(&buf); err != nil { t.Fatalf("Failed to encode XML: %v", err) } output := buf.Bytes() err := xml.Unmarshal(output, &test) if err != nil { t.Errorf("Unmarshal failed with error: %v", err) } var total int var cases int total = len(test.Suites) if total != 3 { t.Errorf("JUnit output had %d testsuite elements; expected 3\n", total) } for _, i := range test.Suites { cases += len(i.Cases) } if cases != 7 { t.Errorf("JUnit output had %d testcase; expected 7\n", cases) } } func FakeTestSuites() *JUnitXML { ju := &JUnitXML{} good := ju.Suite("all good") good.Case("alpha") good.Case("beta") good.Case("gamma") mixed := ju.Suite("mixed") mixed.Case("good") bad := mixed.Case("bad") bad.Fail("once") bad.Fail("twice") mixed.Case("ugly").Abort(errors.New("buggy")) ju.Suite("fast").Fail("fail early") return ju }