scripts.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * @group dependencies
  4. * @group scripts
  5. */
  6. class Tests_Dependencies_Scripts extends WP_UnitTestCase {
  7. var $old_wp_scripts;
  8. function setUp() {
  9. parent::setUp();
  10. $this->old_wp_scripts = isset( $GLOBALS['wp_scripts'] ) ? $GLOBALS['wp_scripts'] : null;
  11. remove_action( 'wp_default_scripts', 'wp_default_scripts' );
  12. $GLOBALS['wp_scripts'] = new WP_Scripts();
  13. $GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' );
  14. }
  15. function tearDown() {
  16. $GLOBALS['wp_scripts'] = $this->old_wp_scripts;
  17. add_action( 'wp_default_scripts', 'wp_default_scripts' );
  18. parent::tearDown();
  19. }
  20. /**
  21. * Test versioning
  22. * @ticket 11315
  23. */
  24. function test_wp_enqueue_script() {
  25. wp_enqueue_script('no-deps-no-version', 'example.com', array());
  26. wp_enqueue_script('empty-deps-no-version', 'example.com' );
  27. wp_enqueue_script('empty-deps-version', 'example.com', array(), 1.2);
  28. wp_enqueue_script('empty-deps-null-version', 'example.com', array(), null);
  29. $ver = get_bloginfo( 'version' );
  30. $expected = "<script type='text/javascript' src='http://example.com?ver=$ver'></script>\n";
  31. $expected .= "<script type='text/javascript' src='http://example.com?ver=$ver'></script>\n";
  32. $expected .= "<script type='text/javascript' src='http://example.com?ver=1.2'></script>\n";
  33. $expected .= "<script type='text/javascript' src='http://example.com'></script>\n";
  34. $this->assertEquals($expected, get_echo('wp_print_scripts'));
  35. // No scripts left to print
  36. $this->assertEquals("", get_echo('wp_print_scripts'));
  37. }
  38. /**
  39. * Test the different protocol references in wp_enqueue_script
  40. * @global WP_Scripts $wp_scripts
  41. * @ticket 16560
  42. */
  43. public function test_protocols() {
  44. // Init
  45. global $wp_scripts;
  46. $base_url_backup = $wp_scripts->base_url;
  47. $wp_scripts->base_url = 'http://example.com/wordpress';
  48. $expected = '';
  49. $ver = get_bloginfo( 'version' );
  50. // Try with an HTTP reference
  51. wp_enqueue_script( 'jquery-http', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' );
  52. $expected .= "<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js?ver=$ver'></script>\n";
  53. // Try with an HTTPS reference
  54. wp_enqueue_script( 'jquery-https', 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' );
  55. $expected .= "<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js?ver=$ver'></script>\n";
  56. // Try with an automatic protocol reference (//)
  57. wp_enqueue_script( 'jquery-doubleslash', '//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' );
  58. $expected .= "<script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js?ver=$ver'></script>\n";
  59. // Try with a local resource and an automatic protocol reference (//)
  60. $url = '//my_plugin/script.js';
  61. wp_enqueue_script( 'plugin-script', $url );
  62. $expected .= "<script type='text/javascript' src='$url?ver=$ver'></script>\n";
  63. // Try with a bad protocol
  64. wp_enqueue_script( 'jquery-ftp', 'ftp://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' );
  65. $expected .= "<script type='text/javascript' src='{$wp_scripts->base_url}ftp://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js?ver=$ver'></script>\n";
  66. // Go!
  67. $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
  68. // No scripts left to print
  69. $this->assertEquals( '', get_echo( 'wp_print_scripts' ) );
  70. // Cleanup
  71. $wp_scripts->base_url = $base_url_backup;
  72. }
  73. /**
  74. * @ticket 22229
  75. */
  76. function test_inline_should_not_output_script_tag_with_src() {
  77. wp_enqueue_script( 'baba-inline-0', 'inline' );
  78. $this->assertEquals( '', get_echo( 'wp_print_scripts' ) );
  79. }
  80. /**
  81. * @ticket 22229
  82. */
  83. function test_json_encode_should_not_encode_special_literal_values() {
  84. if ( ! class_exists( 'WP_JS_Literal' ) ) {
  85. $this->markTestSkipped( "WP_JS_Literal class doesn't exist" );
  86. }
  87. $literal = new WP_JS_Literal( 'baba()' );
  88. $this->assertEquals( '{"x":baba()}', WP_JS_Literal::json_encode( array( 'x' => $literal ), array( $literal ) ) );
  89. }
  90. /**
  91. * @ticket 22229
  92. */
  93. function test_json_encode_should_not_encode_special_literal_values_with_dependencies() {
  94. if ( ! class_exists( 'WP_JS_Literal' ) ) {
  95. $this->markTestSkipped( "WP_JS_Literal class doesn't exist" );
  96. }
  97. $literal = new WP_JS_Literal( 'baba()', array( 'dep0', 'dep1' ) );
  98. $this->assertEquals( '{"x":baba()}', WP_JS_Literal::json_encode( array( 'x' => $literal ), array( $literal ) ) );
  99. }
  100. }