1--TEST--
2assert() - variation  - test callback options using ini_get/ini_set/assert_options
3--INI--
4assert.active = 1
5assert.warning = 0
6assert.callback = f1
7assert.bail = 0
8assert.exception=0
9--FILE--
10<?php
11function f1()
12{
13    echo "f1 called\n";
14}
15function f2()
16{
17    echo "f2 called\n";
18}
19function f3()
20{
21    echo "f3 called\n";
22}
23class c1
24{
25    static function assert($file, $line, $unused, $desc)
26    {
27        echo "Class assertion failed $line, \"$desc\"\n";
28    }
29}
30echo "Initial values: assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
31echo "Initial values: ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n";
32var_dump($r2=assert(0 != 0));
33echo"\n";
34
35echo "Change callback function using ini.set and test return value \n";
36var_dump($rv = ini_set("assert.callback","f2"));
37echo "assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
38echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n";
39var_dump($r2=assert(0 != 0));
40echo"\n";
41
42echo "Change callback function using assert_options and test return value \n";
43var_dump($rv=assert_options(ASSERT_CALLBACK, "f3"));
44echo "assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
45echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n";
46var_dump($r2=assert(0 != 0));
47echo"\n";
48
49
50echo "Reset the name of the callback routine to a class method\n";
51var_dump($rc=assert_options(ASSERT_CALLBACK, "c1"));
52echo "assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
53echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n";
54try {
55    var_dump($r2=assert(0 != 0));
56} catch (Error $e) {
57    echo $e->getMessage(), "\n";
58}
59echo"\n";
60
61echo "Reset callback options to use a class method \n";
62var_dump($rc = assert_options(ASSERT_CALLBACK,array("c1","assert")));
63var_dump($rao=assert_options(ASSERT_CALLBACK));
64echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n\n";
65var_dump($r2=assert(0 != 0));
66echo"\n";
67
68echo "Reset callback options to use an object method \n";
69$o = new c1();
70var_dump($rc=assert_options(ASSERT_CALLBACK,array(&$o,"assert")));
71var_dump($rao=assert_options(ASSERT_CALLBACK));
72echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n\n";
73var_dump($r2=assert(0 != 0));
74echo"\n";
75
76echo "Set callback to something silly\n";
77assert_options(ASSERT_CALLBACK, 3.141);
78var_dump($rao = assert_options(ASSERT_CALLBACK));
79
80?>
81--EXPECT--
82Initial values: assert_options(ASSERT_CALLBACK) => [f1]
83Initial values: ini.get("assert.callback") => [f1]
84f1 called
85bool(false)
86
87Change callback function using ini.set and test return value
88string(2) "f1"
89assert_options(ASSERT_CALLBACK) => [f2]
90ini.get("assert.callback") => [f2]
91f2 called
92bool(false)
93
94Change callback function using assert_options and test return value
95string(2) "f2"
96assert_options(ASSERT_CALLBACK) => [f3]
97ini.get("assert.callback") => [f2]
98f3 called
99bool(false)
100
101Reset the name of the callback routine to a class method
102string(2) "f3"
103assert_options(ASSERT_CALLBACK) => [c1]
104ini.get("assert.callback") => [f2]
105Invalid callback c1, function "c1" not found or invalid function name
106
107Reset callback options to use a class method
108string(2) "c1"
109array(2) {
110  [0]=>
111  string(2) "c1"
112  [1]=>
113  string(6) "assert"
114}
115ini.get("assert.callback") => [f2]
116
117Class assertion failed 56, "assert(0 != 0)"
118bool(false)
119
120Reset callback options to use an object method
121array(2) {
122  [0]=>
123  string(2) "c1"
124  [1]=>
125  string(6) "assert"
126}
127array(2) {
128  [0]=>
129  &object(c1)#2 (0) {
130  }
131  [1]=>
132  string(6) "assert"
133}
134ini.get("assert.callback") => [f2]
135
136Class assertion failed 64, "assert(0 != 0)"
137bool(false)
138
139Set callback to something silly
140float(3.141)
141