test/unit/definition_test.rb in roxml-2.4.3 vs test/unit/definition_test.rb in roxml-2.5.0
- old
+ new
@@ -12,10 +12,16 @@
opts = ROXML::Definition.new(:authors, [:text])
assert opts.array?
assert_equal :text, opts.type
end
+ def test_empty_array_means_as_array_for_text
+ opts = ROXML::Definition.new(:authors, [])
+ assert opts.array?
+ assert_equal :text, opts.type
+ end
+
def test_attr_in_array_means_as_array_for_attr
opts = ROXML::Definition.new(:authors, [:attr])
assert opts.array?
assert_equal :attr, opts.type
end
@@ -24,26 +30,35 @@
opts = ROXML::Definition.new(:authors, [Hash])
assert opts.array?
assert_equal Hash, opts.type
end
- def test_content_is_a_recognized_type
- assert ROXML::Definition.new(:author, :content).content?
+ def test_literal_as_array_is_deprecated
+ assert_deprecated do
+ assert ROXML::Definition.new(:authors, :as => :array).array?
+ end
end
+ def test_block_shorthand_in_array_means_array
+ opts = ROXML::Definition.new(:intarray, :as => [Integer])
+ assert opts.array?
+ assert_equal :text, opts.type
+ assert 1, opts.blocks.size
+ end
+
def test_required
- assert !ROXML::Definition.new(:author, :content).required?
- assert ROXML::Definition.new(:author, :content, :required => true).required?
- assert !ROXML::Definition.new(:author, :content, :required => false).required?
+ assert !ROXML::Definition.new(:author).required?
+ assert ROXML::Definition.new(:author, :required => true).required?
+ assert !ROXML::Definition.new(:author, :required => false).required?
end
def test_required_conflicts_with_else
assert_raise ArgumentError do
- ROXML::Definition.new(:author, :content, :required => true, :else => 'Johnny')
+ ROXML::Definition.new(:author, :required => true, :else => 'Johnny')
end
assert_nothing_raised do
- ROXML::Definition.new(:author, :content, :required => false, :else => 'Johnny')
+ ROXML::Definition.new(:author, :required => false, :else => 'Johnny')
end
end
def test_hash_of_attrs
opts = ROXML::Definition.new(:attributes, {:attrs => [:name, :value]})
@@ -63,36 +78,55 @@
end
def test_hash_with_attr_key_and_content_val
opts = ROXML::Definition.new(:attributes, {:key => {:attr => :name},
:value => :content})
- assert_hash(opts, :attr => 'name', :content => '')
+ assert_hash(opts, :attr => 'name', :text => '.')
end
def test_hash_with_options
opts = ROXML::Definition.new(:definitions, {:attrs => [:dt, :dd]},
- :in => :definitions)
+ :in => :definitions, :from => 'definition')
assert_hash(opts, :attr => 'dt', :attr => 'dd')
+ assert_equal 'definition', opts.hash.wrapper
end
def test_no_block_shorthand_means_no_block
assert ROXML::Definition.new(:count).blocks.empty?
- assert ROXML::Definition.new(:count, :as => :intager).blocks.empty?
- assert ROXML::Definition.new(:count, :as => :foat).blocks.empty?
+ assert_deprecated do
+ assert ROXML::Definition.new(:count, :as => :intager).blocks.empty?
+ end
+ assert_deprecated do
+ assert ROXML::Definition.new(:count, :as => :foat).blocks.empty?
+ end
end
def test_block_integer_shorthand
assert_equal 3, ROXML::Definition.new(:count, :as => Integer).blocks.first['3']
end
def test_block_float_shorthand
assert_equal 3.1, ROXML::Definition.new(:count, :as => Float).blocks.first['3.1']
end
+ def test_from_attr_is_supported
+ opts = ROXML::Definition.new(:count, :from => :attr)
+ assert_equal "count", opts.name
+ assert_equal :attr, opts.type
+ end
+
+ def test_from_at_name_is_supported
+ opts = ROXML::Definition.new(:count, :from => "@COUNT")
+ assert_equal "COUNT", opts.name
+ assert_equal :attr, opts.type
+ end
+
def test_multiple_shorthands_raises
assert_raise ArgumentError do
- ROXML::Definition.new(:count, :as => [Float, Integer])
+ assert_deprecated do
+ ROXML::Definition.new(:count, :as => [Float, Integer])
+ end
end
end
def test_stacked_blocks
assert_equal 2, ROXML::Definition.new(:count, :as => Integer) {|val| val.to_i }.blocks.size
@@ -154,7 +188,122 @@
def test_xpath_in_is_formed_properly
opts = ROXML::Definition.new(:manufacturer, :in => './')
assert_equal "manufacturer", opts.name
assert_equal "./", opts.wrapper
+ end
+
+ def test_cdata_is_specifiable
+ assert ROXML::Definition.new(:manufacturer, :cdata => true).cdata?
+ end
+
+ def test_as_cdata_is_deprecated
+ assert_deprecated do
+ assert ROXML::Definition.new(:manufacturer, :as => :cdata).cdata?
+ end
+ assert_deprecated do
+ assert ROXML::Definition.new(:manufacturer, :as => [Integer, :cdata]).cdata?
+ end
+ end
+
+ def test_as_supports_generic_roxml_types
+ assert_equal RoxmlObject, ROXML::Definition.new(:type, :as => RoxmlObject).type
+ assert_deprecated do
+ assert_equal RoxmlObject, ROXML::Definition.new(:type, RoxmlObject).type
+ end
+ end
+
+ def test_as_supports_generic_roxml_types_in_arrays
+ assert_equal RoxmlObject, ROXML::Definition.new(:types, :as => [RoxmlObject]).type
+ assert_deprecated do
+ assert_equal RoxmlObject, ROXML::Definition.new(:types, [RoxmlObject]).type
+ end
+ end
+
+ def test_default_works
+ opts = ROXML::Definition.new(:missing, :else => true)
+ assert_equal true, opts.to_ref(RoxmlObject.new).value_in(ROXML::XML::Parser.parse('<xml></xml>'))
+ end
+
+ def test_default_works_for_arrays
+ opts = ROXML::Definition.new(:missing, :as => [])
+ assert_equal [], opts.to_ref(RoxmlObject.new).value_in(ROXML::XML::Parser.parse('<xml></xml>'))
+ assert_deprecated do
+ opts = ROXML::Definition.new(:missing, [])
+ assert_equal [], opts.to_ref(RoxmlObject.new).value_in(ROXML::XML::Parser.parse('<xml></xml>'))
+ end
+ assert_deprecated do
+ opts = ROXML::Definition.new(:missing, :as => :array)
+ assert_equal [], opts.to_ref(RoxmlObject.new).value_in(ROXML::XML::Parser.parse('<xml></xml>'))
+ end
+ end
+
+ def test_default_works_for_recursive_objects
+ opts = ROXML::Definition.new(:missing, :as => RecursiveObject, :else => false)
+ assert_equal false, opts.to_ref(RoxmlObject.new).value_in(ROXML::XML::Parser.parse('<xml></xml>'))
+ end
+
+ def test_content_is_accepted_as_from
+ assert ROXML::Definition.new(:author, :from => :content).content?
+ assert ROXML::Definition.new(:author, :from => '.').content?
+ end
+
+ def test_content_is_a_recognized_type
+ assert_deprecated do
+ opts = ROXML::Definition.new(:author, :content)
+ assert opts.content?
+ assert_equal '.', opts.name
+ assert_equal :text, opts.type
+ end
+ end
+
+ def test_content_symbol_as_target_is_translated_to_string
+ assert_deprecated do
+ opts = ROXML::Definition.new(:content, :attr => :content)
+ assert_equal 'content', opts.name
+ assert_equal :attr, opts.type
+ end
+ end
+
+ def test_attr_is_accepted_as_from
+ assert_equal :attr, ROXML::Definition.new(:author, :from => :attr).type
+ assert_equal :attr, ROXML::Definition.new(:author, :from => '@author').type
+ end
+
+ def test_attr_is_a_recognized_type
+ assert_deprecated do
+ opts = ROXML::Definition.new(:author, :attr)
+ assert_equal 'author', opts.name
+ assert_equal :attr, opts.type
+ end
+ end
+
+ def test_name_ending_with_on_warns_of_coming_date_default
+ assert_deprecated do
+ assert_equal :text, ROXML::Definition.new(:created_at).type
+ end
+ end
+
+ def test_name_ending_with_at_warns_of_coming_datetime_default
+ assert_deprecated do
+ assert_equal :text, ROXML::Definition.new(:created_on).type
+ end
+ end
+end
+
+class RecursiveObject
+ include ROXML
+
+ xml_reader :next, RecursiveObject, :else => true
+end
+
+class RoxmlObject
+ include ROXML
+end
+
+class HashDefinitionTest < Test::Unit::TestCase
+ def test_content_detected_as_from
+ opts = ROXML::Definition.new(:hash, {:key => :content, :value => :name})
+ assert_equal '.', opts.hash.key.name
+ assert_equal :text, opts.hash.key.type
end
end
\ No newline at end of file