[前][次][番号順一覧][スレッド一覧]

ruby-changes:44617

From: nobu <ko1@a...>
Date: Thu, 10 Nov 2016 15:46:01 +0900 (JST)
Subject: [ruby-changes:44617] nobu:r56690 (trunk): test_files.rb: separate tests

nobu	2016-11-10 15:45:57 +0900 (Thu, 10 Nov 2016)

  New Revision: 56690

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=56690

  Log:
    test_files.rb: separate tests
    
    * test/ripper/test_files.rb (assert_parse_files): separate tests
      for each directories.

  Modified files:
    trunk/test/ripper/test_files.rb
Index: test/ripper/test_files.rb
===================================================================
--- test/ripper/test_files.rb	(revision 56689)
+++ test/ripper/test_files.rb	(revision 56690)
@@ -3,22 +3,46 @@ require 'test/unit' https://github.com/ruby/ruby/blob/trunk/test/ripper/test_files.rb#L3
 
 module TestRipper; end
 class TestRipper::Generic < Test::Unit::TestCase
-  def test_parse_files
-    srcdir = File.expand_path("../../..", __FILE__)
-    assert_separately(%W[--disable-gem -rripper - #{srcdir}],
-                      __FILE__, __LINE__, <<-'eom', timeout: Float::INFINITY)
+  SRCDIR = File.expand_path("../../..", __FILE__)
+
+  %w[sample ext].each do |dir|
+    define_method("test_parse_files:#{dir}") do
+      assert_parse_files(dir)
+    end
+  end
+
+  %w[lib test].each do |dir|
+    define_method("test_parse_files:#{dir}") do
+      assert_parse_files(dir, "*.rb")
+    end
+    Dir["#{SRCDIR}/#{dir}/*/"].each do |dir|
+      dir = dir[(SRCDIR.length+1)..-2]
+      define_method("test_parse_files:#{dir}") do
+        assert_parse_files(dir)
+      end
+    end
+  end
+
+  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
-      for script in Dir["#{dir}/{lib,sample,ext,test}/**/*.rb"].sort
-        next if TEST_RATIO and TEST_RATIO < rand
-        assert_nothing_raised("ripper failed to parse: #{script.inspect}") {
-          Parser.new(File.read(script), script).parse
+      scripts = Dir.chdir(dir) {Dir[pattern]}
+      scripts = scripts.sample(scripts.size * TEST_RATIO) if TEST_RATIO < 1.0
+      scripts.sort!
+      for script in scripts
+        assert_nothing_raised {
+          parser = Parser.new(File.read("#{dir}/#{script}"), script)
+          parser.instance_eval "parse", "<#{script}>"
         }
       end
-    eom
+    end;
   end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]