░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
pplmvsvm
LOCATION:
/var/www/moodle/public/calendar/tests/output
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: humandate_test.php
<?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/>. namespace core_calendar\output; use DateTime; /** * Tests for humandate class. * * @covers \core_calendar\output\humandate * @package core_calendar * @category test * @copyright 2025 Sara Arjona <sara@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ final class humandate_test extends \advanced_testcase { /** * Initialize. */ protected function setUp(): void { parent::setUp(); // Mock the clock. $this->setTimezone('Australia/Perth'); } /** * Test export_for_template() method. * * @dataProvider provider_export_for_template * @param int $addseconds The number of seconds to add to the current time. * @param bool $userelatives Whether to use relative dates. * @param string|null $date For relative dates, the expected string (Tomorrow, Today, Yesterday). * @param bool $ispast Whether the date is in the past. * @param bool $needtitle Whether the date needs a title. * @param bool $isnear Whether the date is near. * @param string $userdateformat The user date expected format. */ public function test_export_for_template( int $addseconds, bool $userelatives, ?string $date, bool $ispast, bool $needtitle, bool $isnear, string $userdateformat, ): void { global $PAGE; $this->resetAfterTest(); // 26 February 2025 15:59:59 (GMT). $clock = $this->mock_clock_with_frozen(1740585599); $renderer = $PAGE->get_renderer('core'); $timestamp = $clock->time() + $addseconds; $expected = [ 'timestamp' => $timestamp, 'date' => $date, 'userdate' => userdate($timestamp, get_string($userdateformat)), 'ispast' => $ispast, 'needtitle' => $needtitle, 'isnear' => $isnear, ]; $humandate = humandate::create_from_timestamp($timestamp); $humandate->set_use_relatives($userelatives); $result = $humandate->export_for_template($renderer); $this->compare_output($expected, $result, $userelatives); } /** * Data provider. * * @return array */ public static function provider_export_for_template(): array { return [ 'Now with relatives' => [ 'addseconds' => 0, 'userelatives' => true, 'date' => 'Today', 'ispast' => false, 'needtitle' => true, 'isnear' => false, 'userdateformat' => 'strftimedayshort', ], 'Tomorrow with relatives' => [ 'addseconds' => DAYSECS, 'userelatives' => true, 'date' => 'Tomorrow', 'ispast' => false, 'needtitle' => true, 'isnear' => false, 'userdateformat' => 'strftimedayshort', ], 'Yesterday with relatives' => [ 'addseconds' => -DAYSECS, 'userelatives' => true, 'date' => 'Yesterday', 'ispast' => true, 'needtitle' => true, 'isnear' => false, 'userdateformat' => 'strftimedayshort', ], 'One hour future with relatives' => [ 'addseconds' => HOURSECS, 'userelatives' => true, 'date' => 'Tomorrow', 'ispast' => false, 'needtitle' => true, 'isnear' => true, 'userdateformat' => 'strftimedayshort', ], 'One hour past with relatives' => [ 'addseconds' => -HOURSECS, 'userelatives' => true, 'date' => 'Today', 'ispast' => true, 'needtitle' => true, 'isnear' => false, 'userdateformat' => 'strftimedayshort', ], 'Now without relatives' => [ 'addseconds' => 0, 'userelatives' => false, 'date' => 'Today', 'ispast' => false, 'needtitle' => false, 'isnear' => false, 'userdateformat' => 'strftimedayshort', ], 'Tomorrow without relatives' => [ 'addseconds' => DAYSECS, 'userelatives' => false, 'date' => 'Tomorrow', 'ispast' => false, 'needtitle' => false, 'isnear' => false, 'userdateformat' => 'strftimedayshort', ], 'Yesterday without relatives' => [ 'addseconds' => -DAYSECS, 'userelatives' => false, 'date' => 'Yesterday', 'ispast' => true, 'needtitle' => false, 'isnear' => false, 'userdateformat' => 'strftimedayshort', ], 'One hour future without relatives' => [ 'addseconds' => HOURSECS, 'userelatives' => false, 'date' => null, 'ispast' => false, 'needtitle' => false, 'isnear' => true, 'userdateformat' => 'strftimedayshort', ], 'One hour past without relatives' => [ 'addseconds' => -HOURSECS, 'userelatives' => false, 'date' => null, 'ispast' => true, 'needtitle' => false, 'isnear' => false, 'userdateformat' => 'strftimedayshort', ], 'one year from now' => [ 'addseconds' => YEARSECS, 'userelatives' => false, 'date' => null, 'ispast' => false, 'needtitle' => false, 'isnear' => false, 'userdateformat' => 'strftimedaydate', ], 'one year in the past' => [ 'addseconds' => -YEARSECS, 'userelatives' => false, 'date' => null, 'ispast' => true, 'needtitle' => false, 'isnear' => false, 'userdateformat' => 'strftimedaydate', ], ]; } public function test_create_from_timestamp(): void { $this->resetAfterTest(); $clock = $this->mock_clock_with_frozen(); $timestamp = $clock->time(); $humandate = humandate::create_from_timestamp($timestamp); $this->assertInstanceOf(humandate::class, $humandate); } public function test_create_from_datetime(): void { $this->resetAfterTest(); $humandate = humandate::create_from_datetime(new DateTime()); $this->assertInstanceOf(humandate::class, $humandate); } /** * Compare humandate output. * * @param array $expected The expected output. * @param array $actual The actual output. * @param bool $userelatives Whether to use relative dates. */ protected function compare_output( array $expected, array $actual, bool $userelatives, ): void { $fields = ['timestamp', 'userdate', 'ispast', 'needtitle']; foreach ($fields as $field) { $this->assertEquals($expected[$field], $actual[$field], "Field $field does not match"); } if ($expected['isnear']) { $this->assertEquals($expected[$field], $actual[$field], "Field isnear does not match"); } else { $this->assertArrayNotHasKey('isnear', $actual); } if (!is_null($expected['date'])) { if ($userelatives) { $this->assertStringContainsString($expected['date'], $actual['date']); } else { $this->assertStringNotContainsString($expected['date'], $actual['date']); } } else { $this->assertStringNotContainsString('Today', $actual['date']); $this->assertStringNotContainsString('Yesterday', $actual['date']); $this->assertStringNotContainsString('Tomorrow', $actual['date']); } } /** * Test get_near_icon method. * * This test checks that the near icon is returned correctly based on the timestamp. */ public function test_get_near_icon(): void { $this->resetAfterTest(); $clock = $this->mock_clock_with_frozen(); // Near time. $timestamp = $clock->time() + HOURSECS; $humandate = humandate::create_from_timestamp($timestamp); $icon = $humandate->get_near_icon(); $this->assertInstanceOf(\core\output\pix_icon::class, $icon); // Not near time. $timestamp = $clock->time() + DAYSECS * 30; $humandate = humandate::create_from_timestamp($timestamp); $icon = $humandate->get_near_icon(); $this->assertNull($icon); } /** * Test the exportable interface implementation. */ public function test_get_exporter(): void { $this->resetAfterTest(); $clock = $this->mock_clock_with_frozen(); $timestamp = $clock->time(); $humandate = humandate::create_from_timestamp($timestamp); $exporter = $humandate->get_exporter(\core\context\system::instance()); $this->assertInstanceOf(\core_calendar\external\humandate_exporter::class, $exporter); $structure = humandate::get_read_structure(); $this->assertInstanceOf(\core_external\external_single_structure::class, $structure); $this->assertEquals( \core_calendar\external\humandate_exporter::get_read_structure(), $structure, ); $structure = humandate::read_properties_definition(); $this->assertEquals( \core_calendar\external\humandate_exporter::read_properties_definition(), $structure, ); } }
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 humandate_test.php
PHP
10.5 KB
2026-02-11 01:44
EDIT
📄 humantimeperiod_test.php
PHP
5.5 KB
2026-02-11 01:44
EDIT