From c48b7a34037ae603df95dc8e9629461d37cf230d Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Fri, 15 May 2015 20:59:02 +0300 Subject: [PATCH] object may define itself as value by defining is_value and returning true but then it must also define to_sof --- lib/sof/util.rb | 3 ++ test/test_basic.rb | 106 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 test/test_basic.rb diff --git a/lib/sof/util.rb b/lib/sof/util.rb index 99b391a..d2654d6 100644 --- a/lib/sof/util.rb +++ b/lib/sof/util.rb @@ -7,6 +7,9 @@ module Sof return true if o.class == Fixnum return true if o.class == Symbol return true if o.class == String + if o.respond_to? :is_value? + return true if o.is_value? + end return false end diff --git a/test/test_basic.rb b/test/test_basic.rb new file mode 100644 index 0000000..b1fa264 --- /dev/null +++ b/test/test_basic.rb @@ -0,0 +1,106 @@ +require_relative "helper" +require "yaml" + +class ObjectWithAttributes + def initialize + @name = "some name" + @number = 1234 + end + attr_accessor :extra +end +OBJECT_STRING = "ObjectWithAttributes(:name => 'some name', :number => 1234)" + +class BasicSof < MiniTest::Test + def check should + same = (should == @out) + puts "Shouldda\n#{@out}" unless same + assert_equal should , @out + end + def test_true + @out = Sof::Writer.write(true) + check "true" + end + def test_num + @out = Sof::Writer.write(124) + check "124" + end + def test_simple_object + @out = Sof::Writer.write(ObjectWithAttributes.new) + check "#{OBJECT_STRING}" + end + def test_object_extra_array + object = ObjectWithAttributes.new + object.extra = [:sym , 123] + @out = Sof::Writer.write(object) + check "#{OBJECT_STRING}\n :extra [:sym, 123]" + end + def test_simple_array + @out = Sof::Writer.write([true, 1234]) + check "[true, 1234]" + end + def test_array_object + @out = Sof::Writer.write([true, 1234 , ObjectWithAttributes.new]) + check "-true\n-1234\n-#{OBJECT_STRING}" + end + def test_array_array + @out = Sof::Writer.write([true, 1 , [true , 12 ]]) + check "-true\n-1\n-[true, 12]" + end + def test_array_array_reverse + @out = Sof::Writer.write([ [true , 12 ], true, 1]) + check "-[true, 12]\n-true\n-1" + end + def test_array_array_array + @out = Sof::Writer.write([true, 1 , [true , 12 , [true , 123 ]]]) + check "-true\n-1\n--true\n -12\n -[true, 123]" + end + def test_array_array_object + @out = Sof::Writer.write([true, 1 , [true , 12 , ObjectWithAttributes.new]]) + check "-true\n-1\n--true\n -12\n -#{OBJECT_STRING}" + end + def test_simple_hash + @out = Sof::Writer.write({ one: 1 , tru: true }) + check "{:one => 1, :tru => true}" + end + def test_hash_object + @out = Sof::Writer.write({ one: 1 , two: ObjectWithAttributes.new }) + check "-:one => 1\n-:two => #{OBJECT_STRING}" + end + def test_array_hash + @out = Sof::Writer.write([true, 1 , { one: 1 , tru: true }]) + check "-true\n-1\n-{:one => 1, :tru => true}" + end + def test_hash_array + @out = Sof::Writer.write({ one: [1 , ObjectWithAttributes.new] , two: true }) + check "-:one => -1\n -#{OBJECT_STRING}\n-:two => true" + end + def test_array_recursive + ar = [true, 1 ] + ar << ar + @out = Sof::Writer.write(ar) + check "&1 [true, 1, *1]" + end + def test_object_recursive + object = ObjectWithAttributes.new + object.extra = object + @out = Sof::Writer.write(object) + check "&1 ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => *1)" + end + def test_object_inline + object = ObjectWithAttributes.new + object.extra = Object.new + @out = Sof::Writer.write(object) + check "ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => Object())" + end + def test_class + @out = Sof::Writer.write(ObjectWithAttributes) + check "ObjectWithAttributes" + end + def test_class_ref + object = ObjectWithAttributes.new + object.extra = ObjectWithAttributes + ar = [object , ObjectWithAttributes] + @out = Sof::Writer.write(ar) + check "-ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => *1)\n-&1 ObjectWithAttributes" + end +end \ No newline at end of file