diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-07-23 05:21:41 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-07-23 05:21:41 +0900 |
commit | d2710ba86677380f016b6a84d81e5cb39837c04d (patch) | |
tree | b108f4401981704d613d6d6d1d72c5448bb962a3 /test/ripper/assert_parse_files.rb | |
parent | 11f3da8e9dd98cb6b0c2c2fd22220f8508af32f2 (diff) | |
download | ruby-d2710ba86677380f016b6a84d81e5cb39837c04d.tar.gz |
Split test/ripper/test_files.rb to run in parallel
Diffstat (limited to 'test/ripper/assert_parse_files.rb')
-rw-r--r-- | test/ripper/assert_parse_files.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/ripper/assert_parse_files.rb b/test/ripper/assert_parse_files.rb new file mode 100644 index 0000000000..85d20cf69e --- /dev/null +++ b/test/ripper/assert_parse_files.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true +require 'test/unit' + +module TestRipper; end +class TestRipper::Generic < Test::Unit::TestCase + SRCDIR = File.expand_path("../../..", __FILE__) + + def assert_parse_files(dir, pattern = "**/*.rb") + assert_separately(%W[--disable-gem -rripper - #{SRCDIR}/#{dir} #{pattern}], + __FILE__, __LINE__, "#{<<-"begin;"}\n#{<<-'end;'}", timeout: Float::INFINITY) + pattern = "#{pattern}" + 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 = 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}>" + } + end + end; + end +end |