summaryrefslogtreecommitdiff
path: root/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrors.php
blob: 4207efa5f8061487e3fab2a80b2ffb2486f49515 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php

/**
 * API Unit tests for PEAR_ErrorStack package.
 * 
 * @version    $Id$
 * @author     Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
 * @author     Greg Beaver
 * @package    PEAR_ErrorStack
 */

/**
 * @package PEAR_ErrorStack
 */

class Error_Stack_TestCase_getErrors extends PHPUnit_TestCase
{

    function Error_Stack_TestCase_getErrors($name)
    {
        $this->PHPUnit_TestCase($name);
    }

    function setUp()
    {
        error_reporting(E_ALL);
        $this->errorOccured = false;
        set_error_handler(array(&$this, 'errorHandler'));
        $this->stack = new PEAR_ErrorStack('test');
        $s = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
        $s->pushCallback(array('PEAR_ErrorStack', '_handleError'));
    }

    function tearDown()
    {
        unset($this->stack);
        unset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON']);
    }


    function _stripWhitespace($str)
    {
        return preg_replace('/\\s+/', '', $str);
    }

    function _methodExists($name) 
    {
        if (in_array(strtolower($name), get_class_methods($this->stack))) {
            return true;
        }
        $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
        return false;
    }

    function errorHandler($errno, $errstr, $errfile, $errline) {
        //die("$errstr in $errfile at line $errline: $errstr");
        $this->errorOccured = true;
        $this->assertTrue(false, "$errstr at line $errline, $errfile");
    }
    
    function returnsignore($err)
    {
        $this->wasCalled = true;
        return PEAR_ERRORSTACK_IGNORE;
    }
    
    function test_none()
    {
        if (!$this->_methodExists('getErrors')) {
            return;
        }
        $this->assertEquals(array(), $this->stack->getErrors());
        $this->assertEquals(array(), $this->stack->getErrors(true));
    }
    
    function test_normal()
    {
        if (!$this->_methodExists('getErrors')) {
            return;
        }
        $this->assertEquals(array(), $this->stack->getErrors());
        $this->stack->push(1);
        $this->stack->push(2, 'warning');
        $this->stack->push(3, 'foo');
        $ret = $this->stack->getErrors();
        for ($i= 0; $i < 3; $i++) {
            unset($ret[$i]['time']);
            unset($ret[$i]['context']);
        }
        $this->assertEquals(
            array(
                array('code' => 3,
                'params' => array(),
                'package' => 'test',
                'level' => 'foo',
                'message' => ''),
                array('code' => 2,
                'params' => array(),
                'package' => 'test',
                'level' => 'warning',
                'message' => ''),
                array('code' => 1,
                'params' => array(),
                'package' => 'test',
                'level' => 'error',
                'message' => ''),
                ), $ret, 'incorrect errors, non-purge');
        $ret = $this->stack->getErrors(true);
        for ($i= 0; $i < 3; $i++) {
            unset($ret[$i]['time']);
            unset($ret[$i]['context']);
        }
        $this->assertEquals(
            array(
                array('code' => 3,
                'params' => array(),
                'package' => 'test',
                'level' => 'foo',
                'message' => ''),
                array('code' => 2,
                'params' => array(),
                'package' => 'test',
                'level' => 'warning',
                'message' => ''),
                array('code' => 1,
                'params' => array(),
                'package' => 'test',
                'level' => 'error',
                'message' => ''),
                ), $ret, 'incorrect errors, purge');
        $this->assertEquals(array(), $this->stack->getErrors());
    }
}

?>