impress/vendor/gems/RocketAMF-1.0.0/spec/class_mapping_spec.rb
Emi Matchu b1f06029f8 Moderize RocketAMF C types to fix build error
I'm not sure if this is a Mac-only problem or what, but we were getting incompatible-function-pointer errors when trying to build the RocketAMF C extensions. This fixes that! (Maybe it's like, Mac-only but as of Ruby 3.4 in specific? We're running RocketAMF in production on Ruby 3.4 right now without this. Shrug.)
2025-10-30 02:45:56 +00:00

110 lines
No EOL
3.7 KiB
Ruby

require "spec_helper.rb"
describe RocketAMF::ClassMapping do
before :each do
RocketAMF::ClassMapping.reset
RocketAMF::ClassMapping.define do |m|
m.map :as => 'ASClass', :ruby => 'ClassMappingTest'
end
@mapper = RocketAMF::ClassMapping.new
end
describe "class name mapping" do
it "should allow resetting of mappings back to defaults" do
@mapper.get_as_class_name('ClassMappingTest').should_not be_nil
RocketAMF::ClassMapping.reset
@mapper = RocketAMF::ClassMapping.new
@mapper.get_as_class_name('ClassMappingTest').should be_nil
@mapper.get_as_class_name('RocketAMF::Values::AcknowledgeMessage').should_not be_nil
end
it "should return AS class name for ruby objects" do
@mapper.get_as_class_name(ClassMappingTest.new).should == 'ASClass'
@mapper.get_as_class_name('ClassMappingTest').should == 'ASClass'
@mapper.get_as_class_name(RocketAMF::Values::TypedHash.new('ClassMappingTest')).should == 'ASClass'
@mapper.get_as_class_name('BadClass').should be_nil
end
it "should instantiate a ruby class" do
@mapper.get_ruby_obj('ASClass').should be_a(ClassMappingTest)
end
it "should properly instantiate namespaced classes" do
RocketAMF::ClassMapping.mappings.map :as => 'ASClass', :ruby => 'ANamespace::TestRubyClass'
@mapper = RocketAMF::ClassMapping.new
@mapper.get_ruby_obj('ASClass').should be_a(ANamespace::TestRubyClass)
end
it "should return a hash with original type if not mapped" do
obj = @mapper.get_ruby_obj('UnmappedClass')
obj.should be_a(RocketAMF::Values::TypedHash)
obj.type.should == 'UnmappedClass'
end
it "should map special classes from AS by default" do
as_classes = [
'flex.messaging.messages.AcknowledgeMessage',
'flex.messaging.messages.CommandMessage',
'flex.messaging.messages.RemotingMessage'
]
as_classes.each do |as_class|
@mapper.get_ruby_obj(as_class).should_not be_a(RocketAMF::Values::TypedHash)
end
end
it "should map special classes from ruby by default" do
ruby_classes = [
'RocketAMF::Values::AcknowledgeMessage',
'RocketAMF::Values::ErrorMessage'
]
ruby_classes.each do |obj|
@mapper.get_as_class_name(obj).should_not be_nil
end
end
it "should allow config modification" do
RocketAMF::ClassMapping.mappings.map :as => 'SecondClass', :ruby => 'ClassMappingTest'
@mapper = RocketAMF::ClassMapping.new
@mapper.get_as_class_name(ClassMappingTest.new).should == 'SecondClass'
end
end
describe "ruby object populator" do
it "should populate a ruby class" do
obj = @mapper.populate_ruby_obj ClassMappingTest.new, {:prop_a => 'Data'}
obj.prop_a.should == 'Data'
end
it "should populate a typed hash" do
obj = @mapper.populate_ruby_obj RocketAMF::Values::TypedHash.new('UnmappedClass'), {:prop_a => 'Data'}
obj[:prop_a].should == 'Data'
end
end
describe "property extractor" do
it "should extract hash properties" do
hash = {:a => 'test1', 'b' => 'test2'}
props = @mapper.props_for_serialization(hash)
props.should == {'a' => 'test1', 'b' => 'test2'}
end
it "should extract object properties" do
obj = ClassMappingTest.new
obj.prop_a = 'Test A'
hash = @mapper.props_for_serialization obj
hash.should == {'prop_a' => 'Test A', 'prop_b' => nil}
end
it "should extract inherited object properties" do
obj = ClassMappingTest2.new
obj.prop_a = 'Test A'
obj.prop_c = 'Test C'
hash = @mapper.props_for_serialization obj
hash.should == {'prop_a' => 'Test A', 'prop_b' => nil, 'prop_c' => 'Test C'}
end
end
end