forked from WordPress/wordpress-develop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathremoveFilter.php
More file actions
110 lines (87 loc) · 3.54 KB
/
removeFilter.php
File metadata and controls
110 lines (87 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
/**
* Test the remove_filter method of WP_Hook
*
* @group hooks
* @covers WP_Hook::remove_filter
*/
class Tests_Hooks_RemoveFilter extends WP_UnitTestCase {
public function test_remove_filter_with_function() {
$callback = '__return_null';
$hook = new WP_Hook();
$hook_name = __FUNCTION__;
$priority = 1;
$accepted_args = 2;
$hook->add_filter( $hook_name, $callback, $priority, $accepted_args );
$hook->remove_filter( $hook_name, $callback, $priority );
$this->check_priority_non_existent( $hook, $priority );
$this->assertArrayNotHasKey( $priority, $hook->callbacks );
}
public function test_remove_filter_with_object() {
$a = new MockAction();
$callback = array( $a, 'action' );
$hook = new WP_Hook();
$hook_name = __FUNCTION__;
$priority = 1;
$accepted_args = 2;
$hook->add_filter( $hook_name, $callback, $priority, $accepted_args );
$hook->remove_filter( $hook_name, $callback, $priority );
$this->check_priority_non_existent( $hook, $priority );
$this->assertArrayNotHasKey( $priority, $hook->callbacks );
}
public function test_remove_filter_with_static_method() {
$callback = array( 'MockAction', 'action' );
$hook = new WP_Hook();
$hook_name = __FUNCTION__;
$priority = 1;
$accepted_args = 2;
$hook->add_filter( $hook_name, $callback, $priority, $accepted_args );
$hook->remove_filter( $hook_name, $callback, $priority );
$this->check_priority_non_existent( $hook, $priority );
$this->assertArrayNotHasKey( $priority, $hook->callbacks );
}
public function test_remove_filters_with_another_at_same_priority() {
$callback_one = '__return_null';
$callback_two = '__return_false';
$hook = new WP_Hook();
$hook_name = __FUNCTION__;
$priority = 1;
$accepted_args = 2;
$hook->add_filter( $hook_name, $callback_one, $priority, $accepted_args );
$hook->add_filter( $hook_name, $callback_two, $priority, $accepted_args );
$hook->remove_filter( $hook_name, $callback_one, $priority );
$this->assertCount( 1, $hook->callbacks[ $priority ] );
$this->check_priority_exists( $hook, $priority, 'Has priority of 2' );
}
public function test_remove_filter_with_another_at_different_priority() {
$callback_one = '__return_null';
$callback_two = '__return_false';
$hook = new WP_Hook();
$hook_name = __FUNCTION__;
$priority = 1;
$accepted_args = 2;
$hook->add_filter( $hook_name, $callback_one, $priority, $accepted_args );
$hook->add_filter( $hook_name, $callback_two, $priority + 1, $accepted_args );
$hook->remove_filter( $hook_name, $callback_one, $priority );
$this->check_priority_non_existent( $hook, $priority );
$this->assertArrayNotHasKey( $priority, $hook->callbacks );
$this->assertCount( 1, $hook->callbacks[ $priority + 1 ] );
$this->check_priority_exists( $hook, $priority + 1, 'Should priority of 3' );
}
protected function check_priority_non_existent( $hook, $priority ) {
$priorities = $this->get_priorities( $hook );
$this->assertNotContains( $priority, $priorities );
}
protected function check_priority_exists( $hook, $priority ) {
$priorities = $this->get_priorities( $hook );
$this->assertContains( $priority, $priorities );
}
protected function get_priorities( $hook ) {
$reflection = new ReflectionClass( $hook );
$reflection_property = $reflection->getProperty( 'priorities' );
if ( PHP_VERSION_ID < 80100 ) {
$reflection_property->setAccessible( true );
}
return $reflection_property->getValue( $hook );
}
}