old_wp_styles = $GLOBALS['wp_styles']; remove_action( 'wp_default_styles', 'wp_default_styles' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); $GLOBALS['wp_styles'] = new WP_Styles(); $GLOBALS['wp_styles']->default_version = get_bloginfo( 'version' ); } function tearDown() { $GLOBALS['wp_styles'] = $this->old_wp_styles; add_action( 'wp_default_styles', 'wp_default_styles' ); add_action( 'wp_print_styles', 'print_emoji_styles' ); parent::tearDown(); } /** * Test versioning * @ticket 11315 */ function test_wp_enqueue_style() { wp_enqueue_style('no-deps-no-version', 'example.com' ); wp_enqueue_style('no-deps-version', 'example.com', array(), 1.2); wp_enqueue_style('no-deps-null-version', 'example.com', array(), null); wp_enqueue_style('no-deps-null-version-print-media', 'example.com', array(), null, 'print'); $ver = get_bloginfo( 'version' ); $expected = "\n"; $expected .= "\n"; $expected .= "\n"; $expected .= "\n"; $this->assertEquals($expected, get_echo('wp_print_styles')); // No styles left to print $this->assertEquals("", get_echo('wp_print_styles')); } /** * Test the different protocol references in wp_enqueue_style * @global WP_Styles $wp_styles * @ticket 16560 */ public function test_protocols() { // Init global $wp_styles; $base_url_backup = $wp_styles->base_url; $wp_styles->base_url = 'http://example.com/wordpress'; $expected = ''; $ver = get_bloginfo( 'version' ); // Try with an HTTP reference wp_enqueue_style( 'reset-css-http', 'http://yui.yahooapis.com/2.8.1/build/reset/reset-min.css' ); $expected .= "\n"; // Try with an HTTPS reference wp_enqueue_style( 'reset-css-https', 'http://yui.yahooapis.com/2.8.1/build/reset/reset-min.css' ); $expected .= "\n"; // Try with an automatic protocol reference (//) wp_enqueue_style( 'reset-css-doubleslash', '//yui.yahooapis.com/2.8.1/build/reset/reset-min.css' ); $expected .= "\n"; // Try with a local resource and an automatic protocol reference (//) $url = '//my_plugin/style.css'; wp_enqueue_style( 'plugin-style', $url ); $expected .= "\n"; // Try with a bad protocol wp_enqueue_style( 'reset-css-ftp', 'ftp://yui.yahooapis.com/2.8.1/build/reset/reset-min.css' ); $expected .= "\n"; // Go! $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) ); // No styles left to print $this->assertEquals( '', get_echo( 'wp_print_styles' ) ); // Cleanup $wp_styles->base_url = $base_url_backup; } /** * Test if inline styles work * @ticket 24813 */ public function test_inline_styles() { $style = ".thing {\n"; $style .= "\tbackground: red;\n"; $style .= "}"; $expected = "\n"; $expected .= "\n"; wp_enqueue_style( 'handle', 'http://example.com', array(), 1 ); wp_add_inline_style( 'handle', $style ); // No styles left to print $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) ); } /** * Test if inline styles work with concatination * @global WP_Styles $wp_styles * @ticket 24813 */ public function test_inline_styles_concat() { global $wp_styles; $wp_styles->do_concat = true; $wp_styles->default_dirs = array( '/wp-admin/', '/wp-includes/css/' ); // Default dirs as in wp-includes/script-loader.php $style = ".thing {\n"; $style .= "\tbackground: red;\n"; $style .= "}"; $expected = "\n"; $expected .= "\n"; wp_enqueue_style( 'handle', 'http://example.com', array(), 1 ); wp_add_inline_style( 'handle', $style ); wp_print_styles(); $this->assertEquals( $expected, $wp_styles->print_html ); } /** * Test if multiple inline styles work * @ticket 24813 */ public function test_multiple_inline_styles() { $style1 = ".thing1 {\n"; $style1 .= "\tbackground: red;\n"; $style1 .= "}"; $style2 = ".thing2 {\n"; $style2 .= "\tbackground: blue;\n"; $style2 .= "}"; $expected = "\n"; $expected .= "\n"; wp_enqueue_style( 'handle', 'http://example.com', array(), 1 ); wp_add_inline_style( 'handle', $style1 ); wp_add_inline_style( 'handle', $style2 ); // No styles left to print $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) ); } /** * Test if a plugin doing it the wrong way still works * * @expectedIncorrectUsage wp_add_inline_style * @ticket 24813 */ public function test_plugin_doing_inline_styles_wrong() { $style = ""; $expected = "\n"; $expected .= "$style\n"; wp_enqueue_style( 'handle', 'http://example.com', array(), 1 ); wp_add_inline_style( 'handle', $style ); $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) ); } /** * Test to make sure CSS; wp_enqueue_style( 'handle', 'http://example.com', array(), 1 ); wp_style_add_data( 'handle', 'conditional', 'IE' ); wp_add_inline_style( 'handle', 'a { color: blue; }' ); $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) ); } /** * Testing 'wp_register_style' return boolean success/failure value. * * @ticket 31126 */ function test_wp_register_style() { $this->assertTrue( wp_register_style( 'duplicate-handler', 'http://example.com' ) ); $this->assertFalse( wp_register_style( 'duplicate-handler', 'http://example.com' ) ); } /** * @ticket 35229 */ function test_wp_add_inline_style_for_handle_without_source() { $style = "a { color: blue; }"; $expected = "\n"; $expected .= "\n"; $expected .= "\n"; wp_register_style( 'handle-one', 'http://example.com', array(), 1 ); wp_register_style( 'handle-two', 'http://example.com', array(), 1 ); wp_register_style( 'handle-three', false, array( 'handle-one', 'handle-two' ) ); wp_enqueue_style( 'handle-three' ); wp_add_inline_style( 'handle-three', $style ); $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) ); } /** * @ticket 35921 * @dataProvider data_styles_with_media */ function test_wp_enqueue_style_with_media( $expected, $media ) { wp_enqueue_style( 'handle', 'http://example.com', array(), 1, $media ); $this->assertContains( $expected, get_echo( 'wp_print_styles' ) ); } function data_styles_with_media() { return array( array( "media='all'", 'all' ), array( "media='(orientation: portrait)'", '(orientation: portrait)' ), array( "media='(max-width: 640px)'", '(max-width: 640px)' ), array( "media='print and (min-width: 25cm)'", 'print and (min-width: 25cm)' ), array( "media='screen and (color), projection and (color)'", 'screen and (color), projection and (color)' ), array( "media='not screen and (color)'", 'not screen and (color)' ), ); } }