diff --git a/lib/rake/cpu_counter.rb b/lib/rake/cpu_counter.rb index d7c92a6cbe..6d0b878b19 100644 --- a/lib/rake/cpu_counter.rb +++ b/lib/rake/cpu_counter.rb @@ -44,6 +44,18 @@ module Rake end end + begin + require 'etc' + rescue LoadError + else + if Etc.respond_to?(:nprocessors) + undef count + def count + return Etc.nprocessors + end + end + end + def count_via_java_runtime Java::Java.lang.Runtime.getRuntime.availableProcessors rescue StandardError diff --git a/test/rake/test_rake_cpu_counter.rb b/test/rake/test_rake_cpu_counter.rb index ccf21d8ba6..87d0601c6c 100644 --- a/test/rake/test_rake_cpu_counter.rb +++ b/test/rake/test_rake_cpu_counter.rb @@ -8,43 +8,61 @@ class TestRakeCpuCounter < Rake::TestCase @cpu_counter = Rake::CpuCounter.new end - def test_count_via_win32 - if Rake::Win32.windows? then - assert_kind_of Numeric, @cpu_counter.count_via_win32 - else - assert_nil @cpu_counter.count_via_win32 - end + def test_count + num = @cpu_counter.count + skip 'cannot count CPU' if num == nil + assert_kind_of Numeric, num + assert_operator num, :>=, 1 end - def test_in_path_command - with_ruby_in_path do |ruby| - assert_equal ruby, @cpu_counter.in_path_command(ruby) - end - rescue Errno::ENOENT => e - raise unless e.message =~ /\bwhich\b/ - - skip 'cannot find which for this test' + def test_count_with_default_nil + def @cpu_counter.count; nil; end + assert_equal(8, @cpu_counter.count_with_default(8)) + assert_equal(4, @cpu_counter.count_with_default) end - def test_run - with_ruby_in_path do |ruby| - assert_equal 7, @cpu_counter.run(ruby, '-e', 'puts 3 + 4') - end + def test_count_with_default_raise + def @cpu_counter.count; raise; end + assert_equal(8, @cpu_counter.count_with_default(8)) + assert_equal(4, @cpu_counter.count_with_default) end - def with_ruby_in_path - ruby = File.basename Gem.ruby - ruby_dir = File.dirname Gem.ruby + class TestClassMethod < Rake::TestCase + def setup + super - begin - orig_path, ENV['PATH'] = - ENV['PATH'], [ruby_dir, *ENV['PATH']].join(File::PATH_SEPARATOR) + @klass = Class.new(Rake::CpuCounter) + end - yield ruby - ensure - ENV['PATH'] = orig_path + def test_count + @klass.class_eval do + def count; 8; end + end + assert_equal(8, @klass.count) + end + + def test_count_nil + counted = false + @klass.class_eval do + define_method(:count) do + counted = true + nil + end + end + assert_equal(4, @klass.count) + assert_equal(true, counted) + end + + def test_count_raise + counted = false + @klass.class_eval do + define_method(:count) do + counted = true + raise + end + end + assert_equal(4, @klass.count) + assert_equal(true, counted) end end - end -