@@ -476,12 +476,23 @@ public function data_test_register_and_enqueue_script_module(): array {
476476 * @covers WP_Script_Modules::print_head_enqueued_script_modules()
477477 * @covers WP_Script_Modules::print_enqueued_script_modules()
478478 * @covers WP_Script_Modules::set_fetchpriority()
479+ * @covers WP_Script_Modules::set_in_footer()
479480 */
480481 public function test_wp_enqueue_script_module () {
481482 $ this ->script_modules ->register ( 'foo ' , '/foo.js ' );
482- $ this ->script_modules ->register ( 'bar ' , '/bar.js ' , array (), false , array ( 'fetchpriority ' => 'high ' ) );
483+ $ this ->script_modules ->register (
484+ 'bar ' ,
485+ '/bar.js ' ,
486+ array (),
487+ false ,
488+ array (
489+ 'fetchpriority ' => 'high ' ,
490+ 'in_footer ' => true ,
491+ )
492+ );
483493 $ this ->script_modules ->register ( 'baz ' , '/baz.js ' );
484494 $ this ->assertTrue ( $ this ->script_modules ->set_fetchpriority ( 'baz ' , 'low ' ) );
495+ $ this ->assertTrue ( $ this ->script_modules ->set_in_footer ( 'baz ' , true ) );
485496 $ this ->script_modules ->enqueue ( 'foo ' );
486497 $ this ->script_modules ->enqueue ( 'bar ' );
487498 $ this ->script_modules ->enqueue ( 'baz ' );
@@ -491,10 +502,13 @@ public function test_wp_enqueue_script_module() {
491502 $ this ->assertCount ( 3 , $ enqueued_script_modules );
492503 $ this ->assertStringStartsWith ( '/foo.js ' , $ enqueued_script_modules ['foo ' ]['url ' ] );
493504 $ this ->assertSame ( 'auto ' , $ enqueued_script_modules ['foo ' ]['fetchpriority ' ] );
505+ $ this ->assertFalse ( $ enqueued_script_modules ['foo ' ]['in_footer ' ] );
494506 $ this ->assertStringStartsWith ( '/bar.js ' , $ enqueued_script_modules ['bar ' ]['url ' ] );
495507 $ this ->assertSame ( 'high ' , $ enqueued_script_modules ['bar ' ]['fetchpriority ' ] );
508+ $ this ->assertTrue ( $ enqueued_script_modules ['bar ' ]['in_footer ' ] );
496509 $ this ->assertStringStartsWith ( '/baz.js ' , $ enqueued_script_modules ['baz ' ]['url ' ] );
497510 $ this ->assertSame ( 'low ' , $ enqueued_script_modules ['baz ' ]['fetchpriority ' ] );
511+ $ this ->assertTrue ( $ enqueued_script_modules ['baz ' ]['in_footer ' ] );
498512 }
499513
500514 /**
@@ -1390,6 +1404,57 @@ public function test_fetchpriority_values( string $fetchpriority ) {
13901404 $ this ->assertSame ( 'auto ' , $ registered_modules ['test-script-2 ' ]['fetchpriority ' ] );
13911405 }
13921406
1407+ /**
1408+ * Tests ways of setting in_footer.
1409+ *
1410+ * @ticket 63486
1411+ *
1412+ * @covers ::wp_register_script_module
1413+ * @covers ::wp_enqueue_script_module
1414+ * @covers WP_Script_Modules::set_in_footer
1415+ */
1416+ public function test_in_footer_methods () {
1417+ wp_register_script_module ( 'default ' , '/default.js ' , array (), null );
1418+ wp_enqueue_script_module ( 'default ' );
1419+
1420+ wp_register_script_module ( 'in-footer-via-register ' , '/in-footer-via-register.js ' , array (), null , array ( 'in_footer ' => true ) );
1421+ wp_enqueue_script_module ( 'in-footer-via-register ' );
1422+
1423+ wp_enqueue_script_module ( 'in-footer-via-enqueue ' , '/in-footer-via-enqueue.js ' , array (), null , array ( 'in_footer ' => true ) );
1424+
1425+ wp_enqueue_script_module ( 'not-in-footer-via-enqueue ' , '/not-in-footer-via-enqueue.js ' , array (), null , array ( 'in_footer ' => false ) );
1426+
1427+ wp_enqueue_script_module ( 'in-footer-via-override ' , '/in-footer-via-override.js ' );
1428+ wp_script_modules ()->set_in_footer ( 'in-footer-via-override ' , true );
1429+
1430+ wp_enqueue_script_module ( 'not-in-footer-via-override ' , '/not-in-footer-via-override.js ' , array (), null , array ( 'in_footer ' => true ) );
1431+ wp_script_modules ()->set_in_footer ( 'not-in-footer-via-override ' , false );
1432+
1433+ $ actual_head = get_echo ( array ( wp_script_modules (), 'print_head_enqueued_script_modules ' ) );
1434+ $ actual_footer = get_echo ( array ( wp_script_modules (), 'print_enqueued_script_modules ' ) );
1435+
1436+ $ this ->assertEqualHTML (
1437+ $ actual_head ,
1438+ '
1439+ <script type="module" src="/default.js" id="default-js-module"></script>
1440+ <script type="module" src="/not-in-footer-via-enqueue.js" id="not-in-footer-via-enqueue-js-module"></script>
1441+ <script type="module" src="/not-in-footer-via-override.js" id="not-in-footer-via-override-js-module"></script>
1442+ ' ,
1443+ '<body> ' ,
1444+ "Expected equal script modules in the HEAD. Snapshot: \n$ actual_head "
1445+ );
1446+ $ this ->assertEqualHTML (
1447+ $ actual_footer ,
1448+ '
1449+ <script type="module" src="/in-footer-via-register.js" id="in-footer-via-register-js-module"></script>
1450+ <script type="module" src="/in-footer-via-enqueue.js" id="in-footer-via-enqueue-js-module"></script>
1451+ <script type="module" src="/in-footer-via-override.js?ver=6.9-alpha-60093-src" id="in-footer-via-override-js-module"></script>
1452+ ' ,
1453+ '<body> ' ,
1454+ "Expected equal script modules in the footer. Snapshot: \n$ actual_footer "
1455+ );
1456+ }
1457+
13931458 /**
13941459 * Tests that a script module with an invalid fetchpriority value gets a value of auto.
13951460 *
0 commit comments