]> granicus.if.org Git - php/commitdiff
- Split up the test in different problem categories
authorMarcus Boerger <helly@php.net>
Sat, 20 May 2006 20:38:28 +0000 (20:38 +0000)
committerMarcus Boerger <helly@php.net>
Sat, 20 May 2006 20:38:28 +0000 (20:38 +0000)
ext/spl/tests/iterator_041.phpt
ext/spl/tests/iterator_041a.phpt [new file with mode: 0755]
ext/spl/tests/iterator_041b.phpt [new file with mode: 0755]

index fa43d8ab3d391ebd76a4dba2d4e6a83446782409..af42b1cdecad14006ab906958420fd2e31e022eb 100755 (executable)
@@ -8,6 +8,7 @@ SPL: iterator_to_array() and exceptions
 class MyArrayIterator extends ArrayIterator
 {
        static protected $fail = 0;
+       public $state;
 
        static function fail($state, $method)
        {
@@ -19,6 +20,7 @@ class MyArrayIterator extends ArrayIterator
 
        function __construct()
        {
+               $this->state = MyArrayIterator::$fail;
                self::fail(0, __FUNCTION__);
                parent::__construct(array(1, 2));
                self::fail(1, __FUNCTION__);
@@ -56,10 +58,10 @@ class MyArrayIterator extends ArrayIterator
 
        function __destruct()
        {
-               self::fail(7, __FUNCTION__);
+//             self::fail(7, __FUNCTION__);
        }
 
-       static function test($func)
+       static function test($func, $skip = null)
        {
                echo "===$func===\n";
                self::$fail = 0;
@@ -72,29 +74,35 @@ class MyArrayIterator extends ArrayIterator
                        }
                        catch (Exception $e)
                        {
-                               var_dump($e->getMessage());
+                               echo $e->getMessage() . "\n";
+                       }
+                       if (isset($skip[self::$fail]))
+                       {
+                               self::$fail = $skip[self::$fail];
+                       }
+                       else
+                       {
+                               self::$fail++;
                        }
-                       self::$fail++;
                }
        }
 }
 
 MyArrayIterator::test('iterator_to_array');
-MyArrayIterator::test('iterator_count');
+MyArrayIterator::test('iterator_count', array(3 => 6));
 
 ?>
 ===DONE===
 <?php exit(0); ?>
 --EXPECT--
 ===iterator_to_array===
