/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/libraries/Unit_test.php

  • Committer: Gustav Hartvigsson
  • Date: 2013-04-04 18:24:21 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20130404182421-e8l692tsqroc1u05
Readded the file that Adam Ringhede removed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2
 
/**
3
 
 * CodeIgniter
4
 
 *
5
 
 * An open source application development framework for PHP 5.1.6 or newer
6
 
 *
7
 
 * @package             CodeIgniter
8
 
 * @author              ExpressionEngine Dev Team
9
 
 * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
10
 
 * @license             http://codeigniter.com/user_guide/license.html
11
 
 * @link                http://codeigniter.com
12
 
 * @since               Version 1.3.1
13
 
 * @filesource
14
 
 */
15
 
 
16
 
// ------------------------------------------------------------------------
17
 
 
18
 
/**
19
 
 * Unit Testing Class
20
 
 *
21
 
 * Simple testing class
22
 
 *
23
 
 * @package             CodeIgniter
24
 
 * @subpackage  Libraries
25
 
 * @category    UnitTesting
26
 
 * @author              ExpressionEngine Dev Team
27
 
 * @link                http://codeigniter.com/user_guide/libraries/uri.html
28
 
 */
29
 
class CI_Unit_test {
30
 
 
31
 
        var $active                                     = TRUE;
32
 
        var $results                            = array();
33
 
        var $strict                                     = FALSE;
34
 
        var $_template                          = NULL;
35
 
        var $_template_rows                     = NULL;
36
 
        var $_test_items_visible        = array();
37
 
 
38
 
        public function __construct()
39
 
        {
40
 
                // These are the default items visible when a test is run.
41
 
                $this->_test_items_visible = array (
42
 
                                                        'test_name',
43
 
                                                        'test_datatype',
44
 
                                                        'res_datatype',
45
 
                                                        'result',
46
 
                                                        'file',
47
 
                                                        'line',
48
 
                                                        'notes'
49
 
                                                );
50
 
 
51
 
                log_message('debug', "Unit Testing Class Initialized");
52
 
        }
53
 
 
54
 
        // --------------------------------------------------------------------
55
 
 
56
 
        /**
57
 
         * Run the tests
58
 
         *
59
 
         * Runs the supplied tests
60
 
         *
61
 
         * @access      public
62
 
         * @param       array
63
 
         * @return      void
64
 
         */
65
 
        function set_test_items($items = array())
66
 
        {
67
 
                if ( ! empty($items) AND is_array($items))
68
 
                {
69
 
                        $this->_test_items_visible = $items;
70
 
                }
71
 
        }
72
 
 
73
 
        // --------------------------------------------------------------------
74
 
 
75
 
        /**
76
 
         * Run the tests
77
 
         *
78
 
         * Runs the supplied tests
79
 
         *
80
 
         * @access      public
81
 
         * @param       mixed
82
 
         * @param       mixed
83
 
         * @param       string
84
 
         * @return      string
85
 
         */
86
 
        function run($test, $expected = TRUE, $test_name = 'undefined', $notes = '')
87
 
        {
88
 
                if ($this->active == FALSE)
89
 
                {
90
 
                        return FALSE;
91
 
                }
92
 
 
93
 
                if (in_array($expected, array('is_object', 'is_string', 'is_bool', 'is_true', 'is_false', 'is_int', 'is_numeric', 'is_float', 'is_double', 'is_array', 'is_null'), TRUE))
94
 
                {
95
 
                        $expected = str_replace('is_float', 'is_double', $expected);
96
 
                        $result = ($expected($test)) ? TRUE : FALSE;
97
 
                        $extype = str_replace(array('true', 'false'), 'bool', str_replace('is_', '', $expected));
98
 
                }
99
 
                else
100
 
                {
101
 
                        if ($this->strict == TRUE)
102
 
                                $result = ($test === $expected) ? TRUE : FALSE;
103
 
                        else
104
 
                                $result = ($test == $expected) ? TRUE : FALSE;
105
 
 
106
 
                        $extype = gettype($expected);
107
 
                }
108
 
 
109
 
                $back = $this->_backtrace();
110
 
 
111
 
                $report[] = array (
112
 
                                                        'test_name'                     => $test_name,
113
 
                                                        'test_datatype'         => gettype($test),
114
 
                                                        'res_datatype'          => $extype,
115
 
                                                        'result'                        => ($result === TRUE) ? 'passed' : 'failed',
116
 
                                                        'file'                          => $back['file'],
117
 
                                                        'line'                          => $back['line'],
118
 
                                                        'notes'                         => $notes
119
 
                                                );
120
 
 
121
 
                $this->results[] = $report;
122
 
 
123
 
                return($this->report($this->result($report)));
124
 
        }
125
 
 
126
 
