From 2c8dd794e9c86846f5989569b76c8c8006b18853 Mon Sep 17 00:00:00 2001 From: mame Date: Wed, 21 May 2008 15:31:15 +0000 Subject: * test/ruby/test_require.rb: new tests for library requiring, to achieve over 90% test coverage of dln.c. * test/ruby/test_class.rb: add tests to achieve over 90% test coverage of class.c. * test/ruby/test_module.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_require.rb | 215 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 test/ruby/test_require.rb (limited to 'test/ruby/test_require.rb') diff --git a/test/ruby/test_require.rb b/test/ruby/test_require.rb new file mode 100644 index 0000000000..299baeac62 --- /dev/null +++ b/test/ruby/test_require.rb @@ -0,0 +1,215 @@ +require 'test/unit' + +require 'tempfile' +require_relative 'envutil' + +class TestRequire < Test::Unit::TestCase + def ruby(*r, &b) + EnvUtil.rubyexec(*r, &b) + end + + def test_require_invalid_shared_object + t = Tempfile.new(["test_ruby_test_require", ".so"]) + t.puts "dummy" + t.close + + ruby do |w, r, e| + w.puts "begin" + w.puts " require \"#{ t.path }\"" + w.puts "rescue LoadError" + w.puts " p :ok" + w.puts "end" + w.close + assert_equal(":ok", r.read.chomp) + end + end + + def test_require_too_long_filename + ruby do |w, r, e| + w.puts "begin" + w.puts " require '#{ "foo/" * 10000 }foo'" + w.puts "rescue LoadError" + w.puts " p :ok" + w.puts "end" + w.close + e.read + assert_equal(":ok", r.read.chomp) + end + end + + def test_require_path_home + env_rubypath, env_home = ENV["RUBYPATH"], ENV["HOME"] + + ENV["RUBYPATH"] = "~" + ENV["HOME"] = "/foo" * 10000 + ruby("-S", "test_ruby_test_require") do |w, r, e| + w.close + e.read + assert_equal("", r.read) + end + + ENV["RUBYPATH"] = "~" + "/foo" * 10000 + ENV["HOME"] = "/foo" + ruby("-S", "test_ruby_test_require") do |w, r, e| + w.close + e.read + assert_equal("", r.read) + end + + t = Tempfile.new(["test_ruby_test_require", ".rb"]) + t.puts "p :ok" + t.close + ENV["RUBYPATH"] = "~" + ENV["HOME"], name = File.split(t.path) + ruby("-S", name) do |w, r, e| + w.close + assert_equal(":ok", r.read.chomp) + assert_equal("", e.read) + end + + ensure + env_rubypath ? ENV["RUBYPATH"] = env_rubypath : ENV.delete("RUBYPATH") + env_home ? ENV["HOME"] = env_home : ENV.delete("HOME") + end + + def test_define_class + begin + require "socket" + rescue LoadError + return + end + + ruby do |w, r, e| + w.puts "BasicSocket = 1" + w.puts "begin" + w.puts " require 'socket'" + w.puts " p :ng" + w.puts "rescue TypeError" + w.puts " p :ok" + w.puts "end" + w.close + assert_equal("", e.read) + assert_equal(":ok", r.read.chomp) + end + + ruby do |w, r, e| + w.puts "class BasicSocket; end" + w.puts "begin" + w.puts " require 'socket'" + w.puts " p :ng" + w.puts "rescue NameError" + w.puts " p :ok" + w.puts "end" + w.close + assert_equal("", e.read) + assert_equal(":ok", r.read.chomp) + end + + ruby do |w, r, e| + w.puts "class BasicSocket < IO; end" + w.puts "begin" + w.puts " require 'socket'" + w.puts " p :ok" + w.puts "rescue Exception" + w.puts " p :ng" + w.puts "end" + w.close + assert_equal("", e.read) + assert_equal(":ok", r.read.chomp) + end + end + + def test_define_class_under + begin + require "zlib" + rescue LoadError + return + end + + ruby do |w, r, e| + w.puts "module Zlib; end" + w.puts "Zlib::Error = 1" + w.puts "begin" + w.puts " require 'zlib'" + w.puts " p :ng" + w.puts "rescue TypeError" + w.puts " p :ok" + w.puts "end" + w.close + assert_equal("", e.read) + assert_equal(":ok", r.read.chomp) + end + + ruby do |w, r, e| + w.puts "module Zlib; end" + w.puts "class Zlib::Error; end" + w.puts "begin" + w.puts " require 'zlib'" + w.puts " p :ng" + w.puts "rescue NameError" + w.puts " p :ok" + w.puts "end" + w.close + assert_equal("", e.read) + assert_equal(":ok", r.read.chomp) + end + + ruby do |w, r, e| + w.puts "module Zlib; end" + w.puts "class Zlib::Error < StandardError; end" + w.puts "begin" + w.puts " require 'zlib'" + w.puts " p :ok" + w.puts "rescue Exception" + w.puts " p :ng" + w.puts "end" + w.close + assert_equal("", e.read) + assert_equal(":ok", r.read.chomp) + end + end + + def test_define_module + begin + require "zlib" + rescue LoadError + return + end + + ruby do |w, r, e| + w.puts "Zlib = 1" + w.puts "begin" + w.puts " require 'zlib'" + w.puts " p :ng" + w.puts "rescue TypeError" + w.puts " p :ok" + w.puts "end" + w.close + assert_equal("", e.read) + assert_equal(":ok", r.read.chomp) + end + end + + def test_define_module_under + begin + require "socket" + rescue LoadError + return + end + + ruby do |w, r, e| + w.puts "class BasicSocket < IO; end" + w.puts "class Socket < BasicSocket; end" + w.puts "Socket::Constants = 1" + w.puts "begin" + w.puts " require 'socket'" + w.puts " p :ng" + w.puts "rescue TypeError" + w.puts " p :ok" + w.puts "end" + w.close + assert_equal("", e.read) + assert_equal(":ok", r.read.chomp) + end + end +end -- cgit v1.2.3