[View]  [Edit]  [Lock]  [References]  [Attachments]  [History]  [Home]  [Changes]  [Search]  [Help] 

test-[jscocoa] 014 class

Code

"actually excluded from tests" self cancelFileIn!
self nativeCodeFollows!
/*
		DefineClass is deprecated by the ObjJ syntax.		
	
	
	*/


	// Split call disabled by default since ObjJ syntax
	var useSplitCall = __jsc__.useSplitCall
	__jsc__.useSplitCall = true


//	JSCocoaController.sharedController.evalJSFile(NSBundle.mainBundle.bundlePath + '/Contents/Resources/class.js')

	var testInstanceOverload	= false
	var testClassOverload		= false
	var testAdd					= false
	defineClass('MyTestObjectNewClass < NSObject', 
	{
		// We're overloading an existing method : don't specify encoding as it will be infered from the parent class' method.
		'performSelector:withObject:' : 
						function(sel, object)
						{
							var r = this.Super(arguments)
//							JSCocoaController.log('perform ' + sel + ' object=' + object)
							testInstanceOverload = true
							return	r
						}
		,'instanceMethodSignatureForSelector:' :
						function (sel)
						{
							var r = this.Super(arguments)
							testClassOverload = true
							return	r
						}
		// We're adding a new method : specify encodings
		,'someMethod:' :
						['id', 'id', function (o)
						{
							testAdd = true
							return o
						}]
		,'customAdd:And:' :
						['int', 'int', 'int', function (a, b)
						{
							return a+b
						}]
						
	})
	
	var o = MyTestObjectNewClass.instance
	
	// Test class overload
	MyTestObjectNewClass.instanceMethodSignatureForSelector('respondsToSelector:')
	
	// Test instance overload
	o.perform({ selector : 'someMethod:', withObject : o })
	
	// Test custom method
	var addResult = o.custom({ add : 4, and : 5 })
	
	if (!testClassOverload)		throw 'class method overload failed'
	if (!testInstanceOverload)	throw 'instance method overload failed'
	if (addResult != 9)			throw 'add instance method failed'


	o = null



	function	makeAdder(value)
	{
		return	function (a)
		{
			return a+value
		}
	}
	
	var fn = makeAdder(5)
//	JSCocoaController.log('r=' + fn(3))

	var hash = {}
	hash['closureTest:'] = ['int', 'int', fn]
	defineClass('MyTestObjectNewClass2 < NSObject', hash)
	
	var o = MyTestObjectNewClass2.instance
	var r = o.closureTest(8)
	
//	JSCocoaController.log('r=' + r)
	if (r != 13)	throw 'using a closure as instance method failed'

	o = null
	
	
	__jsc__.useSplitCall = useSplitCall

References