]> granicus.if.org Git - php/commitdiff
- New tests
authorFelipe Pena <felipe@php.net>
Mon, 14 Jul 2008 13:36:40 +0000 (13:36 +0000)
committerFelipe Pena <felipe@php.net>
Mon, 14 Jul 2008 13:36:40 +0000 (13:36 +0000)
Zend/tests/closure_017.phpt [new file with mode: 0644]
Zend/tests/closure_018.phpt [new file with mode: 0644]
Zend/tests/closure_019.phpt [new file with mode: 0644]
Zend/tests/closure_020.phpt [new file with mode: 0644]
Zend/tests/closure_021.phpt [new file with mode: 0644]

diff --git a/Zend/tests/closure_017.phpt b/Zend/tests/closure_017.phpt
new file mode 100644 (file)
index 0000000..45a07f9
--- /dev/null
@@ -0,0 +1,12 @@
+--TEST--
+Closure 017: Trying to destroy an active lambda function
+--FILE--
+<?php
+
+$a = function(&$a) { $a = 1; };
+
+$a($a);
+
+?>
+--EXPECTF--
+Fatal error: Cannot destroy active lambda function in %s on line %d
diff --git a/Zend/tests/closure_018.phpt b/Zend/tests/closure_018.phpt
new file mode 100644 (file)
index 0000000..d98c78a
--- /dev/null
@@ -0,0 +1,28 @@
+--TEST--
+Closure 018: Assigning lambda to static var and returning by ref
+--FILE--
+<?php
+
+class foo {
+       public function test(&$x) {
+               static $lambda;
+               $lambda = function &() use (&$x) { 
+                       return $x = $x * $x;
+               };
+               return $lambda();
+       }
+}
+
+$test = new foo;
+
+$y = 2;
+var_dump($test->test($y));
+var_dump($x = $test->test($y));
+var_dump($y, $x);
+
+?>
+--EXPECT--
+int(4)
+int(16)
+int(16)
+int(16)
diff --git a/Zend/tests/closure_019.phpt b/Zend/tests/closure_019.phpt
new file mode 100644 (file)
index 0000000..0c4c34e
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Closure 019: Calling lambda using $GLOBALS and global $var
+--FILE--
+<?php
+
+$lambda = function &(&$x) {
+       return $x = $x * $x;
+};
+
+function test() {
+       global $lambda;
+       
+       $y = 3;
+       var_dump($GLOBALS['lambda']($y));
+       var_dump($lambda($y));
+       var_dump($GLOBALS['lambda'](1));
+}
+
+test();
+
+?>
+--EXPECTF--
+int(9)
+int(81)
+
+Fatal error: Cannot pass parameter 1 by reference in %s on line %d
diff --git a/Zend/tests/closure_020.phpt b/Zend/tests/closure_020.phpt
new file mode 100644 (file)
index 0000000..623bb33
--- /dev/null
@@ -0,0 +1,36 @@
+--TEST--
+Closure 020: Trying to access private property outside class
+--FILE--
+<?php
+
+class foo {
+       private $test = 3;
+       
+       public function x() {
+               $a = &$this;
+               $this->a = function() use (&$a) { return $a; };
+               var_dump($this->a->__invoke());
+               var_dump(is_a($this->a, 'closure'));
+               var_dump(is_callable($this->a));
+               
+               return $this->a;
+       }
+}
+
+$foo = new foo;
+$y = $foo->x();
+var_dump($y()->test);
+
+?>
+--EXPECTF--
+object(foo)#%d (%d) {
+  ["test":"foo":private]=>
+  int(3)
+  ["a"]=>
+  object(Closure)#%d (0) {
+  }
+}
+bool(true)
+bool(true)
+
+Fatal error: Cannot access private property foo::$test in %s on line %d
diff --git a/Zend/tests/closure_021.phpt b/Zend/tests/closure_021.phpt
new file mode 100644 (file)
index 0000000..76be762
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+Closure 021: Throwing exception inside lambda
+--FILE--
+<?php
+
+$foo = function() {
+       try {
+               throw new Exception('test!');
+       } catch(Exception $e) {
+               throw $e;
+       }
+};
+
+try {
+       $foo();
+} catch (Exception $e) {
+       var_dump($e->getMessage());
+}
+
+?>
+--EXPECT--
+string(5) "test!"