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

ruby-changes:51521

From: k0kubun <ko1@a...>
Date: Sat, 23 Jun 2018 17:29:26 +0900 (JST)
Subject: [ruby-changes:51521] k0kubun:r63731 (trunk): spec: skip Process wait specs on MJIT

k0kubun	2018-06-23 17:29:20 +0900 (Sat, 23 Jun 2018)

  New Revision: 63731

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

  Log:
    spec: skip Process wait specs on MJIT
    
    until [Bug #14867] is fixed. I want to start running CI with MJIT
    enabled before fixing the problem.

  Modified files:
    trunk/spec/mspec/lib/mspec/guards/feature.rb
    trunk/spec/ruby/core/process/wait2_spec.rb
    trunk/spec/ruby/core/process/wait_spec.rb
    trunk/spec/ruby/core/process/waitall_spec.rb
    trunk/spec/ruby/default.mspec
Index: spec/ruby/core/process/wait_spec.rb
===================================================================
--- spec/ruby/core/process/wait_spec.rb	(revision 63730)
+++ spec/ruby/core/process/wait_spec.rb	(revision 63731)
@@ -12,79 +12,81 @@ describe "Process.wait" do https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/process/wait_spec.rb#L12
     end
   end
 
-  it "raises an Errno::ECHILD if there are no child processes" do
-    lambda { Process.wait }.should raise_error(Errno::ECHILD)
-  end
-
-  platform_is_not :windows do
-    it "returns its childs pid" do
-      pid = Process.spawn(ruby_cmd('exit'))
-      Process.wait.should == pid
+  without_feature :mjit do # [Bug #14867]
+    it "raises an Errno::ECHILD if there are no child processes" do
+      lambda { Process.wait }.should raise_error(Errno::ECHILD)
     end
 
-    it "sets $? to a Process::Status" do
-      pid = Process.spawn(ruby_cmd('exit'))
-      Process.wait
-      $?.should be_kind_of(Process::Status)
-      $?.pid.should == pid
-    end
+    platform_is_not :windows do
+      it "returns its childs pid" do
+        pid = Process.spawn(ruby_cmd('exit'))
+        Process.wait.should == pid
+      end
 
-    it "waits for any child process if no pid is given" do
-      pid = Process.spawn(ruby_cmd('exit'))
-      Process.wait.should == pid
-      lambda { Process.kill(0, pid) }.should raise_error(Errno::ESRCH)
-    end
+      it "sets $? to a Process::Status" do
+        pid = Process.spawn(ruby_cmd('exit'))
+        Process.wait
+        $?.should be_kind_of(Process::Status)
+        $?.pid.should == pid
+      end
 
-    it "waits for a specific child if a pid is given" do
-      pid1 = Process.spawn(ruby_cmd('exit'))
-      pid2 = Process.spawn(ruby_cmd('exit'))
-      Process.wait(pid2).should == pid2
-      Process.wait(pid1).should == pid1
-      lambda { Process.kill(0, pid1) }.should raise_error(Errno::ESRCH)
-      lambda { Process.kill(0, pid2) }.should raise_error(Errno::ESRCH)
-    end
+      it "waits for any child process if no pid is given" do
+        pid = Process.spawn(ruby_cmd('exit'))
+        Process.wait.should == pid
+        lambda { Process.kill(0, pid) }.should raise_error(Errno::ESRCH)
+      end
 
-    it "coerces the pid to an Integer" do
-      pid1 = Process.spawn(ruby_cmd('exit'))
-      Process.wait(mock_int(pid1)).should == pid1
-      lambda { Process.kill(0, pid1) }.should raise_error(Errno::ESRCH)
-    end
+      it "waits for a specific child if a pid is given" do
+        pid1 = Process.spawn(ruby_cmd('exit'))
+        pid2 = Process.spawn(ruby_cmd('exit'))
+        Process.wait(pid2).should == pid2
+        Process.wait(pid1).should == pid1
+        lambda { Process.kill(0, pid1) }.should raise_error(Errno::ESRCH)
+        lambda { Process.kill(0, pid2) }.should raise_error(Errno::ESRCH)
+      end
 
-    # This spec is probably system-dependent.
-    it "waits for a child whose process group ID is that of the calling process" do
-      pid1 = Process.spawn(ruby_cmd('exit'), pgroup: true)
-      pid2 = Process.spawn(ruby_cmd('exit'))
+      it "coerces the pid to an Integer" do
+        pid1 = Process.spawn(ruby_cmd('exit'))
+        Process.wait(mock_int(pid1)).should == pid1
+        lambda { Process.kill(0, pid1) }.should raise_error(Errno::ESRCH)
+      end
 
-      Process.wait(0).should == pid2
-      Process.wait.should == pid1
-    end
+      # This spec is probably system-dependent.
+      it "waits for a child whose process group ID is that of the calling process" do
+        pid1 = Process.spawn(ruby_cmd('exit'), pgroup: true)
+        pid2 = Process.spawn(ruby_cmd('exit'))
 
-    # This spec is probably system-dependent.
-    it "doesn't block if no child is available when WNOHANG is used" do
-      read, write = IO.pipe
-      pid = Process.fork do
-        read.close
-        Signal.trap("TERM") { Process.exit! }
-        write << 1
-        write.close
-        sleep
+        Process.wait(0).should == pid2
+        Process.wait.should == pid1
       end
 
-      Process.wait(pid, Process::WNOHANG).should be_nil
+      # This spec is probably system-dependent.
+      it "doesn't block if no child is available when WNOHANG is used" do
+        read, write = IO.pipe
+        pid = Process.fork do
+          read.close
+          Signal.trap("TERM") { Process.exit! }
+          write << 1
+          write.close
+          sleep
+        end
 
-      # wait for the child to setup its TERM handler
-      write.close
-      read.read(1)
-      read.close
+        Process.wait(pid, Process::WNOHANG).should be_nil
 
-      Process.kill("TERM", pid)
-      Process.wait.should == pid
-    end
+        # wait for the child to setup its TERM handler
+        write.close
+        read.read(1)
+        read.close
 
-    it "always accepts flags=0" do
-      pid = Process.spawn(ruby_cmd('exit'))
-      Process.wait(-1, 0).should == pid
-      lambda { Process.kill(0, pid) }.should raise_error(Errno::ESRCH)
+        Process.kill("TERM", pid)
+        Process.wait.should == pid
+      end
+
+      it "always accepts flags=0" do
+        pid = Process.spawn(ruby_cmd('exit'))
+        Process.wait(-1, 0).should == pid
+        lambda { Process.kill(0, pid) }.should raise_error(Errno::ESRCH)
+      end
     end
   end
 end
Index: spec/ruby/core/process/wait2_spec.rb
===================================================================
--- spec/ruby/core/process/wait2_spec.rb	(revision 63730)
+++ spec/ruby/core/process/wait2_spec.rb	(revision 63731)
@@ -14,19 +14,21 @@ describe "Process.wait2" do https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/process/wait2_spec.rb#L14
     end
   end
 
-  platform_is_not :windows do
-    it "returns the pid and status of child process" do
-      pidf = Process.fork { Process.exit! 99 }
-      results = Process.wait2
-      results.size.should == 2
-      pidw, status = results
-      pidf.should == pidw
-      status.exitstatus.should == 99
+  without_feature :mjit do # [Bug #14867]
+    platform_is_not :windows do
+      it "returns the pid and status of child process" do
+        pidf = Process.fork { Process.exit! 99 }
+        results = Process.wait2
+        results.size.should == 2
+        pidw, status = results
+        pidf.should == pidw
+        status.exitstatus.should == 99
+      end
     end
-  end
 
-  it "raises a StandardError if no child processes exist" do
-    lambda { Process.wait2 }.should raise_error(Errno::ECHILD)
-    lambda { Process.wait2 }.should raise_error(StandardError)
+    it "raises a StandardError if no child processes exist" do
+      lambda { Process.wait2 }.should raise_error(Errno::ECHILD)
+      lambda { Process.wait2 }.should raise_error(StandardError)
+    end
   end
 end
Index: spec/ruby/core/process/waitall_spec.rb
===================================================================
--- spec/ruby/core/process/waitall_spec.rb	(revision 63730)
+++ spec/ruby/core/process/waitall_spec.rb	(revision 63731)
@@ -8,41 +8,43 @@ describe "Process.waitall" do https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/process/waitall_spec.rb#L8
     end
   end
 
-  it "returns an empty array when there are no children" do
-    Process.waitall.should == []
-  end
-
-  it "takes no arguments" do
-    lambda { Process.waitall(0) }.should raise_error(ArgumentError)
-  end
+  without_feature :mjit do # [Bug #14867]
+    it "returns an empty array when there are no children" do
+      Process.waitall.should == []
+    end
 
-  platform_is_not :windows do
-    it "waits for all children" do
-      pids = []
-      pids << Process.fork { Process.exit! 2 }
-      pids << Process.fork { Process.exit! 1 }
-      pids << Process.fork { Process.exit! 0 }
-      Process.waitall
-      pids.each { |pid|
-        lambda { Process.kill(0, pid) }.should raise_error(Errno::ESRCH)
-      }
+    it "takes no arguments" do
+      lambda { Process.waitall(0) }.should raise_error(ArgumentError)
     end
 
-    it "returns an array of pid/status pairs" do
-      pids = []
-      pids << Process.fork { Process.exit! 2 }
-      pids << Process.fork { Process.exit! 1 }
-      pids << Process.fork { Process.exit! 0 }
-      a = Process.waitall
-      a.should be_kind_of(Array)
-      a.size.should == 3
-      pids.each { |pid|
-        pid_status = a.assoc(pid)
-        pid_status.should be_kind_of(Array)
-        pid_status.size.should == 2
-        pid_status.first.should == pid
-        pid_status.last.should be_kind_of(Process::Status)
-      }
+    platform_is_not :windows do
+      it "waits for all children" do
+        pids = []
+        pids << Process.fork { Process.exit! 2 }
+        pids << Process.fork { Process.exit! 1 }
+        pids << Process.fork { Process.exit! 0 }
+        Process.waitall
+        pids.each { |pid|
+          lambda { Process.kill(0, pid) }.should raise_error(Errno::ESRCH)
+        }
+      end
+
+      it "returns an array of pid/status pairs" do
+        pids = []
+        pids << Process.fork { Process.exit! 2 }
+        pids << Process.fork { Process.exit! 1 }
+        pids << Process.fork { Process.exit! 0 }
+        a = Process.waitall
+        a.should be_kind_of(Array)
+        a.size.should == 3
+        pids.each { |pid|
+          pid_status = a.assoc(pid)
+          pid_status.should be_kind_of(Array)
+          pid_status.size.should == 2
+          pid_status.first.should == pid
+          pid_status.last.should be_kind_of(Process::Status)
+        }
+      end
     end
   end
 end
Index: spec/ruby/default.mspec
===================================================================
--- spec/ruby/default.mspec	(revision 63730)
+++ spec/ruby/default.mspec	(revision 63731)
@@ -49,4 +49,5 @@ class MSpecScript https://github.com/ruby/ruby/blob/trunk/spec/ruby/default.mspec#L49
   MSpec.enable_feature :fiber_library
   MSpec.enable_feature :fork if respond_to?(:fork, true)
   MSpec.enable_feature :encoding
+  MSpec.enable_feature :mjit if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled?
 end
Index: spec/mspec/lib/mspec/guards/feature.rb
===================================================================
--- spec/mspec/lib/mspec/guards/feature.rb	(revision 63730)
+++ spec/mspec/lib/mspec/guards/feature.rb	(revision 63731)
@@ -39,3 +39,9 @@ end https://github.com/ruby/ruby/blob/trunk/spec/mspec/lib/mspec/guards/feature.rb#L39
 def with_feature(*features, &block)
   FeatureGuard.new(*features).run_if(:with_feature, &block)
 end
+
+MSpecEnv.class_eval do
+  def without_feature(*features, &block)
+    FeatureGuard.new(*features).run_unless(:without_feature, &block)
+  end
+end

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

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