Make WordPress Core

Ticket #25435: 25435.6.diff

File 25435.6.diff, 6.0 KB (added by DrewAPicture, 8 years ago)

Translator comments + tests

  • src/wp-includes/shortcodes.php

     
    228228}
    229229
    230230/**
     231 * Executes a single shortcode with given attributes.
     232 *
     233 * This function is not meant for use with nested shortcodes. For that, use do_shortcode().
     234 *
     235 * @since 4.4.0
     236 *
     237 * @global array $shortcode_tags Shortcode tags.
     238 *
     239 * @param string $tag     Name of a registered shortcode.
     240 * @param array  $atts    Optional. Attributes to pass to the shortcode hook. Default empty array.
     241 * @param string $content Optional. Content to use inside the shortcode tag. Default null (self-closing).
     242 * @return string|WP_Error Shortcode content, or WP_Error instance if invalid.
     243 */
     244function do_single_shortcode( $tag, $atts = array(), $content = null ) {
     245        global $shortcode_tags;
     246
     247        if ( empty( $shortcode_tags[ $tag ] ) ) {
     248                /* translators: 1: shortcode tag name */
     249                return new WP_Error( 'shortcode_invalid_tag', sprintf( __( 'Shortcode %s is not registered' ), $tag ), $tag );
     250        }
     251
     252        $callback = $shortcode_tags[ $tag ];
     253
     254        if ( ! is_callable( $callback ) ) {
     255                /* translators: 1: shortcode tag name */
     256                return new WP_Error( 'shortcode_invalid_callback', sprintf( __( 'Shortcode %s does not have a valid registered callback.' ), $tag ), $tag );
     257        }
     258
     259        return call_user_func( $callback, $atts, $content, $tag );
     260}
     261
     262/**
    231263 * Retrieve the shortcode regular expression for searching.
    232264 *
    233265 * The regular expression combines the shortcode tags in the regular expression
  • tests/phpunit/tests/shortcode.php

     
    44 */
    55class Tests_Shortcode extends WP_UnitTestCase {
    66
    7         protected $shortcodes = array( 'test-shortcode-tag', 'footag', 'bartag', 'baztag', 'dumptag', 'hyphen', 'hyphen-foo', 'hyphen-foo-bar', 'url' );
     7        protected $shortcodes = array( 'test-shortcode-tag', 'footag', 'bartag', 'baztag', 'dumptag', 'dumptag-and-content', 'hyphen', 'hyphen-foo', 'hyphen-foo-bar', 'url' );
    88
    99        function setUp() {
    1010                parent::setUp();
     
    6161                return $out;
    6262        }
    6363
     64        function _shortcode_dumptag_and_content( $atts, $content = '' ) {
     65                $out = 'content = [dumptag-and-content';
     66
     67                if ( ! empty( $atts ) ) {
     68                        foreach ( $atts as $k => $v ) {
     69                                $out .= " $k='$v'";
     70                        }
     71                }
     72                $out .= "]";
     73
     74                if ( ! empty( $content ) ) {
     75                        $out .= "{$content}[/dumptag-and-content]";
     76                }
     77
     78                return $out;
     79        }
     80
    6481        function _shortcode_hyphen() {
    6582                return __FUNCTION__;
    6683        }
     
    646663
    647664        }
    648665
     666        /**
     667         * @ticket 25435
     668         */
     669        public function test_do_single_shortcode_no_atts_self_closing_test_args_only() {
     670                do_single_shortcode( 'test-shortcode-tag' );
     671
     672                $this->assertSame( 'test-shortcode-tag', $this->tagname );
     673                $this->assertSame( array(), $this->atts );
     674                $this->assertSame( null, $this->content );
     675        }
     676
     677        /**
     678         * @ticket 25435
     679         */
     680        public function test_do_single_shortcode_no_atts_self_closing_output() {
     681                $out = do_single_shortcode( 'dumptag-and-content' );
     682                $this->assertSame( 'content = [dumptag-and-content]', $out );
     683        }
     684
     685        /**
     686         * @ticket 25435
     687         */
     688        public function test_do_single_shortcode_no_atts_with_content_test_args_only() {
     689                do_single_shortcode( 'test-shortcode-tag', array(), 'Foo Content' );
     690
     691                $this->assertSame( 'test-shortcode-tag', $this->tagname );
     692                $this->assertSame( array(), $this->atts );
     693                $this->assertSame( 'Foo Content', $this->content );
     694        }
     695
     696        /**
     697         * @ticket 25435
     698         */
     699        public function test_do_single_shortcode_no_atts_with_content_output() {
     700                $out = do_single_shortcode( 'dumptag-and-content', array(), 'Foo Content' );
     701
     702                $this->assertSame( 'content = [dumptag-and-content]Foo Content[/dumptag-and-content]', $out );
     703        }
     704
     705        /**
     706         * @ticket 25435
     707         */
     708        public function test_do_single_shortcode_with_atts_self_closing_args_only() {
     709                $atts = array( 'foo' => 'bar', 'baz' => 'bot' );
     710
     711                do_single_shortcode( 'test-shortcode-tag', $atts );
     712
     713                $this->assertSame( 'test-shortcode-tag', $this->tagname );
     714                $this->assertSame( $atts, $this->atts );
     715                $this->assertSame( null, $this->content );
     716        }
     717
     718        /**
     719         * @ticket 25435
     720         */
     721        public function test_do_single_shortcode_with_atts_self_closing_ouput() {
     722                $atts = array( 'foo' => 'bar', 'baz' => 'bot' );
     723
     724                $out = do_single_shortcode( 'dumptag-and-content', $atts );
     725
     726                $this->assertSame( "content = [dumptag-and-content foo='bar' baz='bot']", $out );
     727        }
     728
     729        /**
     730         * @ticket 25435
     731         */
     732        public function test_do_single_shortcode_with_atts_with_content_args_only() {
     733                $atts = array( 'foo' => 'bar', 'baz' => 'bot' );
     734
     735                do_single_shortcode( 'test-shortcode-tag', $atts, 'Foo Content' );
     736
     737                $this->assertSame( 'test-shortcode-tag', $this->tagname );
     738                $this->assertEqualSets( $atts, $this->atts );
     739                $this->assertSame( 'Foo Content', $this->content );
     740        }
     741
     742        /**
     743         * @ticket 25435
     744         */
     745        public function test_do_single_shortcode_with_atts_with_content_output() {
     746                $atts = array( 'foo' => 'bar', 'baz' => 'bot' );
     747
     748                $out = do_single_shortcode( 'dumptag-and-content', $atts, 'Foo Content' );
     749
     750                $this->assertSame( "content = [dumptag-and-content foo='bar' baz='bot']Foo Content[/dumptag-and-content]", $out );
     751        }
     752
     753        /**
     754         * @ticket 25435
     755         */
     756        public function test_do_single_shortcode_expect_WP_Error_for_invalid_tag() {
     757                $out = do_single_shortcode( 'not-a-real-tag' );
     758
     759                $this->assertWPError( $out );
     760                $this->assertSame( 'shortcode_invalid_tag', $out->get_error_code() );
     761        }
     762
     763        /**
     764         * @ticket 25435
     765         */
     766        public function test_do_single_shortcode_expect_WP_Error_for_invalid_callback() {
     767                // Add to the array so it'll be unset on tearDown().
     768                $this->shortcodes[] = 'real-tag-fake-callback';
     769
     770                add_shortcode( 'real-tag-fake-callback', 'fake_callback' );
     771                $out = do_single_shortcode( 'real-tag-fake-callback' );
     772
     773                $this->assertWPError( $out );
     774                $this->assertSame( 'shortcode_invalid_callback', $out->get_error_code() );
     775        }
    649776}