123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- <?php
- /**
- * @group taxonomy
- */
- class Tests_WP_Generate_Tag_Cloud extends WP_UnitTestCase {
- protected $terms = array();
- /**
- * Testing when passed $tags array is empty
- *
- * @dataProvider empty_tags_data_provider
- *
- * @param $expected Expected output from `wp_generate_tag_cloud()`.
- * @param $args Options for `wp_generate_tag_cloud()`.
- */
- public function test_empty_tags_passed( $expected, $args ) {
- $empty_tags = array();
- $this->assertSame( $expected, wp_generate_tag_cloud( $empty_tags, $args ) );
- }
- /**
- * Testing when no tags are found
- *
- * @dataProvider empty_tags_data_provider
- *
- * @param $expected Expected output from `wp_generate_tag_cloud()`.
- * @param $args Options for `wp_generate_tag_cloud()`.
- */
- function test_empty_tags_list_returned( $expected, $args ) {
- $term_ids = self::factory()->term->create_many( 4, array( 'taxonomy' => 'post_tag' ) );
- $this->terms = array();
- foreach ( $term_ids as $term_id ) {
- $this->terms[] = get_term( $term_id, 'post_tag' );
- }
- $tags = $this->retrieve_terms( array( 'number' => 4 ) );
- $this->assertSame( $expected, wp_generate_tag_cloud( $tags, $args ) );
- }
- /**
- * Provider for test when tags are empty.
- *
- * @return array
- */
- function empty_tags_data_provider() {
- return array(
- // When 'format' => 'array', we should be getting an empty array back.
- array(
- array(),
- array( 'format' => 'array' ),
- ),
- // List format returns an empty string.
- array(
- '',
- array( 'format' => 'list' ),
- ),
- // $args can be an array or ''. Either should return an empty string.
- array(
- '',
- array(),
- ),
- array(
- '',
- '',
- ),
- );
- }
- function test_hide_empty_false() {
- $term_id = self::factory()->tag->create();
- $term = get_term( $term_id, 'post_tag' );
- $tags = $this->retrieve_terms(
- array(
- 'number' => 1,
- 'hide_empty' => false,
- )
- );
- $found = wp_generate_tag_cloud(
- $tags,
- array(
- 'hide_empty' => false,
- )
- );
- $this->assertContains( '>' . $tags[0]->name . '<', $found );
- }
- function test_hide_empty_false_format_array() {
- $term_id = self::factory()->tag->create();
- $term = get_term( $term_id, 'post_tag' );
- $tags = $this->retrieve_terms(
- array(
- 'number' => 1,
- 'hide_empty' => false,
- 'format' => 'array',
- )
- );
- $found = wp_generate_tag_cloud(
- $tags,
- array(
- 'hide_empty' => false,
- 'format' => 'array',
- )
- );
- $this->assertInternalType( 'array', $found );
- $this->assertContains( '>' . $tags[0]->name . '<', $found[0] );
- }
- function test_hide_empty_false_format_list() {
- $term_id = self::factory()->tag->create();
- $term = get_term( $term_id, 'post_tag' );
- $tags = $this->retrieve_terms(
- array(
- 'number' => 1,
- 'hide_empty' => false,
- )
- );
- $found = wp_generate_tag_cloud(
- $tags,
- array(
- 'hide_empty' => false,
- 'format' => 'list',
- )
- );
- $this->assertRegExp( "|^<ul class='wp-tag-cloud' role='list'>|", $found );
- $this->assertRegExp( "|</ul>\n|", $found );
- $this->assertContains( '>' . $tags[0]->name . '<', $found );
- }
- function test_hide_empty_false_multi() {
- $term_ids = self::factory()->tag->create_many( 4 );
- $terms = array();
- foreach ( $term_ids as $term_id ) {
- $terms[] = get_term( $term_id, 'post_tag' );
- }
- $tags = $this->retrieve_terms(
- array(
- 'number' => 4,
- 'order' => 'id',
- 'hide_empty' => false,
- )
- );
- $found = wp_generate_tag_cloud(
- $tags,
- array(
- 'hide_empty' => false,
- )
- );
- foreach ( $tags as $tag ) {
- $this->assertContains( '>' . $tag->name . '<', $found );
- }
- }
- function test_hide_empty_false_multi_format_list() {
- $term_ids = self::factory()->tag->create_many( 4 );
- $terms = array();
- foreach ( $term_ids as $term_id ) {
- $terms[] = get_term( $term_id, 'post_tag' );
- }
- $tags = $this->retrieve_terms(
- array(
- 'number' => 4,
- 'orderby' => 'id',
- 'hide_empty' => false,
- )
- );
- $found = wp_generate_tag_cloud(
- $tags,
- array(
- 'hide_empty' => false,
- 'format' => 'list',
- )
- );
- $this->assertRegExp( "|^<ul class='wp-tag-cloud' role='list'>|", $found );
- $this->assertRegExp( "|</ul>\n|", $found );
- foreach ( $tags as $tag ) {
- $this->assertContains( '>' . $tag->name . '<', $found );
- }
- }
- public function test_topic_count_text() {
- register_taxonomy( 'wptests_tax', 'post' );
- $term_ids = self::factory()->term->create_many( 2, array( 'taxonomy' => 'wptests_tax' ) );
- $this->terms = array();
- foreach ( $term_ids as $term_id ) {
- $this->terms[] = get_term( $term_id, 'post_tag' );
- }
- $posts = self::factory()->post->create_many( 2 );
- wp_set_post_terms( $posts[0], $term_ids, 'wptests_tax' );
- wp_set_post_terms( $posts[1], array( $term_ids[1] ), 'wptests_tax' );
- $term_objects = $this->retrieve_terms(
- array(
- 'include' => $term_ids,
- ),
- 'wptests_tax'
- );
- $actual = wp_generate_tag_cloud(
- $term_objects,
- array(
- 'format' => 'array',
- 'topic_count_text' => array(
- 'singular' => 'Term has %s post',
- 'plural' => 'Term has %s posts',
- 'domain' => 'foo',
- 'context' => 'bar',
- ),
- )
- );
- $this->assertContains( 'aria-label="' . $term_objects[0]->name . ' (Term has 1 post)"', $actual[0] );
- $this->assertContains( 'aria-label="' . $term_objects[1]->name . ' (Term has 2 posts)"', $actual[1] );
- }
- public function test_topic_count_text_callback() {
- register_taxonomy( 'wptests_tax', 'post' );
- $term_ids = self::factory()->term->create_many( 2, array( 'taxonomy' => 'wptests_tax' ) );
- $this->terms = array();
- foreach ( $term_ids as $term_id ) {
- $this->terms[] = get_term( $term_id, 'post_tag' );
- }
- $posts = self::factory()->post->create_many( 2 );
- wp_set_post_terms( $posts[0], $term_ids, 'wptests_tax' );
- wp_set_post_terms( $posts[1], array( $term_ids[1] ), 'wptests_tax' );
- $term_objects = $this->retrieve_terms(
- array(
- 'include' => $term_ids,
- ),
- 'wptests_tax'
- );
- $actual = wp_generate_tag_cloud(
- $term_objects,
- array(
- 'format' => 'array',
- 'topic_count_text_callback' => array( $this, 'topic_count_text_callback' ),
- )
- );
- $this->assertContains( 'aria-label="' . $term_objects[0]->name . ' (1 foo)"', $actual[0] );
- $this->assertContains( 'aria-label="' . $term_objects[1]->name . ' (2 foo)"', $actual[1] );
- }
- /**
- * @ticket 5172
- */
- public function test_should_include_tag_link_position_class() {
- register_taxonomy( 'wptests_tax', 'post' );
- $term_ids = self::factory()->term->create_many( 3, array( 'taxonomy' => 'wptests_tax' ) );
- $p = self::factory()->post->create();
- wp_set_post_terms( $p, $term_ids, 'wptests_tax' );
- $term_objects = get_terms(
- 'wptests_tax',
- array(
- 'include' => $term_ids,
- )
- );
- $cloud = wp_generate_tag_cloud( $term_objects );
- preg_match_all( '|tag\-link\-position-([0-9]+)|', $cloud, $matches );
- $this->assertSame( array( 1, 2, 3 ), array_map( 'intval', $matches[1] ) );
- }
- /**
- * Helper method retrieve the created terms.
- *
- * @uses get_terms
- *
- * @param array $get_terms_args Options passed to get_terms()
- *
- * @return array
- */
- protected function retrieve_terms( $get_terms_args, $taxonomy = 'post_tag' ) {
- $terms = get_terms( array( $taxonomy ), $get_terms_args );
- $tags = array();
- foreach ( $terms as $term ) {
- // Add the link.
- $term->link = get_term_link( $term );
- $tags[] = $term;
- }
- return $tags;
- }
- public function topic_count_text_callback( $real_count, $tag, $args ) {
- return sprintf( '%s foo', $real_count );
- }
- }
|