Issue #3451701 by dww, Mingsong, MegaphoneJon: The update module should not crash with releases that contain invalid values for core_version_requirement
parent
5c1a0edb59
commit
d3b2a6a56e
|
@ -169,8 +169,13 @@ final class ProjectCoreCompatibility {
|
|||
* version of Drupal core, otherwise FALSE.
|
||||
*/
|
||||
protected function isCoreCompatible($core_compatibility_constraint) {
|
||||
try {
|
||||
return Semver::satisfies($this->existingCoreVersion, $core_compatibility_constraint);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates core a compatibility message from a semantic version constraint.
|
||||
|
|
|
@ -156,4 +156,51 @@ class ProjectCoreCompatibilityTest extends UnitTestCase {
|
|||
return $test_cases;
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::isCoreCompatible
|
||||
* @dataProvider providerIsCoreCompatible
|
||||
*
|
||||
* @param string $constraint
|
||||
* The core_version_constraint to test.
|
||||
* @param string $installed_core
|
||||
* The installed version of core to compare against.
|
||||
* @param bool $expected
|
||||
* The expected result.
|
||||
*/
|
||||
public function testIsCoreCompatible(string $constraint, string $installed_core, bool $expected): void {
|
||||
$core_data['existing_version'] = $installed_core;
|
||||
$project_compatibility = new ProjectCoreCompatibility($core_data, [], []);
|
||||
$reflection = new \ReflectionClass(ProjectCoreCompatibility::class);
|
||||
$reflection_method = $reflection->getMethod('isCoreCompatible');
|
||||
$result = $reflection_method->invokeArgs($project_compatibility, [$constraint]);
|
||||
$this->assertSame($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testIsCoreCompatible().
|
||||
*/
|
||||
public static function providerIsCoreCompatible(): array {
|
||||
$test_cases['compatible exact'] = [
|
||||
'10.3.0',
|
||||
'10.3.0',
|
||||
TRUE,
|
||||
];
|
||||
$test_cases['compatible with OR'] = [
|
||||
'^9 || ^10',
|
||||
'10.3.0',
|
||||
TRUE,
|
||||
];
|
||||
$test_cases['incompatible'] = [
|
||||
'^10',
|
||||
'11.0.0',
|
||||
FALSE,
|
||||
];
|
||||
$test_cases['broken'] = [
|
||||
'^^11',
|
||||
'11.0.0',
|
||||
FALSE,
|
||||
];
|
||||
return $test_cases;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue