WordPress.org

Make WordPress Core

Ticket #38777: 38777.diff

File 38777.diff, 3.2 KB (added by dlh, 15 months ago)
  • src/wp-includes/class-wp-error.php

    diff --git src/wp-includes/class-wp-error.php src/wp-includes/class-wp-error.php
    index 3de8ae7dae..ea04439ccb 100644
    class WP_Error { 
    223223                unset( $this->errors[ $code ] );
    224224                unset( $this->error_data[ $code ] );
    225225        }
     226
     227        /**
     228         * Merge the errors in another error object into this one.
     229         *
     230         * @param WP_Error $error Error object to merge.
     231         */
     232        public function merge( WP_Error $error ) {
     233                static::copy_errors( $error, $this );
     234        }
     235
     236        /**
     237         * Export the errors in this object into another one.
     238         *
     239         * @param WP_Error $error Error object to export into.
     240         */
     241        public function export( WP_Error $error ) {
     242                static::copy_errors( $this, $error );
     243        }
     244
     245        /**
     246         * Copy errors from one WP_Error to another.
     247         *
     248         * @param WP_Error $from From.
     249         * @param WP_Error $to   To.
     250         */
     251        protected static function copy_errors( WP_Error $from, WP_Error $to ) {
     252                foreach ( $from->get_error_codes() as $code ) {
     253                        foreach ( $from->get_error_messages( $code ) as $error_message ) {
     254                                $to->add( $code, $error_message );
     255                        }
     256
     257                        $data = $from->get_error_data( $code );
     258
     259                        if ( $data ) {
     260                                $to->add_data( $data, $code );
     261                        }
     262                }
     263        }
    226264}
  • tests/phpunit/tests/general/wpError.php

    diff --git tests/phpunit/tests/general/wpError.php tests/phpunit/tests/general/wpError.php
    index 3fccc470c8..1b88563c9c 100644
    class Tests_WP_Error extends WP_UnitTestCase { 
    718718                $this->assertEmpty( $this->wp_error->error_data );
    719719        }
    720720
     721        /**
     722         * @covers ::merge()
     723         */
     724        public function test_merge_should_copy_other_error_into_instance() {
     725                $this->wp_error->add( 'code1', 'message1', 'data1' );
     726
     727                $other = new \WP_Error( 'code1', 'message2', 'data2' );
     728                $other->add( 'code2', 'message3' );
     729                $this->wp_error->merge( $other );
     730
     731                $this->assertSame( array( 'message1', 'message2' ), $this->wp_error->get_error_messages( 'code1' ) );
     732                $this->assertSame( 'data2', $this->wp_error->get_error_data( 'code1' ) );
     733                $this->assertSame( 'message3', $this->wp_error->get_error_message( 'code2' ) );
     734        }
     735
     736        /**
     737         * @covers ::merge()
     738         */
     739        public function test_merge_with_no_errors_should_not_add_to_instance() {
     740                $other = new \WP_Error();
     741
     742                $this->wp_error->merge( $other );
     743
     744                $this->assertFalse( $this->wp_error->has_errors() );
     745        }
     746
     747        /**
     748         * @covers ::export()
     749         */
     750        public function test_export_should_copy_instance_into_other_error() {
     751                $other = new \WP_Error();
     752                $other->add( 'code1', 'message1', 'data1' );
     753
     754                $this->wp_error->add( 'code1', 'message2', 'data2' );
     755                $this->wp_error->add( 'code2', 'message3' );
     756
     757                $this->wp_error->export( $other );
     758
     759                $this->assertSame( array( 'message1', 'message2' ), $other->get_error_messages( 'code1' ) );
     760                $this->assertSame( 'data2', $other->get_error_data( 'code1' ) );
     761                $this->assertSame( 'message3', $other->get_error_message( 'code2' ) );
     762        }
     763
     764        /**
     765         * @covers ::export()
     766         */
     767        public function test_export_with_no_errors_should_not_add_to_other_error() {
     768                $other = new \WP_Error();
     769
     770                $this->wp_error->export( $other );
     771
     772                $this->assertFalse( $other->has_errors() );
     773        }
    721774}