summaryrefslogtreecommitdiff
path: root/test/psych/test_safe_load.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/psych/test_safe_load.rb')
-rw-r--r--test/psych/test_safe_load.rb81
1 files changed, 73 insertions, 8 deletions
diff --git a/test/psych/test_safe_load.rb b/test/psych/test_safe_load.rb
index f3fdb9b..82a5f19 100644
--- a/test/psych/test_safe_load.rb
+++ b/test/psych/test_safe_load.rb
@@ -22,6 +22,8 @@ module Psych
def test_explicit_recursion
x = []
x << x
+ assert_equal(x, Psych.safe_load(Psych.dump(x), whitelist_classes: [], whitelist_symbols: [], aliases: true))
+ # deprecated interface
assert_equal(x, Psych.safe_load(Psych.dump(x), [], [], true))
end
@@ -30,6 +32,16 @@ module Psych
assert_raises(Psych::DisallowedClass) do
Psych.safe_load yml
end
+ assert_equal(
+ :foo,
+ Psych.safe_load(
+ yml,
+ whitelist_classes: [Symbol],
+ whitelist_symbols: [:foo]
+ )
+ )
+
+ # deprecated interface
assert_equal(:foo, Psych.safe_load(yml, [Symbol], [:foo]))
end
@@ -38,32 +50,71 @@ module Psych
assert_safe_cycle :foo
end
assert_raises(Psych::DisallowedClass) do
+ Psych.safe_load '--- !ruby/symbol foo', whitelist_classes: []
+ end
+
+ # deprecated interface
+ assert_raises(Psych::DisallowedClass) do
Psych.safe_load '--- !ruby/symbol foo', []
end
- assert_safe_cycle :foo, [Symbol]
- assert_safe_cycle :foo, %w{ Symbol }
+
+ assert_safe_cycle :foo, whitelist_classes: [Symbol]
+ assert_safe_cycle :foo, whitelist_classes: %w{ Symbol }
+ assert_equal :foo, Psych.safe_load('--- !ruby/symbol foo', whitelist_classes: [Symbol])
+
+ # deprecated interface
assert_equal :foo, Psych.safe_load('--- !ruby/symbol foo', [Symbol])
end
def test_foo
assert_raises(Psych::DisallowedClass) do
+ Psych.safe_load '--- !ruby/object:Foo {}', whitelist_classes: [Foo]
+ end
+
+ # deprecated interface
+ assert_raises(Psych::DisallowedClass) do
Psych.safe_load '--- !ruby/object:Foo {}', [Foo]
end
+
assert_raises(Psych::DisallowedClass) do
assert_safe_cycle Foo.new
end
+ assert_kind_of(Foo, Psych.safe_load(Psych.dump(Foo.new), whitelist_classes: [Foo]))
+
+ # deprecated interface
assert_kind_of(Foo, Psych.safe_load(Psych.dump(Foo.new), [Foo]))
end
X = Struct.new(:x)
def test_struct_depends_on_sym
- assert_safe_cycle(X.new, [X, Symbol])
+ assert_safe_cycle(X.new, whitelist_classes: [X, Symbol])
assert_raises(Psych::DisallowedClass) do
- cycle X.new, [X]
+ cycle X.new, whitelist_classes: [X]
end
end
def test_anon_struct
+ assert Psych.safe_load(<<-eoyml, whitelist_classes: [Struct, Symbol])
+--- !ruby/struct
+ foo: bar
+ eoyml
+
+ assert_raises(Psych::DisallowedClass) do
+ Psych.safe_load(<<-eoyml, whitelist_classes: [Struct])
+--- !ruby/struct
+ foo: bar
+ eoyml
+ end
+
+ assert_raises(Psych::DisallowedClass) do
+ Psych.safe_load(<<-eoyml, whitelist_classes: [Symbol])
+--- !ruby/struct
+ foo: bar
+ eoyml
+ end
+ end
+
+ def test_deprecated_anon_struct
assert Psych.safe_load(<<-eoyml, [Struct, Symbol])
--- !ruby/struct
foo: bar
@@ -84,14 +135,28 @@ module Psych
end
end
+ def test_safe_load_default_fallback
+ assert_nil Psych.safe_load("")
+ end
+
+ def test_safe_load
+ assert_equal %w[a b], Psych.safe_load("- a\n- b")
+ end
+
+ def test_safe_load_raises_on_bad_input
+ assert_raises(Psych::SyntaxError) { Psych.safe_load("--- `") }
+ end
+
private
- def cycle object, whitelist = []
- Psych.safe_load(Psych.dump(object), whitelist)
+ def cycle object, whitelist_classes: []
+ Psych.safe_load(Psych.dump(object), whitelist_classes: whitelist_classes)
+ # deprecated interface test
+ Psych.safe_load(Psych.dump(object), whitelist_classes)
end
- def assert_safe_cycle object, whitelist = []
- other = cycle object, whitelist
+ def assert_safe_cycle object, whitelist_classes: []
+ other = cycle object, whitelist_classes: whitelist_classes
assert_equal object, other
end
end