rjb 1.4.7-x86-mswin32-100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +504 -0
- data/ChangeLog +646 -0
- data/data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class +0 -0
- data/ext/RBridge.java +39 -0
- data/ext/depend +23 -0
- data/ext/extconf.h +7 -0
- data/ext/jniwrap.h +34 -0
- data/ext/jp_co_infoseek_hp_arton_rjb_RBridge.h +21 -0
- data/ext/load.c +438 -0
- data/ext/riconv.c +218 -0
- data/ext/riconv.h +24 -0
- data/ext/rjb.c +3314 -0
- data/ext/rjb.h +164 -0
- data/ext/rjbexception.c +167 -0
- data/lib/rjb.rb +122 -0
- data/lib/rjbcore.so +0 -0
- data/lib/rjbextension.rb +1 -0
- data/readme.sj +27 -0
- data/readme.txt +35 -0
- data/samples/filechooser.rb +35 -0
- data/samples/unzip.rb +66 -0
- data/test/Two.class +0 -0
- data/test/TwoCaller.class +0 -0
- data/test/exttest.rb +39 -0
- data/test/gctest.rb +24 -0
- data/test/jartest.jar +0 -0
- data/test/jartest.rb +24 -0
- data/test/jartest2.jar +0 -0
- data/test/jartest2.rb +23 -0
- data/test/jartest3.rb +28 -0
- data/test/jp/co/infoseek/hp/arton/rjb/CallbackTest$Callback.class +0 -0
- data/test/jp/co/infoseek/hp/arton/rjb/CallbackTest.class +0 -0
- data/test/jp/co/infoseek/hp/arton/rjb/IBase.class +0 -0
- data/test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class +0 -0
- data/test/jp/co/infoseek/hp/arton/rjb/Test.class +0 -0
- data/test/listtest.rb +56 -0
- data/test/osx_jvmcheck.rb +9 -0
- data/test/rjbtest.jar +0 -0
- data/test/test.rb +882 -0
- data/test/test_osxjvm.rb +23 -0
- data/test/test_osxload.rb +64 -0
- data/test/test_unload.rb +26 -0
- metadata +93 -0
data/lib/rjbcore.so
ADDED
Binary file
|
data/lib/rjbextension.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'rjb/extension'
|
data/readme.sj
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
����
|
2
|
+
�E���炩���ߊ��ϐ���JAVA_HOME��ݒ肵�Ă����Ă��������B
|
3
|
+
�E���̏ꍇ�AJAVA_HOME�́AJ2SDK�̃C���X�g�[���f�B���N�g���̕K�v������܂��B
|
4
|
+
�E���炩���ߊ��ϐ�PATH��$JAVA_HOME/bin��ݒ肵�Ă����Ă��������B
|
5
|
+
�EWindows�̏ꍇ�APATH�ɂ�%PATH%;%JAVA_HOME%bin��ݒ肷�邱�ƂɂȂ�܂��B
|
6
|
+
�Eruby1.8�ȍ~�����s�ł���悤��PATH��ݒ肵�Ă����Ă��������B
|
7
|
+
|
8
|
+
�C���X�g�[�����@
|
9
|
+
1. unzip rjb-*
|
10
|
+
2. cd rjb-*
|
11
|
+
3. ruby setup.rb config
|
12
|
+
4. ruby setup.rb setup
|
13
|
+
5. sudo ruby setup.rb install
|
14
|
+
Windows�ł́A�قƂ�ǂ̏ꍇ�ŏ���sudo�͕s�v�ł��B�u�قƂ�ǂ̏ꍇ�v�ɊY�����Ȃ��ꍇ�͉����K�v���͂킩���Ă���͂��ł��̂Ő����͏ȗ����܂��B
|
15
|
+
|
16
|
+
���s��
|
17
|
+
�E���炩���ߊ��ϐ���JAVA_HOME��ݒ肵�Ă����Ă��������B
|
18
|
+
�E���̏ꍇ�AJAVA_HOME�́AJ2SDK�̃C���X�g�[���f�B���N�g���̕K�v������܂��B
|
19
|
+
�ELinux�Ɋւ��Ă�LD_LIBRARY_PATH�ɁAjava2�̋��L�I�u�W�F�N�g�f�B���N�g����ݒ肵�Ă����K�v������܂��B
|
20
|
+
|
21
|
+
�e�X�g������
|
22
|
+
Windows2000 SP4-ruby1.8.2-j2se1.5.0, Solaris9-ruby1.8.0-j2se1.4.2, Linux 2.4.26-ruby-1.8.1-j2se1.4.2
|
23
|
+
|
24
|
+
�A����
|
25
|
+
artonx@yahoo.co.jp
|
26
|
+
http://arton.no-ip.info/collabo/backyard/?RjbQandA (�L�����ɂ�diary�փc�b�R�~�����Ă��������j
|
27
|
+
|
data/readme.txt
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
Rjb is Ruby-Java bridge using Java Native Interface.
|
2
|
+
|
3
|
+
How to install
|
4
|
+
|
5
|
+
you need to install Java2 sdk, and setup JAVA_HOME enviromental varible except for OS X.
|
6
|
+
I assume that OS X's JAVA_HOME is reported by calling /usr/libexec/java_home.
|
7
|
+
|
8
|
+
then,
|
9
|
+
|
10
|
+
ruby setup.rb config
|
11
|
+
ruby setup.rb setup
|
12
|
+
|
13
|
+
(in Unix)
|
14
|
+
sudo ruby setup.rb install
|
15
|
+
or
|
16
|
+
(in win32)
|
17
|
+
ruby setup.rb install
|
18
|
+
|
19
|
+
How to test
|
20
|
+
in Win32
|
21
|
+
cd test
|
22
|
+
ruby test.rb
|
23
|
+
|
24
|
+
in Unix
|
25
|
+
see test/readme.unix
|
26
|
+
you must set LD_LIBRARY_PATH environmental variable to run rjb.
|
27
|
+
|
28
|
+
-- Notice for opening non-ASCII 7bit filename
|
29
|
+
If you'll plan to open the non-ascii character named file by Java class through Rjb, it may require to set LC_ALL environment variable in you sciprt.
|
30
|
+
For example in Rails, set above line in production.rb as your environment.
|
31
|
+
ENV['LC_ALL'] = 'en_us.utf8' # or ja_JP.utf8 etc.
|
32
|
+
cf: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4733494
|
33
|
+
(Thanks Paul for this information).
|
34
|
+
|
35
|
+
artonx@yahoo.co.jp
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/local/bin/ruby -Ks
|
2
|
+
#coding: cp932
|
3
|
+
|
4
|
+
require 'rjb'
|
5
|
+
|
6
|
+
Rjb::load
|
7
|
+
|
8
|
+
unless RUBY_VERSION =~ /^1\.9/
|
9
|
+
class String
|
10
|
+
def encode(s)
|
11
|
+
self
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class FileChooser
|
17
|
+
@@klass = Rjb::import('javax.swing.JFileChooser')
|
18
|
+
def initialize(ext = '*', desc = 'any files')
|
19
|
+
@selected = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def show()
|
23
|
+
chooser = @@klass.new
|
24
|
+
if chooser.showOpenDialog(nil) == @@klass.APPROVE_OPTION
|
25
|
+
@selected = chooser.getSelectedFile
|
26
|
+
end
|
27
|
+
end
|
28
|
+
attr_reader :selected
|
29
|
+
end
|
30
|
+
|
31
|
+
f = FileChooser.new
|
32
|
+
if f.show
|
33
|
+
puts f.selected.getAbsolutePath.encode('cp932')
|
34
|
+
end
|
35
|
+
puts 'bye'
|
data/samples/unzip.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rjb'
|
2
|
+
|
3
|
+
if Rjb::VERSION < '1.3.4'
|
4
|
+
$stderr.puts "require rjb-1.3.4 or later, bye."
|
5
|
+
exit 1
|
6
|
+
end
|
7
|
+
|
8
|
+
class ZipFile
|
9
|
+
include Enumerable
|
10
|
+
Zip = Rjb::import('java.util.zip.ZipFile')
|
11
|
+
def initialize(file, &block)
|
12
|
+
@zipfile = Zip.new(file)
|
13
|
+
if block
|
14
|
+
yield self
|
15
|
+
@zipfile.close
|
16
|
+
end
|
17
|
+
end
|
18
|
+
def close
|
19
|
+
@zipfile.close
|
20
|
+
end
|
21
|
+
def each(&block)
|
22
|
+
unless block
|
23
|
+
Enumerator.new(self)
|
24
|
+
else
|
25
|
+
e = @zipfile.entries
|
26
|
+
while e.has_more_elements
|
27
|
+
yield e.next_element
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
def size
|
32
|
+
@zipfile.size
|
33
|
+
end
|
34
|
+
def unzip(ent)
|
35
|
+
if String === ent
|
36
|
+
ent = @zipfile.entry(ent)
|
37
|
+
end
|
38
|
+
is = @zipfile.input_stream(ent)
|
39
|
+
buff = "\0" * 4096
|
40
|
+
File.open(ent.name, 'wb') do |fout|
|
41
|
+
loop do
|
42
|
+
len = is.read(buff, 0, buff.size)
|
43
|
+
break if len < 0
|
44
|
+
fout.write(buff[0, len])
|
45
|
+
end
|
46
|
+
is.close
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
if __FILE__ == $0
|
52
|
+
if ARGV.size == 0
|
53
|
+
puts 'usage: ruby unzip.rb filename'
|
54
|
+
else
|
55
|
+
ARGV.each do |file|
|
56
|
+
ZipFile.new(file) do |zip|
|
57
|
+
zip.each do |f|
|
58
|
+
puts "#{f.name}, #{f.size}"
|
59
|
+
unless f.directory?
|
60
|
+
zip.unzip(f)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/test/Two.class
ADDED
Binary file
|
Binary file
|
data/test/exttest.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/local/env ruby -Ku
|
2
|
+
# encoding: utf-8
|
3
|
+
# $Id:$
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'rjb'
|
7
|
+
rescue LoadError
|
8
|
+
require 'rubygems'
|
9
|
+
require 'rjb'
|
10
|
+
end
|
11
|
+
|
12
|
+
if Rjb::VERSION < '1.2.2'
|
13
|
+
puts "Rjb #{Rjb::VERSION} does not support rjbextension. exit"
|
14
|
+
exit 0
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'rjbextension'
|
18
|
+
require 'test/unit'
|
19
|
+
require 'fileutils'
|
20
|
+
|
21
|
+
FileUtils.rm_f 'jp/co/infoseek/hp/arton/rjb/Base.class'
|
22
|
+
|
23
|
+
puts "start RJB(#{Rjb::VERSION}) test"
|
24
|
+
class ExtTestRjb < Test::Unit::TestCase
|
25
|
+
|
26
|
+
def jp
|
27
|
+
JavaPackage.new('jp')
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_require_extension
|
31
|
+
assert !Rjb::loaded?
|
32
|
+
$LOAD_PATH << '.'
|
33
|
+
require 'rjbtest.jar'
|
34
|
+
Rjb::load
|
35
|
+
assert Rjb::loaded?
|
36
|
+
base = jp.co.infoseek.hp.arton.rjb.Base.new
|
37
|
+
assert_equal('hello', base.instance_var)
|
38
|
+
end
|
39
|
+
end
|
data/test/gctest.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rjb'
|
3
|
+
|
4
|
+
class TestRjbGC < Test::Unit::TestCase
|
5
|
+
include Rjb
|
6
|
+
def setup
|
7
|
+
load(nil, ['-verbose:gc'])
|
8
|
+
end
|
9
|
+
|
10
|
+
def tearDown
|
11
|
+
unload
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_gc
|
15
|
+
stringBuffer = import('java.lang.StringBuffer')
|
16
|
+
(0..1000).each do |i|
|
17
|
+
sb = stringBuffer.new
|
18
|
+
(0..1000).each do |j|
|
19
|
+
sb.append(' ')
|
20
|
+
end
|
21
|
+
GC.start
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/test/jartest.jar
ADDED
Binary file
|
data/test/jartest.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/local/env ruby -Ku
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rjb'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rjb'
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
|
12
|
+
class JarTest < Test::Unit::TestCase
|
13
|
+
include Rjb
|
14
|
+
|
15
|
+
def setup
|
16
|
+
Rjb::load()
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_depends
|
20
|
+
add_jar(File.expand_path('./jartest2.jar'))
|
21
|
+
add_jar(File.expand_path('./jartest.jar'))
|
22
|
+
assert Rjb::import('jp.co.infoseek.hp.arton.rjb.JarTest2')
|
23
|
+
end
|
24
|
+
end
|
data/test/jartest2.jar
ADDED
Binary file
|
data/test/jartest2.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/local/env ruby -Ku
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rjb'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rjb'
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
|
12
|
+
class JarTest < Test::Unit::TestCase
|
13
|
+
include Rjb
|
14
|
+
|
15
|
+
def setup
|
16
|
+
Rjb::load()
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_depends
|
20
|
+
add_jar([File.expand_path('./jartest2.jar'), File.expand_path('./jartest.jar')])
|
21
|
+
assert Rjb::import('jp.co.infoseek.hp.arton.rjb.JarTest2')
|
22
|
+
end
|
23
|
+
end
|
data/test/jartest3.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/local/env ruby -Ku
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rjb'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rjb'
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
|
12
|
+
class JarTest < Test::Unit::TestCase
|
13
|
+
include Rjb
|
14
|
+
|
15
|
+
def setup
|
16
|
+
Rjb::load()
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_depends
|
20
|
+
add_jar(File.expand_path('./jartest2.jar'))
|
21
|
+
begin
|
22
|
+
Rjb::import('jp.co.infoseek.hp.arton.rjb.JarTest2')
|
23
|
+
fail 'no exception'
|
24
|
+
rescue NoClassDefFoundError
|
25
|
+
assert true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/listtest.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/local/env ruby -Ku
|
2
|
+
# encoding: utf-8
|
3
|
+
=begin
|
4
|
+
Copyright(c) 2012 arton
|
5
|
+
=end
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'rjb/list'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rubygems'
|
11
|
+
require 'rjb/list'
|
12
|
+
end
|
13
|
+
require 'test/unit'
|
14
|
+
require 'fileutils'
|
15
|
+
|
16
|
+
class ListTest < Test::Unit::TestCase
|
17
|
+
include Rjb
|
18
|
+
def test_create
|
19
|
+
ja = import('java.util.ArrayList')
|
20
|
+
a = ja.new
|
21
|
+
a.add(1)
|
22
|
+
a.add(2)
|
23
|
+
a.add(3)
|
24
|
+
n = 1
|
25
|
+
a.each do |x|
|
26
|
+
assert_equal n, x.intValue
|
27
|
+
n += 1
|
28
|
+
end
|
29
|
+
assert_equal 4, n
|
30
|
+
end
|
31
|
+
def test_returned_proxy
|
32
|
+
ja = import('java.util.Arrays')
|
33
|
+
a = ja.as_list([1, 2, 3])
|
34
|
+
n = 1
|
35
|
+
a.each do |x|
|
36
|
+
assert_equal n, x.intValue
|
37
|
+
n += 1
|
38
|
+
end
|
39
|
+
assert_equal 4, n
|
40
|
+
end
|
41
|
+
def test_iterator
|
42
|
+
ja = import('java.util.Arrays')
|
43
|
+
it = ja.as_list([1, 2, 3]).iterator
|
44
|
+
n = 1
|
45
|
+
it.each do |x|
|
46
|
+
assert_equal n, x.intValue
|
47
|
+
n += 1
|
48
|
+
end
|
49
|
+
assert_equal 4, n
|
50
|
+
end
|
51
|
+
def test_enumerable
|
52
|
+
ja = import('java.util.Arrays')
|
53
|
+
assert_equal 55, ja.as_list((1..10).to_a).inject(0) {|r, e| r + e.intValue}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
data/test/rjbtest.jar
ADDED
Binary file
|
data/test/test.rb
ADDED
@@ -0,0 +1,882 @@
|
|
1
|
+
#!/usr/local/env ruby -Ku
|
2
|
+
# encoding: utf-8
|
3
|
+
# $Id: test.rb 199 2012-12-17 13:31:18Z arton $
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'rjb'
|
7
|
+
rescue LoadError
|
8
|
+
require 'rubygems'
|
9
|
+
require 'rjb'
|
10
|
+
end
|
11
|
+
require 'test/unit'
|
12
|
+
require 'fileutils'
|
13
|
+
|
14
|
+
FileUtils.rm_f 'jp/co/infoseek/hp/arton/rjb/Base.class'
|
15
|
+
FileUtils.rm_f 'jp/co/infoseek/hp/arton/rjb/ExtBase.class'
|
16
|
+
|
17
|
+
puts "start RJB(#{Rjb::VERSION}) test"
|
18
|
+
class TestRjb < Test::Unit::TestCase
|
19
|
+
include Rjb
|
20
|
+
def setup
|
21
|
+
Rjb::load('.')
|
22
|
+
Rjb::add_jar(File.expand_path('rjbtest.jar'))
|
23
|
+
Rjb::primitive_conversion = false
|
24
|
+
|
25
|
+
@jString = import('java.lang.String')
|
26
|
+
@jInteger = import('java.lang.Integer')
|
27
|
+
@jShort = import('java.lang.Short')
|
28
|
+
@jDouble = import('java.lang.Double')
|
29
|
+
@jFloat = import('java.lang.Float')
|
30
|
+
@jBoolean = import('java.lang.Boolean')
|
31
|
+
@jByte = import('java.lang.Byte')
|
32
|
+
@jLong = import('java.lang.Long')
|
33
|
+
@jChar = import('java.lang.Character')
|
34
|
+
end
|
35
|
+
|
36
|
+
def teardown
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_metaclass
|
40
|
+
cls = import('java.lang.Class')
|
41
|
+
assert_equal('java.lang.Class', cls._classname)
|
42
|
+
assert_equal('java.lang.Class', cls.getName)
|
43
|
+
assert_equal(17, cls.getModifiers)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_scalar
|
47
|
+
assert_equal('java.lang.Class', @jString._classname)
|
48
|
+
assert_equal('class java.lang.String', @jString.toString)
|
49
|
+
str = @jString.new
|
50
|
+
assert_equal('java.lang.String', str._classname)
|
51
|
+
assert_equal(0, str.length)
|
52
|
+
assert_equal('', str.toString)
|
53
|
+
str = @jString.new_with_sig('Ljava.lang.String;', "abcde")
|
54
|
+
# result integer
|
55
|
+
assert_equal(5, str.length)
|
56
|
+
# result string
|
57
|
+
assert_equal('abcde', str.toString)
|
58
|
+
# argument test
|
59
|
+
# char
|
60
|
+
assert_equal('abxde', str.replace("c".sum, "x".sum))
|
61
|
+
# string
|
62
|
+
assert_equal('abdxe', str.replaceAll('cd', 'dx'))
|
63
|
+
# int
|
64
|
+
assert_equal('bc', str.substring(1, 3))
|
65
|
+
assert_equal('e', str.substring(4))
|
66
|
+
# float with static
|
67
|
+
assert_equal('5.23', @jString._invoke('valueOf', 'F', 5.23))
|
68
|
+
assert_equal('25.233', @jString._invoke('valueOf', 'D', 25.233))
|
69
|
+
# rjb object (String)
|
70
|
+
str2 = @jString.new_with_sig('Ljava.lang.String;', 'fghijk')
|
71
|
+
assert_equal('abcdefghijk', str.concat(str2))
|
72
|
+
# rjb object other (implicit toString call is Rjb feature)
|
73
|
+
i = @jInteger.new_with_sig('I', 35901)
|
74
|
+
assert_equal('abcde35901', str.concat(i))
|
75
|
+
# result boolean and argument is rjb object
|
76
|
+
assert_equal(false, i.equals(str))
|
77
|
+
assert_equal(false, str.equals(i))
|
78
|
+
assert_equal(true, str.equals("abcde"))
|
79
|
+
assert_equal(true, str.equals(str))
|
80
|
+
# long
|
81
|
+
l = @jLong.new_with_sig('J', -9223372036854775808)
|
82
|
+
assert_equal(-9223372036854775808, l.longValue)
|
83
|
+
l = @jLong.new_with_sig('J', 9223372036854775807)
|
84
|
+
assert_equal(9223372036854775807, l.longValue)
|
85
|
+
# double
|
86
|
+
d = @jDouble.new_with_sig('D', 1234.5678901234567890)
|
87
|
+
assert_equal(1234.5678901234567890, d.doubleValue)
|
88
|
+
# byte
|
89
|
+
b = @jByte.new_with_sig('B', 13)
|
90
|
+
assert_equal(13, b.byteValue)
|
91
|
+
# float
|
92
|
+
f = @jFloat.new_with_sig('F', 13.5)
|
93
|
+
assert_equal(13.5, f.floatValue)
|
94
|
+
# short
|
95
|
+
s = @jShort.new_with_sig('S', 1532)
|
96
|
+
assert_equal(1532, s.shortValue)
|
97
|
+
c = @jChar.new_with_sig('C', "A".sum)
|
98
|
+
assert_equal("A".sum, c.charValue)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_array
|
102
|
+
str = @jString.new_with_sig('[C', ["a".sum, "b".sum, "c".sum, "d".sum, "e".sum, "c".sum, "f".sum, "c".sum, "g".sum])
|
103
|
+
assert_equal('abcdecfcg', str.toString)
|
104
|
+
# conv string array
|
105
|
+
splt = str.split('c')
|
106
|
+
assert(Array === splt)
|
107
|
+
assert_equal(4, splt.size)
|
108
|
+
assert_equal('ab', splt[0])
|
109
|
+
assert_equal('g', splt[3])
|
110
|
+
# conv byte array to (ruby)string
|
111
|
+
ba = str.getBytes
|
112
|
+
assert_equal('abcdecfcg', ba)
|
113
|
+
# conv char array to array(int)
|
114
|
+
ca = str.toCharArray
|
115
|
+
assert_equal(["a".sum, "b".sum, "c".sum, "d".sum, "e".sum, "c".sum, "f".sum, "c".sum, "g".sum], ca)
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_importobj()
|
119
|
+
sys = import('java.lang.System')
|
120
|
+
props = sys.getProperties
|
121
|
+
assert_equal('java.util.Properties', props._classname)
|
122
|
+
if /cygwin/ =~ RUBY_PLATFORM # patch for dirty environment
|
123
|
+
assert_equal(Dir::pwd, %x[cygpath -u #{props.getProperty('user.dir').gsub('\\', '/')}].chop)
|
124
|
+
else
|
125
|
+
assert_equal(Dir::pwd, props.getProperty('user.dir').gsub('\\', '/'))
|
126
|
+
end
|
127
|
+
assert_equal(@jBoolean.valueOf(true).booleanValue(), true)
|
128
|
+
assert_equal(@jBoolean.valueOf(false).booleanValue(), false)
|
129
|
+
assert_equal(@jBoolean.valueOf('true').booleanValue(), true)
|
130
|
+
assert_equal(@jBoolean.valueOf('false').booleanValue(), false)
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_importobjarray()
|
134
|
+
jarray = import('java.util.ArrayList')
|
135
|
+
a = jarray.new()
|
136
|
+
a.add(@jInteger.new_with_sig('I', 1))
|
137
|
+
a.add(@jInteger.new_with_sig('I', 2))
|
138
|
+
a.add(@jInteger.new_with_sig('I', 3))
|
139
|
+
oa = a.toArray
|
140
|
+
assert_equal(3, oa.size)
|
141
|
+
assert_equal(1, oa[0].intValue)
|
142
|
+
assert_equal(2, oa[1].intValue)
|
143
|
+
assert_equal(3, oa[2].intValue)
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_kjconv()
|
147
|
+
if Object::const_defined?(:Encoding)
|
148
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
149
|
+
euc_kj = "\xb4\xc1\xbb\xfa\xa5\xc6\xa5\xad\xa5\xb9\xa5\xc8".force_encoding Encoding::EUC_JP
|
150
|
+
s = @jString.new(euc_kj)
|
151
|
+
assert_equal(s.toString().encoding, Encoding::UTF_8)
|
152
|
+
assert(test.isSameString(s))
|
153
|
+
assert(test.isSameString(euc_kj))
|
154
|
+
assert_equal(s.toString().encode(Encoding::EUC_JP), euc_kj)
|
155
|
+
sjis_kj = "\x8a\xbf\x8e\x9a\x83\x65\x83\x4c\x83\x58\x83\x67".force_encoding Encoding::SHIFT_JIS
|
156
|
+
s = @jString.new(sjis_kj)
|
157
|
+
assert_equal(s.toString().encoding, Encoding::UTF_8)
|
158
|
+
assert(test.isSameString(s))
|
159
|
+
assert(test.isSameString(sjis_kj))
|
160
|
+
assert_equal(s.toString().encode(Encoding::SHIFT_JIS), sjis_kj)
|
161
|
+
utf8_kj = "\xE6\xBC\xA2\xE5\xAD\x97\xE3\x83\x86\xE3\x82\xAD\xE3\x82\xB9\xE3\x83\x88".force_encoding Encoding::UTF_8
|
162
|
+
s = @jString.new(utf8_kj)
|
163
|
+
assert_equal(s.toString().encoding, Encoding::UTF_8)
|
164
|
+
assert(test.isSameString(s))
|
165
|
+
assert(test.isSameString(utf8_kj))
|
166
|
+
assert_equal(s.toString().encode(Encoding::UTF_8), utf8_kj)
|
167
|
+
iso2022jp_kj = "\x1b\x24\x42\x34\x41\x3b\x7a\x25\x46\x25\x2d\x25\x39\x25\x48\x1b\x28\x42".force_encoding Encoding::ISO_2022_JP
|
168
|
+
s = @jString.new(iso2022jp_kj)
|
169
|
+
assert_equal(s.toString().encoding, Encoding::UTF_8)
|
170
|
+
assert(test.isSameString(s))
|
171
|
+
assert(test.isSameString(iso2022jp_kj))
|
172
|
+
assert_equal(s.toString().encode(Encoding::ISO_2022_JP), iso2022jp_kj)
|
173
|
+
assert_equal(@jString.new("abcdef".force_encoding(Encoding::ASCII_8BIT)).toString(), "abcdef")
|
174
|
+
assert_equal(@jString.new("abcdef".force_encoding(Encoding::find("us-ascii"))).toString(), "abcdef")
|
175
|
+
else
|
176
|
+
default_kcode = $KCODE
|
177
|
+
begin
|
178
|
+
$KCODE = 'euc'
|
179
|
+
euc_kj = "\xb4\xc1\xbb\xfa\xa5\xc6\xa5\xad\xa5\xb9\xa5\xc8"
|
180
|
+
s = @jString.new(euc_kj)
|
181
|
+
assert_equal(s.toString(), euc_kj)
|
182
|
+
$KCODE = 'sjis'
|
183
|
+
sjis_kj = "\x8a\xbf\x8e\x9a\x83\x65\x83\x4c\x83\x58\x83\x67"
|
184
|
+
s = @jString.new(sjis_kj)
|
185
|
+
assert_equal(s.toString(), sjis_kj)
|
186
|
+
$KCODE = 'utf8'
|
187
|
+
utf8_kj = "\xE6\xBC\xA2\xE5\xAD\x97\xE3\x83\x86\xE3\x82\xAD\xE3\x82\xB9\xE3\x83\x88"
|
188
|
+
s = @jString.new(utf8_kj)
|
189
|
+
assert_equal(s.toString(), utf8_kj)
|
190
|
+
$KCODE = 'none'
|
191
|
+
if /mswin(?!ce)|mingw|cygwin|bccwin/ =~ RUBY_PLATFORM
|
192
|
+
#expecting shift_jis on windows
|
193
|
+
none_kj = "\x8a\xbf\x8e\x9a\x83\x65\x83\x4c\x83\x58\x83\x67"
|
194
|
+
else
|
195
|
+
#expecting utf-8 unless windows
|
196
|
+
none_kj = "\xE6\xBC\xA2\xE5\xAD\x97\xE3\x83\x86\xE3\x82\xAD\xE3\x82\xB9\xE3\x83\x88"
|
197
|
+
end
|
198
|
+
s = @jString.new(none_kj)
|
199
|
+
assert_equal(s.toString(), none_kj)
|
200
|
+
$KCODE = 'utf8'
|
201
|
+
utf8_kj = "\xE6\xBC\xA2\xE5\xAD\x97\xE3\x83\x86\xE3\x82\xAD\xE3\x82\xB9\xE3\x83\x88"
|
202
|
+
s = @jString.new(utf8_kj)
|
203
|
+
assert_equal(s.toString(), utf8_kj)
|
204
|
+
$KCODE = 'sjis'
|
205
|
+
sjis_kj = "\x8a\xbf\x8e\x9a\x83\x65\x83\x4c\x83\x58\x83\x67"
|
206
|
+
s = @jString.new(sjis_kj)
|
207
|
+
assert_equal(s.toString(), sjis_kj)
|
208
|
+
$KCODE = 'euc'
|
209
|
+
euc_kj = "\xb4\xc1\xbb\xfa\xa5\xc6\xa5\xad\xa5\xb9\xa5\xc8"
|
210
|
+
s = @jString.new(euc_kj)
|
211
|
+
assert_equal(s.toString(), euc_kj)
|
212
|
+
ensure
|
213
|
+
$KCODE = default_kcode
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_combination_charcters
|
219
|
+
teststr = "\xc7\x96\xc3\xbc\xcc\x84\x75\xcc\x88\xcc\x84\xed\xa1\xa9\xed\xba\xb2\xe3\x81\x8b\xe3\x82\x9a"
|
220
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
221
|
+
s = test.getUmlaut()
|
222
|
+
if Object::const_defined?(:Encoding) #>=1.9
|
223
|
+
teststr = teststr.force_encoding(Encoding::UTF_8)
|
224
|
+
assert_equal(s, teststr)
|
225
|
+
else
|
226
|
+
default_kcode = $KCODE
|
227
|
+
begin
|
228
|
+
$KCODE = "utf8"
|
229
|
+
assert_equal(s, teststr)
|
230
|
+
ensure
|
231
|
+
$KCODE = default_kcode
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_constants()
|
237
|
+
assert_equal(0x7fffffffffffffff, @jLong.MAX_VALUE)
|
238
|
+
assert_equal(-9223372036854775808, @jLong.MIN_VALUE)
|
239
|
+
end
|
240
|
+
|
241
|
+
class TestIter
|
242
|
+
def initialize()
|
243
|
+
@i = 5
|
244
|
+
end
|
245
|
+
def hasNext()
|
246
|
+
@i > 0
|
247
|
+
end
|
248
|
+
def next()
|
249
|
+
@i -= 1
|
250
|
+
@i.to_s
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_newobject()
|
255
|
+
it = TestIter.new
|
256
|
+
it = bind(it, 'java.util.Iterator')
|
257
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test')
|
258
|
+
a = test.new
|
259
|
+
assert_equal("43210", a.concat(it))
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_unbind()
|
263
|
+
it = TestIter.new
|
264
|
+
it = bind(it, 'java.util.Iterator')
|
265
|
+
assert_equal(it, unbind(it))
|
266
|
+
end
|
267
|
+
|
268
|
+
class TestComparator
|
269
|
+
def compare(o1, o2)
|
270
|
+
o1.to_i - o2.to_i
|
271
|
+
end
|
272
|
+
def equals(o)
|
273
|
+
o == self
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
def test_comparator
|
278
|
+
cp = TestComparator.new
|
279
|
+
cp = bind(cp, 'java.util.Comparator')
|
280
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test')
|
281
|
+
a = test.new
|
282
|
+
assert_equal(0, a.check(cp, 123, 123))
|
283
|
+
assert_equal(5, a.check(cp, 81, 76))
|
284
|
+
assert_equal(-5, a.check(cp, 76, 81))
|
285
|
+
end
|
286
|
+
|
287
|
+
# assert_raise is useless in this test, because NumberFormatException may be defined in
|
288
|
+
# its block.
|
289
|
+
def test_exception()
|
290
|
+
begin
|
291
|
+
@jInteger.parseInt('blabla')
|
292
|
+
flunk('no exception')
|
293
|
+
rescue NumberFormatException => e
|
294
|
+
assert_nil(e.cause)
|
295
|
+
# OK
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
class TestIterator
|
300
|
+
def initialize(tp)
|
301
|
+
@type = tp
|
302
|
+
end
|
303
|
+
def hasNext()
|
304
|
+
true
|
305
|
+
end
|
306
|
+
def next()
|
307
|
+
if @type == 0
|
308
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
309
|
+
elsif @type == 1
|
310
|
+
Rjb::throw(Rjb::import('java.util.NoSuchElementException').new('instance test'))
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
def test_throw()
|
316
|
+
it = TestIterator.new(0)
|
317
|
+
it = bind(it, 'java.util.Iterator')
|
318
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test')
|
319
|
+
a = test.new
|
320
|
+
begin
|
321
|
+
a.concat(it)
|
322
|
+
flunk('no exception')
|
323
|
+
rescue NoSuchElementException => e
|
324
|
+
assert_equal('test exception', e.message)
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
def test_instance_throw()
|
329
|
+
it = TestIterator.new(1)
|
330
|
+
it = bind(it, 'java.util.Iterator')
|
331
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test')
|
332
|
+
a = test.new
|
333
|
+
begin
|
334
|
+
a.concat(it)
|
335
|
+
flunk('no exception')
|
336
|
+
rescue NoSuchElementException => e
|
337
|
+
assert_equal('instance test', e.message)
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_null_string()
|
342
|
+
sys = import('java.lang.System')
|
343
|
+
begin
|
344
|
+
sys.getProperty(nil)
|
345
|
+
flunk('no exception')
|
346
|
+
rescue NullPointerException => e
|
347
|
+
assert(true)
|
348
|
+
rescue RuntimeError => e
|
349
|
+
flunk(e.message)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
def test_throw_error()
|
354
|
+
begin
|
355
|
+
throw(self)
|
356
|
+
flunk('no exception')
|
357
|
+
rescue TypeError => e
|
358
|
+
end
|
359
|
+
begin
|
360
|
+
throw(@jString.new('a'))
|
361
|
+
flunk('no exception')
|
362
|
+
rescue RuntimeError => e
|
363
|
+
assert_equal('arg1 must be a throwable', e.message)
|
364
|
+
end
|
365
|
+
begin
|
366
|
+
throw('java.lang.NoSuchException', 'test')
|
367
|
+
flunk('no excpetion')
|
368
|
+
rescue RuntimeError => e
|
369
|
+
assert_equal("`java.lang.NoSuchException' not found", e.message)
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def test_throw_clear()
|
374
|
+
assert_nothing_raised {
|
375
|
+
begin
|
376
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
377
|
+
rescue #drop ruby exception
|
378
|
+
end
|
379
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test')
|
380
|
+
begin
|
381
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
382
|
+
rescue #drop ruby exception
|
383
|
+
end
|
384
|
+
test.new
|
385
|
+
begin
|
386
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
387
|
+
rescue #drop ruby exception
|
388
|
+
end
|
389
|
+
@jString.new_with_sig('Ljava.lang.String;', "abcde")
|
390
|
+
begin
|
391
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
392
|
+
rescue #drop ruby exception
|
393
|
+
end
|
394
|
+
it = TestIterator.new(0)
|
395
|
+
it = bind(it, 'java.util.Iterator')
|
396
|
+
begin
|
397
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
398
|
+
rescue NoSuchElementException
|
399
|
+
end
|
400
|
+
begin
|
401
|
+
Rjb::throw('java.lang.IllegalAccessException', 'test exception')
|
402
|
+
rescue IllegalAccessException
|
403
|
+
end
|
404
|
+
unbind(it)
|
405
|
+
}
|
406
|
+
end
|
407
|
+
|
408
|
+
def test_field()
|
409
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
410
|
+
assert_equal('Hello World !!', test.helloData)
|
411
|
+
test.helloData = 'Goodby World !'
|
412
|
+
assert_equal('Goodby World !', test.helloData)
|
413
|
+
end
|
414
|
+
|
415
|
+
def test_instancemethod_from_class()
|
416
|
+
begin
|
417
|
+
assert_equal('true', @jString.valueOf(true))
|
418
|
+
@jString.length
|
419
|
+
flunk('no exception')
|
420
|
+
rescue RuntimeError => e
|
421
|
+
assert_equal('instance method `length\' for class', e.message)
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
def test_instancefield_from_class()
|
426
|
+
point = import('java.awt.Point')
|
427
|
+
begin
|
428
|
+
point.x
|
429
|
+
flunk('no exception')
|
430
|
+
rescue RuntimeError => e
|
431
|
+
assert_equal('instance field `x\' for class', e.message)
|
432
|
+
end
|
433
|
+
begin
|
434
|
+
point.x = 30
|
435
|
+
rescue RuntimeError => e
|
436
|
+
assert_equal('instance field `x\' for class', e.message)
|
437
|
+
end
|
438
|
+
end
|
439
|
+
|
440
|
+
def test_static_derived_method()
|
441
|
+
ext = import('jp.co.infoseek.hp.arton.rjb.ExtBase')
|
442
|
+
assert_equal("sVal", ext.getSVal)
|
443
|
+
end
|
444
|
+
|
445
|
+
def test_capitalized_method()
|
446
|
+
bs = import('jp.co.infoseek.hp.arton.rjb.Base')
|
447
|
+
assert_equal("val", bs.val)
|
448
|
+
assert_equal("Val", bs.Val)
|
449
|
+
end
|
450
|
+
|
451
|
+
def test_underscored_constant()
|
452
|
+
bs = import('jp.co.infoseek.hp.arton.rjb.Base')
|
453
|
+
assert_equal(5, bs._NUMBER_FIVE)
|
454
|
+
end
|
455
|
+
|
456
|
+
def test_passingclass()
|
457
|
+
ibs = import('jp.co.infoseek.hp.arton.rjb.IBase')
|
458
|
+
bs = import('jp.co.infoseek.hp.arton.rjb.Base')
|
459
|
+
assert_equal('interface jp.co.infoseek.hp.arton.rjb.IBase', bs.intf(ibs))
|
460
|
+
end
|
461
|
+
|
462
|
+
def test_fornamehook()
|
463
|
+
# j2se class
|
464
|
+
cls = import('java.lang.Class')
|
465
|
+
c = cls.forName('java.lang.Class')
|
466
|
+
assert_equal(cls, c)
|
467
|
+
# user class
|
468
|
+
bs = import('jp.co.infoseek.hp.arton.rjb.Base')
|
469
|
+
b = cls.forName('jp.co.infoseek.hp.arton.rjb.Base')
|
470
|
+
assert_equal(bs, b)
|
471
|
+
# check class that was loaded from classpath
|
472
|
+
loader = Rjb::import('java.lang.ClassLoader')
|
473
|
+
b = cls.forName('jp.co.infoseek.hp.arton.rjb.IBase', true, loader.getSystemClassLoader)
|
474
|
+
assert(b.isInterface)
|
475
|
+
end
|
476
|
+
|
477
|
+
def test_send_array_of_arrays()
|
478
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
479
|
+
a = test.joinStringArray([['ab', 'cd'], ['ef', 'gh']])
|
480
|
+
assert_equal(['ab', 'cd', 'ef', 'gh'], a)
|
481
|
+
a = test.joinIntArray([[1, 2, 3], [4, 5, 6]])
|
482
|
+
a.collect! {|e| e.intValue }
|
483
|
+
assert_equal([1, 2, 3, 4, 5, 6], a)
|
484
|
+
r = [[[ 1, 2], [2, 3] ], [[ 3, 4], [5, 6]], [[7, 8], [1, 3]]]
|
485
|
+
a = test.throughIntArray(r)
|
486
|
+
assert_equal(a, r)
|
487
|
+
end
|
488
|
+
|
489
|
+
def test_import_and_instanciate()
|
490
|
+
b = import('jp.co.infoseek.hp.arton.rjb.Base')
|
491
|
+
assert_equal('hello', b.new.getInstanceVar())
|
492
|
+
end
|
493
|
+
|
494
|
+
def test_array_of_arrays()
|
495
|
+
jversion = import('java.lang.System').getProperty('java.version')
|
496
|
+
if /^1\.5/ =~ jversion
|
497
|
+
method = import('java.lang.reflect.Method')
|
498
|
+
end
|
499
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
500
|
+
a = test.getStringArrayOfArrays()
|
501
|
+
assert_equal("abc", a[0][0])
|
502
|
+
assert_equal("def", a[0][1])
|
503
|
+
assert_equal("123", a[1][0])
|
504
|
+
assert_equal("456", a[1][1])
|
505
|
+
|
506
|
+
ints = test.getIntArrayOfArrays()
|
507
|
+
assert_equal(2, ints.size )
|
508
|
+
assert_equal([1,2,3], ints[0] )
|
509
|
+
assert_equal([[1,2,3],[4,5,6]], ints )
|
510
|
+
|
511
|
+
sized = test.getSizedArray()
|
512
|
+
assert_equal("find me",sized[0][1][2][3])
|
513
|
+
|
514
|
+
mixed = test.getMixedArray()
|
515
|
+
assert_equal(12,mixed[0][0][0].intValue)
|
516
|
+
assert_equal("another string",mixed[1][0][1].toString)
|
517
|
+
assert_equal([],mixed[2])
|
518
|
+
end
|
519
|
+
|
520
|
+
def test_CastObjectArray()
|
521
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
522
|
+
a = test.getObjectArray()
|
523
|
+
assert_equal(1, a[0].intValue)
|
524
|
+
assert_equal('Hello World !', a[1].toString)
|
525
|
+
a = test.getObjectArrayOfArray()
|
526
|
+
assert_equal(1, a[0][0].intValue)
|
527
|
+
assert_equal('Hello World !', a[0][1].toString)
|
528
|
+
assert_equal(2, a[1][0].intValue)
|
529
|
+
assert_equal('Hello World !!', a[1][1].toString)
|
530
|
+
end
|
531
|
+
|
532
|
+
def test_CallByNullForArrays()
|
533
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
534
|
+
assert_equal(nil, test.callWithArrays(nil, nil, nil, nil, nil, nil,
|
535
|
+
nil, nil))
|
536
|
+
end
|
537
|
+
|
538
|
+
def test_failed_constructor_call()
|
539
|
+
begin
|
540
|
+
s = @jString.new('a', 'b', 'c')
|
541
|
+
flunk('no exception')
|
542
|
+
rescue RuntimeError => e
|
543
|
+
assert(e)
|
544
|
+
end
|
545
|
+
end
|
546
|
+
|
547
|
+
def test_rubyize
|
548
|
+
loader = Rjb::import('java.lang.ClassLoader')
|
549
|
+
cls = import('java.lang.Class')
|
550
|
+
b = cls.for_name('jp.co.infoseek.hp.arton.rjb.IBase', true, loader.system_class_loader)
|
551
|
+
assert(b.interface?)
|
552
|
+
stringbuffer = Rjb::import('java.lang.StringBuffer')
|
553
|
+
sb = stringbuffer.new('abc')
|
554
|
+
assert_equal(1, sb.index_of('bc'))
|
555
|
+
sb.set_char_at(1, "B".sum)
|
556
|
+
assert_equal('aBc', sb.to_string)
|
557
|
+
sb.length = 2
|
558
|
+
assert_equal('aB', sb.to_string)
|
559
|
+
end
|
560
|
+
|
561
|
+
def test_auto_conv
|
562
|
+
assert_equal(false, Rjb::primitive_conversion)
|
563
|
+
Rjb::primitive_conversion = true
|
564
|
+
assert_equal(true, Rjb::primitive_conversion)
|
565
|
+
assert_equal(1, @jInteger.valueOf('1'))
|
566
|
+
assert_equal(-1, @jInteger.valueOf('-1'))
|
567
|
+
assert_equal(2, @jShort.valueOf('2'))
|
568
|
+
assert_equal(-2, @jShort.valueOf('-2'))
|
569
|
+
assert_equal(3.1, @jDouble.valueOf('3.1'))
|
570
|
+
assert_equal(4.5, @jFloat.valueOf('4.5'))
|
571
|
+
assert(@jBoolean.TRUE)
|
572
|
+
assert_equal(5, @jByte.valueOf('5'))
|
573
|
+
assert_equal(-6, @jByte.valueOf('-6'))
|
574
|
+
assert_equal(0x7000000000000000, @jLong.valueOf('8070450532247928832'))
|
575
|
+
assert_equal(-9223372036854775807, @jLong.valueOf('-9223372036854775807'))
|
576
|
+
assert_equal("A".sum, @jChar.valueOf("A".sum))
|
577
|
+
end
|
578
|
+
|
579
|
+
def test_obj_to_primitive
|
580
|
+
ar = Rjb::import('java.util.ArrayList')
|
581
|
+
a = ar.new
|
582
|
+
a.add @jString.new('abcdef')
|
583
|
+
a.add @jInteger.valueOf('1')
|
584
|
+
a.add @jShort.valueOf('2')
|
585
|
+
a.add @jDouble.valueOf('3.1')
|
586
|
+
a.add @jFloat.valueOf('4.5')
|
587
|
+
a.add @jBoolean.TRUE
|
588
|
+
a.add @jByte.valueOf('5')
|
589
|
+
a.add @jLong.valueOf('8070450532247928832')
|
590
|
+
a.add @jChar.valueOf("A".sum)
|
591
|
+
|
592
|
+
Rjb::primitive_conversion = true
|
593
|
+
|
594
|
+
assert_equal 'abcdef', a.get(0)
|
595
|
+
assert_equal 1, a.get(1)
|
596
|
+
assert_equal 2, a.get(2)
|
597
|
+
assert_equal 3.1, a.get(3)
|
598
|
+
assert_equal 4.5, a.get(4)
|
599
|
+
assert a.get(5)
|
600
|
+
assert_equal 5, a.get(6)
|
601
|
+
assert_equal 8070450532247928832, a.get(7)
|
602
|
+
assert_equal "A".sum, a.get(8)
|
603
|
+
end
|
604
|
+
|
605
|
+
def test_primitive_to_obj
|
606
|
+
Rjb::primitive_conversion = true
|
607
|
+
|
608
|
+
ar = Rjb::import('java.util.ArrayList')
|
609
|
+
a = ar.new
|
610
|
+
a.add @jString.new('abcdef')
|
611
|
+
a.add @jInteger.valueOf('1')
|
612
|
+
a.add @jShort.valueOf('2')
|
613
|
+
a.add @jDouble.valueOf('3.1')
|
614
|
+
a.add @jFloat.valueOf('4.5')
|
615
|
+
a.add @jBoolean.TRUE
|
616
|
+
a.add @jByte.valueOf('5')
|
617
|
+
a.add @jLong.valueOf('8070450532247928832')
|
618
|
+
a.add @jChar.valueOf("A".sum)
|
619
|
+
assert_equal 'abcdef', a.get(0)
|
620
|
+
assert_equal 1, a.get(1)
|
621
|
+
assert_equal 2, a.get(2)
|
622
|
+
assert_equal 3.1, a.get(3)
|
623
|
+
assert_equal 4.5, a.get(4)
|
624
|
+
assert a.get(5)
|
625
|
+
assert_equal 5, a.get(6)
|
626
|
+
assert_equal 8070450532247928832, a.get(7)
|
627
|
+
assert_equal "A".sum, a.get(8)
|
628
|
+
end
|
629
|
+
|
630
|
+
def test_enum
|
631
|
+
t = Rjb::import('jp.co.infoseek.hp.arton.rjb.Test$TestTypes')
|
632
|
+
assert t.ONE.equals(t.values()[0])
|
633
|
+
assert_equal 3, t.values().size
|
634
|
+
assert_equal 2, t.THREE.ordinal
|
635
|
+
assert_equal "TWO", t.TWO.name
|
636
|
+
assert_equal "THREE", t.THREE.toString
|
637
|
+
end
|
638
|
+
|
639
|
+
#rjb-bugs-15430 rebported by Bryan Duxbury
|
640
|
+
def test_generics_map
|
641
|
+
|
642
|
+
ctest = import('jp.co.infoseek.hp.arton.rjb.Test')
|
643
|
+
test = ctest.new
|
644
|
+
map = test.sorted_map
|
645
|
+
assert_equal "\0\x1\x2\x3\x4", map.get('abc')
|
646
|
+
assert_equal "\x5\x6\x7\x8\x9", map.get('def')
|
647
|
+
|
648
|
+
cmap = import('java.util.TreeMap')
|
649
|
+
map = cmap.new
|
650
|
+
map.put('abc', @jString.new('abc').bytes)
|
651
|
+
map.put('012', @jString.new('012').bytes)
|
652
|
+
|
653
|
+
Rjb::primitive_conversion = true
|
654
|
+
map2 = test.throughSortedMap(map)
|
655
|
+
assert_equal '012', map2.get('012')
|
656
|
+
assert_equal 'abc', map2.get('abc')
|
657
|
+
end
|
658
|
+
|
659
|
+
def x_test_zzunload
|
660
|
+
# this test should run at the last
|
661
|
+
unload
|
662
|
+
begin
|
663
|
+
load('.')
|
664
|
+
fail 'no exception'
|
665
|
+
rescue
|
666
|
+
assert_equal "can't create Java VM", $!.message
|
667
|
+
end
|
668
|
+
end
|
669
|
+
|
670
|
+
module TestMixin
|
671
|
+
def test_hello(s)
|
672
|
+
'hello ' + s
|
673
|
+
end
|
674
|
+
end
|
675
|
+
def test_extend
|
676
|
+
@jString.class_eval do
|
677
|
+
include TestRjb::TestMixin
|
678
|
+
end
|
679
|
+
s = @jString.new
|
680
|
+
assert_equal('hello world', s.test_hello('world'))
|
681
|
+
end
|
682
|
+
def test_extend_with_factory
|
683
|
+
point = import('java.awt.Point')
|
684
|
+
point.class_eval do
|
685
|
+
include TestRjb::TestMixin
|
686
|
+
end
|
687
|
+
p = point.new(11, 12)
|
688
|
+
assert_equal(11, p.x)
|
689
|
+
assert_equal(12, p.y)
|
690
|
+
assert_equal('hello world', p.test_hello('world'))
|
691
|
+
p = p.location
|
692
|
+
assert_equal(11, p.x)
|
693
|
+
assert_equal(12, p.y)
|
694
|
+
assert_equal('hello world', p.test_hello('world'))
|
695
|
+
end
|
696
|
+
def test_fetch_method_signature
|
697
|
+
expected = ['I', 'II', 'Ljava.lang.String;', 'Ljava.lang.String;I']
|
698
|
+
sig = @jString.sigs('indexOf').sort
|
699
|
+
assert_equal(expected, sig)
|
700
|
+
end
|
701
|
+
def test_fetch_method_without_signature
|
702
|
+
sig =
|
703
|
+
assert_equal([nil], @jString.sigs('toString'))
|
704
|
+
end
|
705
|
+
def test_fetch_static_method_signature
|
706
|
+
expected = ['Ljava.lang.String;[Ljava.lang.Object;',
|
707
|
+
'Ljava.util.Locale;Ljava.lang.String;[Ljava.lang.Object;']
|
708
|
+
sig = @jString.static_sigs('format').sort
|
709
|
+
assert_equal(expected, sig)
|
710
|
+
end
|
711
|
+
def test_fetch_ctor_signature
|
712
|
+
expected = ['I', 'Ljava.lang.String;']
|
713
|
+
sig = @jInteger.ctor_sigs.sort
|
714
|
+
assert_equal(expected, sig)
|
715
|
+
end
|
716
|
+
def test_methods_extension
|
717
|
+
m = @jString.new('').methods
|
718
|
+
assert m.include?('indexOf')
|
719
|
+
end
|
720
|
+
def test_class_methods_extension
|
721
|
+
m = @jString.methods
|
722
|
+
assert m.include?('format')
|
723
|
+
end
|
724
|
+
def test_pmethods_extension
|
725
|
+
m = @jString.new('').public_methods
|
726
|
+
assert m.include?('indexOf')
|
727
|
+
end
|
728
|
+
def test_class_pmethods_extension
|
729
|
+
m = @jString.public_methods
|
730
|
+
assert m.include?('format')
|
731
|
+
end
|
732
|
+
def test_java_methods
|
733
|
+
indexof = @jString.new('').java_methods.find do |m|
|
734
|
+
m =~ /^indexOf/
|
735
|
+
end
|
736
|
+
args = indexof.match(/\[([^\]]+)\]/)[1]
|
737
|
+
assert_equal('Ljava.lang.String;I, II, I, Ljava.lang.String;'.split(/,\s*/).sort,
|
738
|
+
args.split(/,\s*/).sort)
|
739
|
+
end
|
740
|
+
def test_java_class_methods
|
741
|
+
format = @jString.java_methods.find do |m|
|
742
|
+
m =~ /^format/
|
743
|
+
end
|
744
|
+
args = format.match(/\[([^\]]+)\]/)[1]
|
745
|
+
assert_equal('Ljava.lang.String;[Ljava.lang.Object;, Ljava.util.Locale;Ljava.lang.String;[Ljava.lang.Object;'.split(/,\s*/).sort, args.split(/,\s*/).sort)
|
746
|
+
end
|
747
|
+
def test_64fixnum
|
748
|
+
big = @jLong.new_with_sig('J', 1230918239495)
|
749
|
+
assert_equal 1230918239495, big.long_value
|
750
|
+
end
|
751
|
+
def test_add_jar
|
752
|
+
add_jar(File.expand_path('./jartest.jar'))
|
753
|
+
jt = import('jp.co.infoseek.hp.arton.rjb.JarTest')
|
754
|
+
assert jt
|
755
|
+
assert_equal 'abcd', jt.new.add('ab', 'cd')
|
756
|
+
end
|
757
|
+
def test_add_jars
|
758
|
+
arg = ['./jartest.jar', './jartest.jar'].map do |e|
|
759
|
+
File.expand_path(e)
|
760
|
+
end
|
761
|
+
add_jar(arg)
|
762
|
+
jt = import('jp.co.infoseek.hp.arton.rjb.JarTest')
|
763
|
+
assert_equal 'abcd', jt.new.add('ab', 'cd')
|
764
|
+
end
|
765
|
+
def test_bothdirection_buffer
|
766
|
+
org = "abcdefghijklmn"
|
767
|
+
baip = import('java.io.ByteArrayInputStream')
|
768
|
+
ba = baip.new(org)
|
769
|
+
buff = "\0" * org.size
|
770
|
+
assert_equal org.size, ba.read(buff)
|
771
|
+
assert_equal -1, ba.read(buff)
|
772
|
+
ba.close
|
773
|
+
assert_equal org, buff
|
774
|
+
end
|
775
|
+
def test_anoninterface
|
776
|
+
arrays = import('java.util.Arrays')
|
777
|
+
a = [3, -4, 5, -6, 8, -10, -14]
|
778
|
+
index = arrays.binary_search(a, 6) do |m, o1, o2|
|
779
|
+
o1.abs - o2.abs
|
780
|
+
end
|
781
|
+
assert_equal 3, index
|
782
|
+
index = arrays.binary_search(a, 7) do |m, o1, o2|
|
783
|
+
o1.abs - o2.abs
|
784
|
+
end
|
785
|
+
assert_equal -5, index
|
786
|
+
end
|
787
|
+
def test_impl
|
788
|
+
two = import('Two')
|
789
|
+
t = two.impl { |m| m.to_s }
|
790
|
+
a = import('TwoCaller').new
|
791
|
+
ret = a.foo(t)
|
792
|
+
assert_equal 'method1', ret[0]
|
793
|
+
assert_equal 'method2', ret[1]
|
794
|
+
end
|
795
|
+
|
796
|
+
def cause_exception
|
797
|
+
begin
|
798
|
+
@jInteger.parseInt('blabla')
|
799
|
+
rescue NumberFormatException => e
|
800
|
+
raise
|
801
|
+
end
|
802
|
+
end
|
803
|
+
|
804
|
+
def test_reraise_exception()
|
805
|
+
unless /^1\.8/ =~ RUBY_VERSION
|
806
|
+
begin
|
807
|
+
cause_exception
|
808
|
+
rescue
|
809
|
+
assert($!.to_s =~ /NumberFormatException/)
|
810
|
+
end
|
811
|
+
end
|
812
|
+
end
|
813
|
+
|
814
|
+
class CbTest
|
815
|
+
def method(l, s, i, d, str)
|
816
|
+
"test_ok:#{l}-#{s}-#{i}-#{d}-#{str}"
|
817
|
+
end
|
818
|
+
end
|
819
|
+
def test_longcallback()
|
820
|
+
cb = bind(CbTest.new, 'jp.co.infoseek.hp.arton.rjb.CallbackTest$Callback')
|
821
|
+
test = import('jp.co.infoseek.hp.arton.rjb.CallbackTest')
|
822
|
+
assert_equal 'test_ok:1234-1234-1234-1234.5-1234', test.callCallback(cb)
|
823
|
+
end
|
824
|
+
|
825
|
+
class TestIterEx < TestIter
|
826
|
+
def initialize()
|
827
|
+
super
|
828
|
+
@strattr = 'strattr'
|
829
|
+
@numattr = 32
|
830
|
+
end
|
831
|
+
attr_accessor :strattr, :numattr
|
832
|
+
def multargs(a, b)
|
833
|
+
a + b
|
834
|
+
end
|
835
|
+
end
|
836
|
+
def test_method_otherthan_bound()
|
837
|
+
it = TestIterEx.new
|
838
|
+
it = bind(it, 'java.util.Iterator')
|
839
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test')
|
840
|
+
a = test.new
|
841
|
+
assert_equal("43210", a.concat(it))
|
842
|
+
assert(it.respond_to?(:numattr))
|
843
|
+
assert(it.respond_to?(:multargs))
|
844
|
+
assert_equal(32, it.numattr)
|
845
|
+
assert_equal('strattr', it.strattr)
|
846
|
+
it.numattr += 1
|
847
|
+
assert_equal(33, it.numattr)
|
848
|
+
assert_equal(5, it.multargs(3, 2))
|
849
|
+
end
|
850
|
+
def test_noarg_invoke()
|
851
|
+
str = @jString.new('abc')
|
852
|
+
assert_equal('abc', str._invoke('toString', ''))
|
853
|
+
assert_equal('abc', str._invoke('toString', nil))
|
854
|
+
assert_equal('abc', str._invoke('toString'))
|
855
|
+
end
|
856
|
+
def test_noarg_sinvoke()
|
857
|
+
sys = import('java.lang.System')
|
858
|
+
cons = sys.console
|
859
|
+
assert_equal(cons._classname, sys._invoke('console', '')._classname)
|
860
|
+
assert_equal(cons._classname, sys._invoke('console', nil)._classname)
|
861
|
+
assert_equal(cons._classname, sys._invoke('console')._classname)
|
862
|
+
end
|
863
|
+
def test_longarg
|
864
|
+
assert_equal(597899502607411822, @jLong.reverse(0x7654321076543210))
|
865
|
+
begin
|
866
|
+
@jLong.reverse(0x76543210765432101)
|
867
|
+
fail 'no exception for gibnum it doesn\'t convert Java long'
|
868
|
+
rescue RangeError
|
869
|
+
assert true
|
870
|
+
end
|
871
|
+
end
|
872
|
+
def test_bytearg
|
873
|
+
b = @jByte.new(32)
|
874
|
+
assert_equal(32, b.int_value)
|
875
|
+
assert b.compareTo(@jByte.new(32))
|
876
|
+
assert b.compareTo(@jByte.value_of(32))
|
877
|
+
b = @jByte.new_with_sig('B', 32)
|
878
|
+
assert_equal(32, b.int_value)
|
879
|
+
assert b.compareTo(@jByte._invoke(:valueOf, 'B', 32))
|
880
|
+
end
|
881
|
+
end
|
882
|
+
|