styles.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?php
  2. /**
  3. * @group dependencies
  4. * @group scripts
  5. */
  6. class Tests_Dependencies_Styles extends WP_UnitTestCase {
  7. var $old_wp_styles;
  8. function setUp() {
  9. parent::setUp();
  10. if ( empty( $GLOBALS['wp_styles'] ) )
  11. $GLOBALS['wp_styles'] = null;
  12. $this->old_wp_styles = $GLOBALS['wp_styles'];
  13. remove_action( 'wp_default_styles', 'wp_default_styles' );
  14. $GLOBALS['wp_styles'] = new WP_Styles();
  15. $GLOBALS['wp_styles']->default_version = get_bloginfo( 'version' );
  16. }
  17. function tearDown() {
  18. $GLOBALS['wp_styles'] = $this->old_wp_styles;
  19. add_action( 'wp_default_styles', 'wp_default_styles' );
  20. parent::tearDown();
  21. }
  22. /**
  23. * Test versioning
  24. * @ticket 11315
  25. */
  26. function test_wp_enqueue_style() {
  27. wp_enqueue_style('no-deps-no-version', 'example.com' );
  28. wp_enqueue_style('no-deps-version', 'example.com', array(), 1.2);
  29. wp_enqueue_style('no-deps-null-version', 'example.com', array(), null);
  30. wp_enqueue_style('no-deps-null-version-print-media', 'example.com', array(), null, 'print');
  31. $ver = get_bloginfo( 'version' );
  32. $expected = "<link rel='stylesheet' id='no-deps-no-version-css' href='http://example.com?ver=$ver' type='text/css' media='all' />\n";
  33. $expected .= "<link rel='stylesheet' id='no-deps-version-css' href='http://example.com?ver=1.2' type='text/css' media='all' />\n";
  34. $expected .= "<link rel='stylesheet' id='no-deps-null-version-css' href='http://example.com' type='text/css' media='all' />\n";
  35. $expected .= "<link rel='stylesheet' id='no-deps-null-version-print-media-css' href='http://example.com' type='text/css' media='print' />\n";
  36. $this->assertEquals($expected, get_echo('wp_print_styles'));
  37. // No styles left to print
  38. $this->assertEquals("", get_echo('wp_print_styles'));
  39. }
  40. /**
  41. * Test the different protocol references in wp_enqueue_style
  42. * @global WP_Styles $wp_styles
  43. * @ticket 16560
  44. */
  45. public function test_protocols() {
  46. // Init
  47. global $wp_styles;
  48. $base_url_backup = $wp_styles->base_url;
  49. $wp_styles->base_url = 'http://example.com/wordpress';
  50. $expected = '';
  51. $ver = get_bloginfo( 'version' );
  52. // Try with an HTTP reference
  53. wp_enqueue_style( 'reset-css-http', 'http://yui.yahooapis.com/2.8.1/build/reset/reset-min.css' );
  54. $expected .= "<link rel='stylesheet' id='reset-css-http-css' href='http://yui.yahooapis.com/2.8.1/build/reset/reset-min.css?ver=$ver' type='text/css' media='all' />\n";
  55. // Try with an HTTPS reference
  56. wp_enqueue_style( 'reset-css-https', 'http://yui.yahooapis.com/2.8.1/build/reset/reset-min.css' );
  57. $expected .= "<link rel='stylesheet' id='reset-css-https-css' href='http://yui.yahooapis.com/2.8.1/build/reset/reset-min.css?ver=$ver' type='text/css' media='all' />\n";
  58. // Try with an automatic protocol reference (//)
  59. wp_enqueue_style( 'reset-css-doubleslash', '//yui.yahooapis.com/2.8.1/build/reset/reset-min.css' );
  60. $expected .= "<link rel='stylesheet' id='reset-css-doubleslash-css' href='//yui.yahooapis.com/2.8.1/build/reset/reset-min.css?ver=$ver' type='text/css' media='all' />\n";
  61. // Try with a local resource and an automatic protocol reference (//)
  62. $url = '//my_plugin/style.css';
  63. wp_enqueue_style( 'plugin-style', $url );
  64. $expected .= "<link rel='stylesheet' id='plugin-style-css' href='$url?ver=$ver' type='text/css' media='all' />\n";
  65. // Try with a bad protocol
  66. wp_enqueue_style( 'reset-css-ftp', 'ftp://yui.yahooapis.com/2.8.1/build/reset/reset-min.css' );
  67. $expected .= "<link rel='stylesheet' id='reset-css-ftp-css' href='{$wp_styles->base_url}ftp://yui.yahooapis.com/2.8.1/build/reset/reset-min.css?ver=$ver' type='text/css' media='all' />\n";
  68. // Go!
  69. $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
  70. // No styles left to print
  71. $this->assertEquals( '', get_echo( 'wp_print_styles' ) );
  72. // Cleanup
  73. $wp_styles->base_url = $base_url_backup;
  74. }
  75. /**
  76. * Test if inline styles work
  77. * @ticket 24813
  78. */
  79. public function test_inline_styles() {
  80. $style = ".thing {\n";
  81. $style .= "\tbackground: red;\n";
  82. $style .= "}";
  83. $expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
  84. $expected .= "<style type='text/css'>\n";
  85. $expected .= "$style\n";
  86. $expected .= "</style>\n";
  87. wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
  88. wp_add_inline_style( 'handle', $style );
  89. // No styles left to print
  90. $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
  91. }
  92. /**
  93. * Test if inline styles work with concatination
  94. * @global WP_Styles $wp_styles
  95. * @ticket 24813
  96. */
  97. public function test_inline_styles_concat() {
  98. global $wp_styles;
  99. $wp_styles->do_concat = true;
  100. $wp_styles->default_dirs = array( '/wp-admin/', '/wp-includes/css/' ); // Default dirs as in wp-includes/script-loader.php
  101. $style = ".thing {\n";
  102. $style .= "\tbackground: red;\n";
  103. $style .= "}";
  104. $expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
  105. $expected .= "<style type='text/css'>\n";
  106. $expected .= "$style\n";
  107. $expected .= "</style>\n";
  108. wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
  109. wp_add_inline_style( 'handle', $style );
  110. wp_print_styles();
  111. $this->assertEquals( $expected, $wp_styles->print_html );
  112. }
  113. /**
  114. * Test if multiple inline styles work
  115. * @ticket 24813
  116. */
  117. public function test_multiple_inline_styles() {
  118. $style1 = ".thing1 {\n";
  119. $style1 .= "\tbackground: red;\n";
  120. $style1 .= "}";
  121. $style2 = ".thing2 {\n";
  122. $style2 .= "\tbackground: blue;\n";
  123. $style2 .= "}";
  124. $expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
  125. $expected .= "<style type='text/css'>\n";
  126. $expected .= "$style1\n";
  127. $expected .= "$style2\n";
  128. $expected .= "</style>\n";
  129. wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
  130. wp_add_inline_style( 'handle', $style1 );
  131. wp_add_inline_style( 'handle', $style2 );
  132. // No styles left to print
  133. $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
  134. }
  135. /**
  136. * Test if a plugin doing it the wrong way still works
  137. *
  138. * @expectedIncorrectUsage wp_add_inline_style
  139. * @ticket 24813
  140. */
  141. public function test_plugin_doing_inline_styles_wrong() {
  142. $style = "<style type='text/css'>\n";
  143. $style .= ".thing {\n";
  144. $style .= "\tbackground: red;\n";
  145. $style .= "}\n";
  146. $style .= "</style>";
  147. $expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
  148. $expected .= "$style\n";
  149. wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
  150. wp_add_inline_style( 'handle', $style );
  151. $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
  152. }
  153. /**
  154. * Test to make sure <style> tags aren't output if there are no inline styles.
  155. * @ticket 24813
  156. */
  157. public function test_unnecessary_style_tags() {
  158. $expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
  159. wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
  160. $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
  161. }
  162. }