1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
##
# Struct ISO Test
assert('Data') do
assert_equal Class, Data.class
end
assert('Data.define') do
c = Data.define(:m1, :m2)
assert_equal Data, c.superclass
assert_equal [:m1, :m2], c.members
end
assert('Data#==') do
c = Data.define(:m1, :m2)
cc1 = c.new(1,2)
cc2 = c.new(1,2)
assert_true cc1 == cc2
end
assert('Data#members') do
c = Data.define(:m1, :m2)
assert_equal [:m1, :m2], c.new(1,2).members
end
assert('wrong struct arg count') do
c = Data.define(:m1)
assert_raise ArgumentError do
cc = c.new(1,2,3)
end
end
assert('data dup') do
c = Data.define(:m1, :m2, :m3, :m4, :m5)
cc = c.new(1,2,3,4,5)
assert_nothing_raised {
assert_equal(cc, cc.dup)
}
end
assert('Data inspect') do
c = Data.define(:m1, :m2, :m3, :m4, :m5)
cc = c.new(1,2,3,4,5)
assert_equal "#<data m1=1, m2=2, m3=3, m4=4, m5=5>", cc.inspect
end
assert('Data#to_h') do
s = Data.define(:white, :red, :green).new('ruuko', 'yuzuki', 'hitoe')
assert_equal({:white => 'ruuko', :red => 'yuzuki', :green => 'hitoe'}) { s.to_h }
end
assert("Data.define does not allow array") do
assert_raise(TypeError) do
Data.define("Test", [:a])
end
end
assert("Data.define generates subclass of Data") do
begin
original_struct = Data
Data = String
assert_equal original_struct, original_struct.define(:foo).superclass
ensure
Data = original_struct
end
end
assert 'Data#freeze' do
c = Data.define(:m)
o = c.new(:test)
assert_equal :test, o.m
assert_nothing_raised {
o.freeze
}
end
|