diff options
author | Ben Bleything <ben@bleything.net> | 2006-09-15 17:39:35 +0000 |
---|---|---|
committer | Ben Bleything <ben@bleything.net> | 2006-09-15 17:39:35 +0000 |
commit | aa03932b0130c110102c27e215d87d230f994877 (patch) | |
tree | ff5b017da86b6a2eba4b2b8b18ffa68c68e3a36f | |
parent | 9c13f486024574a0ec14f84ddca39a7ef0a0341f (diff) | |
download | plist-aa03932b0130c110102c27e215d87d230f994877.tar.gz |
add tests and fixes for empty collection elements (more pedantic adherence to What Apple Does)
-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 |