mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 5f50a56efc
			
		
	
	
		5f50a56efc
		
	
	
	
	
		
			
			git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60491 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			135 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: false
 | |
| require 'test/unit'
 | |
| 
 | |
| class TestWeakMap < Test::Unit::TestCase
 | |
|   def setup
 | |
|     @wm = ObjectSpace::WeakMap.new
 | |
|   end
 | |
| 
 | |
|   def test_map
 | |
|     x = Object.new
 | |
|     k = "foo"
 | |
|     @wm[k] = x
 | |
|     assert_same(x, @wm[k])
 | |
|     assert_not_same(x, @wm["FOO".downcase])
 | |
|   end
 | |
| 
 | |
|   def test_aset_const
 | |
|     x = Object.new
 | |
|     assert_raise(ArgumentError) {@wm[true] = x}
 | |
|     assert_raise(ArgumentError) {@wm[false] = x}
 | |
|     assert_raise(ArgumentError) {@wm[nil] = x}
 | |
|     assert_raise(ArgumentError) {@wm[42] = x}
 | |
|     assert_raise(ArgumentError) {@wm[:foo] = x}
 | |
|     assert_raise(ArgumentError) {@wm[x] = true}
 | |
|     assert_raise(ArgumentError) {@wm[x] = false}
 | |
|     assert_raise(ArgumentError) {@wm[x] = nil}
 | |
|     assert_raise(ArgumentError) {@wm[x] = 42}
 | |
|     assert_raise(ArgumentError) {@wm[x] = :foo}
 | |
|   end
 | |
| 
 | |
|   def test_include?
 | |
|     m = __callee__[/test_(.*)/, 1]
 | |
|     k = "foo"
 | |
|     1.times do
 | |
|       x = Object.new
 | |
|       @wm[k] = x
 | |
|       assert_send([@wm, m, k])
 | |
|       assert_not_send([@wm, m, "FOO".downcase])
 | |
|       x = nil
 | |
|     end
 | |
|     GC.start
 | |
|     skip # TODO: failure introduced from r60440
 | |
|     assert_not_send([@wm, m, k])
 | |
|   end
 | |
|   alias test_member? test_include?
 | |
|   alias test_key? test_include?
 | |
| 
 | |
|   def test_inspect
 | |
|     x = Object.new
 | |
|     k = BasicObject.new
 | |
|     @wm[k] = x
 | |
|     assert_match(/\A\#<#{@wm.class.name}:[^:]+:\s\#<BasicObject:[^:]*>\s=>\s\#<Object:[^:]*>>\z/,
 | |
|                  @wm.inspect)
 | |
|   end
 | |
| 
 | |
|   def test_each
 | |
|     m = __callee__[/test_(.*)/, 1]
 | |
|     x1 = Object.new
 | |
|     k1 = "foo"
 | |
|     @wm[k1] = x1
 | |
|     x2 = Object.new
 | |
|     k2 = "bar"
 | |
|     @wm[k2] = x2
 | |
|     n = 0
 | |
|     @wm.__send__(m) do |k, v|
 | |
|       assert_match(/\A(?:foo|bar)\z/, k)
 | |
|       case k
 | |
|       when /foo/
 | |
|         assert_same(k1, k)
 | |
|         assert_same(x1, v)
 | |
|       when /bar/
 | |
|         assert_same(k2, k)
 | |
|         assert_same(x2, v)
 | |
|       end
 | |
|       n += 1
 | |
|     end
 | |
|     assert_equal(2, n)
 | |
|   end
 | |
| 
 | |
|   def test_each_key
 | |
|     x1 = Object.new
 | |
|     k1 = "foo"
 | |
|     @wm[k1] = x1
 | |
|     x2 = Object.new
 | |
|     k2 = "bar"
 | |
|     @wm[k2] = x2
 | |
|     n = 0
 | |
|     @wm.each_key do |k|
 | |
|       assert_match(/\A(?:foo|bar)\z/, k)
 | |
|       case k
 | |
|       when /foo/
 | |
|         assert_same(k1, k)
 | |
|       when /bar/
 | |
|         assert_same(k2, k)
 | |
|       end
 | |
|       n += 1
 | |
|     end
 | |
|     assert_equal(2, n)
 | |
|   end
 | |
| 
 | |
|   def test_each_value
 | |
|     x1 = "foo"
 | |
|     k1 = Object.new
 | |
|     @wm[k1] = x1
 | |
|     x2 = "bar"
 | |
|     k2 = Object.new
 | |
|     @wm[k2] = x2
 | |
|     n = 0
 | |
|     @wm.each_value do |v|
 | |
|       assert_match(/\A(?:foo|bar)\z/, v)
 | |
|       case v
 | |
|       when /foo/
 | |
|         assert_same(x1, v)
 | |
|       when /bar/
 | |
|         assert_same(x2, v)
 | |
|       end
 | |
|       n += 1
 | |
|     end
 | |
|     assert_equal(2, n)
 | |
|   end
 | |
| 
 | |
|   def test_size
 | |
|     m = __callee__[/test_(.*)/, 1]
 | |
|     assert_equal(0, @wm.__send__(m))
 | |
|     x1 = "foo"
 | |
|     k1 = Object.new
 | |
|     @wm[k1] = x1
 | |
|     assert_equal(1, @wm.__send__(m))
 | |
|     x2 = "bar"
 | |
|     k2 = Object.new
 | |
|     @wm[k2] = x2
 | |
|     assert_equal(2, @wm.__send__(m))
 | |
|   end
 | |
|   alias test_length test_size
 | |
| end
 |