category->create( array( 'name' => 'test_category', ) ); self::$author_id = $factory->user->create( array( 'role' => 'author', 'user_login' => 'test_author', 'description' => 'test_author', ) ); self::$post_id = $factory->post->create( array( 'post_author' => self::$author_id, 'post_status' => 'publish', 'post_title' => 'test_title', 'post_type' => 'post', 'post_date' => '2015-09-22 18:52:17', 'category' => self::$category_id, ) ); } function setUp() { parent::setUp(); add_action( 'after_setup_theme', array( $this, '_add_title_tag_support' ) ); $this->blog_name = get_option( 'blogname' ); setup_postdata( get_post( self::$post_id ) ); } function tearDown() { wp_reset_postdata(); parent::tearDown(); } function _add_title_tag_support() { add_theme_support( 'title-tag' ); } function test__wp_render_title_tag() { $this->go_to( '/' ); $this->expectOutputString( sprintf( "%s – %s\n", $this->blog_name, get_option( 'blogdescription' ) ) ); _wp_render_title_tag(); } function test__wp_render_title_no_theme_support() { $this->go_to( '/' ); remove_theme_support( 'title-tag' ); $this->expectOutputString( '' ); _wp_render_title_tag(); } function test_short_circuiting_title() { $this->go_to( '/' ); add_filter( 'pre_get_document_title', array( $this, '_short_circuit_title' ) ); $this->assertEquals( 'A Wild Title', wp_get_document_title() ); } function _short_circuit_title( $title ) { return 'A Wild Title'; } function test_front_page_title() { update_option( 'show_on_front', 'page' ); update_option( 'page_on_front', $this->factory->post->create( array( 'post_title' => 'front-page', 'post_type' => 'page', ) ) ); add_filter( 'document_title_parts', array( $this, '_front_page_title_parts' ) ); $this->go_to( '/' ); $this->assertEquals( sprintf( '%s – Just another WordPress site', $this->blog_name ), wp_get_document_title() ); update_option( 'show_on_front', 'posts' ); $this->go_to( '/' ); $this->assertEquals( sprintf( '%s – Just another WordPress site', $this->blog_name ), wp_get_document_title() ); } function _front_page_title_parts( $parts ) { $this->assertArrayHasKey( 'title', $parts ); $this->assertArrayHasKey( 'tagline', $parts ); $this->assertArrayNotHasKey( 'site', $parts ); return $parts; } function test_home_title() { $blog_page_id = $this->factory->post->create( array( 'post_title' => 'blog-page', 'post_type' => 'page', ) ); update_option( 'show_on_front', 'page' ); update_option( 'page_for_posts', $blog_page_id ); // Show page name on home page if it's not the front page. $this->go_to( get_permalink( $blog_page_id ) ); $this->assertEquals( sprintf( 'blog-page – %s', $this->blog_name ), wp_get_document_title() ); } function test_paged_title() { $this->go_to( '?page=4' ); add_filter( 'document_title_parts', array( $this, '_paged_title_parts' ) ); $this->assertEquals( sprintf( '%s – Page 4 – Just another WordPress site', $this->blog_name ), wp_get_document_title() ); } function _paged_title_parts( $parts ) { $this->assertArrayHasKey( 'page', $parts ); $this->assertArrayHasKey( 'title', $parts ); $this->assertArrayHasKey( 'tagline', $parts ); $this->assertArrayNotHasKey( 'site', $parts ); return $parts; } function test_singular_title() { $this->go_to( '?p=' . self::$post_id ); add_filter( 'document_title_parts', array( $this, '_singular_title_parts' ) ); $this->assertEquals( sprintf( 'test_title – %s', $this->blog_name ), wp_get_document_title() ); } function _singular_title_parts( $parts ) { $this->assertArrayHasKey( 'site', $parts ); $this->assertArrayHasKey( 'title', $parts ); $this->assertArrayNotHasKey( 'tagline', $parts ); return $parts; } function test_category_title() { $this->go_to( '?cat=' . self::$category_id ); $this->assertEquals( sprintf( 'test_category – %s', $this->blog_name ), wp_get_document_title() ); } function test_search_title() { $this->go_to( '?s=test_title' ); $this->assertEquals( sprintf( 'Search Results for “test_title” – %s', $this->blog_name ), wp_get_document_title() ); } function test_author_title() { $this->go_to( '?author=' . self::$author_id ); $this->assertEquals( sprintf( 'test_author – %s', $this->blog_name ), wp_get_document_title() ); } function test_post_type_archive_title() { register_post_type( 'cpt', array( 'public' => true, 'has_archive' => true, 'labels' => array( 'name' => 'test_cpt', ), ) ); $this->factory->post->create( array( 'post_type' => 'cpt', ) ); $this->go_to( '?post_type=cpt' ); $this->assertEquals( sprintf( 'test_cpt – %s', $this->blog_name ), wp_get_document_title() ); } function test_year_title() { $this->go_to( '?year=2015' ); $this->assertEquals( sprintf( '2015 – %s', $this->blog_name ), wp_get_document_title() ); } function test_month_title() { $this->go_to( '?monthnum=09' ); $this->assertEquals( sprintf( 'September 2015 – %s', $this->blog_name ), wp_get_document_title() ); } function test_day_title() { $this->go_to( '?day=22' ); $this->assertEquals( sprintf( 'September 22, 2015 – %s', $this->blog_name ), wp_get_document_title() ); } function test_404_title() { $this->go_to( '?m=404' ); $this->assertEquals( sprintf( 'Page not found – %s', $this->blog_name ), wp_get_document_title() ); } function test_paged_post_title() { $this->go_to( '?paged=4&p=' . self::$post_id ); add_filter( 'title_tag_parts', array( $this, '_paged_post_title_parts' ) ); $this->assertEquals( sprintf( 'test_title – Page 4 – %s', $this->blog_name ), wp_get_document_title() ); } function _paged_post_title_parts( $parts ) { $this->assertArrayHasKey( 'page', $parts ); $this->assertArrayHasKey( 'site', $parts ); $this->assertArrayHasKey( 'title', $parts ); $this->assertArrayNotHasKey( 'tagline', $parts ); return $parts; } function test_rearrange_title_parts() { $this->go_to( '?p=' . self::$post_id ); add_filter( 'document_title_parts', array( $this, '_rearrange_title_parts' ) ); $this->assertEquals( sprintf( '%s – test_title', $this->blog_name ), wp_get_document_title() ); } function _rearrange_title_parts( $parts ) { $parts = array( $parts['site'], $parts['title'], ); return $parts; } function test_change_title_separator() { $this->go_to( '?p=' . self::$post_id ); add_filter( 'document_title_separator', array( $this, '_change_title_separator' ) ); $this->assertEquals( sprintf( 'test_title %%%% %s', $this->blog_name ), wp_get_document_title() ); } function _change_title_separator( $sep ) { return '%%'; } }