fix: time.Time rendering in the diff returned by error message#1829
fix: time.Time rendering in the diff returned by error message#1829ccoVeille wants to merge 1 commit intostretchr:masterfrom
Conversation
3f71fbe to
7b28236
Compare
|
@brackendawson please review, it's ready. I'm facing this issue with testify for ages, I cannot wait to see it fixed 😬 |
This is inspired by stretchr#1829, but we proceed differently, not checking for a string type but for type convertibility to a time instead. Added more tests to check how embedded types, pointers etc actually render and don't cause panic. From the original issues: * fixes stretchr#1078 * fixes stretchr#1079 Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
|
@ccoVeille I found your PR definitely interesting but perhaps lacking a few things.
Could be interesting to exchange our views |
|
Thanks @fredbi. I will take a look. I saw the PRs you made in the last days. I agree with you about the string sort that can lead to problem when comparing for example 999-12-31 and 1000-01-01 I'll review the PR in your fork also |
* fix: rendering time values * added sortability for time.Time This is inspired by stretchr#1829, but we proceed differently, not checking for a string type but for type convertibility to a time instead. Added more tests to check how embedded types, pointers etc actually render and don't cause panic. From the original issues: * fixes stretchr#1078 * fixes stretchr#1079 * doc: fixed a few hiccups in README Signed-off-by: Frederic BIDON <fredbi@yahoo.com> --------- Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
7b28236 to
59a70c3
Compare
There was a problem hiding this comment.
Pull request overview
This PR improves time.Time formatting in assertion diffs by leveraging the newly vendored internal spew package, removing the prior special-casing in assert.diff and enabling readable time.Time output while keeping method calls disabled for other types.
Changes:
- Added
EnableTimeStringertointernal/spew.ConfigStateand used it to selectively callString()fortime.Time. - Updated
assertdiffing to rely on the newspewbehavior instead of a dedicatedtime.Timebranch/config. - Added/expanded tests covering
time.Timediff output at top-level and within structs.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
internal/spew/config.go |
Adds EnableTimeStringer config knob to selectively allow time.Time.String() even when methods are otherwise disabled. |
internal/spew/format.go |
Uses EnableTimeStringer to allow method handling for time.Time during formatting. |
internal/spew/dump.go |
Uses EnableTimeStringer to allow method handling for time.Time during dumping. |
internal/spew/common.go |
Attempts to adjust sorting behavior (currently incorrectly) for time.Time. |
internal/spew/spew_test.go |
Adds test cases validating time.Time formatting with/without the new config flag. |
assert/assertions.go |
Removes the old time.Time-specific diff special-case and enables EnableTimeStringer on the shared spew config. |
assert/assertions_test.go |
Adds a regression test for diffing structs containing time.Time. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Copilot provided the same feedback as you @fredbi This time I got it, haha |
Should I feel flattered? Mmh not so sure :) |
Haha. It's simply that:
I'm already looking at it. |
59a70c3 to
d071955
Compare
Now we vendored go-spew we can modify how time.Time values are handled. We can remove the imperfect fix we had in place before.
d071955 to
1485969
Compare
Summary
Improve formatting when dealing with time.Time now we vendored gospew
Changes
Now, go-spew is vendored, we can fix old issues we had.
We can fix the representation of time.Time in gospew
And remove the imperfect fix we had in place.
Motivation
#895 was created by @luan to solve some legitimate issues. It was released with v1.6.0 on May 29, 2020
But unfortunately, the changes lead to an issue with the way time.Time are rendered. So #989 was opened on Aug 1, 2020 by @AlekSi
The issue was somehow fixed with #1072 by @HaraldNordgren
#1072 was merged in Apr 27, 2021 (but only released in Mar 1, 2024 with v1.7.1 )
Unfortunately, the fix was incomplete, as it was working only for first level, so #1078 was opened on May 22, 2021 by @shawc71
#1079 was opened by @shawc71 on May 22, 2021 to try to fix the issue
But it was never merged, as the solution was also imperfect, and because they were no solution inside testify to fix this
So #1078 was left open until now.
Related issues