feat(compat): declare core independence with core:"none" (INDEPENDENT status, block inheritance, no warning)

This commit is contained in:
kj
2026-10-06 14:12:36 -03:00
parent fc51133d92
commit 901968d0bd
9 changed files with 247 additions and 69 deletions
+33
View File
@@ -146,3 +146,36 @@ Harness::it('la descripcion del componente prevalece y hereda del paquete', func
'components' => ['c' => ['files' => ['c.php'], 'description' => 7]],
]), 'description no-string es inválida');
});
Harness::it('core admite "none" como bloque con herencia completa', function () {
$m = Manifest::fromArray([
'name' => 'pkg',
'version' => '1.0.0',
'core' => 'none',
'components' => [
'a' => ['files' => ['src/A.php']],
'b' => ['files' => ['src/B.php'], 'core' => ['requires' => '>=0.2', 'tested' => '0.2']],
],
]);
ok($m->coreIndependent('a'), 'a hereda la independencia del paquete');
ok(!$m->coreIndependent('b'), 'b sobreescribe el bloque con su rango');
eq('>=0.2', $m->coreRequirement('b'));
eq('0.2', $m->testedCore('b'));
eq(null, $m->coreRequirement('a'), 'independiente no arrastra rangos');
$m2 = Manifest::fromArray([
'name' => 'pkg2',
'version' => '1.0.0',
'core' => ['requires' => '>=0.1'],
'components' => ['c' => ['files' => ['src/C.php'], 'core' => 'none']],
]);
ok($m2->coreIndependent('c'), 'componente declara none sobre rango de paquete');
eq(null, $m2->coreRequirement('c'), 'el rango del paquete no se filtra al bloque declarado none');
eq('>=0.1', $m2->coreRequirement());
throws(fn () => Manifest::fromArray([
'name' => 'bad', 'version' => '1.0.0', 'core' => 'otro',
'components' => ['x' => ['files' => ['x.php']]],
]), 'core string distinto de none es inválido');
});