<?php
/**
 * do_action and do_action_ref_array callback testsuite for referenced parameters.
 */

echo '<pre>';
printf("PHP Version: %s (allow_call_time_pass_reference: %d)\n\n", PHP_VERSION, ini_get('allow_call_time_pass_reference'));

function callback_std($att) {
	global $called;
	$called++;
	$att = 'modified';
}

function callback_ref(&$ref) {
	global $called;
	$called++;
	$ref = 'modified';
}

$hook = 'test_hook';

$callbacks = array(
	'callback_std',
	'callback_ref',
);

$mask = " #%02d: %s(), %-52s = \"%s\"%s\n";
$called_label = array(' -- !! hook function not invoked. !!', '');
$param = null;
$count = 0;

foreach($callbacks as $callback) {

	add_action($hook, $callback);

	unset($param);
	$call = 'native invokation, standard parameter';
	$param = 'original';
	$called = 0;
	$callback($param);
	printf($mask, ++$count, $callback, $call, $param, $called_label[$called]);

	unset($param);
	$call = 'native invokation, call-time reference parameter';
	$param = 'original';
	$called = 0;
	$callback(&$param);
	printf($mask, ++$count, $callback, $call, $param, $called_label[$called]);

	unset($param);
	$call = 'do_action(), standard parameter';
	$param = 'original';
	$called = 0;
	do_action($hook, $param);
	printf($mask, ++$count, $callback, $call, $param, $called_label[$called]);

	unset($param);
	$call = 'do_action(), call-time reference parameter';
	$param = 'original';
	$called = 0;
	do_action($hook, &$param);
	printf($mask, ++$count, $callback, $call, $param, $called_label[$called]);
	

	unset($param);
	$call = 'do_action_ref_array(), standard parameter';
	$param = 'original';
	$called = 0;
	do_action_ref_array($hook, array($param));
	printf($mask, ++$count, $callback, $call, $param, $called_label[$called]);

	unset($param);
	$call = 'do_action_ref_array(), call-time reference parameter';
	$param = 'original';
	$called = 0;
	do_action_ref_array($hook, array(&$param));
	printf($mask, ++$count, $callback, $call, $param, $called_label[$called]);

	remove_action($hook, $callback);
	unset($param);
}

die();