<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[51813] trunk/tests/phpunit/includes/bootstrap.php: Build/Test Tools: Expect an absolute path in `WP_TESTS_PHPUNIT_POLYFILLS_PATH` constant.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/51813">51813</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/51813","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>hellofromTonya</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2021-09-14 18:52:57 +0000 (Tue, 14 Sep 2021)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Build/Test Tools: Expect an absolute path in `WP_TESTS_PHPUNIT_POLYFILLS_PATH` constant.

This commit:
* Removes the use of `realpath()` to prevent issues with WSL and other virtualized filesystems.
* Changes the logic of the Polyfill bootstrap loading to expect an absolute path, rather than a relative path to the root directory of the PHPUnit Polyfills library.
* Adjusts the relevant inline documentation and error messages to expect an absolute path.
* Breaks up error messages into smaller line lengths for readability.

Follow-up to <a href="https://core.trac.wordpress.org/changeset/51598">[51598]</a>, <a href="https://core.trac.wordpress.org/changeset/51810">[51810]</a>, <a href="https://core.trac.wordpress.org/changeset/51811">[51811]</a>, <a href="https://core.trac.wordpress.org/changeset/51812">[51812]</a>.

Props jrf, schlessera, hellofromTonya, jeherve, lucatume.
See <a href="https://core.trac.wordpress.org/ticket/46149">#46149</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunktestsphpunitincludesbootstrapphp">trunk/tests/phpunit/includes/bootstrap.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunktestsphpunitincludesbootstrapphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/includes/bootstrap.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/includes/bootstrap.php        2021-09-14 18:47:46 UTC (rev 51812)
+++ trunk/tests/phpunit/includes/bootstrap.php  2021-09-14 18:52:57 UTC (rev 51813)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -61,22 +61,25 @@
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * The PHPUnit Polyfills are a requirement for the WP test suite.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * For running the Core tests, the Make WordPress Core handbook contains step-by-step instructions
+ * on how to get up and running for a variety of supported workflows:
+ * {@link https://make.wordpress.org/core/handbook/testing/automated-testing/phpunit/#test-running-workflow-options}
+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * Plugin/theme integration tests can handle this in any of the following ways:
</span><span class="cx" style="display: block; padding: 0 10px">  * - When using a full WP install: run `composer update` for the WP install prior to running the tests.
</span><span class="cx" style="display: block; padding: 0 10px">  * - When using a partial WP test suite install:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- *   - Add a `yoast/phpunit-polyfills` (dev) requirement to their own `composer.json` file.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *   - Add a `yoast/phpunit-polyfills` (dev) requirement to the plugin/theme's own `composer.json` file.
</ins><span class="cx" style="display: block; padding: 0 10px">  *   - And then:
</span><span class="cx" style="display: block; padding: 0 10px">  *     - Either load the PHPUnit Polyfills autoload file prior to running the WP core bootstrap file.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- *     - Or declare a `WP_TESTS_PHPUNIT_POLYFILLS_PATH` constant pointing to the root directory
- *       of the PHPUnit Polyfills installation.
- *       This constant can be declared in the `phpunit.xml[.dist]` file like this:
- *       `<php><const name="WP_TESTS_PHPUNIT_POLYFILLS_PATH" value="path/to/yoast/phpunit-polyfills"/></php>
- *       or can be declared as a PHP constant in the `wp-tests-config.php` file or the plugin/theme
- *       test bootstrap file.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *     - Or declare a `WP_TESTS_PHPUNIT_POLYFILLS_PATH` constant containing the absolute path to the
+ *       root directory of the PHPUnit Polyfills installation.
+ *       If the constant is used, it is strongly recommended to declare this constant in the plugin/theme's
+ *       own test bootstrap file.
+ *       The constant MUST be declared prior to calling this file.
</ins><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! class_exists( 'Yoast\PHPUnitPolyfills\Autoload' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">        // Default location of the autoloader for WP core test runs.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $phpunit_polyfills_autoloader = __DIR__ . '/../../../vendor/yoast/phpunit-polyfills/phpunitpolyfills-autoload.php';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $phpunit_polyfills_autoloader = dirname( dirname( dirname( __DIR__ ) ) ) . '/vendor/yoast/phpunit-polyfills/phpunitpolyfills-autoload.php';
</ins><span class="cx" style="display: block; padding: 0 10px">         $phpunit_polyfills_error      = false;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Allow for a custom installation location to be provided for plugin/theme integration tests.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -92,12 +95,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                $phpunit_polyfills_path = $phpunit_polyfills_path . '/phpunitpolyfills-autoload.php';
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $phpunit_polyfills_path = realpath( $phpunit_polyfills_path );
-                       if ( false !== $phpunit_polyfills_path ) {
-                               $phpunit_polyfills_autoloader = $phpunit_polyfills_path;
-                       } else {
-                               $phpunit_polyfills_error = true;
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $phpunit_polyfills_autoloader = $phpunit_polyfills_path;
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else {
</span><span class="cx" style="display: block; padding: 0 10px">                        $phpunit_polyfills_error = true;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -111,13 +109,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                WP_TESTS_PHPUNIT_POLYFILLS_PATH
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><span class="cx" style="display: block; padding: 0 10px">                        echo 'Please verify that the file path provided in the WP_TESTS_PHPUNIT_POLYFILLS_PATH constant is correct.' . PHP_EOL;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        echo 'The WP_TESTS_PHPUNIT_POLYFILLS_PATH constant should contain an absolute path to the root directory'
+                               . ' of the PHPUnit Polyfills library.' . PHP_EOL;
</ins><span class="cx" style="display: block; padding: 0 10px">                 } elseif ( defined( 'WP_RUN_CORE_TESTS' ) && WP_RUN_CORE_TESTS ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        echo 'You need to run `composer update` before running the tests.' . PHP_EOL;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        echo 'Once the dependencies are installed, you can run the tests using the Composer-installed version of PHPUnit or using a PHPUnit phar file, but the dependencies do need to be installed whichever way the tests are run.' . PHP_EOL;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 echo 'Once the dependencies are installed, you can run the tests using the Composer-installed version'
+                               . ' of PHPUnit or using a PHPUnit phar file, but the dependencies do need to be installed'
+                               . ' whichever way the tests are run.' . PHP_EOL;
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        echo 'If you are trying to run plugin/theme integration tests, make sure the PHPUnit Polyfills library is available and either load the autoload file of this library in your own test bootstrap before calling the WP Core test bootstrap file; or set the path to the PHPUnit Polyfills library in a "WP_TESTS_PHPUNIT_POLYFILLS_PATH" constant to allow the WP Core bootstrap to load the Polyfills.' . PHP_EOL . PHP_EOL;
-                       echo 'If you are trying to run the WP Core tests, make sure to set the "WP_RUN_CORE_TESTS" constant to 1 and run `composer update` before running the tests.' . PHP_EOL;
-                       echo 'Once the dependencies are installed, you can run the tests using the Composer-installed version of PHPUnit or using a PHPUnit phar file, but the dependencies do need to be installed whichever way the tests are run.' . PHP_EOL;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 echo 'If you are trying to run plugin/theme integration tests, make sure the PHPUnit Polyfills library'
+                               . ' (https://github.com/Yoast/PHPUnit-Polyfills) is available and either load the autoload file'
+                               . ' of this library in your own test bootstrap before calling the WP Core test bootstrap file;'
+                               . ' or set the absolute path to the PHPUnit Polyfills library in a "WP_TESTS_PHPUNIT_POLYFILLS_PATH"'
+                               . ' constant to allow the WP Core bootstrap to load the Polyfills.' . PHP_EOL . PHP_EOL;
+                       echo 'If you are trying to run the WP Core tests, make sure to set the "WP_RUN_CORE_TESTS" constant'
+                               . ' to 1 and run `composer update` before running the tests.' . PHP_EOL;
+                       echo 'Once the dependencies are installed, you can run the tests using the Composer-installed'
+                               . ' version of PHPUnit or using a PHPUnit phar file, but the dependencies do need to be'
+                               . ' installed whichever way the tests are run.' . PHP_EOL;
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">                exit( 1 );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -136,13 +145,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">        || version_compare( Yoast\PHPUnitPolyfills\Autoload::VERSION, $phpunit_polyfills_minimum_version, '<' ) )
</span><span class="cx" style="display: block; padding: 0 10px"> ) {
</span><span class="cx" style="display: block; padding: 0 10px">        printf(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'Error: Version mismatch detected for the PHPUnit Polyfills. Please ensure that PHPUnit Polyfills %s or higher is loaded. Found version: %s' . PHP_EOL,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         'Error: Version mismatch detected for the PHPUnit Polyfills.'
+               . ' Please ensure that PHPUnit Polyfills %s or higher is loaded. Found version: %s' . PHP_EOL,
</ins><span class="cx" style="display: block; padding: 0 10px">                 $phpunit_polyfills_minimum_version,
</span><span class="cx" style="display: block; padding: 0 10px">                defined( '\Yoast\PHPUnitPolyfills\Autoload::VERSION' ) ? Yoast\PHPUnitPolyfills\Autoload::VERSION : '1.0.0 or lower'
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="cx" style="display: block; padding: 0 10px">        if ( defined( 'WP_TESTS_PHPUNIT_POLYFILLS_PATH' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                printf(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'Please ensure that the PHPUnit Polyfill install in "%s" is updated to version %s or higher.' . PHP_EOL,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'Please ensure that the PHPUnit Polyfill installation in "%s" is updated to version %s or higher.' . PHP_EOL,
</ins><span class="cx" style="display: block; padding: 0 10px">                         WP_TESTS_PHPUNIT_POLYFILLS_PATH,
</span><span class="cx" style="display: block; padding: 0 10px">                        $phpunit_polyfills_minimum_version
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span></span></pre>
</div>
</div>

</body>
</html>