rack-amf 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/README.rdoc +18 -9
  2. data/Rakefile +23 -38
  3. data/lib/rack/amf/environment.rb +5 -8
  4. data/lib/rack/amf/middleware/pass_through.rb +5 -4
  5. data/lib/rack/amf/middleware/service_manager.rb +11 -3
  6. data/lib/rack/amf/middleware.rb +2 -1
  7. data/lib/rack/amf/request.rb +3 -16
  8. data/lib/rack/amf/response.rb +8 -67
  9. data/lib/rack/amf.rb +41 -1
  10. data/spec/{rack/service_manager_spec.rb → service_manager_spec.rb} +1 -2
  11. data/spec/spec.opts +2 -1
  12. data/spec/spec_helper.rb +1 -24
  13. metadata +19 -84
  14. data/lib/amf/class_mapping.rb +0 -211
  15. data/lib/amf/common.rb +0 -28
  16. data/lib/amf/constants.rb +0 -47
  17. data/lib/amf/pure/deserializer.rb +0 -361
  18. data/lib/amf/pure/io_helpers.rb +0 -94
  19. data/lib/amf/pure/remoting.rb +0 -120
  20. data/lib/amf/pure/serializer.rb +0 -327
  21. data/lib/amf/pure.rb +0 -14
  22. data/lib/amf/values/array_collection.rb +0 -9
  23. data/lib/amf/values/messages.rb +0 -133
  24. data/lib/amf/values/typed_hash.rb +0 -13
  25. data/lib/amf/version.rb +0 -9
  26. data/lib/amf.rb +0 -17
  27. data/spec/amf/class_mapping_set_spec.rb +0 -34
  28. data/spec/amf/class_mapping_spec.rb +0 -120
  29. data/spec/amf/deserializer_spec.rb +0 -311
  30. data/spec/amf/remoting_spec.rb +0 -51
  31. data/spec/amf/serializer_spec.rb +0 -328
  32. data/spec/amf/values/array_collection_spec.rb +0 -6
  33. data/spec/amf/values/messages_spec.rb +0 -31
  34. data/spec/fixtures/objects/amf0-boolean.bin +0 -1
  35. data/spec/fixtures/objects/amf0-date.bin +0 -0
  36. data/spec/fixtures/objects/amf0-ecma-ordinal-array.bin +0 -0
  37. data/spec/fixtures/objects/amf0-hash.bin +0 -0
  38. data/spec/fixtures/objects/amf0-null.bin +0 -1
  39. data/spec/fixtures/objects/amf0-number.bin +0 -0
  40. data/spec/fixtures/objects/amf0-object.bin +0 -0
  41. data/spec/fixtures/objects/amf0-ref-test.bin +0 -0
  42. data/spec/fixtures/objects/amf0-strict-array.bin +0 -0
  43. data/spec/fixtures/objects/amf0-string.bin +0 -0
  44. data/spec/fixtures/objects/amf0-typed-object.bin +0 -0
  45. data/spec/fixtures/objects/amf0-undefined.bin +0 -1
  46. data/spec/fixtures/objects/amf0-untyped-object.bin +0 -0
  47. data/spec/fixtures/objects/amf3-0.bin +0 -0
  48. data/spec/fixtures/objects/amf3-arrayRef.bin +0 -1
  49. data/spec/fixtures/objects/amf3-bigNum.bin +0 -0
  50. data/spec/fixtures/objects/amf3-date.bin +0 -0
  51. data/spec/fixtures/objects/amf3-datesRef.bin +0 -0
  52. data/spec/fixtures/objects/amf3-dynObject.bin +0 -2
  53. data/spec/fixtures/objects/amf3-emptyArray.bin +0 -1
  54. data/spec/fixtures/objects/amf3-emptyArrayRef.bin +0 -1
  55. data/spec/fixtures/objects/amf3-emptyStringRef.bin +0 -1
  56. data/spec/fixtures/objects/amf3-false.bin +0 -1
  57. data/spec/fixtures/objects/amf3-graphMember.bin +0 -0
  58. data/spec/fixtures/objects/amf3-hash.bin +0 -2
  59. data/spec/fixtures/objects/amf3-largeMax.bin +0 -0
  60. data/spec/fixtures/objects/amf3-largeMin.bin +0 -0
  61. data/spec/fixtures/objects/amf3-max.bin +0 -1
  62. data/spec/fixtures/objects/amf3-min.bin +0 -0
  63. data/spec/fixtures/objects/amf3-mixedArray.bin +0 -11
  64. data/spec/fixtures/objects/amf3-null.bin +0 -1
  65. data/spec/fixtures/objects/amf3-objRef.bin +0 -0
  66. data/spec/fixtures/objects/amf3-primArray.bin +0 -1
  67. data/spec/fixtures/objects/amf3-string.bin +0 -1
  68. data/spec/fixtures/objects/amf3-stringRef.bin +0 -0
  69. data/spec/fixtures/objects/amf3-symbol.bin +0 -1
  70. data/spec/fixtures/objects/amf3-true.bin +0 -1
  71. data/spec/fixtures/objects/amf3-typedObject.bin +0 -2
  72. data/spec/fixtures/request/acknowledge-response.bin +0 -0
  73. data/spec/fixtures/request/amf0-error-response.bin +0 -0
  74. data/spec/fixtures/request/commandMessage.bin +0 -0
  75. data/spec/fixtures/request/remotingMessage.bin +0 -0
  76. data/spec/fixtures/request/simple-response.bin +0 -0
  77. data/spec/rack/request_spec.rb +0 -6
  78. data/spec/rack/response_spec.rb +0 -47