-string(22) "State 0: __construct()"
-string(22) "State 1: __construct()"
-string(17) "State 2: rewind()"
-string(16) "State 3: valid()"
-string(18) "State 4: current()"
-string(14) "State 5: key()"
-string(15) "State 6: next()"
-string(21) "State 7: __destruct()"
+State 0: __construct()
+State 1: __construct()
+State 2: rewind()
+State 3: valid()
+State 4: current()
+State 5: key()
+State 6: next()
 array(2) {
   [0]=>
   int(1)
@@ -102,11 +110,10 @@ array(2) {
   int(2)
 }
 ===iterator_count===
-string(22) "State 0: __construct()"
-string(22) "State 1: __construct()"
-string(17) "State 2: rewind()"
-string(16) "State 3: valid()"
-string(15) "State 6: next()"
-string(21) "State 7: __destruct()"
+State 0: __construct()
+State 1: __construct()
+State 2: rewind()
+State 3: valid()
+State 6: next()
 int(2)
 ===DONE===
diff --git a/ext/spl/tests/iterator_041a.phpt b/ext/spl/tests/iterator_041a.phpt
new file mode 100755 (executable)
index 0000000..d03cbba
--- /dev/null
@@ -0,0 +1,109 @@
+--TEST--
+SPL: iterator_to_array() and exceptions from destruct
+--SKIPIF--
+<?php if (!extension_loaded("spl")) print "skip"; ?>
+--FILE--
+<?php
+
+class MyArrayIterator extends ArrayIterator
+{
+       static protected $fail = 0;
+       public $state;
+
+       static function fail($state, $method)
+       {
+               if (self::$fail == $state)
+               {
+                       throw new Exception("State $state: $method()");
+               }
+       }
+
+       function __construct()
+       {
+               $this->state = MyArrayIterator::$fail;
+               self::fail(0, __FUNCTION__);
+               parent::__construct(array(1, 2));
+               self::fail(1, __FUNCTION__);
+       }
+
+       function rewind()
+       {
+               self::fail(2, __FUNCTION__);
+               return parent::rewind();
+       }
+
+       function valid()
+       {
+               self::fail(3, __FUNCTION__);
+               return parent::valid();
+       }
+
+       function current()
+       {
+               self::fail(4, __FUNCTION__);
+               return parent::current();
+       }
+
+       function key()
+       {
+               self::fail(5, __FUNCTION__);
+               return parent::key();
+       }
+
+       function next()
+       {
+               self::fail(6, __FUNCTION__);
+               return parent::next();
+       }
+
+       function __destruct()
+       {
+               self::fail(7, __FUNCTION__);
+       }
+
+       static function test($func, $skip = null)
+       {
+               echo "===$func===\n";
+               self::$fail = 7;
+               while(self::$fail < 10)
+               {
+                       try
+                       {
+                               var_dump($func(new MyArrayIterator()));
+                               break;
+                       }
+                       catch (Exception $e)
+                       {
+                               echo $e->getMessage() . "\n";
+                       }
+                       if (isset($skip[self::$fail]))
+                       {
+                               self::$fail = $skip[self::$fail];
+                       }
+                       else
+                       {
+                               self::$fail++;
+                       }
+               }
+       }
+}
+
+MyArrayIterator::test('iterator_to_array');
+MyArrayIterator::test('iterator_count', array(3 => 6));
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECT--
+===iterator_to_array===
+State 7: __destruct()
+array(2) {
+  [0]=>
+  int(1)
+  [1]=>
+  int(2)
+}
+===iterator_count===
+State 7: __destruct()
+int(2)
+===DONE===
diff --git a/ext/spl/tests/iterator_041b.phpt b/ext/spl/tests/iterator_041b.phpt
new file mode 100755 (executable)
index 0000000..3c999e8
--- /dev/null
@@ -0,0 +1,107 @@
+--TEST--
+SPL: iterator_to_array() and exceptions from delayed destruct
+--SKIPIF--
+<?php if (!extension_loaded("spl")) print "skip"; ?>
+--FILE--
+<?php
+
+class MyArrayIterator extends ArrayIterator
+{
+       static protected $fail = 0;
+       public $state;
+
+       static function fail($state, $method)
+       {
+               if (self::$fail == $state)
+               {
+                       throw new Exception("State $state: $method()");
+               }
+       }
+
+       function __construct()
+       {
+               $this->state = MyArrayIterator::$fail;
+               self::fail(0, __FUNCTION__);
+               parent::__construct(array(1, 2));
+               self::fail(1, __FUNCTION__);
+       }
+
+       function rewind()
+       {
+               self::fail(2, __FUNCTION__);
+               return parent::rewind();
+       }
+
+       function valid()
+       {
+               self::fail(3, __FUNCTION__);
+               return parent::valid();
+       }
+
+       function current()
+       {
+               self::fail(4, __FUNCTION__);
+               return parent::current();
+       }
+
+       function key()
+       {
+               self::fail(5, __FUNCTION__);
+               return parent::key();
+       }
+
+       function next()
+       {
+               self::fail(6, __FUNCTION__);
+               return parent::next();
+       }
+
+       function __destruct()
+       {
+               self::fail(7, __FUNCTION__);
+       }
+
+       static function test($func, $skip = null)
+       {
+               echo "===$func===\n";
+               self::$fail = 0;
+               while(self::$fail < 10)
+               {
+                       try
+                       {
+                               var_dump($func(new MyArrayIterator()));
+                               break;
+                       }
+                       catch (Exception $e)
+                       {
+                               echo $e->getMessage() . "\n";
+                       }
+                       if (isset($skip[self::$fail]))
+                       {
+                               self::$fail = $skip[self::$fail];
+                       }
+                       else
+                       {
+                               self::$fail++;
+                       }
+               }
+       }
+}
+
+MyArrayIterator::test('iterator_to_array');
+MyArrayIterator::test('iterator_count', array(3 => 6));
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECT--
+===iterator_to_array===
+State 0: __construct()
+State 1: __construct()
+State 2: rewind()
+State 3: valid()
+State 4: current()
+State 5: key()
+State 6: next()
+
+Fatal error: Ignoring exception from MyArrayIterator::__destruct() while an exception is already active (Uncaught Exception in /usr/src/php-cvs/ext/spl/tests/iterator_041b.phpt on line 17) in %siterator_041b.php on line %d