--- /dev/null
+--TEST--
+assert() - basic - check that assert runs when assert.active is set to 1.
+--INI--
+assert.active = 1
+assert.warning = 0
+assert.callback = f1
+assert.bail = 0
+assert.quiet_eval = 0
+--FILE--
+<?php
+function f1()
+{
+ echo "f1 called\n";
+}
+//String assert
+$sa = "0 != 0";
+var_dump($r2=assert($sa));
+$sa = "0 == 0";
+var_dump($r2=assert($sa));
+
+//Non string assert
+var_dump($r2=assert(0));
+var_dump($r2=assert(1));
+--EXPECTF--
+f1 called
+NULL
+bool(true)
+f1 called
+NULL
+bool(true)
--- /dev/null
+--TEST--
+assert() - basic - check that assert can be switched off
+--INI--
+assert.active = 0
+assert.warning = 0
+assert.callback = f1
+assert.bail = 0
+assert.quiet_eval = 0
+--FILE--
+<?php
+function f1()
+{
+ echo "f1 called\n";
+}
+
+//String assert
+$sa = "0 != 0";
+var_dump($r2=assert($sa));
+$sa = "0 == 0";
+var_dump($r2=assert($sa));
+
+//Non string assert
+var_dump($r2=assert(0));
+var_dump($r2=assert(1));
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
--- /dev/null
+--TEST--
+assert() basic - correct call back values before and after assert.
+--INI--
+assert.active = 1
+assert.warning = 1
+assert.callback=f1
+assert.bail = 0
+assert.quiet_eval = 0
+--FILE--
+<?php
+function f2()
+{
+ echo "f2 called\n";
+}
+
+function f1()
+{
+ echo "f1 called\n";
+}
+
+var_dump($o = assert_options(ASSERT_CALLBACK));
+assert(0);
+
+var_dump($o= assert_options(ASSERT_CALLBACK, "f2"));
+var_dump($n= assert_options(ASSERT_CALLBACK));
+assert(0);
+?>
+--EXPECTF--
+string(2) "f1"
+f1 called
+
+Warning: assert(): Assertion failed in %s on line 13
+string(2) "f1"
+string(2) "f2"
+f2 called
+
+Warning: assert(): Assertion failed in %s on line 17
--- /dev/null
+--TEST--
+assert() - basic - Test that bailout works
+--INI--
+assert.active = 1
+assert.warning = 1
+assert.callback = f1
+assert.quiet_eval = 1
+assert.bail = 0
+--FILE--
+<?php
+function f1()
+{
+ echo "f1 called\n";
+}
+
+//bail out on error
+var_dump($rao=assert_options(ASSERT_BAIL, 1));
+$sa = "0 != 0";
+var_dump($r2=assert($sa));
+echo "If this is printed BAIL hasn't worked";
+--EXPECTF--
+int(0)
+f1 called
+
+Warning: assert(): Assertion "0 != 0" failed in %s on line 10
--- /dev/null
+--TEST--
+assert() - basic - test initial values using ini.get and assert_options
+--INI--
+assert.active = 0
+assert.warning = 0
+assert.bail = 0
+assert.quiet_eval = 0
+assert.callback = f1
+--FILE--
+<?php
+// Check the initial settings for all assert_options
+
+//Using assert_options;
+echo "Initial values: assert_options(ASSERT_ACTIVE) => [".assert_options(ASSERT_ACTIVE)."]\n";
+echo "Initial values: assert_options(ASSERT_WARNING) => [".assert_options(ASSERT_WARNING)."]\n";
+echo "Initial values: assert_options(ASSERT_BAIL) => [".assert_options(ASSERT_BAIL)."]\n";
+echo "Initial values: assert_options(ASSERT_QUIET_EVAL) => [".assert_options(ASSERT_QUIET_EVAL)."]\n";
+echo "Initial values: assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
+
+//Using ini.get;
+echo "Initial values: ini.get(\"assert.active\") => [".ini_get("assert.active")."]\n";
+echo "Initial values: ini.get(\"assert.warning\") => [".ini_get("assert.warning")."]\n";
+echo "Initial values: ini.get(\"assert.bail\") => [".ini_get("assert.bail")."]\n";
+echo "Initial values: ini.get(\"assert.quiet_eval\") => [".ini_get("assert.quiet_eval")."]\n";
+echo "Initial values: ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n\n";
+
+--EXPECTF--
+Initial values: assert_options(ASSERT_ACTIVE) => [0]
+Initial values: assert_options(ASSERT_WARNING) => [0]
+Initial values: assert_options(ASSERT_BAIL) => [0]
+Initial values: assert_options(ASSERT_QUIET_EVAL) => [0]
+Initial values: assert_options(ASSERT_CALLBACK) => [f1]
+Initial values: ini.get("assert.active") => [0]
+Initial values: ini.get("assert.warning") => [0]
+Initial values: ini.get("assert.bail") => [0]
+Initial values: ini.get("assert.quiet_eval") => [0]
+Initial values: ini.get("assert.callback") => [f1]
--- /dev/null
+--TEST--
+assert() - basic - check switch on warnings using assert_options.
+--INI--
+assert.active = 1
+assert.warning = 0
+assert.callback = f1
+assert.bail = 0
+assert.quiet_eval = 0
+--FILE--
+<?php
+function f1()
+{
+ echo "f1 called\n";
+}
+
+//switch warning on and test return value
+var_dump($rao=assert_options(ASSERT_WARNING, 1));
+$sa = "0 != 0";
+var_dump($r2=assert($sa));
+$sa = "0 == 0";
+var_dump($r2=assert($sa));
+
+//switch warning on and test return value
+var_dump($rao=assert_options(ASSERT_WARNING, 0));
+--EXPECTF--
+int(0)
+f1 called
+
+Warning: assert(): Assertion "0 != 0" failed in %s on line 10
+NULL
+bool(true)
+int(1)
--- /dev/null
+--TEST--
+assert() - error - give assert nonsense string with quiet_eval on then off
+--INI--
+assert.active = 1
+assert.warning = 1
+assert.callback = f1
+assert.bail = 0
+assert.quiet_eval = 0
+--FILE--
+<?php
+function f1()
+{
+ echo "f1 called\n";
+}
+
+$sa = "threemeninaboat";
+
+var_dump($r2=assert($sa));
+
+var_dump($ra0 = assert_options(ASSERT_QUIET_EVAL, 1));
+
+var_dump($r2=assert($sa));
+--EXPECTF--
+Notice: Use of undefined constant threemeninaboat - assumed 'threemeninaboat' in %s(9) : assert code on line 1
+bool(true)
+int(0)
+bool(true)
--- /dev/null
+--TEST--
+assert() - error - invalid params
+--INI--
+assert.active = 1
+assert.warning = 1
+assert.callback = f1
+assert.quiet_eval = 1
+assert.bail = 0
+--FILE--
+<?php
+function f1()
+{
+ echo "f1 called\n";
+}
+function handler($errno, $errstr) {
+ echo "in handler()\n\n";
+ assert(E_RECOVERABLE_ERROR === $errno);
+ var_dump($errstr);
+}
+
+//Wrong number of parameters for assert_options()
+assert_options(ASSERT_WARNING, 1);
+var_dump($rao=assert_options(ASSERT_CALLBACK,"f1",1));
+
+
+//Unknown option for assert_options()
+var_dump($rao=assert_options("F1","f1"));
+
+//Wrong number of parameters for assert()
+$sa="0 != 0";
+var_dump($r2=assert($sa,1));
+
+
+//Catch recoverable error with handler
+var_dump($rc=assert('aa=sd+as+safsafasfaçsafçsafç'));
+--EXPECTF--
+Warning: Wrong parameter count for assert_options() in %s on line 14
+NULL
+
+Warning: assert_options(): Unknown value 0 in %s on line 18
+bool(false)
+
+Warning: Wrong parameter count for assert() in %s on line 22
+NULL
--- /dev/null
+--TEST--
+assert() - variation - test callback options using ini_get/ini_set/assert_options
+--INI--
+assert.active = 1
+assert.warning = 0
+assert.callback = f1
+assert.bail = 0
+assert.quiet_eval = 0
+--FILE--
+<?php
+function f1()
+{
+ echo "f1 called\n";
+}
+function f2()
+{
+ echo "f2 called\n";
+}
+function f3()
+{
+ echo "f3 called\n";
+}
+class c1
+{
+ function assert($file, $line, $myev)
+ {
+ echo "Class assertion failed $line, \"$myev\"\n";
+ }
+}
+echo "Initial values: assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
+echo "Initial values: ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n";
+$sa = "0 != 0";
+var_dump($r2=assert($sa));
+echo"\n";
+
+echo "Change callback function using ini.set and test return value \n";
+var_dump($rv = ini_set("assert.callback","f2"));
+echo "assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
+echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n";
+var_dump($r2=assert($sa));
+echo"\n";
+
+echo "Change callback function using assert_options and test return value \n";
+var_dump($rv=assert_options(ASSERT_CALLBACK, "f3"));
+echo "assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
+echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n";
+var_dump($r2=assert($sa));
+echo"\n";
+
+
+echo "Reset the name of the callback routine to a class method and check that it works\n";
+var_dump($rc=assert_options(ASSERT_CALLBACK, "c1"));
+echo "assert_options(ASSERT_CALLBACK) => [".assert_options(ASSERT_CALLBACK)."]\n";
+echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n";
+var_dump($r2=assert($sa));
+echo"\n";
+
+echo "Reset callback options to use a class method \n";
+var_dump($rc = assert_options(ASSERT_CALLBACK,array("c1","assert")));
+var_dump($rao=assert_options(ASSERT_CALLBACK));
+echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n\n";
+var_dump($r2=assert($sa));
+echo"\n";
+
+echo "Reset callback options to use an object method \n";
+$o = new c1();
+var_dump($rc=assert_options(ASSERT_CALLBACK,array(&$o,"assert")));
+var_dump($rao=assert_options(ASSERT_CALLBACK));
+echo "ini.get(\"assert.callback\") => [".ini_get("assert.callback")."]\n\n";
+var_dump($r2=assert($sa));
+echo"\n";
+
+--EXPECTF--
+Initial values: assert_options(ASSERT_CALLBACK) => [f1]
+Initial values: ini.get("assert.callback") => [f1]
+f1 called
+NULL
+
+Change callback function using ini.set and test return value
+string(2) "f1"
+assert_options(ASSERT_CALLBACK) => [f2]
+ini.get("assert.callback") => [f2]
+f2 called
+NULL
+
+Change callback function using assert_options and test return value
+string(2) "f2"
+assert_options(ASSERT_CALLBACK) => [f3]
+ini.get("assert.callback") => [f2]
+f3 called
+NULL
+
+Reset the name of the callback routine to a class method and check that it works
+string(2) "f3"
+assert_options(ASSERT_CALLBACK) => [c1]
+ini.get("assert.callback") => [f2]
+NULL
+
+Reset callback options to use a class method
+string(2) "c1"
+array(2) {
+ [0]=>
+ string(2) "c1"
+ [1]=>
+ string(6) "assert"
+}
+ini.get("assert.callback") => [f2]
+
+
+Strict Standards: Non-static method c1::assert() cannot be called statically in %s on line 53
+Class assertion failed 53, "0 != 0"
+NULL
+
+Reset callback options to use an object method
+array(2) {
+ [0]=>
+ string(2) "c1"
+ [1]=>
+ string(6) "assert"
+}
+array(2) {
+ [0]=>
+ &object(c1)#1 (0) {
+ }
+ [1]=>
+ string(6) "assert"
+}
+ini.get("assert.callback") => [f2]
+
+Class assertion failed 61, "0 != 0"
+NULL