/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: galaxyAbstractor
  • Date: 2013-04-10 15:58:59 UTC
  • mfrom: (20.1.1 lenasys)
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: galaxyabstractor@gmail.com-20130410155859-cih60kaz5es8savt
CodeIgniter implementation of basic CMS system

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'