SandboxManagerBaseTest.php

Same filename in this branch
  1. 11.x core/modules/package_manager/tests/src/Kernel/SandboxManagerBaseTest.php

Namespace

Drupal\Tests\package_manager\Unit

File

core/modules/package_manager/tests/src/Unit/SandboxManagerBaseTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\package_manager\Unit;

use Drupal\package_manager\SandboxManagerBase;
use Drupal\Tests\UnitTestCase;

/**
 * @coversDefaultClass \Drupal\package_manager\SandboxManagerBase
 * @group package_manager
 * @internal
 */
class SandboxManagerBaseTest extends UnitTestCase {
  
  /**
   * @covers ::validateRequirements
   *
   * @param string|null $expected_exception
   *   The exception class that should be thrown, or NULL if there should not be
   *   any exception.
   * @param string $requirement
   *   The requirement (package name and optional constraint) to validate.
   *
   * @dataProvider providerValidateRequirements
   */
  public function testValidateRequirements(?string $expected_exception, string $requirement) : void {
    $reflector = new \ReflectionClass(SandboxManagerBase::class);
    $method = $reflector->getMethod('validateRequirements');
    if ($expected_exception) {
      $this->expectException($expected_exception);
    }
    else {
      $this->assertNull($expected_exception);
    }
    $method->invoke(NULL, [
      $requirement,
    ]);
  }
  
  /**
   * Data provider for testValidateRequirements.
   *
   * @return array[]
   *   The test cases.
   */
  public static function providerValidateRequirements() : array {
    return [
      // Valid requirements.
[
        NULL,
        'vendor/package',
      ],
      [
        NULL,
        'vendor/snake_case',
      ],
      [
        NULL,
        'vendor/kebab-case',
      ],
      [
        NULL,
        'vendor/with.dots',
      ],
      [
        NULL,
        '1vendor2/3package4',
      ],
      [
        NULL,
        'vendor/package:1',
      ],
      [
        NULL,
        'vendor/package:1.2',
      ],
      [
        NULL,
        'vendor/package:1.2.3',
      ],
      [
        NULL,
        'vendor/package:1.x',
      ],
      [
        NULL,
        'vendor/package:^1',
      ],
      [
        NULL,
        'vendor/package:~1',
      ],
      [
        NULL,
        'vendor/package:>1',
      ],
      [
        NULL,
        'vendor/package:<1',
      ],
      [
        NULL,
        'vendor/package:>=1',
      ],
      [
        NULL,
        'vendor/package:>1 <2',
      ],
      [
        NULL,
        'vendor/package:1 || 2',
      ],
      [
        NULL,
        'vendor/package:>=1,<1.1.0',
      ],
      [
        NULL,
        'vendor/package:1a',
      ],
      [
        NULL,
        'vendor/package:*',
      ],
      [
        NULL,
        'vendor/package:dev-master',
      ],
      [
        NULL,
        'vendor/package:*@dev',
      ],
      [
        NULL,
        'vendor/package:@dev',
      ],
      [
        NULL,
        'vendor/package:master@dev',
      ],
      [
        NULL,
        'vendor/package:master@beta',
      ],
      [
        NULL,
        'php',
      ],
      [
        NULL,
        'php:8',
      ],
      [
        NULL,
        'php:8.0',
      ],
      [
        NULL,
        'php:^8.1',
      ],
      [
        NULL,
        'php:~8.1',
      ],
      [
        NULL,
        'php-64bit',
      ],
      [
        NULL,
        'composer',
      ],
      [
        NULL,
        'composer-plugin-api',
      ],
      [
        NULL,
        'composer-plugin-api:1',
      ],
      [
        NULL,
        'ext-json',
      ],
      [
        NULL,
        'ext-json:1',
      ],
      [
        NULL,
        'ext-pdo_mysql',
      ],
      [
        NULL,
        'ext-pdo_mysql:1',
      ],
      [
        NULL,
        'lib-curl',
      ],
      [
        NULL,
        'lib-curl:1',
      ],
      [
        NULL,
        'lib-curl-zlib',
      ],
      [
        NULL,
        'lib-curl-zlib:1',
      ],
      // Invalid requirements.
[
        \InvalidArgumentException::class,
        '',
      ],
      [
        \InvalidArgumentException::class,
        ' ',
      ],
      [
        \InvalidArgumentException::class,
        '/',
      ],
      [
        \InvalidArgumentException::class,
        'php8',
      ],
      [
        \InvalidArgumentException::class,
        'package',
      ],
      [
        \InvalidArgumentException::class,
        'vendor\\package',
      ],
      [
        \InvalidArgumentException::class,
        'vendor//package',
      ],
      [
        \InvalidArgumentException::class,
        'vendor/package1 vendor/package2',
      ],
      [
        \InvalidArgumentException::class,
        'vendor/package/extra',
      ],
      [
        \UnexpectedValueException::class,
        'vendor/package:a',
      ],
      [
        \UnexpectedValueException::class,
        'vendor/package:',
      ],
      [
        \UnexpectedValueException::class,
        'vendor/package::',
      ],
      [
        \UnexpectedValueException::class,
        'vendor/package::1',
      ],
      [
        \UnexpectedValueException::class,
        'vendor/package:1:2',
      ],
      [
        \UnexpectedValueException::class,
        'vendor/package:develop@dev@dev',
      ],
      [
        \UnexpectedValueException::class,
        'vendor/package:develop@',
      ],
      [
        \InvalidArgumentException::class,
        'vEnDor/pAcKaGe',
      ],
      [
        \InvalidArgumentException::class,
        '_vendor/package',
      ],
      [
        \InvalidArgumentException::class,
        '_vendor/_package',
      ],
      [
        \InvalidArgumentException::class,
        'vendor_/package',
      ],
      [
        \InvalidArgumentException::class,
        '_vendor/package_',
      ],
      [
        \InvalidArgumentException::class,
        'vendor/package-',
      ],
      [
        \InvalidArgumentException::class,
        'php-',
      ],
      [
        \InvalidArgumentException::class,
        'ext',
      ],
      [
        \InvalidArgumentException::class,
        'lib',
      ],
    ];
  }
  
  /**
   * @covers ::getType
   */
  public function testTypeMustBeExplicitlyOverridden() : void {
    $good_grandchild = new class  extends ChildSandboxManager {
      
      /**
       * {@inheritdoc}
       */
      // phpcs:ignore DrupalPractice.CodeAnalysis.VariableAnalysis.UnusedVariable, Drupal.Commenting.VariableComment.Missing
      protected string $type = 'package_manager:good_grandchild';

};
    $this->assertSame('package_manager:good_grandchild', $good_grandchild->getType());
    $bad_grandchild = new class  extends ChildSandboxManager {

};
    $this->expectException(\LogicException::class);
    $this->expectExceptionMessage(get_class($bad_grandchild) . ' must explicitly override the $type property.');
    $bad_grandchild->getType();
  }

}

/**
 * Test class for testing the child stage.
 */
class ChildSandboxManager extends SandboxManagerBase {
  public function __construct() {
  }
  
  /**
   * {@inheritdoc}
   */
  protected string $type = 'package_manager:child';

}

Classes

Title Deprecated Summary
ChildSandboxManager Test class for testing the child stage.
SandboxManagerBaseTest @coversDefaultClass \Drupal\package_manager\SandboxManagerBase[[api-linebreak]] @group package_manager @internal

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.