From 08553c9ceab64129710c19af1cd1548acd32caed Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Fri, 26 Feb 2021 10:55:49 +0900 Subject: [PATCH] Use test-unit --- Rakefile | 20 ++--- iruby.gemspec | 3 +- test/helper.rb | 90 +++++++++++++++++++ test/integration_test.rb | 3 +- test/iruby/backend_test.rb | 2 - test/iruby/command_test.rb | 1 - test/iruby/jupyter_test.rb | 1 - test/iruby/multi_logger_test.rb | 1 - .../session_adapter/cztop_adapter_test.rb | 2 +- .../session_adapter/ffirzmq_adapter_test.rb | 2 +- .../session_adapter_test_base.rb | 4 +- test/iruby/session_adapter_test.rb | 58 ++++++------ test/iruby/session_test.rb | 19 ++-- test/run-test.rb | 18 ++++ test/test_helper.rb | 48 ---------- 15 files changed, 162 insertions(+), 110 deletions(-) create mode 100644 test/helper.rb create mode 100755 test/run-test.rb delete mode 100644 test/test_helper.rb diff --git a/Rakefile b/Rakefile index 3413f49..a8aec73 100644 --- a/Rakefile +++ b/Rakefile @@ -1,17 +1,17 @@ -require 'rake/testtask' +require "bundler/gem_helper" -begin - require 'bundler/gem_tasks' -rescue Exception -end +base_dir = File.join(File.dirname(__FILE__)) + +helper = Bundler::GemHelper.new(base_dir) +helper.install FileList['tasks/**.rake'].each {|f| load f } -Rake::TestTask.new('test') do |t| - t.libs << 'lib' - t.libs << 'test' - t.test_files = FileList['test/**/*_test.rb'] - t.verbose = true +desc "Run tests" +task :test do + cd(base_dir) do + ruby("test/run-test.rb") + end end task default: 'test' diff --git a/iruby.gemspec b/iruby.gemspec index 20b50f0..9fee5a0 100644 --- a/iruby.gemspec +++ b/iruby.gemspec @@ -23,7 +23,8 @@ Gem::Specification.new do |s| s.add_dependency 'mimemagic', '~> 0.3' s.add_dependency 'multi_json', '~> 1.11' - s.add_development_dependency 'minitest' s.add_development_dependency 'pycall', '>= 1.2.1' s.add_development_dependency 'rake' + s.add_development_dependency 'test-unit' + s.add_development_dependency 'test-unit-rr' end diff --git a/test/helper.rb b/test/helper.rb new file mode 100644 index 0000000..e62b854 --- /dev/null +++ b/test/helper.rb @@ -0,0 +1,90 @@ +require "iruby" +require "test/unit" +require "test/unit/rr" +require "tmpdir" + +module IRubyTest + class TestBase < Test::Unit::TestCase + def assert_output(stdout=nil, stderr=nil) + flunk "assert_output requires a block to capture output." unless block_given? + + out, err = capture_io do + yield + end + + y = check_assert_output_result(stderr, err, "stderr") + x = check_assert_output_result(stdout, out, "stdout") + + (!stdout || x) && (!stderr || y) + end + + private + + def capture_io + captured_stdout = StringIO.new + captured_stderr = StringIO.new + + orig_stdout, $stdout = $stdout, captured_stdout + orig_stderr, $stderr = $stderr, captured_stderr + + yield + + return captured_stdout.string, captured_stderr.string + ensure + $stdout = orig_stdout + $stderr = orig_stderr + end + + def check_assert_output_result(expected, actual, name) + if expected + message = "In #{name}" + case expected + when Regexp + assert_match(expected, actual, message) + else + assert_equal(expected, actual, message) + end + end + end + + def ignore_warning + saved, $VERBOSE = $VERBOSE , nil + yield + ensure + $VERBOSE = saved + end + + def with_env(env) + keys = env.keys + saved_values = ENV.values_at(*keys) + ENV.update(env) + yield + ensure + if keys && saved_values + keys.zip(saved_values) do |k, v| + ENV[k] = v + end + end + end + + def windows_only + omit('windows only test') unless windows? + end + + def apple_only + omit('apple only test') unless windows? + end + + def unix_only + omit('unix only test') if windows? || apple? + end + + def windows? + /mingw|mswin/ =~ RUBY_PLATFORM + end + + def apple? + /darwin/ =~ RUBY_PLATFORM + end + end +end diff --git a/test/integration_test.rb b/test/integration_test.rb index 21e00db..2bdfada 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -1,4 +1,3 @@ -require 'test_helper' require 'pty' require 'expect' @@ -33,7 +32,7 @@ def wait_prompt end def test_interaction - skip "This test too much unstable" + omit("This test too much unstable") write '"Hello, world!"' expect '"Hello, world!"' diff --git a/test/iruby/backend_test.rb b/test/iruby/backend_test.rb index 658b8e3..bc3206e 100644 --- a/test/iruby/backend_test.rb +++ b/test/iruby/backend_test.rb @@ -1,5 +1,3 @@ -require 'test_helper' - module IRubyTest class PlainBackendTest < IRubyTest::TestBase def setup diff --git a/test/iruby/command_test.rb b/test/iruby/command_test.rb index 62417b1..97b5e29 100644 --- a/test/iruby/command_test.rb +++ b/test/iruby/command_test.rb @@ -1,4 +1,3 @@ -require 'test_helper' require 'iruby/command' module IRubyTest diff --git a/test/iruby/jupyter_test.rb b/test/iruby/jupyter_test.rb index 09b05cd..bd0c7ef 100644 --- a/test/iruby/jupyter_test.rb +++ b/test/iruby/jupyter_test.rb @@ -1,4 +1,3 @@ -require 'test_helper' require 'iruby/jupyter' module IRubyTest diff --git a/test/iruby/multi_logger_test.rb b/test/iruby/multi_logger_test.rb index 1bd0340..7c3ba2c 100644 --- a/test/iruby/multi_logger_test.rb +++ b/test/iruby/multi_logger_test.rb @@ -1,5 +1,4 @@ require 'stringio' -require 'test_helper' require 'iruby/logger' class IRubyTest::MultiLoggerTest < IRubyTest::TestBase diff --git a/test/iruby/session_adapter/cztop_adapter_test.rb b/test/iruby/session_adapter/cztop_adapter_test.rb index 5118674..b56afbd 100644 --- a/test/iruby/session_adapter/cztop_adapter_test.rb +++ b/test/iruby/session_adapter/cztop_adapter_test.rb @@ -13,7 +13,7 @@ def test_send end def test_recv - skip + omit end end end diff --git a/test/iruby/session_adapter/ffirzmq_adapter_test.rb b/test/iruby/session_adapter/ffirzmq_adapter_test.rb index d791f48..20cfba1 100644 --- a/test/iruby/session_adapter/ffirzmq_adapter_test.rb +++ b/test/iruby/session_adapter/ffirzmq_adapter_test.rb @@ -13,7 +13,7 @@ def test_send end def test_recv - skip + omit end end end diff --git a/test/iruby/session_adapter/session_adapter_test_base.rb b/test/iruby/session_adapter/session_adapter_test_base.rb index 512fc54..57e7022 100644 --- a/test/iruby/session_adapter/session_adapter_test_base.rb +++ b/test/iruby/session_adapter/session_adapter_test_base.rb @@ -1,5 +1,3 @@ -require 'test_helper' - module IRubyTest class SessionAdapterTestBase < TestBase # https://jupyter-client.readthedocs.io/en/stable/kernels.html#connection-files @@ -22,7 +20,7 @@ def setup @session_adapter = adapter_class.new(@config) unless adapter_class.available? - skip "#{@session_adapter.name} is unavailable" + omit("#{@session_adapter.name} is unavailable") end end end diff --git a/test/iruby/session_adapter_test.rb b/test/iruby/session_adapter_test.rb index 862871e..fce0d50 100644 --- a/test/iruby/session_adapter_test.rb +++ b/test/iruby/session_adapter_test.rb @@ -1,5 +1,3 @@ -require 'test_helper' - module IRubyTest class SessionAdapterTest < TestBase def test_available_p_return_false_when_load_error @@ -13,46 +11,48 @@ def load_requirements end def test_select_adapter_class_with_cztop - IRuby::SessionAdapter::CztopAdapter.stub :available?, true do - IRuby::SessionAdapter::FfirzmqAdapter.stub :available?, false do - IRuby::SessionAdapter::PyzmqAdapter.stub :available?, false do - cls = IRuby::SessionAdapter.select_adapter_class - assert_equal IRuby::SessionAdapter::CztopAdapter, cls - end - end + assert_rr do + stub(IRuby::SessionAdapter::CztopAdapter).available? { true } + stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { false } + stub(IRuby::SessionAdapter::PyzmqAdapter).available? { false } + + cls = IRuby::SessionAdapter.select_adapter_class + assert_equal IRuby::SessionAdapter::CztopAdapter, cls end end def test_select_adapter_class_with_ffirzmq - IRuby::SessionAdapter::FfirzmqAdapter.stub :available?, true do - IRuby::SessionAdapter::CztopAdapter.stub :available?, false do - IRuby::SessionAdapter::PyzmqAdapter.stub :available?, false do - cls = IRuby::SessionAdapter.select_adapter_class - assert_equal IRuby::SessionAdapter::FfirzmqAdapter, cls - end - end + assert_rr do + stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { true } + stub(IRuby::SessionAdapter::CztopAdapter).available? { false } + stub(IRuby::SessionAdapter::PyzmqAdapter).available? { false } + + cls = IRuby::SessionAdapter.select_adapter_class + assert_equal IRuby::SessionAdapter::FfirzmqAdapter, cls end end def test_select_adapter_class_with_pyzmq - skip "pyzmq adapter is disabled" - IRuby::SessionAdapter::PyzmqAdapter.stub :available?, true do - IRuby::SessionAdapter::CztopAdapter.stub :available?, false do - IRuby::SessionAdapter::FfirzmqAdapter.stub :available?, false do - cls = IRuby::SessionAdapter.select_adapter_class - assert_equal IRuby::SessionAdapter::PyzmqAdapter, cls - end - end + omit("pyzmq adapter is disabled") + assert_rr do + stub(IRuby::SessionAdapter::PyzmqAdapter).available? { true } + stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { false } + stub(IRuby::SessionAdapter::CztopAdapter).available? { false } + + cls = IRuby::SessionAdapter.select_adapter_class + assert_equal IRuby::SessionAdapter::PyzmqAdapter, cls end end def test_select_adapter_class_with_env with_env('IRUBY_SESSION_ADAPTER' => 'cztop') do - IRuby::SessionAdapter::CztopAdapter.stub :available?, true do + assert_rr do + stub(IRuby::SessionAdapter::CztopAdapter).available? { true } assert_equal IRuby::SessionAdapter::CztopAdapter, IRuby::SessionAdapter.select_adapter_class end - IRuby::SessionAdapter::CztopAdapter.stub :available?, false do + assert_rr do + stub(IRuby::SessionAdapter::CztopAdapter).available? { false } assert_raises IRuby::SessionAdapterNotFound do IRuby::SessionAdapter.select_adapter_class end @@ -60,11 +60,13 @@ def test_select_adapter_class_with_env end with_env('IRUBY_SESSION_ADAPTER' => 'ffi-rzmq') do - IRuby::SessionAdapter::FfirzmqAdapter.stub :available?, true do + assert_rr do + stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { true } assert_equal IRuby::SessionAdapter::FfirzmqAdapter, IRuby::SessionAdapter.select_adapter_class end - IRuby::SessionAdapter::FfirzmqAdapter.stub :available?, false do + assert_rr do + stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { false } assert_raises IRuby::SessionAdapterNotFound do IRuby::SessionAdapter.select_adapter_class end diff --git a/test/iruby/session_test.rb b/test/iruby/session_test.rb index 84a0924..3aee3ba 100644 --- a/test/iruby/session_test.rb +++ b/test/iruby/session_test.rb @@ -1,5 +1,3 @@ -require 'test_helper' - module IRubyTest class SessionAdapterSelectionTest < TestBase def setup @@ -25,10 +23,10 @@ def test_new_with_session_adapter when 'ffi-rzmq' IRuby::SessionAdapter::FfirzmqAdapter when 'pyzmq' - skip "pyzmq adapter is disabled" + omit("pyzmq adapter is disabled") # IRuby::SessionAdapter::PyzmqAdapter else - flunk "Unknown session adapter: #{adapter_name}" + flunk "Unknown session adapter: #{adapter_name.inspect}" end session = IRuby::Session.new(@session_config, adapter_name) @@ -36,13 +34,12 @@ def test_new_with_session_adapter end def test_without_any_session_adapter - IRuby::SessionAdapter::CztopAdapter.stub :available?, false do - IRuby::SessionAdapter::FfirzmqAdapter.stub :available?, false do - IRuby::SessionAdapter::PyzmqAdapter.stub :available?, false do - assert_raises IRuby::SessionAdapterNotFound do - IRuby::Session.new(@session_config) - end - end + assert_rr do + stub(IRuby::SessionAdapter::CztopAdapter).available? { false } + stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { false } + stub(IRuby::SessionAdapter::PyzmqAdapter).available? { false } + assert_raises IRuby::SessionAdapterNotFound do + IRuby::Session.new(@session_config) end end end diff --git a/test/run-test.rb b/test/run-test.rb new file mode 100755 index 0000000..e602d65 --- /dev/null +++ b/test/run-test.rb @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +$VERBOSE = true + +require "pathname" + +base_dir = Pathname.new(__dir__).parent.expand_path + +lib_dir = base_dir + "lib" +test_dir = base_dir + "test" + +$LOAD_PATH.unshift(lib_dir.to_s) + +require_relative "helper" + +ENV["TEST_UNIT_MAX_DIFF_TARGET_STRING_SIZE"] ||= "10000" + +exit Test::Unit::AutoRunner.run(true, test_dir) diff --git a/test/test_helper.rb b/test/test_helper.rb deleted file mode 100644 index 690e6eb..0000000 --- a/test/test_helper.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'iruby' -require 'tmpdir' -require 'minitest/autorun' - -module IRubyTest - class TestBase < Minitest::Test - private - - def ignore_warning - saved, $VERBOSE = $VERBOSE , nil - yield - ensure - $VERBOSE = saved - end - def with_env(env) - keys = env.keys - saved_values = ENV.values_at(*keys) - ENV.update(env) - yield - ensure - if keys && saved_values - keys.zip(saved_values) do |k, v| - ENV[k] = v - end - end - end - - def windows_only - skip('windows only test') unless windows? - end - - def apple_only - skip('apple only test') unless windows? - end - - def unix_only - skip('unix only test') if windows? || apple? - end - - def windows? - /mingw|mswin/ =~ RUBY_PLATFORM - end - - def apple? - /darwin/ =~ RUBY_PLATFORM - end - end -end