lang: Add mode to overwrite tests

This is useful if we need to reformat a bunch of previously passing
tests.
This commit is contained in:
James Shubin
2024-12-08 15:34:28 -05:00
parent 82c614f2d9
commit 5ff4f0456a

View File

@@ -73,6 +73,8 @@ import (
const ( const (
runGraphviz = false // run graphviz in tests? runGraphviz = false // run graphviz in tests?
doOverwriteTest = false // overwrite tests (hacker mode)
) )
var ( var (
@@ -549,6 +551,10 @@ func TestAstFunc1(t *testing.T) {
str = sortHack(str) str = sortHack(str)
expstr = sortHack(expstr) expstr = sortHack(expstr)
if expstr != str { if expstr != str {
if overwriteTest(t, index, txtarFile, archive, str) {
return
}
t.Errorf("test #%d: FAIL\n\n", index) t.Errorf("test #%d: FAIL\n\n", index)
t.Logf("test #%d: actual (g1):\n%s\n\n", index, str) t.Logf("test #%d: actual (g1):\n%s\n\n", index, str)
t.Logf("test #%d: expected (g2):\n%s\n\n", index, expstr) t.Logf("test #%d: expected (g2):\n%s\n\n", index, expstr)
@@ -1361,6 +1367,10 @@ func TestAstFunc2(t *testing.T) {
str = sortHack(str) str = sortHack(str)
expstr = sortHack(expstr) expstr = sortHack(expstr)
if expstr != str { if expstr != str {
if overwriteTest(t, index, txtarFile, archive, str) {
return
}
t.Errorf("test #%d: FAIL\n\n", index) t.Errorf("test #%d: FAIL\n\n", index)
t.Logf("test #%d: actual (g1):\n%s\n\n", index, str) t.Logf("test #%d: actual (g1):\n%s\n\n", index, str)
t.Logf("test #%d: expected (g2):\n%s\n\n", index, expstr) t.Logf("test #%d: expected (g2):\n%s\n\n", index, expstr)
@@ -2302,6 +2312,10 @@ func TestAstFunc3(t *testing.T) {
str = sortHack(str) str = sortHack(str)
expstr = sortHack(expstr) expstr = sortHack(expstr)
if expstr != str { if expstr != str {
if overwriteTest(t, index, txtarFile, archive, str) {
return
}
t.Errorf("test #%d: FAIL\n\n", index) t.Errorf("test #%d: FAIL\n\n", index)
t.Logf("test #%d: actual (g1):\n%s\n\n", index, str) t.Logf("test #%d: actual (g1):\n%s\n\n", index, str)
t.Logf("test #%d: expected (g2):\n%s\n\n", index, expstr) t.Logf("test #%d: expected (g2):\n%s\n\n", index, expstr)
@@ -2331,6 +2345,29 @@ func TestAstFunc3(t *testing.T) {
} }
} }
// overwriteTest is a hack to update existing tests if their expected output
// changes. This should only be used when all tests pass and we edit the format
// of the expected output in some way.
func overwriteTest(t *testing.T, index int, txtarFile string, archive *txtar.Archive, str string) bool {
if !doOverwriteTest {
return false // skip!
}
for i, x := range archive.Files {
if x.Name == "OUTPUT" {
// Set directly, no ptr!
archive.Files[i].Data = []byte(str)
}
}
data := txtar.Format(archive)
if err := os.WriteFile(txtarFile, data, 0644); err != nil {
t.Errorf("test #%d: FAIL", index)
t.Errorf("test #%d: error: %+v", index, err)
return false
}
t.Logf("test #%d: wrote new test to: %s", index, txtarFile)
return true
}
// stringResFields is a helper function to store a resource graph as a text // stringResFields is a helper function to store a resource graph as a text
// format for test comparisons. This also adds a line for each vertex as well! // format for test comparisons. This also adds a line for each vertex as well!
func stringResFields(res engine.Res) (string, error) { func stringResFields(res engine.Res) (string, error) {