You are here

class MenuTreeParametersTest in Drupal 8

Same name and namespace in other branches
  1. 9 core/tests/Drupal/Tests/Core/Menu/MenuTreeParametersTest.php \Drupal\Tests\Core\Menu\MenuTreeParametersTest
  2. 10 core/tests/Drupal/Tests/Core/Menu/MenuTreeParametersTest.php \Drupal\Tests\Core\Menu\MenuTreeParametersTest

Tests the menu link tree parameters value object.

@group Menu

@coversDefaultClass \Drupal\Core\Menu\MenuTreeParameters

Hierarchy

Expanded class hierarchy of MenuTreeParametersTest

File

core/tests/Drupal/Tests/Core/Menu/MenuTreeParametersTest.php, line 15

Namespace

Drupal\Tests\Core\Menu
View source
class MenuTreeParametersTest extends UnitTestCase {

  /**
   * Provides test data for testSetMinDepth().
   */
  public function providerTestSetMinDepth() {
    $data = [];

    // Valid values at the extremes and in the middle.
    $data[] = [
      1,
      1,
    ];
    $data[] = [
      2,
      2,
    ];
    $data[] = [
      9,
      9,
    ];

    // Invalid values are mapped to the closest valid value.
    $data[] = [
      -10000,
      1,
    ];
    $data[] = [
      0,
      1,
    ];

    // … except for those invalid values that reach beyond the maximum depth,
    // because MenuTreeParameters is a value object and hence cannot depend
    // on anything; to know the actual maximum depth, it'd have to depend on the
    // MenuTreeStorage service.
    $data[] = [
      10,
      10,
    ];
    $data[] = [
      100000,
      100000,
    ];
    return $data;
  }

  /**
   * Tests setMinDepth().
   *
   * @covers ::setMinDepth
   * @dataProvider providerTestSetMinDepth
   */
  public function testSetMinDepth($min_depth, $expected) {
    $parameters = new MenuTreeParameters();
    $parameters
      ->setMinDepth($min_depth);
    $this
      ->assertEquals($expected, $parameters->minDepth);
  }

  /**
   * Tests addExpandedParents().
   *
   * @covers ::addExpandedParents
   */
  public function testAddExpanded() {
    $parameters = new MenuTreeParameters();

    // Verify default value.
    $this
      ->assertEquals([], $parameters->expandedParents);

    // Add actual menu link plugin IDs to be expanded.
    $parameters
      ->addExpandedParents([
      'foo',
      'bar',
      'baz',
    ]);
    $this
      ->assertEquals([
      'foo',
      'bar',
      'baz',
    ], $parameters->expandedParents);

    // Add additional menu link plugin IDs; they should be merged, not replacing
    // the old ones.
    $parameters
      ->addExpandedParents([
      'qux',
      'quux',
    ]);
    $this
      ->assertEquals([
      'foo',
      'bar',
      'baz',
      'qux',
      'quux',
    ], $parameters->expandedParents);

    // Add pre-existing menu link plugin IDs; they should not be added again;
    // this is a set.
    $parameters
      ->addExpandedParents([
      'bar',
      'quux',
    ]);
    $this
      ->assertEquals([
      'foo',
      'bar',
      'baz',
      'qux',
      'quux',
    ], $parameters->expandedParents);
  }

  /**
   * Tests addCondition().
   *
   * @covers ::addCondition
   */
  public function testAddCondition() {
    $parameters = new MenuTreeParameters();

    // Verify default value.
    $this
      ->assertEquals([], $parameters->conditions);

    // Add a condition.
    $parameters
      ->addCondition('expanded', 1);
    $this
      ->assertEquals([
      'expanded' => 1,
    ], $parameters->conditions);

    // Add another condition.
    $parameters
      ->addCondition('has_children', 0);
    $this
      ->assertEquals([
      'expanded' => 1,
      'has_children' => 0,
    ], $parameters->conditions);

    // Add a condition with an operator.
    $parameters
      ->addCondition('provider', [
      'module1',
      'module2',
    ], 'IN');
    $this
      ->assertEquals([
      'expanded' => 1,
      'has_children' => 0,
      'provider' => [
        [
          'module1',
          'module2',
        ],
        'IN',
      ],
    ], $parameters->conditions);

    // Add another condition with an operator.
    $parameters
      ->addCondition('id', 1337, '<');
    $this
      ->assertEquals([
      'expanded' => 1,
      'has_children' => 0,
      'provider' => [
        [
          'module1',
          'module2',
        ],
        'IN',
      ],
      'id' => [
        1337,
        '<',
      ],
    ], $parameters->conditions);

    // It's impossible to add two conditions on the same field; in that case,
    // the old condition will be overwritten.
    $parameters
      ->addCondition('provider', 'other_module');
    $this
      ->assertEquals([
      'expanded' => 1,
      'has_children' => 0,
      'provider' => 'other_module',
      'id' => [
        1337,
        '<',
      ],
    ], $parameters->conditions);
  }

