1require 'test/unit' 2require "-test-/st/update" 3 4class Bug::StTable 5 class Test_Update < Test::Unit::TestCase 6 def setup 7 @tbl = Bug::StTable.new 8 @tbl[:a] = 1 9 @tbl[:b] = 2 10 end 11 12 def test_notfound 13 assert_equal(false, @tbl.st_update(:c) {42}) 14 assert_equal({a: 1, b: 2, c: 42}, @tbl) 15 end 16 17 def test_continue 18 args = nil 19 assert_equal(true, @tbl.st_update(:a) {|*x| args = x; false}) 20 assert_equal({a: 1, b: 2}, @tbl, :a) 21 assert_equal([:a, 1], args) 22 end 23 24 def test_delete 25 args = nil 26 assert_equal(true, @tbl.st_update(:a) {|*x| args = x; nil}) 27 assert_equal({b: 2}, @tbl, :a) 28 assert_equal([:a, 1], args) 29 end 30 31 def test_update 32 args = nil 33 assert_equal(true, @tbl.st_update(:a) {|*x| args = x; 3}) 34 assert_equal({a: 3, b: 2}, @tbl, :a) 35 assert_equal([:a, 1], args) 36 end 37 38 def test_pass_objects_in_st_table 39 bug7330 = '[ruby-core:49220]' 40 key = "abc".freeze 41 value = "def" 42 @tbl[key] = value 43 @tbl.st_update("abc") {|*args| 44 assert_same(key, args[0], bug7330) 45 assert_same(value, args[1], bug7330) 46 nil 47 } 48 end 49 end 50end 51