        // --------------------------------------------------------------------
127
 
 
128
 
        /**
129
 
         * Generate a report
130
 
         *
131
 
         * Displays a table with the test data
132
 
         *
133
 
         * @access      public
134
 
         * @return      string
135
 
         */
136
 
        function report($result = array())
137
 
        {
138
 
                if (count($result) == 0)
139
 
                {
140
 
                        $result = $this->result();
141
 
                }
142
 
 
143
 
                $CI =& get_instance();
144
 
                $CI->load->language('unit_test');
145
 
 
146
 
                $this->_parse_template();
147
 
 
148
 
                $r = '';
149
 
                foreach ($result as $res)
150
 
                {
151
 
                        $table = '';
152
 
 
153
 
                        foreach ($res as $key => $val)
154
 
                        {
155
 
                                if ($key == $CI->lang->line('ut_result'))
156
 
                                {
157
 
                                        if ($val == $CI->lang->line('ut_passed'))
158
 
                                        {
159
 
                                                $val = '<span style="color: #0C0;">'.$val.'</span>';
160
 
                                        }
161
 
                                        elseif ($val == $CI->lang->line('ut_failed'))
162
 
                                        {
163
 
                                                $val = '<span style="color: #C00;">'.$val.'</span>';
164
 
                                        }
165
 
                                }
166
 
 
167
 
                                $temp = $this->_template_rows;
168
 
                                $temp = str_replace('{item}', $key, $temp);
169
 
                                $temp = str_replace('{result}', $val, $temp);
170
 
                                $table .= $temp;
171
 
                        }
172
 
 
173
 
                        $r .= str_replace('{rows}', $table, $this->_template);
174
 
                }
175
 
 
176
 
                return $r;
177
 
        }
178
 
 
179
 
        // --------------------------------------------------------------------
180
 
 
181
 
        /**
182
 
         * Use strict comparison
183
 
         *
184
 
         * Causes the evaluation to use === rather than ==
185
 
         *
186
 
         * @access      public
187
 
         * @param       bool
188
 
         * @return      null
189
 
         */
190
 
        function use_strict($state = TRUE)
191
 
        {
192
 
                $this->strict = ($state == FALSE) ? FALSE : TRUE;
193
 
        }
194
 
 
195
 
        // --------------------------------------------------------------------
196
 
 
197
 
        /**
198
 
         * Make Unit testing active
199
 
         *
200
 
         * Enables/disables unit testing
201
 
         *
202
 
         * @access      public
203
 
         * @param       bool
204
 
         * @return      null
205
 
         */
206
 
        function active($state = TRUE)
207
 
        {
208
 
                $this->active = ($state == FALSE) ? FALSE : TRUE;
209
 
        }
210
 
 
211
 
        // --------------------------------------------------------------------
212
 
 
213
 
        /**
214
 
         * Result Array
215
 
         *
216
 
         * Returns the raw result data
217
 
         *
218
 
         * @access      public
219
 
         * @return      array
220
 
         */
221
 
        function result($results = array())
222
 
        {
223
 
                $CI =& get_instance();
224
 
                $CI->load->language('unit_test');
225
 
 
226
 
                if (count($results) == 0)
227
 
                {
228
 
                        $results = $this->results;
229
 
                }
230
 
 
231
 
                $retval = array();
232
 
                foreach ($results as $result)
233
 
                {
234
 
                        $temp = array();
235
 
                        foreach ($result as $key => $val)
236
 
                        {
237
 
                                if ( ! in_array($key, $this->_test_items_visible))
238
 
                                {
239
 
                                        continue;
240
 
                                }
241
 
 
242
 
                                if (is_array($val))
243
 
                                {
244
 
                                        foreach ($val as $k => $v)
245
 
                                        {
246
 
                                                if (FALSE !== ($line = $CI->lang->line(strtolower('ut_'.$v))))
247
 
                                                {
248
 
                                                        $v = $line;
249
 
                                                }
250
 
                                                $temp[$CI->lang->line('ut_'.$k)] = $v;
251
 
                                        }
252
 
                                }
253
 
                                else
254
 
                                {
255
 
                                        if (FALSE !== ($line = $CI->lang->line(strtolower('ut_'.$val))))
256
 
                                        {
257
 
                                                $val = $line;
258
 
                                        }
259
 
                                        $temp[$CI->lang->line('ut_'.$key)] = $val;
260
 
                                }
261
 
                        }
262
 
 
263
 
                        $retval[] = $temp;
264
 
                }
265
 
 
266
 
                return $retval;
267
 
        }
268
 
 
269
 
