diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2009-07-25 12:55:01 +0100 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2009-07-25 12:55:01 +0100 |
commit | c6b16fc2aada37aab1949cd9a1e46a2d9ccc8381 (patch) | |
tree | ea13a4e420a94ed7b552529ca9dc4b02680203d2 /activemodel/test | |
parent | f2d65a456fd93fd3a220f85c1001f0180bfdd6be (diff) | |
parent | 0c68d23f19010379a9320690ca17a26743c8f071 (diff) | |
download | rails-c6b16fc2aada37aab1949cd9a1e46a2d9ccc8381.tar.gz rails-c6b16fc2aada37aab1949cd9a1e46a2d9ccc8381.tar.bz2 rails-c6b16fc2aada37aab1949cd9a1e46a2d9ccc8381.zip |
Merge commit 'mainstream/master'
Diffstat (limited to 'activemodel/test')
-rw-r--r-- | activemodel/test/cases/attributes_test.rb | 30 | ||||
-rw-r--r-- | activemodel/test/cases/observing_test.rb | 7 | ||||
-rw-r--r-- | activemodel/test/cases/serializeration/json_serialization_test.rb (renamed from activemodel/test/cases/json_serialization_test.rb) | 27 | ||||
-rw-r--r-- | activemodel/test/cases/serializeration/xml_serialization_test.rb | 108 | ||||
-rw-r--r-- | activemodel/test/models/contact.rb | 7 |
5 files changed, 142 insertions, 37 deletions
diff --git a/activemodel/test/cases/attributes_test.rb b/activemodel/test/cases/attributes_test.rb deleted file mode 100644 index 5f3ea839a4..0000000000 --- a/activemodel/test/cases/attributes_test.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'cases/helper' - -class AttributesTest < ActiveModel::TestCase - class Person - include ActiveModel::Attributes - attr_accessor :name - end - - test "reads attribute" do - p = Person.new - assert_equal nil, p.read_attribute(:name) - - p.name = "Josh" - assert_equal "Josh", p.read_attribute(:name) - end - - test "writes attribute" do - p = Person.new - assert_equal nil, p.name - - p.write_attribute(:name, "Josh") - assert_equal "Josh", p.name - end - - test "returns all attributes" do - p = Person.new - p.name = "Josh" - assert_equal({"name" => "Josh"}, p.attributes) - end -end diff --git a/activemodel/test/cases/observing_test.rb b/activemodel/test/cases/observing_test.rb index 564451fa2f..fbf93c19ef 100644 --- a/activemodel/test/cases/observing_test.rb +++ b/activemodel/test/cases/observing_test.rb @@ -1,6 +1,8 @@ require 'cases/helper' -class ObservedModel < ActiveModel::Base +class ObservedModel + include ActiveModel::Observing + class Observer end end @@ -17,7 +19,8 @@ class FooObserver < ActiveModel::Observer end end -class Foo < ActiveModel::Base +class Foo + include ActiveModel::Observing end class ObservingTest < ActiveModel::TestCase diff --git a/activemodel/test/cases/json_serialization_test.rb b/activemodel/test/cases/serializeration/json_serialization_test.rb index abcec67a85..6227aedc39 100644 --- a/activemodel/test/cases/json_serialization_test.rb +++ b/activemodel/test/cases/serializeration/json_serialization_test.rb @@ -1,12 +1,15 @@ require 'cases/helper' +require 'models/contact' -class JsonSerializationTest < ActiveModel::TestCase - class Contact - extend ActiveModel::Naming - include ActiveModel::Serializers::JSON - attr_accessor :name, :age, :created_at, :awesome, :preferences +class Contact + include ActiveModel::Serializers::JSON + + def attributes + instance_values end +end +class JsonSerializationTest < ActiveModel::TestCase def setup @contact = Contact.new @contact.name = 'Konata Izumi' @@ -61,4 +64,18 @@ class JsonSerializationTest < ActiveModel::TestCase assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) assert_match %r{"preferences":\{"shows":"anime"\}}, json end + + test "methds are called on object" do + # Define methods on fixture. + def @contact.label; "Has cheezburger"; end + def @contact.favorite_quote; "Constraints are liberating"; end + + # Single method. + assert_match %r{"label":"Has cheezburger"}, @contact.to_json(:only => :name, :methods => :label) + + # Both methods. + methods_json = @contact.to_json(:only => :name, :methods => [:label, :favorite_quote]) + assert_match %r{"label":"Has cheezburger"}, methods_json + assert_match %r{"favorite_quote":"Constraints are liberating"}, methods_json + end end diff --git a/activemodel/test/cases/serializeration/xml_serialization_test.rb b/activemodel/test/cases/serializeration/xml_serialization_test.rb new file mode 100644 index 0000000000..428e5a6bd1 --- /dev/null +++ b/activemodel/test/cases/serializeration/xml_serialization_test.rb @@ -0,0 +1,108 @@ +require 'cases/helper' +require 'models/contact' + +class Contact + include ActiveModel::Serializers::Xml + + def attributes + instance_values + end +end + +module Admin + class Contact < ::Contact + end +end + +class XmlSerializationTest < ActiveModel::TestCase + def setup + @contact = Contact.new + @contact.name = 'aaron stack' + @contact.age = 25 + @contact.created_at = Time.utc(2006, 8, 1) + @contact.awesome = false + @contact.preferences = { :gem => 'ruby' } + end + + test "should serialize default root" do + @xml = @contact.to_xml + assert_match %r{^<contact>}, @xml + assert_match %r{</contact>$}, @xml + end + + test "should serialize namespaced root" do + @xml = Admin::Contact.new(@contact.attributes).to_xml + assert_match %r{^<admin-contact>}, @xml + assert_match %r{</admin-contact>$}, @xml + end + + test "should serialize default root with namespace" do + @xml = @contact.to_xml :namespace => "http://xml.rubyonrails.org/contact" + assert_match %r{^<contact xmlns="http://xml.rubyonrails.org/contact">}, @xml + assert_match %r{</contact>$}, @xml + end + + test "should serialize custom root" do + @xml = @contact.to_xml :root => 'xml_contact' + assert_match %r{^<xml-contact>}, @xml + assert_match %r{</xml-contact>$}, @xml + end + + test "should allow undasherized tags" do + @xml = @contact.to_xml :root => 'xml_contact', :dasherize => false + assert_match %r{^<xml_contact>}, @xml + assert_match %r{</xml_contact>$}, @xml + assert_match %r{<created_at}, @xml + end + + test "should allow camelized tags" do + @xml = @contact.to_xml :root => 'xml_contact', :camelize => true + assert_match %r{^<XmlContact>}, @xml + assert_match %r{</XmlContact>$}, @xml + assert_match %r{<CreatedAt}, @xml + end + + test "should allow skipped types" do + @xml = @contact.to_xml :skip_types => true + assert %r{<age>25</age>}.match(@xml) + end + + test "should include yielded additions" do + @xml = @contact.to_xml do |xml| + xml.creator "David" + end + assert_match %r{<creator>David</creator>}, @xml + end + + test "should serialize string" do + assert_match %r{<name>aaron stack</name>}, @contact.to_xml + end + + test "should serialize integer" do + assert_match %r{<age type="integer">25</age>}, @contact.to_xml + end + + test "should serialize datetime" do + assert_match %r{<created-at type=\"datetime\">2006-08-01T00:00:00Z</created-at>}, @contact.to_xml + end + + test "should serialize boolean" do + assert_match %r{<awesome type=\"boolean\">false</awesome>}, @contact.to_xml + end + + test "should serialize yaml" do + assert_match %r{<preferences type=\"yaml\">--- \n:gem: ruby\n</preferences>}, @contact.to_xml + end + + test "should call proc on object" do + proc = Proc.new { |options| options[:builder].tag!('nationality', 'unknown') } + xml = @contact.to_xml(:procs => [ proc ]) + assert_match %r{<nationality>unknown</nationality>}, xml + end + + test 'should supply serializable to second proc argument' do + proc = Proc.new { |options, record| options[:builder].tag!('name-reverse', record.name.reverse) } + xml = @contact.to_xml(:procs => [ proc ]) + assert_match %r{<name-reverse>kcats noraa</name-reverse>}, xml + end +end diff --git a/activemodel/test/models/contact.rb b/activemodel/test/models/contact.rb new file mode 100644 index 0000000000..f9fb0af027 --- /dev/null +++ b/activemodel/test/models/contact.rb @@ -0,0 +1,7 @@ +class Contact + attr_accessor :name, :age, :created_at, :awesome, :preferences + + def initialize(options = {}) + options.each { |name, value| send("#{name}=", value) } + end +end |