/*
Copyright 2019 The Knative 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.
*/
// junit_test.go contains unit tests for junit package
package junit
import (
"io/ioutil"
"os"
"path"
"testing"
)
var emptySuites = `
`
var malSuitesString = `
`
var validSuiteString = `
something bad
out: first line
err: first line
out: second line
do not test
`
var validSuitesString = `
something bad
out: first line
err: first line
out: second line
do not test
`
func newTestCase(name string, status TestStatusEnum) *TestCase {
testCase := TestCase{
Name: name,
}
var tmp string // cast const to string
switch {
case status == Failed:
tmp = string(Failed)
testCase.Failure = &tmp
case status == Skipped:
tmp = string(Skipped)
testCase.Skipped = &tmp
}
return &testCase
}
func TestUnmarshalEmptySuites(t *testing.T) {
if _, err := UnMarshal([]byte(emptySuites)); err != nil {
t.Errorf("Expected 'succeed', actual: 'failed parsing empty suites, '%s'", err)
}
}
func TestUnmarshalMalFormed(t *testing.T) {
if _, err := UnMarshal([]byte(malSuitesString)); err == nil {
t.Errorf("Expected: failed, actual: succeeded parsing malformed xml, '%s'", err)
}
}
func TestUnmarshalSuites(t *testing.T) {
if _, err := UnMarshal([]byte(validSuitesString)); err != nil {
t.Errorf("Expected: succeed, actual: failed parsing suites result, '%s'", err)
}
}
func TestUnmarshalSuite(t *testing.T) {
if _, err := UnMarshal([]byte(validSuiteString)); err != nil {
t.Errorf("Expected: succeed, actual: failed parsing suite result, '%s'", err)
}
}
func TestGetTestStatus(t *testing.T) {
if status := newTestCase("TestGood", Passed).GetTestStatus(); Passed != status {
t.Errorf("Expected '%s', actual '%s'", Passed, status)
}
if status := newTestCase("TestSkip", Skipped).GetTestStatus(); Skipped != status {
t.Errorf("Expected '%s', actual '%s'", Skipped, status)
}
if status := newTestCase("TestBad", Failed).GetTestStatus(); Failed != status {
t.Errorf("Expected '%s', actual '%s'", Failed, status)
}
}
func TestAddTestSuite(t *testing.T) {
testSuites := TestSuites{}
testSuite0 := TestSuite{Name: "suite_0"}
testSuite1 := TestSuite{Name: "suite_1"}
if err := testSuites.AddTestSuite(&testSuite0); err != nil {
t.Fatalf("Expected '', actual '%v'", err)
}
expectedErrString := "Test suite 'suite_0' already exists"
if err := testSuites.AddTestSuite(&testSuite0); err == nil || err.Error() != expectedErrString {
t.Fatalf("Expected: '%s', actual: '%v'", expectedErrString, err)
}
if err := testSuites.AddTestSuite(&testSuite1); err != nil {
t.Fatalf("Expected '', actual '%v'", err)
}
if len(testSuites.Suites) != 2 {
t.Fatalf("Expected 2, actual %d", len(testSuites.Suites))
}
}
func TestCreateXMLErrorMsg(t *testing.T) {
testDir := "test_output"
os.RemoveAll(testDir) // clean up in case there were stale side-effects from previous runs
if err := os.Mkdir(testDir, 0777); err != nil {
t.Fatalf("cannot create directory %q", testDir)
}
defer os.RemoveAll(testDir) // clean up
dest := path.Join(testDir, "TestCreateXMLErrorTestFile")
CreateXMLErrorMsg("dummySuite", "dummyTest", "dummyError has occurred", dest)
expected := `dummyError has occurred`
got, err := ioutil.ReadFile(dest)
if err != nil {
t.Fatalf("cannot read %q, error %v", dest, err)
}
if string(got) != expected {
t.Fatalf("expected:\n%q\n, got:\n%q", expected, got)
}
}