view dstep/foundation/NSScriptWhoseTests.d @ 16:19885b43130e

Huge update, the bridge actually works now
author Jacob Carlborg <doob@me.com>
date Sun, 03 Jan 2010 22:06:11 +0100
parents 89f3c3ef1fd2
children b9de51448c6b
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Aug 3, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.foundation.NSScriptWhoseTests;

import dstep.foundation.NSArray;
import dstep.foundation.NSCoder;
import dstep.foundation.NSObject;
import dstep.foundation.NSObjCRuntime;
import dstep.foundation.NSScriptObjectSpecifiers;
import dstep.foundation.NSString;
import dstep.objc.bridge.Bridge;
import dstep.objc.objc;

alias NSUInteger NSTestComparisonOperation;

enum
{
	NSEqualToComparison = 0,
	NSLessThanOrEqualToComparison,
	NSLessThanComparison,
	NSGreaterThanOrEqualToComparison,
	NSGreaterThanComparison,
	NSBeginsWithComparison,
	NSEndsWithComparison,
	NSContainsComparison
}

const TNSComparisonMethods = `

	bool isEqualTo (Object object)
	{
		return invokeObjcSelf!(bool, "isEqualTo:", Object)(object);
	}
	
	bool isLessThanOrEqualTo (Object object)
	{
		return invokeObjcSelf!(bool, "isLessThanOrEqualTo:", Object)(object);
	}
	
	bool isLessThan (Object object)
	{
		return invokeObjcSelf!(bool, "isLessThan:", Object)(object);
	}
	
	bool isGreaterThanOrEqualTo (Object object)
	{
		return invokeObjcSelf!(bool, "isGreaterThanOrEqualTo:", Object)(object);
	}
	
	bool isGreaterThan (Object object)
	{
		return invokeObjcSelf!(bool, "isGreaterThan:", Object)(object);
	}
	
	bool isNotEqualTo (Object object)
	{
		return invokeObjcSelf!(bool, "isNotEqualTo:", Object)(object);
	}
	
	bool doesContain (Object object)
	{
		return invokeObjcSelf!(bool, "doesContain:", Object)(object);
	}
	
	bool isLike (NSString object)
	{
		return invokeObjcSelf!(bool, "isLike:", NSString)(object);
	}
	
	bool isCaseInsensitiveLike (NSString object)
	{
		return invokeObjcSelf!(bool, "isCaseInsensitiveLike:", NSString)(object);
	}
	
	//mixin ObjcBindMethod!(isEqualTo, "isEqualTo:");
	//mixin ObjcBindMethod!(isLessThanOrEqualTo, "isLessThanOrEqualTo:");
	//mixin ObjcBindMethod!(isLessThan, "isLessThan:");
	//mixin ObjcBindMethod!(isGreaterThanOrEqualTo, "isGreaterThanOrEqualTo:");
	//mixin ObjcBindMethod!(isGreaterThan, "isGreaterThan:");
	//mixin ObjcBindMethod!(isNotEqualTo, "isNotEqualTo:");
	//mixin ObjcBindMethod!(doesContain, "doesContain:");
	//mixin ObjcBindMethod!(isLike, "isLike:");
	//mixin ObjcBindMethod!(isCaseInsensitiveLike, "isCaseInsensitiveLike:");
`;

