Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
> * xml_output tests (base, memory and file). * @package core_backup > *
< * @category phpunit
> * @category test
* @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */
> namespace core_backup; defined('MOODLE_INTERNAL') || die(); > > use file_xml_output; // Include all the needed stuff > use memory_xml_output; global $CFG; > use xml_output; require_once($CFG->dirroot . '/backup/util/xml/output/xml_output.class.php'); > use xml_output_exception; require_once($CFG->dirroot . '/backup/util/xml/output/memory_xml_output.class.php'); >
require_once($CFG->dirroot . '/backup/util/xml/output/file_xml_output.class.php');
< /*
> /**
* xml_output tests (base, memory and file)
> * */ > * @package core_backup class xml_output_test extends advanced_testcase { > * @category test > * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} /* > * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
< class xml_output_test extends advanced_testcase {
> class output_test extends \advanced_testcase {
*/ function test_memory_xml_output() { // Instantiate xml_output $xo = new memory_xml_output(); $this->assertTrue($xo instanceof xml_output); // Try to write some contents before starting it $xo = new memory_xml_output(); try { $xo->write('test'); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_not_started'); } // Try to set buffer size if unsupported $xo = new memory_xml_output(); try { $xo->set_buffersize(8192); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_buffer_nosupport'); } // Try to set buffer after start $xo = new memory_xml_output(); $xo->start(); try { $xo->set_buffersize(8192); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_already_started'); } // Try to stop output before starting it $xo = new memory_xml_output(); try { $xo->stop(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_not_started'); } // Try to debug_info() before starting $xo = new memory_xml_output(); try { $xo->debug_info(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_not_stopped'); } // Start output twice $xo = new memory_xml_output(); $xo->start(); try { $xo->start(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_already_started'); } // Try to debug_info() before stoping $xo = new memory_xml_output(); $xo->start(); try { $xo->debug_info(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_not_stopped'); } // Stop output twice $xo = new memory_xml_output(); $xo->start(); $xo->stop(); try { $xo->stop(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_not_started'); } // Try to re-start after stop $xo = new memory_xml_output(); $xo->start(); $xo->stop(); try { $xo->start(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_already_stopped'); } // Try to get contents before stopping $xo = new memory_xml_output(); $xo->start(); try { $xo->get_allcontents(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'xml_output_not_stopped'); } // Write some contents and check them $xo = new memory_xml_output(); $xo->start(); $xo->write('first test'); $xo->stop(); $this->assertEquals('first test', $xo->get_allcontents()); // Write 3 times and check them $xo = new memory_xml_output(); $xo->start(); $xo->write('first test'); $xo->write(', sencond test'); $xo->write(', third test'); $xo->stop(); $this->assertEquals('first test, sencond test, third test', $xo->get_allcontents()); // Write some line feeds, tabs and friends $string = "\n\r\tcrazy test\n\r\t"; $xo = new memory_xml_output(); $xo->start(); $xo->write($string); $xo->stop(); $this->assertEquals($string, $xo->get_allcontents()); // Write some UTF-8 chars $string = 'áéíóú'; $xo = new memory_xml_output(); $xo->start(); $xo->write($string); $xo->stop(); $this->assertEquals($string, $xo->get_allcontents()); // Write some empty content $xo = new memory_xml_output(); $xo->start(); $xo->write('Hello '); $xo->write(null); $xo->write(false); $xo->write(''); $xo->write('World'); $xo->write(null); $xo->stop(); $this->assertEquals('Hello World', $xo->get_allcontents()); // Get debug info $xo = new memory_xml_output(); $xo->start(); $xo->write('01234'); $xo->write('56789'); $xo->stop(); $this->assertEquals('0123456789', $xo->get_allcontents()); $debug = $xo->debug_info(); $this->assertTrue(is_array($debug)); $this->assertTrue(array_key_exists('sent', $debug)); $this->assertEquals($debug['sent'], 10); } /* * test file_xml_output */ function test_file_xml_output() { global $CFG; $this->resetAfterTest(); $file = $CFG->tempdir . '/test/test_file_xml_output.txt'; // Remove the test dir and any content @remove_dir(dirname($file)); // Recreate test dir if (!check_dir_exists(dirname($file), true, true)) {
< throw new moodle_exception('error_creating_temp_dir', 'error', dirname($file));
> throw new \moodle_exception('error_creating_temp_dir', 'error', dirname($file));
} // Instantiate xml_output $xo = new file_xml_output($file); $this->assertTrue($xo instanceof xml_output); // Try to init file in (near) impossible path $file = $CFG->tempdir . '/test_azby/test_file_xml_output.txt'; $xo = new file_xml_output($file); try { $xo->start(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'directory_not_exists'); } // Try to init file already existing $file = $CFG->tempdir . '/test/test_file_xml_output.txt'; file_put_contents($file, 'createdtobedeleted'); // create file manually $xo = new file_xml_output($file); try { $xo->start(); $this->assertTrue(false, 'xml_output_exception expected');
< } catch (exception $e) {
> } catch (\Exception $e) {
$this->assertTrue($e instanceof xml_output_exception); $this->assertEquals($e->errorcode, 'file_already_exists'); } unlink($file); // delete file // Send some output and check $file = $CFG->tempdir . '/test/test_file_xml_output.txt'; $xo = new file_xml_output($file); $xo->start(); $xo->write('first text'); $xo->stop(); $this->assertEquals('first text', file_get_contents($file)); unlink($file); // delete file // With buffer of 4 bytes, send 3 contents of 3 bytes each // so we force both buffering and last write on stop $file = $CFG->tempdir . '/test/test_file_xml_output.txt'; $xo = new file_xml_output($file); $xo->set_buffersize(5); $xo->start(); $xo->write('123'); $xo->write('456'); $xo->write('789'); $xo->stop(); $this->assertEquals('123456789', file_get_contents($file)); unlink($file); // delete file // Write some line feeds, tabs and friends $file = $CFG->tempdir . '/test/test_file_xml_output.txt'; $string = "\n\r\tcrazy test\n\r\t"; $xo = new file_xml_output($file); $xo->start(); $xo->write($string); $xo->stop(); $this->assertEquals($string, file_get_contents($file)); unlink($file); // delete file // Write some UTF-8 chars $file = $CFG->tempdir . '/test/test_file_xml_output.txt'; $string = 'áéíóú'; $xo = new file_xml_output($file); $xo->start(); $xo->write($string); $xo->stop(); $this->assertEquals($string, file_get_contents($file)); unlink($file); // delete file // Remove the test dir and any content @remove_dir(dirname($file)); } }