. namespace core; /** * Unit tests for parameter management. * * @package core * @copyright Andrew Lyons * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @covers \core\param */ class param_test extends \advanced_testcase { /** * Test that the Moodle `from_type` method provides canonicalised parameter values. * * @dataProvider valid_param_provider * @param string $type * @param param $expected */ public function test_from_type(string $type, param $expected): void { $this->assertEquals($expected, param::from_type($type)); } /** * Data provider containing valid paramter types and their name mapping. */ public static function valid_param_provider(): array { return [ // Standard values. [PARAM_RAW, param::RAW], [PARAM_RAW_TRIMMED, param::RAW_TRIMMED], [PARAM_FLOAT, param::FLOAT], [PARAM_INT, param::INT], // Using enum values (why would you, but...). [param::RAW->value, param::RAW], [param::RAW_TRIMMED->value, param::RAW_TRIMMED], [param::FLOAT->value, param::FLOAT], [param::INT->value, param::INT], [param::COMPONENT->value, param::COMPONENT], // Some aliases (canonicalised) parameters. [PARAM_INTEGER, param::INT], [PARAM_NUMBER, param::FLOAT], ]; } /** * Ensure that we throw an exception if an invalid parameter type is used. */ public function test_from_type_invalid(): void { $this->expectException(\coding_exception::class); param::from_type('not_a_param'); } /** * Test that deprecated parameters are marked as such. * * @dataProvider is_deprecated_provider * @param param $param * @param bool $expected */ public function test_is_deprecated(param $param, bool $expected): void { $this->assertEquals( $expected, $param->is_deprecated(), ); } /** * Provider for deprecated parameter types. * * @return array */ public static function is_deprecated_provider(): array { return [ // Some undeprecated parameters. [param::RAW, false], [param::RAW_TRIMMED, false], [param::INT, false], // Some deprecated parameters. [param::INTEGER, true], [param::NUMBER, true], [param::CLEAN, true], ]; } /** * Test that finally deprecated params throw an exception when cleaning. * * @dataProvider deprecated_param_provider * @param param $params */ public function test_deprecated_params_except(param $param): void { $this->expectException(\coding_exception::class); $param->clean('foo'); } /** * Provider for deprecated parameters. * * @return array */ public static function deprecated_param_provider(): array { return array_map( fn (param $param): array => [$param], array_filter( param::cases(), function (param $param): bool { if ($attribute = deprecation::from($param)) { return $attribute->emit && $attribute->final; } return false; }, ), ); } }