From 21e0370e5c2b08ff98bfd93cd92ad73865e9856e Mon Sep 17 00:00:00 2001 From: Scott Taylor Date: Thu, 15 May 2014 00:43:40 +0000 Subject: [PATCH] Eliminate use of `extract()` in `wp_link_pages()`. Adds unit tests to a new file: `tests/post/template.php`. There were previously no unit tests for `wp_link_pages()`. See #22400. git-svn-id: https://develop.svn.wordpress.org/trunk@28398 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post-template.php | 57 ++++++++++---------- tests/phpunit/tests/post/template.php | 75 +++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 29 deletions(-) create mode 100644 tests/phpunit/tests/post/template.php diff --git a/src/wp-includes/post-template.php b/src/wp-includes/post-template.php index de21ddde9c..94e898ea7c 100644 --- a/src/wp-includes/post-template.php +++ b/src/wp-includes/post-template.php @@ -739,29 +739,28 @@ function wp_link_pages( $args = '' ) { 'echo' => 1 ); - $r = wp_parse_args( $args, $defaults ); + $params = wp_parse_args( $args, $defaults ); /** * Filter the arguments used in retrieving page links for paginated posts. * * @since 3.0.0 * - * @param array $r An array of arguments for page links for paginated posts. + * @param array $params An array of arguments for page links for paginated posts. */ - $r = apply_filters( 'wp_link_pages_args', $r ); - extract( $r, EXTR_SKIP ); + $r = apply_filters( 'wp_link_pages_args', $params ); global $page, $numpages, $multipage, $more; $output = ''; if ( $multipage ) { - if ( 'number' == $next_or_number ) { - $output .= $before; + if ( 'number' == $r['next_or_number'] ) { + $output .= $r['before']; for ( $i = 1; $i <= $numpages; $i++ ) { - $link = $link_before . str_replace( '%', $i, $pagelink ) . $link_after; - if ( $i != $page || ! $more && 1 == $page ) + $link = $r['link_before'] . str_replace( '%', $i, $r['pagelink'] ) . $r['link_after']; + if ( $i != $page || ! $more && 1 == $page ) { $link = _wp_link_page( $i ) . $link . ''; - + } /** * Filter the HTML output of individual page number links. * @@ -771,28 +770,28 @@ function wp_link_pages( $args = '' ) { * @param int $i Page number for paginated posts' page links. */ $link = apply_filters( 'wp_link_pages_link', $link, $i ); - $output .= $separator . $link; + $output .= $r['separator'] . $link; } - $output .= $after; + $output .= $r['after']; } elseif ( $more ) { - $output .= $before; - $i = $page - 1; - if ( $i ) { - $link = _wp_link_page( $i ) . $link_before . $previouspagelink . $link_after . ''; + $output .= $r['before']; + $prev = $page - 1; + if ( $prev ) { + $link = _wp_link_page( $prev ) . $r['link_before'] . $r['previouspagelink'] . $r['link_after'] . ''; /** This filter is documented in wp-includes/post-template.php */ - $link = apply_filters( 'wp_link_pages_link', $link, $i ); - $output .= $separator . $link; + $link = apply_filters( 'wp_link_pages_link', $link, $prev ); + $output .= $r['separator'] . $link; } - $i = $page + 1; - if ( $i <= $numpages ) { - $link = _wp_link_page( $i ) . $link_before . $nextpagelink . $link_after . ''; + $next = $page + 1; + if ( $next <= $numpages ) { + $link = _wp_link_page( $next ) . $r['link_before'] . $r['nextpagelink'] . $r['link_after'] . ''; /** This filter is documented in wp-includes/post-template.php */ - $link = apply_filters( 'wp_link_pages_link', $link, $i ); - $output .= $separator . $link; + $link = apply_filters( 'wp_link_pages_link', $link, $next ); + $output .= $r['separator'] . $link; } - $output .= $after; + $output .= $r['after']; } } @@ -801,15 +800,15 @@ function wp_link_pages( $args = '' ) { * * @since 3.6.0 * - * @param string $output HTML output of paginated posts' page links. + * @param string $html HTML output of paginated posts' page links. * @param array $args An array of arguments. */ - $output = apply_filters( 'wp_link_pages', $output, $args ); + $html = apply_filters( 'wp_link_pages', $output, $args ); - if ( $echo ) - echo $output; - - return $output; + if ( $r['echo'] ) { + echo $html; + } + return $html; } /** diff --git a/tests/phpunit/tests/post/template.php b/tests/phpunit/tests/post/template.php new file mode 100644 index 0000000000..0ab5f02c9b --- /dev/null +++ b/tests/phpunit/tests/post/template.php @@ -0,0 +1,75 @@ +', $contents ); + $post_id = $this->factory->post->create( array( 'post_content' => $content ) ); + + $this->go_to( '?p=' . $post_id ); + + setup_postdata( get_post( $post_id ) ); + + $permalink = sprintf( '', get_permalink() ); + $page2 = _wp_link_page( 2 ); + $page3 = _wp_link_page( 3 ); + + $expected = "

Pages: 1 {$page2}2 {$page3}3

"; + $output = wp_link_pages( array( 'echo' => 0 ) ); + + $this->assertEquals( $expected, $output ); + + $before_after = " 1 {$page2}2 {$page3}3"; + $output = wp_link_pages( array( 'echo' => 0, 'before' => '', 'after' => '' ) ); + + $this->assertEquals( $before_after, $output ); + + $separator = "1{$page2}2{$page3}3"; + $output = wp_link_pages( array( 'echo' => 0, 'before' => '', 'after' => '', 'separator' => '' ) ); + + $this->assertEquals( $separator, $output ); + + $link = "1{$page2}2{$page3}3"; + $output = wp_link_pages( array( 'echo' => 0, 'before' => '', 'after' => '', 'separator' => '', + 'link_before' => '', 'link_after' => '' + ) ); + + $this->assertEquals( $link, $output ); + + $next = "{$page2}Next page"; + $output = wp_link_pages( array( 'echo' => 0, 'before' => '', 'after' => '', 'separator' => '', + 'link_before' => '', 'link_after' => '', 'next_or_number' => 'next' + ) ); + + $this->assertEquals( $next, $output ); + + $GLOBALS['page'] = 2; + $next_prev = "{$permalink}Previous page{$page3}Next page"; + $output = wp_link_pages( array( 'echo' => 0, 'before' => '', 'after' => '', 'separator' => '', + 'link_before' => '', 'link_after' => '', 'next_or_number' => 'next' + ) ); + + $this->assertEquals( $next_prev, $output ); + + $next_prev_link = "{$permalink}Woo page{$page3}Hoo page"; + $output = wp_link_pages( array( 'echo' => 0, 'before' => '', 'after' => '', 'separator' => '', + 'next_or_number' => 'next', 'nextpagelink' => 'Hoo page', 'previouspagelink' => 'Woo page' + ) ); + + $this->assertEquals( $next_prev_link, $output ); + + $GLOBALS['page'] = 1; + $separator = "

Pages: | 1 | {$page2}2 | {$page3}3

"; + $output = wp_link_pages( array( 'echo' => 0, 'separator' => ' | ' ) ); + + $this->assertEquals( $separator, $output ); + + $pagelink = " | Page 1 | {$page2}Page 2 | {$page3}Page 3"; + $output = wp_link_pages( array( 'echo' => 0, 'separator' => ' | ', 'before' => '', 'after' => '', + 'pagelink' => 'Page %' + ) ); + + $this->assertEquals( $pagelink, $output ); + } +} \ No newline at end of file