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

Improved error message for one assert function #333

Merged
merged 1 commit into from
Oct 25, 2023

Conversation

ochaplashkin
Copy link

@ochaplashkin ochaplashkin commented Oct 24, 2023

What's the problem?

If the user makes a mistake in the assert_error_msg_content_equals:

t.assert_error_msg_content_equals("bad", error, "foo:1: bar")

where:

    "bad" - excepted error message
    error - built-in function (there may be another function here)
    "foo:1: bar" - argument for the function

then the following error will be returned:

Error message expected: "bad"
Error message received: "foo:1: bar"

The user thinks that a comparison is being made between foo:1: bar and bad. He notices this error and at the same time can write the following:

t.assert_error_msg_content_equals("foo:1: bar", error, "foo:1: bar")

Now he will get the following error:

Error message expected: "foo:1: bar"
Error message received: "foo:1: bar"

It seems that the function doesn't work cause these strings are equal. In fact, a comparison will be performed between foo:1: bar (excepted) and bar strings (because foo:1: will be dropped from the error message by regex).

The next use of the function will be correct:

t.assert_error_msg_content_equals("bar", error, "foo:1: bar")

What's the solution?

It is necessary to save the result of conversion after the gsub. So this way the user will see the actual strings that are being compared:

t.assert_error_msg_content_equals("bad", error, "foo:1: bar")
Error message expected: "bad"
Error message received: "bar"

Close #316

@ochaplashkin ochaplashkin force-pushed the fix-assert-err-msg branch 2 times, most recently from adc0f95 to f8e58e0 Compare October 24, 2023 11:38
@ochaplashkin ochaplashkin force-pushed the fix-assert-err-msg branch 4 times, most recently from 910646c to 76d7cbb Compare October 25, 2023 11:49
test/assertions_test.lua Outdated Show resolved Hide resolved
> What's the problem?

If the user makes a mistake in the `assert_error_msg_content_equals`:

    t.assert_error_msg_content_equals("bad", error, "foo:1: bar")

where:

    "bad" - expected error message
    error - built-in function (there may be another function here)
    "foo:1: bar" - argument for the function

then the following error will be returned:

    Error message expected: "bad"
    Error message received: "foo:1: bar"

The user thinks that a comparison is being made between `foo:1: bar` and
`bad` strings. He notices this error and at the same time can write the
following:

    t.assert_error_msg_content_equals("foo:1: bar", error, "foo:1: bar")

Now he will get the following error:

    Error message expected: "foo:1: bar"
    Error message received: "foo:1: bar"

It seems that the function doesn't work cause these strings are equal.
In fact, a comparison will be performed between `foo:1: bar` (expected)
and `bar` (actual, because `foo:1:` will be dropped from the error
message by regex).

The next use of the function will be correct:

    t.assert_error_msg_content_equals("bar", error, "foo:1: bar")

> What's the solution?

It is necessary to save the result of conversion after the `gsub`. So
this way the user will see the actual strings that are being compared:

    t.assert_error_msg_content_equals("bad", error, "foo:1: bar")
    Error message expected: "bad"
    Error message received: "bar"

Close tarantool#316
@ylobankov ylobankov merged commit 2a26c32 into tarantool:master Oct 25, 2023
6 checks passed
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

Successfully merging this pull request may close these issues.

assert_error_msg_content_equals() regexp is too greedy
2 participants