blob: 19cffe49591a9d2c98eb566eedc1cc6e2a0734cb [file] [log] [blame] [edit]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package junit
import (
"bytes"
"fmt"
"os"
"testing"
)
func Test_TestJUnitXMLFile_save(t *testing.T) {
cases := map[string]struct {
filename string
expectError bool
}{
"can save output to the specified filename": {
filename: func() string {
td := t.TempDir()
return fmt.Sprintf("%s/output.xml", td)
}(),
},
"returns an error when given a filename that isn't absolute or relative": {
filename: "~/output.xml",
expectError: true,
},
}
for tn, tc := range cases {
t.Run(tn, func(t *testing.T) {
j := TestJUnitXMLFile{
filename: tc.filename,
}
xml := []byte(`<?xml version="1.0" encoding="UTF-8"?><testsuites>
<testsuite name="example_1.tftest.hcl" tests="1" skipped="0" failures="0" errors="0">
<testcase name="true_is_true" classname="example_1.tftest.hcl" time="0.005381209"></testcase>
</testsuite>
</testsuites>`)
diags := j.save(xml)
if diags.HasErrors() {
if !tc.expectError {
t.Fatalf("got unexpected error: %s", diags.Err())
}
// return early if testing error case
return
}
if !diags.HasErrors() && tc.expectError {
t.Fatalf("expected an error but got none")
}
fileContent, err := os.ReadFile(tc.filename)
if err != nil {
t.Fatalf("unexpected error opening file")
}
if !bytes.Equal(fileContent, xml) {
t.Fatalf("wanted XML:\n%s\n got XML:\n%s\n", string(xml), string(fileContent))
}
})
}
}