        // --------------------------------------------------------------------
270
 
 
271
 
        /**
272
 
         * Set the template
273
 
         *
274
 
         * This lets us set the template to be used to display results
275
 
         *
276
 
         * @access      public
277
 
         * @param       string
278
 
         * @return      void
279
 
         */
280
 
        function set_template($template)
281
 
        {
282
 
                $this->_template = $template;
283
 
        }
284
 
 
285
 
        // --------------------------------------------------------------------
286
 
 
287
 
        /**
288
 
         * Generate a backtrace
289
 
         *
290
 
         * This lets us show file names and line numbers
291
 
         *
292
 
         * @access      private
293
 
         * @return      array
294
 
         */
295
 
        function _backtrace()
296
 
        {
297
 
                if (function_exists('debug_backtrace'))
298
 
                {
299
 
                        $back = debug_backtrace();
300
 
 
301
 
                        $file = ( ! isset($back['1']['file'])) ? '' : $back['1']['file'];
302
 
                        $line = ( ! isset($back['1']['line'])) ? '' : $back['1']['line'];
303
 
 
304
 
                        return array('file' => $file, 'line' => $line);
305
 
                }
306
 
                return array('file' => 'Unknown', 'line' => 'Unknown');
307
 
        }
308
 
 
309
 
        // --------------------------------------------------------------------
310
 
 
311
 
        /**
312
 
         * Get Default Template
313
 
         *
314
 
         * @access      private
315
 
         * @return      string
316
 
         */
317
 
        function _default_template()
318
 
        {
319
 
                $this->_template = "\n".'<table style="width:100%; font-size:small; margin:10px 0; border-collapse:collapse; border:1px solid #CCC;">';
320
 
                $this->_template .= '{rows}';
321
 
                $this->_template .= "\n".'</table>';
322
 
 
323
 
                $this->_template_rows = "\n\t".'<tr>';
324
 
                $this->_template_rows .= "\n\t\t".'<th style="text-align: left; border-bottom:1px solid #CCC;">{item}</th>';
325
 
                $this->_template_rows .= "\n\t\t".'<td style="border-bottom:1px solid #CCC;">{result}</td>';
326
 
                $this->_template_rows .= "\n\t".'</tr>';
327
 
        }
328
 
 
329
 
        // --------------------------------------------------------------------
330
 
 
331
 
        /**
332
 
         * Parse Template
333
 
         *
334
 
         * Harvests the data within the template {pseudo-variables}
335
 
         *
336
 
         * @access      private
337
 
         * @return      void
338
 
         */
339
 
        function _parse_template()
340
 
        {
341
 
                if ( ! is_null($this->_template_rows))
342
 
                {
343
 
                        return;
344
 
                }
345
 
 
346
 
                if (is_null($this->_template))
347
 
                {
348
 
                        $this->_default_template();
349
 
                        return;
350
 
                }
351
 
 
352
 
                if ( ! preg_match("/\{rows\}(.*?)\{\/rows\}/si", $this->_template, $match))
353
 
                {
354
 
                        $this->_default_template();
355
 
                        return;
356
 
                }
357
 
 
358
 
                $this->_template_rows = $match['1'];
359
 
                $this->_template = str_replace($match['0'], '{rows}', $this->_template);
360
 
        }
361
 
 
362
 
}
363
 
// END Unit_test Class
364
 
 
365
 
/**
366
 
 * Helper functions to test boolean true/false
367
 
 *
368
 
 *
369
 
 * @access      private
370
 
 * @return      bool
371
 
 */
372
 
function is_true($test)
373
 
{
374
 
        return (is_bool($test) AND $test === TRUE) ? TRUE : FALSE;
375
 
}
376
 
function is_false($test)
377
 
{
378
 
        return (is_bool($test) AND $test === FALSE) ? TRUE : FALSE;
379
 
}
380
 
 
381
 
 
382
 
/* End of file Unit_test.php */
383
 
/* Location: ./system/libraries/Unit_test.php */
 
 
b'\\ No newline at end of file'