| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | class TestObjc extends haxe.unit.TestCase{	static function main()	{		var x:TestObjc = null;		var c:TestClass = null;		var runner = new haxe.unit.TestRunner();		runner.add(new TestObjc());		var code = runner.run() ? 0 : 1;		Sys.exit(code);	}	var cls:TestClass;	public function testCall()	{		assertEquals(TestClass.aStatic(), 42);		cls = TestClass.alloc().init();		assertEquals(cls.getOtherThing(), 0);		cls.setOtherThing(42);		assertEquals(cls.otherThing, 42);		assertEquals(cls.getOtherThing(), 42);		assertEquals(cls.getOtherThingChar(), 42);		assertEquals(cls.isBiggerThan10(2), false);		assertEquals(cls.isBiggerThan10(12), true);		assertEquals(cls.isBiggerThan10Int(3), false);		assertEquals(cls.isBiggerThan10Int(14), true);		assertEquals(cls.isBiggerThan10Num(3).boolValue(), false);		assertEquals(cls.isBiggerThan10Num(14).boolValue(), true);		assertEquals(cls.addHello("World"), "Hello, World");		cls.something = " test";		assertEquals(cls.something, " test");		assertEquals(cls.addSomething("Hey,"), "Hey, test");		assertEquals(cls.addHelloAndString("World"," it works"), "Hello, World it works");		cls.release();	}	public function testVar()	{		cls = TestClass.alloc().init();		cls.setOtherThing(142);		assertEquals(cls.otherThing, 142);		assertEquals(cls.getOtherThing(), 142);		cls.release();	}	public function testBoxing()	{		cls = TestClass.alloc().init();		cls.setOtherThing(255);		var dyn:Dynamic = cls;		this.assertTrue(dyn != null);		this.assertTrue(cls != null);		var someObjDecl = { a:10, b: cls };		dyn = someObjDecl; // don't let Haxe inline that TObjectDecl		assertEquals(someObjDecl.b.getOtherThing(), 255);		assertEquals(getFieldB(someObjDecl).getOtherThing(), 255);		cls = someObjDecl.b;		assertTrue(someObjDecl.b == cls);		dyn = cls;		cls.release();		cls = null;		this.assertTrue(cls == null);		cls = dyn;		assertEquals(cls.getOtherThing(), 255);		cls = null;		dyn = null;		dyn = cls;		assertTrue(dyn == null);		assertEquals(dyn,null);		assertTrue(dyn == cls);		assertEquals(dyn,cls);		cls.release();	}	static function getFieldB<T>(d:{ a:Int, b: T }):T		return d.b;	public function testNull()	{		this.assertTrue(TestClass.isNull(null));		this.assertFalse(TestClass.isNull(TestClass.alloc().init()));	}	public function testInterface()	{		cls = TestClass.alloc().init();		cls.setOtherThing(21);		this.assertTrue(cls.getSelf() == cls);		this.assertEquals(cls.getSelf(), cls);		var iface:TestInterface = cls;		var obj:Dynamic = iface;		this.assertTrue(iface == cls);		this.assertEquals(iface, cls);		this.assertTrue(obj == cls);		this.assertEquals(obj, cls);		this.assertEquals(iface.getSelf(), cls);		this.assertEquals(iface.getSelf(), cls.getSelf());		this.assertEquals(iface.getOtherThing(), 21);		this.assertEquals(iface.getOtherThingChar(), 21);		cls.setOtherThing(100);		this.assertEquals(iface.getOtherThing(), 100);		this.assertEquals(iface.getOtherThingChar(), 100);		this.assertEquals("someOptionalMethod!",iface.someOptionalMethod());		cls.release();	}}@:include("./native/include/test.h")@:objc extern interface TestInterface{	function getSelf():TestInterface;	function getOtherThing():Int;	function getOtherThingChar():cpp.Int8;	@:optional function someOptionalMethod():NSString;	@:optional function unimplementedOptional():NSString;}@:include("./native/include/test.h")@:sourceFile("./native/test.m")@:objc extern class TestClass implements TestInterface{	static function aStatic():Int;	static function isNull(t:TestClass):Bool;	static function alloc():TestClass;	function init():TestClass;	var something(get,set):NSString;	var otherThing:Int;	@:native("something") private function get_something():NSString;	@:native("setSomething") private function set_something(value:NSString):NSString;	function setOtherThing(value:Int):Void;	function getOtherThing():Int;	function getOtherThingChar():cpp.Int8;	function addHello(str:NSString):NSString;	@:native("addHello:andString") function addHelloAndString(str:NSString, str2:NSString):NSString;	function addSomething(str:NSString):NSString;	function isBiggerThan10(value:NSNumber):Bool;	function isBiggerThan10Num(value:NSNumber):NSNumber;	function isBiggerThan10Int(integer:Int):Bool;	function release():Void;	function retainCount():Int;	function getSelf():TestClass;	function someOptionalMethod():NSString;	@:deprecated('This method is not implemented on this class')	@:noCompletion @:optional function unimplementedOptional():NSString;	@:plain static function some_c_call(t:TestClass):Int;	@:plain static function is_bigger_than_10(t:TestClass, val:Int):Bool;}@:forward abstract NSString(_NSString) from _NSString to _NSString{	@:from @:extern inline public static function fromString(str:String):NSString		return _NSString.stringWithUTF8String(str);	@:to @:extern inline public function toString():String		return this.UTF8String();}@:native("NSString") @:objc extern class _NSString{	static function stringWithUTF8String(str:cpp.CastCharStar):NSString;	function UTF8String():cpp.ConstCharStar;}@:forward abstract NSNumber(_NSNumber) from _NSNumber to _NSNumber{	@:from @:extern inline public static function fromInt(i:Int):NSNumber		return _NSNumber.numberWithInt(i);	@:to @:extern inline public function toInt():Int		return this.intValue();	@:to @:extern inline public function toBool():Bool		return this.boolValue();}@:native("NSNumber") @:objc extern class _NSNumber{	static function numberWithInt(i:Int):NSNumber;	function intValue():Int;	function boolValue():Bool;}
 |