package diff_test import ( "os" "path/filepath" "testing" "oss.terrastruct.com/util-go/assert" "oss.terrastruct.com/util-go/diff" ) func TestTestData(t *testing.T) { t.Run("TESTDATA_ACCEPT", testTestDataAccept) os.Unsetenv("TESTDATA_ACCEPT") os.Unsetenv("TA") m1 := map[string]interface{}{ "one": 1, "two": 2, "three": 3, "four": 4, "five": map[string]interface{}{ "yes": "yes", "no": "yes", "five": map[string]interface{}{ "yes": "no", "no": "yes", }, }, } err := os.Remove("testdata/TestTestData.exp.json") if err != nil && !os.IsNotExist(err) { t.Fatalf("unexpected error: %v", err) } err = diff.TestdataJSON(filepath.Join("testdata", t.Name()), m1) assert.Error(t, err) exp := `diff (rerun with $TESTDATA_ACCEPT=1 or $TA=1 to accept): --- /dev/null +++ b/testdata/TestTestData.got.json @@ -0,0 +1,14 @@ +{ + "five": { + "five": { + "no": "yes", + "yes": "no" + }, + "no": "yes", + "yes": "yes" + }, + "four": 4, + "one": 1, + "three": 3, + "two": 2 +}` got := err.Error() ds, err := diff.Strings(exp, got) if err != nil { t.Fatalf("unable to generate exp diff: %v", err) } if ds != "" { t.Fatalf("expected no diff:\n%s", ds) } err = diff.Runes(exp, got) if err != nil { t.Fatalf("expected no rune diff: %v", err) } err = os.Rename("testdata/TestTestData.got.json", "testdata/TestTestData.exp.json") assert.Success(t, err) m1["five"].(map[string]interface{})["five"].(map[string]interface{})["no"] = "ys" err = diff.TestdataJSON(filepath.Join("testdata", t.Name()), m1) if err == nil { t.Fatalf("expected err: %#v", err) } exp = `diff (rerun with $TESTDATA_ACCEPT=1 or $TA=1 to accept): --- a/testdata/TestTestData.exp.json +++ b/testdata/TestTestData.got.json @@ -1,7 +1,7 @@ {  "five": {  "five": { - "no": "yes", + "no": "ys",  "yes": "no"  },  "no": "yes",` got = err.Error() ds, err = diff.Strings(exp, got) assert.Success(t, err) if ds != "" { t.Fatalf("expected no diff:\n%s", ds) } exp += "a" ds, err = diff.Strings(exp, got) assert.Success(t, err) if ds == "" { t.Fatalf("expected incorrect diff:\n%s", ds) } err = diff.Runes(exp, got) assert.Error(t, err) } func testTestDataAccept(t *testing.T) { m1 := map[string]interface{}{ "one": 1, } os.Setenv("TESTDATA_ACCEPT", "1") os.Setenv("TA", "1") err := diff.TestdataJSON(filepath.Join("testdata", t.Name()), m1) assert.Success(t, err) m1["one"] = 2 os.Setenv("TESTDATA_ACCEPT", "") os.Setenv("TA", "") err = diff.TestdataJSON(filepath.Join("testdata", t.Name()), m1) assert.Error(t, err) exp := `diff (rerun with $TESTDATA_ACCEPT=1 or $TA=1 to accept): --- a/testdata/TestTestData/TESTDATA_ACCEPT.exp.json +++ b/testdata/TestTestData/TESTDATA_ACCEPT.got.json @@ -1,3 +1,3 @@ { - "one": 1 + "one": 2 }` ds, err := diff.Strings(exp, err.Error()) assert.Success(t, err) if ds != "" { t.Fatalf("expected no diff:\n%s", ds) } err = os.Remove(filepath.Join("testdata", t.Name()) + ".got.json") assert.Success(t, err) }