Commit e5b70636 authored by catch's avatar catch
Browse files

Issue #3020165 by alexpott: Dependency objects can be optimised for serialisation

parent 56ccba06
Loading
Loading
Loading
Loading
+10 −0
Changes for core/lib/Drupal/Core/Extension/Dependency.php: 10 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -190,4 +190,14 @@ public static function createFromString($dependency) {
    return new static($name, $project, $version_string);
  }

  /**
   * Prevents unnecessary serialization of constraint objects.
   *
   * @return array
   *   The properties to seriailize.
   */
  public function __sleep() {
    return ['name', 'project', 'constraintString'];
  }

}
+16 −0
Changes for core/tests/Drupal/Tests/Core/Extension/DependencyTest.php: 16 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\Tests\Core\Extension;

use Drupal\Component\Version\Constraint;
use Drupal\Core\Extension\Dependency;
use Drupal\Tests\UnitTestCase;

@@ -100,4 +101,19 @@ public function testOffsetSet() {
    $dependency['name'] = 'foo';
  }

  /**
   * Ensures that constraint objects are not serialized.
   *
   * @covers ::__sleep
   */
  public function testSerialization() {
    $dependency = new Dependency('paragraphs_demo', 'paragraphs', '>8.x-1.1');
    $this->assertTrue($dependency->isCompatible('1.2'));
    $this->assertInstanceOf(Constraint::class, $this->getObjectAttribute($dependency, 'constraint'));
    $dependency = unserialize(serialize($dependency));
    $this->assertNull($this->getObjectAttribute($dependency, 'constraint'));
    $this->assertTrue($dependency->isCompatible('1.2'));
    $this->assertInstanceOf(Constraint::class, $this->getObjectAttribute($dependency, 'constraint'));
  }

}