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/lib/rjbcore.so ADDED
Binary file
@@ -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
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
+
@@ -0,0 +1,9 @@
1
+ # coding: utf-8
2
+ begin
3
+ require 'rjb'
4
+ rescue LoadError
5
+ require 'rubygems'
6
+ require 'rjb'
7
+ end
8
+ S = Rjb::import('java.lang.System')
9
+ puts "#{S.property('java.vendor')} #{S.property('java.version')}"
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
+