Merge branch 'master' into backup-convert
[moodle.git] / backup / converter / moodle1 / simpletest / testlib.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /**
19  * Unit tests for the moodle1 converter
20  *
21  * @package    core
22  * @subpackage backup-convert
23  * @copyright  2011 Mark Nielsen <mark@moodlerooms.com>
24  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25  */
27 defined('MOODLE_INTERNAL') || die();
29 require_once($CFG->dirroot . '/backup/converter/moodle1/lib.php');
31 class moodle1_converter_test extends UnitTestCase {
33     public static $includecoverage = array();
35     /** @var string the name of the directory containing the unpacked Moodle 1.9 backup */
36     protected $tempdir;
38     public function setUp() {
39         global $CFG;
41         $this->tempdir = convert_helper::generate_id('simpletest');
42         check_dir_exists("$CFG->dataroot/temp/backup/$this->tempdir");
43         copy(
44             "$CFG->dirroot/backup/converter/moodle1/simpletest/files/moodle.xml",
45             "$CFG->dataroot/temp/backup/$this->tempdir/moodle.xml"
46         );
47     }
49     public function tearDown() {
50         global $CFG;
51         if (empty($CFG->keeptempdirectoriesonbackup)) {
52             fulldelete("$CFG->dataroot/temp/backup/$this->tempdir");
53         }
54     }
56     public function test_detect_format() {
57         $detected = moodle1_converter::detect_format($this->tempdir);
58         $this->assertEqual(backup::FORMAT_MOODLE1, $detected);
59     }
61     public function test_convert_factory() {
62         $converter = convert_factory::converter('moodle1', $this->tempdir);
63         $this->assertIsA($converter, 'moodle1_converter');
64     }
66     public function test_stash_storage_not_created() {
67         $converter = convert_factory::converter('moodle1', $this->tempdir);
68         $this->expectException('moodle1_convert_storage_exception');
69         $converter->set_stash('tempinfo', 12);
70     }
72     public function test_stash_requiring_empty_stash() {
73         $converter = convert_factory::converter('moodle1', $this->tempdir);
74         $converter->create_stash_storage();
75         $converter->set_stash('tempinfo', 12);
76         $this->expectException('moodle1_convert_empty_storage_exception');
77         try {
78             $converter->get_stash('anothertempinfo');
80         } catch (moodle1_convert_empty_storage_exception $e) {
81             // we must drop the storage here so we are able to re-create it in the next test
82             $converter->drop_stash_storage();
83             throw new moodle1_convert_empty_storage_exception('rethrowing');
84         }
85     }
87     public function test_stash_storage() {
88         $converter = convert_factory::converter('moodle1', $this->tempdir);
89         $converter->create_stash_storage();
91         // test stashes without itemid
92         $converter->set_stash('tempinfo1', 12);
93         $converter->set_stash('tempinfo2', array('a' => 2, 'b' => 3));
94         $this->assertIdentical(12, $converter->get_stash('tempinfo1'));
95         $this->assertIdentical(array('a' => 2, 'b' => 3), $converter->get_stash('tempinfo2'));
97         // overwriting a stashed value is allowed
98         $converter->set_stash('tempinfo1', '13');
99         $this->assertNotIdentical(13, $converter->get_stash('tempinfo1'));
100         $this->assertIdentical('13', $converter->get_stash('tempinfo1'));
102         // repeated reading is allowed
103         $this->assertIdentical('13', $converter->get_stash('tempinfo1'));
105         // test stashes with itemid
106         $converter->set_stash('tempinfo', 'Hello', 1);
107         $converter->set_stash('tempinfo', 'World', 2);
108         $this->assertIdentical('Hello', $converter->get_stash('tempinfo', 1));
109         $this->assertIdentical('World', $converter->get_stash('tempinfo', 2));
111         $converter->drop_stash_storage();
112     }
114     public function test_get_contextid() {
115         $converter = convert_factory::converter('moodle1', $this->tempdir);
117         // stash storage must be created in advance
118         $converter->create_stash_storage();
120         // ids are generated on the first call
121         $id1 = $converter->get_contextid(CONTEXT_COURSE, 10);
122         $id2 = $converter->get_contextid(CONTEXT_COURSE, 11);
123         $id3 = $converter->get_contextid(CONTEXT_MODULE, 10);
125         $this->assertNotEqual($id1, $id2);
126         $this->assertNotEqual($id1, $id3);
127         $this->assertNotEqual($id2, $id3);
129         // and then re-used if called with the same params
130         $this->assertEqual($id1, $converter->get_contextid(CONTEXT_COURSE, 10));
131         $this->assertEqual($id2, $converter->get_contextid(CONTEXT_COURSE, 11));
132         $this->assertEqual($id3, $converter->get_contextid(CONTEXT_MODULE, 10));
134         $converter->drop_stash_storage();
135     }
137     public function test_convert_run_convert() {
138         $converter = convert_factory::converter('moodle1', $this->tempdir);
139         $converter->convert();
140     }