forked from jruby/jruby
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_jar_complete.rb
More file actions
128 lines (108 loc) · 4.09 KB
/
Copy pathtest_jar_complete.rb
File metadata and controls
128 lines (108 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# This gets run from 'ant test-jar-complete' which ensures that a
# complete jar is built first.
# Make sure we're not affected by RVM or other gem envvars
ENV.delete 'GEM_HOME'
ENV.delete 'GEM_PATH'
require 'test/unit'
require 'rbconfig'
require 'fileutils'
require 'pathname'
prefix = RbConfig::CONFIG['prefix']
abort "error: test must be launched from complete jar (found prefix = #{prefix})" unless prefix =~ %r{^file.*!/META-INF/jruby\.home}
def file_from_url(path)
if RbConfig::CONFIG['host_os'] =~ /Windows|mswin/
path[%r{^file:\/*?([a-zA-Z]:/[^!]+)}, 1]
else
path[%r{^file:\/*?(/[^!]+)}, 1]
end
end
COMPLETE_JAR = file_from_url prefix
abort "error: could not figure out complete jar from RbConfig::CONFIG['prefix'] (#{prefix})" unless COMPLETE_JAR
puts "Using jar: #{COMPLETE_JAR}"
class JarCompleteTest < Test::Unit::TestCase
include FileUtils
TMP_DIR = begin
# Try not to use default $TMPDIR on OS X which contains +++
tmp = [ENV['TEMP'], ENV['TMPDIR'], '/tmp', '/var/tmp'].detect {|d| d && d !~ /[ +]/ && File.directory?(d)}
unless tmp
require 'tempfile'
tmp = Dir::tmpdir
end
Pathname.new(tmp).realpath.join("jar_complete_test").to_s
end
puts "Using tmp: #{TMP_DIR}"
def setup
mkdir_p TMP_DIR
end
def teardown
rm_rf TMP_DIR
end
def jruby_complete(*args)
jarfile = args.first
if jarfile =~ /\.jar/
args.shift
else
jarfile = COMPLETE_JAR
end
cmd = (%w(java -jar) + [%{"#{jarfile}"}] + [args].flatten).join(' ')
output = `#{cmd}`
puts cmd, output if $DEBUG && $?.success?
fail "#{cmd} failed with status: #{$?.exitstatus}\n#{output}" unless $?.success?
output
end
def test_complete_jar
assert_equal "hi\n", jruby_complete("-e \"puts 'hi'\"")
end
def test_rubygems_home
assert jruby_complete("-rubygems -e 'puts Gem.dir'").chomp =~ /#{COMPLETE_JAR}/
end
def test_contains_rake_gem
assert jruby_complete("-S gem list") =~ /rake/m
end
def test_rake_help_works
output = jruby_complete("-S rake --help")
assert output =~ /rakefile/
assert output =~ /dry-run/
end
def test_prefix_in_path_with_spaces
tmp = File.join(TMP_DIR, "hi there")
mkdir_p tmp
complete_jar = File.expand_path(File.join(tmp, 'jruby-complete.jar'))
cp COMPLETE_JAR, complete_jar
output = jruby_complete(complete_jar, "-rrbconfig -e 'puts RbConfig::CONFIG[%{prefix}]'").chomp
file = file_from_url(output)
assert File.exists?(file)
assert_equal complete_jar, file
end
def test_prefix_in_path_with_pluses
tmp = File.join(TMP_DIR, "hi+there")
mkdir_p tmp
complete_jar = File.expand_path(File.join(tmp, 'jruby-complete.jar'))
cp COMPLETE_JAR, complete_jar
output = jruby_complete(complete_jar, "-rrbconfig -e 'puts RbConfig::CONFIG[%{prefix}]'").chomp
file = file_from_url(output)
assert File.exists?(file)
assert_equal complete_jar, file
end
# JRUBY-5337
def test_script_with__FILE__constant_in_jar_with_spaces
tmp = File.join(TMP_DIR, "hi there")
mkdir_p tmp
complete_jar = File.expand_path(File.join(tmp, 'jruby-complete.jar'))
cp COMPLETE_JAR, complete_jar
script = File.join(TMP_DIR, "_file_constant_.rb")
File.open(script, "wb") {|f| f.puts "puts __FILE__" }
Dir.chdir(File.dirname(script)) { system %{jar uf "#{complete_jar}" #{File.basename(script)}} }
output = jruby_complete(complete_jar, %{-e "require '_file_constant_'"}).chomp
assert output =~ /#{tmp}/, "'#{output}' does not match '#{tmp}'"
end
def test_binscripts_can_be_run_from_classpath
output = `java -cp \"#{COMPLETE_JAR}:test/jruby/dir with spaces/testgem.jar\" org.jruby.Main -S testgem`
assert output == "Testing... 1.. 2.. 3..\n"
end
def test_relative_require_from_gem_on_classpath
relative_require_gem = File.expand_path(File.join(File.dirname(__FILE__), "..", "samples", "relative_require.jar"))
`java -cp \"#{COMPLETE_JAR}:#{relative_require_gem}\" org.jruby.Main -rrelative_require -e "puts RelativeRequire::VERSION"`
assert $? == 0
end
end