From 6eea081457a2a22dd4cc0eec4d63eea02bfb7d9e Mon Sep 17 00:00:00 2001 From: Konstantin Kovshenin Date: Wed, 8 Oct 2014 07:11:09 +0000 Subject: [PATCH] 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 --- src/wp-includes/class-wp-error.php | 15 ++++++ tests/phpunit/tests/general/errors.php | 63 ++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 tests/phpunit/tests/general/errors.php diff --git a/src/wp-includes/class-wp-error.php b/src/wp-includes/class-wp-error.php index 971a4c7a95..83488c3ef5 100644 --- a/src/wp-includes/class-wp-error.php +++ b/src/wp-includes/class-wp-error.php @@ -242,6 +242,21 @@ class WP_Error { $this->error_data[$code] = $data; } + + /** + * Removes the specified error. + * + * This function removes all error messages associated with the specified + * error code, along with any error data for that code. + * + * @since 4.1.0 + * + * @param string|int $code Error code. + */ + public function remove( $code ) { + unset( $this->errors[ $code ] ); + unset( $this->error_data[ $code ] ); + } } /** diff --git a/tests/phpunit/tests/general/errors.php b/tests/phpunit/tests/general/errors.php new file mode 100644 index 0000000000..7232b368a1 --- /dev/null +++ b/tests/phpunit/tests/general/errors.php @@ -0,0 +1,63 @@ +assertTrue( is_wp_error( $error ) ); + $this->assertEquals( 'foo', $error->get_error_code() ); + $this->assertEquals( 'message', $error->get_error_message() ); + $this->assertEquals( 'data', $error->get_error_data() ); + } + + function test_add_error() { + $error = new WP_Error(); + $error->add( 'foo', 'message', 'data' ); + + $this->assertTrue( is_wp_error( $error ) ); + $this->assertEquals( 'foo', $error->get_error_code() ); + $this->assertEquals( 'message', $error->get_error_message() ); + $this->assertEquals( 'data', $error->get_error_data() ); + } + + function test_multiple_errors() { + $error = new WP_Error(); + $error->add( 'foo', 'foo message', 'foo data' ); + $error->add( 'bar', 'bar message', 'bar data' ); + + $this->assertTrue( is_wp_error( $error ) ); + $this->assertEquals( 'foo', $error->get_error_code() ); + $this->assertEquals( 'foo message', $error->get_error_message() ); + $this->assertEquals( 'foo data', $error->get_error_data() ); + + $this->assertEquals( array( 'foo', 'bar' ), $error->get_error_codes() ); + $this->assertEquals( array( 'foo message', 'bar message' ), $error->get_error_messages() ); + $this->assertEquals( 'foo data', $error->get_error_data( 'foo' ) ); + $this->assertEquals( 'bar data', $error->get_error_data( 'bar' ) ); + } + + /** + * @ticket 28092 + */ + function test_remove_error() { + $error = new WP_Error(); + $error->add( 'foo', 'This is the first error message', 'some error data' ); + $error->add( 'foo', 'This is the second error message' ); + $error->add( 'bar', 'This is another error' ); + + $error->remove( 'foo' ); + + // Check the error has been removed. + $this->assertEmpty( $error->get_error_data( 'foo' ) ); + $this->assertEmpty( $error->get_error_messages( 'foo' ) ); + + // The 'bar' error should now be the 'first' error retrieved. + $this->assertEquals( 'bar', $error->get_error_code() ); + $this->assertEmpty( $error->get_error_data() ); + } +}