Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

assert.Equal: "No newline at end of file" can be misleading #7

Open
marco-m opened this issue Jun 17, 2022 · 0 comments
Open

assert.Equal: "No newline at end of file" can be misleading #7

marco-m opened this issue Jun 17, 2022 · 0 comments

Comments

@marco-m
Copy link

marco-m commented Jun 17, 2022

hello,
consider a test comparing two strings that _do not end with a newline:

func TestNoNewline(t *testing.T) {
	want := "banana"
	have := "mango"
	assert.Equal(t, want, have)
}

the output will be:

    foo_test.go:156: Expected values to be equal:
        -banana
        \ No newline at end of file
        +mango
        \ No newline at end of file

which is quite confusing: sure, there is no newline at the end of the "file", but it is on purpose :-)

I would expect simply:

    foo_test.go:156: Expected values to be equal:
        -banana
        +mango

If I change diff() as follows:

diff --git a/assert.go b/assert.go
index d2df971a5f..1692e38afd 100644
--- a/assert.go
+++ b/assert.go
@@ -194,8 +194,8 @@ func diff[T any](lhs, rhs T) string {
    var lhss, rhss string
    // Special case strings so we get nice diffs.
    if l, ok := any(lhs).(string); ok {
-       lhss = l
-       rhss = any(rhs).(string)
+       lhss = l + "\n"
+       rhss = any(rhs).(string) + "\n"
    } else {
        lhss = repr.String(lhs, repr.Indent("  ")) + "\n"
        rhss = repr.String(rhs, repr.Indent("  ")) + "\n"

I get the following 4 cases, which seem reasonable to me:

Case 1

func TestNoNewline(t *testing.T) {
	want := "banana"
	have := "mango"
	assert.Equal(t, want, have)
}

gives:

    marco_test.go:12: Expected values to be equal:
        -banana
        +mango
--- FAIL: TestNoNewline (0.00s)

Case 2

func TestWithNewline1(t *testing.T) {
	want := "banana\n"
	have := "mango"
	assert.Equal(t, want, have)
}

gives:

    marco_test.go:18: Expected values to be equal:
        -banana
        -
        +mango
--- FAIL: TestWithNewline1 (0.00s)

Case 3

func TestWithNewline2(t *testing.T) {
	want := "banana"
	have := "mango\n"
	assert.Equal(t, want, have)
}

gives

    marco_test.go:24: Expected values to be equal:
        -banana
        +mango
        +
--- FAIL: TestWithNewline2 (0.00s)

Case 4

func TestWithNewline(t *testing.T) {
	want := "banana\n"
	have := "mango\n"
	assert.Equal(t, want, have)
}

gives:

    marco_test.go:18: Expected values to be equal:
        -banana
        +mango
                                        <-- blank like, but doesn't seem to be a problem
--- FAIL: TestWithNewline (0.00s)

If you see value, I will be happy to provide a PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant