plugins/testsuite/fwdtest1.sp
author David Anderson <dvander@alliedmods.net>
Fri Jul 11 06:51:21 2008 +0000 (2008-07-11)
branchrefac-jit
changeset 2192 7602d7fb60d9
parent 2168 c24a6fa957db
permissions -rw-r--r--
fixed a compat regression, forgot msvc does funky things with overloaded virtual calls
dvander@2168
     1
#include <sourcemod>
dvander@2168
     2
dvander@2168
     3
public Plugin:myinfo = 
dvander@2168
     4
{
dvander@2168
     5
	name = "Forward Testing Lab #1",
dvander@2168
     6
	author = "AlliedModders LLC",
dvander@2168
     7
	description = "Tests suite #1 for forwards created by plugins",
dvander@2168
     8
	version = "1.0.0.0",
dvander@2168
     9
	url = "http://www.sourcemod.net/"
dvander@2168
    10
};
dvander@2168
    11
dvander@2168
    12
new Handle:g_GlobalFwd = INVALID_HANDLE;
dvander@2168
    13
new Handle:g_PrivateFwd = INVALID_HANDLE;
dvander@2168
    14
dvander@2168
    15
public OnPluginStart()
dvander@2168
    16
{	
dvander@2168
    17
	RegServerCmd("test_create_gforward", Command_CreateGlobalForward);
dvander@2168
    18
	RegServerCmd("test_create_pforward", Command_CreatePrivateForward);
dvander@2168
    19
	RegServerCmd("test_exec_gforward", Command_ExecGlobalForward);
dvander@2168
    20
	RegServerCmd("test_exec_pforward", Command_ExecPrivateForward);
dvander@2168
    21
}
dvander@2168
    22
dvander@2168
    23
public OnPluginEnd()
dvander@2168
    24
{
dvander@2168
    25
	CloseHandle(g_GlobalFwd);
dvander@2168
    26
	CloseHandle(g_PrivateFwd);
dvander@2168
    27
}
dvander@2168
    28
dvander@2168
    29
public Action:Command_CreateGlobalForward(args)
dvander@2168
    30
{
dvander@2168
    31
	if (g_GlobalFwd != INVALID_HANDLE)
dvander@2168
    32
	{
dvander@2168
    33
		CloseHandle(g_GlobalFwd);
dvander@2168
    34
	}
dvander@2168
    35
	
dvander@2168
    36
	g_GlobalFwd = CreateGlobalForward("OnGlobalForward", ET_Ignore, Param_Any, Param_Cell, Param_Float, Param_String, Param_Array, Param_CellByRef, Param_FloatByRef);
dvander@2168
    37
	
dvander@2168
    38
	if (g_GlobalFwd == INVALID_HANDLE)
dvander@2168
    39
	{
dvander@2168
    40
		PrintToServer("Failed to create global forward!");
dvander@2168
    41
	}
dvander@2168
    42
	
dvander@2168
    43
	return Plugin_Handled;
dvander@2168
    44
}
dvander@2168
    45
dvander@2168
    46
public Action:Command_CreatePrivateForward(args)
dvander@2168
    47
{
dvander@2168
    48
	new Handle:pl;
dvander@2168
    49
	new Function:func;
dvander@2168
    50
	
dvander@2168
    51
	if (g_PrivateFwd != INVALID_HANDLE)
dvander@2168
    52
	{
dvander@2168
    53
		CloseHandle(g_PrivateFwd);
dvander@2168
    54
	}
dvander@2168
    55
	
dvander@2168
    56
	g_PrivateFwd = CreateForward(ET_Hook, Param_Cell, Param_String, Param_VarArgs);
dvander@2168
    57
	
dvander@2168
    58
	if (g_PrivateFwd == INVALID_HANDLE)
dvander@2168
    59
	{
dvander@2168
    60
		PrintToServer("Failed to create private forward!")
dvander@2168
    61
	}
dvander@2168
    62
	
dvander@2168
    63
	pl = FindPluginByFile("fwdtest2.smx");
dvander@2168
    64
	
dvander@2168
    65
	if (!pl)
dvander@2168
    66
	{
dvander@2168
    67
		PrintToServer("Could not find fwdtest2.smx!");
dvander@2168
    68
		return Plugin_Handled;
dvander@2168
    69
	}
dvander@2168
    70
	
dvander@2168
    71
	func = GetFunctionByName(pl, "OnPrivateForward");
dvander@2168
    72
	
dvander@2168
    73
	/* This shouldn't happen, but oh well */
dvander@2168
    74
	if (func == INVALID_FUNCTION)
dvander@2168
    75
	{
dvander@2168
    76
		PrintToServer("Could not find \"OnPrivateForward\" in fwdtest2.smx!");
dvander@2168
    77
		return Plugin_Handled;
dvander@2168
    78
	}
dvander@2168
    79
	
dvander@2168
    80
	if (!AddToForward(g_PrivateFwd, pl, func) || !AddToForward(g_PrivateFwd, GetMyHandle(), ZohMyGod))
dvander@2168
    81
	{
dvander@2168
    82
		PrintToServer("Failed to add functions to private forward!");
dvander@2168
    83
		return Plugin_Handled;
dvander@2168
    84
	}
dvander@2168
    85
	
dvander@2168
    86
	return Plugin_Handled;
dvander@2168
    87
}
dvander@2168
    88
dvander@2168
    89
public Action:Command_ExecGlobalForward(args)
dvander@2168
    90
{
dvander@2168
    91
	new a = 99;
dvander@2168
    92
	new Float:b = 4.215;
dvander@2168
    93
	new err, ret;
dvander@2168
    94
	
dvander@2168
    95
	if (g_GlobalFwd == INVALID_HANDLE)
dvander@2168
    96
	{
dvander@2168
    97
		PrintToServer("Failed to execute global forward. Create it first.");
dvander@2168
    98
		return Plugin_Handled;
dvander@2168
    99
	}
dvander@2168
   100
	
dvander@2168
   101
	PrintToServer("Beginning call to %d functions in global forward \"OnGlobalForward\"", GetForwardFunctionCount(g_GlobalFwd));
dvander@2168
   102
	
dvander@2168
   103
	Call_StartForward(g_GlobalFwd);
dvander@2168
   104
	Call_PushCell(OnPluginStart);
dvander@2168
   105
	Call_PushCell(7);
dvander@2168
   106
	Call_PushFloat(-8.5);
dvander@2168
   107
	Call_PushString("Anata wa doko desu ka?");
dvander@2168
   108
	Call_PushArray({0.0, 1.1, 2.2}, 3);
dvander@2168
   109
	Call_PushCellRef(a);
dvander@2168
   110
	Call_PushFloatRef(b);
dvander@2168
   111
	err = Call_Finish(ret);
dvander@2168
   112
	
dvander@2168
   113
	PrintToServer("Call to global forward \"OnGlobalForward\" completed");
dvander@2168
   114
	PrintToServer("Error code = %d (expected: %d)", err, 0);
dvander@2168
   115
	PrintToServer("Return value = %d (expected: %d)", ret, Plugin_Continue);
dvander@2168
   116
	
dvander@2168
   117
	PrintToServer("a = %d (expected: %d)", a, 777);
dvander@2168
   118
	PrintToServer("b = %f (expected: %f)", b, -0.782);
dvander@2168
   119
	
dvander@2168
   120
	return Plugin_Handled;
dvander@2168
   121
}
dvander@2168
   122
dvander@2168
   123
public Action:Command_ExecPrivateForward(args)
dvander@2168
   124
{
dvander@2168
   125
	new err, ret;
dvander@2168
   126
	
dvander@2168
   127
	if (g_PrivateFwd == INVALID_HANDLE)
dvander@2168
   128
	{
dvander@2168
   129
		PrintToServer("Failed to execute private forward. Create it first.");
dvander@2168
   130
		return Plugin_Handled;
dvander@2168
   131
	}
dvander@2168
   132
	
dvander@2168
   133
	PrintToServer("Beginning call to %d functions in private forward", GetForwardFunctionCount(g_PrivateFwd));
dvander@2168
   134
	
dvander@2168
   135
	Call_StartForward(g_PrivateFwd);
dvander@2168
   136
	Call_PushCell(24);
dvander@2168
   137
	Call_PushString("I am a format string: %d %d %d %d %d %d");
dvander@2168
   138
	Call_PushCell(0);
dvander@2168
   139
	Call_PushCell(1);
dvander@2168
   140
	Call_PushCell(2);
dvander@2168
   141
	Call_PushCell(3);
dvander@2168
   142
	Call_PushCell(4);
dvander@2168
   143
	Call_PushCell(5);
dvander@2168
   144
	err = Call_Finish(ret);
dvander@2168
   145
	
dvander@2168
   146
	PrintToServer("Call to private forward completed");
dvander@2168
   147
	PrintToServer("Error code = %d (expected: %d)", err, 0);
dvander@2168
   148
	PrintToServer("Return value = %d (expected: %d)", ret, Plugin_Handled);
dvander@2168
   149
dvander@2168
   150
	return Plugin_Handled;
dvander@2168
   151
}
dvander@2168
   152
dvander@2168
   153
public Action:ZohMyGod(num, const String:format[], ...)
dvander@2168
   154
{
dvander@2168
   155
	decl String:buffer[128];
dvander@2168
   156
	
dvander@2168
   157
	PrintToServer("Inside private forward #1");
dvander@2168
   158
	
dvander@2168
   159
	PrintToServer("num = %d (expected: %d)", num, 24);
dvander@2168
   160
	
dvander@2168
   161
	VFormat(buffer, sizeof(buffer), format, 3);
dvander@2168
   162
	PrintToServer("buffer = \"%s\" (expected: \"%s\")", buffer, "I am a format string: 0 1 2 3 4 5");
dvander@2168
   163
	
dvander@2168
   164
	PrintToServer("End private forward #1");
dvander@2168
   165
	
dvander@2168
   166
	return Plugin_Continue;
dvander@2168
   167
}