Improving Marshal specs
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 38/100
- Issue 类型
- 重构
- 描述清晰度
- 需要澄清
- 活跃度
- 冷清
- 技术栈
- ruby
- 领域
- testing-qa
调研方向
首先阅读 spec/ruby/core/marshal/dump_spec.rb 以及现有的 DATA 和 DATA_19 fixture 使用方式,然后复现报告的 Range dump 失败。比较当前 dump 和 load spec 的结构,并确定 fixture 应如何覆盖两个方向,包括 jruby/jruby#9405 中的递归 Set 情况。完成的标准是 Marshal spec 采用清晰且易于维护的方法,并包含所需的 Set 覆盖,同时不叠加自定义 block。
由索引模型根据 Issue 内容生成。
描述
We recently received a bug report about improper linking during recursive Set dumping and loading (jruby/jruby#9405). The fix is simple, but attempting to add a spec for it brought to my attention how messy the existing Marshal specs are.
Many classes have custom spec blocks when they could be using the DATA or DATA_19 fixtures. Those fixtures currently appear to only be used for verifying loads; when I tried to use them to also verify the output of dumps, several of them fail:
1)
Marshal.dump 1..2 returns the expected output FAILED
Expected
"\x04\bo:
Range\b:\texclF:
begini\x06:\bendi\a" ==
"\x04\bo:
Range\b:
begini\x06:\texclF:\bendi\a"
to be truthy but was false
/Users/headius/work/jruby/spec/ruby/core/marshal/dump_spec.rb:1011:in 'block (3 levels) in <top (required)>'
/Users/headius/work/jruby/spec/ruby/core/marshal/dump_spec.rb:6:in '<top (required)>'
2)
Marshal.dump 1...2 returns the expected output FAILED
Expected
"\x04\bo:
Range\b:\texclT:
begini\x06:\bendi\a" ==
"\x04\bo:
Range\b:
begini\x06:\texclT:\bendi\a"
to be truthy but was false
/Users/headius/work/jruby/spec/ruby/core/marshal/dump_spec.rb:1011:in 'block (3 levels) in <top (required)>'
/Users/headius/work/jruby/spec/ruby/core/marshal/dump_spec.rb:6:in '<top (required)>'
...more
Both the load and dump specs have also gotten very large, making maintenance difficult. They contain logic specific to various other core types, and frequently hardcode marshal output strings that appear to have changed slightly over time.
I file this because I'm not sure the best course of action to clean this up. The specs I need for jruby/jruby#9405 would be small (and also the first Set-related Marshal specs), but I'm reluctant to just add another custom spec block for such simple cases. It would be nice to figure out the "right" way to handle Marshal dump and load specs so this doesn't continue to compound.
A few thoughts here:
- Perhaps the marshal logic for each core class should live in that class's spec directory? There could be some common fixture code to make it trivial, but even if they don't all override
dumpandloadlogic, they all have unique Marshal formats. - Alternatively, could we clean up the canned
DATAandDATA_19hashes so that they fully pass for those cases, and only use custom specs when such canned cases can't be easily automated (such as recursive collections)?
- 主要语言
- Ruby
- 星标
- 622
- 派生
- 402
- 平均合并
- 14 小时 51 分钟
- 30 天内合并 PR
- 6
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
ruby/spec 的其他 Issue
-
难度 3/5 1-2 天 新手友好度 52/100
-
难度 5/5 一周以上 新手友好度 35/100
-
难度 3/5 1-2 天 新手友好度 38/100
-
Hacktoberfest help wanted
难度 5/5 一周以上 新手友好度 35/100
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 82/100
-
ai-generated
难度 2/5 1-3 小时 新手友好度 78/100
-
难度 2/5 1-3 小时 新手友好度 75/100
-
bug
难度 2/5 1-3 小时 新手友好度 82/100
hanami/hanami-cli#449 ·
-
难度 2/5 1-3 小时 新手友好度 82/100
hanami/hanami-router#310 ·