Skip to content

Commit 6eea081

Browse files
committed
New remove() method and some unit tests for the WP_Error class.
props stephenharris. fixes #28092. git-svn-id: https://develop.svn.wordpress.org/trunk@29854 602fd350-edb4-49c9-b593-d223f7449a82
1 parent eb39c8f commit 6eea081

2 files changed

Lines changed: 78 additions & 0 deletions

File tree

src/wp-includes/class-wp-error.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,21 @@ public function add_data($data, $code = '') {
242242

243243
$this->error_data[$code] = $data;
244244
}
245+
246+
/**
247+
* Removes the specified error.
248+
*
249+
* This function removes all error messages associated with the specified
250+
* error code, along with any error data for that code.
251+
*
252+
* @since 4.1.0
253+
*
254+
* @param string|int $code Error code.
255+
*/
256+
public function remove( $code ) {
257+
unset( $this->errors[ $code ] );
258+
unset( $this->error_data[ $code ] );
259+
}
245260
}
246261

247262
/**
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
/**
3+
* Tests for error handling and the WP_Error class.
4+
*
5+
* @group general
6+
*/
7+
class Tests_General_Errors extends WP_UnitTestCase {
8+
9+
function test_create_error() {
10+
$error = new WP_Error( 'foo', 'message', 'data' );
11+
12+
$this->assertTrue( is_wp_error( $error ) );
13+
$this->assertEquals( 'foo', $error->get_error_code() );
14+
$this->assertEquals( 'message', $error->get_error_message() );
15+
$this->assertEquals( 'data', $error->get_error_data() );
16+
}
17+
18+
function test_add_error() {
19+
$error = new WP_Error();
20+
$error->add( 'foo', 'message', 'data' );
21+
22+
$this->assertTrue( is_wp_error( $error ) );
23+
$this->assertEquals( 'foo', $error->get_error_code() );
24+
$this->assertEquals( 'message', $error->get_error_message() );
25+
$this->assertEquals( 'data', $error->get_error_data() );
26+
}
27+
28+
function test_multiple_errors() {
29+
$error = new WP_Error();
30+
$error->add( 'foo', 'foo message', 'foo data' );
31+
$error->add( 'bar', 'bar message', 'bar data' );
32+
33+
$this->assertTrue( is_wp_error( $error ) );
34+
$this->assertEquals( 'foo', $error->get_error_code() );
35+
$this->assertEquals( 'foo message', $error->get_error_message() );
36+
$this->assertEquals( 'foo data', $error->get_error_data() );
37+
38+
$this->assertEquals( array( 'foo', 'bar' ), $error->get_error_codes() );
39+
$this->assertEquals( array( 'foo message', 'bar message' ), $error->get_error_messages() );
40+
$this->assertEquals( 'foo data', $error->get_error_data( 'foo' ) );
41+
$this->assertEquals( 'bar data', $error->get_error_data( 'bar' ) );
42+
}
43+
44+
/**
45+
* @ticket 28092
46+
*/
47+
function test_remove_error() {
48+
$error = new WP_Error();
49+
$error->add( 'foo', 'This is the first error message', 'some error data' );
50+
$error->add( 'foo', 'This is the second error message' );
51+
$error->add( 'bar', 'This is another error' );
52+
53+
$error->remove( 'foo' );
54+
55+
// Check the error has been removed.
56+
$this->assertEmpty( $error->get_error_data( 'foo' ) );
57+
$this->assertEmpty( $error->get_error_messages( 'foo' ) );
58+
59+
// The 'bar' error should now be the 'first' error retrieved.
60+
$this->assertEquals( 'bar', $error->get_error_code() );
61+
$this->assertEmpty( $error->get_error_data() );
62+
}
63+
}

0 commit comments

Comments
 (0)