diff options
-rw-r--r-- | lib/plist/generator.rb | 34 | ||||
-rw-r--r-- | test/test_generator_collections.rb | 16 |
2 files changed, 37 insertions, 13 deletions
diff --git a/lib/plist/generator.rb b/lib/plist/generator.rb index 8036575..223edcc 100644 --- a/lib/plist/generator.rb +++ b/lib/plist/generator.rb @@ -64,21 +64,29 @@ module Plist else case element when Array - output << tag('array') { - element.collect {|e| plist_node(e)} - } + if element.empty? + output << "<array/>\n" + else + output << tag('array') { + element.collect {|e| plist_node(e)} + } + end when Hash - inner_tags = [] - - element.keys.sort.each do |k| - v = element[k] - inner_tags << tag('key', CGI::escapeHTML(k.to_s)) - inner_tags << plist_node(v) + if element.empty? + output << "<dict/>\n" + else + inner_tags = [] + + element.keys.sort.each do |k| + v = element[k] + inner_tags << tag('key', CGI::escapeHTML(k.to_s)) + inner_tags << plist_node(v) + end + + output << tag('dict') { + inner_tags + } end - - output << tag('dict') { - inner_tags - } when true, false output << "<#{element}/>\n" when Time diff --git a/test/test_generator_collections.rb b/test/test_generator_collections.rb index a421237..bad7a5d 100644 --- a/test/test_generator_collections.rb +++ b/test/test_generator_collections.rb @@ -20,6 +20,14 @@ END assert_equal expected, [1,2,3].to_plist(false) end + + def test_empty_array + expected = <<END +<array/> +END + + assert_equal expected, [].to_plist(false) + end def test_hash expected = <<END @@ -34,6 +42,14 @@ END # so multi-element hash tests should be reliable. We're testing that here too. assert_equal expected, {:foo => :bar, :abc => 123}.to_plist(false) end + + def test_empty_hash + expected = <<END +<dict/> +END + + assert_equal expected, {}.to_plist(false) + end def test_hash_with_array_element expected = <<END |