1# 2# $Id: tc_wrapper.rb 2118 2007-11-10 22:58:03Z lrz $ 3# 4# Copyright (c) 2006 FUJIMOTO Hisakuni 5# Copyright (c) 2006 kimura wataru 6# 7 8require 'test/unit' 9require 'osx/cocoa' 10 11class TC_OCObjWrapper < Test::Unit::TestCase 12 include OSX 13 14 def setup 15 @obj = NSObject.alloc.init 16 @data = NSData.alloc.init 17 end 18 19 def teardown 20 end 21 22 def test_instance_methods 23 assert_equal_array(@obj.objc_methods, NSObject.objc_instance_methods) 24 end 25 26 def test_instance_methods_nonrecursive 27 assert_equal_array(NSObject.objc_instance_methods | NSData.objc_instance_methods(false), NSData.objc_instance_methods(true)) 28 end 29 30 def test_class_methods 31 assert_equal_array(NSObject.objc_methods, NSObject.objc_class_methods) 32 end 33 34 def test_class_methods_nonrecursive 35 assert_equal_array(NSObject.objc_class_methods | NSData.objc_class_methods(false), NSData.objc_class_methods(true)) 36 end 37 38 def assert_equal_array(ary1, ary2) 39 assert_equal((ary1 | ary2).size, ary1.size) 40 end 41 42 def test_method_type 43 sel = 'getBytes:' 44 assert_equal(NSData.objc_instance_method_type(sel), 45 @data.objc_method_type(sel)) 46 47 sel = 'dataWithBytes:length:' 48 assert_equal(NSData.objc_class_method_type(sel), 49 NSData.objc_method_type(sel)) 50 end 51 52 def test_message_syntaxes 53 old_relaxed_syntax = OSX.relaxed_syntax 54 OSX.relaxed_syntax = true 55 url1 = NSURL.alloc.initWithScheme_host_path_('http', 'localhost', '/foo') 56 url2 = NSURL.alloc.initWithScheme_host_path('http', 'localhost', '/foo') 57 assert_equal(true, url1.isEqual(url2)) 58 url3 = NSURL.alloc.objc_send(:initWithScheme, 'http', :host, 'localhost', :path, '/foo') 59 assert_equal(true, url1.isEqual(url3)) 60 # No need to check for symbol/value/... and inline Hash syntaxes, as they are deprecated. 61 # However we should check that an exception is raised (as if relaxed_syntax was false) for 62 # the 1.0.0 release. 63 OSX.relaxed_syntax = false 64 url5 = NSURL.alloc.initWithScheme_host_path_('http', 'localhost', '/foo') 65 assert_equal(true, url1.isEqual_(url5)) 66 assert_raises OSX::OCMessageSendException do 67 # We cannot check the following method 68 # NSURL.alloc.initWithScheme_host_path('http', 'localhost', '/foo') 69 # because it has already been registered, so let's check another method: 70 NSString.stringWithCapacity(42) 71 end 72 assert_raises OSX::OCMessageSendException do 73 NSURL.alloc.initWithScheme('http', :host, 'localhost', :path, '/foo') 74 end 75 assert_raises OSX::OCMessageSendException do 76 NSURL.alloc.initWithScheme('http', :host => 'localhost', :path => '/foo') 77 end 78 OSX.relaxed_syntax = old_relaxed_syntax 79 end 80 81 def test_objc_send 82 # Some additional tests for objc_send. 83 assert_raises ArgumentError do 84 OSX::NSObject.alloc.objc_send 85 end 86 assert_nothing_raised { OSX::NSObject.alloc.objc_send :init } 87 assert_nothing_raised { OSX::NSArray.arrayWithObject(1).objc_send(:objectAtIndex, 0) } 88 end 89 90 def test_missing_args 91 assert_raises ArgumentError do 92 NSURL.URLWithString_ 93 end 94 assert_raises ArgumentError do 95 NSURL.URLWithString_relativeToURL_('http://localhost') 96 end 97 end 98 99 def test_proxy_ancestors 100 assert(!OSX::NSProxy.ancestors.include?(OSX::NSObject)) 101 assert(!OSX::NSProtocolChecker.ancestors.include?(OSX::NSObject)) 102 assert(!OSX::NSDistantObject.ancestors.include?(OSX::NSObject)) 103 end 104 105 def test_alias 106 # alias class method 107 assert_raises OSX::OCMessageSendException do 108 str = NSString.objc_send(:str, 'RubyCocoa') 109 end 110 OSX::NSString.objc_alias_class_method 'str:', 'stringWithString:' 111 str = NSString.objc_send(:str, 'RubyCocoa') 112 assert(str.isEqualToString?('RubyCocoa'), 'alias class method') 113 # alias instance method 114 assert_raises OSX::OCMessageSendException do 115 substr = str.objc_send(:substr, [4..8]) 116 end 117 OSX::NSString.objc_alias_method 'substr:', 'substringWithRange:' 118 substr = str.objc_send(:substr, [4..8]) 119 assert(substr.isEqualToString?('Cocoa'), 'alias instace method') 120 # RuntimeError should be raise when the selctor does not exist 121 assert_raises RuntimeError do 122 OSX::NSString.objc_alias_method 'foo', 'foobarbaz' 123 end 124 end 125 126 def test_inline_functions 127 rect = OSX::NSMakeRect(1,2,3,4) 128 assert_kind_of(OSX::NSRect, rect) 129 assert_equal([[1,2],[3,4]], rect.to_a) 130 assert_equal(rect, OSX::NSRect.new(1,2,3,4)) 131 assert_equal(rect, OSX::NSMakeRect(1,2,3,4)) 132 assert_equal(rect.origin, OSX::NSPoint.new(1,2)) 133 assert_equal(rect.origin, OSX::NSMakePoint(1,2)) 134 assert_equal(rect.size, OSX::NSSize.new(3,4)) 135 assert_equal(rect.size, OSX::NSMakeSize(3,4)) 136 end 137 138 def test_enumerator_to_a 139 ary = OSX::NSMutableArray.alloc.init 140 %w{One Two Three}.each { |o| ary.addObject(o) } 141 enum = ary.objectEnumerator 142 ary2 = enum.to_a 143 assert_kind_of(Array, ary2) 144 assert_equal(ary2, ary.to_a) 145 end 146 147 def test_convenience_setters 148 button = OSX::NSButton.alloc.initWithFrame(NSZeroRect) 149 assert_kind_of(OSX::NSControl, button) 150 button.intValue = 1 151 assert_equal(1, button.intValue) 152 button.stringValue = '0' 153 assert_equal('0', button.stringValue) 154 button.objectValue = true 155 assert_equal(true, button.objectValue.to_ruby) 156 end 157 158 def test_convenience_predicates 159 ary = OSX::NSArray.arrayWithObject(1) 160 assert(ary.equalToArray?([1])) 161 assert(!ary.equalToArray?([2])) 162 end 163 164=begin 165 # Test disabled, because #ocm_conforms? has also been disabled. 166 def test_conforms_to_protocol 167 assert(NSString.ocm_conforms?('NSMutableCopying')) 168 assert(!NSObject.ocm_conforms?('NSMutableCopying')) 169 assert(NSProxy.ocm_conforms?('NSObject')) 170 assert_raises(ArgumentError) { NSObject.ocm_conforms?('Foo') } 171 end 172=end 173end 174