plus-8.x-4.x-dev/tests/src/Unit/ArrayObjectTest.php

tests/src/Unit/ArrayObjectTest.php
<?php

namespace Drupal\Tests\plus\Unit;

use Drupal\Tests\UnitTestCase;
use Drupal\plus\Utility\ArrayObject;

/**
 * @coversDefaultClass Drupal\plus\Utility\ArrayObject
 *
 * @group Utility
 */
class ArrayObjectTest extends UnitTestCase {

  /**
   * Tests the constructor.
   *
   * @covers ::__construct
   */
  public function testConstruct() {
    $array = new ArrayObject();
    $this->assertInstanceOf(ArrayObject::class, $array);
  }

  /**
   * Tests the static create method.
   *
   * @covers ::__get
   * @covers ::__set
   * @covers ::create
   * @covers ::get
   * @covers ::offsetGet
   * @covers ::offsetSet
   * @covers ::set
   */
  public function testCreate() {
    $original = ['prop' => 123];

    $obj = ArrayObject::create($original);

    foreach ([1, 2, 3, 4] as $value) {
      switch ($value) {
        // Test setting by property.
        case 1:
          $obj->prop = $value;
          break;

        // Test setting by array index.
        case 2:
          $obj['prop'] = $value;
          break;

        // Test setting by method.
        case 3:
          $obj->set('prop', $value);
          break;

        // Test setting by reference.
        case 4:
          $ref =& $obj->prop;
          $ref = $value;
          break;
      }

      // Ensure ::get returns the correct value.
      $this->assertSame($value, $obj->get('prop'));

      // Ensure ::__get returns the correct value.
      $this->assertSame($value, $obj->prop);

      // Ensure ::offsetGet returns the correct value.
      $this->assertSame($value, $obj['prop']);
    }

    // Ensure the original array has not changed.
    $this->assertSame(123, $original['prop']);
  }

  /**
   * Tests the static create method.
   *
   * @covers ::__get
   * @covers ::__set
   * @covers ::create
   * @covers ::get
   * @covers ::offsetGet
   * @covers ::offsetSet
   * @covers ::set
   */
  public function testReference() {
    $original = ['prop' => 123];

    $obj = ArrayObject::reference($original);

    foreach ([1, 2, 3, 4] as $value) {
      switch ($value) {
        // Test setting by property.
        case 1:
          $obj->prop = $value;
          break;

        // Test setting by array index.
        case 2:
          $obj['prop'] = $value;
          break;

        // Test setting by method.
        case 3:
          $obj->set('prop', $value);
          break;

        // Test setting by reference.
        case 4:
          $ref =& $obj->prop;
          $ref = $value;
          break;
      }

      // Ensure ::get returns the correct value.
      $this->assertSame($value, $obj->get('prop'));

      // Ensure ::__get returns the correct value.
      $this->assertSame($value, $obj->prop);

      // Ensure ::offsetGet returns the correct value.
      $this->assertSame($value, $obj['prop']);
    }

    // Ensure the original array has the same value as the last value from loop.
    $this->assertSame($value, $original['prop']);
  }

  /**
   * Tests the flatten method.
   *
   * @covers ::flatten
   */
  public function testFlatten() {
    $array = ArrayObject::create(['one', ['two'], [['three']], 4]);
    $this->assertSame(['one', ['two'], [['three']], 4], $array->value());
    $this->assertSame(['one', 'two', 'three', 4], $array->flatten()->value());
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc