em_hessian2 2.0.0

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.
Binary file
@@ -0,0 +1,7 @@
1
+ class AnotherMonkey
2
+ attr_accessor :born_at, :id, :name, :price
3
+
4
+ def initialize(attrs = {})
5
+ attrs.each { |k, v| send("#{k}=", v) if respond_to?("#{k}=") }
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+ require 'sinatra'
4
+ require File.expand_path('../monkey_service', __FILE__)
5
+
6
+ set :logging, false
7
+
8
+ get '/' do
9
+ status 405
10
+ 'post me'
11
+ end
12
+
13
+ post '/monkey' do
14
+ # begin
15
+ # status 200
16
+ # MonkeyService.handle(request.body.read)
17
+ # rescue NoMethodError, ArgumentError, NameError => e
18
+ # status 500
19
+ # Hessian2.write_fault(e)
20
+ # end
21
+ status 200
22
+ MonkeyService.handle(request.body.read)
23
+ end
@@ -0,0 +1,2 @@
1
+ require ::File.expand_path('../app', __FILE__)
2
+ run Sinatra::Application
@@ -0,0 +1,4 @@
1
+ require File.expand_path('../establish_connection', __FILE__)
2
+
3
+ ActiveRecord::Base.connection.execute("drop table if exists monkeys")
4
+ ActiveRecord::Base.connection.execute("create table monkeys(id integer(11) not null auto_increment, born_at datetime, name varchar(255), price decimal(10, 2), primary key(id)) charset=utf8")
@@ -0,0 +1,25 @@
1
+ ##
2
+ # This file is auto-generated. DO NOT EDIT!
3
+ #
4
+ require 'protobuf/message'
5
+
6
+ module Proto
7
+
8
+ ##
9
+ # Message Classes
10
+ #
11
+ class Monkey < ::Protobuf::Message; end
12
+
13
+ ##
14
+ # Message Fields
15
+ #
16
+ class Monkey
17
+ required ::Protobuf::Field::Int32Field, :born_at, 1
18
+ optional ::Protobuf::Field::Int32Field, :id, 2
19
+ optional ::Protobuf::Field::StringField, :name, 3
20
+ required ::Protobuf::Field::FloatField, :price, 4
21
+ end
22
+
23
+
24
+ end
25
+
@@ -0,0 +1,7 @@
1
+ package proto;
2
+ message Monkey {
3
+ required int32 born_at = 1;
4
+ required int32 id = 2;
5
+ required string name = 3;
6
+ required float price = 4;
7
+ }
@@ -0,0 +1,7 @@
1
+ require 'active_record'
2
+ require 'mysql2'
3
+
4
+ options = YAML.load_file(File.expand_path('../options.yml', __FILE__))
5
+ ActiveRecord::Base.establish_connection(options['mysql'])
6
+ ActiveRecord::Base.default_timezone = :local
7
+ ActiveRecord::Base.time_zone_aware_attributes = true
@@ -0,0 +1,275 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib_path = File.expand_path('../../lib', __FILE__)
3
+ $:.unshift(lib_path)
4
+ require 'hessian2'
5
+ require File.expand_path('../monkey', __FILE__)
6
+
7
+ c1 = Hessian2::Client.new('http://127.0.0.1:9292/monkey')
8
+
9
+ def print_assert(method, t)
10
+ puts "#{t ? '.' : '*' * 10 << 'fail'} #{method}"
11
+ end
12
+
13
+ # puts c1.get_monkey.inspect
14
+ # puts c1.get_class_wrapped_monkey.inspect
15
+ # puts c1.get_map.inspect
16
+ # puts c1.get_monkey_monkey.inspect
17
+ # puts c1.get_monkeys.inspect
18
+ # puts c1.get_class_wrapped_monkeys.inspect
19
+ # puts c1.get_each_class_wrapped_monkeys.inspect
20
+
21
+ # 0x00..0x1f # utf-8 string length 0-31
22
+ v = c1.get_string_0
23
+ print_assert 'get_string_0', v == ''
24
+ v = c1.get_string_x1f
25
+ print_assert 'get_string_x1f', v[0] == 'j' && v.size == 0x1f
26
+ v = c1.get_string_x1fu
27
+ print_assert 'get_string_x1fu', v[0] == '金' && v.size == 0x1f
28
+
29
+ # 0x20..0x2f # binary data length 0-15
30
+ v = c1.get_bin_0
31
+ print_assert 'get_bin_0', v.size == 0
32
+ v = c1.get_bin_xf
33
+ print_assert 'get_bin_xf', v.size == 0xf
34
+
35
+ # 0x30..0x33 # utf-8 string length 0-1023
36
+ v = c1.get_string_x20
37
+ print_assert 'get_string_x20', v[0] == 'j' && v.size == 0x20
38
+ v = c1.get_string_x20u
39
+ print_assert 'get_string_x20u', v[0] == '金' && v.size == 0x20
40
+ v = c1.get_string_x3ff
41
+ print_assert 'get_string_x3ff', v[0] == 'j' && v.size == 0x3ff
42
+ v = c1.get_string_x3ffu
43
+ print_assert 'get_string_x3ffu', v[0] == '金' && v.size == 0x3ff
44
+
45
+ # 0x34..0x37 # binary data length 0-1023
46
+ v = c1.get_bin_x10
47
+ print_assert 'get_bin_x10', v.size == 0x10
48
+ v = c1.get_bin_x3ff
49
+ print_assert 'get_bin_x3ff', v.size == 0x3ff
50
+
51
+ # 0x38..0x3f # three-octet compact long (-x40000 to x3ffff)
52
+ v = c1.get_long_mx801
53
+ print_assert 'get_long_mx801', v == -0x801
54
+ v = c1.get_long_x800
55
+ print_assert 'get_long_x800', v == 0x800
56
+ v = c1.get_long_mx40000
57
+ print_assert 'get_long_mx40000', v == -0x40000
58
+ v = c1.get_long_x3ffff
59
+ print_assert 'get_long_x3ffff', v == 0x3ffff
60
+
61
+ # 0x41 # 8-bit binary data non-final chunk ('A')
62
+ v = c1.get_lighthouse
63
+ print_assert 'get_lighthouse', v.size == 561276
64
+
65
+ # 0x42 # 8-bit binary data final chunk ('B')
66
+ v = c1.get_bin_x400
67
+ print_assert 'get_bin_x400', v.size == 0x400
68
+ v = c1.get_bin_x8000
69
+ print_assert 'get_bin_x8000', v.size == 0x8000
70
+
71
+ # 0x43 # object type definition ('C')
72
+ # 0x60..0x6f # object with direct type
73
+ v = c1.get_monkey
74
+ print_assert 'get_monkey', v.name == '阿门' && v.age == 7
75
+
76
+ v = c1.get_class_wrapped_monkey
77
+ print_assert 'get_class_wrapped_monkey', v.name == '阿门' && v.age == 7
78
+
79
+ # 0x44 # 64-bit IEEE encoded double ('D')
80
+ v = c1.get_double_min
81
+ print_assert 'get_double_min', v == 4.9E-324
82
+ v = c1.get_double_max
83
+ print_assert 'get_double_max', v == 1.7976931348623157E308
84
+ v = c1.get_double_positive_infinity
85
+ print_assert 'get_double_positive_infinity', v == Float::INFINITY
86
+ v = c1.get_double_negative_infinity
87
+ print_assert 'get_double_negative_infinity', v == -Float::INFINITY
88
+ v = c1.get_double_nan
89
+ print_assert 'get_double_nan', v.to_s.upcase == 'NAN'
90
+ v = c1.get_123dot456
91
+ print_assert 'get_123dot456', v == 123.456
92
+
93
+ # 0x46 # boolean false ('F')
94
+ v = c1.get_false
95
+ print_assert 'get_false', !v
96
+
97
+ # 0x48 # untyped map ('H')
98
+ v = c1.get_map_h
99
+ print_assert 'get_map_h', v['name'] == '阿门' && v['age'] == 7
100
+
101
+ # 0x49 # 32-bit signed integer ('I')
102
+ v = c1.get_int_mx40001
103
+ print_assert 'get_int_mx40001', v == -0x40001
104
+ v = c1.get_int_x40000
105
+ print_assert 'get_int_x40000', v == 0x40000
106
+ v = c1.get_int_mx40_000_000
107
+ print_assert 'get_int_mx40_000_000', v == -0x40_000_000
108
+ v = c1.get_int_x3f_fff_fff
109
+ print_assert 'get_int_x3f_fff_fff', v == 0x3f_fff_fff
110
+
111
+ # 0x4a # 64-bit UTC millisecond date
112
+ v = c1.get_date_20130112145959
113
+ print_assert 'get_date_20130112145959', v == Time.new(2013, 1, 12, 14, 59, 59)
114
+
115
+ # 0x4b # 32-bit UTC minute date
116
+ v = c1.get_date_201301121459
117
+ print_assert 'get_date_201301121459', v == Time.new(2013, 1, 12, 14, 59, 0)
118
+
119
+ # 0x4c # 64-bit signed long integer ('L')
120
+ v = c1.get_long_mx8_000_000_000_000_000
121
+ print_assert 'get_long_mx8_000_000_000_000_000', v == -0x8_000_000_000_000_000
122
+ v = c1.get_long_x7_fff_fff_fff_fff_fff
123
+ print_assert 'get_long_x7_fff_fff_fff_fff_fff', v == 0x7_fff_fff_fff_fff_fff
124
+
125
+ # 0x4d # map with type ('M')
126
+ v = c1.get_map
127
+ print_assert 'get_map', v['name'] == '阿门' && v['age'] == 7
128
+
129
+ # 0x4e # null ('N')
130
+ v = c1.get_null
131
+ print_assert 'get_null', v.nil?
132
+
133
+ # 0x4f # object instance ('O')
134
+ v = c1.get_monkeys
135
+ print_assert 'get_monkeys', v[0].name == '阿门' && v[0].age == 7 && v[1].name == '大鸡' && v[1].age == 6
136
+
137
+ # 0x51 # reference to map/list/object - integer ('Q')
138
+ v = c1.get_map_h_map_h
139
+ print_assert 'get_map_h_map_h', v[0]['name'] == '阿门' && v[0]['age'] == 7 && v[1]['name'] == '阿门' && v[1]['age'] == 7
140
+ v = c1.get_monkey_monkey
141
+ print_assert 'get_monkey_monkey', v[0].name == '阿门' && v[0].age == 7 && v[1].name == '阿门' && v[1].age == 7
142
+ v = c1.get_direct_untyped_list_list
143
+ print_assert 'get_direct_untyped_list_list', v[0] == (1..7).to_a && v[1] == (1..7).to_a
144
+ v = c1.get_untyped_list_list
145
+ print_assert 'get_untyped_list_list', v[0] == (1..7).to_a * 2 && v[1] == (1..7).to_a * 2
146
+ v = c1.get_direct_list_list
147
+ print_assert 'get_direct_list_list', v[0] == (1..7).to_a && v[1] == (1..7).to_a
148
+ v = c1.get_list_list
149
+ print_assert 'get_list_list', v[0] == (1..7).to_a * 2 && v[1] == (1..7).to_a * 2
150
+
151
+
152
+ # 0x52 # utf-8 string non-final chunk ('R')
153
+ v = c1.get_string_x8001
154
+ print_assert 'get_string_x8001', v[0] == 'j' && v.size == 0x8001
155
+ v = c1.get_string_x8001u
156
+ print_assert 'get_string_x8001u', v[0] == '金' && v.size == 0x8001
157
+
158
+ # 0x53 # utf-8 string final chunk ('S')
159
+ v = c1.get_string_x400
160
+ print_assert 'get_string_x400', v[0] == 'j' && v.size == 0x400
161
+ v = c1.get_string_x400u
162
+ print_assert 'get_string_x400u', v[0] == '金' && v.size == 0x400
163
+ v = c1.get_string_x8000
164
+ print_assert 'get_string_x8000', v[0] == 'j' && v.size == 0x8000
165
+ v = c1.get_string_x8000u
166
+ print_assert 'get_string_x8000u', v[0] == '金' && v.size == 0x8000
167
+
168
+ # 0x54 # boolean true ('T')
169
+ v = c1.get_true
170
+ print_assert 'get_true', v
171
+
172
+ # 0x55 # variable-length list/vector ('U')
173
+ # hessian2 write fixed-length list only
174
+
175
+ # 0x56 # fixed-length list/vector ('V')
176
+ v = c1.get_list
177
+ print_assert 'get_list', v == (1..7).to_a * 2
178
+
179
+ # 0x57 # variable-length untyped list/vector ('W')
180
+ # hessian2 write fixed-length list only
181
+
182
+ # 0x58 # fixed-length untyped list/vector ('X')
183
+ v = c1.get_untyped_list
184
+ print_assert 'get_untyped_list', v == (1..7).to_a * 2
185
+
186
+ # 0x59 # long encoded as 32-bit int ('Y')
187
+ v = c1.get_long_mx40001
188
+ print_assert 'get_long_mx40001', v == -0x40001
189
+ v = c1.get_long_x40000
190
+ print_assert 'get_long_x40000', v == 0x40000
191
+ v = c1.get_long_mx80_000_000
192
+ print_assert 'get_long_mx80_000_000', v == -0x80_000_000
193
+ v = c1.get_long_x7f_fff_fff
194
+ print_assert 'get_long_x7f_fff_fff', v == 0x7f_fff_fff
195
+
196
+ # 0x5b # double 0.0
197
+ v = c1.get_double_0
198
+ print_assert 'get_double_0', v == 0.0
199
+
200
+ # 0x5c # double 1.0
201
+ v = c1.get_double_1
202
+ print_assert 'get_double_1', v == 1.0
203
+
204
+ # 0x5d # double represented as byte (-128.0 to 127.0)
205
+ v = c1.get_double_m128
206
+ print_assert 'get_double_m128', v == -128.0
207
+ v = c1.get_double_127
208
+ print_assert 'get_double_127', v == 127.0
209
+
210
+ # 0x5e # double represented as short (-32768.0 to 32767.0)
211
+ v = c1.get_double_m129
212
+ print_assert 'get_double_m129', v == -129.0
213
+ v = c1.get_double_128
214
+ print_assert 'get_double_128', v == 128.0
215
+ v = c1.get_double_m32768
216
+ print_assert 'get_double_m32768', v == -32768.0
217
+ v = c1.get_double_32767
218
+ print_assert 'get_double_32767', v == 32767.0
219
+
220
+ # 0x5f # double represented as float
221
+ # hessian2 write double-precision only
222
+
223
+ # 0x70..0x77 # fixed list with direct length
224
+ v = c1.get_list_size0
225
+ print_assert 'get_list_size0', v == []
226
+ v = c1.get_list_size7
227
+ print_assert 'get_list_size7', v == (1..7).to_a
228
+
229
+ # 0x78..0x7f # fixed untyped list with direct length
230
+ v = c1.get_untyped_list_size0
231
+ print_assert 'get_untyped_list_size0', v == []
232
+ v = c1.get_untyped_list_size7
233
+ print_assert 'get_untyped_list_size7', v == (1..7).to_a
234
+
235
+ # 0x80..0xbf # one-octet compact int (-x10 to x3f, x90 is 0)
236
+ v = c1.get_int_mx10
237
+ print_assert 'get_int_mx10', v == -0x10
238
+ v = c1.get_int_x3f
239
+ print_assert 'get_int_x3f', v == 0x3f
240
+
241
+ # 0xc0..0xcf # two-octet compact int (-x800 to x7ff)
242
+ v = c1.get_int_mx11
243
+ print_assert 'get_int_mx11', v == -0x11
244
+ v = c1.get_int_x40
245
+ print_assert 'get_int_x40', v == 0x40
246
+ v = c1.get_int_mx800
247
+ print_assert 'get_int_mx800', v == -0x800
248
+ v = c1.get_int_x7ff
249
+ print_assert 'get_int_x7ff', v == 0x7ff
250
+
251
+ # 0xd0..0xd7 # three-octet compact int (-x40000 to x3ffff)
252
+ v = c1.get_int_mx801
253
+ print_assert 'get_int_mx801', v == -0x801
254
+ v = c1.get_int_x800
255
+ print_assert 'get_int_x800', v == 0x800
256
+ v = c1.get_int_mx40000
257
+ print_assert 'get_int_mx40000', v == -0x40000
258
+ v = c1.get_int_x3ffff
259
+ print_assert 'get_int_x3ffff', v == 0x3ffff
260
+
261
+ # 0xd8..0xef # one-octet compact long (-x8 to xf, xe0 is 0)
262
+ v = c1.get_long_mx8
263
+ print_assert 'get_long_mx8', v == -0x8
264
+ v = c1.get_long_xf
265
+ print_assert 'get_long_xf', v == 0xf
266
+
267
+ # 0xf0..0xff # two-octet compact long (-x800 to x7ff, xf8 is 0)
268
+ v = c1.get_long_mx9
269
+ print_assert 'get_long_mx9', v == -0x9
270
+ v = c1.get_long_x10
271
+ print_assert 'get_long_x10', v == 0x10
272
+ v = c1.get_long_mx800
273
+ print_assert 'get_long_mx800', v == -0x800
274
+ v = c1.get_long_x7ff
275
+ print_assert 'get_long_x7ff', v == 0x7ff
@@ -0,0 +1,5 @@
1
+ require 'active_record'
2
+
3
+ class Monkey < ActiveRecord::Base; end
4
+
5
+ MonkeyStruct = Struct.new(:born_at, :id, :name, :price)
@@ -0,0 +1,769 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib_path = File.expand_path('../../lib', __FILE__)
3
+ $:.unshift(lib_path)
4
+ require 'hessian2'
5
+ require File.expand_path('../monkey', __FILE__)
6
+
7
+ $i = 0
8
+
9
+ class MonkeyService
10
+ extend Hessian2::Handler
11
+
12
+ def self.wait_taka(name)
13
+ sleep 5 if name == 'taka'
14
+ name
15
+ end
16
+
17
+ def self.wait1
18
+ sleep 1
19
+ $i += 1
20
+ puts $i
21
+ $i
22
+ end
23
+
24
+ def self.wait5
25
+ sleep 5
26
+ $i += 1
27
+ puts $i
28
+ $i
29
+ end
30
+
31
+ # 0x00..0x1f # utf-8 string length 0-31
32
+ def self.get_string_0
33
+ ''
34
+ end
35
+
36
+ def self.get_string_x1f
37
+ 'j' * 0x1f
38
+ end
39
+
40
+ def self.get_string_x1fu
41
+ '金' * 0x1f
42
+ end
43
+
44
+ def self.set_string_0(str1)
45
+ print_assert 'set_string_0', str1 == ''
46
+ end
47
+
48
+ def self.set_string_x1f(str1)
49
+ print_assert 'set_string_x1f', str1 == 'j' * 0x1f
50
+ end
51
+
52
+ def self.set_string_x1fu(str1)
53
+ print_assert 'set_string_x1fu', str1 == '金' * 0x1f
54
+ end
55
+
56
+ # 0x20..0x2f # binary data length 0-15
57
+ def self.get_bin_0
58
+ Hessian2::TypeWrapper.new('B', '')
59
+ end
60
+
61
+ def self.get_bin_xf
62
+ Hessian2::TypeWrapper.new('B', ['j' * 0xf].pack('a*'))
63
+ end
64
+
65
+ def self.set_bin_0(bin1)
66
+ print_assert 'set_bin_0', bin1.size == 0
67
+ end
68
+
69
+ def self.set_bin_xf(bin1)
70
+ print_assert 'set_bin_xf', bin1.size == 0xf
71
+ end
72
+
73
+ # 0x30..0x33 # utf-8 string length 0-1023
74
+ def self.get_string_x20
75
+ 'j' * 0x20
76
+ end
77
+
78
+ def self.get_string_x20u
79
+ '金' * 0x20
80
+ end
81
+
82
+ def self.get_string_x3ff
83
+ 'j' * 0x3ff
84
+ end
85
+
86
+ def self.get_string_x3ffu
87
+ '金' * 0x3ff
88
+ end
89
+
90
+ def self.set_string_x20(str1)
91
+ print_assert 'set_string_x20', str1[0] == 'j' && str1.size == 0x20
92
+ end
93
+
94
+ def self.set_string_x20u(str1)
95
+ print_assert 'set_string_x20u', str1[0] == '金' && str1.size == 0x20
96
+ end
97
+
98
+ def self.set_string_x3ff(str1)
99
+ print_assert 'set_string_x3ff', str1[0] == 'j' && str1.size == 0x3ff
100
+ end
101
+
102
+ def self.set_string_x3ffu(str1)
103
+ print_assert 'set_string_x3ffu', str1[0] == '金' && str1.size == 0x3ff
104
+ end
105
+
106
+ # 0x34..0x37 # binary data length 0-1023
107
+ def self.get_bin_x10
108
+ Hessian2::TypeWrapper.new('B', ['j' * 0x10].pack('a*'))
109
+ end
110
+
111
+ def self.get_bin_x3ff
112
+ Hessian2::TypeWrapper.new('B', ['j' * 0x3ff].pack('a*'))
113
+ end
114
+
115
+ def self.set_bin_x10(bin1)
116
+ print_assert 'set_bin_x10', bin1.size == 0x10
117
+ end
118
+
119
+ def self.set_bin_x3ff(bin1)
120
+ print_assert 'set_bin_x3ff', bin1.size == 0x3ff
121
+ end
122
+
123
+ # 0x38..0x3f # three-octet compact long (-x40000 to x3ffff)
124
+ def self.get_long_mx801
125
+ -0x801
126
+ end
127
+
128
+ def self.get_long_x800
129
+ 0x800
130
+ end
131
+
132
+ def self.get_long_mx40000
133
+ -0x40000
134
+ end
135
+
136
+ def self.get_long_x3ffff
137
+ 0x3ffff
138
+ end
139
+
140
+ def self.set_long_mx801(long1)
141
+ print_assert 'set_long_mx801', long1 == -0x801
142
+ end
143
+
144
+ def self.set_long_x800(long1)
145
+ print_assert 'set_long_x800', long1 == 0x800
146
+ end
147
+
148
+ def self.set_long_mx40000(long1)
149
+ print_assert 'set_long_mx40000', long1 == -0x40000
150
+ end
151
+
152
+ def self.set_long_x3ffff(long1)
153
+ print_assert 'set_long_x3ffff', long1 == 0x3ffff
154
+ end
155
+
156
+ # 0x41 # 8-bit binary data non-final chunk ('A')
157
+ def self.get_lighthouse
158
+ Hessian2::TypeWrapper.new('B', IO.binread(File.expand_path("../Lighthouse.jpg", __FILE__)))
159
+ end
160
+
161
+ def self.set_lighthouse(bin1) # 561276
162
+ print_assert 'set_lighthouse', bin1.size == IO.binread(File.expand_path("../Lighthouse.jpg", __FILE__)).size
163
+ end
164
+
165
+ # 0x42 # 8-bit binary data final chunk ('B')
166
+ def self.get_bin_x400
167
+ Hessian2::TypeWrapper.new('B', ['j' * 0x400].pack('a*'))
168
+ end
169
+
170
+ def self.get_bin_x8000
171
+ Hessian2::TypeWrapper.new('B', ['j' * 0x8000].pack('a*'))
172
+ end
173
+
174
+ def self.set_bin_x400(bin1)
175
+ print_assert 'set_bin_x400', bin1.size == 0x400
176
+ end
177
+
178
+ def self.set_bin_x8000(bin1)
179
+ print_assert 'set_bin_x8000', bin1.size == 0x8000
180
+ end
181
+
182
+ # 0x43 # object type definition ('C') and 0x60..0x6f # object with direct type
183
+ # 0x4d # map with type ('M')
184
+ def self.get_monkey
185
+ Monkey.new(name: '阿门', age: 7)
186
+ end
187
+
188
+ def self.get_class_wrapped_monkey
189
+ Hessian2::ClassWrapper.new('Monkey', {name: '阿门', age: 7})
190
+ end
191
+
192
+ def self.set_monkey(monkey1)
193
+ print_assert 'set_monkey', monkey1.name == '阿门' && monkey1.age == 7
194
+ end
195
+
196
+ # 0x44 # 64-bit IEEE encoded double ('D')
197
+ def self.get_double_min
198
+ 4.9E-324
199
+ end
200
+
201
+ def self.get_double_max
202
+ 1.7976931348623157E308
203
+ end
204
+
205
+ def self.get_double_positive_infinity
206
+ Float::INFINITY
207
+ end
208
+
209
+ def self.get_double_negative_infinity
210
+ -Float::INFINITY
211
+ end
212
+
213
+ def self.get_double_nan
214
+ Float::NAN
215
+ end
216
+
217
+ def self.get_123dot456
218
+ 123.456
219
+ end
220
+
221
+ def self.set_double_min(double1) # 4.9E-324
222
+ print_assert 'set_double_min', double1 == 4.9E-324
223
+ end
224
+
225
+ def self.set_double_max(double1) # 1.7976931348623157E308
226
+ print_assert 'set_double_max', double1 == 1.7976931348623157E308
227
+ end
228
+
229
+ def self.set_double_positive_infinity(double1)
230
+ print_assert 'set_double_positive_infinity', double1 == Float::INFINITY
231
+ end
232
+
233
+ def self.set_double_negative_infinity(double1)
234
+ print_assert 'set_double_negative_infinity', double1 == -Float::INFINITY
235
+ end
236
+
237
+ def self.set_double_nan(double1)
238
+ print_assert 'set_double_nan', double1.to_s.upcase == 'NAN'
239
+ end
240
+
241
+ def self.set_123dot456(double1)
242
+ print_assert 'set_123dot456', double1 == 123.456
243
+ end
244
+
245
+
246
+ # 0x46 # boolean false ('F')
247
+ def self.get_false
248
+ false
249
+ end
250
+
251
+ def self.set_false(false1)
252
+ print_assert 'set_false', !false1
253
+ end
254
+
255
+ # 0x48 # untyped map ('H')
256
+ def self.get_map_h
257
+ { name: '阿门', age: 7 }
258
+ end
259
+
260
+ def self.set_map_h(map1)
261
+ print_assert 'set_map_h', map1['name'] == '阿门' && map1['age'] == 7
262
+ end
263
+
264
+ # 0x49 # 32-bit signed integer ('I')
265
+ def self.get_int_mx40001
266
+ -0x40001
267
+ end
268
+
269
+ def self.get_int_x40000
270
+ 0x40000
271
+ end
272
+
273
+ def self.get_int_mx40_000_000
274
+ -0x40_000_000
275
+ end
276
+
277
+ def self.get_int_x3f_fff_fff
278
+ 0x3f_fff_fff
279
+ end
280
+
281
+ def self.set_int_mx40001(int1)
282
+ print_assert 'set_int_mx40001', int1 == -0x40001
283
+ end
284
+
285
+ def self.set_int_x40000(int1)
286
+ print_assert 'set_int_x40000', int1 == 0x40000
287
+ end
288
+
289
+ def self.set_int_mx40_000_000(int1)
290
+ print_assert 'set_int_mx40_000_000', int1 == -0x40_000_000
291
+ end
292
+
293
+ def self.set_int_x3f_fff_fff(int1)
294
+ print_assert 'set_int_x3f_fff_fff', int1 == 0x3f_fff_fff
295
+ end
296
+
297
+ # 0x4a # 64-bit UTC millisecond date
298
+ def self.get_date_20130112145959
299
+ Time.new(2013, 1, 12, 14, 59, 59)
300
+ end
301
+
302
+ def self.set_date_20130112145959(date1)
303
+ print_assert 'set_date_20130112145959', date1 == Time.new(2013, 1, 12, 14, 59, 59)
304
+ end
305
+
306
+ # 0x4b # 32-bit UTC minute date
307
+ def self.get_date_201301121459
308
+ Time.new(2013, 1, 12, 14, 59, 0)
309
+ end
310
+
311
+ def self.set_date_201301121459(date1)
312
+ print_assert 'set_date_201301121459', date1 == Time.new(2013, 1, 12, 14, 59, 0)
313
+ end
314
+
315
+ # 0x4c # 64-bit signed long integer ('L')
316
+ def self.get_long_mx80_000_001
317
+ -0x80_000_001
318
+ end
319
+
320
+ def self.get_long_x80_000_000
321
+ 0x80_000_000
322
+ end
323
+
324
+ def self.get_long_mx8_000_000_000_000_000
325
+ -0x8_000_000_000_000_000
326
+ end
327
+
328
+ def self.get_long_x7_fff_fff_fff_fff_fff
329
+ 0x7_fff_fff_fff_fff_fff
330
+ end
331
+
332
+ def self.set_long_mx80_000_001(long1)
333
+ print_assert 'set_long_mx80_000_001', long1 == -0x80_000_001
334
+ end
335
+
336
+ def self.set_long_x80_000_000(long1)
337
+ print_assert 'set_long_x80_000_000', long1 == 0x80_000_000
338
+ end
339
+
340
+ def self.set_long_mx8_000_000_000_000_000(long1)
341
+ print_assert 'set_long_mx8_000_000_000_000_000', long1 == -0x8_000_000_000_000_000
342
+ end
343
+
344
+ def self.set_long_x7_fff_fff_fff_fff_fff(long1)
345
+ print_assert 'set_long_x7_fff_fff_fff_fff_fff', long1 == 0x7_fff_fff_fff_fff_fff
346
+ end
347
+
348
+ # 0x4d # map with type ('M')
349
+ def self.get_map
350
+ Hessian2::TypeWrapper.new('example.Monkey', self.get_map_h)
351
+ end
352
+
353
+ def self.set_map(map1)
354
+ print_assert 'set_map', map1['name'] == '阿门' && map1['age'] == 7
355
+ end
356
+
357
+ # 0x4e # null ('N')
358
+ def self.get_null
359
+ nil
360
+ end
361
+
362
+ def self.set_null(obj)
363
+ print_assert 'set_null', obj.nil?
364
+ end
365
+
366
+ # 0x4f # object instance ('O')
367
+ def self.get_monkeys
368
+ [ Monkey.new(name: '阿门', age: 7), Monkey.new(name: '大鸡', age: 6) ]
369
+ end
370
+
371
+ def self.get_class_wrapped_monkeys
372
+ Hessian2::ClassWrapper.new('[Monkey', [ {name: '阿门', age: 7}, {name: '大鸡', age: 6} ])
373
+ end
374
+
375
+ def self.get_each_class_wrapped_monkeys
376
+ [ Hessian2::ClassWrapper.new('Monkey',{name: '阿门', age: 7}),
377
+ Hessian2::ClassWrapper.new('Monkey',{name: '大鸡', age: 6}) ]
378
+ end
379
+
380
+ def self.set_monkeys(monkeys)
381
+ print_assert 'set_monkeys', monkeys.size == 0x11
382
+ end
383
+
384
+ # 0x51 # reference to map/list/object - integer ('Q')
385
+ def self.get_map_h_map_h
386
+ map1 = self.get_map_h
387
+ [ map1, map1 ]
388
+ end
389
+
390
+ def self.get_direct_untyped_list_list
391
+ list1 = self.get_list_size7
392
+ [ list1, list1 ]
393
+ end
394
+
395
+ def self.get_untyped_list_list
396
+ self.get_list_list
397
+ end
398
+
399
+ def self.get_direct_list_list
400
+ list1 = self.get_list_size7
401
+ [ list1, list1 ]
402
+ end
403
+
404
+ def self.get_list_list
405
+ list1 = self.get_list
406
+ [ list1, list1 ]
407
+ end
408
+
409
+ def self.get_monkey_monkey
410
+ monkey = Monkey.new(name: '阿门', age: 7)
411
+ [ monkey, monkey ]
412
+ end
413
+
414
+ def self.set_map_list_monkey_map_list_monkey(map1, list1, monkey1, map2, list2, monkey2)
415
+ print_assert 'set_map_list_monkey_map_list_monkey', map1['name'] == map2['name'] && list1[0] == list2[0] && monkey1.name == monkey2.name
416
+ end
417
+
418
+ # 0x52 # utf-8 string non-final chunk ('R')
419
+ def self.get_string_x8001
420
+ 'j' * 0x8001
421
+ end
422
+
423
+ def self.get_string_x8001u
424
+ '金' * 0x8001
425
+ end
426
+
427
+ def self.set_string_x8001(str1)
428
+ print_assert 'set_string_x8001', str1[0] == 'j' && str1.size == 0x8001
429
+ end
430
+
431
+ def self.set_string_x8001u(str1)
432
+ print_assert 'set_string_x8001u', str1[0] == '金' && str1.size == 0x8001
433
+ end
434
+
435
+ # 0x53 # utf-8 string final chunk ('S')
436
+ def self.get_string_x400
437
+ 'j' * 0x400
438
+ end
439
+
440
+ def self.get_string_x400u
441
+ '金' * 0x400
442
+ end
443
+
444
+ def self.get_string_x8000
445
+ 'j' * 0x8000
446
+ end
447
+
448
+ def self.get_string_x8000u
449
+ '金' * 0x8000
450
+ end
451
+
452
+ def self.set_string_x400(str1)
453
+ print_assert 'set_string_x400', str1[0] == 'j' && str1.size == 0x400
454
+ end
455
+
456
+ def self.set_string_x400u(str1)
457
+ print_assert 'set_string_x400u', str1[0] == '金' && str1.size == 0x400
458
+ end
459
+
460
+ def self.set_string_x8000(str1)
461
+ print_assert 'set_string_x8000', str1[0] == 'j' && str1.size == 0x8000
462
+ end
463
+
464
+ def self.set_string_x8000u(str1)
465
+ print_assert 'set_string_x8000u', str1[0] == '金' && str1.size == 0x8000
466
+ end
467
+
468
+ # 0x54 # boolean true ('T')
469
+ def self.get_true
470
+ true
471
+ end
472
+
473
+ def self.set_true(true1)
474
+ print_assert 'set_true', true1
475
+ end
476
+
477
+ # 0x56 # fixed-length list/vector ('V')
478
+ # 0x58 # fixed-length untyped list/vector ('X')
479
+ def self.get_list
480
+ self.get_list_size7 * 2
481
+ end
482
+
483
+ def self.get_untyped_list
484
+ self.get_list
485
+ end
486
+
487
+ def self.set_list(list1)
488
+ puts list1.inspect
489
+ print_assert 'set_list', list1.size == 14 && list1[0] == 1
490
+ end
491
+
492
+ def self.set_list_int(list1)
493
+ print_assert 'set_list_int', list1.size == 14 && list1[0] == 1
494
+ end
495
+
496
+ def self.set_list_monkey(list1)
497
+ print_assert 'set_list_monkey', list1.size == 14 && list1.last.name == '阿门' && list1.last.age == 7
498
+ end
499
+
500
+ # 0x59 # long encoded as 32-bit int ('Y')
501
+ def self.get_long_mx40001
502
+ -0x40001
503
+ end
504
+
505
+ def self.get_long_x40000
506
+ 0x40000
507
+ end
508
+
509
+ def self.get_long_mx80_000_000
510
+ -0x80_000_000
511
+ end
512
+
513
+ def self.get_long_x7f_fff_fff
514
+ 0x7f_fff_fff
515
+ end
516
+
517
+ def self.set_long_mx40001(long1)
518
+ print_assert 'set_long_mx40001', long1 == -0x40001
519
+ end
520
+
521
+ def self.set_long_x40000(long1)
522
+ print_assert 'set_long_x40000', long1 == 0x40000
523
+ end
524
+
525
+ def self.set_long_mx80_000_000(long1)
526
+ print_assert 'set_long_mx80_000_000', long1 == -0x80_000_000
527
+ end
528
+
529
+ def self.set_long_x7f_fff_fff(long1)
530
+ print_assert 'set_long_x7f_fff_fff', long1 == 0x7f_fff_fff
531
+ end
532
+
533
+ # 0x5b # double 0.0
534
+ def self.get_double_0
535
+ 0.0
536
+ end
537
+
538
+ def self.set_double_0(double1)
539
+ print_assert 'set_double_0', double1 == 0.0
540
+ end
541
+
542
+ # 0x5c # double 1.0
543
+ def self.get_double_1
544
+ 1.0
545
+ end
546
+
547
+ def self.set_double_1(double1)
548
+ print_assert 'set_double_1', double1 == 1.0
549
+ end
550
+
551
+ # 0x5d # double represented as byte (-128.0 to 127.0)
552
+ def self.get_double_m128
553
+ -128.0
554
+ end
555
+
556
+ def self.get_double_127
557
+ 127.0
558
+ end
559
+
560
+ def self.set_double_m128(double1)
561
+ print_assert 'set_double_m128', double1 == -128.0
562
+ end
563
+
564
+ def self.set_double_127(double1)
565
+ print_assert 'set_double_127', double1 == 127.0
566
+ end
567
+
568
+ # 0x5e # double represented as short (-32768.0 to 32767.0)
569
+ def self.get_double_m129
570
+ -129.0
571
+ end
572
+
573
+ def self.get_double_128
574
+ 128.0
575
+ end
576
+
577
+ def self.get_double_m32768
578
+ -32768.0
579
+ end
580
+
581
+ def self.get_double_32767
582
+ 32767.0
583
+ end
584
+
585
+ def self.set_double_m129(double1)
586
+ print_assert 'set_double_m129', double1 == -129.0
587
+ end
588
+
589
+ def self.set_double_128(double1)
590
+ print_assert 'set_double_128', double1 == 128.0
591
+ end
592
+
593
+ def self.set_double_m32768(double1)
594
+ print_assert 'set_double_m32768', double1 == -32768.0
595
+ end
596
+
597
+ def self.set_double_32767(double1)
598
+ print_assert 'set_double_32767', double1 == 32767.0
599
+ end
600
+
601
+ # 0x70..0x77 # fixed list with direct length
602
+ # 0x78..0x7f # fixed untyped list with direct length
603
+ def self.get_list_size0
604
+ []
605
+ end
606
+
607
+ def self.get_list_size7
608
+ (1..7).to_a
609
+ end
610
+
611
+ def self.get_untyped_list_size0
612
+ self.get_list_size0
613
+ end
614
+
615
+ def self.get_untyped_list_size7
616
+ self.get_list_size7
617
+ end
618
+
619
+ def self.set_list_size0(list1)
620
+ print_assert 'set_list_size0', list1.size == 0
621
+ end
622
+
623
+ def self.set_list_size7(list1)
624
+ print_assert 'set_list_size7', list1.size == 7 && list1[0] == 1
625
+ end
626
+
627
+ def self.set_list_monkey_size7(list1)
628
+ print_assert 'set_list_monkey_size7', list1.size == 7 && list1.last.name == '阿门' && list1.last.age == 7
629
+ end
630
+
631
+ # 0x80..0xbf # one-octet compact int (-x10 to x2f, x90 is 0)
632
+ def self.get_int_mx10
633
+ -0x10
634
+ end
635
+
636
+ def self.get_int_x3f
637
+ 0x3f
638
+ end
639
+
640
+ def self.set_int_mx10(int1)
641
+ print_assert 'set_int_mx10', int1 == -0x10
642
+ end
643
+
644
+ def self.set_int_x3f(int1)
645
+ print_assert 'set_int_x3f', int1 == 0x3f
646
+ end
647
+
648
+ # 0xc0..0xcf # two-octet compact int (-x800 to x7ff)
649
+ def self.get_int_mx11
650
+ -0x11
651
+ end
652
+
653
+ def self.get_int_x40
654
+ 0x40
655
+ end
656
+
657
+ def self.get_int_mx800
658
+ -0x800
659
+ end
660
+
661
+ def self.get_int_x7ff
662
+ 0x7ff
663
+ end
664
+
665
+ def self.set_int_mx11(int1)
666
+ print_assert 'set_int_mx11', int1 == -0x11
667
+ end
668
+
669
+ def self.set_int_x40(int1)
670
+ print_assert 'set_int_x40', int1 == 0x40
671
+ end
672
+
673
+ def self.set_int_mx800(int1)
674
+ print_assert 'set_int_mx800', int1 == -0x800
675
+ end
676
+
677
+ def self.set_int_x7ff(int1)
678
+ print_assert 'set_int_x7ff', int1 == 0x7ff
679
+ end
680
+
681
+ # 0xd0..0xd7 # three-octet compact int (-x40000 to x3ffff)
682
+ def self.get_int_mx801
683
+ -0x801
684
+ end
685
+
686
+ def self.get_int_x800
687
+ 0x800
688
+ end
689
+
690
+ def self.get_int_mx40000
691
+ -0x40000
692
+ end
693
+
694
+ def self.get_int_x3ffff
695
+ 0x3ffff
696
+ end
697
+
698
+ def self.set_int_mx801(int1)
699
+ print_assert 'set_int_mx801', int1 == -0x801
700
+ end
701
+
702
+ def self.set_int_x800(int1)
703
+ print_assert 'set_int_x800', int1 == 0x800
704
+ end
705
+
706
+ def self.set_int_mx40000(int1)
707
+ print_assert 'set_int_mx40000', int1 == -0x40000
708
+ end
709
+
710
+ def self.set_int_x3ffff(int1)
711
+ print_assert 'set_int_x3ffff', int1 == 0x3ffff
712
+ end
713
+
714
+ # 0xd8..0xef # one-octet compact long (-x8 to xf, xe0 is 0)
715
+ def self.get_long_mx8
716
+ -0x8
717
+ end
718
+
719
+ def self.get_long_xf
720
+ 0xf
721
+ end
722
+
723
+ def self.set_long_mx8(long1)
724
+ print_assert 'set_long_mx8', long1 == -0x8
725
+ end
726
+
727
+ def self.set_long_xf(long1)
728
+ print_assert 'set_long_xf', long1 == 0xf
729
+ end
730
+
731
+ # 0xf0..0xff # two-octet compact long (-x800 to x7ff, xf8 is 0)
732
+ def self.get_long_mx9
733
+ -0x9
734
+ end
735
+
736
+ def self.get_long_x10
737
+ 0x10
738
+ end
739
+
740
+ def self.get_long_mx800
741
+ -0x800
742
+ end
743
+
744
+ def self.get_long_x7ff
745
+ 0x7ff
746
+ end
747
+
748
+ def self.set_long_mx9(long1)
749
+ print_assert 'set_long_mx9', long1 == -0x9
750
+ end
751
+
752
+ def self.set_long_x10(long1)
753
+ print_assert 'set_long_x10', long1 == 0x10
754
+ end
755
+
756
+ def self.set_long_mx800(long1)
757
+ print_assert 'set_long_mx800', long1 == -0x800
758
+ end
759
+
760
+ def self.set_long_x7ff(long1)
761
+ print_assert 'set_long_x7ff', long1 == 0x7ff
762
+ end
763
+
764
+ private
765
+ def self.print_assert(method, t)
766
+ puts "#{t ? '.' : '*' * 10 << 'fail'} #{method}"
767
+ end
768
+
769
+ end