Skip to content

Commit 024473a

Browse files
authored
Merge pull request #202 from alexz707/add-prepend-type-filter
Add PrependTypeFilter method
2 parents 4764e04 + 2356a16 commit 024473a

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/DeepCopy/DeepCopy.php

+8
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,14 @@ public function addTypeFilter(TypeFilter $filter, TypeMatcher $matcher)
122122
];
123123
}
124124

125+
public function prependTypeFilter(TypeFilter $filter, TypeMatcher $matcher)
126+
{
127+
array_unshift($this->typeFilters, [
128+
'matcher' => $matcher,
129+
'filter' => $filter,
130+
]);
131+
}
132+
125133
private function recursiveCopy($var)
126134
{
127135
// Matches Type Filter

tests/DeepCopyTest/DeepCopyTest.php

+16
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher;
3131
use DeepCopy\Matcher\PropertyNameMatcher;
3232
use DeepCopy\Matcher\PropertyTypeMatcher;
33+
use DeepCopy\TypeFilter\ReplaceFilter;
3334
use DeepCopy\TypeFilter\ShallowCopyFilter;
3435
use DeepCopy\TypeMatcher\TypeMatcher;
3536
use PHPUnit\Framework\TestCase;
@@ -475,6 +476,21 @@ public function test_it_can_prepend_filter()
475476
$this->assertNull($copy->getFoo());
476477
}
477478

479+
public function test_it_can_prepend_type_filter()
480+
{
481+
$object = new f008\A('bar');
482+
$deepCopy = new DeepCopy();
483+
$deepCopy->addTypeFilter(new ReplaceFilter(function ($object) {
484+
return new f008\A('baz');
485+
}), new TypeMatcher(f008\A::class));
486+
$deepCopy->prependTypeFilter(new ReplaceFilter(function ($object) {
487+
return new f008\A('foo');
488+
}), new TypeMatcher(f008\A::class));
489+
490+
$copy = $deepCopy->copy($object);
491+
$this->assertEquals('foo',$copy->getFoo());
492+
}
493+
478494
/**
479495
* @ticket https://github.com/myclabs/DeepCopy/issues/143
480496
* @requires PHP 7.4

0 commit comments

Comments
 (0)