diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-03-28 11:20:29 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-03-28 17:14:34 +0900 |
commit | 040fab3782fe787423f050ff6e68d9da4f1a5974 (patch) | |
tree | 457a263eb91e58bdee5f1feb9e9445a3a6c15999 /test/ripper | |
parent | 9891797a277eb61f56fcde71cc78a6196d3886be (diff) | |
download | ruby-040fab3782fe787423f050ff6e68d9da4f1a5974.tar.gz |
Ripper: Add keyword options to `assert_parse_files`
Diffstat (limited to 'test/ripper')
-rw-r--r-- | test/ripper/assert_parse_files.rb | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/test/ripper/assert_parse_files.rb b/test/ripper/assert_parse_files.rb index 85d20cf69e..f59e028182 100644 --- a/test/ripper/assert_parse_files.rb +++ b/test/ripper/assert_parse_files.rb @@ -5,26 +5,39 @@ module TestRipper; end class TestRipper::Generic < Test::Unit::TestCase SRCDIR = File.expand_path("../../..", __FILE__) - def assert_parse_files(dir, pattern = "**/*.rb") + def assert_parse_files(dir, pattern = "**/*.rb", exclude: nil, gc_stress: GC.stress, test_ratio: nil) + test_ratio ||= ENV["TEST_RIPPER_RATIO"]&.tap {|s|break s.to_f} || 0.05 # testing all files needs too long time... assert_separately(%W[--disable-gem -rripper - #{SRCDIR}/#{dir} #{pattern}], __FILE__, __LINE__, "#{<<-"begin;"}\n#{<<-'end;'}", timeout: Float::INFINITY) + GC.stress = false pattern = "#{pattern}" + exclude = ( + #{exclude if exclude} + ) + test_ratio = ( + #{test_ratio} + ) + gc_stress = ( + #{gc_stress} + ) begin; - TEST_RATIO = ENV["TEST_RIPPER_RATIO"]&.tap {|s|break s.to_f} || 0.05 # testing all files needs too long time... class Parser < Ripper PARSER_EVENTS.each {|n| eval "def on_#{n}(*args) r = [:#{n}, *args]; r.inspect; Object.new end" } SCANNER_EVENTS.each {|n| eval "def on_#{n}(*args) r = [:#{n}, *args]; r.inspect; Object.new end" } end dir = ARGV.shift - scripts = Dir.chdir(dir) {Dir[pattern]} - if (1...scripts.size).include?(num = scripts.size * TEST_RATIO) + scripts = Dir.glob(pattern, base: dir) + scripts.reject! {|script| File.fnmatch?(exclude, script, File::FNM_PATHNAME)} if exclude + if (1...scripts.size).include?(num = scripts.size * test_ratio) scripts = scripts.sample(num) end scripts.sort! for script in scripts assert_nothing_raised { parser = Parser.new(File.read("#{dir}/#{script}"), script) - parser.instance_eval "parse", "<#{script}>" + EnvUtil.under_gc_stress(gc_stress) do + parser.instance_eval "parse", "<#{script}>" + end } end end; |