Upstream Tracking
Upstream Tracking
We continue to monitor and selectively adopt changes from the upstream repository.
Implemented from Upstream
- â #1513 - JSONEqBytes
- â #1803 - Kind/NotKind assertions
- â #1805 - IsOfTypeT[T] generic assertions
- â #1685 - Partial iterator support (SeqContainsT variants)
- â #1828 - Spew panic fixes
- â #1825, #1818, #1223, #1813, #1611, #1822, #1829 - Various bug fixes
- â #1606, #1087 - Consistently assertion
- â #1848 - Subset error message
Monitoring
Superseded by Our Implementation
- â #1845 - Fix Eventually/Never regression (superseded by context-based pollCondition)
- â
#1830 - CollectT.Halt() (implemented as
CollectT.Cancel()in v2.4 â see CHANGES) - â #1819 - Handle unexpected exits (handled by per-tick goroutine wrap in v2.4)
- â #1824 - Spew testing (superseded by property-based fuzzing)
Review frequency: Quarterly (next review: May 2026)
Appendix: Upstream References
This table catalogs all upstream PRs and issues from github.com/stretchr/testify that we have processed.
Implemented (Adapted or Merged)
| Reference | Type | Summary | Outcome in Fork |
|---|---|---|---|
| #994 | PR | Colorize expected vs actual values | â
Adapted into enable/color module with themes and configuration |
| #1223 | PR | Display uint values in decimal instead of hex | â Merged - Applied to diff output |
| #1232 | PR | Colorized output for expected/actual/errors | â
Adapted into enable/color module |
| #1356 | PR | panic(nil) handling for Go 1.21+ | â Merged - Updated panic assertions |
| #1467 | PR | Colorized output with terminal detection | â
Adapted into enable/color module (most mature implementation) |
| #1480 | PR | Colorized diffs via TESTIFY_COLORED_DIFF env var | â
Adapted with env var support in enable/color |
| #1513 | PR | JSONEqBytes for byte slice JSON comparison | â Merged - Added to JSON domain |
| #1685 | PR | Iterator support (iter.Seq) for Contains/ElementsMatch | â Partial - Implemented SeqContainsT and SeqNotContainsT only |
| #1772 | PR | YAML library migration to maintained fork | â
Adapted - Used gopkg.in/yaml.v3 in optional enable/yaml module |
| #1797 | PR | Codegen package consolidation and licensing | â Adapted - Complete rewrite of code generation system |
| #1803 | PR | Kind/NotKind assertions | â Merged - Added to Type domain |
| #1805 | Issue | Generic IsOfType[T]() without dummy value | â Implemented - IsOfTypeT and IsNotOfTypeT in Type domain |
| #1816 | Issue | Fix panic on unexported struct key in map | â Fixed in internalized go-spew |
| #1818 | PR | Fix panic on invalid regex in Regexp/NotRegexp | â Merged - Added graceful error handling |
| #1822 | Issue | Deterministic map ordering in diffs | â Fixed in internalized go-spew |
| #1825 | PR | Fix panic using EqualValues with incomparable types | â Merged - Enhanced type safety in EqualValues |
| #1826 | Issue | Type safety with spew (meta-issue) | â Addressed through comprehensive fuzzing and fixes |
| #1828 | PR | Fixed panic with unexported fields in maps | â Merged into internalized go-spew |
| #1829 | Issue | Fix time.Time rendering in diffs | â Fixed in internalized go-spew |
| #1611 | Issue | Goroutine leak in Eventually/Never | â Fixed by using context.Context (consolidation into single pollCondition function) |
| #1813 | Issue | Panic with unexported fields | â Fixed via #1828 in internalized spew |
| #1087 | Issue | Consistently assertion | â Adapted |
| #1606 | PR | Consistently assertion | â Adapted |
| #1848 | PR | Subset (garbled error message) | â Adapted |
Superseded by Our Implementation
| Reference | Type | Summary | Why Superseded |
|---|---|---|---|
| #1845 | PR | Fix Eventually/Never regression | Superseded by context-based pollCondition implementation (we don’t have this bug) |
| #1819 | PR | Handle unexpected exits in Eventually | Implemented in v2.4 via per-tick goroutine wrap â a runtime.Goexit in the condition only aborts the current tick |
| #1824 | PR | Spew testing improvements | Superseded by property-based fuzzing with random type generator |
| #1830 | PR | CollectT.Halt() for stopping tests | Implemented in v2.4 as CollectT.Cancel() â see CHANGES |
Under Consideration (Monitoring)
| Reference | Type | Summary | Status |
|---|---|---|---|
| #1601 | Issue | NoFieldIsZero assertion | đ Monitoring - Considering implementation |
| #1840 | Issue | JSON presence check without exact values | đ Monitoring - Interesting for testing APIs with generated IDs |
| #1859 | Issue | Channel assertions | đ Monitoring - aligned with synctest support |
| #1860 | Issue+PR | ErrorAsType[E] for Go 1.26+ - PR: #1861 | đ Monitoring - Interesting UX syntax |
| #1863 | PR | Number equality with symmetric role | đ Monitoring |
Informational (Not Implemented)
| Reference | Type | Summary | Outcome |
|---|---|---|---|
| #1147 | Issue | General discussion about generics adoption | âšī¸ Marked “Not Planned” upstream - We implemented our own generics approach ( functions) |
| #1308 | PR | Comprehensive refactor with generic type parameters | âšī¸ Draft for v2.0.0 upstream - We took a different approach with the same objective |
| #1862 | Issue | CollectT extension/redesign | đ Monitoring - Breaking change |
Summary Statistics
| Category | Count |
|---|---|
| Implemented/Merged | 24 |
| Superseded | 4 |
| Monitoring | 5 |
| Informational | 3 |
| Total Processed | 36 |
Note: This fork maintains an active relationship with upstream, regularly reviewing new PRs and issues. The quarterly review process ensures we stay informed about upstream developments while maintaining our architectural independence.
See Also
- Changes from v1 - Complete list of all implemented changes and new features
- Roadmap - Future plans and development priorities
- Architecture - Technical architecture and design decisions
- Original Project - History and acknowledgments