const TNSScriptingComparisonMethods = `

	bool scriptingIsEqualTo (Object object)
	{
		return invokeObjcSelf!(bool, "scriptingIsEqualTo:", Object)(object);
	}
	
	bool scriptingIsLessThanOrEqualTo (Object object)
	{
		return invokeObjcSelf!(bool, "scriptingIsLessThanOrEqualTo:", Object)(object);
	}
	
	bool scriptingIsLessThan (Object object)
	{
		return invokeObjcSelf!(bool, "scriptingIsLessThan:", Object)(object);
	}
	
	bool scriptingIsGreaterThanOrEqualTo (Object object)
	{
		return invokeObjcSelf!(bool, "scriptingIsGreaterThanOrEqualTo:", Object)(object);
	}
	
	bool scriptingIsGreaterThan (Object object)
	{
		return invokeObjcSelf!(bool, "scriptingIsGreaterThan:", Object)(object);
	}
	
	bool scriptingBeginsWith (Object object)
	{
		return invokeObjcSelf!(bool, "scriptingBeginsWith:", Object)(object);
	}
	
	bool scriptingEndsWith (Object object)
	{
		return invokeObjcSelf!(bool, "scriptingEndsWith:", Object)(object);
	}
	
	bool scriptingContains (Object object)
	{
		return invokeObjcSelf!(bool, "scriptingContains:", Object)(object);
	}
	
	//mixin ObjcBindMethod!(scriptingIsEqualTo, "scriptingIsEqualTo:");
	//mixin ObjcBindMethod!(scriptingIsLessThanOrEqualTo, "scriptingIsLessThanOrEqualTo:");
	//mixin ObjcBindMethod!(scriptingIsLessThan, "scriptingIsLessThan:");
	//mixin ObjcBindMethod!(scriptingIsGreaterThanOrEqualTo, "scriptingIsGreaterThanOrEqualTo:");
	//mixin ObjcBindMethod!(scriptingIsGreaterThan, "scriptingIsGreaterThan:");
	//mixin ObjcBindMethod!(scriptingBeginsWith, "scriptingBeginsWith:");
	//mixin ObjcBindMethod!(scriptingEndsWith, "scriptingEndsWith:");
	//mixin ObjcBindMethod!(scriptingContains, "scriptingContains:");
`;

class NSLogicalTest : NSScriptWhoseTest
{
	mixin (ObjcWrap);
	
	this ()
	{
		super(typeof(this).alloc.init.objcObject);
	}
	
	typeof(this) init ()
	{
		return invokeObjcSelf!(typeof(this), "init");
	}

	Object initAndTestWithTests (NSArray subTests)
	{
		return invokeObjcSelf!(Object, "initAndTestWithTests:", NSArray)(subTests);
	}

	this (NSArray subTests)
	{
		typeof(this).alloc.initAndTestWithTests(subTests);
	}

	Object initOrTestWithTests (NSArray subTests)
	{
		return invokeObjcSelf!(Object, "initOrTestWithTests:", NSArray)(subTests);
	}

	Object initNotTestWithTest (NSScriptWhoseTest subTest)
	{
		return invokeObjcSelf!(Object, "initNotTestWithTest:", NSScriptWhoseTest)(subTest);
	}

	this (NSScriptWhoseTest subTest)
	{
		typeof(this).alloc.initNotTestWithTest(subTest);
	}
}

class NSSpecifierTest : NSScriptWhoseTest
{
	mixin (ObjcWrap);
	
	this ()
	{
		super(typeof(this).alloc.init.objcObject);
	}
	
	typeof(this) init ()
	{
		return invokeObjcSelf!(typeof(this), "init");
	}

	Object initWithObjectSpecifier (NSScriptObjectSpecifier obj1, uint compOp, Object obj2)
	{
		return invokeObjcSelf!(Object, "initWithObjectSpecifier:comparisonOperator:testObject:", NSScriptObjectSpecifier, uint, Object)(obj1, compOp, obj2);
	}

	this (NSScriptObjectSpecifier obj1, uint compOp, Object obj2)
	{
		typeof(this).alloc.initWithObjectSpecifier(obj1, compOp, obj2);
	}
}

class NSScriptWhoseTest : NSObject, INSCoding
{
	mixin (ObjcWrap);
	
	this ()
	{
		super(typeof(this).alloc.init.objcObject);
	}
	
	typeof(this) init ()
	{
		return invokeObjcSelf!(typeof(this), "init");
	}

	bool isTrue ()
	{
		return invokeObjcSelf!(bool, "isTrue");
	}

	void encodeWithCoder (NSCoder aCoder)
	{
		return invokeObjcSelf!(void, "encodeWithCoder:", NSCoder)(aCoder);
	}

	Object initWithCoder (NSCoder aDecoder)
	{
		return invokeObjcSelf!(Object, "initWithCoder:", NSCoder)(aDecoder);
	}

	this (NSCoder aDecoder)
	{
		typeof(this).alloc.initWithCoder(aDecoder);
	}
}