data/lib/amf/version.rb DELETED
@@ -1,9 +0,0 @@
1
- module AMF
2
- # AMF version
3
- VERSION = '0.0.4'
4
- VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
- VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
- VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
7
- VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
8
- VARIANT_BINARY = false
9
- end
data/lib/amf.rb DELETED
@@ -1,17 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
2
- $:.unshift "#{File.expand_path(File.dirname(__FILE__))}/amf/"
3
-
4
- require 'rubygems'
5
- require 'amf/version'
6
- require 'amf/common'
7
-
8
- module AMF
9
- begin
10
- raise LoadError, 'C extensions not implemented'
11
- rescue LoadError
12
- require 'amf/pure'
13
- end
14
- require 'amf/class_mapping'
15
-
16
- ClassMapper = AMF::ClassMapping.new
17
- end
@@ -1,34 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
-
3
- describe AMF::ClassMapping::MappingSet do
4
- before :each do
5
- @config = AMF::ClassMapping::MappingSet.new
6
- end
7
-
8
- it "should retrieve AS mapping for ruby class" do
9
- @config.map :as => 'ASTest', :ruby => 'RubyTest'
10
- @config.get_as_class_name('RubyTest').should == 'ASTest'
11
- @config.get_as_class_name('BadClass').should be_nil
12
- end
13
-
14
- it "should retrive ruby class name mapping for AS class" do
15
- @config.map :as => 'ASTest', :ruby => 'RubyTest'
16
- @config.get_ruby_class_name('ASTest').should == 'RubyTest'
17
- @config.get_ruby_class_name('BadClass').should be_nil
18
- end
19
-
20
- it "should map special classes by default" do
21
- SPECIAL_CLASSES = [
22
- 'flex.messaging.messages.AcknowledgeMessage',
23
- 'flex.messaging.messages.ErrorMessage',
24
- 'flex.messaging.messages.CommandMessage',
25
- 'flex.messaging.messages.ErrorMessage',
26
- 'flex.messaging.messages.RemotingMessage',
27
- 'flex.messaging.io.ArrayCollection'
28
- ]
29
-
30
- SPECIAL_CLASSES.each do |as_class|
31
- @config.get_ruby_class_name(as_class).should_not be_nil
32
- end
33
- end
34
- end
@@ -1,120 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
-
3
- describe AMF::ClassMapping do
4
- before(:all) do
5
- class ClassMappingTest
6
- attr_accessor :prop_a
7
- attr_accessor :prop_b
8
- attr_accessor :prop_c
9
- end
10
- end
11
-
12
- before :each do
13
- @mapper = AMF::ClassMapping.new
14
- @mapper.define do |m|
15
- m.map :as => 'ASClass', :ruby => 'ClassMappingTest'
16
- end
17
- end
18
-
19
- it "should return AS class name for ruby objects" do
20
- @mapper.get_as_class_name(ClassMappingTest.new).should == 'ASClass'
21
- @mapper.get_as_class_name('ClassMappingTest').should == 'ASClass'
22
- end
23
-
24
- it "should allow config modification" do
25
- @mapper.define do |m|
26
- m.map :as => 'SecondClass', :ruby => 'ClassMappingTest'
27
- end
28
- @mapper.get_as_class_name(ClassMappingTest.new).should == 'SecondClass'
29
- end
30
-
31
- describe "ruby object generator" do
32
- it "should instantiate a ruby class" do
33
- @mapper.get_ruby_obj('ASClass').should be_a(ClassMappingTest)
34
- end
35
-
36
- it "should properly instantiate namespaced classes" do
37
- module ANamespace; class TestRubyClass; end; end
38
- @mapper.define {|m| m.map :as => 'ASClass', :ruby => 'ANamespace::TestRubyClass'}
39
- @mapper.get_ruby_obj('ASClass').should be_a(ANamespace::TestRubyClass)
40
- end
41
-
42
- it "should return a hash with original type if not mapped" do
43
- obj = @mapper.get_ruby_obj('UnmappedClass')
44
- obj.should be_a(AMF::Values::TypedHash)
45
- obj.type.should == 'UnmappedClass'
46
- end
47
- end
48
-
49
- describe "ruby object populator" do
50
- it "should populate a ruby class" do
51
- obj = @mapper.populate_ruby_obj ClassMappingTest.new, {:prop_a => 'Data'}
52
- obj.prop_a.should == 'Data'
53
- end
54
-
55
- it "should populate a typed hash" do
56
- obj = @mapper.populate_ruby_obj AMF::Values::TypedHash.new('UnmappedClass'), {:prop_a => 'Data'}
57
- obj[:prop_a].should == 'Data'
58
- end
59
-
60
- it "should allow custom populators" do
61
- class CustomPopulator
62
- def can_handle? obj
63
- true
64
- end
65
- def populate obj, props, dynamic_props
66
- obj[:populated] = true
67
- obj.merge! props
68
- obj.merge! dynamic_props if dynamic_props
69
- end
70
- end
71
-
72
- @mapper.object_populators << CustomPopulator.new
73
- obj = @mapper.populate_ruby_obj({}, {:prop_a => 'Data'})
74
- obj[:populated].should == true
75
- obj[:prop_a].should == 'Data'
76
- end
77
- end
78
-
79
- describe "property extractor" do
80
- it "should extract hash properties" do
81
- hash = {:a => 'test1', :b => 'test2'}
82
- props = @mapper.props_for_serialization(hash)
83
- props.should == {'a' => 'test1', 'b' => 'test2'}
84
- end
85
-
86
- it "should extract object properties" do
87
- obj = ClassMappingTest.new
88
- obj.prop_a = 'Test A'
89
- obj.prop_b = 'Test B'
90
-
91
- hash = @mapper.props_for_serialization obj
92
- hash.should == {'prop_a' => 'Test A', 'prop_b' => 'Test B', 'prop_c' => nil}
93
- end
94
-
95
- it "should extract inherited object properties" do
96
- class ClassMappingTest2 < ClassMappingTest
97
- end
98
- obj = ClassMappingTest2.new
99
- obj.prop_a = 'Test A'
100
- obj.prop_b = 'Test B'
101
-
102
- hash = @mapper.props_for_serialization obj
103
- hash.should == {'prop_a' => 'Test A', 'prop_b' => 'Test B', 'prop_c' => nil}
104
- end
105
-
106
- it "should allow custom serializers" do
107
- class CustomSerializer
108
- def can_handle? obj
109
- true
110
- end
111
- def serialize obj
112
- {:success => true}
113
- end
114
- end
115
-
116
- @mapper.object_serializers << CustomSerializer.new
117
- @mapper.props_for_serialization(nil).should == {:success => true}
118
- end
119
- end
120
- end
@@ -1,311 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
-
3
- describe "when deserializing" do
4
- before :each do
5
- AMF::ClassMapper.reset
6
- end
7
-
8
- describe "AMF0" do
9
- it "should deserialize numbers" do
10
- input = object_fixture('amf0-number.bin')
11
- output = AMF.deserialize(input, 0)
12
- output.should == 3.5
13
- end
14
-
15
- it "should deserialize booleans" do
16
- input = object_fixture('amf0-boolean.bin')
17
- output = AMF.deserialize(input, 0)
18
- output.should === true
19
- end
20
-
21
- it "should deserialize strings" do
22
- input = object_fixture('amf0-string.bin')
23
- output = AMF.deserialize(input, 0)
24
- output.should == "this is a テスト"
25
- end
26
-
27
- it "should deserialize anonymous objects" do
28
- input = object_fixture('amf0-object.bin')
29
- output = AMF.deserialize(input, 0)
30
- output.should == {:foo => 'baz', :bar => 3.14}
31
- end
32
-
33
- it "should deserialize nulls" do
34
- input = object_fixture('amf0-null.bin')
35
- output = AMF.deserialize(input, 0)
36
- output.should == nil
37
- end
38
-
39
- it "should deserialize undefineds" do
40
- input = object_fixture('amf0-undefined.bin')
41
- output = AMF.deserialize(input, 0)
42
- output.should == nil
43
- end
44
-
45
- it "should deserialize references properly" do
46
- input = object_fixture('amf0-ref-test.bin')
47
- output = AMF.deserialize(input, 0)
48
- output.length.should == 2
49
- output[0].should === output[1]
50
- end
51
-
52
- it "should deserialize hashes" do
53
- input = object_fixture('amf0-hash.bin')
54
- output = AMF.deserialize(input, 0)
55
- output.should == {:a => 'b', :c => 'd'}
56
- end
57
-
58
- it "should deserialize arrays from flash player" do
59
- # Even Array is serialized as a "hash", so check that deserializer converts to array
60
- input = object_fixture('amf0-ecma-ordinal-array.bin')
61
- output = AMF.deserialize(input, 0)
62
- output.should == ['a', 'b', 'c', 'd']
63
- end
64
-
65
- it "should serialize strict arrays" do
66
- input = object_fixture('amf0-strict-array.bin')
67
- output = AMF.deserialize(input, 0)
68
- output.should == ['a', 'b', 'c', 'd']
69
- end
70
-
71
- it "should deserialize dates" do
72
- input = object_fixture('amf0-date.bin')
73
- output = AMF.deserialize(input, 0)
74
- output.should == Time.utc(2003, 2, 13, 5)
75
- end
76
-
77
- it "should deserialize XML"
78
-
79
- it "should deserialize an unmapped object as a dynamic anonymous object" do
80
- input = object_fixture("amf0-typed-object.bin")
81
- output = AMF.deserialize(input, 0)
82
-
83
- output.type.should == 'org.rackAMF.ASClass'
84
- output.should == {:foo => 'bar', :baz => nil}
85
- end
86
-
87
- it "should deserialize a mapped object as a mapped ruby class instance" do
88
- class RubyClass
89
- attr_accessor :foo, :baz
90
- end
91
- AMF::ClassMapper.define {|m| m.map :as => 'org.rackAMF.ASClass', :ruby => 'RubyClass'}
92
-
93
- input = object_fixture("amf0-typed-object.bin")
94
- output = AMF.deserialize(input, 0)
95
-
96
- output.should be_a(RubyClass)
97
- output.foo.should == 'bar'
98
- output.baz.should == nil
99
- end
100
- end
101
-
102
- describe "AMF3" do
103
- describe "simple messages" do
104
- it "should deserialize a null" do
105
- input = object_fixture("amf3-null.bin")
106
- output = AMF.deserialize(input, 3)
107
- output.should == nil
108
- end
109
-
110
- it "should deserialize a false" do
111
- input = object_fixture("amf3-false.bin")
112
- output = AMF.deserialize(input, 3)
113
- output.should == false
114
- end
115
-
116
- it "should deserialize a true" do
117
- input = object_fixture("amf3-true.bin")
118
- output = AMF.deserialize(input, 3)
119
- output.should == true
120
- end
121
-
122
- it "should deserialize integers" do
123
- input = object_fixture("amf3-max.bin")
124
- output = AMF.deserialize(input, 3)
125
- output.should == AMF::MAX_INTEGER
126
-
127
- input = object_fixture("amf3-0.bin")
128
- output = AMF.deserialize(input, 3)
129
- output.should == 0
130
-
131
- input = object_fixture("amf3-min.bin")
132
- output = AMF.deserialize(input, 3)
133
- output.should == AMF::MIN_INTEGER
134
- end
135
-
136
- it "should deserialize large integers" do
137
- input = object_fixture("amf3-largeMax.bin")
138
- output = AMF.deserialize(input, 3)
139
- output.should == AMF::MAX_INTEGER + 1
140
-
141
- input = object_fixture("amf3-largeMin.bin")
142
- output = AMF.deserialize(input, 3)
143
- output.should == AMF::MIN_INTEGER - 1
144
- end
145
-
146
- it "should deserialize BigNums" do
147
- input = object_fixture("amf3-bigNum.bin")
148
- output = AMF.deserialize(input, 3)
149
- output.should == 2**1000
150
- end
151
-
152
- it "should deserialize a simple string" do
153
- input = object_fixture("amf3-string.bin")
154
- output = AMF.deserialize(input, 3)
155
- output.should == "String . String"
156
- end
157
-
158
- it "should deserialize a symbol as a string" do
159
- input = object_fixture("amf3-symbol.bin")
160
- output = AMF.deserialize(input, 3)
161
- output.should == "foo"
162
- end
163
-
164
- it "should deserialize dates" do
165
- input = object_fixture("amf3-date.bin")
166
- output = AMF.deserialize(input, 3)
167
- output.should == Time.at(0)
168
- end
169
-
170
- #BAH! Who sends XML over AMF?
171
- it "should deserialize a REXML document"
172
- end
173
-
174
- describe "objects" do
175
- it "should deserialize an unmapped object as a dynamic anonymous object" do
176
- input = object_fixture("amf3-dynObject.bin")
177
- output = AMF.deserialize(input, 3)
178
-
179
- expected = {
180
- :property_one => 'foo',
181
- :property_two => 1,
182
- :nil_property => nil,
183
- :another_public_property => 'a_public_value'
184
- }
185
- output.should == expected
186
- end
187
-
188
- it "should deserialize a mapped object as a mapped ruby class instance" do
189
- class RubyClass
190
- attr_accessor :foo, :baz
191
- end
192
- AMF::ClassMapper.define {|m| m.map :as => 'org.rackAMF.ASClass', :ruby => 'RubyClass'}
193
-
194
- input = object_fixture("amf3-typedObject.bin")
195
- output = AMF.deserialize(input, 3)
196
-
197
- output.should be_a(RubyClass)
198
- output.foo.should == 'bar'
199
- output.baz.should == nil
200
- end
201
-
202
- it "should deserialize a hash as a dynamic anonymous object" do
203
- input = object_fixture("amf3-hash.bin")
204
- output = AMF.deserialize(input, 3)
205
- output.should == {:foo => "bar", :answer => 42}
206
- end
207
-
208
- it "should deserialize an empty array" do
209
- input = object_fixture("amf3-emptyArray.bin")
210
- output = AMF.deserialize(input, 3)
211
- output.should == []
212
- end
213
-
214
- it "should deserialize an array of primatives" do
215
- input = object_fixture("amf3-primArray.bin")
216
- output = AMF.deserialize(input, 3)
217
- output.should == [1,2,3,4,5]
218
- end
219
-
220
- it "should deserialize an array of mixed objects" do
221
- input = object_fixture("amf3-mixedArray.bin")
222
- output = AMF.deserialize(input, 3)
223
-
224
- h1 = {:foo_one => "bar_one"}
225
- h2 = {:foo_two => ""}
226
- so1 = {:foo_three => 42}
227
- output.should == [h1, h2, so1, {:foo_three => nil}, {}, [h1, h2, so1], [], 42, "", [], "", {}, "bar_one", so1]
228
- end
229
-
230
- it "should deserialize a byte array"
231
- end
232
-
233
- describe "and implementing the AMF Spec" do
234
- it "should keep references of duplicate strings" do
235
- input = object_fixture("amf3-stringRef.bin")
236
- output = AMF.deserialize(input, 3)
237
-
238
- class StringCarrier; attr_accessor :str; end
239
- foo = "foo"
240
- bar = "str"
241
- sc = StringCarrier.new
242
- sc = {:str => foo}
243
- output.should == [foo, bar, foo, bar, foo, sc]
244
- end
245
-
246
- it "should not reference the empty string" do
247
- input = object_fixture("amf3-emptyStringRef.bin")
248
- output = AMF.deserialize(input, 3)
249
- output.should == ["",""]
250
- end
251
-
252
- it "should keep references of duplicate dates" do
253
- input = object_fixture("amf3-datesRef.bin")
254
- output = AMF.deserialize(input, 3)
255
-
256
- output[0].should equal(output[1])
257
- # Expected object:
258
- # [DateTime.parse "1/1/1970", DateTime.parse "1/1/1970"]
259
- end
260
-
261
- it "should keep reference of duplicate objects" do
262
- input = object_fixture("amf3-objRef.bin")
263
- output = AMF.deserialize(input, 3)
264
-
265
- obj1 = {:foo => "bar"}
266
- obj2 = {:foo => obj1[:foo]}
267
- output.should == [[obj1, obj2], "bar", [obj1, obj2]]
268
- end
269
-
270
- it "should keep references of duplicate arrays" do
271
- input = object_fixture("amf3-arrayRef.bin")
272
- output = AMF.deserialize(input, 3)
273
-
274
- a = [1,2,3]
275
- b = %w{ a b c }
276
- output.should == [a, b, a, b]
277
- end
278
-
279
- it "should not keep references of duplicate empty arrays unless the object_id matches" do
280
- input = object_fixture("amf3-emptyArrayRef.bin")
281
- output = AMF.deserialize(input, 3)
282
-
283
- a = []
284
- b = []
285
- output.should == [a,b,a,b]
286
- end
287
-
288
- it "should keep references of duplicate XML and XMLDocuments"
289
- it "should keep references of duplicate byte arrays"
290
-
291
- it "should deserialize a deep object graph with circular references" do
292
- input = object_fixture("amf3-graphMember.bin")
293
- output = AMF.deserialize(input, 3)
294
-
295
- output[:children][0][:parent].should === output
296
- output[:parent].should === nil
297
- output[:children].length.should == 2
298
- # Expected object:
299
- # parent = Hash.new
300
- # child1 = Hash.new
301
- # child1[:parent] = parent
302
- # child1[:children] = []
303
- # child2 = Hash.new
304
- # child2[:parent] = parent
305
- # child2[:children] = []
306
- # parent[:parent] = nil
307
- # parent[:children] = [child1, child2]
308
- end
309
- end
310
- end
311
- end
@@ -1,51 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
-
3
- describe "when handling requests" do
4
- it "should handle remoting message from remote object" do
5
- input = request_fixture("remotingMessage.bin")
6
- req = AMF::Request.new.populate_from_stream(input)
7
-
8
- req.headers.length.should == 0
9
- req.messages.length.should == 1
10
- message = req.messages[0].data
11
- message.should be_a(AMF::Values::RemotingMessage)
12
- message.messageId.should == "FE4AF2BC-DD3C-5470-05D8-9971D51FF89D"
13
- message.body.should == [true]
14
- end
15
-
16
- it "should handle command message from remote object" do
17
- input = request_fixture("commandMessage.bin")
18
- req = AMF::Request.new.populate_from_stream(input)
19
-
20
- req.headers.length.should == 0
21
- req.messages.length.should == 1
22
- message = req.messages[0].data
23
- message.should be_a(AMF::Values::CommandMessage)
24
- message.messageId.should == "7B0ACE15-8D57-6AE5-B9D4-99C2D32C8246"
25
- message.body.should == {}
26
- end
27
- end
28
-
29
- describe "when handling responses" do
30
- it "should serialize a simple call" do
31
- resp = AMF::Response.new
32
- resp.amf_version = 3
33
- resp.messages << AMF::Message.new('/1/onResult', '', 'hello')
34
-
35
- expected = request_fixture('simple-response.bin')
36
- resp.serialize.should == expected
37
- end
38
-
39
- it "should serialize a AcknowledgeMessage response" do
40
- ak = AMF::Values::AcknowledgeMessage.new
41
- ak.clientId = "7B0ACE15-8D57-6AE5-B9D4-99C2D32C8246"
42
- ak.messageId = "7B0ACE15-8D57-6AE5-B9D4-99C2D32C8246"
43
- ak.timestamp = 0
44
- resp = AMF::Response.new
45
- resp.amf_version = 3
46
- resp.messages << AMF::Message.new('/1/onResult', '', ak)
47
-
48
- expected = request_fixture('acknowledge-response.bin')
49
- resp.serialize.should == expected
50
- end
51
- end