em_hessian2 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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