izapple2/screen/screen_test.go

66 lines
1.4 KiB
Go

package screen
import (
"bytes"
"io/ioutil"
"os"
"strings"
"testing"
)
func TestSnapshots(t *testing.T) {
// Verifies all the scenarios on the ./test_resources folder
files, err := ioutil.ReadDir("./test_resources/")
if err != nil {
t.Fatal(err)
}
for _, fileInfo := range files {
if !fileInfo.IsDir() &&
strings.HasSuffix(fileInfo.Name(), ".json") {
testScenario(t, "./test_resources/"+fileInfo.Name())
}
}
}
func testScenario(t *testing.T, fileName string) {
ts, err := loadTestScenario(fileName)
if err != nil {
t.Fatal(err)
}
ts.generateSnapshots(fileName, true)
for _, screenMode := range ts.ScreenModes {
referenceName := buildImageName(fileName, screenMode, false)
actualName := buildImageName(fileName, screenMode, true)
reference, err := ioutil.ReadFile(referenceName)
if err != nil {
t.Fatal(err)
}
actual, err := ioutil.ReadFile(actualName)
if err != nil {
t.Fatal(err)
}
if bytes.Compare(reference, actual) != 0 {
t.Errorf("Files %s and %s should be equal", referenceName, actualName)
replaceIfNeeded(referenceName, actualName)
} else {
os.Remove(actualName)
}
}
}
func replaceIfNeeded(referenceName string, actualName string) {
// If the "update" argument is passed to test. The new images replace the old.
// Run the tests with: "go test . -args update"
for _, arg := range os.Args {
if arg == "update" {
os.Remove(referenceName)
os.Rename(actualName, referenceName)
}
}
}