]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/Extensions/Database/DataSet/ReplacementDataSet.php
Added unit tests.
[Github/sugarcrm.git] / tests / PHPUnit / Extensions / Database / DataSet / ReplacementDataSet.php
1 <?php
2 /**
3  * PHPUnit
4  *
5  * Copyright (c) 2002-2009, Sebastian Bergmann <sb@sebastian-bergmann.de>.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  *   * Redistributions of source code must retain the above copyright
13  *     notice, this list of conditions and the following disclaimer.
14  *
15  *   * Redistributions in binary form must reproduce the above copyright
16  *     notice, this list of conditions and the following disclaimer in
17  *     the documentation and/or other materials provided with the
18  *     distribution.
19  *
20  *   * Neither the name of Sebastian Bergmann nor the names of his
21  *     contributors may be used to endorse or promote products derived
22  *     from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35  * POSSIBILITY OF SUCH DAMAGE.
36  *
37  * @category   Testing
38  * @package    PHPUnit
39  * @author     Mike Lively <m@digitalsandwich.com>
40  * @copyright  2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
41  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
42
43  * @link       http://www.phpunit.de/
44  * @since      File available since Release 3.3.0
45  */
46
47 require_once 'PHPUnit/Util/Filter.php';
48
49 require_once 'PHPUnit/Extensions/Database/DataSet/AbstractDataSet.php';
50 require_once 'PHPUnit/Extensions/Database/DataSet/ReplacementTableIterator.php';
51
52 PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
53
54 /**
55  * Allows for replacing arbitrary values or portions of values with new data.
56  *
57  * A usage for this is replacing all values == '[NULL'] with a true NULL value
58  *
59  * @category   Testing
60  * @package    PHPUnit
61  * @author     Mike Lively <m@digitalsandwich.com>
62  * @copyright  2009 Mike Lively <m@digitalsandwich.com>
63  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
64  * @version    Release: 3.3.17
65  * @link       http://www.phpunit.de/
66  * @since      Class available since Release 3.3.0
67  */
68 class PHPUnit_Extensions_Database_DataSet_ReplacementDataSet extends PHPUnit_Extensions_Database_DataSet_AbstractDataSet
69 {
70     /**
71      * @var PHPUnit_Extensions_Database_DataSet_IDataSet
72      */
73     protected $dataSet;
74
75     /**
76      * @var array
77      */
78     protected $fullReplacements;
79
80     /**
81      * @var array
82      */
83     protected $subStrReplacements;
84
85     /**
86      * Creates a new replacement dataset
87      *
88      * You can pass in any data set that implements PHPUnit_Extensions_Database_DataSet_IDataSet
89      *
90      * @param string $delimiter
91      * @param string $enclosure
92      * @param string $escape
93      */
94     public function __construct(PHPUnit_Extensions_Database_DataSet_IDataSet $dataSet, Array $fullReplacements = array(), Array $subStrReplacements = array())
95     {
96         $this->dataSet = $dataSet;
97         $this->fullReplacements = $fullReplacements;
98         $this->subStrReplacements = $subStrReplacements;
99     }
100
101     /**
102      * Adds a new full replacement
103      *
104      * Full replacements will only replace values if the FULL value is a match
105      *
106      * @param string $value
107      * @param string $replacement
108      */
109     public function addFullReplacement($value, $replacement)
110     {
111         $this->fullReplacements[$value] = $replacement;
112     }
113
114     /**
115      * Adds a new substr replacement
116      *
117      * Substr replacements will replace all occurances of the substr in every column
118      *
119      * @param string $value
120      * @param string $replacement
121      */
122     public function addSubStrReplacement($value, $replacement)
123     {
124         $this->subStrReplacements[$value] = $replacement;
125     }
126
127     /**
128      * Creates an iterator over the tables in the data set. If $reverse is
129      * true a reverse iterator will be returned.
130      *
131      * @param bool $reverse
132      * @return PHPUnit_Extensions_Database_DataSet_ITableIterator
133      */
134     protected function createIterator($reverse = FALSE)
135     {
136         $innerIterator = $reverse ? $this->dataSet->getReverseIterator() : $this->dataSet->getIterator();
137         return new PHPUnit_Extensions_Database_DataSet_ReplacementTableIterator($innerIterator, $this->fullReplacements, $this->subStrReplacements);
138     }
139 }
140 ?>