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