Implements automatic creation of required plugin pages (Community Login, Trainer Registration, Trainer Dashboard) upon plugin activation. This addresses E2E test failures caused by missing pages in the test environment. - Adds activation hook in `hvac-community-events.php` to call `hvac_ce_create_required_pages`. - The callback function checks for existing pages by slug and creates them using `wp_insert_post` if missing. Includes debug logging. Also fixes issues identified during E2E test debugging: - Corrects fatal error in `includes/community/class-login-handler.php` by replacing undefined constant `HVAC_COMMUNITY_EVENTS_PATH` with `HVAC_CE_PLUGIN_DIR`. - Updates `tests/e2e/tests/login.spec.ts` to use the correct selector `#wp-submit` for the login form submit button instead of `button[type="submit"]`. Documentation updates: - Adds `docs/automatic-page-creation-plan.md`. - Updates `README.md` regarding automatic page creation. - Updates Memory Bank files (`decisionLog.md`, `progress.md`, `activeContext.md`). Note: Activation hook logging did not appear during WP-CLI activation, requiring further investigation if page creation issues persist. E2E test confirmation pending.
104 lines
2.2 KiB
Markdown
104 lines
2.2 KiB
Markdown
# phpunit/php-timer
|
|
|
|
[](https://github.com/sebastianbergmann/php-timer/actions)
|
|
[](https://shepherd.dev/github/sebastianbergmann/php-timer)
|
|
|
|
Utility class for timing things, factored out of PHPUnit into a stand-alone component.
|
|
|
|
## Installation
|
|
|
|
You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/):
|
|
|
|
```
|
|
composer require phpunit/php-timer
|
|
```
|
|
|
|
If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:
|
|
|
|
```
|
|
composer require --dev phpunit/php-timer
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Basic Timing
|
|
|
|
```php
|
|
require __DIR__ . '/vendor/autoload.php';
|
|
|
|
use SebastianBergmann\Timer\Timer;
|
|
|
|
$timer = new Timer;
|
|
|
|
$timer->start();
|
|
|
|
foreach (\range(0, 100000) as $i) {
|
|
// ...
|
|
}
|
|
|
|
$duration = $timer->stop();
|
|
|
|
var_dump(get_class($duration));
|
|
var_dump($duration->asString());
|
|
var_dump($duration->asSeconds());
|
|
var_dump($duration->asMilliseconds());
|
|
var_dump($duration->asMicroseconds());
|
|
var_dump($duration->asNanoseconds());
|
|
```
|
|
|
|
The code above yields the output below:
|
|
|
|
```
|
|
string(32) "SebastianBergmann\Timer\Duration"
|
|
string(9) "00:00.002"
|
|
float(0.002851062)
|
|
float(2.851062)
|
|
float(2851.062)
|
|
int(2851062)
|
|
```
|
|
|
|
### Resource Consumption
|
|
|
|
#### Explicit duration
|
|
|
|
```php
|
|
require __DIR__ . '/vendor/autoload.php';
|
|
|
|
use SebastianBergmann\Timer\ResourceUsageFormatter;
|
|
use SebastianBergmann\Timer\Timer;
|
|
|
|
$timer = new Timer;
|
|
$timer->start();
|
|
|
|
foreach (\range(0, 100000) as $i) {
|
|
// ...
|
|
}
|
|
|
|
print (new ResourceUsageFormatter)->resourceUsage($timer->stop());
|
|
```
|
|
|
|
The code above yields the output below:
|
|
|
|
```
|
|
Time: 00:00.002, Memory: 6.00 MB
|
|
```
|
|
|
|
#### Duration since PHP Startup (using unreliable `$_SERVER['REQUEST_TIME_FLOAT']`)
|
|
|
|
```php
|
|
require __DIR__ . '/vendor/autoload.php';
|
|
|
|
use SebastianBergmann\Timer\ResourceUsageFormatter;
|
|
|
|
foreach (\range(0, 100000) as $i) {
|
|
// ...
|
|
}
|
|
|
|
print (new ResourceUsageFormatter)->resourceUsageSinceStartOfRequest();
|
|
```
|
|
|
|
The code above yields the output below:
|
|
|
|
```
|
|
Time: 00:00.002, Memory: 6.00 MB
|
|
```
|