spec/unit/util/zaml_spec.rb in puppet-2.7.26 vs spec/unit/util/zaml_spec.rb in puppet-3.0.0.rc4
- old
+ new
@@ -1,6 +1,6 @@
-#!/usr/bin/env rspec
+#! /usr/bin/env ruby -S rspec
# encoding: UTF-8
#
# The above encoding line is a magic comment to set the default source encoding
# of this file for the Ruby interpreter. It must be on the first or second
# line of the file if an interpreter is in use. In Ruby 1.9 and later, the
@@ -14,75 +14,47 @@
require 'spec_helper'
require 'puppet/util/monkey_patches'
describe "Pure ruby yaml implementation" do
- def can_round_trip(value)
- YAML.load(value.to_yaml).should == value
- end
-
{
- 7 => "--- 7",
- 3.14159 => "--- 3.14159",
- "3.14159" => '--- "3.14159"',
- "+3.14159" => '--- "+3.14159"',
- "0x123abc" => '--- "0x123abc"',
- "-0x123abc" => '--- "-0x123abc"',
- "-0x123" => '--- "-0x123"',
- "+0x123" => '--- "+0x123"',
- "0x123.456" => '--- "0x123.456"',
- 'test' => "--- test",
- [] => "--- []",
- :symbol => "--- !ruby/sym symbol",
- {:a => "A"} => "--- \n !ruby/sym a: A",
- {:a => "x\ny"} => "--- \n !ruby/sym a: |-\n x\n y"
- }.each do |data, serialized|
- it "should convert the #{data.class} #{data.inspect} to yaml" do
- data.to_yaml.should == serialized
+ 7 => "--- 7",
+ 3.14159 => "--- 3.14159",
+ "3.14159" => '--- "3.14159"',
+ "+3.14159" => '--- "+3.14159"',
+ "0x123abc" => '--- "0x123abc"',
+ "-0x123abc" => '--- "-0x123abc"',
+ "-0x123" => '--- "-0x123"',
+ "+0x123" => '--- "+0x123"',
+ "0x123.456" => "--- 0x123.456",
+ 'test' => "--- test",
+ [] => "--- []",
+ :symbol => "--- !ruby/sym symbol",
+ {:a => "A"} => "--- \n !ruby/sym a: A",
+ {:a => "x\ny"} => "--- \n !ruby/sym a: |-\n x\n y"
+ }.each { |o,y|
+ it "should convert the #{o.class} #{o.inspect} to yaml" do
+ o.to_yaml.should == y
end
-
- it "should produce yaml for the #{data.class} #{data.inspect} that can be reconstituted" do
- can_round_trip data
+ it "should produce yaml for the #{o.class} #{o.inspect} that can be reconstituted" do
+ YAML.load(o.to_yaml).should == o
end
- end
-
- [
- { :a => "a:" },
- { :a => "a:", :b => "b:" },
- ["a:", "b:"],
- { :a => "/:", :b => "/:" },
- { :a => "a/:", :b => "a/:" },
- { :a => "\"" },
- { :a => {}.to_yaml },
- { :a => [].to_yaml },
- { :a => "".to_yaml },
- { :a => :a.to_yaml },
-
- { "a:" => "b" },
- { :a.to_yaml => "b" },
- { [1, 2, 3] => "b" },
- { "b:" => { "a" => [] } }
- ].each do |value|
- it "properly escapes #{value.inspect}, which contains YAML characters" do
- can_round_trip value
- end
- end
-
+ }
#
# Can't test for equality on raw objects
{
- Object.new => "--- !ruby/object {}",
- [Object.new] => "--- \n - !ruby/object {}",
- {Object.new => Object.new} => "--- \n ? !ruby/object {}\n : !ruby/object {}"
- }.each do |o,y|
+ Object.new => "--- !ruby/object {}",
+ [Object.new] => "--- \n - !ruby/object {}",
+ {Object.new => Object.new} => "--- \n ? !ruby/object {}\n : !ruby/object {}"
+ }.each { |o,y|
it "should convert the #{o.class} #{o.inspect} to yaml" do
o.to_yaml.should == y
end
it "should produce yaml for the #{o.class} #{o.inspect} that can be reconstituted" do
lambda { YAML.load(o.to_yaml) }.should_not raise_error
end
- end
+ }
it "should emit proper labels and backreferences for common objects" do
# Note: this test makes assumptions about the names ZAML chooses
# for labels.
x = [1, 2]
@@ -134,20 +106,10 @@
end
describe "binary data" do
subject { "M\xC0\xDF\xE5tt\xF6" }
- if String.method_defined?(:encoding)
- def binary(str)
- str.force_encoding('binary')
- end
- else
- def binary(str)
- str
- end
- end
-
it "should not explode encoding binary data" do
expect { subject.to_yaml }.not_to raise_error
end
it "should mark the binary data as binary" do
@@ -155,92 +117,14 @@
end
it "should round-trip the data" do
yaml = subject.to_yaml
read = YAML.load(yaml)
- binary(read).should == binary(subject)
- end
- [
- "\xC0\xAE", # over-long UTF-8 '.' character
- "\xC0\x80", # over-long NULL byte
- "\xC0\xFF",
- "\xC1\xAE",
- "\xC1\x80",
- "\xC1\xFF",
- "\x80", # first continuation byte
- "\xbf", # last continuation byte
- # all possible continuation bytes in one shot
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F" +
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" +
- "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF" +
- "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF",
- # lonely start characters - first, all possible two byte sequences
- "\xC0 \xC1 \xC2 \xC3 \xC4 \xC5 \xC6 \xC7 \xC8 \xC9 \xCA \xCB \xCC \xCD \xCE \xCF " +
- "\xD0 \xD1 \xD2 \xD3 \xD4 \xD5 \xD6 \xD7 \xD8 \xD9 \xDA \xDB \xDC \xDD \xDE \xDF ",
- # and so for three byte sequences, four, five, and six, as follow.
- "\xE0 \xE1 \xE2 \xE3 \xE4 \xE5 \xE6 \xE7 \xE8 \xE9 \xEA \xEB \xEC \xED \xEE \xEF ",
- "\xF0 \xF1 \xF2 \xF3 \xF4 \xF5 \xF6 \xF7 ",
- "\xF8 \xF9 \xFA \xFB ",
- "\xFC \xFD ",
- # sequences with the last byte missing
- "\xC0", "\xE0", "\xF0\x80\x80", "\xF8\x80\x80\x80", "\xFC\x80\x80\x80\x80",
- "\xDF", "\xEF\xBF", "\xF7\xBF\xBF", "\xFB\xBF\xBF\xBF", "\xFD\xBF\xBF\xBF\xBF",
- # impossible bytes
- "\xFE", "\xFF", "\xFE\xFE\xFF\xFF",
- # over-long '/' character
- "\xC0\xAF",
- "\xE0\x80\xAF",
- "\xF0\x80\x80\xAF",
- "\xF8\x80\x80\x80\xAF",
- "\xFC\x80\x80\x80\x80\xAF",
- # maximum overlong sequences
- "\xc1\xbf",
- "\xe0\x9f\xbf",
- "\xf0\x8f\xbf\xbf",
- "\xf8\x87\xbf\xbf\xbf",
- "\xfc\x83\xbf\xbf\xbf\xbf",
- # overlong NUL
- "\xc0\x80",
- "\xe0\x80\x80",
- "\xf0\x80\x80\x80",
- "\xf8\x80\x80\x80\x80",
- "\xfc\x80\x80\x80\x80\x80",
- ].each do |input|
- # It might seem like we should more correctly reject these sequences in
- # the encoder, and I would personally agree, but the sad reality is that
- # we do not distinguish binary and textual data in our language, and so we
- # wind up with the same thing - a string - containing both.
- #
- # That leads to the position where we must treat these invalid sequences,
- # which are both legitimate binary content, and illegitimate potential
- # attacks on the system, as something that passes through correctly in
- # a string. --daniel 2012-07-14
- it "binary encode highly dubious non-compliant UTF-8 input #{input.inspect}" do
- encoded = ZAML.dump(binary(input))
- encoded.should =~ /!binary/
- YAML.load(encoded).should == input
+ if read.respond_to? :force_encoding
+ read.force_encoding('binary')
+ subject.force_encoding('binary')
end
- end
-end
-describe "multi-line values" do
- [
- "none",
- "one\n",
- "two\n\n",
- ["one\n", "two"],
- ["two\n\n", "three"],
- { "\nkey" => "value" },
- { "key\n" => "value" },
- { "\nkey\n" => "value" },
- { "key\nkey" => "value" },
- { "\nkey\nkey" => "value" },
- { "key\nkey\n" => "value" },
- { "\nkey\nkey\n" => "value" },
- ].each do |input|
- it "handles #{input.inspect} without corruption" do
- zaml = ZAML.dump(input)
- YAML.load(zaml).should == input
- end
+ read.should == subject
end
end