1# 2# Copyright (c) 2006 Laurent Sansonetti, Apple Computer Inc. 3# This test is based on a bug report reproducer, written by Tim Burks. 4# 5 6require 'test/unit' 7require 'osx/cocoa' 8require 'rbconfig' 9 10system 'make -s' || raise(RuntimeError, "'make' failed") 11require 'objc_test.bundle' 12 13class RigHelper < OSX::NSObject 14 def name 15 "helper" 16 end 17 18 addRubyMethod_withType("testChar:", "c@:c") 19 def testChar(c) 20 c 21 end 22 23 addRubyMethod_withType("testInt:", "i@:i") 24 def testInt(i) 25 i 26 end 27 28 addRubyMethod_withType("testShort:", "s@:s") 29 def testShort(s) 30 s 31 end 32 33 addRubyMethod_withType("testLong:", "l@:l") 34 def testLong(l) 35 l 36 end 37 38 addRubyMethod_withType("testFloat:", "f@:f") 39 def testFloat(f) 40 f 41 end 42 43 addRubyMethod_withType("testDouble:", "d@:d") 44 def testDouble(d) 45 d 46 end 47 48 addRubyMethod_withType("testLongLong:", "q@:q") 49 def testLongLong(ll) 50 ll 51 end 52end 53 54class ObjcExportHelper < OSX::NSObject 55 def foo1 56 's' 57 end 58 objc_method :foo1, %w{id} 59 60 def foo2(integer) 61 integer + 2 62 end 63 objc_method :foo2, %w{int int} 64 65 def foo3_obj(ary, obj) 66 ary.addObject(obj) 67 end 68 objc_method :foo3, %w{void id id} 69 70 def foo4_size(point, size) 71 OSX::NSRect.new(point, size) 72 end 73 objc_method :foo4_size, [OSX::NSRect, OSX::NSPoint, OSX::NSSize] 74 75 def foo5(rectPtr) 76 rectPtr.origin.x *= 10 77 rectPtr.origin.y *= 10 78 rectPtr.size.width *= 10 79 rectPtr.size.height *= 10 80 end 81 addRubyMethod_withType("foo5:", "v@:^#{OSX::NSRect.encoding}") 82 83 def self.superFoo 84 42 85 end 86 objc_class_method :superFoo, ['int'] 87end 88 89class TestStret < OSX::ObjcTestStret 90 def overrideMe(x) 91 OSX::NSRect.new(x,x,x,x) 92 end 93end 94 95class OSX::DirectOverride 96 def self.classOverrideMe 97 'bar' 98 end 99 def overrideMe 100 'foo' 101 end 102end 103 104class OSX::DirectOverrideChild 105 def overrideMe 106 'bar' 107 end 108end 109 110class OSX::NSObject 111 def self.mySuperClassMethod 112 'bar' 113 end 114 objc_class_method :mySuperClassMethod, ['id'] 115 def mySuperMethod 116 'foo' 117 end 118 objc_method :mySuperMethod, ['id'] 119 120 objc_method(:mySuperMethodWithBlock, [:id, :int]) { |x| "foo_#{x}" } 121end 122 123class OvmixArgRetainedController < OSX::NSObject 124 def setObject(o) 125 @o = o 126 end 127 objc_method :setObject, ['id', 'id'] 128 def getObject 129 @o 130 end 131 objc_method :getObject, ['id'] 132end 133 134class TC_OVMIX < Test::Unit::TestCase 135 def test_rig 136 testrig = OSX::TestRig.alloc.init 137 testrig.run 138 end 139 140 def test_objc_method 141 OSX::TestObjcExport.runTests 142 end 143 144 def test_direct_override 145 assert(OSX::DirectOverride.ancestors.include?(OSX::NSObject)) 146 o = OSX::DirectOverride.alloc.init 147 assert_kind_of(OSX::NSString, o.performSelector('overrideMe')) 148 assert_equal('foo', o.performSelector('overrideMe').to_s) 149 assert_kind_of(OSX::NSString, OSX::DirectOverride.performSelector('classOverrideMe')) 150 assert_equal('bar', OSX::DirectOverride.performSelector('classOverrideMe').to_s) 151 OSX::DirectOverride.checkOverridenMethods 152 end 153 154 def test_direct_inheritance 155 assert(OSX::DirectOverrideParent.ancestors.include?(OSX::NSObject)) 156 p = OSX::DirectOverrideParent.alloc.init 157 assert_kind_of(OSX::NSString, p.performSelector('overrideMe')) 158 assert_equal('foo', p.performSelector('overrideMe').to_s) 159 p.checkOverride('foo') 160 161 assert(OSX::DirectOverrideChild.ancestors.include?(OSX::NSObject)) 162 assert(OSX::DirectOverrideChild.ancestors.include?( 163 OSX::DirectOverrideParent)) 164 c = OSX::DirectOverrideChild.alloc.init 165 assert_kind_of(OSX::NSString, c.performSelector('overrideMe')) 166 assert_equal('bar', c.performSelector('overrideMe').to_s) 167 c.checkOverride('bar') 168 end 169 170 def test_super_method 171 o = OSX::NSString.stringWithCString('blah') 172 assert_equal('foo', o.mySuperMethod.to_s) 173 assert_equal('foo', o.performSelector('mySuperMethod').to_s) 174 assert_equal('bar', OSX::NSString.mySuperClassMethod.to_s) 175 assert_equal('bar', OSX::NSString.performSelector('mySuperClassMethod').to_s) 176 end 177 178 def test_objc_method_with_block 179 o = OSX::NSString.stringWithCString('blah') 180 assert_equal('foo_123', o.mySuperMethodWithBlock(123).to_s) 181 assert_equal('foo_456', o.objc_send(:mySuperMethodWithBlock, 456).to_s) 182 end 183 184 def test_arg_retained 185 c = OvmixArgRetainedController.alloc.init 186 OSX::OvmixArgRetained.test(c) 187 end 188end 189