| 1 | efrain | 1 | <?php
 | 
        
           |  |  | 2 | // This file is part of Moodle - http://moodle.org/
 | 
        
           |  |  | 3 | //
 | 
        
           |  |  | 4 | // Moodle is free software: you can redistribute it and/or modify
 | 
        
           |  |  | 5 | // it under the terms of the GNU General Public License as published by
 | 
        
           |  |  | 6 | // the Free Software Foundation, either version 3 of the License, or
 | 
        
           |  |  | 7 | // (at your option) any later version.
 | 
        
           |  |  | 8 | //
 | 
        
           |  |  | 9 | // Moodle is distributed in the hope that it will be useful,
 | 
        
           |  |  | 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
        
           |  |  | 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
        
           |  |  | 12 | // GNU General Public License for more details.
 | 
        
           |  |  | 13 | //
 | 
        
           |  |  | 14 | // You should have received a copy of the GNU General Public License
 | 
        
           |  |  | 15 | // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 | 
        
           |  |  | 16 |   | 
        
           |  |  | 17 | /**
 | 
        
           |  |  | 18 |  * @package   core_backup
 | 
        
           |  |  | 19 |  * @category  phpunit
 | 
        
           |  |  | 20 |  * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
 | 
        
           |  |  | 21 |  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 
        
           |  |  | 22 |  */
 | 
        
           |  |  | 23 |   | 
        
           |  |  | 24 | defined('MOODLE_INTERNAL') || die();
 | 
        
           |  |  | 25 |   | 
        
           |  |  | 26 | // Include all the needed stuff
 | 
        
           |  |  | 27 | global $CFG;
 | 
        
           |  |  | 28 | require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php');
 | 
        
           |  |  | 29 |   | 
        
           |  |  | 30 | /**
 | 
        
           |  |  | 31 |  * helper extended base_attribute class that implements some methods for instantiating and testing
 | 
        
           |  |  | 32 |  */
 | 
        
           |  |  | 33 | class mock_base_attribute extends base_attribute {
 | 
        
           |  |  | 34 |     // Nothing to do. Just allow instances to be created
 | 
        
           |  |  | 35 | }
 | 
        
           |  |  | 36 |   | 
        
           |  |  | 37 | /**
 | 
        
           |  |  | 38 |  * helper extended final_element class that implements some methods for instantiating and testing
 | 
        
           |  |  | 39 |  */
 | 
        
           |  |  | 40 | class mock_base_final_element extends base_final_element {
 | 
        
           |  |  | 41 | /// Implementable API
 | 
        
           |  |  | 42 |     protected function get_new_attribute($name) {
 | 
        
           |  |  | 43 |         return new mock_base_attribute($name);
 | 
        
           |  |  | 44 |     }
 | 
        
           |  |  | 45 | }
 | 
        
           |  |  | 46 |   | 
        
           |  |  | 47 | /**
 | 
        
           |  |  | 48 |  * helper extended nested_element class that implements some methods for instantiating and testing
 | 
        
           |  |  | 49 |  */
 | 
        
           |  |  | 50 | class mock_base_nested_element extends base_nested_element {
 | 
        
           |  |  | 51 | /// Implementable API
 | 
        
           |  |  | 52 |     protected function get_new_attribute($name) {
 | 
        
           |  |  | 53 |         return new mock_base_attribute($name);
 | 
        
           |  |  | 54 |     }
 | 
        
           |  |  | 55 |   | 
        
           |  |  | 56 |     protected function get_new_final_element($name) {
 | 
        
           |  |  | 57 |         return new mock_base_final_element($name);
 | 
        
           |  |  | 58 |     }
 | 
        
           |  |  | 59 | }
 | 
        
           |  |  | 60 |   | 
        
           |  |  | 61 | /**
 | 
        
           |  |  | 62 |  * helper extended optigroup class that implements some methods for instantiating and testing
 | 
        
           |  |  | 63 |  */
 | 
        
           |  |  | 64 | class mock_base_optigroup extends base_optigroup {
 | 
        
           |  |  | 65 | /// Implementable API
 | 
        
           |  |  | 66 |     protected function get_new_attribute($name) {
 | 
        
           |  |  | 67 |         return new mock_base_attribute($name);
 | 
        
           |  |  | 68 |     }
 | 
        
           |  |  | 69 |   | 
        
           |  |  | 70 |     protected function get_new_final_element($name) {
 | 
        
           |  |  | 71 |         return new mock_base_final_element($name);
 | 
        
           |  |  | 72 |     }
 | 
        
           |  |  | 73 |   | 
        
           |  |  | 74 |     public function is_multiple() {
 | 
        
           |  |  | 75 |         return parent::is_multiple();
 | 
        
           |  |  | 76 |     }
 | 
        
           |  |  | 77 | }
 | 
        
           |  |  | 78 |   | 
        
           |  |  | 79 | /**
 | 
        
           |  |  | 80 |  * helper class that extends backup_final_element in order to skip its value
 | 
        
           |  |  | 81 |  */
 | 
        
           |  |  | 82 | class mock_skip_final_element extends backup_final_element {
 | 
        
           |  |  | 83 |   | 
        
           |  |  | 84 |     public function set_value($value) {
 | 
        
           |  |  | 85 |         $this->clean_value();
 | 
        
           |  |  | 86 |     }
 | 
        
           |  |  | 87 | }
 | 
        
           |  |  | 88 |   | 
        
           |  |  | 89 | /**
 | 
        
           |  |  | 90 |  * helper class that extends backup_final_element in order to modify its value
 | 
        
           |  |  | 91 |  */
 | 
        
           |  |  | 92 | class mock_modify_final_element extends backup_final_element {
 | 
        
           |  |  | 93 |     public function set_value($value) {
 | 
        
           |  |  | 94 |         parent::set_value('original was ' . $value . ', now changed');
 | 
        
           |  |  | 95 |     }
 | 
        
           |  |  | 96 | }
 | 
        
           |  |  | 97 |   | 
        
           |  |  | 98 | /**
 | 
        
           |  |  | 99 |  * helper class that extends backup_final_element to delegate any calculation to another class
 | 
        
           |  |  | 100 |  */
 | 
        
           |  |  | 101 | class mock_final_element_interceptor extends backup_final_element {
 | 
        
           |  |  | 102 |     public function set_value($value) {
 | 
        
           |  |  | 103 |         // Get grandparent name
 | 
        
           |  |  | 104 |         $gpname = $this->get_grandparent()->get_name();
 | 
        
           |  |  | 105 |         // Get parent name
 | 
        
           |  |  | 106 |         $pname = $this->get_parent()->get_name();
 | 
        
           |  |  | 107 |         // Get my name
 | 
        
           |  |  | 108 |         $myname = $this->get_name();
 | 
        
           |  |  | 109 |         // Define class and function name
 | 
        
           |  |  | 110 |         $classname = 'mock_' . $gpname . '_' . $pname . '_interceptor';
 | 
        
           |  |  | 111 |         $methodname= 'intercept_' . $pname . '_' . $myname;
 | 
        
           |  |  | 112 |         // Invoke the interception method
 | 
        
           |  |  | 113 |         $result = call_user_func(array($classname, $methodname), $value);
 | 
        
           |  |  | 114 |         // Finally set it
 | 
        
           |  |  | 115 |         parent::set_value($result);
 | 
        
           |  |  | 116 |     }
 | 
        
           |  |  | 117 | }
 | 
        
           |  |  | 118 |   | 
        
           |  |  | 119 | /**
 | 
        
           |  |  | 120 |  * test interceptor class (its methods are called from interceptor)
 | 
        
           |  |  | 121 |  */
 | 
        
           |  |  | 122 | abstract class mock_forum_forum_interceptor {
 | 
        
           |  |  | 123 |     static function intercept_forum_completionposts($element) {
 | 
        
           |  |  | 124 |         return 'intercepted!';
 | 
        
           |  |  | 125 |     }
 | 
        
           |  |  | 126 | }
 | 
        
           |  |  | 127 |   | 
        
           |  |  | 128 | /**
 | 
        
           |  |  | 129 |  * Instantiable class extending base_atom in order to be able to perform tests
 | 
        
           |  |  | 130 |  */
 | 
        
           |  |  | 131 | class mock_base_atom extends base_atom {
 | 
        
           |  |  | 132 |     // Nothing new in this class, just an instantiable base_atom class
 | 
        
           |  |  | 133 |     // with the is_set() method public for testing purposes
 | 
        
           |  |  | 134 |     public function is_set() {
 | 
        
           |  |  | 135 |         return parent::is_set();
 | 
        
           |  |  | 136 |     }
 | 
        
           |  |  | 137 | }
 |