  /**
   * Tests onlyEnabledLinks().
   *
   * @covers ::onlyEnabledLinks
   */
  public function testOnlyEnabledLinks() {
    $parameters = new MenuTreeParameters();
    $parameters
      ->onlyEnabledLinks();
    $this
      ->assertEquals(1, $parameters->conditions['enabled']);
  }

  /**
   * Tests setTopLevelOnly().
   *
   * @covers ::setTopLevelOnly
   */
  public function testSetTopLevelOnly() {
    $parameters = new MenuTreeParameters();
    $parameters
      ->setTopLevelOnly();
    $this
      ->assertEquals(1, $parameters->maxDepth);
  }

  /**
   * Tests excludeRoot().
   *
   * @covers ::excludeRoot
   */
  public function testExcludeRoot() {
    $parameters = new MenuTreeParameters();
    $parameters
      ->excludeRoot();
    $this
      ->assertEquals(1, $parameters->minDepth);
  }

  /**
   * @covers ::serialize
   * @covers ::unserialize
   */
  public function testSerialize() {
    $parameters = new MenuTreeParameters();
    $parameters
      ->setRoot(1);
    $parameters
      ->setMinDepth('2');
    $parameters
      ->setMaxDepth('9');
    $parameters
      ->addExpandedParents([
      '',
      'foo',
    ]);
    $parameters
      ->setActiveTrail([
      '',
      'bar',
    ]);
    $after_serialize = unserialize(serialize($parameters));
    $this
      ->assertSame('1', $after_serialize->root);
    $this
      ->assertSame(2, $after_serialize->minDepth);
    $this
      ->assertSame(9, $after_serialize->maxDepth);
    $this
      ->assertSame([
      '',
      'foo',
    ], $after_serialize->expandedParents);
    $this
      ->assertSame([
      'bar',
    ], $after_serialize->activeTrail);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MenuTreeParametersTest::providerTestSetMinDepth public function Provides test data for testSetMinDepth().
MenuTreeParametersTest::testAddCondition public function Tests addCondition().
MenuTreeParametersTest::testAddExpanded public function Tests addExpandedParents().
MenuTreeParametersTest::testExcludeRoot public function Tests excludeRoot().
MenuTreeParametersTest::testOnlyEnabledLinks public function Tests onlyEnabledLinks().
MenuTreeParametersTest::testSerialize public function @covers ::serialize @covers ::unserialize
MenuTreeParametersTest::testSetMinDepth public function Tests setMinDepth().
MenuTreeParametersTest::testSetTopLevelOnly public function Tests setTopLevelOnly().
PhpunitCompatibilityTrait::getMock Deprecated public function Returns a mock object for the specified class using the available method.
PhpunitCompatibilityTrait::setExpectedException Deprecated public function Compatibility layer for PHPUnit 6 to support PHPUnit 4 code.
UnitTestCase::$randomGenerator protected property The random generator.
UnitTestCase::$root protected property The app root. 1
UnitTestCase::assertArrayEquals protected function Asserts if two arrays are equal by sorting them first.
UnitTestCase::getBlockMockWithMachineName Deprecated protected function Mocks a block with a block plugin. 1
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getConfigStorageStub public function Returns a stub config storage that returns the supplied configuration.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getRandomGenerator protected function Gets the random generator for the utility methods.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::randomMachineName public function Generates a unique random string containing letters and numbers.
UnitTestCase::setUp protected function 340