Add line number next to test file in pretty format

Signed-off-by: Sebastian Spaink <sebastianspaink@gmail.com>
This commit is contained in:
Sebastian Spaink
2026-02-17 15:18:43 -06:00
committed by Stephan Renatus
parent fd9c46c47a
commit f71e693a9c
3 changed files with 90 additions and 57 deletions
+41 -41
View File
@@ -268,7 +268,7 @@ data.test.test_p: FAIL (%.*%)
SUMMARY
--------------------------------------------------------------------------------
%.*%/test.rego:
%.*%/test.rego:3:
data.test.test_p: FAIL (%.*%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -318,7 +318,7 @@ data.test.test_p: FAIL (%.*%)
SUMMARY
--------------------------------------------------------------------------------
%.*%/test.rego:
%.*%/test.rego:3:
data.test.test_p: FAIL (%.*%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -386,7 +386,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -419,7 +419,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -453,7 +453,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -489,7 +489,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -521,7 +521,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -555,7 +555,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -590,7 +590,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -622,7 +622,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -655,7 +655,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -688,7 +688,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -737,7 +737,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -767,7 +767,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -797,7 +797,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -831,7 +831,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -869,7 +869,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:9:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -904,7 +904,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -934,7 +934,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -964,7 +964,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -994,7 +994,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1026,7 +1026,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:5:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1056,7 +1056,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1086,7 +1086,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1114,7 +1114,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1142,7 +1142,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1170,7 +1170,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1199,7 +1199,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1228,7 +1228,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1259,7 +1259,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1290,7 +1290,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1320,7 +1320,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:6:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1348,7 +1348,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1378,7 +1378,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:5:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1409,7 +1409,7 @@ data.test.test_p: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:7:
data.test.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1438,7 +1438,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:5:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1467,7 +1467,7 @@ data.test.test_foo: FAIL (%TIME%)
SUMMARY
--------------------------------------------------------------------------------
%ROOT%/test.rego:
%ROOT%/test.rego:3:
data.test.test_foo: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1778,7 +1778,7 @@ test_p if {
}
r := regexp.MustCompile(`FAIL \(.*s\)`)
expected = `%ROOT%/policy_test.rego:
expected = `%ROOT%/policy_test.rego:2:
data.foo.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -1891,7 +1891,7 @@ test_p {
}
r := regexp.MustCompile(`FAIL \(.*s\)`)
expected = `%ROOT%/policy_test.rego:
expected = `%ROOT%/policy_test.rego:2:
data.foo.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -2002,7 +2002,7 @@ test_p if {
}
r := regexp.MustCompile(`FAIL \(.*s\)`)
expected = `%ROOT%/policy.rego:
expected = `%ROOT%/policy.rego:3:
data.foo.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
@@ -2092,7 +2092,7 @@ test_p if {
}
r := regexp.MustCompile(`FAIL \(.*s\)`)
expected = `%ROOT%/policy.rego:
expected = `%ROOT%/policy.rego:3:
data.foo.test_p: FAIL (%TIME%)
--------------------------------------------------------------------------------
FAIL: 1/1
+3 -3
View File
@@ -138,11 +138,11 @@ func (r PrettyReporter) Report(ch chan *Result) error {
dirty = true
r.println(r.fmtBenchmark(tr))
} else if r.Verbose || !tr.Pass() {
if tr.Location != nil && tr.Location.File != lastFile {
if lastFile != "" {
if tr.Location != nil {
if lastFile != "" && lastFile != tr.Location.File {
r.println("")
}
_, _ = fmt.Fprintf(r.Output, "%s:\n", tr.Location.File)
_, _ = fmt.Fprintf(r.Output, "%s:%d:\n", tr.Location.File, tr.Location.Row)
lastFile = tr.Location.File
}
+46 -13
View File
@@ -50,6 +50,7 @@ func TestPrettyReporterVerbose(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy1.rego",
Row: 1,
},
},
{
@@ -59,6 +60,7 @@ func TestPrettyReporterVerbose(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy1.rego",
Row: 2,
},
},
{
@@ -68,6 +70,7 @@ func TestPrettyReporterVerbose(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy2.rego",
Row: 1,
},
},
{
@@ -77,6 +80,7 @@ func TestPrettyReporterVerbose(t *testing.T) {
Trace: nil,
Location: &ast.Location{
File: "policy2.rego",
Row: 2,
},
},
{
@@ -85,6 +89,7 @@ func TestPrettyReporterVerbose(t *testing.T) {
Output: []byte("fake print output\n"),
Location: &ast.Location{
File: "policy3.rego",
Row: 1,
},
},
{
@@ -93,6 +98,7 @@ func TestPrettyReporterVerbose(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy4.rego",
Row: 1,
},
},
{
@@ -117,6 +123,7 @@ func TestPrettyReporterVerbose(t *testing.T) {
},
Location: &ast.Location{
File: "policy5.rego",
Row: 1,
},
},
{
@@ -156,6 +163,7 @@ func TestPrettyReporterVerbose(t *testing.T) {
},
Location: &ast.Location{
File: "policy5.rego",
Row: 2,
},
},
}
@@ -191,29 +199,32 @@ data.foo.qux.test_cases_nested: FAIL (0s)
SUMMARY
--------------------------------------------------------------------------------
policy1.rego:
policy1.rego:1:
data.foo.bar.test_baz: PASS (0s)
policy1.rego:2:
data.foo.bar.test_qux: ERROR (0s)
some err
policy2.rego:
policy2.rego:1:
data.foo.bar.test_corge: FAIL (0s)
policy2.rego:2:
data.foo.bar.todo_test_qux: SKIPPED
policy3.rego:
policy3.rego:1:
data.foo.bar.test_contains_print: PASS (0s)
fake print output
policy4.rego:
policy4.rego:1:
data.foo.baz.p.q.r.test_quz: PASS (0s)
policy5.rego:
policy5.rego:1:
data.foo.qux.test_cases: FAIL (0s)
bar: FAIL
baz: PASS
foo: PASS
policy5.rego:2:
data.foo.qux.test_cases_nested: FAIL (0s)
one: PASS
bar: PASS
@@ -247,6 +258,7 @@ func TestPrettyReporterFailureLine(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy1.rego",
Row: 1,
},
},
{
@@ -256,6 +268,7 @@ func TestPrettyReporterFailureLine(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy1.rego",
Row: 2,
},
},
{
@@ -287,6 +300,7 @@ func TestPrettyReporterFailureLine(t *testing.T) {
}),
Location: &ast.Location{
File: "policy1.rego",
Row: 3,
},
},
{
@@ -296,6 +310,7 @@ func TestPrettyReporterFailureLine(t *testing.T) {
Trace: nil,
Location: &ast.Location{
File: "policy1.rego",
Row: 4,
},
},
{
@@ -304,6 +319,7 @@ func TestPrettyReporterFailureLine(t *testing.T) {
Output: []byte("fake print output\n"),
Location: &ast.Location{
File: "policy1.rego",
Row: 5,
},
},
{
@@ -313,6 +329,7 @@ func TestPrettyReporterFailureLine(t *testing.T) {
Output: []byte("fake print output2\n"),
Location: &ast.Location{
File: "policy2.rego",
Row: 1,
},
},
{
@@ -322,6 +339,7 @@ func TestPrettyReporterFailureLine(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy3.rego",
Row: 1,
},
},
{
@@ -384,6 +402,7 @@ func TestPrettyReporterFailureLine(t *testing.T) {
},
Location: &ast.Location{
File: "policy5.rego",
Row: 1,
},
},
}
@@ -430,22 +449,24 @@ data.foo.qux.test_cases_nested: FAIL (0s)
SUMMARY
--------------------------------------------------------------------------------
policy1.rego:
policy1.rego:2:
data.foo.bar.test_qux: ERROR (0s)
some err
policy1.rego:3:
data.foo.bar.test_corge: FAIL (0s)
policy1.rego:4:
data.foo.bar.todo_test_qux: SKIPPED
policy2.rego:
policy2.rego:1:
data.foo.bar.test_contains_print_fail: FAIL (0s)
fake print output2
policy3.rego:
policy3.rego:1:
data.foo.baz.p.q.r.test_quz: FAIL (0s)
policy5.rego:
policy5.rego:1:
data.foo.qux.test_cases_nested: FAIL (0s)
two: FAIL
foo: FAIL
@@ -473,6 +494,7 @@ func TestPrettyReporter(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy1.rego",
Row: 1,
},
},
{
@@ -482,6 +504,7 @@ func TestPrettyReporter(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy1.rego",
Row: 2,
},
},
{
@@ -491,6 +514,7 @@ func TestPrettyReporter(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy1.rego",
Row: 3,
},
},
{
@@ -500,6 +524,7 @@ func TestPrettyReporter(t *testing.T) {
Trace: nil,
Location: &ast.Location{
File: "policy1.rego",
Row: 4,
},
},
{
@@ -508,6 +533,7 @@ func TestPrettyReporter(t *testing.T) {
Output: []byte("fake print output\n"),
Location: &ast.Location{
File: "policy1.rego",
Row: 5,
},
},
{
@@ -517,6 +543,7 @@ func TestPrettyReporter(t *testing.T) {
Output: []byte("fake print output2\n"),
Location: &ast.Location{
File: "policy2.rego",
Row: 1,
},
},
{
@@ -526,6 +553,7 @@ func TestPrettyReporter(t *testing.T) {
Trace: getFakeTraceEvents(),
Location: &ast.Location{
File: "policy3.rego",
Row: 1,
},
},
{
@@ -550,6 +578,7 @@ func TestPrettyReporter(t *testing.T) {
},
Location: &ast.Location{
File: "policy4.rego",
Row: 1,
},
},
{
@@ -589,6 +618,7 @@ func TestPrettyReporter(t *testing.T) {
},
Location: &ast.Location{
File: "policy4.rego",
Row: 2,
},
},
}
@@ -602,24 +632,27 @@ func TestPrettyReporter(t *testing.T) {
t.Fatal(err)
}
exp := `policy1.rego:
exp := `policy1.rego:2:
data.foo.bar.test_qux: ERROR (0s)
some err
policy1.rego:3:
data.foo.bar.test_corge: FAIL (0s)
policy1.rego:4:
data.foo.bar.todo_test_qux: SKIPPED
policy2.rego:
policy2.rego:1:
data.foo.bar.test_contains_print_fail: FAIL (0s)
fake print output2
policy3.rego:
policy3.rego:1:
data.foo.baz.p.q.r.test_quz: FAIL (0s)
policy4.rego:
policy4.rego:1:
data.foo.qux.test_cases: FAIL (0s)
bar: FAIL
policy4.rego:2:
data.foo.qux.test_cases_nested: FAIL (0s)
two: FAIL
foo: FAIL