diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml
index 72cf1a4b..85b6c4e5 100644
--- a/.github/workflows/testing.yml
+++ b/.github/workflows/testing.yml
@@ -22,10 +22,18 @@ jobs:
test-command: composer test:func
download-binaries: true
- acceptance:
- name: Acceptance Testing
+ acceptance-slow:
+ name: Acceptance Testing (Slow)
uses: ./.github/workflows/run-test-suite.yml
with:
fail-fast: false
- test-command: composer test:accept
+ test-command: composer test:accept-slow
+ download-binaries: true
+
+ acceptance-fast:
+ name: Acceptance Testing (Fast)
+ uses: ./.github/workflows/run-test-suite.yml
+ with:
+ fail-fast: false
+ test-command: composer test:accept-fast
download-binaries: true
diff --git a/.run/Acceptance Fast.run.xml b/.run/Acceptance Fast.run.xml
new file mode 100644
index 00000000..687a546d
--- /dev/null
+++ b/.run/Acceptance Fast.run.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/.run/Acceptance Slow.run.xml b/.run/Acceptance Slow.run.xml
new file mode 100644
index 00000000..d9d8e85c
--- /dev/null
+++ b/.run/Acceptance Slow.run.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/.run/Acceptance.run.xml b/.run/Acceptance.run.xml
index af5f7ae9..ae1d8ef2 100644
--- a/.run/Acceptance.run.xml
+++ b/.run/Acceptance.run.xml
@@ -1,6 +1,6 @@
-
+
-
\ No newline at end of file
+
diff --git a/composer.json b/composer.json
index e9fba120..6aeef729 100644
--- a/composer.json
+++ b/composer.json
@@ -102,7 +102,9 @@
"test:unit": "tests/runner.php vendor/bin/phpunit --testsuite=Unit --color=always --testdox",
"test:func": "tests/runner.php vendor/bin/phpunit --testsuite=Functional --color=always --testdox",
"test:arch": "phpunit --testsuite=Arch --color=always --testdox",
- "test:accept": "tests/runner.php vendor/bin/phpunit --testsuite=Acceptance --color=always --testdox"
+ "test:accept": "tests/runner.php vendor/bin/phpunit --testsuite=Acceptance --color=always --testdox",
+ "test:accept-slow": "tests/runner.php vendor/bin/phpunit --testsuite=\"Acceptance-Slow\" --color=always --testdox",
+ "test:accept-fast": "tests/runner.php vendor/bin/phpunit --testsuite=\"Acceptance-Fast\" --color=always --testdox"
},
"config": {
"sort-packages": true,
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index a982abbf..43bb60c7 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -14,9 +14,56 @@
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerErrors="true"
displayDetailsOnTestsThatTriggerNotices="true"
- displayDetailsOnTestsThatTriggerWarnings="true"
->
+ displayDetailsOnTestsThatTriggerWarnings="true">
+
+ tests/Acceptance/Extra
+ tests/Acceptance/Harness
+ tests/Acceptance/Harness/Update/SelfTest.php
+ tests/Acceptance/Harness/Query/TimeoutDueToNoActiveWorkersTest.php
+ tests/Acceptance/Extra/Activity/ActivityPausedTest.php
+ tests/Acceptance/Extra/Versioning/DeploymentTest.php
+ tests/Acceptance/Harness/EagerWorkflow/SuccessfulStartTest.php
+ tests/Acceptance/Harness/Activity/CancelTryCancelTest.php
+ tests/Acceptance/Extra/Stability/ResetWorkerTest.php
+ tests/Acceptance/Harness/Activity/RetryOnErrorTest.php
+ tests/Acceptance/Harness/Update/WorkerRestartTest.php
+ tests/Acceptance/Harness/Schedule/BasicTest.php
+ tests/Acceptance/Harness/Update/AsyncAcceptTest.php
+ tests/Acceptance/Extra/Workflow/BuiltInPrefixedHandlersTest.php
+ tests/Acceptance/Harness/Schedule/TriggerTest.php
+ tests/Acceptance/Extra/Workflow/InitMethodTest.php
+ tests/Acceptance/Harness/Signal/PreventCloseTest.php
+ tests/Acceptance/Extra/Update/UntypedStubTest.php
+ tests/Acceptance/Extra/Update/TimeoutTest.php
+ tests/Acceptance/Extra/Workflow/DateTimeZoneWorkflowTest.php
+ tests/Acceptance/Extra/Schedule/ScheduleUpdateTest.php
+ tests/Acceptance/Harness/ChildWorkflow/CancelAbandonTest.php
+ tests/Acceptance/Harness/ContinueAsNew/ContinueAsSameTest.php
+
+
+ tests/Acceptance/Harness/Update/SelfTest.php
+ tests/Acceptance/Harness/Query/TimeoutDueToNoActiveWorkersTest.php
+ tests/Acceptance/Extra/Activity/ActivityPausedTest.php
+ tests/Acceptance/Extra/Versioning/DeploymentTest.php
+ tests/Acceptance/Harness/EagerWorkflow/SuccessfulStartTest.php
+ tests/Acceptance/Harness/Activity/CancelTryCancelTest.php
+ tests/Acceptance/Extra/Stability/ResetWorkerTest.php
+ tests/Acceptance/Harness/Activity/RetryOnErrorTest.php
+ tests/Acceptance/Harness/Update/WorkerRestartTest.php
+ tests/Acceptance/Harness/Schedule/BasicTest.php
+ tests/Acceptance/Harness/Update/AsyncAcceptTest.php
+ tests/Acceptance/Extra/Workflow/BuiltInPrefixedHandlersTest.php
+ tests/Acceptance/Harness/Schedule/TriggerTest.php
+ tests/Acceptance/Extra/Workflow/InitMethodTest.php
+ tests/Acceptance/Harness/Signal/PreventCloseTest.php
+ tests/Acceptance/Extra/Update/UntypedStubTest.php
+ tests/Acceptance/Extra/Update/TimeoutTest.php
+ tests/Acceptance/Extra/Workflow/DateTimeZoneWorkflowTest.php
+ tests/Acceptance/Extra/Schedule/ScheduleUpdateTest.php
+ tests/Acceptance/Harness/ChildWorkflow/CancelAbandonTest.php
+ tests/Acceptance/Harness/ContinueAsNew/ContinueAsSameTest.php
+
tests/Acceptance/Extra
tests/Acceptance/Harness
@@ -45,4 +92,4 @@
src
-
+
\ No newline at end of file
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index 0dd2045e..fc34416d 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -35,7 +35,10 @@
return null;
})($GLOBALS['argv'] ?? []);
+$suite = \substr($suite, 0, \strpos($suite, '-') ?: \strlen($suite));
+
# Include related bootstrap
-$suite === null or (static fn(string $file) => \is_file($file) and include $file)(
- __DIR__ . DIRECTORY_SEPARATOR . $suite . DIRECTORY_SEPARATOR . 'bootstrap.php',
-);
+$file = __DIR__ . DIRECTORY_SEPARATOR . $suite . DIRECTORY_SEPARATOR . 'bootstrap.php';
+if (\is_file($file)) {
+ include $file;
+}
diff --git a/tests/phpunit-generate.php b/tests/phpunit-generate.php
new file mode 100644
index 00000000..2a3bbb85
--- /dev/null
+++ b/tests/phpunit-generate.php
@@ -0,0 +1,151 @@
+#!/usr/bin/env php
+xpath('//testcase') as $testcase) {
+ $file = (string) $testcase['file'];
+ $time = (float) $testcase['time'];
+
+ if (!isset($tests[$file])) {
+ $tests[$file] = 0.0;
+ }
+ $tests[$file] = \max($tests[$file], $time); // max instead of sum
+ }
+}
+
+$slow = [];
+$fast = [];
+
+foreach ($tests as $file => $time) {
+ if ($time >= $threshold) {
+ $slow[$file] = $time;
+ } else {
+ $fast[$file] = $time;
+ }
+}
+
+\arsort($slow);
+
+$extractPath = static function (string $file): string {
+ if (\preg_match('#(tests/Acceptance/.+)$#', $file, $matches)) {
+ return $matches[1];
+ }
+ return $file;
+};
+
+$slowFiles = \array_map($extractPath, \array_keys($slow));
+
+$excludeLines = \implode("\n", \array_map(
+ static fn(string $file): string => " $file",
+ $slowFiles,
+));
+
+$fileLines = \implode("\n", \array_map(
+ static fn(string $file): string => " $file",
+ $slowFiles,
+));
+
+$template = <<<'XML'
+
+
+
+
+ tests/Acceptance/Extra
+ tests/Acceptance/Harness
+{{EXCLUDES}}
+
+
+{{FILES}}
+
+
+ tests/Acceptance/Extra
+ tests/Acceptance/Harness
+
+
+ tests/Arch
+
+
+ tests/Unit
+
+
+ tests/Functional
+
+
+
+
+ skip-on-test-server
+
+
+
+
+
+
+
+
+ src
+
+
+
+XML;
+
+$output = \str_replace(
+ ['{{EXCLUDES}}', '{{FILES}}'],
+ [$excludeLines, $fileLines],
+ $template,
+);
+
+\file_put_contents($outputFile, $output);
+
+$slowTime = \array_sum($slow);
+$fastTime = \array_sum($fast);
+
+echo "Generated: $outputFile (threshold: {$threshold}s)\n\n";
+echo "Fast: " . \count($fast) . " files (~" . \round($fastTime, 1) . "s)\n";
+echo "Slow: " . \count($slow) . " files (~" . \round($slowTime, 1) . "s)\n\n";
+
+foreach ($slow as $file => $time) {
+ echo \sprintf("%6.2fs %s\n", $time, $extractPath($file));
+}