summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/plist/generator.rb34
-rw-r--r--test/test_generator_collections.rb16
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