Compare commits

...

2799 Commits

Author SHA1 Message Date
nuno maduro 7b18287374 feat: evals configuration 2026-07-07 19:10:35 +01:00
nuno maduro 33e3bf2888 chore: moves to phpunit 13.2 2026-07-07 13:40:02 +01:00
nuno maduro 72ab506d7b Merge branch '4.x' into 5.x 2026-07-06 18:47:25 +01:00
nuno maduro 5dc49a71d6 release: v4.7.5 2026-07-06 18:06:29 +01:00
nuno maduro 1adb484d3f chore: bumps deps 2026-07-06 18:05:35 +01:00
nuno maduro aadf7e92a6 fix: escape generated test case filename (#1746)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 13:18:26 +01:00
nuno maduro df42b9ed7b chore: style 2026-07-06 13:17:11 +01:00
dependabot[bot] 632ae79c8b build(deps): bump actions/cache in the github-actions group (#1745)
Bumps the github-actions group with 1 update: [actions/cache](https://github.com/actions/cache).


Updates `actions/cache` from 5.0.5 to 6.1.0
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/27d5ce7f107fe9357f9df03efb73ab90386fccae...55cc8345863c7cc4c66a329aec7e433d2d1c52a9)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-06 12:57:08 +01:00
nuno maduro b5fed82883 chore: style 2026-06-25 20:24:28 +01:00
nuno maduro 145e20db75 chore: merges 4.x 2026-06-25 20:20:20 +01:00
nuno maduro ee2e97e932 release: v4.7.4 2026-06-25 20:09:05 +01:00
nuno maduro b561236325 chore: bumps phpunit 2026-06-25 20:09:05 +01:00
dependabot[bot] e685179b7e Bump actions/checkout from 6.0.3 to 7.0.0 in the github-actions group (#1737)
Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 6.0.3 to 7.0.0
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/df4cb1c069e1874edd31b4311f1884172cec0e10...9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-25 20:03:39 +01:00
Conor Murphy ac8feafdcc fix: guard Tia argv scanning against non-string args (#1736)
The Tia plugin scans the raw argv with str_starts_with() in
argumentPresent() and hasExplicitPathArgument(). In the parallel worker
path (bin/worker.php) the unserialized argv can contain an integer
--random-order-seed value as a separate element, which made
str_starts_with() throw:

    TypeError: str_starts_with(): Argument #1 ($haystack) must be of
    type string, int given

This is the same class of bug as #1206, which was only fixed in
HandleArguments; it resurfaced in the newer Tia plugin. Cast each argv
element to string before scanning, mirroring the #1206 fix.

Adds a regression test, and updates the parallel count assertion and the
success snapshot to account for it.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:03:06 +01:00
Sonali dudhia b49cd150c9 feat: add toBeEmail expectation (#1735)
Adds `toBeEmail()` backed by `filter_var(FILTER_VALIDATE_EMAIL)`.
Mirrors the existing `toBeUrl()` pattern — no new dependencies, pure PHP.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 15:51:35 +01:00
Norby Baruani 5cfb4133bf [5.x] Make time-based sharding namespace-agnostic and forward --test-directory (#1677)
* refactor(shard): extract parseListTestsOutput for testability

* test(shard): characterize parseListTestsOutput current behavior

* fix(shard): parse any PHP FQCN namespace from --list-tests

* fix(shard): forward --test-directory to list-tests subprocess

* chore: lint + snapshot fixups

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(shard): make extracted helpers private, test via reflection

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* revert visual_snapshot_of_help_command_output

* revert visual_snapshot_of_help_command_output

* keep function removeParallelArguments

* strip --processes argument when building list-tests command

The removeParallelArguments method was not filtering --processes flags, causing the list-tests subprocess to fail when parallel execution was enabled. This prevented time-based sharding from working correctly with the --parallel option.

Now both --parallel/-p and --processes arguments are removed from the command used to enumerate tests, ensuring the subprocess runs successfully.

* test: re-add namespace-agnostic sharding tests

- 5.x merge kept describe()-style test file, dropped PR #1677 tests for parseListTestsOutput + buildListTestsCommand. Re-add them in matching style.
- Also fix removeParallelArguments test broken by merge: source array_values() + strips --processes, so expects ['bin/pest','tests/'].

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-14 13:09:30 +01:00
nuno maduro 3c8bae5f05 chore: bumps dependencies 2026-06-12 20:30:22 +01:00
nuno maduro b2998bc69e chore: updates snapshots 2026-06-12 20:30:16 +01:00
nuno maduro 3876093cd2 fix: missing array values 2026-06-12 20:22:47 +01:00
Moshe Brodsky 932f8bcc07 consistent sharding logic when no shards file (#1710) 2026-06-12 20:19:30 +01:00
oddvalue d393799d2a Optimize buildFilterArgument in Shard plugin for compact regex generation and add comprehensive tests (#1675) 2026-06-12 20:06:50 +01:00
nuno maduro 0d7814ca16 chore: update snapshots 2026-06-12 18:02:06 +01:00
flap152 8467c64c22 fix: popArgument drops duplicate arguments breaking --parallel --exclude-gropup= (#1674)
* fix: popArgument drops duplicate arguments breaking --parallel multi-exclude-group

Fixes #1437

* fix: ensure popArgument handles duplicate arguments

* fix: update expected test results and snapshots after rebase

---------

Signed-off-by: nuno maduro <enunomaduro@gmail.com>
Co-authored-by: nuno maduro <enunomaduro@gmail.com>
2026-06-12 17:58:37 +01:00
oddvalue 97714a7088 Enforce filter length validation and add tests for Shard plugin (#1673) 2026-06-12 17:56:32 +01:00
nuno maduro afb582616d chore: points to 5.x 2026-06-12 07:29:53 +01:00
nuno maduro 15e9b6a507 chore: snapshots 2026-06-12 07:22:13 +01:00
nuno maduro 520ce29376 Merge branch '4.x' into 5.x 2026-06-12 07:22:01 +01:00
nuno maduro 87882a8561 fix: exit code 2026-06-12 06:57:27 +01:00
nuno maduro 77ef7e0df1 ci: bumps setup-php pinned commit 2026-06-12 06:51:58 +01:00
dependabot[bot] 12100dd901 Bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions group (#1730)
Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 6.0.2 to 6.0.3
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-12 06:51:20 +01:00
nuno maduro 20c12d006e docs: fixes alt 2026-06-12 06:32:20 +01:00
nuno maduro 3aab02d2eb ci: fixes dd test 2026-06-11 10:50:24 +01:00
nuno maduro 553aac65e6 release: v4.7.3 2026-06-11 10:40:18 +01:00
Punyapal Shah be49a3ce18 Fix: dd (#1692)
* fix: update dd method to return never type

Co-authored-by: Copilot <copilot@github.com>

* fix: enhance var_dump calls to accept additional arguments

* fix: update dd method to handle paratest and collision printer environments

* test: add dd method tests for ExpectationFailedException in parallel mode

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: Copilot <copilot@github.com>
2026-06-11 10:16:07 +01:00
Sonali dudhia 774a340400 feat: add toBeUlid assertion and isUlid validation method (#1726) 2026-06-11 10:14:00 +01:00
Chetan 04c9d41895 fix: update gitlab urls for issues and prs to match new format (#1728)
* fix: update gitlab urls for issues and prs to match new format

Added an optional host parameter to the gitlab method, defaulting to 'gitlab.com'. Updated the issues and prs URLs to include '/-/' in the path, which is the new format for GitLab URLs. This change ensures that the URLs generated for GitLab projects are correct and reflect the new structure of GitLab's URLs for issues and merge requests.

Host parameter allows users to specify a custom GitLab instance if they are using a self-hosted version of GitLab, while still maintaining the default behavior for users who are using gitlab.com.

* fix: update gitlab method to use hostname parameter correctly
2026-06-11 10:13:26 +01:00
nuno maduro dfb7b870af fix: retry output expected string 2026-06-11 10:12:41 +01:00
nuno maduro 37821e1108 chore: fixes output snapshots on team city 2026-06-11 10:12:32 +01:00
nuno maduro cd711a25d5 chore: bumps phpunit 2026-06-11 10:08:36 +01:00
nuno maduro eee60c9e11 fix: duplicated team city output 2026-06-11 10:08:27 +01:00
jp c40c8dbc24 [4.x] Fix Checks (#1709)
* fix(composer): set root version for feature-branch CI

pest-plugin-browser ^4.3.1 requires pestphp/pest ^4.4.5 on the root package.
Without an explicit version, Composer infers dev-<branch> on PR branches,
which fails composer update before tests run.

* set root version of composer

* fix indent
2026-06-06 01:23:08 +01:00
dependabot[bot] 2d93c9c373 Bump shivammathur/setup-php in the github-actions group (#1707)
Bumps the github-actions group with 1 update: [shivammathur/setup-php](https://github.com/shivammathur/setup-php).


Updates `shivammathur/setup-php` from 2.37.0 to 2.37.1
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/accd6127cb78bee3e8082180cb391013d204ef9f...7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc)

---
updated-dependencies:
- dependency-name: shivammathur/setup-php
  dependency-version: 2.37.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 17:55:17 +01:00
dependabot[bot] 3d5bba93f8 Bump shivammathur/setup-php in the github-actions group (#1706)
Bumps the github-actions group with 1 update: [shivammathur/setup-php](https://github.com/shivammathur/setup-php).


Updates `shivammathur/setup-php` from 2.37.0 to 2.37.1
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/accd6127cb78bee3e8082180cb391013d204ef9f...7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc)

---
updated-dependencies:
- dependency-name: shivammathur/setup-php
  dependency-version: 2.37.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 17:55:13 +01:00
nuno maduro e5ab3af05b ci: update dependabot config (add cooldown, single update entry) 2026-06-04 17:54:45 +01:00
nuno maduro 79bc7a8257 Merge branch '4.x' into 5.x 2026-06-01 07:09:57 +01:00
nuno maduro 40b88b62ef release: v4.7.2 2026-06-01 07:08:59 +01:00
nuno maduro e3361bc321 fix: don't ob_start with pao 2026-06-01 07:08:50 +01:00
nuno maduro fc48c1bd1e Merge branch '4.x' into 5.x 2026-06-01 06:33:35 +01:00
nuno maduro 92e76eb5ab ci: runs ci only against stable 2026-06-01 06:32:29 +01:00
nuno maduro da726beffc chore: merges 4.x 2026-06-01 06:28:44 +01:00
nuno maduro 4ef12b9aac Merge branch '4.x' into 5.x 2026-06-01 06:25:56 +01:00
nuno maduro bd22f478b8 chore: fixes issues with contracts and symfony 8.1 2026-06-01 06:24:42 +01:00
nuno maduro eeaac34cf6 release: v4.7.1 2026-06-01 05:42:12 +01:00
nuno maduro b9b07d8983 chore: bump dependencies 2026-06-01 05:42:03 +01:00
nuno maduro 6aa7d2f891 fix: better fatal exceptions reporting 2026-06-01 05:41:58 +01:00
nuno maduro 4d550cecfd Merge branch '4.x' into 5.x 2026-05-13 12:20:46 +01:00
nuno maduro 1c21a7647a chore: fixes types 2026-05-13 12:20:00 +01:00
nuno maduro d649de1988 chore: add security policy 2026-05-12 02:48:25 +01:00
nuno maduro 783ca4bcd6 chore(deps): limit dependabot to maintained branches (4.x + 5.x) 2026-05-12 02:34:08 +01:00
nuno maduro ba07497219 chore: enable Dependabot version updates for GitHub Actions (#1700) 2026-05-11 22:12:07 -03:00
nuno maduro 34695843b3 chore: pin GitHub Actions to commit SHAs (#1699)
* chore: pin GitHub Actions to commit SHAs

* chore: pin GitHub Actions to commit SHAs
2026-05-11 22:12:04 -03:00
nuno maduro 1ca021dea6 chore: pin GitHub Actions to commit SHAs (#1695)
* chore: pin GitHub Actions to commit SHAs

* chore: pin GitHub Actions to commit SHAs
2026-05-12 02:08:47 +01:00
nuno maduro d17be9decd types 2026-05-04 08:02:09 -03:00
nuno maduro b828ddcec7 chore: style 2026-05-04 07:38:50 -03:00
nuno maduro f859bb179d Merge branch '4.x' into 5.x 2026-05-04 07:38:40 -03:00
nuno maduro 2fc75cfcf0 chore: updates snapshots 2026-05-03 13:09:32 -03:00
nuno maduro 6cc48f63f8 chore: style 2026-05-03 13:06:24 -03:00
nuno maduro e0419d1328 release: v4.7.0 2026-05-03 12:46:24 -03:00
nuno maduro faa6988801 Merge pull request #1682 from pestphp/feat/tia
[4.x] TIA Engine
2026-05-03 16:27:58 +01:00
nuno maduro c12247fafd Revert "wip"
This reverts commit 1b168aba1c.
2026-05-03 11:45:39 -03:00
nuno maduro 29b4452443 wip 2026-05-03 11:33:30 -03:00
nuno maduro 1b168aba1c wip 2026-05-03 11:30:13 -03:00
nuno maduro 6aabd977cd wip 2026-05-03 11:01:52 -03:00
nuno maduro a882543c53 wip 2026-05-03 10:57:28 -03:00
nuno maduro c250b9da4f wip 2026-05-03 10:37:17 -03:00
nuno maduro 46bc3dc628 wip 2026-05-03 10:34:44 -03:00
nuno maduro d3ce498b8a wip 2026-05-03 10:31:47 -03:00
nuno maduro e1a4b98b71 wip 2026-05-03 10:16:10 -03:00
nuno maduro 9afbcd5c18 wuip 2026-05-03 09:54:02 -03:00
nuno maduro 75593b6454 wip 2026-05-03 13:37:27 +01:00
nuno maduro 89590d6120 wip 2026-05-03 13:35:01 +01:00
nuno maduro fb0978c9bf wip 2026-05-03 13:26:48 +01:00
nuno maduro a3796daa42 wip 2026-05-03 13:24:10 +01:00
nuno maduro e3004db666 wip 2026-05-03 12:43:38 +01:00
nuno maduro 99cc4e0146 wip 2026-05-02 19:33:09 +01:00
nuno maduro a47e6f8fef wip 2026-05-02 19:30:14 +01:00
nuno maduro 536d79f765 wip 2026-05-02 19:20:55 +01:00
nuno maduro 65c0fbc528 wip 2026-05-02 19:07:41 +01:00
nuno maduro 9e4cf4b665 wip 2026-05-02 18:58:42 +01:00
nuno maduro 7bea819978 wip 2026-05-02 18:47:26 +01:00
nuno maduro 4280233b40 wip 2026-05-02 18:37:24 +01:00
nuno maduro d6db3a8a20 wip 2026-05-02 18:32:05 +01:00
nuno maduro 51c8ce4df6 wip 2026-05-02 18:31:32 +01:00
nuno maduro 5b8393b925 wip 2026-05-02 18:25:41 +01:00
nuno maduro e4d9b61fdf wip 2026-05-02 18:25:27 +01:00
nuno maduro e2d940cd53 wip 2026-05-02 18:25:21 +01:00
nuno maduro 380ccd30b4 wip 2026-05-02 18:03:25 +01:00
nuno maduro 31c200716d wip 2026-05-02 18:03:14 +01:00
nuno maduro 6add4da543 wip 2026-05-02 18:02:20 +01:00
nuno maduro 8ddcd3e853 wip 2026-05-02 18:02:13 +01:00
nuno maduro e3e178fd94 wip 2026-05-02 17:59:21 +01:00
nuno maduro 7b1ec9f003 wip 2026-05-02 17:59:13 +01:00
nuno maduro 1e48c5d473 wip 2026-05-02 17:59:00 +01:00
nuno maduro d00ec95dd9 wip 2026-05-02 17:58:55 +01:00
nuno maduro 89f3d6cb39 wip 2026-05-02 17:45:54 +01:00
nuno maduro a07a2e512a wip 2026-05-02 17:39:15 +01:00
nuno maduro 57eecb2b3d wip 2026-05-02 17:38:12 +01:00
nuno maduro 9f804dc954 wip 2026-05-02 17:38:08 +01:00
nuno maduro 7cbad4c589 wip 2026-05-02 17:38:01 +01:00
nuno maduro 5cae93b059 wip 2026-05-02 17:37:56 +01:00
nuno maduro df829ad19d wip 2026-05-02 17:37:47 +01:00
nuno maduro 635460653c wip 2026-05-02 17:37:34 +01:00
nuno maduro 1aa80dc398 wip 2026-05-02 17:18:35 +01:00
nuno maduro 8a14056111 wip 2026-05-02 17:15:46 +01:00
nuno maduro f247dd8e7b wip 2026-05-02 17:11:49 +01:00
nuno maduro 1c7c9754fd wip 2026-05-02 17:07:08 +01:00
nuno maduro 5f37939fda wip 2026-05-02 17:02:11 +01:00
nuno maduro 28305fcb7a wip 2026-05-02 16:35:52 +01:00
nuno maduro 5242803694 wip 2026-05-02 15:54:00 +01:00
nuno maduro 925935a7e8 wip 2026-05-02 15:33:38 +01:00
nuno maduro 460401c379 wip 2026-05-02 15:26:58 +01:00
nuno maduro 348b439172 wip 2026-05-02 15:15:53 +01:00
nuno maduro a4e77766c5 wip 2026-05-02 15:07:51 +01:00
nuno maduro 4a8c2d7d78 wip 2026-05-02 15:03:44 +01:00
nuno maduro 7d51601120 wip 2026-05-02 14:15:37 +01:00
nuno maduro 631bbe318b wip 2026-05-02 13:43:32 +01:00
nuno maduro 9b7c15d5b6 wip 2026-05-02 12:03:35 +01:00
nuno maduro 872796bd9b wip 2026-05-02 12:00:47 +01:00
nuno maduro c38d32ae86 wip 2026-05-02 09:49:33 +01:00
nuno maduro 6407c4f78f wip 2026-05-02 01:58:39 +01:00
nuno maduro 6e1bf63f6a wip 2026-05-02 01:40:35 +01:00
nuno maduro 1d3e8bb5dd wip 2026-05-02 01:03:06 +01:00
nuno maduro 3cc9b169e3 wip 2026-05-02 00:52:57 +01:00
nuno maduro c4911d046b wip 2026-05-02 00:06:04 +01:00
nuno maduro d0295f6168 wip 2026-05-01 23:59:25 +01:00
nuno maduro 21efbc3107 wip 2026-05-01 22:55:38 +01:00
nuno maduro e59b99cd73 wip 2026-05-01 22:51:55 +01:00
nuno maduro bf48e20880 wip 2026-05-01 22:36:15 +01:00
nuno maduro 53db68e005 wip 2026-05-01 22:31:00 +01:00
nuno maduro 34f1e9a7f2 fix 2026-05-01 21:51:09 +01:00
nuno maduro 57fd5ce042 wip 2026-05-01 21:50:56 +01:00
nuno maduro 3bcabfb63b fix 2026-05-01 21:50:52 +01:00
nuno maduro aa3a7c303a wip 2026-05-01 21:32:59 +01:00
nuno maduro 5c08a135f7 wip 2026-05-01 21:30:44 +01:00
nuno maduro 6e0e030d71 wip 2026-05-01 21:22:33 +01:00
nuno maduro b2c07561e7 wip 2026-05-01 20:54:24 +01:00
nuno maduro 97600b6f0b wip 2026-05-01 20:53:40 +01:00
nuno maduro 8a51f15d65 wip 2026-05-01 20:45:51 +01:00
nuno maduro a349f53964 wip 2026-05-01 20:42:14 +01:00
nuno maduro a725e774c0 wip 2026-05-01 20:28:39 +01:00
nuno maduro bed5e5b54a wip 2026-05-01 20:02:46 +01:00
nuno maduro 45b1d4ce20 wip 2026-05-01 19:50:54 +01:00
nuno maduro d106b70766 wip 2026-05-01 17:24:22 +01:00
nuno maduro 6ac6c1518e wip 2026-05-01 17:17:33 +01:00
nuno maduro fda515a17f wip 2026-05-01 16:42:01 +01:00
nuno maduro 0a97d3a288 asd 2026-05-01 15:33:06 +01:00
nuno maduro 3802fa80e6 asd 2026-05-01 15:19:19 +01:00
nuno maduro 5c3cbc14d2 wip 2026-05-01 15:07:10 +01:00
nuno maduro 6b9c768172 wip 2026-05-01 14:39:23 +01:00
nuno maduro 4a2fc179ae asd 2026-05-01 13:54:25 +01:00
nuno maduro b5bb2139dc wqdqwd 2026-05-01 12:57:12 +01:00
nuno maduro 07416a3c61 wip 2026-05-01 03:30:28 +01:00
nuno maduro 30b94e3034 qdw 2026-05-01 02:10:08 +01:00
nuno maduro be34eecb2f wip 2026-05-01 01:55:18 +01:00
nuno maduro 5d9f95f8d4 qwdqwd 2026-05-01 01:44:08 +01:00
nuno maduro 48b70a03d5 wip 2026-05-01 01:32:48 +01:00
nuno maduro 4b8642b972 wip 2026-05-01 00:48:31 +01:00
nuno maduro 8711d51eac fix 2026-05-01 00:19:44 +01:00
nuno maduro 58dfb6da64 wip 2026-04-30 22:12:53 +01:00
nuno maduro d7735d1faa wip 2026-04-30 22:00:56 +01:00
nuno maduro 6b59166f3c wip 2026-04-30 21:08:00 +01:00
nuno maduro 3a26028d17 wip 2026-04-30 20:58:06 +01:00
nuno maduro 3c91bf4ad2 wip 2026-04-30 20:51:57 +01:00
nuno maduro 6a434be0f6 wip 2026-04-30 20:45:36 +01:00
nuno maduro f355b99bbf wip 2026-04-29 22:59:56 +01:00
nuno maduro 95a00341e9 wip for now 2026-04-29 02:22:37 +01:00
nuno maduro 466259646d wip 2026-04-28 22:12:42 +01:00
nuno maduro 00f8d56083 wip 2026-04-28 21:41:20 +01:00
nuno maduro ca2dca592d wup 2026-04-28 21:34:40 +01:00
nuno maduro 405d8d4406 wip 2026-04-28 21:28:46 +01:00
nuno maduro b944ee5841 wip 2026-04-27 19:15:42 +01:00
nuno maduro f4e22dcafe wip 2026-04-27 18:57:41 +01:00
nuno maduro 339c1e8cac wip 2026-04-27 18:14:10 +01:00
nuno maduro d4c7362132 wip 2026-04-27 16:56:27 +01:00
nuno maduro 81bfdbf8fe wip 2026-04-27 13:16:05 +01:00
nuno maduro f45cbf43c5 wip 2026-04-27 13:11:48 +01:00
nuno maduro b9088d23fb wip 2026-04-27 13:03:07 +01:00
nuno maduro 7250185423 wip 2026-04-27 12:22:05 +01:00
nuno maduro e457eb0e9c wip 2026-04-27 11:15:59 +01:00
nuno maduro 48357c6f30 wip 2026-04-27 10:30:08 +01:00
nuno maduro b46f051550 wip 2026-04-23 17:32:27 -07:00
nuno maduro 3d3c5d41ac wip 2026-04-23 12:29:24 -07:00
nuno maduro caabebf2a1 wip 2026-04-23 10:56:17 -07:00
nuno maduro 470a5833d4 wip 2026-04-23 10:30:44 -07:00
nuno maduro c1feefbb9e wip 2026-04-23 09:44:12 -07:00
nuno maduro e876dba8ba wip 2026-04-23 09:29:56 -07:00
nuno maduro d9c18f9c02 wip 2026-04-22 09:03:10 -07:00
nuno maduro 660b57b365 wip 2026-04-22 08:42:32 -07:00
nuno maduro 68527c996f wip 2026-04-22 08:25:38 -07:00
nuno maduro c6a42a2b28 wip 2026-04-22 08:07:52 -07:00
nuno maduro fcf5c27914 chore: adds YouTube channel badge
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 21:56:04 -07:00
nuno maduro 856a370032 style 2026-04-21 09:44:26 -07:00
nuno maduro e24882c486 wip 2026-04-21 09:41:19 -07:00
nuno maduro 51fc380789 wip 2026-04-21 09:40:01 -07:00
nuno maduro f6609f4039 wip 2026-04-21 08:36:41 -07:00
nuno maduro 2941f9821f wip 2026-04-21 08:15:24 -07:00
nuno maduro ed399af43e wip 2026-04-21 07:41:50 -07:00
nuno maduro 0d66dc4322 chore: removes https 2026-04-21 07:26:19 -07:00
nuno maduro 7e4280bf83 chore: improves feedback 2026-04-21 07:13:08 -07:00
nuno maduro a5915b16ab wip 2026-04-20 20:58:38 -07:00
nuno maduro 1476b529a1 wip 2026-04-20 19:56:23 -07:00
nuno maduro 2892341c28 wip 2026-04-20 14:28:18 -07:00
nuno maduro 59e781e77b wip 2026-04-20 13:48:05 -07:00
nuno maduro 55a3394f8c wip 2026-04-20 13:31:43 -07:00
nuno maduro 0d99c33c4e wip 2026-04-20 13:16:59 -07:00
nuno maduro adc5aae6f8 wip 2026-04-20 13:00:41 -07:00
nuno maduro 980667e845 wip 2026-04-20 12:25:39 -07:00
nuno maduro 8c849c5f40 fix: missing warning 2026-04-20 12:18:32 -07:00
nuno maduro 47f1fc2d94 feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro 9c8033d60c feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro 42d1092a9e feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro c7e32f5d33 feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro d379128cc4 feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro f09d6f2064 feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro 494cc6e2a4 feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro f52a455773 fix 2026-04-20 10:09:07 -07:00
nuno maduro 184f5d2742 feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro 1d81069a2a feat(tia): continues to work on poc 2026-04-20 10:09:07 -07:00
nuno maduro 4b9bb77b54 feat(tia): adds poc 2026-04-20 10:09:07 -07:00
nuno maduro c440031e28 feat(tia): adds poc 2026-04-20 10:09:07 -07:00
nuno maduro 18bbca748f Merge branch '4.x' into 5.x 2026-04-18 07:03:46 -07:00
nuno maduro bff44562a9 release: v4.6.3 2026-04-18 06:51:25 -07:00
nuno maduro 9ebb990f96 chore: bumps phpunit 2026-04-18 06:51:17 -07:00
nuno maduro f142aad8ad Merge branch '4.x' into 5.x 2026-04-17 19:35:53 -07:00
nuno maduro cabff738f7 release: v4.6.2 2026-04-17 19:32:23 -07:00
nuno maduro 0746173a32 chore: bumps phpunit 2026-04-17 19:32:18 -07:00
nuno maduro 74a28d4f5e fix: wrapper runner 2026-04-17 07:29:03 -07:00
nuno maduro 6053e15d00 Merge branch '4.x' into 5.x 2026-04-17 06:07:14 -07:00
nuno maduro 87db0b4847 release: v4.6.1 2026-04-15 09:03:09 -07:00
nuno maduro 6ba373a772 chore: bumps phpunit 2026-04-15 08:49:34 -07:00
nuno maduro 945d476409 fix: allow to update individual screenshots 2026-04-15 08:34:06 -07:00
nuno maduro a8cf0fe2cb chore: improves CI 2026-04-15 08:20:50 -07:00
nuno maduro 2ae072bb95 feat: makes boot time much faster 2026-04-15 07:47:38 -07:00
nuno maduro 59d066950c chore: missing header 2026-04-15 07:47:22 -07:00
nuno maduro 0dd1aa72ef fix: updating snapshots in --parallel 2026-04-15 07:22:10 -07:00
nuno maduro 4e03cd3edb release: v4.6.0 2026-04-14 10:23:26 -07:00
nuno maduro eeab24e2bb Merge pull request #1671 from pestphp/feat/time-based-sharding
[4.x] Time based sharding
2026-04-14 18:18:09 +01:00
nuno maduro 9b64d5425a removes time balanced 2026-04-14 10:12:57 -07:00
nuno maduro 0acab1cbb4 wip 2026-04-14 09:53:57 -07:00
nuno maduro e616eab9fb wip 2026-04-14 09:36:38 -07:00
nuno maduro 7cbb1fcdb2 wip 2026-04-14 09:29:41 -07:00
nuno maduro cb5f6e1bd2 chore: style 2026-04-14 09:17:18 -07:00
nuno maduro 985dadd934 update 2026-04-14 09:16:32 -07:00
nuno maduro 10aee6045c feat(time-based-sharding): updates exception name 2026-04-14 09:08:52 -07:00
nuno maduro 4ac14b2528 feat(time-based-sharding): updates plugin 2026-04-14 08:34:41 -07:00
nuno maduro 2d649d765f chore: adjusts tests 2026-04-11 01:54:13 +01:00
nuno maduro 4fb4908570 Merge branch '4.x' into 5.x 2026-04-10 22:37:24 +01:00
nuno maduro 13c322bab3 ci: fixes incorrectCasing test 2026-04-10 20:51:40 +01:00
nuno maduro 3855249ce9 feat: adds --flaky cli option 2026-04-10 20:03:50 +01:00
nuno maduro f528bd8427 feat: adds flaky 2026-04-10 19:52:31 +01:00
nuno maduro acd8aafa63 fix: printer with --colors 2026-04-10 19:21:49 +01:00
nuno maduro e8d630e774 fix: printer with --colors 2026-04-10 19:21:41 +01:00
nuno maduro b6385dc865 fix: namespaces on toBeCasedCorrectly 2026-04-10 19:21:31 +01:00
nuno maduro 02dc8d7bcc chore: bumps deps 2026-04-10 19:21:18 +01:00
nuno maduro 729f18a152 fix: stacktrace with nested with calls 2026-04-10 17:25:05 +01:00
nuno maduro bdf60cea91 Merge pull request #1565 from louisbels/fix-dataset-method-chaining
fix: dataset inheritance with method chaining (beforeEach()->with(), describe()->with())
2026-04-10 17:05:25 +01:00
nuno maduro 3a8ee8291c Merge pull request #1628 from DevDavido/patch-1
fix: Parameter closure this type annotations in Functions
2026-04-10 16:58:39 +01:00
nuno maduro 654cb726c9 Merge branch '4.x' into patch-1 2026-04-10 16:58:26 +01:00
nuno maduro bce26aeaad Merge pull request #1634 from dbpolito/dataset_named_params
Dataset Named Parameters
2026-04-10 16:54:57 +01:00
nuno maduro 5948bcd71e chore: type improvements 2026-04-10 16:50:10 +01:00
nuno maduro 89006d83a9 chore: env 2026-04-10 16:27:44 +01:00
nuno maduro a8e974d64a chore: updates snapshots 2026-04-10 14:42:34 +01:00
nuno maduro 617b074049 Merge pull request #1626 from SimonBroekaert/feat/add_only-covered_option
feat: add '--only-covered' option to '--coverage'
2026-04-10 12:53:17 +01:00
nuno maduro 2eea71a664 Merge pull request #1624 from Vmadmax/fix/unicode-filename-filter
fix: preserve Unicode characters in filenames for --filter matching
2026-04-10 12:29:40 +01:00
nuno maduro 4b5374d507 Merge branch '4.x' into fix/unicode-filename-filter 2026-04-10 12:29:30 +01:00
nuno maduro 9085561ece chore: runs at 9am 2026-04-10 12:24:30 +01:00
nuno maduro b71bfc513a chore: guards 2026-04-10 12:23:49 +01:00
nuno maduro 75938ac9eb ci: updates deps 2026-04-10 12:18:28 +01:00
nuno maduro e766825f5b chore: fixes test:unit 2026-04-10 12:15:00 +01:00
nuno maduro 8a83a1a1a9 Merge pull request #1655 from stsepelin/fix/parallel-empty-suite-reporting
fix: nested dataset discovery and parallel invalid-dataset reporting
2026-04-10 11:59:48 +01:00
nuno maduro e63a886f98 Merge pull request #1661 from Avnsh1111/fix/opposite-expectation-truncated-message
fix: preserve full error message in not() expectation failures
2026-04-10 11:48:24 +01:00
nuno maduro 109bb22c5e Merge pull request #1615 from smirok/parallel-teamcity-concurrency-fix
fix: enhance support for --parallel and --teamcity arguments by restoring --teamcity for ParaTest and fixing teamcity output concurrency
2026-04-10 11:42:45 +01:00
nuno maduro 89dd212d84 Merge pull request #1580 from bibrokhim/patch-1
Add Rules to Laravel preset
2026-04-10 11:42:13 +01:00
nuno maduro cd07c6d966 Merge pull request #1569 from treyssatvincent/patch-1
add missing classes before toExtend on laravel preset
2026-04-10 11:41:53 +01:00
nuno maduro 8dddb47ad5 Merge branch '4.x' into fix-dataset-method-chaining 2026-04-10 11:41:13 +01:00
nuno maduro 3a6c2fab37 Merge pull request #1515 from yondifon/fix-trait-inheritance-detection
BugFix: Fix toUseTrait to detect inherited and nested traits
2026-04-10 11:39:56 +01:00
nuno maduro 281dbf6cf4 Merge pull request #1455 from SimonBroekaert/feat/to_be_cased_correctly_arch_test_assertion
feat: add toBeCasedCorrectly arch test assertion
2026-04-10 11:38:46 +01:00
nuno maduro 40c8429058 Merge pull request #1653 from orphanedrecord/fix/pest-php-stub-typo
Fix typo in Pest.php stubs
2026-04-10 11:35:41 +01:00
nuno maduro 8dd650fd05 Merge branch '4.x' into 5.x 2026-04-09 21:39:15 +01:00
nuno maduro d9d46c73f8 chore: stores statically the result 2026-04-09 21:36:49 +01:00
nuno maduro fbca346d7c fix: types 2026-04-07 14:40:55 +01:00
nuno maduro 3f13bca0f7 just in case 2026-04-07 14:37:13 +01:00
nuno maduro d3acb1c56a fix: coverage 2026-04-07 14:33:41 +01:00
avinash e601e6df31 fix: preserve full error message in not() expectation failures
When using not() expectations with custom error messages, the message
was truncated because throwExpectationFailedException() passed all
arguments through shortenedExport() which limits strings to ~40 chars.

Uses the full export() method for arguments instead of shortenedExport()
so custom error messages are displayed in their entirety.

Fixes #1533
2026-04-07 18:12:54 +05:30
nuno maduro 6fdbca1226 fix: parallel testing 2026-04-06 23:37:49 +01:00
nuno maduro 54359b895f Merge branch '4.x' into 5.x 2026-04-06 21:57:41 +01:00
nuno maduro e44c554a0b chore: bumps dependencies 2026-04-06 21:57:05 +01:00
nuno maduro 44c04bfce1 chore: bumps paratest 2026-04-06 14:41:38 +01:00
nuno maduro 271c680d3c Merge branch '4.x' into 5.x 2026-04-06 11:24:05 +01:00
nuno maduro 9797a71dbc feat(ai): allow temporary namesapce 2026-04-03 14:43:28 +01:00
nuno maduro c1a54df233 feat: --ai work in progress 2026-04-03 14:04:20 +01:00
nuno maduro 4a1d8d27b8 chore: bumps dependencies 2026-04-03 12:12:27 +01:00
nuno maduro 0f6924984c Merge branch '4.x' into 5.x 2026-04-03 12:02:36 +01:00
nuno maduro ce05ee9aad release: v4.4.4 2026-04-03 12:00:04 +01:00
nuno maduro 3d2ebdb273 bump: dependencies 2026-04-03 11:59:54 +01:00
nuno maduro 668ca9f5de feat: adds pao 2026-04-02 15:45:13 +01:00
nuno maduro f47b74445b Merge pull request #1657 from morpheus7CS/pint-formatting-rules-applied-to-stubs 2026-04-02 13:04:00 +01:00
Gal Jakic (We Wow Web) 6c42e7f4ea Laravel Pint default formatting applied to Pest-php.stub 2026-04-01 16:48:14 +02:00
dbpolito be3ff37517 Merge branch '4.x' of https://github.com/pestphp/pest into dataset_named_params 2026-03-26 18:08:26 -03:00
nuno maduro a087555383 bump: dependencies 2026-03-26 14:30:03 +00:00
Aleksandr Štšepelin 4b50cb486d Restore success snapshot coverage with lower memory limit 2026-03-25 23:59:29 +02:00
Aleksandr Štšepelin f7175ecfd7 Fix parallel dataset reporting and nested fixtures 2026-03-25 23:59:29 +02:00
Aleksandr Štšepelin 07737bc0b2 Fix parallel file selection and empty-suite reporting 2026-03-25 23:59:28 +02:00
nuno maduro f659a45311 Merge branch '4.x' into 5.x 2026-03-21 13:20:25 +00:00
nuno maduro e6ab897594 release: v4.4.3 2026-03-21 13:14:39 +00:00
nuno maduro a753b41409 chore: bumps phpunit 2026-03-21 13:14:35 +00:00
brianseymour 1a4c06bd6e Fix Pest comment typo while still honoring the Otwellian Waterfall 2026-03-18 20:51:45 -07:00
nuno maduro 12c1da29ee Merge branch '4.x' into 5.x 2026-03-10 21:21:24 +00:00
nuno maduro 5d42e8fe3a release: v4.4.2 2026-03-10 21:09:12 +00:00
nuno maduro 9d17b872dd chore: update stubs 2026-03-10 21:09:02 +00:00
nuno maduro 2a80101f42 chore: update styling 2026-03-10 21:06:28 +00:00
Nuno Maduro f7015fe59c chore: adjusts sponsors 2026-02-24 10:44:48 +00:00
nuno maduro 7281e0ded7 Add SerpApi to the list of sponsors
Add SerpApi as a sponsor in the README.
2026-02-20 01:18:43 +00:00
SimonBroekaert 1675dd1d41 chore: add tests for toBeCasedCorrectly() arch test 2026-02-17 19:03:46 +01:00
Nuno Maduro fa27c8daef chore: version 2026-02-17 17:52:40 +00:00
Nuno Maduro f0a08f0503 chore: missing types 2026-02-17 17:52:00 +00:00
Nuno Maduro 2c040c5b1f chore: style 2026-02-17 17:45:50 +00:00
Nuno Maduro a9ce1fd739 chore: code refactor 2026-02-17 17:45:34 +00:00
Nuno Maduro 3533356262 chore: updates snapshots 2026-02-17 17:44:56 +00:00
Nuno Maduro 4aa41d0b14 chore: bumps dependencies 2026-02-17 17:41:38 +00:00
Nuno Maduro e4ed60085c chore: bumps dependencies 2026-02-17 17:18:45 +00:00
Nuno Maduro e2b119655d chore: point pestphp dependencies to ^5.0.0 2026-02-17 17:13:36 +00:00
Nuno Maduro fcf5baf0a9 chore: start preparing for pest 5.x 2026-02-17 16:55:03 +00:00
SimonBroekaert df7b6c8454 feat: add toBeCasedCorrectly arch test assertion 2026-02-17 17:31:02 +01:00
Nuno Maduro 5de8693e3b chore: style 2026-02-17 16:15:58 +00:00
Nuno Maduro 7d80f1d20e chore: removes non used files 2026-02-17 15:34:32 +00:00
nuno maduro b3119cc120 Merge pull request #1562 from michaelw85/patch-1
[Fix] Pass test dir to worker
2026-02-17 15:33:16 +00:00
nuno maduro 4e294edf76 Merge pull request #1639 from imliam/patch-1
[Laravel Preset] Allow App\Http to be used in providers
2026-02-17 15:31:01 +00:00
Nuno Maduro f96a1b2786 release: v4.4.1 2026-02-17 15:27:18 +00:00
Nuno Maduro a49cf7edc5 ci: speed up ci 2026-02-17 15:21:20 +00:00
Nuno Maduro b0f6a74cb6 ci: makes jobs faster 2026-02-17 15:18:33 +00:00
Nuno Maduro aaa226f6a6 chore: tests against symfony 8 2026-02-17 15:14:45 +00:00
Nuno Maduro 69cb752d02 chore: bumps dependencies 2026-02-17 15:01:37 +00:00
Nuno Maduro cf00e58b7d chore: bumps dependencies 2026-02-17 11:22:04 +00:00
Liam Hammett 1f39b28e2c Allow App\Http to be used in providers 2026-02-16 00:25:47 +01:00
nuno maduro 9fcbca69d4 Update README.md 2026-02-13 10:41:22 +00:00
dbpolito b081584ab6 Improvements 2026-02-11 18:09:09 -03:00
dbpolito 6966802afc Cleanup 2026-02-11 18:02:21 -03:00
dbpolito c61dcad42b Dataset Named Parameters 2026-02-11 17:57:07 -03:00
David B. ec3e0b2d33 fix: Parameter closure this type annotations in Functions.php 2026-02-09 20:48:56 +01:00
SimonBroekaert c3620840b4 feat: add '--only-covered' option to '--coverage' 2026-02-06 11:57:21 +01:00
vmadmax 10a19f16ba refactor: simplify regex to use Unicode properties \p{L} and \p{N 2026-02-02 09:41:54 +01:00
vmadmax a956de5446 fix: preserve Unicode characters in class names for --filter matching 2026-02-02 09:01:24 +01:00
Nuno Maduro 3a4329ddc7 release: 4.3.2 2026-01-28 01:01:19 +00:00
Ilia Smirnov e6f511302b fix: enhance support for --parallel and --teamcity arguments by restoring --teamcity for ParaTest and fixing teamcity output concurrency 2026-01-27 16:47:24 +01:00
nuno maduro dd01229d7b Merge pull request #1606 from smirok/teamcity-fix-for-describe-tests-with-dataset
fix: replace `substr` with `mb_substr` in Str::beforeLast to ensure multibyte string compatibility and correct TeamCity test names for datasets in "describe" blocks
2026-01-15 01:52:01 +00:00
Ilia Smirnov c7e4efcea4 fix: replace substr with mb_substr in Str::beforeLast to ensure multibyte string compatibility and correct TeamCity test names for datasets in "describe" blocks 2026-01-14 00:55:35 +01:00
nuno maduro df3205e814 Merge pull request #1554 from pindab0ter/feature/extend-closure-this
Specify closure this for extend
2026-01-13 01:19:47 +00:00
Nuno Maduro bc57a84e77 release: 4.3.1 2026-01-04 11:29:59 -05:00
nuno maduro bc39830d8a chore: removes toHaveSuspiciousCharacters from php preset 2026-01-04 11:25:57 -05:00
nuno maduro 3a566b100e docs: why php 2026-01-04 11:04:03 -05:00
nuno maduro 9fe61e0e56 docs: update sponsors
Removed and updated sponsor links in the README.
2026-01-03 18:07:02 -05:00
Nuno Maduro e86bec3e68 release: 4.3.0 2025-12-30 14:48:33 -05:00
nuno maduro 58b8f3cc5d Merge pull request #1598 from Willem-Jaap/willem-jaap/pest-only-file-level
feat: add pest only function to mark each test in a file as only
2025-12-30 14:40:04 -05:00
Willem-Jaap c157b661f2 style: format 2025-12-30 09:26:35 +01:00
Willem-Jaap be90610f17 feat: add pest only function to mark each test in a file as only 2025-12-30 09:24:05 +01:00
nuno maduro 1701a306c3 Merge pull request #1590 from pestphp/feature/intl-exception
feat: show more useful exception when `intl` extension not found
2025-12-29 22:09:16 -05:00
nuno maduro 064ab3fc2e Merge pull request #1595 from bilboque/dirty-flag-not-found-in-help
feat: add --dirty documentation in --help
2025-12-29 22:08:12 -05:00
leo 44e315df98 feat: add --dirty documentation in --help 2025-12-22 11:02:28 +01:00
Nuno Maduro 62694c14b9 chore: style 2025-12-15 11:54:24 +00:00
nuno maduro 7c43c1c583 Merge pull request #1586 from jackbayliss/bump-checkout-action
[4.x] Bump checkout version from 5 to 6
2025-12-15 11:49:28 +00:00
Nuno Maduro 6a96aed654 feat: adds phpunit@12.5 support 2025-12-15 11:48:43 +00:00
Owen Voke b1c997a869 feat: show more useful exception when intl extension not found 2025-12-12 12:02:00 +00:00
Jack Bayliss b4172e2c2e bump checkout version from 5 to 6 2025-12-10 14:08:06 +00:00
Nuno Maduro ae419afd36 chore: support for symfony 8.0.0 components 2025-11-28 12:04:48 +00:00
nuno maduro 27aa305897 Merge pull request #1576 from Chris53897/feature/ci
ci: bump actions/checkout 4 => 5
2025-11-25 11:18:28 +00:00
Bakhromjon 0e7c2abe8b Add Rules to Laravel preset 2025-11-25 15:32:36 +05:00
Nuno Maduro f5820bd670 release: 4.1.5 2025-11-24 12:46:38 +00:00
Nuno Maduro 41fd831153 release: 4.1.4 2025-11-24 10:25:45 +00:00
Christopher Georg 51340439e8 ci: bump actions/checkout 4 => 5 2025-11-22 12:12:15 +01:00
Nuno Maduro 1a39826935 ci: tests against php 8.5 2025-11-20 02:59:27 +00:00
Nino bd5fed9e12 add missing classes before toExtend on laravel preset
Add missing `->classes()` before `->toExtend()` on the laravel preset for 2 namespaces.

Otherwise you can't use interfaces on theses namespace.

For example, if you create an interface `YourSuperRequestContract` on the `app/Http/Requests` namespace you will get this error:

```
Expecting 'app/Http/Requests/YourSuperRequestContract.php' to extend 'Illuminate\Foundation\Http\FormRequest'.
```
2025-11-10 15:26:56 +00:00
Louis 26345fd9f4 fix: dataset inheritance with method chaining (beforeEach()->with(), describe()->with())
Fixes issue where datasets were not applied when using method chaining patterns
like beforeEach()->with([...]) or describe()->with([...]) inside nested describe blocks.

Root cause: Multiple functions were using Backtrace::file() which returns the
immediate caller's filename. This breaks when called through method chaining
because the backtrace returns internal Pest files instead of the test file.

Solution: Use Backtrace::testFile() which walks the entire backtrace to find
the actual test file being executed. This matches the pattern already used by
test() and describe() functions.

Changes in src/Functions.php:
- beforeEach(): Use testFile() to fix beforeEach()->with() pattern
- afterEach(): Use testFile() for consistency with beforeEach()
- beforeAll(): Use testFile() for better error messages
- afterAll(): Use testFile() for better error messages
- pest(): Use testFile() to fix pest()->beforeEach() pattern
- uses(): Use testFile() for consistency with pest()
- covers(): Use testFile() for correct test file context
- mutates(): Use testFile() for correct test file context

Changes in src/PendingCalls/DescribeCall.php:
- __destruct(): Force BeforeEachCall destructor before test creation
- __call(): Use $this->filename instead of Backtrace, more efficient
- __call(): Properly merge describing context for nested describe blocks

Fixes patterns:
- beforeEach()->with([...])
- describe()->with([...])
- pest()->beforeEach()->with([...]

Tests passing:
- tests/Features/Describe.php (all dataset tests)
- tests/Hooks/BeforeEachTest.php (global hook execution)
- tests/Features/Expect/toMatchSnapshot.php (28 tests)
2025-11-05 17:46:52 +01:00
Michael Withagen ae1da79ac1 Pass test dir to worker
#1444 
Test directory argument is lost when spawning workers, add it again.
2025-11-05 17:15:51 +01:00
nuno maduro 00990efc97 Merge pull request #1544 from Se7en-RU/fix-testdox-columns-warning
Fix Undefined array key "testdox-columns" warning
2025-11-04 07:42:57 +00:00
Nuno Maduro 477d20a54f release: 4.1.3 2025-10-29 22:45:27 +00:00
Hans van Luttikhuizen-Ross b7b16096db Specify closure this for extend 2025-10-29 11:20:08 +01:00
Yury Kudryavtsev 4105e33c39 Fix Undefined array key "testdox-columns" warning
Fix Undefined array key "testdox-columns" warning
2025-10-21 11:44:55 +03:00
Nuno Maduro 08b09f2e98 release: 4.1.2 2025-10-05 20:09:49 +01:00
Nuno Maduro b0fab7e437 chore: uses phpunit@12.4 2025-10-05 20:09:42 +01:00
Nuno Maduro 8e3444e1db chore: bumps requirements 2025-10-01 14:30:25 +01:00
Malico dc9a1e8ace BugFix: Fix toUseTrait to detect inherited and nested traits 2025-09-20 19:06:23 +01:00
nuno maduro fc7a4182b5 adjusts sponsors 2025-09-18 20:13:01 +01:00
Nuno Maduro b7406938ac release: v4.1.0 2025-09-10 14:41:09 +01:00
Nuno Maduro 314caabd1d chore: improves types 2025-09-10 14:41:02 +01:00
Nuno Maduro 65cabf91b1 chore: bumps dependencies 2025-09-10 14:40:52 +01:00
nuno maduro f91c6c1e1e Update social media links in Thanks.php 2025-09-01 00:09:31 +01:00
nuno maduro 843dbbf18a Update README.md 2025-08-31 23:50:16 +01:00
Nuno Maduro 47fb1d7763 release: v4.0.4 2025-08-28 19:19:42 +01:00
Nuno Maduro 639df4cb43 chore: uses phpunit 12.3.7 2025-08-28 19:19:32 +01:00
Nuno Maduro e54e4a0178 release: 4.0.3 2025-08-24 15:17:23 +01:00
Nuno Maduro 7749775f50 chore: uses phpunit 12.3.6 2025-08-24 15:17:19 +01:00
nuno maduro f11f3aa0a4 Merge pull request #1464 from gehrisandro/sandro/prevent-duplicate-attributes
Prevent duplicate attributes
2025-08-23 22:43:15 +01:00
Sandro Gehri 33817013fe Prevent duplicate attributes 2025-08-23 12:35:32 +02:00
Nuno Maduro 7f11ace329 release: 4.0.2 2025-08-22 11:34:24 +01:00
Nuno Maduro 3d776f1f20 fix: revert reading coverage by chunks 2025-08-22 11:12:55 +01:00
Nuno Maduro d5ced0a5ca release: 4.0.1 2025-08-22 09:24:07 +01:00
Nuno Maduro af1e214be4 chore: bumps dependencies 2025-08-22 09:22:16 +01:00
nuno maduro 7f9b50974a Merge pull request #1460 from Admiral-Enigma/4.x
Cast "testdox-columns" to an int
2025-08-22 09:20:44 +01:00
Admiral-Enigma cd5272d8cc Cast "testdox-columns" to an int 2025-08-22 10:00:49 +02:00
Nuno Maduro a7b2039175 Merge branch '3.x' into 4.x 2025-08-20 20:14:15 +01:00
Nuno Maduro 72cf695554 release: 3.8.4 2025-08-20 20:12:42 +01:00
Nuno Maduro 50960a96e9 docs: adjusts release script 2025-08-20 15:30:59 +01:00
Nuno Maduro 507df757a1 release: 4.0.0 2025-08-20 15:29:23 +01:00
Nuno Maduro 8722b3fc3c docs: adjusts readme for 4.x 2025-08-20 15:03:36 +01:00
Nuno Maduro 19eca6e338 fix: skip windows for now 2025-08-20 14:50:15 +01:00
Nuno Maduro 6b523d6963 fix: puts back windows 2025-08-20 14:27:53 +01:00
Nuno Maduro a350545803 fix: windows check 2025-08-20 14:25:49 +01:00
Nuno Maduro 71c2e97c9f chore: bumps dependencies 2025-08-20 14:23:16 +01:00
Nuno Maduro 98a12012bf Merge branch '3.x' into 4.x 2025-08-20 14:22:03 +01:00
Nuno Maduro 027f4e4832 chore: bumps dependencies 2025-08-20 14:21:14 +01:00
Nuno Maduro 92523a6f39 chore: uses phpunit v12.3.5 2025-08-20 08:01:45 +01:00
Nuno Maduro ed38fb644f release: 4.0.0 rc 1 2025-08-20 07:58:51 +01:00
Nuno Maduro 39b66bf01d Merge branch '3.x' into 4.x 2025-08-20 07:04:50 +01:00
Nuno Maduro 165c879fe6 release: 3.8.3 2025-08-19 11:11:21 +01:00
Nuno Maduro 4c8bf4b2fd chore: uses phpunit v11.5.33 2025-08-19 11:11:10 +01:00
Nuno Maduro 1ee36f584d Merge branch '3.x' into 4.x 2025-08-15 17:12:37 +01:00
nuno maduro 1b0a846a81 Update README.md 2025-08-15 17:11:53 +01:00
Nuno Maduro e3e518747f release: beta 2 2025-08-11 15:45:37 +01:00
Nuno Maduro 0b96b8f630 Allows old version of phpunit for now 2025-08-06 13:17:17 +01:00
Nuno Maduro 711a60c2db release: beta 1 2025-08-05 17:44:12 +01:00
Nuno Maduro e7132fa012 fix: removes parse_str from security preset 2025-08-03 16:09:59 -06:00
Nuno Maduro 3b72bbd7fe fix: toMatchObject accept objects 2025-08-03 11:08:11 -06:00
Nuno Maduro 273edb864c chore: adjusts tests 2025-08-03 10:32:14 -06:00
Nuno Maduro fcb60f3c4a chore: improves wording 2025-08-03 09:57:52 -06:00
Nuno Maduro 91bb7589e2 fix: wording on exception 2025-08-03 09:31:31 -06:00
Nuno Maduro e524bf5f73 fix: filter by dataset name 2025-07-30 15:52:40 -06:00
nuno maduro 27414ce19f Merge pull request #1372 from soyuka/patch-1
throw exception instead of using Panic in the TestSuite.php
2025-07-30 18:27:13 +01:00
nuno maduro fbc9e704e2 Merge pull request #1424 from joelbutcher/fix/throw-if-tests-directory-does-not-exist
[3.x] Throw a fatal exception if the tests directory does not exist
2025-07-30 18:26:31 +01:00
Joel Butcher ee6b3ed062 fix: throw a fatal exception if the tests directory does not exist 2025-07-29 19:13:33 +01:00
Nuno Maduro 4c88590b89 feat: not.toHaveSuspiciousCharacters 2025-07-26 07:47:00 -06:00
Nuno Maduro 66e59efec6 Merge branch '3.x' into 4.x 2025-07-26 07:35:23 -06:00
Nuno Maduro f692be3637 chore: bumps dependencies 2025-07-26 07:34:25 -06:00
Nuno Maduro 127ad618d3 chore: style 2025-07-26 07:34:19 -06:00
nuno maduro da04ba62a8 Merge pull request #1287 from mortenscheel/patch-1
Add toNotIncludeSuspiciousCharacters() expectation
2025-07-26 04:30:22 +01:00
Nuno Maduro d187566e63 chore: updates snapshots 2025-07-25 21:29:26 -06:00
nuno maduro 3e86e158b2 Merge pull request #1304 from jshayes/fix/sibling-describe-blocks
Fix an issue with describe blocks with matching names
2025-07-26 04:26:19 +01:00
nuno maduro d6c6489e93 Merge branch '4.x' into fix/sibling-describe-blocks 2025-07-26 04:26:10 +01:00
nuno maduro ee70a3cfea Merge pull request #1319 from pestphp/allow-custom-arch-expectations
Allow custom arch expectations
2025-07-26 04:23:49 +01:00
Nuno Maduro 7a6f33f139 Merge branch '3.x' into 4.x 2025-07-25 21:20:15 -06:00
nuno maduro 55218bcf78 Merge pull request #1324 from bibrokhim/add-attributes-to-laravel-preset
Add Attributes to Laravel preset
2025-07-26 04:19:54 +01:00
Nuno Maduro e29302300f Merge branch '3.x' into 4.x 2025-07-25 21:17:48 -06:00
nuno maduro 2a47b514ec Merge pull request #1351 from cndrsdrmn/patch-1
fix: add ignoring clause for `App\Features\Concerns` on Laravel Preset
2025-07-26 04:17:21 +01:00
Nuno Maduro 222ed174bc style 2025-07-25 21:10:05 -06:00
Nuno Maduro 2aa32569f0 fix: adjust snapshots 2025-07-25 21:06:49 -06:00
nuno maduro 1d8d1a046f Merge pull request #1357 from drsdre/patch-1
toMatchArray/Object wrong field fix
2025-07-26 04:06:12 +01:00
nuno maduro 3d9ceb1cf2 Merge pull request #1373 from clementbirkle/3.x
fix: normalize snapshot paths for tests outside the main tests directory
2025-07-26 03:58:40 +01:00
nuno maduro 520a5fe29d Merge branch '4.x' into 3.x 2025-07-26 03:56:09 +01:00
Nuno Maduro de4409e368 fix: before all 2025-07-25 20:54:37 -06:00
Nuno Maduro 6d6e4e040f fix: wrong status code being used 2025-07-25 18:03:58 -06:00
Nuno Maduro aac08629f7 ci: removes testing against lowest 2025-07-23 08:26:12 +01:00
Nuno Maduro fe27012bbc style 2025-07-22 23:58:36 +01:00
Nuno Maduro f9901245f1 updates dependencies and snapshots 2025-07-22 23:51:32 +01:00
nuno maduro 21e22decf3 Merge pull request #1299 from FaSe22/handle-c-flag
fix: Pest ignores '-c' option
2025-07-22 23:12:07 +01:00
nuno maduro e513f76ea9 Merge pull request #1256 from mazesec/add-slugify-method
Add slugify Method to Str Class and toBeSlug Assertion to Expectation Class
2025-07-22 23:08:15 +01:00
Nuno Maduro be9c95e3bc feat: adds see 2025-07-22 23:06:43 +01:00
nuno maduro 9172721ce8 Merge pull request #1241 from mertasan/ide-reference
feat: Add `references` method for two-way test-source linking
2025-07-22 22:48:26 +01:00
Nuno Maduro 924dc016cc feat: skipLocally 2025-07-22 22:40:38 +01:00
Nuno Maduro f49b91ec0d fixes missing condition 2025-07-22 22:31:08 +01:00
Nuno Maduro 516ace85b4 fix: skipOnCI 2025-07-22 22:08:03 +01:00
Nuno Maduro f9814793dd feat: skipOnCI 2025-07-22 21:52:06 +01:00
Nuno Maduro 00572f5f8e feat: improves playwright 2025-07-22 11:39:34 +01:00
Nuno Maduro fb282b184e fix: return type 2025-07-21 13:32:03 +01:00
Nuno Maduro e0695a13cb feat: adds shell 2025-07-21 13:25:50 +01:00
nuno maduro 8f810bf2a2 Merge pull request #1408 from JonPurvis/remove-language-option
[4.x] Remove Language Option from Profanity Composer Script
2025-07-14 10:37:14 +01:00
nuno maduro 84636cee96 Merge branch '4.x' into remove-language-option 2025-07-14 10:37:08 +01:00
Nuno Maduro 0355119afc fix: snapshots feedback 2025-07-06 14:29:18 +01:00
Nuno Maduro 9d0410ee0b feat: adjusts only for browser debug 2025-07-06 13:45:33 +01:00
Nuno Maduro 0d148c2a67 chroe: bumps phpunit 2025-07-05 15:46:03 +01:00
Nuno Maduro 0f1e87c726 Adds output about sharding 2025-07-05 15:43:43 +01:00
Nuno Maduro 73bf579da3 chore: code refactor 2025-07-02 00:26:15 +01:00
Nuno Maduro 5def62018b fix: shard regex 2025-07-01 11:00:05 +01:00
Nuno Maduro d8e1b27491 ci: fix included version 2025-06-30 22:50:57 +01:00
Nuno Maduro 2ff4713968 ci: fix missing dep 2025-06-30 22:26:09 +01:00
Nuno Maduro 3f27352560 feat: adds --shard 2025-06-30 22:15:07 +01:00
Nuno Maduro af3fdceddb feat: adds phpunit 12.2.5 support 2025-06-28 18:31:45 +01:00
Nuno Maduro 3faeede1ef chore: fixes snapshots 2025-06-28 18:24:19 +01:00
Nuno Maduro 0bc3219a2b feat: moves visit to the core 2025-06-28 18:18:26 +01:00
Nuno Maduro a22013a7d3 fix: with types 2025-06-28 12:14:45 +01:00
Nuno Maduro 7fc69033f8 chore: adjusts style 2025-06-27 02:15:36 +01:00
Nuno Maduro ef76c04dbe feat: adds fixture 2025-06-27 02:15:28 +01:00
Nuno Maduro 7d77bbf1bb Merge pull request #1410 from JonPurvis/remove-period
Remove Period from `ShouldNotHappen` message
2025-06-23 19:29:01 +01:00
Nuno Maduro 163479ae60 chore: style 2025-06-16 10:14:16 +01:00
Nuno Maduro c3bfdf130e chore: type checking 2025-06-16 10:14:04 +01:00
Nuno Maduro 8c403a57c2 fix: upper case fix 2025-06-16 10:04:00 +01:00
JonPurvis 97c136cd94 link to issues page 2025-06-16 02:55:11 +01:00
JonPurvis d6cbd12d8b remove period from message 2025-06-16 02:51:48 +01:00
Nuno Maduro 49bf00024f fix: coverage when coverage file is over 2.4gb on mac os 2025-06-15 22:43:59 +01:00
JonPurvis dd44ac4195 remove language option from profanity composer script 2025-06-14 21:36:39 +01:00
Nuno Maduro 5d2aafd2a3 feat: --profanity 2025-06-12 00:38:05 +01:00
Nuno Maduro 0fc9d4dfe0 feat: adds phpunit 12.2.1 support 2025-06-08 15:29:23 +01:00
Nuno Maduro 02b1ffb334 chore: bump dependencies 2025-05-27 11:37:29 +01:00
Nuno Maduro c62cc3fef0 chore: adds pokio 2025-05-23 05:19:56 +01:00
Nuno Maduro 909d778da3 fix: undefined property 2025-05-21 02:00:15 +01:00
Nuno Maduro 7711a52fe9 Bumps dependencies 2025-05-09 13:10:29 +01:00
Nuno Maduro 99c9f4e5d8 Bumps dependencies 2025-05-03 11:58:03 +01:00
Nuno Maduro a310796165 Fixes filtering tests 2025-04-29 11:38:33 +01:00
Nuno Maduro db9243ca2e bump dependencies 2025-04-29 09:57:02 +01:00
Nuno Maduro 635e3b4c41 chore: deprecates php 8.2 2025-04-20 23:02:19 +01:00
Nuno Maduro 791734a29c Fixes tests 2025-04-20 22:19:25 +01:00
Nuno Maduro 8cfb0acf46 bump paratest 2025-04-20 21:51:01 +01:00
Nuno Maduro bf67407ba5 Merge pull request #1391 from MrPunyapal/feat/phpunit-12
[WIP] Feat: PHPUnit 12
2025-04-20 21:35:32 +01:00
Nuno Maduro efdc84e115 Merge branch '4.x' into feat/phpunit-12 2025-04-20 21:35:25 +01:00
Nuno Maduro d1608bf33d chore: prepares for 4.x 2025-04-20 21:33:50 +01:00
Punyapal Shah 4f6140fdb1 refactor: move test case initialization to a separate method in Testable trait 2025-04-20 15:37:02 +05:30
Punyapal Shah 442a58d07f refactor: comment arch presets in Arch.php 2025-04-20 15:19:56 +05:30
Punyapal Shah 19e9267021 fix: update PHPUnit version 2025-04-20 15:19:40 +05:30
Nuno Maduro c6244a8712 Release 3.8.2 2025-04-17 11:53:02 +01:00
Nuno Maduro eed68f2840 Adjusts sponsors 2025-04-13 17:15:23 +01:00
Nuno Maduro 6080f51a0b release: v3.8.1 2025-04-03 17:35:58 +01:00
Nuno Maduro e0f07be017 fix: init command detecting laravel 2025-04-03 17:23:39 +01:00
Nuno Maduro 42e1b9f17f release: v3.8.0 2025-03-30 18:49:10 +01:00
Nuno Maduro 0171617c1d chore: adjusts to new types on arch 2025-03-30 18:42:00 +01:00
Nuno Maduro 2e11e9e65d docs: adjusts readme 2025-03-29 18:23:23 +00:00
Nuno Maduro 4969526ef2 chore: bumps paratest 2025-03-29 17:57:53 +00:00
Nuno Maduro d7b1c36fdd Merge pull request #1341 from nuernbergerA/phpunit-overrides
chore: Sync overrides
2025-03-29 17:52:57 +00:00
Nuno Maduro 003fc96e8f release: 3.7.5 2025-03-29 17:48:00 +00:00
Nuno Maduro f68d11ccae chore: bumps dependencies 2025-03-29 17:44:06 +00:00
Clément Birklé e46d499384 add tests for snapshots external to the tests directory 2025-03-19 16:33:44 +01:00
Clément Birklé 490f321a0d fix: normalize snapshot paths for files outside tests directory 2025-03-19 15:59:45 +01:00
Antoine Bluchet 174645caa2 throw exception instead of using Panic 2025-03-18 14:49:32 +01:00
Nuno Maduro ed70c9dc2b refactor: type adjustments 2025-03-14 22:40:39 +00:00
Nuno Maduro 157a753d87 Update Pest.php.stub 2025-03-12 18:35:57 +00:00
AFS 2c3a53f6cd Remove reset of message
Reset approach was not the right one.
2025-02-25 15:44:32 +01:00
AFS 0bdaef29e9 Fix lingering }
Remove remaining } in toMatchObject.
2025-02-25 15:41:17 +01:00
AFS 1ad30a97b3 toMatchArray/Object wrong field fix
The functions toMatchArray and toMatchObject indicate that the wrong field is mismatching from the second loop on because the 'message' is overwritten and taken into the following loop. This patch creates a $second_message for the second test (value test) to keep the error message correct.
2025-02-25 15:34:37 +01:00
Candra Sudirman a5317c5640 fix: add ignoring clause for App\Features\Concerns on Laravel Preset 2025-02-08 00:07:21 +07:00
Nuno Maduro 66ceb64faa Updates tests 2025-02-03 13:36:47 +00:00
Nuno Maduro fa4098db8d Bumps dependencies 2025-02-03 13:30:45 +00:00
Nuno Maduro 4a987d3d5c release: 3.7.4 2025-01-23 14:03:29 +00:00
Nuno Maduro 4079a08f5f feat: adds --compact to coverage 2025-01-23 13:59:51 +00:00
Nuno Maduro e4aab77a34 release: 3.7.3 2025-01-23 12:51:02 +00:00
jshayes 50ff347b59 Pass description into describe call 2025-01-20 17:40:18 -05:00
jshayes b5b8fab09b Fix an issue where beforeEach/afterEach functions were called on other describe blocks with the same name 2025-01-20 17:36:22 -05:00
Adrian Nürnberger c4c9e915f4 cs 2025-01-20 09:50:36 +01:00
Adrian Nürnberger e834527db2 Update JunitXmlLogger.php
https://github.com/sebastianbergmann/phpunit/issues/6098
2025-01-20 09:39:10 +01:00
Adrian Nürnberger 23f130b0f9 Update JunitXmlLogger.php
from https://github.com/sebastianbergmann/phpunit/issues/5771
https://github.com/sebastianbergmann/phpunit/commit/c722fb259972a6c55fbb295169fd1a000b3d4c88
2025-01-20 09:38:24 +01:00
Adrian Nürnberger 0cb8c42497 sync missing listener 2025-01-20 09:36:48 +01:00
Adrian Nürnberger fe4b5e5e1f sync change 2025-01-20 09:35:44 +01:00
Adrian Nürnberger 8ee9d66d80 sync cs 2025-01-20 09:34:55 +01:00
Adrian Nürnberger 7760d945bb sync latest changes 2025-01-20 09:34:23 +01:00
Nuno Maduro 709ecb1ba2 chore: adjusts tests 2025-01-19 17:35:09 +00:00
Nuno Maduro 6afb36519d release: 3.7.2 2025-01-19 17:16:25 +00:00
Nuno Maduro 150bb9478d docs: adjusts sponsors 2025-01-08 01:09:20 +00:00
Nuno Maduro bf3178473d release: 3.7.1 2024-12-12 11:52:01 +00:00
Nuno Maduro d2eb94d723 chore: bumps phpunit and paratest 2024-12-12 11:50:43 +00:00
Nuno Maduro 9688b83a3d release: 3.7.0 2024-12-10 11:54:49 +00:00
Nuno Maduro 675372c794 chore: fixes types 2024-12-10 11:54:42 +00:00
Nuno Maduro c18636b3d5 chore: adds phpunit 11.5.0 support 2024-12-10 11:53:59 +00:00
Bakhromjon 1ac594bdf0 Add Attributes to Laravel preset 2024-12-06 16:07:59 +05:00
Nuno Maduro 145294a4a3 chore: style 2024-12-01 23:55:15 +00:00
Nuno Maduro c2cabaeae6 chore: fixes test suite 2024-12-01 23:16:34 +00:00
Nuno Maduro 918a8fc169 release: 3.6.0 2024-12-01 22:46:00 +00:00
Nuno Maduro 5d32dd0641 feat: option to coverage 2024-12-01 22:45:31 +00:00
Nuno Maduro 982353fb38 release: 3.5.2 2024-12-01 21:28:14 +00:00
Nuno Maduro 2eefa8b88d chore: adds phpunit 11.4.4 support 2024-12-01 21:26:11 +00:00
Nuno Maduro 787d5492ac chore: ignores temporary file 2024-12-01 20:41:34 +00:00
Nuno Maduro 06a0bd9b0b Bumps dependencies 2024-11-21 10:46:27 +00:00
olivernybroe 5331b44a18 Allow custom arch expectations 2024-11-20 11:54:36 +01:00
Nuno Maduro 91afc81222 Updates sponsors 2024-11-09 14:20:12 +00:00
Nuno Maduro 179d46ce97 release: v3.5.1 2024-10-31 12:12:45 -04:00
Nuno Maduro fa2bc1e536 chore: bumps dependencies 2024-10-31 12:12:37 -04:00
Nuno Maduro eaeb133c77 release: v3.5.0 2024-10-22 15:33:27 +01:00
Nuno Maduro cf57ea1f94 Merge pull request #1295 from jshayes/nested-describe
Support for nested describe blocks
2024-10-22 13:41:38 +01:00
Nuno Maduro 0b7f4f2384 Merge pull request #1301 from faissaloux/update-tests-badge
Update tests badge to v3
2024-10-20 12:48:07 +01:00
Nuno Maduro 2903a7e621 release: v3.4.2 2024-10-20 12:47:25 +01:00
Nuno Maduro b8964375c7 release: v3.4.1 2024-10-20 12:43:35 +01:00
Nuno Maduro bdcb883829 chore: bumps phpunit version 2024-10-20 12:43:28 +01:00
faissaloux 8a7e7f39ef update tests badge to v3 2024-10-17 02:33:25 +01:00
sebastianfaber 53c94600cb fix: handle -c flag same as --configuration 2024-10-16 22:19:08 +02:00
Nuno Maduro 67f217852c chore: uses stable version of collision and termwind 2024-10-15 17:17:09 +01:00
Nuno Maduro 1bad148487 release: v3.4.0 2024-10-15 15:13:19 +01:00
Nuno Maduro e24f137b8e fix: deprecation 2024-10-15 15:09:26 +01:00
Nuno Maduro 6d9189f3f5 feat: php 8.4 support 2024-10-15 15:04:30 +01:00
jshayes 6968094e2b Add tests 2024-10-13 10:39:17 -04:00
jshayes 9510d4a2f9 Change array type hint 2024-10-13 09:54:19 -04:00
jshayes cd2eb3504b Add helper to get last element of array 2024-10-13 09:47:54 -04:00
jshayes 7c639cdbbd Add more tests 2024-10-13 00:41:04 -04:00
Nuno Maduro 1513ede73b release: v3.3.2 2024-10-12 12:36:44 +01:00
Nuno Maduro 8c65197881 chore: bumps depndencies 2024-10-12 12:33:57 +01:00
jshayes a6cd83665c Execute all parent beforeEach and afterEach functions for each test 2024-10-11 23:51:18 -04:00
jshayes 0c57142c03 Fix an issue where a describe block will prevent a beforeEach call from executing 2024-10-11 21:24:08 -04:00
Nuno Maduro 3f65af9fdf Merge pull request #1292 from olivernybroe/policy-suffix
Add Policy suffix to policies
2024-10-11 09:34:05 +01:00
Nuno Maduro 42d89814e3 Merge pull request #1293 from AbdellahBoutmad/dir
modify test command in contrbuting.md
2024-10-11 09:33:41 +01:00
Nuno Maduro 1e3156a5b6 release: v3.3.1 2024-10-11 09:31:24 +01:00
Nuno Maduro 97713c0832 chore: bumps dependencies 2024-10-11 09:31:16 +01:00
abdellah boutmad 62b0e3c9df modify test command in contrbuting.md 2024-10-10 12:34:04 +01:00
olivernybroe 647de2f1cf Add Policy suffix to policies 2024-10-10 08:08:10 +02:00
Nuno Maduro 0a7bff0d24 release: v3.3.0 2024-10-06 19:25:27 +01:00
Nuno Maduro 7618434580 chore: uses phpunit v11.4.0 2024-10-06 19:25:20 +01:00
Morten Scheel dd7d150caa Add toNotIncludeSuspiciousCharacters() expectation 2024-10-04 13:44:10 +02:00
Nuno Maduro 1e0bb88b73 release: v3.2.5 2024-10-01 11:55:18 +01:00
Nuno Maduro 83b76d7c2e chore: bumps dependencies 2024-10-01 11:51:26 +01:00
Nuno Maduro 5a870b3940 chore: style changes 2024-10-01 11:51:16 +01:00
Nuno Maduro 1115c64186 chore: style changes 2024-10-01 11:48:14 +01:00
Nuno Maduro e38a271ca2 Merge pull request #1279 from midnite81/bug/declare-strict-types-with-comments-above
Strict types expectation allows for comments above declaration
2024-09-29 19:12:06 +01:00
Nuno Maduro 43703ab40a Merge pull request #1280 from CamKem/fix/middleware-method-preset
Fix: Add middleware to the allowable public methods for Laravel Preset
2024-09-29 19:11:40 +01:00
Cam Kemshal-Bell 86452765a4 fix: add middleware to the allowable public methods on the laravel preset 2024-09-29 16:07:39 +10:00
Simon Rogers b8a1b7e5cc Add tests for strict types expectation
Introduced new test cases to ensure strict type declaration handling. Files with and without strict types are tested, including scenarios with comments preceding the declaration. Updated the regex in `Expectation.php` to accommodate comments and whitespaces before the `declare(strict_types=1)` statement.
2024-09-28 17:31:33 +01:00
Nuno Maduro 5fe79d9c18 release: v3.2.4 2024-09-26 23:53:39 +01:00
Nuno Maduro 2744da4292 Merge pull request #1277 from MuhammedAlkhudiry/ignore-handler-in-laravel-preset
ignore App\Exceptions\Handler.php in arch laravel preset
2024-09-26 23:47:26 +01:00
Muhammed Alkhudiry 87f4e5e7b3 fix 2024-09-26 16:44:30 +03:00
Muhammed Alkhudiry bb3decf3cc ignore App\Exceptions\Handler.php in arch laravel preset 2024-09-26 16:41:43 +03:00
Nuno Maduro 4e2987d438 release: v3.2.3 2024-09-25 16:19:39 +01:00
Nuno Maduro a25158bce8 Merge pull request #1275 from jeremynikolic/laravel-presets-ignore-concerns
feat: add ignoring of Concerns folder inside App\Enums and App\Features
2024-09-25 16:16:26 +01:00
Jeremy Nikolic 49e77b1d4c feat: add ignoring of Concerns folder inside App\Enums and App\Features 2024-09-25 17:12:42 +02:00
Nuno Maduro 989e43d1a0 release: v3.2.2 2024-09-24 10:23:43 +01:00
Nuno Maduro 7cd42aafd8 fix: auto-complete on presets 2024-09-24 10:23:32 +01:00
Nuno Maduro 48a1de273f release: v3.2.1 2024-09-23 14:09:55 +01:00
Nuno Maduro 970e16e949 Ignores 2024-09-23 14:08:30 +01:00
Nuno Maduro 432ff221c6 fix: missing != and !== on new toUseStrictEquality arch expectation 2024-09-23 14:08:21 +01:00
Nuno Maduro a55da85dd2 release: v3.2.0 2024-09-23 13:14:03 +01:00
Nuno Maduro f291cd1603 chore: bumps dependencies 2024-09-23 13:11:49 +01:00
Nuno Maduro 5de0c2254a release: v3.1.0 2024-09-19 23:39:07 +01:00
Nuno Maduro b98ce0ced3 feat: adds mutates 2024-09-19 23:32:28 +01:00
Nuno Maduro 28772c2609 chore: dont run integration tests yet on php 8.4 2024-09-19 13:42:01 +01:00
Nuno Maduro 452ffaf8df chore: fixes windows build 2024-09-19 13:38:35 +01:00
Nuno Maduro e8338405b5 chore: tests against PHP 8.4 2024-09-19 13:36:41 +01:00
Nuno Maduro 1b014e4b18 release: v3.0.8 2024-09-19 13:04:42 +01:00
Nuno Maduro 034715e8b1 Merge pull request #1266 from julien-boudry/3.x
Fix #1265 -  issue parameter cannot be int (one done, pr, todo, wip)
2024-09-19 12:53:34 +01:00
Nuno Maduro 09eff785c4 release: v3.0.7 2024-09-19 12:29:38 +01:00
Nuno Maduro 22cc7805d7 chore: bumps dependencies 2024-09-19 12:29:38 +01:00
Julien Boudry 669dc0da71 Fix #1265 - issue parameter cannot be int (one done, pr, todo, wip) 2024-09-19 09:49:36 +00:00
Nuno Maduro 689da4ed4e Merge pull request #1254 from pestphp/bugfix/jira-url
fix: update assignee URL for Jira
2024-09-18 21:48:09 +01:00
tal7aouy 92bc1decd9 Add tests for toBeSlug method 2024-09-16 13:41:13 +01:00
tal7aouy e3bfcbe5f1 Add slugify method 2024-09-16 13:36:34 +01:00
Owen Voke 2f15861b0d fix: update assignee URL for Jira 2024-09-16 12:18:21 +01:00
Mert Aşan ba7eb70a5d Remove unnecessary property 2024-09-12 13:11:12 +03:00
Mert Aşan 74ff3b8cd9 Update src/PendingCalls/TestCall.php
Co-authored-by: Owen Voke <development@voke.dev>
2024-09-12 13:09:57 +03:00
Mert Aşan ab0b4a1b4e Update src/PendingCalls/TestCall.php
Co-authored-by: Owen Voke <development@voke.dev>
2024-09-12 13:09:45 +03:00
Mert Aşan 169b76458e make the name of the method plural 2024-09-12 11:15:30 +03:00
Mert Aşan 668685498f Fix phpdoc type-hints 2024-09-12 03:51:20 +03:00
Mert Aşan bab193e7e1 Fix property type 2024-09-12 03:24:36 +03:00
Mert Aşan f720be862e Add reference method 2024-09-12 02:45:37 +03:00
Nuno Maduro 0d50d35b5e release: v3.0.6 2024-09-11 18:59:43 +01:00
Nuno Maduro ce61ced8e1 Merge pull request #1237 from smirok/teamcity-fix-for-tests-with-dataset
fix: unify the `locationHint` prefix and prettify both `locationHint` and `name` parameters for testing with datasets
2024-09-11 18:51:04 +01:00
Ilia Smirnov 7227d24611 fix: unify the locationHint prefix and prettify both locationHint and name parameters for testing with datasets 2024-09-11 16:42:06 +02:00
Nuno Maduro 45f16484d5 Merge pull request #1235 from pestphp/3.x_herd_fix
Fixes parallel mutation testing when using Laravel Herd
2024-09-11 15:13:49 +01:00
lukeraymonddowning b16e8650da Fixes parallel mutation testing when using Laravel Herd. 2024-09-11 15:11:47 +01:00
lukeraymonddowning c2f30e0148 Fixes parallel mutation testing when using Laravel Herd. 2024-09-11 15:04:44 +01:00
Nuno Maduro 47ce45de56 release: v3.0.4 2024-09-11 00:48:29 +01:00
Nuno Maduro 32881774d2 fix: global afterEach being called twice 2024-09-11 00:40:41 +01:00
Nuno Maduro ea72461f1b release: v3.0.3 2024-09-10 22:29:09 +01:00
Nuno Maduro 49f15521e0 fix: printer method name 2024-09-10 22:29:01 +01:00
Nuno Maduro 95c5394b66 Bumps dependencies 2024-09-10 16:59:38 +01:00
Nuno Maduro 8de30cc8b7 release: v3.0.1 2024-09-09 15:29:44 +01:00
Nuno Maduro b17feef3f4 release: v3.0.0 2024-09-09 11:01:08 +01:00
Nuno Maduro d8e4a405ad chore: bumps dependencies 2024-09-09 10:57:31 +01:00
Nuno Maduro 04af21183a chore: fixes style 2024-09-09 10:53:45 +01:00
Nuno Maduro 09edaa9c2d chore: updates snapshots 2024-09-09 10:49:48 +01:00
Nuno Maduro fa41a67be9 chore: fixes type checking 2024-09-09 10:37:20 +01:00
Nuno Maduro 1a8f7025fa release: v3.0.0 2024-09-09 01:20:30 +01:00
Nuno Maduro 6afd2ec9df release: v3.0.0 2024-09-09 01:16:11 +01:00
Nuno Maduro d772069db2 release: v3.0.0 2024-09-09 01:12:41 +01:00
Nuno Maduro bb1a0b5e79 chore: locks phpunit 2024-09-09 01:12:33 +01:00
Nuno Maduro 3c333ebbb8 docs: updates banner 2024-09-09 01:10:33 +01:00
Nuno Maduro 868ac1840f chore: bumps dependencies 2024-09-08 23:59:12 +01:00
Nuno Maduro f857b4889c fix: load of mutate 2024-09-08 23:56:48 +01:00
Nuno Maduro c6b81e6e12 More fixes 2024-09-06 20:59:54 +01:00
Nuno Maduro c78d33b69e wip 2024-09-05 23:37:40 +01:00
Nuno Maduro bfd351783e wip 2024-09-05 22:41:26 +01:00
Nuno Maduro 526af2a75e wp 2024-09-05 21:56:51 +01:00
Nuno Maduro bf9d011045 Merge pull request #1220 from gehrisandro/fix/accept-traits-in-covers-function 2024-09-05 21:41:53 +01:00
Sandro Gehri aaee0e420b Fix covers function to accept traits 2024-09-05 22:36:34 +02:00
Nuno Maduro 772448db80 wip 2024-09-05 20:53:10 +01:00
Nuno Maduro e22fb2e6c0 w 2024-09-05 19:48:03 +01:00
Nuno Maduro 49aa44c470 w 2024-09-05 19:43:20 +01:00
Nuno Maduro 1cae035887 fix 2024-09-05 18:26:13 +01:00
Nuno Maduro 15183c4145 fix 2024-09-05 18:23:57 +01:00
Nuno Maduro ae288d1123 fix tests 2024-09-05 18:17:30 +01:00
Nuno Maduro 2d80ff19ec feat(mutate): only 2024-09-05 02:49:52 +01:00
Nuno Maduro c82f77ea75 fix 2024-09-05 02:05:28 +01:00
Nuno Maduro 5050ae304f fixes tests 2024-09-05 01:24:55 +01:00
Nuno Maduro 98e947e0cc more fixes 2024-09-05 01:19:17 +01:00
Nuno Maduro 68785986a0 fix 2024-09-05 00:55:37 +01:00
Nuno Maduro 8c078087ff Adds covered classes to mutation 2024-09-05 00:14:12 +01:00
Nuno Maduro 65f74f620c feat: adds covers 2024-09-05 00:10:29 +01:00
Nuno Maduro dd20323ca7 feat: custom presets 2024-09-04 20:53:33 +01:00
Nuno Maduro a7ca7afe4e fix: preset laravel 2024-09-04 11:51:01 +01:00
Nuno Maduro baf764f286 feat(mutate): requires it by default 2024-09-04 11:38:59 +01:00
Nuno Maduro 3a907c886b feat(mutate): requires it by default 2024-09-04 11:38:53 +01:00
Nuno Maduro e6823679dd feat: adds not->toHavePrivateMethods and related 2024-09-04 11:18:41 +01:00
Nuno Maduro a021b5b8c3 feat(laravel-preset): traits in traits folders 2024-09-04 11:17:32 +01:00
Nuno Maduro e2d360b1b5 chore: adjusts tests 2024-09-03 14:09:03 +01:00
Nuno Maduro 8920b850e1 feat(arch-presets): adds another rule to laravel preset 2024-09-03 14:08:11 +01:00
Nuno Maduro 509074b3fa chore: bumps dependencies 2024-09-03 14:07:56 +01:00
Nuno Maduro 6f9ea14c68 Merge pull request #1215 from jbrooksuk/patch-1
Add `dump` to Laravel preset
2024-09-03 12:17:01 +01:00
Nuno Maduro 60dcfb36a8 Merge pull request #1207 from JonPurvis/coverage-fix
Fix coverage result for 99.95%+
2024-09-03 12:16:37 +01:00
Nuno Maduro ca25d5b13f Merge pull request #1208 from benjamincrozat/patch-1
Exclude Global Scopes from the required "Model" suffix
2024-09-03 12:15:59 +01:00
Nuno Maduro 5cba63e2ba Merge pull request #1209 from phh/patch-1
chore: Use new rector syntax
2024-09-03 12:15:43 +01:00
James Brooks dd45a5c655 Add dump to Laravel preset 2024-09-03 12:15:25 +01:00
Nuno Maduro dde943b993 refacto: toHaveMethod and toHaveMethods 2024-09-02 19:38:38 +01:00
Nuno Maduro bb8677549a chore: fixes snapshots 2024-09-02 18:30:12 +01:00
Nuno Maduro 5ae5ac9a54 fix: removes both toHaveMethod and toHaveMethods 2024-08-28 16:30:29 -05:00
Patrick Hesselberg cc6f1b43f6 chore: Remove InlineConstructorDefaultToPropertyRector rule
Since its already a part of the codeQuality ruleset.
2024-08-28 08:26:47 +02:00
Patrick Hesselberg 88197fe1d5 chore: use new rector syntax 2024-08-28 08:22:18 +02:00
Benjamin Crozat f53f855e9c Exclude scopes from the required "Model" suffix 2024-08-27 19:57:09 +02:00
JonPurvis df69b0b791 fix coverage result for 99.95%+ 2024-08-26 21:58:16 +01:00
Nuno Maduro ecdbe7a472 release: 3.0.0-rc.1 2024-08-22 21:36:19 +01:00
Nuno Maduro 2c6c3119d2 Merge branch '2.x' into 3.x 2024-08-22 21:21:52 +01:00
Nuno Maduro 9ceb0834ae chore: updates snapshots 2024-08-22 21:07:39 +01:00
Nuno Maduro 86d2191cae chore: refactor TestClosureMustNotBeStatic 2024-08-22 20:59:42 +01:00
Nuno Maduro 748beb17d5 chore: adjusts memory limit 2024-08-22 20:59:42 +01:00
Nuno Maduro 7ba235f61a Merge pull request #1129 from tomb1n0/bugfix/alwaysCallTeardownRegardlessOfExceptions
[Bug] Always call parent teardown even if an exception is thrown
2024-08-22 20:50:59 +01:00
Nuno Maduro 700bd517f4 Merge pull request #1117 from peterfox/bug/catch-static-closures
[Bug] provided explaination for static closures
2024-08-22 20:33:58 +01:00
Nuno Maduro cbcfa2c5e2 Merge pull request #1100 from faissaloux/fix-use-strict-types
Fix `toUseStrictTypes`
2024-08-22 20:32:21 +01:00
Nuno Maduro 243e45a551 Merge pull request #1097 from arifszn/2.x
[2.x] Modify `Result::exitCode` logic to address warning handling with `--fail-on-warning`
2024-08-22 20:31:34 +01:00
Nuno Maduro 9b11857ae6 chore: updates snpahosts 2024-08-20 22:59:25 +01:00
Nuno Maduro bb29e97200 Merge branch '2.x' into 3.x 2024-08-20 22:57:52 +01:00
Nuno Maduro 8fe2698c28 chore: fixes test suite 2024-08-20 22:57:10 +01:00
Nuno Maduro 823c3d4b17 chore: updates snapshots 2024-08-20 22:49:23 +01:00
Nuno Maduro 39c9b15bc0 Update visual_snapshot_of_help_command_output.snap 2024-08-20 22:44:39 +01:00
Nuno Maduro b13acb630d release: 2.35.1 2024-08-20 22:41:50 +01:00
Nuno Maduro 172d94c0ca chore: bumps depedencies 2024-08-20 22:41:07 +01:00
Nuno Maduro f72d6f2278 Removes PHP 8.4 2024-08-20 22:39:00 +01:00
Nuno Maduro 71811d6e3a Bumps PHP version 2024-08-20 22:37:34 +01:00
Nuno Maduro dfdbd357e9 chore: bumps dependencies 2024-08-20 22:37:27 +01:00
Nuno Maduro 4d9ed8768c fix: panic with TestDescriptionMissing 2024-08-19 02:24:18 +01:00
Nuno Maduro 6638d279e1 preset(strict): final first 2024-08-12 21:39:41 +01:00
Nuno Maduro b5cd0ffb65 chore: updates snapshots 2024-08-12 01:13:33 +01:00
Nuno Maduro 7ef40760c2 fixes filter 2024-08-12 00:46:31 +01:00
Nuno Maduro ce4495b093 w 2024-08-11 23:41:19 +01:00
Nuno Maduro 868547114f w 2024-08-11 22:52:16 +01:00
Nuno Maduro 9c07dd9990 wip 2024-08-11 15:47:48 +01:00
Nuno Maduro 09beb812d4 fix 2024-08-10 17:27:21 +01:00
Nuno Maduro 4e98dfe3c3 pr 2024-08-10 16:57:48 +01:00
Nuno Maduro ad6dca94fa Adds done 2024-08-10 14:27:18 +01:00
Nuno Maduro 86f46c2efd Adds alias 2024-08-10 13:56:40 +01:00
Nuno Maduro ccfd4fd77a beta 2 2024-08-10 11:49:44 +01:00
Nuno Maduro e4d2dac354 beta 2 2024-08-10 11:49:40 +01:00
Nuno Maduro 7e4c51e13d Style 2024-08-10 11:48:32 +01:00
Nuno Maduro aacd874ebe fix 2024-08-09 00:38:16 +01:00
Nuno Maduro 1c236aab26 fixes and styles 2024-08-09 00:30:06 +01:00
Nuno Maduro b6bf01148f feat: toHavePrivateMethodsBesides, toHaveProtectedMethodsBesides, toHavePublicMethodsBesides 2024-08-09 00:24:24 +01:00
Nuno Maduro 347bcfd8a8 Bumps dependencies 2024-08-09 00:24:09 +01:00
Nuno Maduro 0ced3171b0 fix: missing methods 2024-08-07 11:30:19 +01:00
Nuno Maduro 38638e865f chore: fixes tests 2024-08-07 11:27:30 +01:00
Nuno Maduro adbc6b4a89 chore: fixes tests 2024-08-07 11:26:56 +01:00
Nuno Maduro 9353015691 feat(presets): reworks code 2024-08-07 11:08:29 +01:00
Nuno Maduro 17058d1709 chore: bumps dependencies 2024-08-07 11:06:41 +01:00
Nuno Maduro 8ffa66dc7c fix(autoloader): issue when errors when loading the file 2024-08-07 11:06:34 +01:00
Nuno Maduro 0697555dc2 chore: adjusts sponsors 2024-08-05 10:42:52 +01:00
Nuno Maduro af680ca8aa feat(todos): adjusts params order 2024-08-03 18:48:53 +01:00
Nuno Maduro 651aab560c Allows to set context on todos 2024-08-03 18:42:31 +01:00
Nuno Maduro 41e50cac05 Adds assignees 2024-08-03 17:05:34 +01:00
Nuno Maduro 6fb1133d52 Adjusts for Collision 8.4 2024-08-03 16:36:01 +01:00
Nuno Maduro 63ba117b33 Fixes tests 2024-08-03 00:13:01 +01:00
Nuno Maduro 33d36d77cb Merge branch '2.x' into 3.x 2024-08-02 23:53:26 +01:00
Nuno Maduro 4e7db91ee8 chore: updates dependencies 2024-08-02 23:46:31 +01:00
Nuno Maduro d0ff2c8ec2 release: 2.35.0 2024-08-02 11:57:29 +01:00
Nuno Maduro 5e41e546a0 chore: style changes 2024-08-02 11:53:24 +01:00
Nuno Maduro 45cce6ce93 Style 2024-07-24 21:54:52 +01:00
Nuno Maduro 6a8a4f3243 Merge pull request #1194 from dmason30/patch-1
Include method name in toHaveMethod error message
2024-07-20 18:29:37 +01:00
Nuno Maduro 101e26749a fix: properties and methods documented 2024-07-20 17:45:41 +01:00
Nuno Maduro b3c8c24aea Reworks 2024-07-20 14:15:28 +01:00
Dan Mason ef29b4f091 Include method name in toHaveMethod error message 2024-07-19 15:30:43 +01:00
Nuno Maduro a7553b7593 feat(to-have-all*): improvements 2024-07-19 14:32:46 +01:00
Nuno Maduro f2691623cf feat: toHaveAllMethodsDocumented and toHaveAllPropertiesDocumented 2024-07-19 14:03:59 +01:00
Nuno Maduro 99107544ff chore: fixes types 2024-07-18 20:45:47 +01:00
Nuno Maduro 2e411893d2 feat: adds toHaveLineCountLessThan 2024-07-18 20:43:39 +01:00
Nuno Maduro 135c8a0d46 docs: updates features 2024-07-18 20:43:11 +01:00
Nuno Maduro 1cdd7d6744 chore: updates dependencies 2024-07-18 20:42:52 +01:00
Nuno Maduro fca0c3a10c chore: bumps dependencies 2024-07-16 23:52:00 +01:00
Nuno Maduro 0331a87be1 feat: adds toHaveFileSystemPermissions expectation 2024-07-14 23:16:04 +01:00
Nuno Maduro ef120125e0 release: 2.34.9 2024-07-11 09:36:26 +01:00
Nuno Maduro 8a9a416133 chore: bumps dependencies 2024-07-11 09:35:43 +01:00
Nuno Maduro 4783334f15 chore: style 2024-07-11 09:35:38 +01:00
Nuno Maduro d3be6b72dd Merge pull request #1189 from MrPunyapal/fix/breaking-in-windows
feat: update filename check in Configuration class
2024-07-09 15:58:14 +01:00
Punyapal Shah 7d3118db65 feat: update filename check in Configuration class 2024-07-09 20:24:28 +05:30
Nuno Maduro eac7abebcb Merge pull request #1184 from edjw/patch-1
Include ds from Laradumps in ArchPresets
2024-07-07 22:47:49 +01:00
Nuno Maduro 6896dd486a fix: laravel preset 2024-07-07 22:46:15 +01:00
Nuno Maduro 1e5b399603 feat: adjusts default conf 2024-07-06 19:30:05 +01:00
Nuno Maduro ccdf43726d fix: pest() 2024-07-06 18:25:43 +01:00
Nuno Maduro 67dbce2d42 feat: more presets rules 2024-07-06 16:45:58 +01:00
Nuno Maduro ee32f25485 feat: pr and issue 2024-07-04 00:53:58 +01:00
Nuno Maduro 09ca7a1fd5 chore: features 2024-07-03 22:18:11 +01:00
Nuno Maduro dade84e6b6 fix: handle arguments 2024-07-03 22:17:47 +01:00
Nuno Maduro 1c4bc8b1dc fix: before each globally 2024-07-03 22:15:11 +01:00
Ed Johnson-Williams 0d2f3eb60e Include ds from Laradumps in ArchPresets 2024-06-28 22:33:15 +01:00
Nuno Maduro 29787d1ff1 Update Features.md 2024-06-27 11:32:55 +01:00
Nuno Maduro 474b9b7e17 chore: adjusts tests 2024-06-27 01:41:34 +01:00
Nuno Maduro 5c3bf469d5 feat: note() 2024-06-27 01:26:54 +01:00
Nuno Maduro d9252e85d6 chore: optimize preset 2024-06-26 22:32:58 +01:00
Nuno Maduro 0289466ce8 Allows other folders to be queuable 2024-06-25 23:06:25 +01:00
Nuno Maduro 57ef989df8 feat(presets): improve laravel preset 2024-06-25 22:02:23 +01:00
Nuno Maduro 9d02b649e2 feat: adds toUseTraits expectation 2024-06-25 21:56:08 +01:00
Nuno Maduro 00643312b7 chore: updates snapshots 2024-06-25 21:13:05 +01:00
Nuno Maduro eac6585a2e refactor: logger 2024-06-25 21:09:10 +01:00
Nuno Maduro 04c39bae2e Adjust style 2024-06-25 21:02:52 +01:00
Nuno Maduro c65755725d feat: improves type hinting with @param-closure-this 2024-06-15 15:37:35 +01:00
Nuno Maduro ec58040f6e feat: improves type hinting 2024-06-15 15:24:03 +01:00
Nuno Maduro 3fa73e40cc Bumps dependencies 2024-06-15 15:23:05 +01:00
Nuno Maduro c07513c6a0 chore: fixes tests 2024-06-11 23:11:38 +01:00
Nuno Maduro 85d91d5652 Merge pull request #1170 from pestphp/feat/presets
[3.x] Arch Presets
2024-06-11 22:54:12 +01:00
Nuno Maduro 02bae3b649 Merge branch '3.x' into feat/presets 2024-06-11 22:54:05 +01:00
Nuno Maduro 3ba2b68afc Merge pull request #1178 from MrPunyapal/feat/some-functions-to-avoid
Feat: some functions to avoid
2024-06-11 22:03:29 +01:00
Punyapal Shah ed3ec79aab pint 2024-06-11 21:26:40 +05:30
Punyapal Shah 894dca83f7 chore: update Arch.php to ignore 'assert' function in presets 2024-06-11 21:24:57 +05:30
Punyapal Shah b873b89b62 Restrict additional dangerous functions in Security.php 2024-06-11 21:20:32 +05:30
Punyapal Shah 1bee283d15 Update Base.php to include 'ereg' and 'eregi' in the list of restricted functions 2024-06-11 21:09:15 +05:30
Punyapal Shah 7b4dd410f6 chore: update Arch.php to ignore additional functions in presets 2024-06-11 21:08:02 +05:30
Punyapal Shah 4396ee2e03 feat(presets): update Security.php to restrict additional dangerous functions 2024-06-11 21:02:19 +05:30
Punyapal Shah e4550c8d51 Update Base.php to include 'global' in the list of restricted functions 2024-06-11 20:58:52 +05:30
Punyapal Shah a25cfb435c Update Base.php to include 'mysql_*' in the list of restricted functions 2024-06-11 20:56:49 +05:30
Nuno Maduro fe4fe12df1 chore: updates snapshots 2024-06-10 23:10:20 +01:00
Nuno Maduro 3bcc99a372 Merge branch '2.x' into 3.x 2024-06-10 23:04:34 +01:00
Nuno Maduro e8f122bf47 release: 2.34.8 2024-06-10 23:02:16 +01:00
Nuno Maduro 9fc607a2b8 Fixes wrong stub 2024-06-10 22:52:21 +01:00
Nuno Maduro 3ad788dddb feat(presets): adjusts laravel preset 2024-06-10 22:38:40 +01:00
Nuno Maduro 2108d18be5 Merge pull request #1176 from MrPunyapal/feat/laravel-preset
Feat: laravel preset
2024-06-10 22:36:21 +01:00
Nuno Maduro aa4a5fcd15 Merge pull request #1175 from Shotman/preset-buggregator-trap
Add trap to list
2024-06-10 22:34:02 +01:00
Punyapal Shah 1688888f15 feat(presets): update Laravel preset to include expectation for Laravel service provider suffix 2024-06-10 21:49:03 +05:30
Punyapal Shah 40539ca720 feat(presets): update Laravel preset to include expectation for Laravel service provider suffix 2024-06-10 21:48:25 +05:30
Punyapal Shah 7144d6dfbd feat(presets): add expectation for Laravel notification class 2024-06-10 21:47:12 +05:30
Punyapal Shah 7240250a15 feat(presets): add expectation for Laravel job handle method 2024-06-10 21:47:05 +05:30
Punyapal Shah 508e42a2ff feat(presets): update Laravel preset to include expectation for Laravel request suffix 2024-06-10 21:45:17 +05:30
Punyapal Shah d8156fee53 feat(presets): add expectation for Laravel middleware handle method 2024-06-10 21:44:49 +05:30
Punyapal Shah abc245bf85 feat(presets): add expectation for Laravel command handle method 2024-06-10 21:40:16 +05:30
Punyapal Shah 65dacd5647 feat(presets): add expectation for Laravel mail class 2024-06-10 21:38:20 +05:30
Punyapal Shah 917f7a64a0 feat(presets): add expectation for Laravel exception suffix 2024-06-10 21:36:59 +05:30
Punyapal Shah e8b09d6f8c feat(presets): add expectation for Laravel command suffix 2024-06-10 21:35:42 +05:30
Shotman 0c4e6de823 Add trap to list
Adding trap function from https://github.com/buggregator/trap docs:  https://docs.buggregator.dev/trap/getting-started.html
2024-06-10 18:03:46 +02:00
Punyapal Shah 52282cc590 feat(presets): add expectation for Laravel request suffix 2024-06-10 21:29:12 +05:30
Punyapal Shah a46142d8c7 feat(presets): update Laravel preset to exclude models with suffix 'Model' 2024-06-10 21:28:08 +05:30
Punyapal Shah 241dcf8f34 feat(presets): add expectation for Laravel controller suffix 2024-06-10 21:25:51 +05:30
Nuno Maduro 927cee609e Update src/ArchPresets/Base.php
Co-authored-by: Joshua Gigg <giggsey@gmail.com>
2024-06-10 15:19:55 +01:00
Nuno Maduro 98e4ebb8fd feat(presets): fixes return type 2024-06-10 11:40:25 +01:00
Nuno Maduro c173e3e86b feat(presets): allows usage of laravel preset 2024-06-10 11:39:31 +01:00
Nuno Maduro c73655f4f9 feat(presets): adds xdebug_* functions 2024-06-10 11:22:51 +01:00
Nuno Maduro 4ac1c6efc6 feat(presets): adds goto 2024-06-10 11:16:46 +01:00
Nuno Maduro 2e5a308b0d Merge pull request #1174 from ClaraLeigh/feat/presets
feature(presets): Add security preset
2024-06-10 11:13:50 +01:00
Clara 7b8e4aec08 feature(presets): Add security preset
Looks for functions often seen as insecure
2024-06-10 11:44:45 +10:00
Nuno Maduro 13fb66f15c feat(presets): ignores ddd 2024-06-10 02:22:41 +01:00
Nuno Maduro dd1bd92910 feat(presets): more rules 2024-06-10 01:15:21 +01:00
Nuno Maduro d665b53b22 Merge pull request #1173 from faissaloux/add-echo-and-print-to-base
Add `echo` and `print` to base preset
2024-06-10 00:49:15 +01:00
faissaloux c54b7e400e echo and print not to be used in base preset 2024-06-10 00:00:57 +01:00
Nuno Maduro c1e1fff0d0 feat(presets): ignores ddd 2024-06-09 23:47:53 +01:00
Nuno Maduro 2e4a8329a6 feat(presets): keeps improving base presets 2024-06-09 22:46:21 +01:00
Nuno Maduro 878988a02d feat(presets): ignores eval for now 2024-06-09 22:38:30 +01:00
Nuno Maduro ceb7244b43 feat(presets): refactors code 2024-06-09 22:23:10 +01:00
Nuno Maduro 84256aa8b9 Merge pull request #1172 from MrPunyapal/feat/add-ini_set-into-base
feat: add 'ini_set' to list of expected functions in Base.php
2024-06-09 15:03:33 +01:00
Punyapal Shah d6b59e4e96 feat: add 'ini_set' to list of expected functions in Base.php 2024-06-09 19:32:49 +05:30
Nuno Maduro 087d09120a Merge pull request #1171 from MrPunyapal/feat/add-eval-in-base
feat: add 'eval' to list of expected functions in Base.php
2024-06-09 14:47:25 +01:00
Punyapal Shah cc41a7f81d feat: add 'eval' to list of expected functions in Base.php 2024-06-09 19:16:29 +05:30
Nuno Maduro bd16769b93 fixes tests 2024-06-09 00:05:18 +01:00
Nuno Maduro 60b1e63c23 feat: initial work on presets 2024-06-08 20:54:46 +01:00
Nuno Maduro c7bcb6eb7b chore: updates snapshots 2024-06-08 14:01:41 +01:00
Nuno Maduro d25ec50384 chore: bumps dependencies 2024-06-08 14:01:31 +01:00
Nuno Maduro 9e27813897 Adjusts configuration 2024-06-08 13:12:17 +01:00
Nuno Maduro b33af71036 Merge pull request #1157 from ExeQue/2.x
[2.x] Added `toBeList` expectation
2024-05-27 13:08:05 +01:00
Morten Harders 3c6c89a6ad Added test to toBeList 2024-05-21 08:15:32 +02:00
Morten Harders 55f6b5696e Added toBeList expectation 2024-05-21 08:13:20 +02:00
Nuno Maduro ba914fa2fb fix: add more extends and traits 2024-05-14 20:28:49 +01:00
Nuno Maduro c919bb5bc4 feat: adds pest function 2024-05-14 01:58:44 +01:00
Nuno Maduro 8169382362 feat: adds after 2024-05-08 01:24:30 +01:00
Nuno Maduro 04b099e87c docs: adds backlog 2024-05-08 01:24:16 +01:00
Nuno Maduro fecdb7f572 chore: updates deps 2024-05-08 01:24:08 +01:00
Nuno Maduro b611d0d444 wording 2024-04-30 20:48:49 +01:00
Nuno Maduro ac7199c96d wip 2024-04-30 20:48:27 +01:00
Nuno Maduro 7756457dc4 Merge pull request #1146 from JHWelch/interpolated-dataset-names
Interpolated dataset names
2024-04-30 19:16:54 +01:00
Jordan Welch 10da81eee4 Check on non named tests 2024-04-29 18:10:35 -05:00
Jordan Welch 8bbee3c1e5 Add working interpolated dataset name 2024-04-29 18:01:09 -05:00
Nuno Maduro 16125df77b chore: fixes test suite 2024-04-28 12:30:56 +01:00
Nuno Maduro 80530cb1e0 wip: runs integration tests undert the v flag 2024-04-28 12:18:11 +01:00
Nuno Maduro 2070538fd3 chore: fixes test suite 2024-04-28 12:02:42 +01:00
Nuno Maduro a2cb78710d Fixes isset 2024-04-28 11:16:37 +01:00
Nuno Maduro 335bfdb79d fix: test suite 2024-04-28 11:02:24 +01:00
Nuno Maduro cfa00da885 Fixes test suite 2024-04-27 11:36:22 +01:00
Nuno Maduro f49d1e0e18 Merge branch '2.x' into 3.x 2024-04-26 23:14:53 +01:00
Nuno Maduro 303f4c0113 Adds sponsor 2024-04-19 20:47:46 +01:00
Nuno Maduro 35a1fcd0cf chore: updates readme 2024-04-08 12:28:43 +01:00
Tom Harper adb2fb51df Always call parent teardown even if an exception is thrown 2024-04-08 10:03:55 +01:00
Nuno Maduro a7a3e4240e release: v2.34.7 2024-04-05 08:44:17 +01:00
Nuno Maduro e4af33867b chore: bumps dependencies 2024-04-05 08:44:07 +01:00
Nuno Maduro 0c51b159a7 chore: fixes test suite 2024-04-01 13:24:30 +01:00
Nuno Maduro c6984323c3 chore: fixes test suite 2024-04-01 13:15:33 +01:00
Nuno Maduro 831d9bf49a tests 2024-03-29 23:12:10 +00:00
Nuno Maduro 12f6aa604c chore: versions 2024-03-29 23:12:00 +00:00
Nuno Maduro 265f0c7da9 Merge branch '2.x' into 3.x 2024-03-29 23:09:19 +00:00
Nuno Maduro 680111fb1e release: v2.34.6 2024-03-28 11:36:46 +00:00
Nuno Maduro aa6ff95ea4 chore: bumps dependencies 2024-03-28 11:36:36 +00:00
Nuno Maduro 863a0cc837 release: v2.34.5 2024-03-22 08:44:19 +00:00
Nuno Maduro 126a84a63e chore: bumps dependencies 2024-03-22 08:44:13 +00:00
Peter Fox 0ccbe5c8f0 Remove Laravel serialisable closure 2024-03-17 17:23:17 +00:00
Peter Fox a4f8ae1a12 Handles tests where a static closure is provided 2024-03-17 16:48:43 +00:00
Peter Fox 6094682158 Add static closure check 2024-03-17 12:04:38 +00:00
Nuno Maduro d519e40b95 chore: adjusts workflow 2024-03-15 21:14:22 +00:00
Nuno Maduro 6a1161ead8 release: v2.34.4 2024-03-14 19:44:18 +00:00
Nuno Maduro a1b3547dd6 chore: fixes paratest version 2024-03-14 19:42:03 +00:00
Nuno Maduro b9e3146a47 release: v2.34.3 2024-03-14 19:40:23 +00:00
Nuno Maduro ce1607cba9 chore: bumps phpunit 2024-03-14 19:40:16 +00:00
Nuno Maduro ac07bc1770 chore: override changes 2024-03-14 19:40:03 +00:00
Nuno Maduro 521a41dd10 fix: no duplicate --no-output 2024-03-14 19:39:45 +00:00
Nuno Maduro 1b68b340e8 chore: fixes static analysis 2024-03-14 19:39:31 +00:00
Nuno Maduro 853f6efce6 release: v2.34.2 2024-03-11 18:05:47 +00:00
Nuno Maduro 62a9a78ee2 chore: bumps dependencies 2024-03-11 18:05:37 +00:00
Nuno Maduro 78d9fd31d0 release: v2.34.1 2024-02-28 15:15:55 +00:00
faissaloux 2c3234fb3d fix bool type 2024-02-21 17:09:16 +01:00
faissaloux 1b64fef7ba fix toUseStrictTypes 2024-02-21 16:58:40 +01:00
Ariful Alam a136231503 fix: modify Result::exitCode logic to address warning handling with --fail-on-warning 2024-02-20 18:24:37 +06:00
Nuno Maduro 602b696348 release: v2.34.0 2024-02-17 10:06:53 +00:00
Nuno Maduro 5b0f88c227 release: v2.33.6 2024-02-12 08:55:32 +00:00
Nuno Maduro f31a2c3220 chore: fixes paratest 2024-02-12 08:53:04 +00:00
Nuno Maduro e8fa98c810 release: 2.33.5 2024-02-12 08:44:52 +00:00
Nuno Maduro 07e314fbf5 chore: bumps dependencies 2024-02-12 08:44:40 +00:00
Nuno Maduro 4baf27911e release: 2.33.4 2024-02-02 16:54:54 +00:00
Nuno Maduro 12e48a14d1 chore: fixes deps 2024-02-02 16:53:58 +00:00
Nuno Maduro 1bc0f79508 release: 2.33.3 2024-02-02 16:51:42 +00:00
Nuno Maduro cb0f256791 release: 2.33.2 2024-02-02 16:50:40 +00:00
Nuno Maduro 7b9bae0415 fix: usage of named arguments 2024-02-01 13:45:06 +00:00
Nuno Maduro 3dffdf7cb8 Merge branch '2.x' into 3.x 2024-02-01 11:53:10 +00:00
Nuno Maduro 923970a117 chore: bumps versioning 2024-02-01 11:51:11 +00:00
Nuno Maduro b3db7dfd4c chore: fixes type checking 2024-02-01 11:45:19 +00:00
Nuno Maduro b303f9f818 Merge pull request #1082 from nhaynes/fix-ci-flag
fix: updates Only plugin to check for CI environment
2024-01-30 14:17:03 +00:00
Nick Haynes d29997d5b0 fix: updates Only plugin to check for CI environment 2024-01-29 19:03:06 -06:00
Nuno Maduro 13f340a742 feat: improves badge coloring 2024-01-29 23:00:30 +00:00
Nuno Maduro eeade88ad2 Fixes kernel throwing all kind of errors 2024-01-29 12:50:00 +00:00
Nuno Maduro 06280ef75d chore: updates snaphosts 2024-01-29 11:54:23 +00:00
Nuno Maduro aa46f73888 Merge pull request #1081 from nuernbergerA/track-vendor-changes
[2.x] Track vendor changes
2024-01-29 11:39:34 +00:00
Adrian Nürnberger 3660865e5e update snapshot 2024-01-29 08:58:07 +01:00
Adrian Nürnberger 13695d597b Merge branch '2.x' into track-vendor-changes 2024-01-29 08:56:41 +01:00
Nuno Maduro fab2de833f Merge pull request #1080 from nuernbergerA/test-junit
[2.x] Add test for junit implementation
2024-01-28 23:49:06 +00:00
Adrian Nürnberger 5b630bcdff possible implementation 2024-01-28 09:48:37 +01:00
Adrian Nürnberger e70edbfa38 normalize path for windows 2024-01-28 09:11:06 +01:00
Adrian Nürnberger b1558ddde5 update snapshot 2024-01-28 09:04:42 +01:00
Adrian Nürnberger 582529377b add test for junit output 2024-01-28 08:53:20 +01:00
Nuno Maduro 88714598b6 Merge pull request #1076 from pestphp/fixing-version
[2.x] Fixing Version `2.33` for New Release
2024-01-27 13:01:06 +00:00
AJ 5136267bbe fixing version for new release 2024-01-26 23:43:52 -03:00
Nuno Maduro 19e748f0d4 chore: adjusts snapshots 2024-01-26 01:58:03 +00:00
Nuno Maduro a53a9d03cf fix: exiting 2024-01-26 00:12:36 +00:00
Nuno Maduro edaa045283 feat: exists after kernel shutdown 2024-01-26 00:04:52 +00:00
Nuno Maduro c5ce355f3c feat: improves fatal exception handling 2024-01-25 21:47:31 +00:00
Nuno Maduro 62d8459627 Merge pull request #1075 from luismgsantos/fix/docker-build-image
fix: build failing to run
2024-01-25 17:56:50 +00:00
Nuno Maduro a5bf6a3fcb fix: --cache-directory being used on phpunit file 2024-01-25 17:56:24 +00:00
Nuno Maduro 7a46514df8 fix: removes process-isolation from --help output 2024-01-25 17:32:02 +00:00
Nuno Maduro cb1735f4d8 fix: removes process-isolation from --help output 2024-01-25 17:27:03 +00:00
Nuno Maduro 607a4906ac Merge pull request #1006 from JonPurvis/to-be-backed-enum-expectation
[2.x] Add `toBeStringBackedEnum()` and `toBeIntBackedEnum()` Architecture Expectations
2024-01-25 17:09:23 +00:00
Luís Santos 317ea0356e fix: build failing to run 2024-01-25 18:06:35 +01:00
Nuno Maduro 1153531104 Merge pull request #1055 from mapon-com/feature/string-comparison-expectations
[2.x] Allow string type in greaterThan/lessThan expectations
2024-01-25 16:48:27 +00:00
Nuno Maduro cfb724cd77 Merge pull request #1060 from calebdw/bugfix-code_coverage
[2.x] fix: warn if no code coverage driver
2024-01-25 16:42:03 +00:00
Nuno Maduro 0060b6f955 Merge pull request #1069 from davybaccaert/improve_coverage_message_on_failing_minimum_requirements
[2.x] Improve coverage output message on failing minimum requirements
2024-01-25 16:39:30 +00:00
Nuno Maduro 95cd550524 fix: pipes not allowing to modify original value 2024-01-25 16:10:16 +00:00
Nuno Maduro 815ae3c644 Merge pull request #975 from Katalam/repeat
[2.x] Sharing `repeat` iteration as `dataset` variable
2024-01-25 15:01:34 +00:00
Nuno Maduro 887bed3d45 fix: adjusts backtrace for pest's internal test suite 2024-01-25 15:00:04 +00:00
Nuno Maduro 79da02c500 Merge pull request #972 from Carnicero90/bugfix-backtrace-naming-conflicts
[2.x] Fixing Backtrace not found error if project dirname endswith pest
2024-01-25 14:54:58 +00:00
Nuno Maduro 0aecd5d5d7 Merge pull request #974 from erikgaal/expect-to-contain-equals
[2.x] Add `toContainEquals` expectation
2024-01-25 14:38:55 +00:00
Nuno Maduro e95c4ee636 feat(toContainEqual): adds method name 2024-01-25 14:38:44 +00:00
Nuno Maduro 2e7fec6be5 Merge pull request #961 from bastien-phi/allow_multiple_hook_per_directory
[2.x] Allow define multiple hooks per directory
2024-01-25 14:31:29 +00:00
Nuno Maduro 4be7082de5 chore: updates snapshots 2024-01-25 14:31:17 +00:00
Bastien Philippe fb90f778b9 Update snapshots 2024-01-25 14:28:37 +00:00
Bastien Philippe 9d58e1a77e Add ability to define multiple hooks for the same directory in Pest.php 2024-01-25 14:23:41 +00:00
Nuno Maduro 9c077ed352 refacto: moves function to being used on internal test suite only 2024-01-25 14:13:18 +00:00
Nuno Maduro 2562d36518 feat: clarfies that high order testing does not support bound datasets 2024-01-25 14:12:01 +00:00
Nuno Maduro 1d2fe2de2d fix: doNotThrowsExceptions being marked as incomplete 2024-01-25 14:12:01 +00:00
Nuno Maduro 2d82ee2837 chore: fixes types 2024-01-25 14:12:01 +00:00
Nuno Maduro 1eee9df679 Merge pull request #981 from salehhashemi1992/refactor/remove-ansi-sequences
[2.x] Refactor: Extract ANSI Escape Sequence Removal to a Function
2024-01-25 14:11:51 +00:00
Nuno Maduro 8c57cc1731 fix: --watch plugin access to original arguments 2024-01-25 12:33:20 +00:00
Nuno Maduro 4febd8a11b Merge pull request #1073 from nuernbergerA/fix-junit-parallel
Fix junit parallel
2024-01-25 10:17:36 +00:00
Adrian Nürnberger 880b003bee apply cs 2024-01-24 21:50:52 +01:00
Adrian Nürnberger e0f9d0bccf just override the phpunit file 2024-01-24 21:33:40 +01:00
Adrian Nürnberger d4853feecd drop own implementation 2024-01-24 21:33:17 +01:00
Adrian Nürnberger 86e812284d remove plugin to ensure argument reaches paratest 2024-01-24 21:32:49 +01:00
Nuno Maduro 4e31973040 Merge branch '2.x' into 3.x 2024-01-23 18:15:06 +00:00
Nuno Maduro f75063c420 release: 2.32.2 2024-01-23 18:12:07 +00:00
Nuno Maduro 6a48e9d44b Merge branch '2.x' into 3.x 2024-01-23 18:06:23 +00:00
Nuno Maduro 1f8e6e4e9f fix: helper access 2024-01-23 17:40:37 +00:00
Nuno Maduro bb593846e5 release: 2.32.1 2024-01-23 17:04:48 +00:00
Davy Baccaert 108d181a05 Improve coverage output message on failing minimum requirements 2024-01-20 15:29:35 +01:00
Nuno Maduro ac5d6c1f67 chore: fixes constrains no workflow 2024-01-20 13:48:00 +00:00
Nuno Maduro 5aa3b91d56 chore: fixes windows builds 2024-01-20 13:36:31 +00:00
Nuno Maduro 9a01504b76 chore: fixes workflow 2024-01-20 13:32:21 +00:00
Nuno Maduro 0ab636e436 chore: fixes workflow 2024-01-20 13:28:43 +00:00
Nuno Maduro b9d2be87a2 fix: missing things on junit 2024-01-20 13:21:57 +00:00
Nuno Maduro fef02594db release: 2.32.0 2024-01-20 11:44:11 +00:00
Nuno Maduro e135e2671f style 2024-01-20 11:44:11 +00:00
Nuno Maduro 6d74965727 chore: bump dependencies 2024-01-20 11:44:11 +00:00
Nuno Maduro 146e141b2a Merge pull request #887 from nuernbergerA/fix-junit-output
[2.x] Junit support
2024-01-20 11:43:20 +00:00
Nuno Maduro 6fed7545c0 Merge pull request #990 from rudashi/patch-1
[2.x] Fix typo in `toHaveProperties` PHPDoc block
2024-01-13 01:44:16 +00:00
Caleb White be407ac904 fix: warn if no code coverage driver 2024-01-11 10:20:35 -06:00
Nuno Maduro 9ce52ee7ce chore: fixes snaphots 2024-01-11 16:03:48 +00:00
Nuno Maduro 3ff41bcb68 Merge branch '2.x' into 3.x 2024-01-11 16:03:33 +00:00
Nuno Maduro 5332858782 chore: fixes snapshots 2024-01-11 15:46:50 +00:00
Nuno Maduro 2b094b4188 Merge branch '2.x' into 3.x 2024-01-11 15:37:31 +00:00
Nuno Maduro 3457841a9b release: v2.31.0 2024-01-11 15:33:20 +00:00
Nuno Maduro 5258e569c1 feat: adds skipOnPHP 2024-01-11 15:33:12 +00:00
Nuno Maduro abb416c2ff chore: bumps dependencies 2024-01-11 15:32:44 +00:00
Nuno Maduro dd4d5bbd4e chore: adjusts snapshots 2024-01-11 11:33:02 +00:00
Nuno Maduro ab64912c70 chore: adjusts coding style 2024-01-11 11:30:11 +00:00
Nuno Maduro 1506d8bb27 chore: uses PHP 8.2 for static testing 2024-01-11 11:28:45 +00:00
Nuno Maduro 5aa13b8e97 chore: adjusts coding style 2024-01-11 11:26:48 +00:00
Nuno Maduro b143ed7aac chore: uses Symfony Console 7.0.2 2024-01-11 11:17:21 +00:00
Nuno Maduro 26dd5f298f chore: adjusts tests 2024-01-11 10:51:45 +00:00
Nuno Maduro d939ee938e chore: bumps dependencies 2024-01-11 10:36:24 +00:00
Nuno Maduro 515de3972f Merge branch '2.x' into 3.x 2024-01-10 11:51:11 +00:00
Nuno Maduro bf573b3cac chore: makes tests pass 2024-01-08 13:16:53 +00:00
Nuno Maduro 53dc9ffa06 feat: always use attributes instead of annotations 2024-01-05 18:00:14 +00:00
Nuno Maduro 04d2fa5ce8 feat: moves covers nothing to attribute 2024-01-05 14:37:33 +00:00
Nuno Maduro 7764a7a162 chore: bumps dependencies 2024-01-05 14:37:24 +00:00
Nuno Maduro 727a427837 feat: adjust overrides 2024-01-05 14:37:13 +00:00
Pauls Nartišs b1c59ec2e6 feat: allow string type in gt/lt expectations 2024-01-05 16:21:02 +02:00
Nuno Maduro f69a3cf832 chore: bumps dependencies 2024-01-05 11:09:32 +00:00
Nuno Maduro ed0bf1786f chore: fixes conflict 2024-01-05 10:24:49 +00:00
Nuno Maduro 2d1d8a81e1 Keeps working on dependencies 2024-01-05 09:50:45 +00:00
Nuno Maduro d515cf965e chore: bumps dependencies 2024-01-04 18:41:22 +00:00
Nuno Maduro dc1e4f040d docs: adds sponsor 2024-01-04 18:26:20 +00:00
Nuno Maduro 5e1e701ce5 Merge pull request #1051 from krencl/fix-cache-directory-config-override
Fix cache directory config override
2024-01-02 14:33:48 +00:00
Marek Mencl f004591c5a fix: checking existing argument with equal sign 2024-01-02 15:03:46 +01:00
Marek Mencl 86a96dd157 fix: overriding cli argument --cache-directory 2024-01-02 15:01:13 +01:00
Nuno Maduro 97dc32f9d2 release: v2.30.0 2023-12-28 10:36:40 +00:00
Nuno Maduro a3ab065343 chore: coding style 2023-12-28 10:36:30 +00:00
Nuno Maduro c390721ac3 chore: update snapshots 2023-12-28 10:34:22 +00:00
Nuno Maduro f83d758d4b feat: adds fails 2023-12-28 10:31:39 +00:00
Nuno Maduro e00aba539a release: v2.29.1 2023-12-27 15:27:07 +00:00
Nuno Maduro 7799500d06 release: v2.29.0 2023-12-27 11:12:01 +00:00
Nuno Maduro c099991cd9 Merge pull request #1044 from nhrrs/fix-typo
Fix typo in `toBeClass`
2023-12-23 02:03:57 +00:00
Nick Harris e27d2e7394 Fix typo in toBeClass 2023-12-23 00:36:41 +00:00
Adrian Nürnberger 14fb992ef2 unify converter 2023-12-19 06:29:28 +01:00
Adrian Nürnberger 4550a344d3 overwrite phpunit junit logging with noop 2023-12-19 06:29:28 +01:00
Adrian Nürnberger 8efd25ef65 remove debug output 2023-12-19 06:29:28 +01:00
Adrian Nürnberger 117694f210 cleanup 2023-12-19 06:29:28 +01:00
Adrian Nürnberger e5dc6f0ae2 junit support 2023-12-19 06:29:28 +01:00
Nuno Maduro 8f738f5d49 Revert "Merge pull request #919 from WendellAdriel/feature/coverage-errors-only-flag-2"
This reverts commit 1e2ca40c5b, reversing
changes made to 4522cb5dcb.
2023-12-17 22:03:15 +00:00
Nuno Maduro 1e2ca40c5b Merge pull request #919 from WendellAdriel/feature/coverage-errors-only-flag-2
[2.x] Print only files below the min coverage
2023-12-17 21:56:14 +00:00
Nuno Maduro 4522cb5dcb Merge pull request #1014 from mjsafarali/chore/docker-file-optimization
[2.x] Dockerfile Optimization
2023-12-17 21:39:38 +00:00
Nuno Maduro 9ee4191020 release: v2.28.1 2023-12-15 11:42:34 +00:00
Nuno Maduro cc65009d0a chore: adds "phpunit/phpunit": "^10.5.3" support 2023-12-15 11:42:23 +00:00
Nuno Maduro 453133d382 chore: code style changes 2023-12-15 11:42:09 +00:00
Nuno Maduro dd0dddffd4 docs: updates sponsors 2023-12-11 12:05:58 +00:00
Nuno Maduro 9a8f6e6414 release: v2.28.0 2023-12-05 19:06:22 +00:00
Nuno Maduro 4ece95a040 tests: uses arch function 2023-12-05 19:06:11 +00:00
Nuno Maduro 0cc09380bc chore: bumps dependencies 2023-12-05 19:06:03 +00:00
Nuno Maduro 809fb855de release: v2.27.0 2023-12-04 11:11:35 +00:00
Nuno Maduro aa14f2e200 chore: uses specific symfony versions 2023-12-04 11:08:41 +00:00
Nuno Maduro e319bdb6d3 chore: fixes missing caret on workflow 2023-12-04 11:04:08 +00:00
Nuno Maduro fb7340b556 chore: fixes exclude key and add fail-fast 2023-12-04 11:02:41 +00:00
Nuno Maduro 0528fec083 chore: fixes duplicated key name on workflow 2023-12-04 10:59:58 +00:00
Nuno Maduro 1cbaaf6e12 chore: allows symfony 7 on composer 2023-12-04 10:55:34 +00:00
Nuno Maduro dc862f60b2 chore: adjusts workflow 2023-12-04 10:54:11 +00:00
Nuno Maduro ff04d54247 chore: adjusts workflow name 2023-12-04 10:40:29 +00:00
Nuno Maduro 330cf05177 chore: adjusts workflow 2023-12-04 10:38:37 +00:00
Nuno Maduro 42b5fa914c Fixes integration tests 2023-12-04 10:15:55 +00:00
Nuno Maduro 3b1026b7d7 chore: fixes workflow name 2023-12-04 10:14:51 +00:00
Nuno Maduro b6151e0d01 chore: tests against Symonfy 7 2023-12-04 10:10:36 +00:00
Nuno Maduro d6db2c13c1 Merge pull request #1025 from xiCO2k/fix/allow-todo-argument
[2.x] Allow `--todo` argument.
2023-11-30 10:47:10 +00:00
Francisco Madeira 07b6ff6c04 Update bin/pest
Co-authored-by: Owen Voke <development@voke.dev>
2023-11-30 07:49:24 +00:00
Francisco Madeira ac5da9e3f7 feat: Allow --todo argument. 2023-11-30 00:32:23 +00:00
Nuno Maduro 90fb8c602c release: v2.26.0 2023-11-29 09:09:09 +00:00
Nuno Maduro 3974a65a18 Merge pull request #1017 from markhuot/patch-2
[2.x] Add `toSnapshot` early return
2023-11-29 08:50:28 +00:00
markhuot 2a54b5819d #1017 adds early return toSnapshot test 2023-11-28 20:59:45 -05:00
Borys Żmuda 8be46b57a0 Update toHaveProperties() $names param 2023-11-24 09:16:13 +01:00
Nuno Maduro 7177791f1e Merge pull request #1020 from allanmcarvalho/2.x
Update Expectation.php
2023-11-23 17:42:51 +00:00
Allan Mariucci Carvalho c743b10a87 Update Expectation.php
Removed @internal phpdoc
2023-11-23 13:15:50 -03:00
Nuno Maduro 83f8de17c8 release: v2.25.0 2023-11-22 07:17:30 +00:00
Mark Huot da20a62e49 Add toSnapshot() early return
Sometimes objects need native toString() and toArray() methods that are different from what you want to snapshot.

This adds an explicit toSnapshot() method that will be called first (when set) allowing for better snapshot values than the generic methods offer.
2023-11-21 22:56:21 -05:00
Nuno Maduro c8d3e1a9fa Merge pull request #1012 from nahime0/2.x
[2.x] Added onlyOn* methods to run the test only on a specific OS
2023-11-21 01:01:24 +11:00
Vincenzo Petrucci f7705fe1c1 feat: onlyOn* methods, removed private onlyOn, rely instead on skipOn* methods 2023-11-20 14:51:38 +01:00
mohammad safarali 4f35dbc607 chore: optimized version of the Dockerfile 2023-11-18 14:57:03 +03:30
JonPurvis 2e01776272 add to be backed enum expectation 2023-11-18 03:31:35 +00:00
Vincenzo Petrucci cf23dfa477 feat: onlyOn* methods now use the private onlyOn method 2023-11-17 16:16:48 +01:00
Vincenzo Petrucci ab4787c667 feat: added onlyOn* methods to run the test only on a specific OS 2023-11-17 15:03:28 +01:00
Nuno Maduro bd6b166a62 Merge pull request #1002 from faissaloux/remove-double-plus
Remove double plus
2023-11-08 10:01:57 +00:00
faissaloux 17340947b3 remove double plus 2023-11-08 10:52:33 +01:00
Nuno Maduro f235d84d95 release: v2.24.3 2023-11-08 09:47:14 +00:00
Nuno Maduro 3c0d780696 Merge pull request #1001 from faissaloux/fix-html-in-descriptions-or-datasets
Fix html in descriptions or datasets
2023-11-08 09:40:48 +00:00
faissaloux 16768fca9f update snapshots/paralell test 2023-11-07 17:46:00 +01:00
faissaloux 95ec0a82b2 fix html in tests descriptions and datasets 2023-11-07 17:35:42 +01:00
Erik Gaal 15cd7187e9 Update toContainEquals.php 2023-11-06 10:31:48 +01:00
Nuno Maduro 0a680dd06e release: v2.24.2 2023-11-01 19:10:11 -04:00
Nuno Maduro 152892cc38 chore: bumps paratest 2023-11-01 19:06:05 -04:00
Nuno Maduro 9aad417fb2 Merge pull request #996 from CalebDW/phpstan
Create PHPStan extension and add `HigherOrderTapProxy` to `universalObjectCratesClasses`
2023-10-30 20:49:55 -04:00
Caleb White b58e0cba66 Add Expectation to universalObjectCratesClasses 2023-10-30 14:48:23 -05:00
Caleb White 74864c60e1 Create phpstan extension 2023-10-30 11:55:26 -05:00
Nuno Maduro fd4f161edd release: v2.24.1 2023-10-26 11:02:35 -04:00
Nuno Maduro e0939e3e99 chore: adds phpunit 10.4.2 support 2023-10-26 11:02:26 -04:00
Borys Żmuda 2cbecd10e6 Fix typo in toHaveProperties() PHPDoc block 2023-10-23 11:23:53 +02:00
Nuno Maduro 2cdd5e3ba0 fix: infer generic type from expectation 2023-10-21 11:06:26 +01:00
Nuno Maduro 811ef27ee4 release: v2.24.0 2023-10-17 10:07:18 +01:00
Nuno Maduro 22a7fd0656 chore: adjusts snapshots 2023-10-17 10:07:08 +01:00
Nuno Maduro 698c276cbe chore: fixes style 2023-10-17 10:06:58 +01:00
Nuno Maduro 6340656ece chore: bumps dependencies 2023-10-17 10:06:48 +01:00
Nuno Maduro 2d5840f947 Merge pull request #933 from hungthai1401/throws_unless
[2.x] Add `throwsUnless`
2023-10-17 10:03:16 +01:00
Nuno Maduro b8bb3684a3 Merge pull request #983 from Muhammad-Sarfaraz/patch-1
Polishing Up "TestDox.php' PHPDoc Blocks for Clarity
2023-10-17 10:02:08 +01:00
Sarfaraz Muhammad Sajib b8cd563569 Update src/Factories/Annotations/TestDox.php
Co-authored-by: Owen Voke <development@voke.dev>
2023-10-16 16:23:09 +06:00
Sarfaraz Muhammad Sajib 9fb64599de Polishing Up "TestDox.php' PHPDoc Blocks for Clarity
Added the missing parenthesis and period for proper punctuation and formatted the doc block to meet PHPDocumentor standards.
2023-10-16 10:56:06 +06:00
Nuno Maduro 502f37d280 chore: updates links 2023-10-15 12:10:07 +01:00
Nuno Maduro 29cfa8ec35 chore: updates sponsors 2023-10-14 11:34:00 +01:00
salehhashemi1992 86c107ae5e Extract ANSI escape sequence to a function 2023-10-13 20:16:46 +03:30
Nuno Maduro a63cd2e4f5 Merge pull request #980 from salehhashemi1992/fix/lifecycle-hook-scope
Fix TestCycle hook scope
2023-10-13 15:27:37 +01:00
salehhashemi1992 7249b59e52 fix lifecycle hook scope 2023-10-13 17:51:02 +03:30
Nuno Maduro 5c94d9994e Merge pull request #979 from salehhashemi1992/ci/checkout-update
Update actions/checkout to v4
2023-10-13 00:36:11 +01:00
salehhashemi1992 bb0a5d8323 update checkout to v4 2023-10-12 21:32:46 +03:30
Nuno Maduro b126e8e6e4 release: v2.23.2 2023-10-10 16:40:34 +01:00
Nuno Maduro 677129d23d chore: uses paratest 7.3.0 2023-10-10 16:39:04 +01:00
Nuno Maduro cef5c36885 release: v2.23.1 2023-10-10 15:57:14 +01:00
Nuno Maduro a343ba4a29 chore: adds PHPUnit 10.4.1 support 2023-10-10 15:57:07 +01:00
Nuno Maduro 21b30b22a7 release: v2.23.0 2023-10-10 15:41:56 +01:00
Nuno Maduro 449c4b6c5e chore: adds collision v8 support 2023-10-10 15:37:25 +01:00
Nuno Maduro 6513ad6ced release: v2.22.1 2023-10-10 14:59:16 +01:00
Nuno Maduro 12421c846e chore: adds termwind v2 support 2023-10-10 14:55:43 +01:00
Nuno Maduro a312cecede release: v2.22.0 2023-10-10 08:45:41 +01:00
Nuno Maduro 4be97ed314 Merge pull request #977 from JonPurvis/to-be-url-expectation
[2.x] Adds `toBeUrl()` Expectation
2023-10-09 20:06:52 +01:00
JonPurvis 5101b9dce3 add to be url expectation 2023-10-09 20:02:11 +01:00
Katalam 67e452e9ed chore: add docs 2023-10-06 15:10:02 +02:00
Katalam ecff90da1c fix: add repeat iteration as the last argument when combined with dataset 2023-10-06 15:07:48 +02:00
Nuno Maduro 2ffafd445d release: v2.21.0 2023-10-06 13:33:39 +01:00
Nuno Maduro 6068ef6150 feat: adds support for PHPUnit 10.4 2023-10-06 13:33:31 +01:00
Katalam 3ee5c29a00 feat: add repeat iteration as function argument if no extra dataset is provided 2023-10-05 23:07:03 +02:00
Nuno Maduro 8c0b933fcd chore: bumps dependencies 2023-10-05 18:32:07 +01:00
Nuno Maduro 991e02649a chore: bumps paratest 2023-10-05 09:42:56 +01:00
Erik Gaal 79f5973e5a Add tests 2023-10-03 11:09:26 +02:00
Erik Gaal 37c40cb735 Add toContainEquals expectation 2023-10-03 10:55:57 +02:00
Filippo Montani 28ee2917f1 Fixing Backtrace not found error if project dirname endswith pest 2023-09-30 00:05:42 +02:00
Nuno Maduro a8b785f69e release: v2.20.0 2023-09-29 19:05:52 +01:00
Nuno Maduro 56610d886d Merge pull request #968 from JonPurvis/add-to-be-between-expectation
[2.x] Add `toBeBetween` expectation
2023-09-29 19:01:05 +01:00
JonPurvis be0d9e964b add toBeBetween() expectation 2023-09-22 01:55:06 +01:00
Nuno Maduro 6bc9da3fe1 chore: bumps collision 2023-09-19 11:48:16 +01:00
Nuno Maduro 6f54462070 fix: sync wrapper runner with paratest 2023-09-19 11:27:09 +01:00
Nuno Maduro 876629b744 release: v2.19.1 2023-09-19 11:01:29 +01:00
Nuno Maduro 5e74e5a19d release: v2.19.0 2023-09-19 10:48:34 +01:00
Nuno Maduro 0d114e21fd chore: updates snapshots 2023-09-19 10:48:23 +01:00
Nuno Maduro 95b65fe72b Merge pull request #962 from JonPurvis/construct-destruct-expectations
add toHaveConstructor() and toHaveDestructor() expectations
2023-09-18 11:37:46 +01:00
JonPurvis bc08f2cb55 fix style issues 2023-09-18 01:13:51 +01:00
JonPurvis 6c73a3d90b initial commit 2023-09-18 01:00:50 +01:00
Nuno Maduro c08f33638a chore: updates release 2023-09-13 23:16:44 +01:00
Nuno Maduro 6c93390c9c chore: removes changelog.md 2023-09-13 23:15:56 +01:00
Nuno Maduro b53e396aac release: v2.18.2 2023-09-13 23:14:31 +01:00
Nuno Maduro 8b327aa8b4 chore: adds phpunit 10.3.4 support 2023-09-13 23:14:22 +01:00
Nuno Maduro d0c6f9bc60 Merge pull request #957 from adevade/patch-1
Switch mixed indentation to spaces only in Laravel stub for `phpunit.xml.stub`
2023-09-12 16:15:39 +01:00
Andréas Lundgren b5e066939b Whoops 2023-09-12 09:04:30 +02:00
Andréas Lundgren 7892237408 Update Laravel phpunit.xml.stub indentation 2023-09-12 09:03:41 +02:00
Nuno Maduro 74df53c72b release: v2.18.1 2023-09-11 11:38:47 +01:00
Nuno Maduro ee26457705 Merge pull request #956 from Itemshopp/phpunit-xml-stub-update
[2.x] Update phpunit.xml stub file
2023-09-11 11:32:34 +01:00
MHO 09e6a0944a Removed self closing coverage tag from phpunit xml stub files 2023-09-11 11:03:25 +02:00
MHO bdee46043a Reformatted php unit xml tag attributes in both init stubs files 2023-09-10 13:37:26 +02:00
MHO 3e25168777 Corrected incorrect indentation in laravel phpunit xml slug 2023-09-10 13:00:55 +02:00
MHO 21b8507252 Updated Laravel init phpunit.xml stub file 2023-09-08 16:40:25 +02:00
MHO d8e283777e Updated phpunit.xml stub file 2023-09-08 15:39:44 +02:00
Nuno Maduro 2b0aa4b9c9 release: v2.18.0 2023-09-07 19:00:46 +01:00
Nuno Maduro 040eb8142d chore: phpunit 10.3.3 support 2023-09-07 19:00:26 +01:00
Nuno Maduro d1aeabc9da chore: style changes 2023-09-06 12:19:27 +01:00
Nuno Maduro e4ec2b3efa chore: updates snapshots 2023-09-06 11:58:48 +01:00
Nuno Maduro dedcc6b887 Merge pull request #950 from hungthai1401/wrong_comment
[2.x] Correct some  comment messages in `OppositeExpectation`
2023-09-06 11:55:17 +01:00
Nuno Maduro 2b0ed2bc45 Merge pull request #948 from hungthai1401/to_be_uuid
[2.x] Add `toBeUuid` expectation
2023-09-06 11:54:05 +01:00
Nuno Maduro 9c859ae7c4 Merge branch '2.x' into to_be_uuid 2023-09-06 11:53:58 +01:00
Nuno Maduro ae0a230046 chore: improves readability 2023-09-06 11:48:53 +01:00
Nuno Maduro 644fade478 Merge pull request #949 from pestphp/fix-depends-with-describe
[2.x] Fix the Usage of `depends` With `describe`
2023-09-06 11:47:34 +01:00
Thai Nguyen Hung c9e919dd40 fix: correct comment message in OppositeExpectation 2023-09-06 08:34:48 +07:00
Thai Nguyen Hung 42323e27b1 fix: correct method name 2023-09-06 08:21:42 +07:00
AJ Meireles 3927177b23 finishing the code 2023-09-05 20:36:18 -03:00
Thai Nguyen Hung 038fd80428 feat: toBeUUID expectation 2023-09-05 08:25:02 +07:00
Nuno Maduro cc6c5bf199 docs: updates changelog 2023-09-04 00:20:57 +01:00
Nuno Maduro b88d9e8ff2 tests: update snapshots 2023-09-03 23:24:52 +01:00
Nuno Maduro 0fc232bbc7 Merge pull request #934 from hungthai1401/to_have_attribute_expectation
[2.x] Add `toHaveAttribute` expectation
2023-09-03 23:18:47 +01:00
Nuno Maduro 7dcd42d113 chore: prepares release 2023-09-03 21:39:21 +01:00
Nuno Maduro e79ffc6bad tests: adjusts snapshots 2023-09-03 21:36:48 +01:00
Nuno Maduro 8ea425b266 Merge pull request #947 from ludoguenet/2.x
[2.x] Add `toHaveMethod` arch expectation
2023-09-03 21:32:01 +01:00
Nuno Maduro 3a0f6a1d09 chore: prepares release 2023-09-03 13:37:26 +01:00
Ludovic Guénet b9b90295fa Update Expectation.php
Typo
2023-09-01 18:39:37 +02:00
ludoguenet 9dabecacbf Add toHaveMethod arch expectation 2023-09-01 18:32:40 +02:00
Nuno Maduro 04fa6b6372 Merge pull request #943 from fabio-ivona/datasets-in-pest-file
fix directory separator for windows
2023-08-29 10:36:58 +01:00
Nuno Maduro a0d2856f51 docs: update changelog 2023-08-29 10:36:06 +01:00
Nuno Maduro 55b9266648 release: v2.16.1 2023-08-29 10:30:36 +01:00
Nuno Maduro 4313a1ef20 chore: bump dependencies 2023-08-29 10:30:28 +01:00
Nuno Maduro 005ef03845 chore: bumps dependencies 2023-08-29 10:17:07 +01:00
Fabio Ivona bbac28c9f4 fix directory separator for windows 2023-08-29 11:14:23 +02:00
Nuno Maduro eb56483ba2 Merge pull request #942 from fabio-ivona/datasets-in-pest-file
[fix] missing datasets when defined in Pest.php file
2023-08-29 09:54:09 +01:00
Fabio Ivona 5d6b717c9a fix missing datasets when defined in Pest.php file 2023-08-29 10:49:17 +02:00
Thai Nguyen Hung e888f3613b refactor: change falsy to false 2023-08-24 16:40:30 +07:00
Thai Nguyen Hung e69899559d refactor: generic attribute 2023-08-24 15:23:13 +07:00
Thai Nguyen Hung e6fe968d44 fix: pint 2023-08-24 14:45:11 +07:00
Thai Nguyen Hung 678898efe7 feat: toHaveAttribute expectation 2023-08-24 14:26:54 +07:00
Thai Nguyen Hung 6c3d8829ce feat: throwsUnless method 2023-08-24 09:28:47 +07:00
Nuno Maduro 14859a4c89 Merge pull request #930 from pestphp/feature/same-size-arg
[2.x] chore: resolve `toHaveSameSize` parameter
2023-08-23 12:01:34 +01:00
Owen Voke 8a44d3f136 chore: resolve toHaveSameSize parameter 2023-08-23 11:28:41 +01:00
Nuno Maduro be71d6918d chore: bump dependencies 2023-08-23 10:35:06 +01:00
Nuno Maduro afb3dd459a Merge pull request #924 from hungthai1401/to_have_same_size_expectation
[2.x] Add `toHaveSameSize` expectation
2023-08-23 10:14:17 +01:00
Thai Nguyen Hung b6e3ffafa7 fix: phpstan 2023-08-23 08:14:27 +07:00
Nuno Maduro 6c95f3d8cf Merge pull request #923 from hungthai1401/inconsistent_type_have_count_exception
[2.x] Inconsistent type have count exception
2023-08-22 10:37:59 +01:00
Thai Nguyen Hung 2192373bec test: toHaveSameSize 2023-08-22 11:10:38 +07:00
Thai Nguyen Hung dfcdaa3f8e feat: toHaveSameSize expectation 2023-08-22 11:10:25 +07:00
Thai Nguyen Hung 79bc9e677f test: toHaveCount with invalid type 2023-08-22 10:36:10 +07:00
Thai Nguyen Hung 60b615ea6a fix: inconsistent type in InvalidExpectationValue exception at toHaveCount expectation 2023-08-22 10:35:07 +07:00
Nuno Maduro 8787481e40 docs: updates changelog 2023-08-21 09:53:42 +01:00
Nuno Maduro c24406259f docs: updates changelog 2023-08-21 09:51:12 +01:00
Nuno Maduro cbd6a65057 release: v2.16.0 2023-08-21 09:42:07 +01:00
Nuno Maduro 175004baf3 chore: adds testing on native functions 2023-08-21 09:40:04 +01:00
Nuno Maduro 6d9c0483a6 chore: improves type checking 2023-08-21 09:39:55 +01:00
Nuno Maduro 2dc413cba0 tests: update snapshots 2023-08-19 10:42:42 +01:00
Nuno Maduro 206548af2b Merge pull request #895 from cerbero90/feature/traversable-sequence
[2.x] Add support for nested traversable in sequence
2023-08-19 09:38:46 +00:00
Nuno Maduro af6de422e9 Merge pull request #921 from leMaur/feat/string-case-expectations
feat: add string case expectations
2023-08-19 09:38:31 +00:00
Maurizio 1c7b254395 Merge branch '2.x' into feat/string-case-expectations 2023-08-19 10:28:48 +02:00
Maurizio de1c721cd9 chore: improve error messages 2023-08-19 10:27:21 +02:00
Maurizio f8dd286213 chore: skip array list 2023-08-19 10:27:02 +02:00
Andrea Marco Sartori e11337df2d Merge branch '2.x' into feature/traversable-sequence 2023-08-19 00:34:30 +02:00
Nuno Maduro 2f90d4ccd7 tests: update snapshots 2023-08-18 12:16:15 +01:00
Andrea Marco Sartori 2db15af24a Merge branch '2.x' into feature/traversable-sequence 2023-08-18 12:33:09 +02:00
Wendell Adriel 8ea7b2b802 Add errors-only flag 2023-08-18 10:13:28 +01:00
Nuno Maduro c9e3932637 Merge pull request #911 from devajmeireles/feature/add-to-be-digits-expectation
[2.x] Introducing `toBeDigits` Expectation
2023-08-18 03:13:59 +00:00
AJ Meireles d218afaf77 introducing new proposal of the PR template 2023-08-17 18:50:23 -03:00
Nuno Maduro 19739ff814 Merge pull request #915 from pestphp/adapting-phpunit-xml-stubs
[2.x] Adapting `phpunit.xml` stubs with PhpUnit
2023-08-17 18:56:50 +00:00
Maurizio 478144fb35 feat: add toHaveStudlyCaseKeys 2023-08-17 20:51:26 +02:00
Maurizio 5d81cf0d4c feat: add toHaveCamelCaseKeys 2023-08-17 20:51:14 +02:00
Maurizio 0b115230f9 feat: add toHaveKebabCaseKeys 2023-08-17 20:50:51 +02:00
Maurizio 0b246f7a76 feat: add toHaveSnakeCaseKeys 2023-08-17 20:50:26 +02:00
AJ Meireles 7914224ff7 introducing https://schema.phpunit.de/10.3/phpunit.xsd 2023-08-17 15:50:15 -03:00
Maurizio 997b0e9368 feat: add toBeStudlyCase 2023-08-17 20:49:40 +02:00
Maurizio a76414aeee feat: add toBeCamelCase 2023-08-17 20:49:21 +02:00
Maurizio d2096df82a feat: add toBeKebabCase 2023-08-17 20:48:51 +02:00
Maurizio 4951b1b0f9 feat: add toBeSnakeCase 2023-08-17 20:48:18 +02:00
AJ Meireles f2e31452f2 Merge pull request #912 from devajmeireles/issue-template
Introducing Issue Template
2023-08-17 11:04:27 -03:00
Nuno Maduro c2985ffb31 release: v2.15.0 2023-08-17 11:28:55 +01:00
Nuno Maduro 492f797dd5 chore: style changes 2023-08-17 11:24:16 +01:00
Nuno Maduro 0b261ef97b feat: adds php@8.3 support 2023-08-17 11:19:43 +01:00
Nuno Maduro f19692a72f chore: changes phpstan settings 2023-08-17 11:19:11 +01:00
Nuno Maduro 0787b37f2c chore: style changes 2023-08-17 11:18:59 +01:00
AJ Meireles f0223b50d0 introducing sample repository input 2023-08-16 15:50:40 -03:00
AJ Meireles 0263fcb2ac wip 2023-08-16 14:18:09 -03:00
AJ Meireles c0a234317b introducing issue template 2023-08-16 14:16:18 -03:00
Nuno Maduro 72100075d2 docs: updates changelog 2023-08-16 09:49:07 +01:00
Nuno Maduro a7aa923241 release: v2.14.1 2023-08-16 09:47:05 +01:00
Nuno Maduro e012517b16 chore: bumps phpunit 2023-08-16 09:46:51 +01:00
Nuno Maduro b1dd18af8a chore: style changes 2023-08-16 09:46:31 +01:00
AJ Meireles 398e3ff3b5 introducing toBeDigits 2023-08-14 17:10:58 -03:00
Nuno Maduro 03648f580c docs: update changelog 2023-08-14 09:44:14 +01:00
Nuno Maduro df2212055b release: v2.14.0 2023-08-14 09:41:14 +01:00
Nuno Maduro b1a137c513 chore: updates snapshot tests 2023-08-14 09:41:05 +01:00
Nuno Maduro 62267dfd3e Merge pull request #906 from JonPurvis/extra-expectations
add expectations for uppercase, lowercase, alpha and alphanumeric
2023-08-13 08:44:17 +00:00
JonPurvis f996a48dfa fix refacto check 2023-08-12 18:14:38 +01:00
JonPurvis 54e00dd4dc add expectations for uppercase, lowercase, alpha and alphanumeric 2023-08-12 16:41:15 +01:00
Nuno Maduro f1414a0beb docs: changelog 2023-08-09 12:16:21 +01:00
Nuno Maduro 47f2ae32c1 release: v2.13.0 2023-08-09 12:14:39 +01:00
Nuno Maduro 306b7eb2a6 feat: adds ddWhen and ddUnless 2023-08-09 12:14:32 +01:00
Nuno Maduro 02f72aabb2 Merge pull request #860 from devajmeireles/feature/add-dd-conditionally
Feature: Introducing The Ability to Dump Conditionally
2023-08-09 10:50:53 +00:00
Nuno Maduro e3a21384e6 release: v2.12.2 2023-08-07 10:29:25 +01:00
Nuno Maduro 331381eed5 release: v2.12.1 2023-08-07 10:26:55 +01:00
Nuno Maduro 75a7d77a80 Updates snapshots 2023-08-07 10:22:58 +01:00
Nuno Maduro cc242a50d1 chore: bump dependencies 2023-08-07 09:39:13 +01:00
Nuno Maduro 704acbf6de Merge pull request #898 from dylanbr/allow_tests_to_be_extended
TestSuiteLoader will always consider classes from the current file
2023-08-06 22:59:52 +00:00
Dylan Bridgman 7baa48e068 TestSuiteLoader will always consider classes from the current file 2023-08-05 13:06:00 +02:00
Nuno Maduro 3742e74adf feat: adds "phpunit/phpunit": "^10.3.1" support 2023-08-04 11:23:55 +01:00
Nuno Maduro cbcea04768 tests: update snapshots 2023-08-03 10:35:38 +01:00
Nuno Maduro f0581f87c6 Merge pull request #896 from fabio-ivona/windows-tests-fix
fix tests
2023-08-03 09:33:17 +00:00
Fabio Ivona 60763f2223 fix tests 2023-08-03 11:27:01 +02:00
Nuno Maduro 8a589022d9 release: v2.12.0 2023-08-02 23:04:35 +01:00
Nuno Maduro 00109e9976 tests: adds more tests regarding snapshots multiple 2023-08-02 23:02:00 +01:00
Nuno Maduro 43107c1743 chore: bumps phpunit 2023-08-02 23:01:36 +01:00
Nuno Maduro 546253d591 Merge pull request #881 from fabio-ivona/snaphsots-cleanup
[2.x] Multiple snapshots
2023-08-02 21:43:56 +00:00
Andrea Marco Sartori d94a6580f5 fix: type check 2023-08-02 20:49:27 +02:00
Andrea Marco Sartori fb75b712d3 chore: update snapshot 2023-08-02 20:49:05 +02:00
Andrea Marco Sartori 6ead2a4e8b feat(sequence): Add support for nested traversable 2023-08-02 20:31:53 +02:00
Fabio Ivona 9afe2296a6 fix line endings on Windows 2023-08-02 10:45:30 +02:00
Fabio Ivona 0221c2a643 refactor 2023-08-01 17:18:55 +02:00
Fabio Ivona 0518971d2f refactor 2023-08-01 17:16:50 +02:00
Fabio Ivona fe3747f850 lint 2023-08-01 17:15:44 +02:00
Fabio Ivona 844d175981 refactor 2023-08-01 17:14:49 +02:00
Fabio Ivona 4e719214c6 fix incomplete tests while updating snapshots 2023-08-01 17:13:15 +02:00
Fabio Ivona 2f6b99885e Merge branch '2.x' into snaphsots-cleanup
# Conflicts:
#	src/Expectation.php
#	src/Expectations/OppositeExpectation.php
2023-08-01 17:04:11 +02:00
Fabio Ivona 4b24da1a58 Merge pull request #892 from ash-jc-allen/comment-updates
Updated comments
2023-08-01 16:35:42 +02:00
Nuno Maduro 72d482de28 docs: update changelog 2023-08-01 14:49:00 +01:00
Nuno Maduro 049da041b2 release: v2.11.0 2023-08-01 14:43:50 +01:00
Nuno Maduro 4d7aa2b98f Merge pull request #891 from ash-jc-allen/feature/invokable-arch-expectation
Add `toBeInvokable` arch expectation
2023-08-01 13:23:05 +00:00
Ash Allen 2e352c0084 Updated comments. 2023-08-01 13:09:53 +01:00
Ash Allen 3f854713e6 Style updates. 2023-08-01 12:12:41 +01:00
Ash Allen 011bd3ba82 Added "toBeInvokable" arch expectation. 2023-08-01 12:09:18 +01:00
Nuno Maduro 4de70da0a0 release: v2.10.1 2023-07-31 11:58:13 +01:00
Nuno Maduro 6820d8b7aa Merge pull request #888 from pestphp/feat_opposite_suffix_prefix
feat(arch): Adds support for opposite expectations of `toHavePrefix` and `toHaveSuffix`
2023-07-31 10:48:58 +00:00
Luke Downing 6886558ed1 feat(arch): Adds support for opposite expectations of toHavePrefix and toHaveSuffix. 2023-07-31 11:28:53 +01:00
Nuno Maduro b795a92840 docs: updates changelog 2023-07-31 00:11:24 +01:00
Nuno Maduro 2e622f6fd4 chore: fixes type checkign 2023-07-31 00:06:36 +01:00
Nuno Maduro 5f7a1663dd release: v2.10.0 2023-07-30 23:52:43 +01:00
Nuno Maduro f3f35a2ed1 feat: adds repeat 2023-07-30 23:49:20 +01:00
Nuno Maduro 86a6b32715 fix: -v option 2023-07-30 23:49:11 +01:00
Fabio Ivona 1efb9de043 multiple snapshots 2023-07-27 11:46:22 +02:00
Fabio Ivona b60d21dfe2 snapshots code cleanup 2023-07-27 11:16:27 +02:00
Fabio Ivona 39e0d61dec phpstan fix 2023-07-27 11:10:42 +02:00
Nuno Maduro be41181b43 release: v2.9.5 2023-07-24 19:13:17 +01:00
Nuno Maduro 632ffc2f8e fix: arch assertions counter 2023-07-24 19:13:09 +01:00
Nuno Maduro 705f19dd87 release: v2.9.4 2023-07-22 09:42:37 -05:00
Nuno Maduro 5637dfa75d fix: test description on beforeEach failure 2023-07-22 09:33:41 -05:00
Nuno Maduro cf5275293f fix: snapshots directory 2023-07-20 13:47:23 -05:00
Nuno Maduro 81efe5953b release: v2.9.2 2023-07-20 13:35:03 -05:00
Nuno Maduro a37a3b9f99 fix: non-working beforeEach 2023-07-20 13:27:41 -05:00
Nuno Maduro 9100913184 release: v2.9.1 2023-07-20 07:39:17 -05:00
Nuno Maduro 8fdb0b3d32 chore: bump dependencies 2023-07-20 07:06:08 -05:00
Nuno Maduro 8322ff0f5e release: v2.9.0 2023-07-19 10:28:49 -05:00
Nuno Maduro c8287567eb Merge branch 'develop' into 2.x 2023-07-19 10:23:58 -05:00
AJ Meireles b00bc4d5ea applying enhancement to use single dd function 2023-07-17 19:11:06 -03:00
AJ Meireles 8abc0d1920 applying enhancement to use ddWhen inside ddUnless 2023-07-17 14:12:54 -03:00
AJ Meireles ea967b439f Feature: Introducing The Ability to Dump Conditionally 2023-07-17 11:08:00 -03:00
Nuno Maduro 23d7191990 Removes sponsor 2023-07-15 15:49:55 +01:00
Nuno Maduro c7e6df7c95 chore: coding style 2023-07-15 15:11:03 +01:00
Nuno Maduro 805b81edc0 release: v2.8.3 2023-07-12 21:26:47 +01:00
Nuno Maduro c42541a3d9 chore: style changes 2023-07-12 21:09:40 +01:00
Nuno Maduro 3f352605ca chore: upgrades arch plugin 2023-07-12 21:09:26 +01:00
Nuno Maduro 21a04fefcf fix: same class on toExtend 2023-07-08 17:54:21 +01:00
Nuno Maduro aa4fb3bba2 chore: bumps arch plugin 2023-07-08 13:42:37 +01:00
Nuno Maduro 4d0dffafd3 tests: adjusts snapshots 2023-07-01 10:42:57 +01:00
Nuno Maduro 19e75d1070 chore: coding style 2023-07-01 10:31:26 +01:00
Nuno Maduro cee5b9feb9 fix: arguments keys 2023-07-01 10:31:26 +01:00
Nuno Maduro 355a2349af feat: allows array formats 2023-07-01 10:31:26 +01:00
Nuno Maduro 7e815cc985 tests: updates snapshots 2023-07-01 10:31:26 +01:00
Nuno Maduro fb443e0fa0 chore: fixes type checking 2023-07-01 10:31:26 +01:00
Nuno Maduro 7f1135eeac chore: adjusts workflows 2023-07-01 10:31:26 +01:00
Nuno Maduro 25e15e76e0 tests: updates snapshots 2023-07-01 10:31:26 +01:00
Nuno Maduro 9426881cf6 fix: avoids usage of --update-snapshots in parallel 2023-07-01 10:31:26 +01:00
Nuno Maduro 1f6970a5b3 fix: returns relative path from snapshot 2023-07-01 10:31:26 +01:00
Nuno Maduro e541ee86fc feat: adds "Illuminate\Testing\TestResponse" behavior to snapshot testing 2023-07-01 10:31:26 +01:00
Nuno Maduro b1c6f247e0 chore: uses snapshot testing in some visual testing 2023-07-01 10:31:26 +01:00
Nuno Maduro 36b585835d feat: adds snapshot testing 2023-07-01 10:31:26 +01:00
Nuno Maduro 17db4bd616 chore: missing properties 2023-07-01 10:31:26 +01:00
Nuno Maduro c98d8ca26a feat: more expectations 2023-07-01 10:31:26 +01:00
Nuno Maduro d5334f96a4 chore: increase deps 2023-07-01 10:31:26 +01:00
Nuno Maduro 54f4ee57ad refacto: 100% type coverage 2023-07-01 10:31:26 +01:00
Nuno Maduro 4f3796ed2e feat: improves VS Code auto-complete 2023-07-01 10:31:26 +01:00
Nuno Maduro ac13a288fb feat: improve grammar 2023-07-01 10:31:26 +01:00
Nuno Maduro e2ccc9deac chore: style changes 2023-07-01 10:31:26 +01:00
Nuno Maduro 80129f2e23 chore: asserts style 2023-07-01 10:31:26 +01:00
Nuno Maduro 5802bbc1dd feat: toHavePrefix, toHaveSuffix, toOnlyImplement, toImplementNothing 2023-07-01 10:31:26 +01:00
Nuno Maduro ee2f4eedbd feat: more reflection based expectations 2023-07-01 10:31:26 +01:00
Nuno Maduro 0de1ce053a feat: toBeFinal 2023-07-01 10:31:26 +01:00
Nuno Maduro be9056f978 feat: toUseStrictTypes 2023-07-01 10:31:26 +01:00
Nuno Maduro 26a6e7d712 More tests 2023-07-01 10:31:26 +01:00
Nuno Maduro a90b90ad29 docs: package description 2023-07-01 10:31:26 +01:00
Nuno Maduro bc951787d3 feat(describe): snapshots 2023-07-01 10:31:26 +01:00
Nuno Maduro 0ae0887665 feat(describe): more refactors 2023-07-01 10:31:26 +01:00
Nuno Maduro 551fa01415 feat(describe): more refactor 2023-07-01 10:31:26 +01:00
Nuno Maduro 68ea2c7d7e feat(describe): refactor 2023-07-01 10:31:26 +01:00
Nuno Maduro 3e8616ec64 feat(describe): continues work around hooks 2023-07-01 10:31:26 +01:00
Nuno Maduro 465c65243d feat(describe): improves logic around hooks 2023-07-01 10:31:26 +01:00
Nuno Maduro 9c0e5ddfc6 feat(describe): adds missing beforeAll exception class 2023-07-01 10:31:26 +01:00
Nuno Maduro 8442b9a6e4 feat(describe): fixes missing beforeAll exception 2023-07-01 10:31:26 +01:00
Nuno Maduro a1208b5876 release: v2.8.2 2023-07-01 10:31:00 +01:00
Nuno Maduro b5f89d1ff8 chore: bumps dependencies 2023-07-01 10:28:15 +01:00
Nuno Maduro cd823193cc release: v2.8.1 2023-06-20 13:33:29 +01:00
Nuno Maduro eb7bb34825 fix: "Cannot find TestCase object on call stack" 2023-06-20 13:29:28 +01:00
Nuno Maduro 19e3d929b1 docs: updates changelog 2023-06-19 10:29:10 +01:00
Nuno Maduro 25729f6262 release: v2.8.0 2023-06-19 09:43:57 +01:00
Nuno Maduro cbb6a58c8a feat: only exits of init 2023-06-18 11:52:51 +01:00
Nuno Maduro 167c96965e chore: removes broken test 2023-06-17 20:52:19 +01:00
Nuno Maduro 8db3238a1f chore: updates deps 2023-06-17 19:39:52 +01:00
Nuno Maduro cbd8cae83e tests: updates snapshots 2023-06-17 19:39:44 +01:00
Nuno Maduro 3e03a87e02 Merge pull request #838 from huangdijia/patch-1
Add container registration for Kernel self
2023-06-17 19:36:22 +01:00
Nuno Maduro 193dd107d7 Merge pull request #839 from cerbero90/feature/compact-output
[2.x] Compact output when using datasets
2023-06-17 19:35:35 +01:00
Nuno Maduro 0cea8fe922 Merge pull request #829 from mozex/allow-pattern-in-uses
Update directory targeting logic to support glob patterns
2023-06-17 16:28:39 +01:00
Andrea Marco Sartori abbbc9fdbb chore: update snapshot 2023-06-16 23:48:37 +02:00
Andrea Marco Sartori 10b210d2bb feat: compact console output by redacting object annotations 2023-06-16 23:48:20 +02:00
Deeka Wong 9385a3dcea Add container registration for Kernel self 2023-06-16 14:41:46 +08:00
Nuno Maduro c0af671ca2 release: v2.7.0 2023-06-15 14:11:00 +02:00
Nuno Maduro eb9f31edeb tests: unexpected output 2023-06-15 14:06:54 +02:00
Nuno Maduro 0e5470b192 chore: adds support for PhpUnit@10.2.2 2023-06-15 12:02:00 +02:00
Nuno Maduro 2122e57990 fix: revert higher order message property 2023-06-15 10:44:52 +02:00
Nuno Maduro e42d224db2 fix: escape service 2023-06-15 10:43:39 +02:00
Nuno Maduro 070139eda7 fix: higher order message 2023-06-15 10:42:31 +02:00
Nuno Maduro a0d0182031 refacto: uses non-static 2023-06-15 10:38:33 +02:00
Nuno Maduro 1885d4e110 chore: bumps dev tools 2023-06-15 10:38:26 +02:00
Nuno Maduro 5959890125 refacto: early returns 2023-06-15 10:38:17 +02:00
Nuno Maduro 7460bd6c1f chore: adjusts style 2023-06-13 19:59:59 +02:00
Mohammad Zahed 801346b894 move tests to GlobPatternTests folder and add comments for test cases 2023-06-12 12:53:27 +03:00
Mohammad Zahed 40fd06c0d0 Update src/PendingCalls/UsesCall.php
Co-authored-by: Owen Voke <development@voke.dev>
2023-06-12 12:38:51 +03:00
Mohammad Zahed aa9fe351a6 fix tests and static type check error 2023-06-10 18:00:46 +03:00
Mohammad Zahed e00efb1b6d add tests for directory and file patterns 2023-06-08 14:52:39 +03:00
Mohammad Zahed 86a765b06b Merge branch 'pestphp:2.x' into allow-pattern-in-uses 2023-06-08 14:50:51 +03:00
Nuno Maduro 3c20e8114e release: v2.6.3 2023-06-07 21:19:04 +02:00
Nuno Maduro 73a859ee56 chore: bumps phpunit dependency 2023-06-07 21:17:10 +02:00
Mohammad Zahed c9180e590e Update directory targeting logic to support glob patterns 2023-06-07 14:56:19 +03:00
Nuno Maduro 4196579a3d chore: bumps arch plugin 2023-06-03 00:17:20 +01:00
Nuno Maduro 436b20857d docs: updates changelog 2023-06-02 22:46:07 +01:00
Nuno Maduro 82b0adf5ae release: v2.6.2 2023-06-02 22:43:42 +01:00
Nuno Maduro a0041f139c chore: bumps phpunit dependency 2023-06-02 22:40:46 +01:00
Nuno Maduro b25bc7ee05 docs: updates changelog 2023-05-12 09:23:13 +01:00
Nuno Maduro faafedd55c release: v2.6.1 2023-05-12 09:22:02 +01:00
Nuno Maduro c99325275a chore: bumps dependencies 2023-05-12 09:16:45 +01:00
Nuno Maduro 37a7583755 Merge pull request #809 from gehrisandro/fix-teamcity-output
fix teamcity output for tests throwing an exception before the first assertion
2023-05-11 22:52:26 +01:00
Sandro Gehri a851b5ed70 fix teamcity output for tests throwing an exception before the first assertion 2023-05-11 22:27:43 +02:00
Nuno Maduro 983659f8e8 chore: bumps paratest 2023-05-06 11:52:05 +01:00
Nuno Maduro 3e1cef296f chore: updates snapshots 2023-05-06 11:51:58 +01:00
Nuno Maduro cada5c5136 Merge pull request #804 from titantwentyone/2.x
Allow traits to be covered
2023-05-06 11:49:41 +01:00
Tim Smith 477492fdd2 Adding tests 2023-05-06 08:43:19 +01:00
Tim Smith 963b7f43ab Allow traits to be covered 2023-05-05 17:59:52 +01:00
Nuno Maduro a34767fa15 release: v2.6.0 2023-05-02 00:51:14 +01:00
Nuno Maduro fe3c7d72bd chore: bumps dependencies and fixes static analysis 2023-05-02 00:51:01 +01:00
Nuno Maduro 97898a0a8e feat: allows to use test calls on before each calls 2023-05-01 22:18:47 +01:00
Nuno Maduro cddddc3ec1 Merge pull request #797 from fabio-ivona/toThrow-improvement
[2.x] allow to expect `toThrow` against an exception instance
2023-05-01 21:30:17 +01:00
Fabio Ivona f8930d20ae allows to check toThrow against an exception instance 2023-05-01 21:42:47 +02:00
Nuno Maduro 2e25eb59b8 style: fixes 2023-04-25 21:32:09 +01:00
Nuno Maduro a5471fd0f4 chore: bumps dependencies 2023-04-23 00:03:18 +01:00
Nuno Maduro 9842e1051d release: v2.5.3 2023-04-22 23:14:57 +01:00
Nuno Maduro d39e4f15fe release: v2.5.2 2023-04-19 09:53:08 +01:00
Nuno Maduro 1a05df14d0 chore: bumps dependencies 2023-04-19 09:49:26 +01:00
Nuno Maduro 5c0df87f52 release: v2.5.1 2023-04-18 00:47:56 +01:00
Nuno Maduro ec6a81735a chore: bumps phpunit dependency 2023-04-18 00:45:41 +01:00
Nuno Maduro 2ea37f3424 Merge pull request #772 from MaurizioMoreo/pcov_fix
Add PCOV availability check
2023-04-16 14:11:05 +01:00
Nuno Maduro 2e4206cb97 tests: adjusts snapshots 2023-04-15 16:17:22 +01:00
Nuno Maduro 72b3cdaab4 Merge pull request #770 from ganyicz/2.x
Update stub extensions
2023-04-15 16:12:16 +01:00
Nuno Maduro 9744b9848e Merge pull request #783 from fabio-ivona/fix-comments-in-test-name
fix comments in dokblocks
2023-04-15 11:26:06 +01:00
Fabio Ivona e1143d2cfc remove ->only() 2023-04-15 11:52:07 +02:00
Fabio Ivona 5861b0498a fix comments in dokblocks 2023-04-15 10:45:51 +02:00
Nuno Maduro f6d9aa51bd chore: bump dependencies 2023-04-14 11:50:44 +01:00
Nuno Maduro 9070b12377 release: v2.5.0 2023-04-14 11:13:56 +01:00
Nuno Maduro dab68d6d85 Fixes caret 2023-04-14 11:12:32 +01:00
Nuno Maduro 40de54ecd5 Merge pull request #780 from pestphp/chore/phpunit10-1-support
[2.x] Adds `phpunit/phpunit@10.1` support
2023-04-14 11:02:06 +01:00
Nuno Maduro 6d8b926df3 chore: adjusts for parallel testing 2023-04-14 11:01:54 +01:00
Nuno Maduro d6c3f3522b chore: fix caret 2023-04-13 12:51:19 +01:00
Nuno Maduro 41cdb5f01b chore: skips parallel testing 2023-04-13 12:23:17 +01:00
Nuno Maduro 0064f3fdff chore: phpunit ^10.1 support 2023-04-13 11:03:29 +01:00
Maurizio Moreo 518035514e Add PHPDBG availability check 2023-04-09 09:27:52 +02:00
Nuno Maduro 81cdb7a300 chore: refacto 2023-04-08 12:23:10 +01:00
Filip Ganyicz 97dbda92e6 Update stub extensions 2023-04-08 01:24:00 +02:00
Maurizio Moreo 4520fe918a Add PCOV availability check 2023-04-07 17:19:34 +02:00
Nuno Maduro f73e6aebcb Merge pull request #763 from gehrisandro/fix-typos
[2.x] fix: various typos fixed
2023-04-03 08:11:53 +01:00
Sandro Gehri 3b9ca8853f fix: various typos fixed 2023-04-03 07:50:25 +02:00
Nuno Maduro cbc26faeb9 docs: updates changelog 2023-04-02 21:13:55 +01:00
Nuno Maduro 12c75524a2 release: v2.4.0 2023-04-02 21:12:31 +01:00
Nuno Maduro 6edbd69dc4 chore: update dependencies 2023-04-02 20:44:35 +01:00
Nuno Maduro 0cfb1237e5 docs: update changelog 2023-04-02 20:37:42 +01:00
Nuno Maduro cab6aa6e57 Merge pull request #760 from lucasgiovanny/toHaveProperties
Add possibility to check property name and value with toHaveProperties
2023-04-02 20:35:13 +01:00
Nuno Maduro 9ff2f3b46c docs: update changelog 2023-04-02 20:29:30 +01:00
Nuno Maduro ead0237fb3 chore: bumps dependencies 2023-04-02 20:17:55 +01:00
Lucas Giovanny 31726b51ad update toHaveProperties 2023-04-02 11:15:31 +01:00
Nuno Maduro 99d3ee448c docs: unreleased notes 2023-04-01 06:47:14 +01:00
Nuno Maduro d21ae255f1 Merge pull request #757 from pestphp/feat/skip-on-windows
[2.x] Adds `skipOnWindows()`, `skipOnMac()`, and `skipOnLinux()`
2023-03-31 23:43:30 +01:00
Nuno Maduro 0823e5da88 feat: reworks methods 2023-03-31 23:42:10 +01:00
Nuno Maduro 1f913f6fc1 Merge pull request #758 from faissaloux/feat/skip-on-os-family
skip os family
2023-03-31 23:27:51 +01:00
faissaloux a6dec31b9d fix return 2023-03-31 22:11:32 +00:00
faissaloux c1979f735f add ability to skip on multiple os families 2023-03-31 22:09:45 +00:00
faissaloux 1c1cb1e591 skip os family 2023-03-31 22:03:18 +00:00
Nuno Maduro 49ddcbd66b feat: skips on windows 2023-03-31 22:20:48 +01:00
Nuno Maduro 23c8adf497 Merge pull request #755 from fabio-ivona/fix-windows-tests
fix windows tests
2023-03-31 09:54:47 +01:00
Fabio Ivona 8e3d7d85e8 fix windows tests 2023-03-31 10:53:11 +02:00
Nuno Maduro 3cee6a499d chore: refactor RenderableOnCollisionEditor 2023-03-31 09:39:05 +01:00
Nuno Maduro 3f38f19df8 Merge pull request #754 from fabio-ivona/collision-custom-editor-support
[2.x] Collision custom editor support
2023-03-31 09:15:35 +01:00
Fabio Ivona 4df6ab4a84 lint 2023-03-31 08:59:38 +02:00
Fabio Ivona 90b6771451 add tests 2023-03-31 08:46:35 +02:00
Fabio Ivona 681723cbc3 matches Collision changes 2023-03-31 08:43:59 +02:00
Nuno Maduro d9595ec122 chore: bumps dev dependencies 2023-03-30 22:41:21 +01:00
Nuno Maduro ec35010cf4 Merge pull request #753 from gehrisandro/fix-tests-in-helpers-directory
[2.x] fix: tests in Helpers directory are not executed
2023-03-30 22:32:13 +01:00
Sandro Gehri d14f2728d8 fix: tests in Helpers directory are not executed 2023-03-30 21:49:17 +02:00
Nuno Maduro 152b7a9fc4 Merge pull request #748 from ncharalampidis/2.x
Fix parallel execution of test class that extends another class with same name
2023-03-29 16:58:21 +01:00
Nuno Maduro 56ec3b9ee3 Merge pull request #747 from gehrisandro/add-teamcity-testsuite-count
teamcity: add missing test count output
2023-03-29 12:10:45 +01:00
Nikos Charalampidis ca69e4fd94 remove unnecessary custom phpunit xml added previously 2023-03-29 13:23:43 +03:00
Nikos Charalampidis 1965763cd0 fix parallel execution of test class that inherit other class with the same name 2023-03-29 13:02:18 +03:00
Sandro Gehri cd8d94780f teamcity: add missing test count output 2023-03-29 00:03:14 +02:00
Nuno Maduro ba87e1fde8 Merge pull request #745 from dansysanalyst/improve_exception_message
Slightly Improvement on Exception message
2023-03-28 12:34:10 +01:00
Dan Ang e48bd31ae4 improve message 2023-03-28 12:19:15 +01:00
Nuno Maduro 5ae061d208 release: release: v2.3.0 2023-03-28 10:16:29 +01:00
Nuno Maduro 3d7e621b7d chore: phpunit >10.0.19 support 2023-03-28 10:11:58 +01:00
Nuno Maduro bf14c4262a Merge pull request #740 from faissaloux/scheduled-workflows-condition
[2.x] Run scheduled workflows only on origin repo
2023-03-28 08:48:42 +01:00
Nuno Maduro b186d7a4ee Merge pull request #743 from pestphp/feat/uses-hint
[2.x] Adds `uses()` hint
2023-03-28 08:13:10 +01:00
Nuno Maduro e109cd1da2 feat: uses()hint 2023-03-28 01:48:46 +01:00
faissaloux 473f295b77 run scheduled workflows only on origin repo 2023-03-25 01:48:18 +00:00
Fabio Ivona a05684026e wip 2023-03-24 19:00:38 +01:00
Nuno Maduro 5df46d03c3 Merge pull request #739 from dansysanalyst/fix_inconsistent_dataset_spelling
Inconsistency in spelling of "dataset"
2023-03-24 16:22:28 +00:00
Dan Ang 19424ae06d fix inconsistency in dataset spelling 2023-03-24 16:00:33 +01:00
Nuno Maduro 6c8970e0a3 release: v2.2.3 2023-03-24 11:26:54 +00:00
Nuno Maduro 2f2b51ce3d chore: bumps dependencies 2023-03-24 11:22:41 +00:00
Nuno Maduro 33f596bcce Merge pull request #703 from pestphp/2.x_parallel_args
[2.x] feat(parallel): Adds support for plugins to filter parallel arguments
2023-03-24 11:22:19 +00:00
Nuno Maduro 50a96dcb8f Merge pull request #736 from fabio-ivona/fix-dataset-mismatch-message
[chore] Remove dataset name from DatasetArgsCountMismatch
2023-03-24 09:45:08 +00:00
Fabio Ivona d9a4fa33b9 remove dataset name from DatasetArgsCountMismatch 2023-03-24 10:20:20 +01:00
Nuno Maduro cc6bd59df9 release: v2.2.2 2023-03-23 21:48:55 +00:00
Nuno Maduro 3ce6408195 fix: parallel testing test description 2023-03-23 21:47:10 +00:00
Luke Downing 1c673fcff9 feat(parallel): Adds support for plugins to filter parallel arguments 2023-03-22 11:30:53 +00:00
Luke Downing ff82596158 feat(parallel): Adds support for plugins to filter parallel arguments 2023-03-22 11:27:26 +00:00
Luke Downing 0539d2ba62 feat(parallel): Adds support for plugins to filter parallel arguments 2023-03-22 11:25:33 +00:00
Nuno Maduro 221ac62f03 release: v2.2.1 2023-03-22 11:20:25 +00:00
Nuno Maduro 4b6c949032 chore: updates snapshots 2023-03-22 11:18:10 +00:00
Luke Downing 1915ad368a feat(parallel): Adds support for plugins to filter parallel arguments 2023-03-22 11:17:11 +00:00
Nuno Maduro 1408cffc02 chore: bumps PHPUnit to ^10.0.18 2023-03-22 11:16:31 +00:00
Nuno Maduro 95b5379945 Merge pull request #724 from fabio-ivona/fix-test-names-collision
[chore] Fix underscores in test names
2023-03-22 11:16:24 +00:00
Luke Downing a4833bbfe4 feat(parallel): Adds support for plugins to filter parallel arguments 2023-03-22 11:13:39 +00:00
Nuno Maduro cb1c777b9b Merge pull request #725 from fabio-ivona/disable-integration-tests-on-PRs
disable integration tests for PR workflows
2023-03-22 11:11:33 +00:00
Luke Downing 7433cc5565 feat(parallel): Adds support for plugins to filter parallel arguments 2023-03-22 11:09:53 +00:00
Luke Downing 4c769fac66 feat(parallel): Adds support for plugins to filter parallel arguments 2023-03-22 10:58:48 +00:00
Fabio Ivona 176d3efbc6 fix workflow name 2023-03-22 11:54:54 +01:00
Fabio Ivona d635665c1b disable integration tests for PR workflows 2023-03-22 11:53:33 +01:00
Fabio Ivona 22467d05c8 fix underscores in test names 2023-03-22 11:24:21 +01:00
Nuno Maduro 7a699e16db release: v2.2.0 2023-03-22 10:05:58 +00:00
Nuno Maduro 341ba56bb9 fix: uses DateTimeInterface instead 2023-03-22 09:46:23 +00:00
Nuno Maduro a320cc3e2b Merge pull request #721 from faissaloux/fix-dirty-files-filter
[2.x] Fix `--dirty` not working on Windows
2023-03-22 09:43:13 +00:00
Nuno Maduro 8b428357b2 chore: collision snapshots 2023-03-22 00:01:11 +00:00
Nuno Maduro bb6d6b0951 tests: adds collision tests 2023-03-21 23:55:33 +00:00
faissaloux b94b8c6a4f fix dirty files filter 2023-03-21 23:48:22 +00:00
Nuno Maduro 43894afa18 chore: updates snapshots 2023-03-21 21:10:58 +00:00
Nuno Maduro 28de31a8b9 Merge pull request #698 from fabio-ivona/dataset-arguments-check
[chore] Better dataset arguments mismatch message
2023-03-21 21:10:30 +00:00
Nuno Maduro 974e70d7d1 Merge branch '2.x' into dataset-arguments-check 2023-03-21 21:10:22 +00:00
Nuno Maduro f914f1ad87 fix: adds --parallel option to help 2023-03-21 21:07:57 +00:00
Nuno Maduro 14dd5cb57b fix: test result on parallel 2023-03-21 21:05:11 +00:00
Nuno Maduro 077ed287b7 chore: updates snapshots 2023-03-21 20:33:39 +00:00
Nuno Maduro 9a41f2ff82 Merge pull request #716 from dansysanalyst/improve_types
Improve types in Greater/Lesser Expectations
2023-03-21 20:30:34 +00:00
Nuno Maduro 88f29e4180 Merge branch '2.x' into improve_types 2023-03-21 20:30:29 +00:00
Nuno Maduro c34f649724 release: v2.1.0 2023-03-21 17:04:03 +00:00
Nuno Maduro e1e4f8d884 chore: rebuilds snapshots 2023-03-21 16:57:07 +00:00
Nuno Maduro 2d6d8b810b Merge pull request #715 from pestphp/fix/method-names
[2.x] Fix `ふが` type of chars
2023-03-21 16:55:57 +00:00
Nuno Maduro bcd1503cad feat: "only" method 2023-03-21 16:54:37 +00:00
Fabio Ivona e0f2919f62 expand Str::evaluable test cases 2023-03-21 17:39:01 +01:00
Dan Ang a8bd353ba6 Including tests for Date and DateTimeImmutable 2023-03-21 15:24:42 +01:00
Fabio Ivona ed3bb2634d using php documentation regex 2023-03-21 15:15:38 +01:00
Nuno Maduro 48ae4bfc18 fix: description when using ふが chars 2023-03-21 13:45:20 +00:00
Nuno Maduro 26bb0b6eec chore: bumps dependencies 2023-03-21 13:44:18 +00:00
Nuno Maduro 236a9bd7ce chore: style changes 2023-03-21 13:42:21 +00:00
Nuno Maduro f4d19c90d3 chore: bumps dependencies 2023-03-21 13:42:10 +00:00
Dan Ang ecbaff503e Add Date/DateTimeImmutable to Expectations 2023-03-21 14:37:17 +01:00
Nuno Maduro 9d0cd32e3f release: v2.0.2 2023-03-20 17:52:35 +00:00
Nuno Maduro 8782e9c34e release: v2.0.2 2023-03-20 17:52:15 +00:00
Nuno Maduro a4932e41de release: v2.0.2 2023-03-20 17:51:54 +00:00
Nuno Maduro 522ac55d5f chore: rebuilds snapshots 2023-03-20 17:45:35 +00:00
Nuno Maduro b3a8aef6ac chore: improves tests 2023-03-20 17:42:44 +00:00
Nuno Maduro 8068bebebd chore: updates snapshots 2023-03-20 17:36:18 +00:00
Nuno Maduro b887116e5c fix: Pest.php file not loaded in certain environments 2023-03-20 17:34:42 +00:00
Nuno Maduro 6071d86ac6 tests: update snapshot testing 2023-03-20 16:14:40 +00:00
Nuno Maduro 5723da1043 tests: updates snapshot testing 2023-03-20 16:10:53 +00:00
Nuno Maduro 17e242a5f6 tests: windows global functions 2023-03-20 16:08:14 +00:00
Nuno Maduro c9a8007811 chore: uses instance method of facade 2023-03-20 16:00:11 +00:00
Nuno Maduro c64c41a4d9 chore: requires "phpunit/phpunit": "^10.0.17" 2023-03-20 15:52:41 +00:00
Fabio Ivona da4bf7f5c3 update snapshots 2023-03-20 16:49:15 +01:00
Nuno Maduro bb5dbc878e chore: bumps required version of arch plugin 2023-03-20 15:22:10 +00:00
Nuno Maduro e3ab27e2ec release: v2.0.1 2023-03-20 11:02:54 +00:00
Nuno Maduro 8f91f40e8e fix: removes version from composer.json 2023-03-20 10:55:47 +00:00
Nuno Maduro 2973b600f5 release: v2.0.0 2023-03-20 10:39:49 +00:00
Nuno Maduro 37d4434000 release: v2.0.0 2023-03-20 10:36:51 +00:00
Nuno Maduro 627b673380 docs: updates release 2023-03-20 10:35:27 +00:00
Nuno Maduro bc1b11054c docs: updates release 2023-03-20 10:35:10 +00:00
Nuno Maduro 8350d74020 chore: uses stable minimum-stability 2023-03-20 10:28:10 +00:00
Nuno Maduro 1431a2a897 chore: bumps development tools 2023-03-20 00:21:29 +00:00
Nuno Maduro 2906a2de2d Merge pull request #702 from dansysanalyst/grammar_fix
Exceptions - Grammar Fix
2023-03-19 23:44:32 +00:00
Dan Ang 540c2a56bd grammar fixes 2023-03-20 00:37:32 +01:00
Nuno Maduro 2fb8690320 docs: updates changelog 2023-03-19 23:15:14 +00:00
Nuno Maduro 88e047bd27 tests: for test names starting with P 2023-03-19 18:34:20 +00:00
Nuno Maduro 8f630c064f Merge pull request #700 from faissaloux/fix-test-case-name-starts-with-P
Fix test Case Name starts with a P
2023-03-19 17:55:38 +00:00
faissaloux 54fd188299 fix test Case Name starts with a P 2023-03-19 17:46:49 +00:00
Nuno Maduro 4db2318a66 chore: specifies stable version of Collision 2023-03-19 17:09:49 +00:00
Nuno Maduro 7e1c769d1c Delete nightly-tests.yml 2023-03-19 16:45:49 +00:00
Nuno Maduro 7a57f9f9b8 chore: incrementally supports PHPUnit patch versions 2023-03-19 16:45:43 +00:00
Nuno Maduro 961e0aec66 feat: removes non used subscriber 2023-03-19 15:40:53 +00:00
Nuno Maduro ccfcd336fe fix: profile plugin 2023-03-19 04:00:10 +00:00
Nuno Maduro 7287d65865 chore: runs nightly builds against 10.0.x-dev 2023-03-19 03:58:04 +00:00
Nuno Maduro d96ddaeaac feat: clarifies that profile is not supported in parallel 2023-03-19 03:51:27 +00:00
Nuno Maduro 085d3436c8 fix: detection of dirty files 2023-03-19 03:38:20 +00:00
Nuno Maduro 2da899a2b1 fix: --todos in parallel and feedback on process isolation 2023-03-19 02:01:08 +00:00
Nuno Maduro 48ea48981b fix: todos flag 2023-03-19 00:49:06 +00:00
Nuno Maduro 084f7c596f feat: improves --bail 2023-03-19 00:41:41 +00:00
Nuno Maduro aafdf6f39c chore: improves static checking 2023-03-18 23:48:01 +00:00
Nuno Maduro d4c66d73a0 chore: static checks 2023-03-18 23:35:05 +00:00
Fabio Ivona 7d89d3546e update snapshots 2023-03-19 00:22:31 +01:00
Nuno Maduro 840364891c fix: prepares for nightly phpunit release 2023-03-18 23:19:20 +00:00
Fabio Ivona 1f3e5115c7 fix failure message 2023-03-19 00:14:18 +01:00
Fabio Ivona 9de85175db better dataset arguments mismatch message 2023-03-18 23:58:09 +01:00
Nuno Maduro 0bf051610d Merge pull request #694 from faissaloux/refactor-result-php
Replace magic number `0` by meaningful const
2023-03-18 20:08:48 +00:00
Nuno Maduro 42fc80b76d Merge pull request #695 from faissaloux/remove-unused-imports
Remove unused imports
2023-03-18 20:08:28 +00:00
faissaloux ff1249b5cf remove unused imports 2023-03-18 16:16:45 +01:00
faissaloux 331585a0ba replace magic number 0 by meaningful const 2023-03-18 16:03:43 +01:00
Nuno Maduro 0c808736b8 chore: removes changelog 2023-03-18 02:10:40 +00:00
Nuno Maduro 9f0dc108fa Update FUNDING.yml 2023-03-18 02:06:57 +00:00
Nuno Maduro cf5c6f9ffd chore: adjusts ci 2023-03-18 00:59:05 +00:00
Nuno Maduro f6d6a4db78 chore: adjusts ci 2023-03-18 00:58:44 +00:00
Nuno Maduro ef3305ec23 docs: updates readme 2023-03-18 00:41:49 +00:00
Nuno Maduro f6ce6cece7 docs: updates links 2023-03-18 00:31:36 +00:00
Nuno Maduro 32923f32a8 docs: updates links 2023-03-18 00:30:39 +00:00
Nuno Maduro 02f3202a61 docs: updates link 2023-03-17 23:32:49 +00:00
Nuno Maduro e6af0c8a77 docs: update readme 2023-03-17 23:18:45 +00:00
Nuno Maduro 52a8183fcb docs: updates discord 2023-03-17 23:11:05 +00:00
Nuno Maduro c2f57811e1 chore: updates readme 2023-03-17 23:08:06 +00:00
Nuno Maduro 639029349d chore: skips parallel on windows 2023-03-17 22:49:25 +00:00
Nuno Maduro 595172aba6 docs: updates sponsors 2023-03-17 22:18:21 +00:00
Nuno Maduro e7af5a4cf9 fix: deprecations 2023-03-17 20:39:29 +00:00
Nuno Maduro ef7d1527da Fixes unit stub 2023-03-17 17:02:20 +00:00
Nuno Maduro 2a370a2a76 fix: support message 2023-03-17 15:22:55 +00:00
Nuno Maduro b828843974 fix: spacing in init 2023-03-17 15:19:22 +00:00
Nuno Maduro 0b99c72937 fix: tries getenv 2023-03-17 11:50:41 +00:00
Nuno Maduro ec4f15132e feat: allows to skip support via env 2023-03-17 11:42:23 +00:00
Nuno Maduro 0e4cc94471 feat: improve --init command 2023-03-17 10:58:23 +00:00
Nuno Maduro 9e89fb5e23 feat: improves init plugin 2023-03-17 10:31:03 +00:00
Nuno Maduro 26cf278103 feat: adds laravel stubs 2023-03-17 10:28:50 +00:00
Nuno Maduro 050fe38a90 fix: default phpunit file 2023-03-17 10:25:51 +00:00
Nuno Maduro f07c3a2480 tests: clarifies dependencies 2023-03-17 02:06:26 +00:00
Nuno Maduro ae365324a8 tests: adds arch tests 2023-03-17 01:45:40 +00:00
Nuno Maduro b4b212a426 feat: moves "UsedOn" to "UsedIn" 2023-03-16 19:48:52 +00:00
Nuno Maduro f52d4392a6 Merge pull request #691 from localheinz/feature/phpunit
Enhancement: Run tests against `phpunit/phpunit:dev-main` every 12 hours
2023-03-16 12:09:47 +00:00
Nuno Maduro c662c59daf chore: updates build name 2023-03-16 12:09:35 +00:00
Nuno Maduro ef4a487322 feat: adds --bail to help 2023-03-16 11:57:50 +00:00
Nuno Maduro 30b151f927 feat: --bail 2023-03-16 11:55:42 +00:00
Nuno Maduro b93bf82be6 Merge pull request #692 from xiCO2k/fix/help-command
[2.x] Help Command
2023-03-16 11:43:51 +00:00
Francisco Madeira ea3827fe7f fix: Help Command 2023-03-16 11:42:29 +00:00
Nuno Maduro 7cd6b4ff40 wip 2023-03-16 11:06:07 +00:00
Andreas Möller 544af117bb Enhancement: Run tests against phpunit/phpunit:dev-main every 12 hours 2023-03-16 10:37:11 +01:00
Nuno Maduro d71af91360 feat: re-adds tap to avoid BC 2023-03-14 19:09:46 +00:00
Nuno Maduro fccb90c8ea fix: coverage lines 2023-03-14 14:26:08 +00:00
Nuno Maduro 4b1cad2493 fix: description when before each fails 2023-03-14 13:06:42 +00:00
Nuno Maduro 57cd294f0f chore: updates snapshots 2023-03-14 01:28:29 +00:00
Nuno Maduro 837552b11d feat: improves dumper 2023-03-13 21:36:51 +00:00
Nuno Maduro 966c382d1a Merge pull request #685 from fabio-ivona/fix-multiple-dataset-test-case-access
Fix multiple dataset test case access
2023-03-13 17:53:40 +00:00
Fabio Ivona 43e17741eb update snapshots 2023-03-13 18:49:35 +01:00
Fabio Ivona d6e3906da6 Fix unreachable test case from multiple datasets 2023-03-13 18:14:26 +01:00
Fabio Ivona dbef162fa6 failing test 2023-03-13 18:13:57 +01:00
Fabio Ivona 1bd9c9e60d wip 2023-03-13 18:13:57 +01:00
Nuno Maduro d1adc65037 chore: bumps collision 2023-03-13 17:10:17 +00:00
Nuno Maduro ae15fa668d fix: type checking 2023-03-13 16:55:41 +00:00
Nuno Maduro 88e576c3a3 Merge pull request #684 from fabio-ivona/fix-phpunit-changes
Fix PHPUnit internal breaking changes
2023-03-13 16:26:57 +00:00
Fabio Ivona 60950c624f fix 2023-03-13 17:26:27 +01:00
Fabio Ivona 3d1e0c3f9f bump to phpunit 10.0.16 2023-03-13 17:11:01 +01:00
Fabio Ivona d6c8149a3a fix phpunit 10.0.16 internal breaking changes 2023-03-13 14:20:42 +01:00
Fabio Ivona aedf2e3727 Merge branch 'pestphp:2.x' into 2.x 2023-03-13 14:04:33 +01:00
Nuno Maduro 6316828fbd feat: adds brianium/paratest and pestphp/pest-plugin-arch by default 2023-03-12 15:51:02 +00:00
Fabio Ivona 24a9ab6761 Merge branch 'pestphp:2.x' into 2.x 2023-03-12 14:00:36 +01:00
Nuno Maduro 0a76032b1b chore: bumps phpunit 2023-03-09 23:48:46 +00:00
Nuno Maduro 730bc7d3b3 chore: code style 2023-03-05 01:48:07 +00:00
Nuno Maduro 99c7bb705e Merge pull request #676 from alirezasalehizadeh/shorter_if
[2.x] shorter if condition
2023-03-03 21:19:32 +00:00
Alireza fc747c306d [2.x] shorter if condition 2023-03-03 23:27:25 +03:30
Nuno Maduro b6b8a72a6a docs: removes sponsor 2023-03-03 10:23:56 +00:00
Nuno Maduro 36f005981b chore: uses stable version of collision 2023-03-03 10:01:06 +00:00
Nuno Maduro eadc6f4307 chore: fix tests 2023-03-03 09:50:41 +00:00
Nuno Maduro 2876ac590d fix: todo in parallel 2023-03-03 01:09:35 +00:00
Nuno Maduro 99436f94f9 chore: uses unstable version of collision 2023-03-03 00:54:32 +00:00
Nuno Maduro 60f82a21db fix: buffer in paralllel combined with coverage 2023-03-02 23:04:21 +00:00
Nuno Maduro f68e6cefd4 chore: type checking 2023-03-02 22:58:11 +00:00
Nuno Maduro b939d94cda fix: non needded output 2023-03-02 22:56:09 +00:00
Nuno Maduro 37d71adb4e fix: cache directory 2023-03-02 22:18:03 +00:00
Nuno Maduro 813f63360b feat: extends test outcome to state generator 2023-03-02 21:57:46 +00:00
Nuno Maduro ad97b202c4 fix: converter 2023-03-02 21:24:05 +00:00
Nuno Maduro 1e61034e86 feat: support for deprecated, notices, and warnings 2023-03-02 20:37:18 +00:00
Nuno Maduro 3f6b2e856e tests: helpers fix 2023-03-02 17:51:34 +00:00
Nuno Maduro 3df68b288a tests: deprecations 2023-03-02 17:51:21 +00:00
Nuno Maduro a75e899d98 chore: unsets collision on testing 2023-03-02 17:51:10 +00:00
Nuno Maduro f25a9f5558 feat: warnings support 2023-03-02 17:50:57 +00:00
Nuno Maduro 69a0c3ba99 chore: dont fails on warnings 2023-03-02 17:50:47 +00:00
Nuno Maduro e1bb1d8c2d fix: printer parallel not displaying progress of deprecations 2023-03-02 17:50:36 +00:00
Nuno Maduro 62238b2714 fix: don't registers exception handlers 2023-03-02 16:24:16 +00:00
Nuno Maduro e9f83dc020 fix: discovering phpunit tests on parallel 2023-03-02 14:09:18 +00:00
Nuno Maduro b15dc03d16 chore: bumps dependencies 2023-03-02 14:09:05 +00:00
Nuno Maduro 3af60b874e chore: upgrades deps 2023-02-28 20:17:49 +05:30
Fabio Ivona 1da1eeb384 Merge branch 'pestphp:2.x' into 2.x 2023-02-26 10:02:57 +01:00
Nuno Maduro 8abad572ec chore: fix CI testing 2023-02-25 17:45:43 +05:30
Nuno Maduro 20012b65fb chore: bumps phpunit 2023-02-25 17:42:29 +05:30
Nuno Maduro 244087db27 fix: parallel status code 2023-02-25 17:42:24 +05:30
Nuno Maduro b54c24a589 fix: --parallel exit code 2023-02-25 17:33:28 +05:30
Nuno Maduro c664094f35 fix: --retry option update 2023-02-21 22:04:30 +00:00
Fabio Ivona f5d71b9282 Merge pull request #669 from fabio-ivona/init-tweak
[chore] tweak init command
2023-02-21 00:03:26 +01:00
Fabio Ivona a478798cfe lint 2023-02-21 00:02:15 +01:00
Fabio Ivona a6e133a194 add --ansi option to artisan command call 2023-02-20 23:56:40 +01:00
Nuno Maduro 46b785f29f Update TestCase.php 2023-02-20 22:54:24 +00:00
Fabio Ivona 69b1c08558 refactor 2023-02-20 23:44:15 +01:00
Nuno Maduro 2a1db41880 fix: cache being mixed with phpunit 2023-02-20 22:38:03 +00:00
Fabio Ivona 64dbcf0a26 init command tweak 2023-02-20 23:17:41 +01:00
Nuno Maduro 683910bff4 fix: improves dump message 2023-02-20 18:10:51 +00:00
Nuno Maduro 7492b331a0 chore: fixes scripts 2023-02-20 17:52:26 +00:00
Nuno Maduro ae8df3f51d chore: runs tests in Parallel on CI 2023-02-20 17:41:43 +00:00
Nuno Maduro 658c428b71 chore: bumps dependencies 2023-02-20 17:33:13 +00:00
Nuno Maduro d7ecef80e9 chore: improves type checking 2023-02-20 17:33:03 +00:00
Nuno Maduro 09644640bf feat: improves error handling 2023-02-20 17:28:33 +00:00
Nuno Maduro ba1f2df40b chore: bumps dependencies 2023-02-20 17:23:57 +00:00
Nuno Maduro 0348037638 fix: retry option should not be used in parallel 2023-02-20 17:23:57 +00:00
Nuno Maduro 23b42730ba Merge pull request #668 from fabio-ivona/custom-expectations-fix
Store interceptors for use with Collision
2023-02-19 17:00:02 +00:00
Fabio Ivona 9ded563e4b store interceptors for use with Collision
this is a workaround for php bug https://github.com/php/php-src/issues/10623, that prevents Collision to retrieve info about the interceptor handler closure. (see https://github.com/nunomaduro/collision/pull/255)
2023-02-19 11:07:44 +01:00
Nuno Maduro 8a48a3da7f chore: updates snapshots 2023-02-18 16:50:12 +00:00
Nuno Maduro 61a35d65c4 chore: upgrades dependencies 2023-02-18 16:47:32 +00:00
Nuno Maduro aafbd04753 style: removes unused variable 2023-02-18 16:46:34 +00:00
Nuno Maduro 56a2f1b733 fix: what's considered a "deffect" test 2023-02-18 16:09:50 +00:00
Nuno Maduro aa3369757c feat: improves dump on internal error 2023-02-18 16:09:25 +00:00
Nuno Maduro f309e06292 fix: assertions on opposite expectations 2023-02-18 15:27:25 +00:00
Nuno Maduro 05989c35a7 chore: increases necessary version of paratest 2023-02-18 15:21:59 +00:00
Nuno Maduro 813a74759b feat: improves parallel output 2023-02-18 15:04:10 +00:00
Nuno Maduro c9fb8e6f52 feat: improves parallel output 2023-02-18 15:00:59 +00:00
Nuno Maduro d374a46c4d feat: improves parallel output 2023-02-18 15:00:49 +00:00
Nuno Maduro 0ce70a0180 fix: relaxes if ob was not started 2023-02-18 14:47:27 +00:00
Nuno Maduro 7fc12613a8 feat: kernel dump 2023-02-18 14:39:47 +00:00
Nuno Maduro d0e949bf19 chore: dont export non necessary files on vendor 2023-02-18 14:39:47 +00:00
Nuno Maduro 957dabc3f0 feat: improves help table 2023-02-18 14:39:47 +00:00
Nuno Maduro b4b4bf3685 style: plugin actions improvements 2023-02-18 14:39:47 +00:00
Nuno Maduro 49619ff2b5 feat: improves DX on auto-complete 2023-02-18 14:39:47 +00:00
Nuno Maduro efca71f1e7 fix: test suite loader 2023-02-18 14:39:47 +00:00
Nuno Maduro 86fdfb75cf chore: bumps dependencies 2023-02-18 14:39:47 +00:00
Nuno Maduro f865e93050 chore: spacing in changelog 2023-02-18 14:39:47 +00:00
Nuno Maduro 4fccddebb0 style: removes non important note 2023-02-18 14:39:47 +00:00
Nuno Maduro 15ef5f12b8 Update README.md 2023-02-17 16:25:36 +00:00
Nuno Maduro c87aabf5d4 feat: prefixes evaluable 2023-02-14 08:57:04 +00:00
Nuno Maduro 0d9c11c99a feat: prefixes evaluables 2023-02-14 08:56:56 +00:00
Nuno Maduro 7fdc7d6997 feat: improves auto-completion 2023-02-14 08:56:46 +00:00
Nuno Maduro 7fe8399d48 style: renames classe name 2023-02-14 08:56:38 +00:00
Nuno Maduro 9be89c4042 fix: removes unused param 2023-02-14 08:56:18 +00:00
Nuno Maduro a61db76c24 feat: deprecates only feature 2023-02-14 08:40:02 +00:00
Nuno Maduro ea6af719e0 reverts: change on tests repository 2023-02-14 08:32:47 +00:00
Nuno Maduro 9f5506364b feat: improves should not happen exception 2023-02-14 08:29:58 +00:00
Nuno Maduro 2d70f18a93 docs: includes license in overrides 2023-02-14 08:01:15 +00:00
Nuno Maduro 427ee89ae6 feat: improves exporter 2023-02-13 23:56:19 +00:00
Nuno Maduro dd4247e150 Merge pull request #647 from cerbero90/feature/compact-dataset-description
[2.x] Compact dataset descriptions
2023-02-13 23:32:36 +00:00
Nuno Maduro cac777bce1 Merge branch '2.x' into feature/compact-dataset-description 2023-02-13 23:32:02 +00:00
Nuno Maduro 3c0390b1ac Merge pull request #656 from fabio-ivona/scheduled-workflows
[workflows] add scheduled runs
2023-02-13 23:26:12 +00:00
Nuno Maduro 2df49947df chore: bumps dependencies 2023-02-13 23:25:35 +00:00
Nuno Maduro 26369a19b4 chore: coding style 2023-02-13 23:25:27 +00:00
Nuno Maduro 2b3e146d5a Merge pull request #658 from WendellAdriel/makefile-add
Add Makefile to make it easier for developers to run docker commands
2023-02-13 19:34:29 +00:00
Nuno Maduro aff8e33eca Merge pull request #662 from pestphp/2.x_parallel_cleanup
2.x Parallel todo support
2023-02-13 13:24:54 +00:00
Luke Downing 104db3f6a5 chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 13:13:23 +00:00
Luke Downing ec8fb202b3 chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 13:11:27 +00:00
Luke Downing e22f6e1e4d chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 12:25:19 +00:00
Luke Downing d57437ff02 chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 12:25:00 +00:00
Luke Downing eb64113a3d chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 12:20:08 +00:00
Luke Downing 3b5f9ec59d chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 12:18:59 +00:00
Luke Downing 666b2f3fd0 chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 12:13:53 +00:00
Luke Downing 2bc33c7cd5 chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 11:22:42 +00:00
Luke Downing 8ee7a4deef chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 11:19:18 +00:00
Luke Downing 69afb31bb9 chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 11:13:17 +00:00
Luke Downing 5ca4c5bca9 chore(cleanup): Tidy-up and tweaks of Pest Parallel integration. 2023-02-13 09:43:49 +00:00
Nuno Maduro b6fb81e506 refactor: parallel 2023-02-13 03:08:36 +00:00
Nuno Maduro 735f131222 refacto: bootstrappers and parallel minor stuff 2023-02-12 23:40:05 +00:00
Nuno Maduro 8a58e984fe fix: gitignore 2023-02-12 01:20:37 +00:00
Nuno Maduro 0e9c1bc0f7 fix: no --dirty tests found 2023-02-12 01:06:02 +00:00
Nuno Maduro e749af6d91 chore: updates dependencies and snapshots 2023-02-11 18:25:37 +00:00
Nuno Maduro 052b9e051b fix: --retry with parallel 2023-02-11 17:39:46 +00:00
Nuno Maduro 6ddc5c8572 Merge pull request #659 from pestphp/pest-parallel
Parallel support
2023-02-11 16:52:11 +00:00
Nuno Maduro 8eaf4859ff chore: different refactors 2023-02-11 16:51:29 +00:00
Luke Downing e1406554fc WIP 2023-02-11 16:51:08 +00:00
Luke Downing 504fd04705 WIP 2023-02-11 16:51:08 +00:00
Luke Downing 7fe7a01d43 WIP 2023-02-11 16:51:08 +00:00
Luke Downing b7ec3c59b8 WIP 2023-02-11 16:51:08 +00:00
Luke Downing 757a98230e WIP 2023-02-11 16:51:00 +00:00
Luke Downing c319a8e84c WIP 2023-02-11 16:51:00 +00:00
Luke Downing 8d33c9dc89 WIP 2023-02-11 16:51:00 +00:00
Luke Downing 2ae06a0e2d WIP 2023-02-11 16:50:59 +00:00
Luke Downing f107fdfa08 WIP 2023-02-11 16:50:59 +00:00
Luke Downing 2561d47bb5 WIP 2023-02-11 16:50:59 +00:00
Luke Downing aff11486b2 Fixes --dirty integration 2023-02-11 16:50:59 +00:00
Luke Downing 17cda168e1 WIP 2023-02-11 16:50:59 +00:00
Luke Downing d5495a7e3a WIP 2023-02-11 16:50:59 +00:00
Luke Downing 87ee5ef36b Style 2023-02-11 16:50:59 +00:00
Luke Downing a34001faf0 WIP 2023-02-11 16:50:59 +00:00
Luke Downing dd840f8861 WIP 2023-02-11 16:50:59 +00:00
Luke Downing f94ea9ba0d WIP 2023-02-11 16:50:59 +00:00
Nuno Maduro 6338d762fa wip 2023-02-11 16:50:59 +00:00
Nuno Maduro f48ae48677 Fixes test name 2023-02-11 16:50:59 +00:00
Nuno Maduro 1658176fe1 Uses default gray 2023-02-11 16:50:59 +00:00
Luke Downing 2f519261f5 Fixes and improvements. 2023-02-11 16:50:59 +00:00
Luke Downing 7466667c08 WIP 2023-02-11 16:50:59 +00:00
Luke Downing d03302db7b WIP 2023-02-11 16:50:59 +00:00
Nuno Maduro 951b54e7cd Uses ResultPrinter 2023-02-11 16:50:59 +00:00
Luke Downing 2929af4715 WIP 2023-02-11 16:50:59 +00:00
Luke Downing 48309931ef WIP 2023-02-11 16:50:59 +00:00
Nuno Maduro d69f61c8d3 refacto: --retry option 2023-02-11 16:48:06 +00:00
Nuno Maduro a8f0b96338 chore: bumps dependencies 2023-02-11 02:36:28 +00:00
Nuno Maduro c1663191ee chore: updates dependencies 2023-02-08 23:40:22 +00:00
Nuno Maduro ded14c5425 Merge pull request #660 from fabio-ivona/phpstan-fix
[2.x] Fix missing parameter to `Style→writeRecap()` method
2023-02-08 23:38:29 +00:00
Fabio Ivona 80bea0b4b4 add missing parameter 2023-02-08 23:29:10 +01:00
Wendell Adriel 2cdcf7f3e3 Add Makefile to make it easier for developers to run docker commands 2023-02-08 12:05:30 +00:00
Nuno Maduro 8d34d0743f chore: bumps phpunit 2023-02-06 18:09:15 +00:00
Nuno Maduro fe763c1dc7 fix: make datasets static 2023-02-06 18:09:07 +00:00
Fabio Ivona 8a2aeff9a0 add scheduled workflow runs 2023-02-06 09:13:07 +01:00
Nuno Maduro b1545f270f chore: updates dependencies 2023-02-04 11:58:02 +00:00
Nuno Maduro 975f1bd9fa chore: uses stable version of PHPUnit v10 2023-02-03 10:47:07 +00:00
Nuno Maduro fed9776f9b chore: updates dev dependencies 2023-02-01 19:23:15 +00:00
Nuno Maduro 803ba535c3 Merge pull request #652 from pestphp/feature/to-have-methods
feat: add support for `toHaveMethod` and `toHaveMethods`
2023-01-29 18:29:01 +00:00
Owen Voke 60358461c4 feat: add support for toHaveMethod and toHaveMethods 2023-01-29 12:35:21 +00:00
Nuno Maduro bdff30b511 Merge pull request #651 from pestphp/docker_support
[2.x] Docker support for OSS contributors
2023-01-28 23:29:36 +00:00
luke 6e3d940c8c Adds Docker to allow users to get the project up and running quickly. 2023-01-28 20:05:28 +00:00
luke b702e0c084 Adds Docker to allow users to get the project up and running quickly. 2023-01-28 20:03:55 +00:00
Nuno Maduro 48caaed58c tests: updates snapshots 2023-01-21 01:36:44 +00:00
Nuno Maduro c45a303451 chore: removes unused code 2023-01-21 01:36:36 +00:00
Andrea Marco Sartori 2bffd6a51e feat: compact dataset descriptions 2023-01-17 21:02:47 +10:00
Nuno Maduro 179e6a9db1 Merge pull request #642 from fabio-ivona/enable-windows-tests
[2.x] Fix #638 #641 windows test failing due directory separators
2023-01-17 11:01:34 +00:00
Fabio Ivona 94cef989d3 enable windows tests 2023-01-16 21:36:33 +01:00
Nuno Maduro 6982b02d48 feat: --todo flag 2023-01-15 20:51:27 +00:00
Nuno Maduro 3a4a57a262 refacto: optional argument 2023-01-14 20:10:24 +00:00
Nuno Maduro 67d26388de chore: bumps dependencies 2023-01-12 21:03:31 +00:00
Nuno Maduro a26e3946bd chore: removes ignored phpstan line 2023-01-12 20:58:33 +00:00
Nuno Maduro 026d4920cf tests: rebuilds snapshots 2023-01-12 20:58:25 +00:00
Nuno Maduro d305f4dca0 fix: --dirty when no tests found 2023-01-11 21:32:15 +00:00
Nuno Maduro 217fae0967 fix: dirty argument 2023-01-11 20:17:51 +00:00
Nuno Maduro 349e2f45df chore: style changes 2023-01-11 20:11:36 +00:00
Nuno Maduro 0675529320 Merge pull request #637 from pestphp/2.x-teamcity
[2.x] Teamcity support
2023-01-11 19:49:11 +00:00
Oliver 0839c7e127 Add Initial teamcity support 2023-01-11 09:37:12 +01:00
Nuno Maduro 15931e2418 feat: rewrites --dirty support 2023-01-10 22:23:52 +00:00
Nuno Maduro f6676118ac Merge pull request #619 from pestphp/dirty_integration
[2.x] Adds initial implementation of `--dirty` option.
2023-01-10 21:34:24 +00:00
Nuno Maduro 78673ceeb1 Merge branch '2.x' into dirty_integration 2023-01-10 21:34:18 +00:00
Nuno Maduro e228d565af feat: allows to chain todo 2023-01-10 20:21:36 +00:00
Nuno Maduro 51bcf6a2be chore: fixes tests 2023-01-10 00:57:23 +00:00
Nuno Maduro feedeab7e3 chore: ignores phpstan error 2023-01-10 00:20:49 +00:00
Nuno Maduro 76d1a8ffed fix: ensures view are boot 2023-01-10 00:20:42 +00:00
Nuno Maduro 5436ff8c49 chore: run tests on windows 2023-01-08 23:16:42 +00:00
Nuno Maduro e8b10fcc91 chore: run tests on macos 2023-01-08 23:14:17 +00:00
Nuno Maduro 4083e6e26e change: removes junit support 2023-01-08 23:02:03 +00:00
Nuno Maduro 3ecf351432 docs: remove todo 2023-01-08 22:56:09 +00:00
Nuno Maduro 6595e6960b tests: adjusts snapshots based on code highlight 2023-01-06 20:09:25 +00:00
Nuno Maduro 330b4f0171 fix: ensures --retry works with errored tests 2023-01-02 20:59:59 +00:00
Nuno Maduro 43a7df2cc1 tests: update snapshots 2023-01-01 20:29:47 +00:00
Nuno Maduro 0e98c5c5c4 style: removes non-used imports 2022-12-29 16:36:17 +00:00
Nuno Maduro 39ee5b9b08 change: refactors DependOn to Use 2022-12-29 16:34:15 +00:00
Nuno Maduro 227d32a1fd feat: improves --coverage output 2022-12-29 11:35:10 +00:00
Nuno Maduro b7e2cd758f fix: when retry.json does not exists 2022-12-29 09:37:45 +00:00
Nuno Maduro c9a02b964d fix: --retry not running all tests after passing 2022-12-29 09:34:53 +00:00
Nuno Maduro 0fd5b2efe1 chore: adjusts return type 2022-12-29 09:31:17 +00:00
Nuno Maduro 476f56b617 feat: adds toBeUsedOnNothing and toBeUsed 2022-12-28 16:27:08 +00:00
Nuno Maduro 174a9ca60b feat: adds toBeUsedOn 2022-12-28 16:09:47 +00:00
Nuno Maduro 406fcf72ae fix: overrides being used on regular phpunit 2022-12-28 14:21:07 +00:00
Nuno Maduro 37b1367d25 chore: adjusts snapshots 2022-12-23 23:03:53 +00:00
Nuno Maduro a55953a8e0 chore: remove coverage type 2022-12-23 23:03:46 +00:00
Nuno Maduro f120b32791 Merge pull request #620 from alexmanase/2.x-fix-ignored-description-for-lazy-datasets
[2.x] Fix: ignored dataset description for string description
2022-12-23 23:01:45 +00:00
Nuno Maduro ca113127cc Merge branch '2.x' into 2.x-fix-ignored-description-for-lazy-datasets 2022-12-23 23:01:39 +00:00
Nuno Maduro 138bdf599b feat: adds toOnlyBeUsedOn 2022-12-21 04:00:45 +00:00
Nuno Maduro 522504916b fix: namespace import 2022-12-21 00:11:55 +00:00
Nuno Maduro b04207d9ea feat: improves not->toDependOn 2022-12-21 00:09:38 +00:00
Nuno Maduro 9596274b14 fix: test suite loader duplicating tests 2022-12-20 22:42:31 +00:00
Nuno Maduro 8d018ea3f1 chore: bumps termwind 2022-12-20 22:42:31 +00:00
Fabio Ivona 0f0af9eefb Merge pull request #625 from SamuelMwangiW/patch-1
Tests Badge
2022-12-17 22:25:43 +01:00
Samuel Mwangi 8aece3981d Tests Badge
Apply changes to the badge as per https://github.com/badges/shields/issues/8671
2022-12-17 22:06:21 +03:00
Nuno Maduro 1c9c408cf3 fix: style of memory plugin 2022-12-15 02:10:47 +00:00
Nuno Maduro 3911cfec6d chore: updates snapshots 2022-12-14 14:56:31 +00:00
Nuno Maduro 6d7fd66f82 tests: on opposite throwExpectationFailedException 2022-12-14 14:56:26 +00:00
Nuno Maduro e1e926076a fix: types on arch expectations 2022-12-14 14:56:11 +00:00
Nuno Maduro 68bf8a2d26 feat: adds arch related expectations 2022-12-13 15:27:22 +00:00
Nuno Maduro c0d9f739b3 chore: fixes script name 2022-12-12 13:44:39 +00:00
Alex Manase d33cc19778 fix: ignored dataset description for string description 2022-12-07 20:10:23 +02:00
Nuno Maduro f940b89284 chore: upgrades dev tools 2022-12-07 14:17:44 +00:00
Nuno Maduro 21990ccd8b refacto: attribute above 2022-12-07 14:17:30 +00:00
Nuno Maduro c01654efcc refactor: makes const final 2022-12-07 14:12:27 +00:00
Nuno Maduro 1ad631c528 chore: ignores eval only on test factory 2022-12-07 09:32:27 +00:00
Nuno Maduro ecb5d9c83e chore: bumps certain types of type coverage 2022-12-07 09:30:50 +00:00
Nuno Maduro 0039dbde38 chore: adds type coverage at 96% 2022-12-07 09:26:35 +00:00
Nuno Maduro 70f447a8bc chore: improves type coverage 2022-12-07 09:17:35 +00:00
Luke Downing d29d68a2c2 Adds initial implementation of --dirty option. 2022-12-05 08:59:42 +00:00
Nuno Maduro c5f6923e5a fix: methods name with \ 2022-12-04 23:49:58 +00:00
Nuno Maduro 34878bf432 Reverts loading Arch 2022-12-04 23:43:20 +00:00
Nuno Maduro fab08f0e20 Loads Arch files 2022-12-04 23:38:46 +00:00
Nuno Maduro 850955d7dd fix: reverts autoloading functions 2022-12-04 23:07:39 +00:00
Nuno Maduro 606d627f1d Revert "fix: default tests path"
This reverts commit 3bc356ceec.
2022-12-04 20:06:42 +00:00
Nuno Maduro dfe8a3deeb revert: inline testing 2022-12-04 20:06:07 +00:00
Nuno Maduro 3bc356ceec fix: default tests path 2022-12-04 19:02:04 +00:00
Nuno Maduro 7ad045d6b7 feat: inline testing 2022-12-04 18:38:20 +00:00
Nuno Maduro 3324455e0a feat: only registers globals if necessary 2022-12-04 16:32:45 +00:00
Nuno Maduro 7ffc5602b4 Merge pull request #584 from fabio-ivona/datasets-scope
[2.x] Dataset scopes
2022-11-30 22:35:37 +00:00
Fabio Ivona 8944fdd96f update snapshots 2022-11-30 14:08:47 +01:00
Fabio Ivona 3aaa93931a Merge branch 'master' into datasets-scope
# Conflicts:
#	tests/.snapshots/success.txt
2022-11-30 14:06:05 +01:00
Nuno Maduro d77715b0fe fix: --filter option 2022-11-21 20:47:47 +00:00
Nuno Maduro 17cc194ad1 Adds sponsor 2022-11-21 12:09:32 +00:00
Nuno Maduro f9397924fa revert(fix): on risky expecatations 2022-11-18 02:28:33 +00:00
Nuno Maduro 9281060ab5 fix: risky tests on oposite expectations 2022-11-18 02:24:54 +00:00
Nuno Maduro 6a3cc48d6b Updates snapshots 2022-11-09 21:00:48 +00:00
Nuno Maduro 7194a87d0a Merge pull request #603 from alexmanase/2.x_fix/iterator-to-array
[2.x] Fix storing of lazy datasets into internal array
2022-11-09 20:58:57 +00:00
Nuno Maduro 3e325e3364 chore: improves type checking 2022-11-09 20:34:18 +00:00
Nuno Maduro 348bd4b923 feat: improves feedback when test misses description 2022-11-09 20:31:35 +00:00
Nuno Maduro f6cfd425c6 tests: updates snapshots 2022-11-09 20:15:51 +00:00
Nuno Maduro 7683d791f4 chore: bumps dependencies 2022-11-09 20:10:22 +00:00
Alex Manase 649047f087 formatting 2022-10-30 13:17:56 +02:00
Alex Manase 3aab10774e wip 2022-10-30 13:16:07 +02:00
Alex Manase e37f3d3d45 ignore the keys returned by the datasets Generator for storing them into an array 2022-10-30 13:05:09 +02:00
Nuno Maduro e105afce83 Updates sponsors 2022-10-26 14:36:46 +01:00
Nuno Maduro 3d16183a93 Merge pull request #592 from dansysanalyst/fix_windows_backtrace
[2.x] Fix Backtrace cross-plataform compatibility
2022-09-28 11:22:28 +01:00
Dan Ang 129325db8e Add windows support to Backtrace 2022-09-27 22:47:02 +02:00
Nuno Maduro f214a78c75 Removes symlinked autoload code 2022-09-25 23:40:21 +01:00
Nuno Maduro 42c10f9a62 Rebuilds snapshots 2022-09-25 16:37:13 +01:00
Nuno Maduro 8d4fa06ba3 Removes unused code 2022-09-25 16:36:32 +01:00
Nuno Maduro a73744c081 Fixes symlinked autoloads 2022-09-25 11:41:13 +01:00
Nuno Maduro e2ab53ed53 Fixes symlinked namespaces 2022-09-25 11:40:56 +01:00
Nuno Maduro 5c4e98cf0c Docs 2022-09-25 11:40:38 +01:00
Nuno Maduro 6bad9d302b Fixes coverage size 2022-09-25 11:38:25 +01:00
Fabio Ivona db00fc8c09 Renamed DatasetAlreadyExists exception 2022-09-22 11:01:31 +02:00
Fabio Ivona 98b04632ce remove hardcoded string 2022-09-22 10:59:31 +02:00
Fabio Ivona cbd4cefc1a Update src/Repositories/DatasetsRepository.php
Co-authored-by: Luke Downing <lukeraymonddowning@gmail.com>
2022-09-22 10:56:47 +02:00
Fabio Ivona 84b8c389b2 remove hardcoded string 2022-09-22 10:56:03 +02:00
Fabio Ivona e34364d8b1 remove dump 2022-09-22 10:35:57 +02:00
Fabio Ivona 80854d5f87 Add DatasetInfo support class 2022-09-22 10:33:15 +02:00
Fabio Ivona cbee6e76b0 [feat] scoped datasets 2022-09-20 00:11:37 +02:00
Nuno Maduro 12618ff8b3 Update CHANGELOG.md 2022-09-19 11:07:24 +01:00
Nuno Maduro 115bb551df Merge pull request #583 from fabio-ivona/add-failed-expectations-message
[2.x] Add custom message to failed expectations
2022-09-19 11:03:56 +01:00
Nuno Maduro 3799dc7a2a Update Expectation.php 2022-09-19 11:03:30 +01:00
Fabio Ivona a8b8adafdf Any Matcher refactor 2022-09-19 12:01:44 +02:00
Fabio Ivona 961e44b5ad revert expectation failure message arg back to $message 2022-09-19 11:10:51 +02:00
Fabio Ivona 20e99af194 Merge branch '2.x' into add-failed-expectations-message 2022-09-19 11:01:05 +02:00
Nuno Maduro 1c888ce055 Update TODO.md 2022-09-19 10:00:17 +01:00
Fabio Ivona f3a748fee3 create Any matcher 2022-09-19 11:00:13 +02:00
Nuno Maduro 2a68234bd3 Update TODO.md 2022-09-19 09:56:57 +01:00
Fabio Ivona 8275d7e08d update success snapshot 2022-09-19 10:54:39 +02:00
Fabio Ivona e9630ff9a6 remove duration from success snapshot 2022-09-19 10:50:15 +02:00
Fabio Ivona 97431f2622 fix tests when coverage is not available 2022-09-19 10:50:13 +02:00
Fabio Ivona df8a64b017 fix lint composer command 2022-09-19 10:50:13 +02:00
Nuno Maduro accfe86eaa Merge pull request #582 from fabio-ivona/remove-duration-from-success-snapshot
[2.x] Remove duration from success snapshot
2022-09-19 09:42:19 +01:00
Nuno Maduro 667918905f Merge pull request #580 from fabio-ivona/fix-tests-when-xdebug-not-installed
[2.x] Fix tests when coverage is not available
2022-09-19 09:42:05 +01:00
Nuno Maduro c1231c9bde Merge pull request #581 from fabio-ivona/fix-lint-composer-command
[2.x] Fix lint composer command
2022-09-19 09:41:51 +01:00
Fabio Ivona bac941715a rename message key to failureMessage 2022-09-19 10:37:37 +02:00
Fabio Ivona 8a3caa5e7f add custom message to failed expectations 2022-09-19 09:03:27 +02:00
Fabio Ivona 7bc513bc2b remove duration from success snapshot 2022-09-19 08:55:45 +02:00
Fabio Ivona eecc598471 fix lint composer command 2022-09-19 08:48:30 +02:00
Fabio Ivona d8d1baf945 fix tests when coverage is not available 2022-09-19 08:45:48 +02:00
Nuno Maduro c5cb1fc325 Rebuilds snapshots 2022-09-18 21:55:18 +01:00
Nuno Maduro 93a118a532 Adds missing dev dependencies 2022-09-18 21:46:06 +01:00
Nuno Maduro d6ddd7326a Removes laravel stubs 2022-09-18 16:33:19 +01:00
Nuno Maduro fa1145dced Moves Laravel stuff to plugin 2022-09-18 15:59:29 +01:00
Nuno Maduro 06ef57060f Uses Collision v7.x 2022-09-18 15:20:36 +01:00
Nuno Maduro 921d580d47 Requires pest/pest-plugin 2.x 2022-09-18 14:24:16 +01:00
Nuno Maduro 7c7c8358e9 Uses dev tools 2022-09-18 14:01:47 +01:00
Nuno Maduro 9b54b61e2e Updates todo 2022-09-18 13:43:51 +01:00
Nuno Maduro b93e3524f5 Bumps dusk 2022-09-18 12:20:33 +01:00
Nuno Maduro b6598af59f Improves init command 2022-09-18 11:54:07 +01:00
Nuno Maduro 4de7284657 Improves help command 2022-09-18 11:10:18 +01:00
Nuno Maduro 0e0e2adfbe Fixes --version and --help 2022-09-17 23:47:47 +01:00
Nuno Maduro 08b62f6633 Skips coverage 2022-09-16 19:49:07 +01:00
Nuno Maduro b0b83505af Adds --profile 2022-09-16 19:11:59 +01:00
Nuno Maduro 3d5271f512 Improves coverage feedback 2022-09-16 17:47:32 +01:00
Owen Voke 462982bb28 ci: fix Static Tests workflow 2022-09-16 16:51:41 +01:00
Nuno Maduro 245f636fa8 Removes duration 2022-09-16 16:43:11 +01:00
Nuno Maduro 9fd8610390 Adds compact printer 2022-09-16 16:27:23 +01:00
Nuno Maduro 7a41a540f2 Fixes covers tests 2022-09-16 12:34:20 +01:00
Nuno Maduro fb588711ef Fixes tests 2022-09-16 11:40:19 +01:00
Nuno Maduro 1e7e164d84 Removes non-readonly property 2022-09-16 11:28:25 +01:00
Nuno Maduro 036f2de795 Removes non-used configuration 2022-09-16 11:27:42 +01:00
Nuno Maduro 45011ebd14 Code quality improvements 2022-09-16 11:27:17 +01:00
Nuno Maduro e9564febaf Migrates to Pint 2022-09-16 10:45:53 +01:00
Nuno Maduro 579b975318 Fixes --filter 2022-09-15 23:55:54 +01:00
Nuno Maduro d8f3e9c313 Avoids extra line at the end 2022-09-15 23:55:39 +01:00
Nuno Maduro 01ccbfe254 Improves display of memory plugin 2022-09-15 23:55:26 +01:00
Nuno Maduro af82c1005a Adds todo 2022-09-15 23:08:32 +01:00
Nuno Maduro 02e3b5aa77 Adds todo 2022-09-15 23:08:32 +01:00
Nuno Maduro fb378bed56 wip 2022-09-15 21:19:48 +01:00
Nuno Maduro 1454bcf165 Updates snapshots 2022-09-15 21:17:02 +01:00
Nuno Maduro f20a7cc9e4 Removes non-used tests 2022-09-15 21:16:28 +01:00
Nuno Maduro b21bfe3666 Removes non-unused code 2022-09-15 21:12:22 +01:00
Nuno Maduro 0669423138 Style 2022-09-15 21:11:42 +01:00
Nuno Maduro 3f111708e3 Verboses integration tests 2022-09-15 21:10:25 +01:00
Nuno Maduro a1f47f1a90 Verboses integration 2022-09-15 21:08:35 +01:00
Nuno Maduro 24a17cfb7c Adds sponsro 2022-09-15 21:03:09 +01:00
Nuno Maduro bee4eda3ef Adjusts tests to new printer 2022-09-15 20:54:46 +01:00
Nuno Maduro 797ebb2986 Style 2022-09-15 14:31:53 +01:00
Nuno Maduro ddb75441e7 Fixes types 2022-09-15 14:18:10 +01:00
Nuno Maduro c61d70abf1 Removes possibility of tests being risky 2022-09-15 14:13:18 +01:00
Nuno Maduro 0953ae431e Fixes ignorable tests 2022-09-15 14:10:25 +01:00
Nuno Maduro b3a2e6026f Enables integration test on CI 2022-09-15 12:08:18 +01:00
Nuno Maduro 46ffdf9c7a Enables integration 2022-09-15 12:07:32 +01:00
Nuno Maduro 99e607dcfb Reverts changes on snapshot 2022-09-15 11:29:54 +01:00
Nuno Maduro 1006b9cb7b Style 2022-09-15 11:29:45 +01:00
Nuno Maduro 6769231b00 Fixes using test cases on uses with tests 2022-09-15 09:13:45 +01:00
Nuno Maduro 3ff95faaaa Uses Collision ^7.0 2022-09-15 01:07:15 +01:00
Nuno Maduro eab944023c Upgrades dependencies 2022-09-11 13:46:06 +01:00
Nuno Maduro 00d3c735fe Merge pull request #566 from fabio-ivona/2.x-dynamic-properties-fix
2.x dynamic properties fix
2022-08-29 15:14:41 +01:00
Fabio Ivona 173a72e69d revert unwanted code 2022-08-29 15:51:22 +02:00
Fabio Ivona 38a82cd142 fix types 2022-08-29 14:04:47 +02:00
Fabio Ivona 42ceddf374 fix tests 2022-08-29 13:13:33 +02:00
Fabio Ivona 6252e288b9 add php8.2 tests 2022-08-29 12:45:08 +02:00
Fabio Ivona 8594980dae fix Dynamic Properties attribute 2022-08-29 12:44:45 +02:00
Nuno Maduro c22fed89f3 Merge pull request #564 from fabio-ivona/2.x-dynamic-properties
[2.x] Allow Dynamic Properties
2022-08-26 11:02:46 +01:00
Fabio Ivona 429660fe57 fix tests 2022-08-26 11:38:36 +02:00
Fabio Ivona a4ec4b2841 fix tests against PhpUnit 10 refactors 2022-08-25 16:20:00 +02:00
Fabio Ivona c0d66b7dc7 allow dynamic properties 2022-08-25 15:56:14 +02:00
Nuno Maduro 787e7f6ce5 Adds sponsors 2022-08-13 00:06:37 +01:00
Nuno Maduro 2c338468bc Add Localazy as sponsor 2022-08-11 15:42:01 +01:00
Nuno Maduro d8b456d89a Bumps dependencies 2022-08-08 20:53:28 +01:00
Fabio Ivona bff18ab381 Merge pull request #551 from fabio-ivona/fix-phpunit-printer-refactor
fix lint
2022-08-02 11:06:03 +02:00
Fabio Ivona 4e95a65af1 fix lint 2022-08-02 11:03:06 +02:00
Fabio Ivona 1706e1d2e0 fix lint 2022-08-02 11:01:17 +02:00
Fabio Ivona 324823fef0 Merge pull request #534 from fabio-ivona/fix-phpunit-printer-refactor
Fix issues after PHPUnit refactoring
2022-08-02 10:58:54 +02:00
Fabio Ivona afedf83f5d fix PhpUnit allowiing abstract testcases no more 2022-06-23 15:32:38 +02:00
Fabio Ivona 402995bf29 implement our own Printer class because PhpUnit DefaultPrinter has become final 2022-06-23 14:24:10 +02:00
Nuno Maduro c0fc52f719 chore: removes team printer while printer stuff is not ready 2022-06-10 09:31:39 +01:00
Nuno Maduro 41dbc947fa Merge pull request #520 from abenerd/feature/new-expectation
add new expectation
2022-05-24 08:00:25 +01:00
Nuno Maduro fe09184c9c Bump dependencies 2022-05-20 13:47:56 +01:00
Nuno Maduro 4821bd4423 fix: high order tests debug 2022-05-12 20:05:36 +01:00
Nuno Maduro 1461c9ba88 chore: updates composer dependencies 2022-05-12 19:44:45 +01:00
abenerd 452d4b26b9 add new expectation 2022-05-08 11:13:45 +02:00
Luke Downing 3dd7b677bd Merge pull request #517 from fgaroby/make_toHaveKeys_accepts_multi-dimensional_arrays
Make 'toHaveKeys' accept multi-dimensional associative arrays
2022-05-06 15:29:30 +02:00
Francescu Garoby 1e86dcecd0 Better PHPStan types 2022-04-30 11:08:42 +02:00
Francescu Garoby 949ba1f298 fix PHPStan types 2022-04-29 23:06:29 +02:00
Francescu Garoby 77b7181b08 Make 'toHaveKeys' accept multi-dimensional associative arrays 2022-04-29 15:17:36 +02:00
Nuno Maduro 6e120d60f6 Merge pull request #508 from danilopolani/feat/drop-php8.0-support
Drop support for PHP 8.0
2022-04-01 17:10:07 +01:00
danilopolani 10ff36480a drop support for php 8.0 2022-04-01 18:05:04 +02:00
Nuno Maduro ffb20c9956 Merge pull request #506 from danilopolani/feat/phpunit-tests-folder
[2.x] Read tests folder from PHPUnit.xml file
2022-04-01 16:39:09 +01:00
danilopolani 751a532124 start ConfigLoader tests 2022-04-01 14:34:43 +02:00
danilopolani 80c411be44 add config loader to read phpunit file and get the tests directory or fallback 2022-03-30 15:39:50 +02:00
Luke Downing db5c11d96e Merge pull request #449 from pestphp/performs_no_expectations
[2.x] Adds support for chaining `hasNoExpectations` to the test method.
2022-03-22 13:23:08 +00:00
Luke Downing f3ed9bdf8e Merge branch 'master' into performs_no_expectations
# Conflicts:
#	src/PendingCalls/TestCall.php
2022-03-22 13:20:31 +00:00
Luke Downing 53c20d9cd2 Renames method to throwsNoExceptions. 2022-03-22 13:19:23 +00:00
Nuno Maduro fca0c8fc0c Adds sponsor 2022-03-11 19:58:21 +00:00
Nuno Maduro c8aa204ee0 Merge pull request #498 from danilopolani/fix/types
Fix phpstan static errors
2022-03-09 10:51:55 +00:00
danilopolani a3889110f1 fix phpstan types 2022-03-09 11:48:35 +01:00
Nuno Maduro cda4665979 Merge pull request #492 from danilopolani/feat/covers-attribute
[2.x] Add `covers` attribute
2022-03-09 10:24:58 +00:00
danilopolani 09e2a26b7d fix linting 2022-03-09 11:09:03 +01:00
danilopolani 3dc451cf44 fix typo 2022-03-09 11:08:11 +01:00
danilopolani 3795870150 move coversNothing to method annotations 2022-03-09 11:05:10 +01:00
Nuno Maduro 24204adc09 Adds StandWithUkraine banner 2022-03-09 01:11:37 +00:00
danilopolani a027e24e3c fix typo 2022-03-08 15:02:30 +01:00
danilopolani 15e2e1711b enforce class-string for attributes 2022-03-08 14:57:17 +01:00
Owen Voke d363321db5 Merge pull request #497 from pestphp/feature/style
style: apply fixes from PHP-CS-Fixer
2022-03-08 10:58:16 +00:00
Owen Voke 3ffed844a6 style: apply fixes from PHP-CS-Fixer 2022-03-08 10:51:38 +00:00
Nuno Maduro 9cf1005183 Merge pull request #496 from hebinet/dump-for-expections
[1.x] Add `dump` helper to Expectation class
2022-03-08 10:24:56 +00:00
Markus Hebenstreit 3601d01bd5 Added dump helper to Expectation class 2022-03-08 10:41:09 +01:00
danilopolani d0136b63d4 fix linting 2022-03-07 18:23:06 +01:00
danilopolani 00029c15ef add generic covers method to accept both classes and functions 2022-03-07 18:22:30 +01:00
danilopolani a5cbdea868 fix phpstan issues 2022-03-07 17:51:47 +01:00
danilopolani edd1d890ca replace double foreach with a filter and reduce 2022-03-07 17:51:39 +01:00
danilopolani 985bbf4ea5 add tests for covers attribute 2022-03-07 17:40:43 +01:00
danilopolani 443f848386 fix fqn for coversClass 2022-03-07 17:40:29 +01:00
danilopolani 32dbac87c8 fix fqn on coversClass attribute and array evaluation 2022-03-07 16:18:55 +01:00
danilopolani 1dc33070fe fix phpdoc 2022-03-06 19:02:02 +01:00
danilopolani 1079793ccf cleanup 2022-03-05 17:25:23 +01:00
danilopolani 21364779f9 move covers attribute above the class 2022-03-05 17:23:03 +01:00
danilopolani 50d8688b79 allow multiple values on coversClass and coversFunction 2022-03-05 17:06:00 +01:00
danilopolani 27baad82d0 remove method name on coversClass 2022-03-05 17:03:45 +01:00
danilopolani a894386b49 pass methods name to attribute surrounded by quotes 2022-03-05 16:51:12 +01:00
danilopolani 2465b88462 add covers list and attributes mutator 2022-03-05 16:23:05 +01:00
danilopolani 7660517f7c start covers attribute implementation 2022-03-04 22:28:37 +01:00
Fabio Ivona 74470ec96d Merge pull request #491 from def-studio/fix-cs
fix code style
2022-03-04 17:37:26 +01:00
Fabio Ivona 03ccea8978 fix code style 2022-03-04 17:36:02 +01:00
Nuno Maduro ed89689425 Merge pull request #490 from mkohei/feat/add-code-to-the-throws-arg
feat: Add code to the throws arg
2022-03-04 15:27:33 +00:00
Nuno Maduro 62d7652376 Merge pull request #489 from owenvoke/bugfix/phpstan-fixes
fix: resolve PHPStan warnings
2022-03-04 08:56:52 +00:00
Kohei Matsumoto 0e85921964 feat: Add code to the throws arg 2022-03-04 13:05:55 +09:00
Owen Voke 51ec80f11f fix: resolve PHPStan warnings 2022-03-03 18:20:24 +00:00
Nuno Maduro e08d6f2803 Merge pull request #488 from owenvoke/feature/ci-ansi
ci: update to use ANSI output
2022-03-03 16:08:47 +00:00
Owen Voke 22030bffd0 ci: update to use ANSI output 2022-03-03 16:01:09 +00:00
Nuno Maduro bc105bc818 Merge pull request #484 from fabio-ivona/fix-restore-missing-exception-in-v2
Fix toThrow expectation passing when exception doesn't exist
2022-03-03 14:34:09 +00:00
Fabio Ivona 2c3a296040 fix types 2022-02-18 16:42:34 +01:00
Fabio Ivona 10b204e19d handles toThrow exception with a "class not found" error 2022-02-18 16:40:31 +01:00
Fabio Ivona 36130eb7a0 adds a failing test 2022-02-18 16:40:17 +01:00
Luke Downing 6d5a8a9235 Merge branch 'master' into performs_no_expectations 2022-02-10 17:26:15 +00:00
Nuno Maduro 04663e0c8e Merge pull request #474 from def-studio/phpstan-fix
phpstan fix
2022-02-05 11:36:21 +00:00
Fabio Ivona 6f9ebe04b0 phpstan fix 2022-02-05 11:36:02 +01:00
Nuno Maduro 8ca4caaffa Merge pull request #467 from pestphp/scoped
Adds support for `scoped` in HigherOrderExpectations
2022-01-23 23:48:10 +00:00
Luke Downing 8baaf80691 Merge branch 'master' into scoped
# Conflicts:
#	src/Expectations/HigherOrderExpectation.php
#	tests/Features/Expect/HigherOrder/methods.php
2022-01-23 23:44:04 +00:00
Luke Downing e91c85496f Adds support for scoped in HigherOrderExpectations. 2022-01-23 23:37:03 +00:00
Nuno Maduro 6bf92d20ad Merge pull request #465 from pestphp/v2_json_fix
Makes `json` expectation usable in Higher Order Tests
2022-01-23 23:29:35 +00:00
Nuno Maduro 35f607c46c Merge pull request #466 from pestphp/rename_tap
Renames `tap` to `defer`.
2022-01-23 23:29:06 +00:00
Luke Downing b99f65d936 Renames tap to defer. 2022-01-23 23:18:55 +00:00
Luke Downing ead2dfd0a9 Makes json expectation usable in Higher Order Tests 2022-01-23 23:10:14 +00:00
Nuno Maduro d2ca6e630d Merge pull request #460 from danharrin/feature/each-keys
feature: Pass `each()` keys to closures
2022-01-20 10:36:09 +00:00
Dan Harrin 12b48a6cf6 move to new test 2022-01-20 10:34:32 +00:00
Dan Harrin 635a71ce66 feature 2022-01-20 10:21:57 +00:00
Dan Harrin b99c4d611b test 2022-01-20 10:21:54 +00:00
Nuno Maduro af8886c062 Merge pull request #457 from cerbero90/feature/avoid-nested-expectations
Avoid nested expectations with `and()`
2022-01-16 13:53:22 +00:00
Andrea Marco Sartori 30b1f6cd0a Add test for and() 2022-01-16 22:32:55 +10:00
Andrea Marco Sartori d24091d224 Fix return docblock 2022-01-16 22:32:38 +10:00
Andrea Marco Sartori b3d3b4485d Do not nest expectations 2022-01-16 22:32:20 +10:00
Nuno Maduro 108fe45164 chore: uses collision v5.11.0 2022-01-10 17:20:12 +00:00
luke e1a30e3c92 Add method comment. 2021-12-08 09:01:16 +00:00
luke d969eaac2c Adds support for chaining hasNoExpectations to the test method. 2021-12-08 08:58:42 +00:00
Nuno Maduro dd081c59b7 refacto: memory plugin 2021-12-05 17:48:51 +00:00
Nuno Maduro b0264886c9 Merge pull request #448 from pestphp/feat/retry
feat: adds `--retry` option
2021-12-05 17:44:26 +00:00
Nuno Maduro 6dcdfdb82f Merge branch 'master' into feat/retry 2021-12-05 17:44:20 +00:00
Nuno Maduro e7d75365fd Merge pull request #433 from owenvoke/feature/memory-usage
feat: add `--memory` usage flag
2021-12-05 17:37:53 +00:00
Owen Voke 266447bcc0 feat: add --memory usage flag 2021-12-05 17:22:21 +00:00
Nuno Maduro b74a688677 tests: style 2021-12-05 14:59:07 +00:00
Nuno Maduro b1f9ce2283 refacto: structure 2021-12-05 14:40:08 +00:00
Nuno Maduro e64b6fe924 refacto: pipes 2021-12-05 14:21:11 +00:00
Nuno Maduro c8697e0310 chore: fixes style 2021-12-05 14:05:01 +00:00
Nuno Maduro 98db677646 refacto: pipes 2021-12-05 14:03:09 +00:00
Nuno Maduro 6c3a8be049 Merge pull request #430 from def-studio/next-1
[v2.x] expectation pipes and interceptors
2021-12-05 12:27:20 +00:00
Nuno Maduro 129a733888 chore: re-adds removed tests 2021-12-04 21:23:48 +00:00
Nuno Maduro 5aeda553a4 fix: removes json file 2021-12-04 21:21:47 +00:00
Nuno Maduro 0146186ddb fix: adds retry.json to gitignore 2021-12-04 21:20:28 +00:00
Nuno Maduro 106b279ed0 feat: adds --retry option 2021-12-04 21:18:55 +00:00
Fabio Ivona 05f44ed84a fix phpstan 2021-11-29 10:06:00 +01:00
Fabio Ivona 6e7890c206 fix phpstan 2021-11-29 09:58:48 +01:00
Fabio Ivona 2d2760e15c fix phpstan 2021-11-29 09:52:18 +01:00
Fabio Ivona b2eb69cbc1 fix phpstan 2021-11-29 09:48:10 +01:00
Fabio Ivona 0fc90ec181 Merge branch 'master' into next-1 2021-11-29 09:36:07 +01:00
Fabio Ivona 337d55b9ab lint 2021-11-29 09:25:00 +01:00
Nuno Maduro 9f1e3dadf4 Merge pull request #424 from pestphp/better-dataset-support
[2.x] Vastly improves the logic around bound datasets to make them more user friendly
2021-11-27 20:07:25 +00:00
luke 24943e5fbb Merge branch 'master' into better-dataset-support 2021-11-27 19:55:14 +00:00
luke 33d1579660 Updates from main 2021-11-27 19:54:39 +00:00
Nuno Maduro 8047ae570d chore: fixes cs 2021-11-27 19:54:21 +00:00
Nuno Maduro e236bf3821 chore: runs static workflows on php81 2021-11-27 19:51:58 +00:00
Nuno Maduro 32c2df0444 chore: runs static workflows on php81 2021-11-27 19:44:41 +00:00
Nuno Maduro 7a0e841a0d chore: fixes tests 2021-11-27 19:41:50 +00:00
luke ce2dcc3128 Merge branch 'master' into better-dataset-support
# Conflicts:
#	src/Concerns/Testable.php
2021-11-27 19:28:39 +00:00
Nuno Maduro 52314a4928 Merge pull request #444 from pestphp/better_expectation_support
[2.x] Improved generics for higher order
2021-11-27 19:27:06 +00:00
luke d65cc9be84 Improved generics for higher order 2021-11-27 19:20:29 +00:00
luke beb14ce5f4 Improved generics for higher order 2021-11-27 18:48:58 +00:00
Nuno Maduro c49700dd47 Merge pull request #443 from pestphp/tweaks
Small Tweaks for Pest v2
2021-11-27 11:30:52 +00:00
luke 3d0f267a5c Moves method evaluation to the method factory 2021-11-27 08:08:09 +00:00
luke 729d7c4bef Small tweaks for PHP 8 2021-11-27 07:44:35 +00:00
Fabio Ivona d10b8f5d2c Merge branch 'master' into next-1 2021-11-26 16:25:40 +01:00
Fabio Ivona 8494d4566a fix tests 2021-11-26 16:15:36 +01:00
Fabio Ivona 7fd9cfa2e9 refactor 2021-11-26 15:44:35 +01:00
Fabio Ivona 3df78f2edf Merge branch 'pipes-and-interceptors' into next-1
# Conflicts:
#	src/Concerns/Extendable.php
#	src/CoreExpectation.php
#	src/Expectation.php
#	src/Support/ExpectationPipeline.php
#	src/Support/Extendable.php
2021-11-26 15:31:40 +01:00
Fabio Ivona 5f0752e874 applied changes from code review 2021-11-26 15:29:21 +01:00
Fabio Ivona cdd67a6900 merge from master 2021-11-26 15:29:21 +01:00
Luke Downing fce24ef01f Port from 1.x 2021-11-26 15:29:18 +01:00
Nuno Maduro 47264416b1 Update FUNDING.yml 2021-11-26 15:29:18 +01:00
Nuno Maduro 86dca12c09 refacto(phpstan-to-8): few adjustments 2021-11-26 15:29:18 +01:00
Fabio Ivona 0b5cea6df1 upgrade to phpstan lvl 9 2021-11-26 15:29:18 +01:00
Fabio Ivona 9258dcc988 fix phpstan failure 2021-11-26 15:29:18 +01:00
Fabio Ivona 24edab45b1 fix tests 2021-11-26 15:29:18 +01:00
Fabio Ivona f3371e51fe wip toward lvl9 2021-11-26 15:29:18 +01:00
Fabio Ivona 83b9f86972 upgrade to phpstan lvl 8 2021-11-26 15:29:15 +01:00
Fabio Ivona ca30677c53 upgrade to phpstan lvl 7 2021-11-26 15:29:15 +01:00
Fabio Ivona b205b8e748 trying to disable phpstan parallel processing 2021-11-26 15:29:15 +01:00
Fabio Ivona b9b9de1945 upgrade to phpstan level 6 2021-11-26 15:29:15 +01:00
Nuno Maduro 22895ce682 docs: updates release 2021-11-26 15:29:15 +01:00
Luke Downing 3829623984 Port from 1.x 2021-11-25 16:49:10 +00:00
Nuno Maduro 3f3bc525bc Update FUNDING.yml 2021-11-21 18:25:07 +00:00
Nuno Maduro ece0930319 Merge pull request #438 from def-studio/phpstan-to-8
Phpstan to 9
2021-11-18 23:41:02 +00:00
Nuno Maduro 94585789dc refacto(phpstan-to-8): few adjustments 2021-11-18 23:39:37 +00:00
Fabio Ivona 7ea6d8a35d upgrade to phpstan lvl 9 2021-11-18 23:27:37 +01:00
Fabio Ivona 9dd40e4610 fix phpstan failure 2021-11-18 01:14:57 +01:00
Fabio Ivona 8cdca8d012 fix tests 2021-11-18 01:04:59 +01:00
Fabio Ivona 7bcd3ebaee wip toward lvl9 2021-11-18 01:01:56 +01:00
Fabio Ivona d4a8a3ec37 upgrade to phpstan lvl 8 2021-11-18 00:12:39 +01:00
Nuno Maduro f460cceeba docs: updates release 2021-11-17 10:55:45 +00:00
Fabio Ivona f3f58c7f52 upgrade to phpstan lvl 7 2021-11-15 22:20:00 +01:00
Fabio Ivona f2a9b73b83 trying to disable phpstan parallel processing 2021-11-15 20:54:47 +01:00
Fabio Ivona ffd4e6d577 upgrade to phpstan level 6 2021-11-15 12:23:53 +01:00
Fabio Ivona 5287eff507 merge from master 2021-11-15 11:54:42 +01:00
Nuno Maduro f6004e07c1 chore: ignores windows builds 2021-11-14 21:45:13 +00:00
Nuno Maduro b2cd60395f chore: phpstan level 5 2021-11-14 21:39:24 +00:00
Nuno Maduro 183f975166 chore: phpstan level 5 2021-11-14 21:23:02 +00:00
Nuno Maduro 8ace01b6f1 Merge branch 'next' 2021-11-14 20:00:34 +00:00
Nuno Maduro 4b213d63bd feat: reworks evalution of Test Case 2021-11-14 19:58:25 +00:00
Nuno Maduro da5c21de8f Update README.md 2021-11-09 01:42:10 +00:00
Nuno Maduro 408ae4cad8 docs: adds spatie.be as platinum sponsor 2021-11-08 18:31:48 +00:00
Nuno Maduro fc2484a28a Update README.md 2021-11-05 12:00:56 +01:00
Fabio Ivona be58d5517a improves static analysis 2021-11-01 10:40:39 +01:00
Fabio Ivona 602403eb59 Update src/Concerns/Extendable.php
Co-authored-by: Luke Downing <lukeraymonddowning@gmail.com>
2021-11-01 10:31:30 +01:00
Fabio Ivona 5f1776829b Update src/Concerns/Extendable.php 2021-10-31 22:16:02 +01:00
Fabio Ivona 4a22c5d673 addresses reviews 2021-10-31 22:08:34 +01:00
Fabio Ivona 3943919709 implemements pipelines and adds tests for it 2021-10-31 15:23:28 +01:00
Fabio Ivona 8174f2d973 extracted Expectations to a CoreExpectation class 2021-10-30 20:14:54 +02:00
Luke Downing 22d16d54c6 Merge branch 'next' into better-dataset-support
# Conflicts:
#	src/Concerns/Testable.php
2021-10-27 18:28:51 +01:00
Nuno Maduro cd34f0ba81 refactor: comments 2021-10-24 22:39:35 +01:00
Nuno Maduro 648c6c5a27 refactor: comments 2021-10-24 19:37:29 +01:00
Nuno Maduro 2b687a7269 refactor: PHP 8 features 2021-10-24 18:29:59 +01:00
Nuno Maduro e8c2fe6e35 fix: test class finder 2021-10-24 01:16:05 +01:00
Nuno Maduro 88dfabc633 chore: points towards 2.0 2021-10-24 01:11:04 +01:00
Nuno Maduro a35bf249a0 chore: points towards 2.0 2021-10-24 01:06:48 +01:00
Nuno Maduro cf47b45262 feat: basic PHPUnit 10 support 2021-10-24 01:03:18 +01:00
Luke Downing eed3ed5513 Vastly improves the logic around bound datasets to make them more user friendly. 2021-10-19 21:40:40 +01:00
Nuno Maduro de46ee0f64 fix: adds link to xdebug coverage mode 2021-10-10 15:33:27 +01:00
Nuno Maduro 1e011c7b40 fix: warns about xdebug modes 2021-10-10 15:25:02 +01:00
Nuno Maduro 04dcebf3aa Revert "Merge pull request #413 from def-studio/fix_skipping_tests_with_exception_asserting"
This reverts commit e853792a59, reversing
changes made to 205238fcbf.
2021-10-10 14:40:07 +01:00
Fabio Ivona 0346450a51 adds test to check if pipes can add parameters to an expectation 2021-10-10 01:09:45 +02:00
Fabio Ivona fc53f08e37 implemented pipe closure with $next as the first parameter 2021-10-10 01:02:04 +02:00
Fabio Ivona bc4e5b9b4e implemented pipe closure with $next as the last parameter 2021-10-10 00:16:21 +02:00
Fabio Ivona c3a445534b adds tests 2021-10-09 12:03:12 +02:00
Fabio Ivona 70877bfad4 updated snapshots 2021-10-09 10:26:22 +02:00
Fabio Ivona 55376d32e5 moved decorate implementation to dedicated intercept and pipe calls 2021-10-09 10:22:24 +02:00
Fabio Ivona 8835502074 lint 2021-10-08 16:38:16 +02:00
Fabio Ivona ba9b06adf3 fix tests 2021-10-08 16:35:31 +02:00
Fabio Ivona e92d9bfaae implements decorators pipeline 2021-10-08 15:29:35 +02:00
Fabio Ivona d802e88148 moved old Expectation in CoreExpectation.php and made Expectation.php a decorator for it 2021-10-07 22:59:46 +02:00
Nuno Maduro e853792a59 Merge pull request #413 from def-studio/fix_skipping_tests_with_exception_asserting
Fix skipping tests with exception asserting
2021-10-02 12:01:04 +01:00
Fabio Ivona b0fbe54181 removes duplicated test 2021-10-02 09:15:52 +02:00
Fabio Ivona 2a649bdfc0 revert previous solution and invert chain and proxy calls in TestCaseFactory.php 2021-10-02 09:09:47 +02:00
Fabio Ivona e042bf7d3a removes expection expectations if test is marked as skipped 2021-10-01 15:52:45 +02:00
Fabio Ivona 3ff71a4563 adds failing test 2021-10-01 15:52:02 +02:00
Nuno Maduro 205238fcbf docs: updates release process 2021-09-25 13:56:06 +01:00
Nuno Maduro ba06c5a76d release: v1.20.0 2021-09-25 13:52:12 +01:00
Nuno Maduro 78ffc491e9 chore: exclude builds on PHP 8.1 on mac os or windows 2021-09-25 13:37:06 +01:00
Nuno Maduro 7f38de11b7 refactor: --ci option 2021-09-25 13:29:11 +01:00
Nuno Maduro a6e34d204c Merge pull request #405 from def-studio/add-new-ci-option-to-pest-bin
Add new --ci option to pest bin
2021-09-25 13:11:05 +01:00
Nuno Maduro 66d47e4922 fix: usage on PHP 7.3 2021-09-25 09:39:17 +01:00
Fabio Ivona 7d70b6e95a merge from master 2021-09-25 09:04:26 +02:00
Fabio Ivona 076dcab4c5 Merge remote-tracking branch 'origin/master' into add-new-ci-option-to-pest-bin
# Conflicts:
#	tests/.snapshots/success.txt
2021-09-25 09:04:07 +02:00
Fabio Ivona 6f42e336c9 merge conflict 2021-09-25 08:57:55 +02:00
Fabio Ivona 0d72b5197c merge conflict 2021-09-25 08:55:57 +02:00
Nuno Maduro 7691e3c602 Merge pull request #399 from mertasan/sequence
Fix: `sequence()` can generate false positives
2021-09-24 22:15:49 +01:00
Nuno Maduro b43a59868d feat: adds unless expectation 2021-09-24 22:12:08 +01:00
Nuno Maduro 457972716f refactor: expectation match method 2021-09-24 22:02:18 +01:00
Nuno Maduro ae029660e3 tests: fixes snapshots 2021-09-24 21:18:30 +01:00
Nuno Maduro dc12419078 Merge pull request #407 from mertasan/method-match
Adds new `match()` method
2021-09-24 21:16:48 +01:00
Nuno Maduro f0ddd10a54 Merge branch 'master' into method-match 2021-09-24 21:16:43 +01:00
Nuno Maduro 4daf7ee4ab refactor: throwsIf method 2021-09-24 21:15:31 +01:00
Nuno Maduro d60f320382 Merge pull request #371 from mertasan/throwsif
Add `throwsIf` exception
2021-09-24 21:10:56 +01:00
Nuno Maduro 3c3e6b160b refactor: expectation when 2021-09-24 21:10:02 +01:00
Mert Aşan c99f8f196e lint 2021-09-24 14:42:26 +03:00
Mert Aşan 9cc4ecd5ab Merge branch 'master' into method-match 2021-09-24 14:39:21 +03:00
Mert Aşan 8d96f975e0 update snapshots 2021-09-24 14:37:01 +03:00
Mert Aşan 7f214f9e12 use and() instead of new self 2021-09-24 13:59:00 +03:00
Mert Aşan da258fa89f remove the warning 2021-09-24 13:55:16 +03:00
Nuno Maduro f23f857903 Merge pull request #406 from mertasan/method-when
Adds new `when()` method
2021-09-24 11:23:21 +01:00
Mert Aşan fec11928cf update snapshots 2021-09-23 06:57:07 +03:00
Mert Aşan f6131d042b add tests
The filename is not accepted as `match.php`
2021-09-23 06:56:47 +03:00
Mert Aşan 543b9542ae add new match() method 2021-09-23 06:55:28 +03:00
Mert Aşan 1681c1f4f8 update snapshots 2021-09-23 03:35:56 +03:00
Mert Aşan f41c3ce9ba add tests 2021-09-23 03:35:46 +03:00
Mert Aşan 847b06e558 add when() method 2021-09-23 03:35:41 +03:00
Fabio Ivona 601c4b01fc refactors to use a Plugin to parse --ci option 2021-09-22 14:53:16 +02:00
Fabio Ivona 05c1c82ae2 lint 2021-09-22 11:05:04 +02:00
Fabio Ivona 1bde49b3c4 types fix 2021-09-22 11:00:41 +02:00
Fabio Ivona b22f5e0c85 adds test for CI env runs 2021-09-22 10:38:21 +02:00
Fabio Ivona dd643faa5c adds a new --ci option to pest binary 2021-09-22 10:17:44 +02:00
Nuno Maduro facbf05016 docs: adds missing entry to changelog 2021-09-20 19:38:02 +01:00
Nuno Maduro 58cff003d8 release: v1.19.0 2021-09-20 19:30:58 +01:00
Nuno Maduro ae997e6eee No need for --ignore-platform-req=php 2021-09-20 19:28:43 +01:00
Nuno Maduro e6c7d68def Adds php-81 support 2021-09-20 19:26:47 +01:00
Mert Aşan 0b19672963 Merge branch 'master' into throwsif 2021-09-19 01:47:07 +03:00
Mert Aşan a16a19e121 update snapshots 2021-09-16 18:10:15 +03:00
Mert Aşan 3dd10b3c7c change test 2021-09-16 18:09:59 +03:00
Mert Aşan 12e63c7376 add new assertion 2021-09-16 18:09:45 +03:00
Nuno Maduro 2f0cd7a4e3 Adds Fathom Analytics as sponsor 2021-09-15 10:03:05 +01:00
Nuno Maduro 447af55e7c Merge pull request #391 from gabbanaesteban/master
Add `toHaveProperties`
2021-09-03 09:52:39 +01:00
Esteban 253e9d10c8 Fix types 2021-09-03 04:44:10 -04:00
Esteban 536ce1eca0 Update snapshots 2021-09-03 04:40:48 -04:00
Esteban 4331b2aaf6 Add toHaveProperties 2021-09-03 04:26:57 -04:00
Nuno Maduro 8d99cacc95 Update README.md 2021-09-02 23:36:02 +01:00
Nuno Maduro 3c38facc8a Update README.md 2021-09-02 23:35:51 +01:00
Nuno Maduro ed389d35d0 Adds Auth0 as sponsor 2021-09-02 23:35:40 +01:00
Nuno Maduro 60c0636523 release: v1.18.0 2021-08-30 00:05:26 +01:00
Nuno Maduro 16b6f96b47 Merge pull request #389 from dansysanalyst/toHaveLength-mblen
Use mb_strlen instead of grapheme_strlen
2021-08-29 12:18:38 +01:00
Daniel Ang 042f2ec3f3 Use mb_strlen instead of grapheme_strlen
Due to inconsistent behave, mb_strlen will be used.
2021-08-29 12:55:37 +02:00
Nuno Maduro 851ce36010 Merge pull request #386 from dansysanalyst/expectation-toHaveLength
Adds toHaveLength() Expectation & Tests
2021-08-29 00:45:39 +01:00
Daniel Ang 4f386894bd Revert "Use toHaveCount"
This reverts commit 2289adade2.
2021-08-28 18:14:55 +02:00
Daniel Ang 2289adade2 Use toHaveCount
changes to toHaveCount
2021-08-28 17:54:29 +02:00
Nuno Maduro 29e21e3814 Merge pull request #385 from dansysanalyst/snapshot-contrib
Update snapshots
2021-08-28 16:47:25 +01:00
Daniel Ang 8367af22e7 Adds toHaveLength() Expectation & Tests
Adds toHaveLength() Expectation and its tests. toHaveLength checks if the given value has the informed length. Works with strings, array, object and collections.
2021-08-28 17:02:09 +02:00
Daniel Ang e3d678dc04 Update snapshots
Adds update:snapshots to CONTRIBUTING
2021-08-28 16:30:17 +02:00
Nuno Maduro 4ae482c707 feat: adds support for nunomaduro/collision:^6.0 2021-08-27 22:32:18 +01:00
Nuno Maduro 075c31bc78 release: v1.17.0 2021-08-26 21:17:03 +01:00
Nuno Maduro 2125bf9668 chore: adjusts tests 2021-08-26 21:14:56 +01:00
Nuno Maduro dbf3c0a8cf Merge pull request #361 from kbond/throw-expectation
Add `toThrow` expectation
2021-08-26 21:02:38 +01:00
Luke Downing eca5f89e59 release: v1.16.0 2021-08-19 17:07:45 +01:00
Luke Downing 0b0beac122 Script update 2021-08-16 22:12:13 +01:00
luke 578e97123d Changes -P to -p 2021-08-13 22:09:55 +01:00
Nuno Maduro 01d672d563 Merge pull request #369 from pestphp/parallel
Parallel testing support
2021-08-13 16:00:26 +01:00
luke 490b2d66e5 Fix 2021-08-13 13:41:00 +01:00
luke 0368c4846f Adds a composer test:parallel script 2021-08-13 13:40:07 +01:00
luke 4dfc02c5da Refactor 2021-08-13 11:19:03 +01:00
luke 5c84b0c6d3 The getFilenames method now respects only calls. 2021-08-13 11:07:52 +01:00
luke b6c06e8c30 Bugfix 2021-08-13 10:46:07 +01:00
luke c6435d5606 Adds a helpful message for users trying to run parallel without the plugin 2021-08-13 10:44:11 +01:00
luke 2887d212e3 CS fix 2021-08-13 10:30:26 +01:00
luke cadae52d5d Updates snapshots 2021-08-13 10:29:21 +01:00
luke d9749ca65b Adds a method for getting all filenames 2021-08-13 10:26:38 +01:00
luke c2070cd99d Refactor 2021-08-13 10:19:10 +01:00
luke 03d34e9a10 Removes isInParallel 2021-08-13 10:14:01 +01:00
luke 45e76a6df6 Typehint updates 2021-08-13 09:41:45 +01:00
luke 28dd3c2a03 Adds -P as a parallel shortcut 2021-08-13 09:39:56 +01:00
luke 5de981d923 Updates composer.json 2021-08-13 09:12:56 +01:00
Nuno Maduro a55b31e7c3 Update FUNDING.yml 2021-08-12 21:41:42 +01:00
Nuno Maduro 5f0bd8180e Update FUNDING.yml 2021-08-12 21:41:05 +01:00
luke e1f1fcccbe Removes unneeded dependency 2021-08-11 21:25:41 +01:00
luke ab04aef561 Refactors addOutput 2021-08-11 20:59:19 +01:00
luke 79ddb1f58e Composer change 2021-08-11 15:57:49 +01:00
luke c7a2e68941 Fixes a problem with the PhpUnit logger 2021-08-10 14:57:36 +01:00
luke 5c592928d4 Adds a new method, isInParallel, to the Testable trait to allow a test to determine its parallel status. 2021-08-10 14:34:10 +01:00
luke bcab4224fb Skips a test that doesn't support parallel. 2021-08-10 14:24:34 +01:00
luke 892f70b5b5 Refactor 2021-08-10 13:17:11 +01:00
luke 5c7de5ad75 Refactor 2021-08-10 12:04:15 +01:00
luke 995088b522 Refactor 2021-08-10 11:32:43 +01:00
luke ef503646ee Removes parallel classes. 2021-08-10 11:30:48 +01:00
luke a760470e48 Adds Pest output to parallel. 2021-08-09 18:57:20 +01:00
Mert Aşan 1d4c1a5359 update snapshots 2021-08-07 08:22:31 +03:00
Mert Aşan 8e32b88fc8 add tests 2021-08-07 08:22:26 +03:00
Mert Aşan 1a7baad338 add throwsIf exception 2021-08-07 08:22:16 +03:00
luke 31d1b1b91d Adds a little more spacing above the coverage output. 2021-08-06 15:15:09 +01:00
Luke Downing 7524c80af6 Merge pull request #370 from nuernbergerA/parallel
Parallel additions
2021-08-06 15:04:51 +01:00
Adrian Nürnberger 721d5134b7 replace str_starts_with to support pre php 8.0 2021-08-06 16:00:03 +02:00
Adrian Nürnberger 0b5321fdd7 only check for coverage driver if option is present 2021-08-06 15:48:38 +02:00
Adrian Nürnberger c86058fed1 use support class 2021-08-06 15:39:19 +02:00
Adrian Nürnberger 8b295b5e9d remove debug statements 2021-08-06 15:38:59 +02:00
Adrian Nürnberger 221248e691 introduced argument mapping, added pest coverage 2021-08-06 15:25:28 +02:00
luke 7621247bb7 Adds workflows for parallel 2021-08-05 17:45:50 +01:00
luke 463a50ebd4 Investigating bug fix 2021-08-05 17:39:23 +01:00
luke 62aabc6ae1 Bugfix. The TestCase is now aware of if it is running in parallel or not 😎 2021-08-05 17:09:45 +01:00
luke 1ca9aa5ca6 Further cleanup 2021-08-05 16:43:09 +01:00
luke 7a76f8dce2 Further cleanup 2021-08-05 16:21:06 +01:00
luke beca27599c Further cleanup 2021-08-05 16:18:47 +01:00
luke 256b167eaf Improvements 2021-08-05 15:31:09 +01:00
luke 5526d4c24d Cleanup 2021-08-05 13:51:55 +01:00
luke 7ea138c640 CS fixes 2021-08-05 13:41:04 +01:00
luke c4a659c3b5 Composer changes 2021-08-05 13:16:29 +01:00
luke 0a3991c314 Initial working draft 2021-08-05 13:13:53 +01:00
Nuno Maduro d1a9e0bbe3 release: v1.15.0 2021-08-04 23:02:18 +01:00
Nuno Maduro 17eacfdf95 Update RELEASE.md 2021-08-04 23:01:40 +01:00
Nuno Maduro 9ec0762d41 tests: refactors toBeTruthy and toBeFalsy 2021-08-04 22:56:18 +01:00
Nuno Maduro 30f39f1850 Merge pull request #367 from gabbanaesteban/add-to-be-falsy-and-to-be-truthy
Add `toBeTruthy` and `ToBeFalsy`
2021-08-04 22:45:39 +01:00
Esteban 8ee07330b3 Add toBeFalsy 2021-08-03 20:55:07 -04:00
Esteban cffde4564d Add toBeTruthy 2021-08-03 20:54:56 -04:00
Nuno Maduro ce7a7649a2 chore: removes scripts folder 2021-08-03 18:59:36 +01:00
Nuno Maduro eeed7e6a0a chore: removes scripts folder 2021-08-03 18:57:41 +01:00
Nuno Maduro d6844f5239 Delete compile.php 2021-08-03 18:55:53 +01:00
Nuno Maduro 06c4019e81 cs: removes comment 2021-08-03 18:22:15 +01:00
Nuno Maduro 7785a8cc58 chore: reverts changes regarding PHP 8.1 2021-08-03 18:00:42 +01:00
Nuno Maduro 663516c1e3 Merge pull request #366 from jeroenvanrensen/patch-1
Fix typography
2021-08-03 14:32:50 +01:00
luke e83667a20b docs: update changelog 2021-08-03 14:01:53 +01:00
Luke Downing aa96d75fb9 Merge pull request #364 from pestphp/bound-datasets
Datasets can now access the test case
2021-08-03 13:58:35 +01:00
Jeroen van Rensen a5af4bc5ed Fix typography 2021-08-03 15:04:03 +03:00
luke 57161ba5ad Merges master 2021-08-02 14:03:33 +01:00
luke b1a9254fc1 Merge branch 'master' into bound-datasets
# Conflicts:
#	tests/.snapshots/success.txt
2021-08-02 14:02:49 +01:00
luke e56e818659 Splits 8.1 OS jobs 2021-08-02 13:06:41 +01:00
luke 79de0d5875 Splits 8.1 OS jobs 2021-08-02 13:05:55 +01:00
luke f6f8140ebc Splits 8.1 OS jobs 2021-08-02 13:05:29 +01:00
luke eed221af46 Adds continue-on-error for php 8.1 2021-08-02 13:03:13 +01:00
luke 524457a4e6 Adds continue-on-error for php 8.1 2021-08-02 13:00:07 +01:00
luke 8e289b7a7d Adds continue-on-error for php 8.1 2021-08-02 12:59:07 +01:00
luke 172b69cf15 Adds continue-on-error for php 8.1 2021-08-02 12:57:57 +01:00
luke 475279a4fa Adds continue-on-error for php 8.1 2021-08-02 12:56:29 +01:00
luke 4b236bf9ff docs: update changelog 2021-08-02 12:50:44 +01:00
luke 50e2d10029 docs: update changelog 2021-08-02 12:50:28 +01:00
Luke Downing fa8a57f1ab Merge pull request #350 from pestphp/teamcity-styling
Teamcity styling
2021-08-02 12:47:54 +01:00
luke 715f8b420b Updates phpunit dependency version 2021-08-02 12:41:23 +01:00
Kevin Bond c776bcf86d add toThrow expectation 2021-08-01 12:33:09 -04:00
luke a0637d86ff Refactors 2021-08-01 17:00:01 +01:00
luke 1a941d7f92 Refactors 2021-08-01 16:45:06 +01:00
luke b5959aa3fa Refactors 2021-08-01 15:42:52 +01:00
luke 8861dd2401 Merges with master 2021-08-01 15:40:34 +01:00
luke da73f4b395 Merge branch 'master' into teamcity-styling
# Conflicts:
#	tests/.snapshots/success.txt
2021-08-01 15:36:53 +01:00
luke d5097d0fe5 Merge conflicts 2021-07-31 23:28:23 +01:00
luke 022ad4be0d Merge branch 'master' into bound-datasets
# Conflicts:
#	tests/.snapshots/success.txt
2021-07-31 23:27:38 +01:00
Nuno Maduro 2d2a83e9e8 chore: run tests against php 8.1 2021-07-31 22:56:33 +01:00
Nuno Maduro 67c7bee4fa Merge pull request #365 from def-studio/expect-toContain-with-multiple-needles
implements multiple needles in expect()->toContain()
2021-07-31 20:34:33 +01:00
Fabio Ivona 675b0f1ec8 implements multiple needles in expect()->toContain() 2021-07-31 18:29:03 +02:00
luke c2b86c3ab3 Removes pest from stack traces 2021-07-30 16:34:30 +01:00
luke 46337b8085 Removes pest from stack traces 2021-07-30 16:32:00 +01:00
luke df172d8eed Adds new lines 2021-07-30 15:36:38 +01:00
luke 24b9160b79 Removes new line from event printing 2021-07-30 15:34:31 +01:00
luke a7860b0b8e CS 2021-07-30 12:41:57 +01:00
luke 7471c224fa Output improvements. 2021-07-30 12:39:20 +01:00
luke 2996135155 Output improvements. 2021-07-30 12:38:13 +01:00
luke 1abab8d440 Output improvements. 2021-07-30 12:36:52 +01:00
luke e52c83e5be Output improvements. 2021-07-30 12:35:20 +01:00
luke 5ed4545737 Output improvements. 2021-07-30 12:34:10 +01:00
luke 8b39df68ce Output improvements. 2021-07-30 12:32:27 +01:00
luke 04d8a3762b Output improvements. 2021-07-30 12:31:03 +01:00
luke 0f7c8d00d6 Output improvements. 2021-07-30 12:29:39 +01:00
luke 12fb4f8639 Output improvements. 2021-07-30 12:24:23 +01:00
luke 6a84b825e6 Output improvements. 2021-07-30 12:23:24 +01:00
luke e8595c56b3 Merge branch 'master' into teamcity-styling 2021-07-30 11:46:57 +01:00
luke 4a9fb2fa74 Snapshot update 2021-07-28 10:41:47 +01:00
luke d8fae6d689 Datasets can now access the test case and are executed after the setup method has run. 2021-07-28 10:39:39 +01:00
Nuno Maduro 252f9a0e46 Merge pull request #321 from jordanbrauer/fix-missing-dataset-errors
Add user-friendly exception message for missing test inputs
2021-07-28 09:57:39 +01:00
jordanbrauer 8d24b4a217 chore: replace prop set/check with method call 2021-07-27 23:39:26 -05:00
jordanbrauer 43920f79a9 feat: add count method for checking message type presence 2021-07-27 23:36:09 -05:00
jordanbrauer 55bfc5856b Merge branch 'master' into fix-missing-dataset-errors 2021-07-27 23:02:12 -05:00
Nuno Maduro cd9d4acbc2 release: v1.13.0 2021-07-28 02:03:24 +01:00
Nuno Maduro 2b5355419a chore: fixes types 2021-07-28 01:59:47 +01:00
Nuno Maduro 22b822ce87 fix: skip with a false condition being ignored 2021-07-28 01:57:13 +01:00
Nuno Maduro b2c298b926 Merge pull request #363 from freekmurze/add-to-be-in
Add `toBeIn` expectation
2021-07-28 00:09:54 +01:00
freek 671f3df115 fix tests 2021-07-28 01:00:19 +02:00
freek 2dd77001b7 static analysis fix 2021-07-28 00:42:54 +02:00
freek 5f574ded81 add toBeIn 2021-07-28 00:36:43 +02:00
Nuno Maduro 6309e6818d Update README.md 2021-07-26 23:19:51 +01:00
Nuno Maduro 4813ab6ffb Add sponsor 2021-07-26 23:18:55 +01:00
Nuno Maduro 4ebba1298a release: v1.12.0 2021-07-26 22:46:22 +01:00
Nuno Maduro 2e0d1bb5a0 Merge branch 'master' of https://github.com/pestphp/pest 2021-07-26 22:45:08 +01:00
Nuno Maduro 09d2b16767 docs: updates changelog 2021-07-26 22:45:03 +01:00
Nuno Maduro f56556eb73 Merge pull request #357 from jordanbrauer/fix-static-hooks
Fix static hooks
2021-07-26 22:33:58 +01:00
Nuno Maduro f387ca8624 Merge pull request #353 from rezaamini-ir/master
Add --force flag to pest:test command
2021-07-26 22:27:08 +01:00
Nuno Maduro ca9d783cf9 chore: makes phpunit/phpunit requirement above ^9.3.7 2021-07-26 22:02:57 +01:00
jordanbrauer 863ddea50b style: split assignment into two lines clarity 2021-07-22 17:54:22 -05:00
jordanbrauer 00b4bb6305 Merge branch 'master' into fix-missing-dataset-errors 2021-07-21 21:26:33 -05:00
jordanbrauer d217503a6a test: use consistent test descriptors 2021-07-21 20:47:48 -05:00
jordanbrauer b6012862c4 style: run linter 2021-07-21 20:43:21 -05:00
jordanbrauer 60c0ad006f fix: prevent the global hooks from piling up (#351)
this happens due to the global `*All()` hooks (before & after) being
defined as static. We should be a good citizen and we need to clean up
our mess for the next person in the test instance constructor
2021-07-21 20:38:20 -05:00
jordanbrauer 79ff332afe test: global "all" hooks must only run once (#351)
in other words, they can only run once per file
2021-07-21 20:32:39 -05:00
Reza Amini 595bbe32a4 Add bool to the condition 2021-07-22 01:41:12 +04:30
luke 328427bfdb docs: update changelog 2021-07-21 12:59:45 +01:00
Nuno Maduro 51f556799c Merge pull request #352 from pestphp/higher-order-callable-datasets
Higher order callable datasets
2021-07-21 12:04:35 +01:00
Reza Amini 5e0a0855ea Add a better description 2021-07-21 14:38:11 +04:30
Reza Amini 7ec3460d73 Add --force flag to pest:test command 2021-07-21 13:02:09 +04:30
luke 4c8c42cd20 Refactor 2021-07-21 08:47:55 +01:00
luke 09682dd393 Alters test to prove order doesn't matter 2021-07-21 08:16:54 +01:00
luke 82c18d3848 Type fixes 2021-07-21 07:58:05 +01:00
luke 3bdba9210d Adds another test 2021-07-21 07:44:05 +01:00
luke 371620d161 Adds support for receiving datasets in higher order tests 2021-07-21 07:40:19 +01:00
luke d10281f851 Adds test cases for loggers and removes use of str_starts_with. 2021-07-19 12:59:18 +01:00
Nuno Maduro 47ceb2419b Update README.md 2021-07-16 22:12:31 +01:00
Nuno Maduro 771b5b2e53 Adds Spatie 2021-07-16 22:12:19 +01:00
luke 05f72f9b6d Aligns test case name with test names 2021-07-16 17:59:07 +01:00
luke f9de1b9c00 Refactor 2021-07-16 17:51:12 +01:00
luke 9516e56242 Improves test case name styling 2021-07-16 17:50:18 +01:00
luke 5f315fc899 Updates warning color 2021-07-16 17:46:30 +01:00
luke e59606818d More work on output 2021-07-16 17:26:48 +01:00
luke e16104350e More work on output 2021-07-16 16:45:35 +01:00
luke df31191f4e Merge branch 'master' into teamcity-assertion-fix 2021-07-16 16:45:16 +01:00
luke 5b310f6f93 More work on output 2021-07-16 15:58:44 +01:00
luke 0200f90e9a Start of work on better TeamCity output 2021-07-16 15:06:10 +01:00
Luke Downing 027e69e48f Merge pull request #349 from pestphp/teamcity-assertion-fix
Fixes the assertion output showing as 0 in the TeamCity logger
2021-07-16 14:58:30 +01:00
Nuno Maduro 33e01e3805 Merge pull request #348 from jdanino/stubfix
Fix the unit test stub
2021-07-16 14:26:01 +01:00
luke 13781dcd14 Fixes the assertion output showing as 0 in the TeamCity logger. 2021-07-16 13:17:33 +01:00
luke 164bad437a Fixes the assertion output showing as 0 in the TeamCity logger. 2021-07-16 13:10:30 +01:00
Nuno Maduro 7ddcc03ad9 Update stubs/Unit.php
Co-authored-by: Owen Voke <development@voke.dev>
2021-07-16 13:00:32 +01:00
Joni Danino bbe4445257 Fix the unit test stub 2021-07-16 12:40:57 +02:00
luke d90ddf889c docs: update changelog 2021-07-12 11:54:40 +01:00
Luke Downing 5907164749 Merge pull request #341 from pestphp/hot-hoe
Adds support for Higher Order Expectations in Higher Order Tests
2021-07-12 11:52:04 +01:00
luke eb6de433b7 docs: update changelog 2021-07-11 09:08:31 +01:00
Luke Downing 32f72cdf55 Merge pull request #344 from pestphp/callable-expect-fix
Forces higher order test callable expects to be closures
2021-07-11 09:04:59 +01:00
luke c160d97428 Forces higher order test callable expects to be closures. 2021-07-11 07:56:02 +01:00
luke 2a8de0565f Adds support for Higher Order Expectations in Higher Order Tests 2021-07-09 16:50:15 +01:00
Nuno Maduro 5ab3c6e2d7 Merge pull request #340 from pestphp/better-tap-type-hinting
Better tap type hinting
2021-07-09 16:34:18 +01:00
luke 50ece576a7 Improves type-hinting for target in HigherOrderTapProxy 2021-07-09 16:09:53 +01:00
luke 9c202fa2d7 Improves type-hinting for tap method 2021-07-09 16:07:37 +01:00
luke e4e9cb09e4 docs: update changelog 2021-07-09 09:15:22 +01:00
Nuno Maduro 6a7597c01a Merge pull request #339 from pestphp/exception-improvements
Allows you to just specify an exception message when calling `throws`.
2021-07-09 09:08:05 +01:00
luke dd05452edd Renames a property to be more inclusive. 2021-07-08 18:39:09 +01:00
luke 99ea9f42e5 Allows you to just specify an exception message when calling throws. 2021-07-08 18:32:02 +01:00
luke 7d6a86adc7 docs: update changelog 2021-07-08 18:11:02 +01:00
Luke Downing 7fbd2661c8 Merge pull request #338 from pestphp/skip-closure-support
Closures passed to the `skip` method are now bound to the test case
2021-07-08 18:05:27 +01:00
luke 6ce678d1c2 Adds an extra test to ensure that skipping takes place before higher order callables. 2021-07-08 17:52:56 +01:00
luke 5049b996db Merge branch 'master' into skip-closure-support
# Conflicts:
#	src/Support/HigherOrderMessage.php
2021-07-08 17:50:48 +01:00
Luke Downing d838456caa Merge pull request #331 from pestphp/higher-order-tap-and-defer
Adds a new `tap` method to Higher Order tests
2021-07-08 17:38:17 +01:00
luke e45c4ff4f1 Refactors HigherOrderMessage 2021-07-08 17:30:39 +01:00
luke fa3959db17 Type hints for callable 2021-07-08 13:12:30 +01:00
luke b97e206f7a Closures passed to the skip method are now bound to the test case to allow for more complex logic. 2021-07-08 09:44:28 +01:00
luke 7e9edecc7f Higher Order Tests now resolve callable expectations. The tap method now always returns the test case. 2021-07-06 14:05:40 +01:00
Jordan Brauer dc75b34deb refactor: move logic into boolean method in TestCaseFactory 2021-06-30 09:51:49 -05:00
Jordan Brauer 8e22803797 Merge branch 'master' into fix-missing-dataset-errors 2021-06-30 09:04:20 -05:00
luke c290909eb3 Adds @mixin for HigherOrderCallables class 2021-06-25 09:24:16 +01:00
luke f2e56da2da Updates snapshots 2021-06-24 22:58:29 +01:00
luke e6b258534a Merge branch 'master' into higher-order-tap-and-defer
# Conflicts:
#	tests/.snapshots/success.txt
2021-06-24 22:57:48 +01:00
luke acef002a2d Adds tap for Higher Order tests 2021-06-24 22:57:26 +01:00
luke 11ebe014fb docs: update changelog 2021-06-24 21:44:57 +01:00
Nuno Maduro 2d13c6e219 Merge pull request #330 from pestphp/higher-order-expectation-and
Allows `and` in Higher Order Expectations.
2021-06-24 21:42:22 +01:00
luke fbcb492c79 Simplification 2021-06-24 21:40:24 +01:00
luke 4f67eff619 Start of work 2021-06-24 21:38:02 +01:00
luke 3c2c767e09 Updates snapshot 2021-06-24 21:35:16 +01:00
luke ff527baa1d Allows and in Higher Order Expectations. 2021-06-24 21:31:12 +01:00
Nuno Maduro 621718d4b1 Merge pull request #329 from bigint/master
Update phpunit/phpunit to 9.5.6
2021-06-23 10:28:49 +01:00
bigint 59adc57344 Update phpunit/phpunit to 9.5.6 2021-06-23 14:55:09 +05:30
Jordan Brauer 82bd836ae9 Merge branch 'master' into fix-missing-dataset-errors 2021-06-21 19:50:15 -05:00
luke 1680613e12 docs: update changelog 2021-06-19 14:42:29 +01:00
Nuno Maduro f6d3ce41bc chore: updates funding 2021-06-18 22:17:44 +01:00
Nuno Maduro d16a48bf0f chore: cs 2021-06-18 22:16:54 +01:00
Nuno Maduro 9459ce4030 Merge pull request #324 from pestphp/nested-higher-order-expectations
Adds Nested Higher Order Expectations
2021-06-18 22:12:17 +01:00
Nuno Maduro c773d1cd57 chore: type checks scripts folder 2021-06-18 22:09:56 +01:00
luke 22a1aac84a Fixes types 2021-06-18 22:08:47 +01:00
luke 3a20696da4 CS 2021-06-18 22:03:51 +01:00
luke 99bcf98617 Rebuilds snapshots 2021-06-18 22:03:01 +01:00
luke 09d9bae988 Merge branch 'master' into nested-higher-order-expectations
# Conflicts:
#	tests/.snapshots/success.txt
2021-06-18 22:01:30 +01:00
luke 27de6106ab Adds type hinting 2021-06-18 22:01:16 +01:00
Nuno Maduro aeded0a356 refacto: coding style updates 2021-06-18 22:01:14 +01:00
Nuno Maduro afef1d56e8 Merge pull request #323 from pestphp/non-callable-sequence
Sequenced expectations can now be passed as non-callable values
2021-06-18 21:53:04 +01:00
luke 4b55de27f1 Adds generics 2021-06-18 21:52:24 +01:00
luke 3d7b6426a1 Updates snapshots 2021-06-18 21:49:38 +01:00
luke 1d415eb7fb Merge branch 'master' into nested-higher-order-expectations
# Conflicts:
#	tests/.snapshots/success.txt
2021-06-18 21:49:05 +01:00
luke 8a384a6d65 Merge fixes 2021-06-18 21:46:57 +01:00
luke 7c4dd2f2e7 Merge branch 'master' into non-callable-sequence
# Conflicts:
#	tests/.snapshots/success.txt
2021-06-18 21:45:02 +01:00
Nuno Maduro b6f0496c3c chore: updates funding 2021-06-18 12:39:05 +01:00
luke 9b34650e72 Adds changelog for 1.6.0 2021-06-18 12:36:43 +01:00
luke db9f1254b5 Tags Pest 1.6 2021-06-18 12:30:57 +01:00
Nuno Maduro b0e2ce6896 Merge pull request #325 from dansysanalyst/feat/json
Method json() to parse JSON strings
2021-06-18 12:28:45 +01:00
Daniel Ang 3afdedbd3f Snapshots 2021-06-18 13:11:37 +02:00
Nuno Maduro 4bf69b97bd feat(json): updates docs 2021-06-18 12:06:41 +01:00
Daniel Ang ecb37fce91 Refactoring to use toBeJson()
Refactoring according to @lukeraymonddowning suggestion
2021-06-18 13:04:31 +02:00
Daniel Ang c1b27579ca Method json() to parse JSON strings
- Parse a JSON string into array
- Test
2021-06-18 12:43:17 +02:00
jordanbrauer e64856c664 test: use throws method instead of assert 2021-06-17 13:33:11 -05:00
jordanbrauer de86598c0d Merge branch 'master' into fix-missing-dataset-errors 2021-06-16 21:36:42 -05:00
jordanbrauer 553b45306f feat: handle unions (PHP 8) 2021-06-16 21:29:08 -05:00
luke d96a2485b6 Updates snapshot 2021-06-17 00:18:12 +01:00
luke 9e9d1cc8cc Merge branch 'master' into nested-higher-order-expectations
# Conflicts:
#	src/Expectation.php
#	tests/.snapshots/success.txt
2021-06-17 00:17:25 +01:00
luke 579bb1b90c Updates DocBlock type hinting 2021-06-17 00:15:42 +01:00
Nuno Maduro 5116b4341e Merge pull request #322 from pestphp/to-have-key
Reimplements the new `toHaveArray` features.
2021-06-16 23:12:43 +01:00
luke 7ff64540a6 Adds nested Higher Order Expectations. 2021-06-16 20:48:23 +01:00
jordanbrauer 2e7192ab95 chore: static analysis adjustments - deprecation RE: ReflectionType::__toString 2021-06-16 14:42:51 -05:00
luke 241d4cf94c Reimplements non-callable sequence values. 2021-06-16 20:34:17 +01:00
luke a5ce2dc1a1 Reimplements the new toHaveArray features. 2021-06-16 20:27:36 +01:00
jordanbrauer e21e3080e0 test: add new exception check & update snapshots 2021-06-16 14:04:50 -05:00
jordanbrauer 6a7ee90ff5 feat: throw user-friendly exception for missing argument data 2021-06-16 01:01:34 -05:00
jordanbrauer 9d66893d5a feat: add boolean property to signal dependency proxy calls 2021-06-16 01:00:23 -05:00
jordanbrauer 64e780cf72 fix: types 2021-06-16 00:58:46 -05:00
jordanbrauer 9bf141f698 style: formatting & linting 2021-06-16 00:54:22 -05:00
jordanbrauer 9904094590 feat: add new exception for missing datasets on tests with arguments 2021-06-16 00:53:17 -05:00
jordanbrauer 9e5b779abc feat: add helper function for mapping a function's arguments 2021-06-16 00:52:31 -05:00
Nuno Maduro 729638a3bb release: v1.5.0 2021-06-15 23:06:43 +01:00
Nuno Maduro 82768382da chore: bumps dependencies 2021-06-15 23:06:22 +01:00
Nuno Maduro 3cb52447bb chore: adjusts type checker 2021-06-15 23:06:06 +01:00
Nuno Maduro 8d670b4ed7 refactor: renames traits 2021-06-15 23:05:57 +01:00
Nuno Maduro 624f6e0acc Merge pull request #320 from owenvoke/feature/expectations
feat: move Expectations API out of external plugin
2021-06-15 22:38:44 +01:00
Owen Voke c07cd8c252 feat: move Expectations API out of external plugin 2021-06-15 17:10:21 +01:00
Owen Voke a10b29a8da Merge pull request #318 from owenvoke/feature/coverage
feat: move Coverage out of external plugin
2021-06-15 14:34:49 +01:00
Owen Voke ea696f819e feat: move Coverage out of external plugin 2021-06-15 14:26:57 +01:00
Owen Voke e9b564a50c Merge pull request #317 from owenvoke/feature/init
feat: move init command out of external plugin
2021-06-15 13:17:59 +01:00
Owen Voke fa16775ee2 fix: allow copying the phpunit.xml 2021-06-15 09:37:58 +01:00
Owen Voke 55449c956a feat: move init command out of external plugin 2021-06-15 09:29:33 +01:00
Nuno Maduro e4b4e55dcd Merge pull request #314 from ordago/typos
fixes typos
2021-06-13 14:35:48 +01:00
Matias Ibargoyen 1c57de7e36 fixes typos 2021-06-13 11:45:18 +01:00
Nuno Maduro dd2921fd26 tests: fixes snapshots 2021-06-10 19:26:42 +01:00
Nuno Maduro 977dbb5bcb docs: updates changelog 2021-06-10 19:21:02 +01:00
Nuno Maduro 49de462250 Adds support for incompleted tests 2021-06-10 19:20:16 +01:00
Nuno Maduro 95e8add29b Merge pull request #303 from def-studio/matrix-datasets
Matrix datasets
2021-06-10 18:43:31 +01:00
Nuno Maduro b682fe631d chore: bumps expectation plugin 2021-06-10 18:40:38 +01:00
Fabio Ivona d32a648af5 updated test snapshots after merge from master 2021-06-10 09:03:32 +02:00
Fabio Ivona 50e9978dc3 Merge branch 'master' into matrix-datasets
# Conflicts:
#	tests/.snapshots/success.txt
2021-06-10 09:01:09 +02:00
luke 17d407a26a Updates changelog 2021-06-07 15:27:33 +01:00
Luke Downing cdc3bd3f45 Merge pull request #308 from titouanmathis/fix/test-key-separator
Fix/test key separator
2021-06-07 15:22:05 +01:00
Titouan Mathis 95b4192c0d Fix visual success test 2021-06-07 10:40:11 +02:00
Owen Voke 4c911cd0eb docs: update changelog 2021-06-07 08:59:27 +01:00
Fabio Ivona 7408999b0e Merge branch 'master' into matrix-datasets 2021-06-06 23:59:54 +02:00
Nuno Maduro bb13bdaa80 docs: updates changelog 2021-06-06 01:07:27 +01:00
Owen Voke 10e7cbe006 Merge pull request #310 from bigint/master
Update phpunit/phpunit to 9.5.5
2021-06-05 16:29:02 +01:00
bigint 0ad232e9de Update phpunit/phpunit to 9.5.5 2021-06-05 20:47:57 +05:30
Titouan Mathis 574cd11a40 Add tests 2021-06-04 02:08:12 +02:00
Titouan Mathis c04d6d946d Fix a bug where plugins could not be used in a path containing an @
Fix #307
2021-06-03 14:15:20 +02:00
Fabio Ivona 36c2a985a6 Merge branch 'pestphp:master' into matrix-datasets 2021-06-03 12:19:15 +02:00
Owen Voke 91eff755fd Merge pull request #306 from owenvoke/feature/lock-plugins
chore(deps): update minimum plugin versions
2021-06-02 12:43:05 +01:00
Owen Voke c05d287fcc chore(deps): update minimum plugin versions 2021-06-02 09:24:07 +01:00
Fabio Ivona ea0be9e7a4 Refactored Datasets::resolve() to make it more readable 2021-05-27 08:46:38 +02:00
Fabio Ivona 838ac273ab writed tests with multiple datasets
Took 1 hour 6 minutes
2021-05-25 23:56:46 +02:00
Fabio Ivona 296e1c37e8 updates snapshots
Took 7 minutes
2021-05-24 23:43:53 +02:00
Fabio Ivona 3117f11fae phpstan fixes
Took 3 minutes
2021-05-24 23:36:51 +02:00
Fabio Ivona 294c41f0dc lint fixes
Took 3 minutes
2021-05-24 23:33:43 +02:00
Fabio Ivona 60afbb2c20 adds new test to check dataset matrix generation
Took 39 seconds
2021-05-24 23:30:50 +02:00
Fabio Ivona 19a45c856e updates Dataset::resolve to generate a matrix of values from multiple datasets
Took 42 seconds
2021-05-24 23:30:11 +02:00
Fabio Ivona 3b784060b8 updated TestCaseFactory.php to store multiple datasets
Took 44 seconds
2021-05-24 23:29:29 +02:00
Fabio Ivona dd5a11a61f updated TestCall.php to store multiple datasets
Took 1 hour 59 minutes
2021-05-24 23:28:46 +02:00
Nuno Maduro 9133b88d65 release: 1.3.0 2021-05-23 22:06:11 +01:00
Nuno Maduro 93b9afbd27 docs: updates changelog 2021-05-23 22:05:46 +01:00
Nuno Maduro 6c6bba2a04 tests: updates snapshots 2021-05-23 22:02:06 +01:00
Nuno Maduro dd24b7e347 Merge pull request #300 from pestphp/feat-function_exists
Wrap functions in function_exists
2021-05-23 21:47:25 +01:00
Nuno Maduro ce896b9c83 Merge pull request #302 from def-studio/show-only-name-for-named-datasets
hides dataset values if they have a name
2021-05-23 21:46:59 +01:00
Fabio Ivona a3c1a61b59 updates tests
Took 1 minute
2021-05-23 22:17:35 +02:00
Fabio Ivona 98c62f4b1d show only name for named datasets
Took 4 minutes
2021-05-23 22:16:29 +02:00
Oliver Nybroe dd78cc9a50 Wrap functions in function_exists 2021-05-19 09:47:29 +02:00
Nuno Maduro 9027411004 feat(mock-plugin): moves mock stuff to their own plugin 2021-05-15 23:43:37 +01:00
Nuno Maduro 9394aa4649 Merge pull request #289 from pestphp/feat/mock
feat: adds built-in mocking
2021-05-15 01:03:07 +01:00
Nuno Maduro 88dc74bbe4 feat(mock): updates tests 2021-05-15 01:02:58 +01:00
Nuno Maduro 7023cec432 feat(mock): updates tests 2021-05-15 01:01:46 +01:00
Nuno Maduro 99d6fb9f5f feat(mock): updates tests 2021-05-14 23:59:50 +01:00
Nuno Maduro c9f723530d feat(mock): adds work in progress 2021-05-14 23:52:24 +01:00
Nuno Maduro 3205b571b0 Merge branch 'master' of https://github.com/pestphp/pest 2021-05-14 10:51:54 +01:00
Nuno Maduro 2c4aef5272 release: 1.2.1 2021-05-14 10:51:50 +01:00
Nuno Maduro 4a45a7cc6b Merge pull request #297 from owenvoke/bugfix/laravel-commands
fix: resolve test directory before function call
2021-05-14 10:17:51 +01:00
Owen Voke ea8ab88056 style: apply fixes from PHPStan 2021-05-14 10:05:16 +01:00
Owen Voke 564a21badd style: apply fixes from php-cs-fixer 2021-05-14 10:00:53 +01:00
Owen Voke 41ce87450f fix: resolve test directory before function call 2021-05-14 09:33:52 +01:00
Nuno Maduro fb0eef4200 release: 1.2.0 2021-05-13 00:37:55 +01:00
Nuno Maduro 819da37b89 Merge pull request #292 from shuvroroy/patch-1
Remove unused import
2021-05-12 21:21:59 +01:00
Owen Voke 8eb9c408a9 Merge pull request #296 from pestphp/feature/php-cs-fixer-3
chore: migrate to PHP-CS-Fixer 3.x
2021-05-12 15:14:06 +01:00
Owen Voke 1f10b46402 chore: migrate to PHP-CS-Fixer 3.x 2021-05-12 11:26:09 +01:00
Nuno Maduro 7bb12b73e8 Merge pull request #288 from gregorip02/master
Ignore the absence of the tests folder
2021-05-11 08:19:14 +01:00
Shuvro Roy b8103697c9 Remove unused import 2021-05-07 12:45:55 +06:00
Nuno Maduro ca3f8b5702 Merge pull request #291 from olivernybroe/feat-junit
Add Junit support
2021-05-05 17:13:58 +01:00
Nuno Maduro daa01ea44b Merge pull request #283 from faustbrian/test-directory-config
make test directory configurable
2021-05-05 11:07:10 +01:00
Brian Faust 26d577f9c5 separate directory and path by / 2021-05-05 05:07:17 +03:00
Gregori Piñeres 43fb711251 Merge branch 'master' into master 2021-05-03 11:47:36 -04:00
Brian Faust 567af55a19 make test directory configurable 2021-05-03 18:28:20 +03:00
Nuno Maduro c6a2e3b4d0 chore: release 1.1.0 2021-05-02 23:41:59 +01:00
Nuno Maduro a10428efe6 Merge pull request #282 from jordanbrauer/reusable-hooks
Reusable hooks
2021-05-02 19:51:59 +01:00
Oliver Nybroe 1440637e41 Add Junit support 2021-05-02 11:22:19 +02:00
Nuno Maduro 14cee66dfd Update README.md 2021-04-20 19:32:33 +01:00
Gregori Piñeres d048d60d04 Ignore the absence of the tests folder 2021-04-10 11:51:13 -04:00
jordanbrauer 1b9162151c docs: add some method documentation and fix typo 2021-04-07 11:02:00 -05:00
jordanbrauer 885c9f1f06 test: update the snapshot with new test output 2021-04-07 10:56:19 -05:00
jordanbrauer 90efcc8a8a feat: add shared/global beforeAll and afterAll hooks 2021-04-07 10:55:19 -05:00
jordanbrauer 7d35ee9998 feat: add new helper to create static closure chains 2021-04-07 10:53:46 -05:00
jordanbrauer 584a7ac8a5 test: add cases for global before/after all hooks 2021-04-07 10:52:49 -05:00
jordanbrauer f21e45ae64 fix: type declaration for and add small comment RE: merge behaviour 2021-04-07 09:49:53 -05:00
jordanbrauer c7d26a27b6 fix: ensure that Pest is loaded before the test file itself 2021-04-07 09:49:12 -05:00
jordanbrauer 54f9397f47 style: address stan + lint issues 2021-04-06 19:32:49 -05:00
jordanbrauer ff44589572 refactor: pack hooks into an array instead of 1 argument per hook 2021-04-06 19:27:50 -05:00
jordanbrauer 53333b56ab test: adding tests for beforeEach and afterEach + empty tests for *All 2021-04-06 19:26:42 -05:00
Owen Voke 6616b6299b docs: update changelog 2021-03-31 16:00:01 +01:00
Owen Voke 0bab649156 Merge pull request #284 from owenvoke/feature/update-phpunit
chore(deps): add support for PHPUnit 9.5.4
2021-03-31 15:42:50 +01:00
Owen Voke 2de7cb4726 chore(deps): add support for PHPUnit 9.5.4 2021-03-31 15:29:58 +01:00
jordanbrauer 99500d0cae feat: add shared/global before each hook 2021-03-28 02:03:31 -05:00
jordanbrauer 7eb5478c42 test: add tests for shared/global before each hooks 2021-03-28 01:54:43 -05:00
Nuno Maduro d2babb1331 Merge pull request #280 from pristavu/master
Add Dusk command argument --browse
2021-03-25 12:57:46 +00:00
Andrei Pristavu a6cced6b63 Update PestDuskCommand.php
Add Dusk command argument --browse
2021-03-22 01:16:09 +02:00
Owen Voke 7917313422 docs: update changelog 2021-03-17 13:44:14 +00:00
Nuno Maduro e02c22e136 Merge pull request #278 from owenvoke/feature/phpunit-9.5.3
chore(deps): add support for PHPUnit 9.5.3
2021-03-17 13:41:58 +00:00
Owen Voke 2157644a39 chore(deps): add support for PHPUnit 9.5.3 2021-03-17 13:38:53 +00:00
Nuno Maduro b6c2812a91 chore: bump static tests to PHP8.0 2021-03-13 11:14:27 +00:00
Nuno Maduro 4b65d2c426 release: v1.0.3 2021-03-13 11:07:57 +00:00
Nuno Maduro 3589f3d5e7 chore: fixes test suite 2021-03-13 11:06:34 +00:00
Nuno Maduro 1f39b8d239 Merge pull request #269 from jordanbrauer/multiple-suffix-extensions
fix: allow multiple file extensions in test suffix (prevent class & file name syntax errors)
2021-03-13 10:36:02 +00:00
Nuno Maduro 7c3c390cbf chore: bumps dev dependencies 2021-03-12 21:50:23 +00:00
jordanbrauer 19a1569fa8 cleanup for self-review 2021-02-13 13:31:25 -06:00
jordanbrauer 9a0240bc7b patch addslashes for windows paths 2021-02-13 12:48:43 -06:00
jordanbrauer dd94a843b5 run linter & auto format 2021-02-13 12:14:22 -06:00
jordanbrauer 9426d08aa2 update snapshot for running tests with failed classnames 2021-02-13 12:12:32 -06:00
jordanbrauer fe2fac37f8 address PHPStan warning about use of empty 2021-02-13 11:53:30 -06:00
jordanbrauer cabd64df00 rename tests for windows, despite losing some coverage 2021-02-13 11:51:35 -06:00
jordanbrauer bb57a54089 simplify quote escape sequence handling 2021-02-13 11:40:08 -06:00
jordanbrauer 5e0bfba7bf run linter 2021-02-13 11:21:14 -06:00
jordanbrauer f6c19e469f in the event of no class name, make one on the fly as an escape hatch 2021-02-13 11:20:16 -06:00
jordanbrauer 13f09cc662 add helper method to generate a simple random string 2021-02-13 11:19:40 -06:00
jordanbrauer a7e2856887 add test for totally invalid PHP class name 2021-02-13 11:19:00 -06:00
jordanbrauer 721e047485 add another test case with non-standard PHP test file name 2021-02-13 11:18:28 -06:00
jordanbrauer 301ff155a4 prevent parse errors by escaping the quote used for filename property 2021-02-13 11:17:52 -06:00
jordanbrauer 40f2065575 catch parse errors and let the user know in a friendlier manner 2021-02-13 11:12:09 -06:00
jordanbrauer be906eb823 remove additional str_replace call in favour of adjusting the relative path regexp 2021-02-13 11:08:08 -06:00
jordanbrauer 2cee825f61 rename test sub directory 2021-02-13 11:07:22 -06:00
jordanbrauer ea6308bfdf add tests for vaious file naming conventions resulting in various suffixes 2021-02-13 09:45:41 -06:00
jordanbrauer c6a6f7e2ab fix typo 2021-02-13 00:15:54 -06:00
jordanbrauer 20077c285a WIP proof of concept fix for multiple file extensions in test suffix 2021-02-13 00:14:20 -06:00
Owen Voke fa13016785 docs: update changelog 2021-02-04 09:15:54 +00:00
Owen Voke b81bb9d621 chore(deps): add support for PHPUnit 9.5.2 2021-02-04 09:12:29 +00:00
Owen Voke 2deb53c14f docs: fix typo 2021-01-18 09:50:21 +00:00
Owen Voke 6b8feed08a docs: update changelog 2021-01-18 09:35:53 +00:00
Owen Voke 2fe8e07cf3 Merge pull request #261 from owenvoke/feature/update-phpunit
chore(deps): add support for PHPUnit 9.5.1
2021-01-18 09:31:57 +00:00
Owen Voke d2c907868e chore(deps): add support for PHPUnit 9.5.1 2021-01-18 09:11:38 +00:00
Nuno Maduro a2900a5e09 Merge pull request #251 from MatanYadaev/fix-expect-phpdoc
Fix `TestCase@expect` phpDoc
2021-01-05 20:19:03 +01:00
Matan Yadaev df934bacd9 fix TestCase expect phpDoc 2021-01-05 20:42:14 +02:00
Nuno Maduro b0f03c278d docs: updates changelog 2021-01-03 17:27:11 +01:00
Nuno Maduro b59b321249 Merge pull request #245 from gpibarra/make-dusk-test
MakeDuskTest
2021-01-02 23:35:32 +01:00
Nuno Maduro 82d6991cf8 docs: updates sponsors 2020-12-28 20:17:23 +01:00
Gerardo Ibarra d693d99379 Update src/Laravel/Commands/PestTestCommand.php
Co-authored-by: Owen Voke <development@voke.dev>
2020-12-28 13:51:03 -03:00
Gerardo Ibarra 50c1136be8 MakeDuskTest 2020-12-28 13:13:30 -03:00
Nuno Maduro dd491e516c Update FUNDING.yml 2020-12-28 15:54:30 +01:00
Nuno Maduro 078aab0d3d Update FUNDING.yml 2020-12-28 02:00:30 +01:00
Nuno Maduro 89c9f4b428 Update FUNDING.yml 2020-12-28 01:59:56 +01:00
Nuno Maduro 2148e896e2 Update FUNDING.yml 2020-12-28 01:59:30 +01:00
Nuno Maduro 7ba49b2e3e chore: fixes style 2020-12-27 21:42:08 +01:00
Nuno Maduro 54a285f7e3 Update PestInstallCommand.php 2020-12-27 17:40:26 +01:00
Nuno Maduro 3ed20d059c Merge pull request #240 from pestphp/feat/improve-init
feat: improve init files
2020-12-27 16:25:48 +01:00
Nuno Maduro 92b6800f28 feat(improve-init): fixes styleci 2020-12-27 15:39:17 +01:00
Nuno Maduro 29cfd1a2dc feat(improve-init): typos 2020-12-27 15:33:52 +01:00
Nuno Maduro 45c09ea0ed feat(improve-init): wording 2020-12-27 15:28:32 +01:00
Nuno Maduro 424e24d530 feat: improve init files 2020-12-27 15:24:21 +01:00
Owen Voke 26b2e3561a docs: update changelog 2020-12-27 11:36:24 +00:00
Nuno Maduro 60aea6798d Merge pull request #239 from gpibarra/patch-1
change binary path pest:dusk
2020-12-27 02:46:08 +01:00
Nuno Maduro fac3fe3f55 docs: updates changelog 2020-12-26 21:31:38 +01:00
Nuno Maduro 17fac0a488 Update composer.json 2020-12-26 21:19:28 +01:00
Gerardo Ibarra 6abc2207b2 change binary path pest:dusk
In windows not work
full path is used in [https://github.com/laravel/dusk/blob/7e05b3ca4f17afcba528c4c5a2390a2dd9949b38/src/Console/DuskCommand.php#L91](https://github.com/laravel/dusk/blob/7e05b3ca4f17afcba528c4c5a2390a2dd9949b38/src/Console/DuskCommand.php#L91) and [https://github.com/nunomaduro/collision/blob/163d5c2bd8fe5072b942627980d20831dfd9de78/src/Adapters/Laravel/Commands/TestCommand.php#L108](https://github.com/nunomaduro/collision/blob/163d5c2bd8fe5072b942627980d20831dfd9de78/src/Adapters/Laravel/Commands/TestCommand.php#L108)
2020-12-23 15:08:49 -03:00
Nuno Maduro 885d224c5d docs: updates changelog 2020-12-20 17:22:40 +01:00
Nuno Maduro 12441deab8 chore: upgrades version 2020-12-20 17:22:33 +01:00
Nuno Maduro 8852fd14ce Merge pull request #236 from avrahamappel/master
Add test for inheritance with depends
2020-12-20 17:18:53 +01:00
Nuno Maduro e3814e6d9c chore: fixes static analsysis on uses_classs 2020-12-20 17:12:08 +01:00
avrahamappel e19eba0942 Rebuild snapshots 2020-12-17 23:24:29 -05:00
avrahamappel b6e2763731 Move dependency mapping to TestCase
The `TestCaseFactory::getClassName` was removed since it can have
unexpected results when called too early, as it builds up the test class
prematurely. It is not currently used anywhere else.
2020-12-17 23:24:11 -05:00
avrahamappel f75a3ee865 Add test for inheritance with depends 2020-12-15 22:29:37 -05:00
Nuno Maduro d707c2f208 Merge pull request #209 from NickSdot/make-root-path-working-in-subdirectory-structures
Get root path based on composer autoloader
2020-12-15 01:58:05 +01:00
Nuno Maduro a43b86d9eb chore: removes rector 2020-12-13 23:11:50 +01:00
Nuno Maduro 5279d5e913 chore: pin expectations plugin version 2020-12-13 23:09:32 +01:00
Nuno Maduro df7fb92e03 chore: removes rector 2020-12-13 22:55:09 +01:00
Nuno Maduro 95c3418313 docs: updates changelog 2020-12-13 22:52:06 +01:00
Nuno Maduro 67a8be9347 chore: fixes snapshots 2020-12-13 22:50:13 +01:00
Nuno Maduro 5d7f262f4a feat: removes expectation api for a plugin 2020-12-13 22:35:30 +01:00
Nuno Maduro 23eebc8127 docs: updates changelog 2020-12-04 21:19:40 +01:00
Nuno Maduro 3b435e460e chore: increases version 2020-12-04 21:19:32 +01:00
Nuno Maduro b52e9826e7 Merge pull request #234 from soilSpoon/feature/phpunit
Update PHPUnit dependency version
2020-12-04 09:16:27 +01:00
soilSpoon ba49dd0499 Update PHPUnit dependency version 2020-12-04 15:46:25 +09:00
Nuno Maduro f9f6f28950 Merge pull request #233 from misaert/feat-authorize-associative-array-for-with
fix: authorize string as key for datasets
2020-11-30 16:42:35 +01:00
Mickaël Isaert f017015d1e fix: authorize string as key for datasets 2020-11-30 14:50:40 +01:00
Nuno Maduro 29b4ee33bb Merge pull request #232 from pestphp/feat/expect-extend
feat: makes expect extendable
2020-11-29 18:25:21 +01:00
Nuno Maduro 03dc11c2f6 Adds expect extend 2020-11-29 16:30:57 +01:00
Nuno Maduro b79ba5098b docs: updates changelog 2020-11-28 18:55:22 +01:00
Nuno Maduro 3c418d82e6 chore: increases version 2020-11-28 18:55:14 +01:00
Nuno Maduro 73ede2e344 Merge pull request #223 from clmntgr/support-pest-command
Add a dusk command for Laravel
2020-11-28 18:46:51 +01:00
Nuno Maduro 266d891488 Merge pull request #231 from pestphp/feat/feedback-on-to-match
feat: adds key/value context when toMatchObject or toMatchArray fails
2020-11-28 18:21:52 +01:00
Nuno Maduro c71490b472 feat(feedback-on-to-match): uses contextual messages inside expectations 2020-11-27 21:52:44 +01:00
Nuno Maduro 07705079e2 Merge pull request #229 from owenvoke/feature/release-guide
docs: add release guide
2020-11-27 11:42:46 +01:00
Owen Voke d88c268426 docs: use docs prefix in release commit message 2020-11-27 09:13:38 +00:00
Owen Voke a1b142e885 docs: add details on plugin versioning 2020-11-26 19:55:42 +00:00
Owen Voke a50d739e50 docs: add release guide 2020-11-26 19:55:11 +00:00
Owen Voke f82bb56d89 chore: update changelog 2020-11-24 09:12:43 +00:00
clmnt de593c3b93 Add a dusk command for Laravel.
This new command will replicate Dusk behavior with .env.dusk files
2020-11-24 10:07:06 +01:00
Nuno Maduro eedd5d80a0 chore: updates version 2020-11-23 22:01:06 +01:00
Nuno Maduro 5bbdd4f41e docs: updates changelog 2020-11-23 21:43:58 +01:00
Nuno Maduro 3fd24d96d3 feat: casts to array using toArray 2020-11-23 21:37:35 +01:00
Nuno Maduro 7bea51fe09 feat: adds toMatchArray 2020-11-23 21:26:02 +01:00
Owen Voke cdf0a38145 Merge pull request #216 from owenvoke/bugfix/depends
fix(depends): resolve issue with dependency names
2020-11-23 08:43:58 +00:00
Owen Voke bb2474ccbe tests: add regression tests for depends 2020-11-13 11:14:17 +00:00
Owen Voke 01143a6f84 fix(depends): resolve issue with dependency names 2020-11-13 11:08:35 +00:00
Owen Voke b93485c2ed Merge pull request #217 from owenvoke/feature/help
feat: add Pest options to help output
2020-11-12 14:59:50 +00:00
Owen Voke 04681690b6 tests: update help snapshot to only include Pest options 2020-11-12 09:53:40 +00:00
Owen Voke 200877d691 tests: update to use snapshot for help output 2020-11-12 09:44:26 +00:00
Owen Voke feb6417f45 tests: add visual test for help output 2020-11-12 09:11:51 +00:00
Owen Voke e7585a4ba2 tests: update snapshots 2020-11-12 09:03:44 +00:00
Owen Voke c33ab0f670 tests: add test for help output 2020-11-12 09:03:44 +00:00
Owen Voke 78181f66f6 feat: add Pest options to help output 2020-11-12 09:03:43 +00:00
Owen Voke 925636be61 docs: add missing bracket 2020-11-11 23:31:19 +00:00
Owen Voke 6be131d602 chore: update changelog 2020-11-11 23:29:18 +00:00
Owen Voke f950f57eed Merge pull request #219 from owenvoke/feature/phpunit
chore(deps): add support for PHPUnit 9.4.3
2020-11-11 22:35:26 +00:00
Owen Voke c6369feaea chore(deps): add support for PHPUnit 9.4.3 2020-11-11 22:26:53 +00:00
Oliver Nybroe 1bdd3f4908 Update Pest.php 2020-11-09 10:56:14 +01:00
Oliver Nybroe 924e095dfc chore: updates changelog 2020-11-09 10:55:22 +01:00
Oliver Nybroe 72041a4a21 Merge pull request #215 from olivernybroe/teamcity-exception
Improve exception output in teamcity printer
2020-11-09 10:52:08 +01:00
Oliver Nybroe d576446639 Improve exception output in teamcity printer 2020-11-04 09:17:57 +01:00
Nuno Maduro 3fbec70ed3 chore: updates changelog 2020-11-01 23:22:18 +01:00
Nuno Maduro d177ab5ec2 feat: support to phpunit v9.4.2 2020-10-20 19:40:38 +02:00
NickSdot ba08f2c11e Changes based on feedback https://github.com/pestphp/pest-intellij/issues/73#issuecomment-709201510 2020-10-15 19:46:16 +08:00
NickSdot 13a8aee049 Get root path from already available and correct path of autoloader 2020-10-14 21:31:28 +08:00
Owen Voke e4f5a284a6 Merge pull request #208 from owenvoke/bugfix/changelog-action
ci(changelog): fix changelog action
2020-10-13 11:16:15 +01:00
Owen Voke 6671b266da ci(changelog): fix issue with branch and update to v3 2020-10-13 11:12:34 +01:00
Owen Voke 3728bd8e0f ci(changelog): update formatting and run on change 2020-10-13 11:12:06 +01:00
Owen Voke c3616edbc8 docs: update changelog 2020-10-13 10:56:33 +01:00
Owen Voke 21143b2693 Merge pull request #207 from fetzi/master
Update phpunit dependency constraint
2020-10-13 10:45:18 +01:00
johannes.pichler 006f9232cc Update phpunit dependency constraint
allow all versions greater 9.3.7

fixes #205
2020-10-13 11:24:25 +02:00
Oliver Nybroe d1b61a34de Merge pull request #203 from olivernybroe/HelpCommand
Add Pest version to help command
2020-10-08 14:47:19 +02:00
Oliver Nybroe 896317ac97 Add Pest version to help command 2020-10-08 11:52:10 +02:00
Nuno Maduro 4fd5c0edd4 Merge pull request #201 from octoper/changelog-action
Update Changelog action
2020-10-06 09:21:42 +02:00
Vaggelis Yfantis e2c5d6d857 Update Changelog action to point to pestphp/docs 2020-10-06 08:36:41 +02:00
Vaggelis Yfantis 8057fe4bc2 Update Changelog Action 2020-10-06 08:10:57 +02:00
Nuno Maduro ebc9690301 Merge pull request #134 from sshead/adds-dataset-names
Add name to description for named datasets
2020-10-03 17:39:26 +02:00
Owen Voke 049ce1845e chore: update changelog 2020-10-03 12:27:01 +01:00
Owen Voke faa6cd7deb Merge pull request #199 from owenvoke/feature/phpunit-9.4
feat: adds support to PHPUnit 9.4
2020-10-03 12:16:36 +01:00
Owen Voke 1f9362c4e7 chore(composer): update to support PHPUnit 9.4 2020-10-02 11:18:10 +01:00
Stephen Shead 36fd18bcc8 Use Expectation API 2020-10-01 13:59:26 +10:00
Stephen Shead aa352317cb Add a named dataset test to output to snapshot 2020-10-01 13:54:17 +10:00
Stephen Shead edcd2cb50e Add name to description for named datasets 2020-10-01 13:23:23 +10:00
Nuno Maduro be8a64e4b8 Merge pull request #196 from DannyvdSluijs/feature-fix-skip-on-higher-order-test
Revert to original target if new target is null
2020-09-30 21:41:59 +02:00
Danny van der Sluijs 2336bc0f65 Update snapshots 2020-09-30 21:36:05 +02:00
Danny van der Sluijs da82eecbae Add tests to ensure working. 2020-09-30 21:32:31 +02:00
Owen Voke 4855987ba8 chore: update changelog 2020-09-30 13:03:23 +01:00
Danny van der Sluijs a493db1873 Revert to original target if new target is null 2020-09-29 21:51:28 +02:00
Owen Voke 4f677a6cc2 Merge pull request #193 from owenvoke/feature/dependencies
chore(composer): add support for PHPUnit 9.3.11
2020-09-24 12:12:03 +01:00
Owen Voke 228f2deb64 chore(composer): add support for PHPUnit 9.3.11 2020-09-24 10:45:19 +01:00
Owen Voke 0fadf9a02c chore: update changelog 2020-09-21 20:31:32 +01:00
Owen Voke 2b138ad76b Merge pull request #191 from owenvoke/feature/assert-regex
feat(expectations): add toMatch
2020-09-21 20:28:42 +01:00
Owen Voke e3e4815b55 chore(expectations): rename 'toMatchRegEx' to 'toMatch' 2020-09-21 20:20:21 +01:00
Owen Voke f76f353c32 chore: update snapshots 2020-09-21 20:19:01 +01:00
Owen Voke 16b9f54dc3 feat(expectations): add toMatchRegEx 2020-09-21 20:18:58 +01:00
Owen Voke 281166475e Merge pull request #190 from owenvoke/feature/assert-constraint
feat(expectations): add toMatchConstraint
2020-09-21 20:14:39 +01:00
Owen Voke 23805cb5d6 chore: update snapshots 2020-09-16 19:03:21 +01:00
Owen Voke 76d0f9cfc1 feat(expectations): add toMatchConstraint 2020-09-16 19:02:33 +01:00
Owen Voke 5b083e4eb1 chore: update changelog 2020-09-16 10:35:43 +01:00
Owen Voke f48694b18a Merge pull request #187 from owenvoke/feature/assert-string
feat: add 'toStartWith' and 'toEndWith' expectations
2020-09-16 10:33:00 +01:00
Owen Voke 8fa59ddbf0 Merge pull request #189 from owenvoke/feature/changelog-workflow
chore: don't run changelog workflow on forks
2020-09-16 09:26:17 +01:00
Owen Voke 2619db4026 chore: don't run changelog workflow on forks 2020-09-16 08:26:49 +01:00
Owen Voke f3a71fb100 chore: update snapshots 2020-09-16 08:22:35 +01:00
Owen Voke 04fafe742c feat(expectations): add toEndWith 2020-09-16 08:21:46 +01:00
Owen Voke cad8a41e6d feat(expectations): add toStartWith 2020-09-16 08:20:00 +01:00
Nuno Maduro 1567923cda docs: updates changelog 2020-09-15 21:57:50 +02:00
Nuno Maduro c7116afcae tests: updates snapshots 2020-09-15 21:56:39 +02:00
Nuno Maduro 4e184b2f90 Adds toMatchObject 2020-09-15 21:53:25 +02:00
Nuno Maduro 9b5f664f00 Merge pull request #185 from owenvoke/feature/stubs
chore: update PHPUnit config stubs
2020-09-15 13:06:33 +02:00
Owen Voke 0e89525ea8 chore: fix PHPUnit config 2020-09-15 10:45:17 +01:00
Owen Voke 0b6cdf8f02 chore: fix PHPUnit config stubs 2020-09-15 10:44:59 +01:00
Nuno Maduro 5f63d959e1 docs: updates changelog 2020-09-13 15:35:49 +02:00
Nuno Maduro be7fe41179 docs: updates changelog 2020-09-13 15:16:38 +02:00
Nuno Maduro 204f343831 feat: adds toHaveKeys expectation 2020-09-13 15:15:37 +02:00
Nuno Maduro aa230a1716 docs: updates changelog 2020-09-12 23:46:45 +02:00
Nuno Maduro 97f98569bc feat: adds support to PHPUnit 9.3.9 || 9.3.10 2020-09-12 23:45:22 +02:00
Owen Voke 1318bf9830 Merge pull request #141 from olivernybroe/feat-teamcity
feat(teamcity): Add basic teamcity output format
2020-09-11 09:14:33 +01:00
Nuno Maduro 3b58f946f1 Adds Scout APM as premium sponsor 2020-09-11 00:19:43 +02:00
Nuno Maduro dfc2470764 Merge pull request #179 from owenvoke/feature/badge
docs: fix GitHub Actions badge in README
2020-09-07 12:15:42 +02:00
Owen Voke f650978dd0 docs: fix GitHub Actions badge in README 2020-09-07 11:12:20 +01:00
Nuno Maduro c6ba469e68 release: version 2020-08-29 23:55:28 +02:00
Nuno Maduro 3a9997f9af docs: updates changelog 2020-08-29 23:55:05 +02:00
Nuno Maduro fb6cb891be Merge pull request #174 from pestphp/phpunit-upgrade
Allow phpunit 9.3.8 too
2020-08-29 22:59:51 +02:00
Graham Campbell 76beda74c9 Allow phpunit 9.3.8 too 2020-08-28 16:40:17 +01:00
Nuno Maduro 0398d4223b docs: updates changelog 2020-08-27 22:47:10 +02:00
Owen Voke 360eeb4c7d Merge pull request #173 from owenvoke/feature/collision-stable
chore: update to use stable Collision 5
2020-08-26 11:00:43 +01:00
Owen Voke 79b4224a35 chore: update to use stable Collision 5 2020-08-26 10:49:46 +01:00
Nuno Maduro 3c79c893c9 Merge pull request #169 from felixdorn/forwards-calls-to-helpers
Forward TestCase bad method calls to global functions
2020-08-25 22:44:57 +02:00
Nuno Maduro a11f507191 Merge pull request #172 from owenvoke/feature/phpunit-9.3
chore: update PHPUnit configuration for coverage
2020-08-25 22:44:38 +02:00
Owen Voke 6413f7040f chore: update PHPUnit configuration for coverage 2020-08-25 21:41:05 +01:00
Félix Dorn 278af4b835 forward bad TestCase method calls to global functions 2020-08-25 13:45:55 +02:00
Nuno Maduro fe885fbfb6 Merge pull request #170 from owenvoke/bugfix/snapshot-time
fix: update snapshot generation to strip time
2020-08-25 10:25:23 +02:00
Owen Voke 61b2c426e4 fix: update snapshot generation to strip time 2020-08-24 21:29:56 +01:00
Nuno Maduro 4272d49fb7 Merge pull request #165 from owenvoke/bugfix/decoration
fix: don't decorate output if --colors=never is set
2020-08-19 20:28:57 +01:00
Nuno Maduro 014ab3b957 Merge pull request #166 from owenvoke/feature/version
chore: indicate 0.3 dev in version
2020-08-19 20:27:51 +01:00
Owen Voke 09a0a64f20 tests: update to use version() in test 2020-08-19 16:56:40 +01:00
Owen Voke bf79f7c63f chore: indicate 0.3 dev in version 2020-08-19 16:48:20 +01:00
Owen Voke 36b879f97d fix: don't decorate output if --colors=never is set 2020-08-19 13:46:07 +01:00
Oliver Nybroe bcc206d183 chore(teamcity): static analysis fix 2020-08-18 14:10:32 +02:00
Oliver Nybroe 1e7b6a0396 Merge branch 'master' of https://github.com/pestphp/pest into feat-teamcity
 Conflicts:
	phpstan.neon
2020-08-15 08:30:46 +02:00
Owen Voke 57a1ccd213 Merge pull request #162 from owenvoke/feature/file-expectations
feat(expectations): add file assertions
2020-08-13 10:15:37 +01:00
Owen Voke 708b4b1d49 tests: fix snapshots 2020-08-13 10:03:23 +01:00
Owen Voke 3695736b3a tests: update snapshots 2020-08-13 10:03:23 +01:00
Owen Voke 8cc9580253 tests(expectations): add tests for file assertions 2020-08-13 10:03:23 +01:00
Owen Voke e1fbf56f3d tests(expectations): fix method in test file 2020-08-13 10:03:23 +01:00
Owen Voke 50cd1056eb feat(expectations): add file assertions 2020-08-13 10:03:23 +01:00
Nuno Maduro cfe6a6728f Merge pull request #163 from owenvoke/feature/rector-php
build: update Rector config to PHP
2020-08-12 15:29:15 +01:00
Owen Voke 38344c99f1 style: apply Rector changes 2020-08-12 14:45:55 +01:00
Owen Voke 98ed779424 build: update Rector config to PHP 2020-08-12 13:03:15 +01:00
Owen Voke 943707cbcd Merge pull request #161 from pestphp/phpunit
Require PHPUnit 9.3.7
2020-08-12 12:13:23 +01:00
Graham Campbell 940e246f27 Require PHPUnit 7.3.7 2020-08-12 11:39:57 +01:00
Nuno Maduro 439ebcdcaf feat(expectation-api): adds failed assertations on not methods 2020-08-09 19:08:27 +01:00
Nuno Maduro d2db71bb78 tests: update snapshots 2020-08-09 18:31:08 +01:00
Nuno Maduro d85432933c Merge pull request #128 from GrahamCampbell/php8
feat: adds support to phpunit 9.3 and php 8.0
2020-08-08 22:53:24 +01:00
Graham Campbell 3cfadee2bb PHP 8 and PHPUnit 9.3 support 2020-08-07 11:23:45 +01:00
Owen Voke 051ca73cae Merge pull request #156 from voyula/patch-2
Add yaml file extension support
2020-08-04 11:19:41 +01:00
Musa 50a273f1f1 Add Yaml Support
For: https://github.com/pestphp/pest/blob/master/rector.yaml
2020-08-04 12:54:49 +03:00
Nuno Maduro ffe5dde7f0 Merge pull request #151 from GrahamCampbell/patch-1
Added additional rector sets
2020-08-04 07:33:54 +01:00
Nuno Maduro 7e1747a364 Merge pull request #150 from innocenzi/fix/command-interactions
Avoid command interactions when the `--no-interaction` flag is given
2020-08-03 21:26:11 +01:00
Graham Campbell 356b9c01c7 Added additional rector sets 2020-08-03 21:03:17 +01:00
Enzo Innocenzi 4009177e56 style: fix unary_operator_space 2020-08-03 21:49:09 +02:00
Nuno Maduro 46d1d46384 Merge branch 'master' of https://github.com/pestphp/pest 2020-08-03 20:48:52 +01:00
Nuno Maduro 128ff1006f chore: removes broken rector set 2020-08-03 20:48:45 +01:00
Enzo Innocenzi 64bb853720 fix: correctly avoid interactions 2020-08-03 21:39:58 +02:00
Nuno Maduro 330dafa294 Merge pull request #145 from AlexMartinFR/patch-2
Update globals.php
2020-08-02 22:53:32 +01:00
Alex Martin a51c354268 Update globals.php
Typo.
2020-08-02 19:25:54 +02:00
Oliver Nybroe cc1abe7f06 fix(teamcity): Fixed a bug when running phpunit tests together with pest tests 2020-07-31 10:25:23 +02:00
Oliver Nybroe 0c16942d37 refactor(teamcity): Small cleanup 2020-07-28 11:14:10 +02:00
Oliver Nybroe fa413aafbb style(teamcity): fix styling 2020-07-28 10:51:57 +02:00
Oliver Nybroe 75f17bb118 feat(teamcity): Add basic team city output format 2020-07-28 09:11:30 +02:00
Nuno Maduro 19ce733207 Merge pull request #139 from AlexMartinFR/expectations
Polishing Expectation API
2020-07-27 08:47:33 +02:00
Alex Martin 7529d44f81 Polishing Expectation API 2020-07-26 17:20:58 +02:00
Nuno Maduro e4e4eb0a57 chore: bumps deps 2020-07-24 21:54:00 +02:00
Nuno Maduro c8eb1397b4 Merge pull request #123 from pestphp/feat/expect
feat: add `expect` function
2020-07-18 19:04:37 +02:00
Nuno Maduro c4c768dcaa tests: update snapshots 2020-07-18 18:57:14 +02:00
Nuno Maduro 8c60a9fff5 Merge pull request #129 from ceceppa/feat/expect
Feat/expect
2020-07-18 18:29:32 +02:00
Nuno Maduro 206e613711 Merge pull request #130 from GrahamCampbell/patch-1
Cleanup actions static analysis
2020-07-16 19:40:49 +02:00
Graham Campbell 5fb81e9eb4 Update static.yml 2020-07-16 18:36:58 +01:00
Graham Campbell d130a1aea0 Cleanup actions static analysis 2020-07-16 18:22:17 +01:00
ceceppa 03201cb8b7 feat(expect): add more methods 2020-07-16 07:57:05 +01:00
ceceppa 46e900e8d2 feat(expect): add more methods 2020-07-16 07:35:31 +01:00
ceceppa f0f79ab244 feat(expect): add more methods 2020-07-16 07:34:43 +01:00
Nuno Maduro 1e61144cd2 feat(expect): handle property calls to opposite expectations 2020-07-15 01:05:36 +02:00
Nuno Maduro 2751bc9674 feat(expect): fixes to contain with strings 2020-07-15 00:57:31 +02:00
Nuno Maduro e2deaae6c9 feat(expect): makes expect work with pending higher order tests 2020-07-15 00:34:59 +02:00
Nuno Maduro 1aec8bac55 feat(expect): adds toHaveProperty 2020-07-14 23:37:02 +02:00
Nuno Maduro 32ef377284 feat(expect): removes ignore cases related assertions 2020-07-14 23:21:51 +02:00
Nuno Maduro ab017e17e2 feat(expect): removes assertions api 2020-07-14 23:15:29 +02:00
Nuno Maduro 832882160f feat(expect): updates test suite to use expectation api 2020-07-14 23:15:14 +02:00
Nuno Maduro e03d015120 Merge pull request #125 from ceceppa/feat/expect
Feat/expect
2020-07-14 21:13:42 +02:00
ceceppa 819825bdd2 feat(expect): add more methods 2020-07-14 08:08:13 +01:00
ceceppa d29c789788 feat(expect): add more methods 2020-07-13 17:57:18 +01:00
ceceppa b4c45af785 feat(expect): add more methods 2020-07-13 17:49:19 +01:00
ceceppa b4bf799d75 feat(expect): add more methods 2020-07-13 17:38:09 +01:00
ceceppa 9f62f2d483 feat(expect): add more methods 2020-07-13 17:27:55 +01:00
ceceppa 679082e805 feat(expect): add more methods 2020-07-10 07:53:45 +01:00
ceceppa 42f0bd052e feat(expect): add more methods 2020-07-10 07:47:34 +01:00
Nuno Maduro 01b9bab55f feat(expect): adds toBe 2020-07-06 00:32:12 +02:00
Nuno Maduro 3eb0a95955 Merge pull request #121 from owenvoke/feature/changelog-hr
Add 'hr' tag to separate link
2020-07-02 11:20:32 +02:00
Owen Voke d11157f7b2 Add 'hr' tag to separate link 2020-07-02 10:15:48 +01:00
Owen Voke 1f2ec74d6c docs: updates changelog 2020-07-02 10:04:29 +01:00
676 changed files with 40505 additions and 4982 deletions
+1 -1
View File
@@ -14,5 +14,5 @@ trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.yml]
[*.{yml,yaml}]
indent_size = 2
+18 -16
View File
@@ -1,16 +1,18 @@
/art export-ignore
/docs export-ignore
/tests export-ignore
/scripts export-ignore
/.github export-ignore
/.php_cs export-ignore
.editorconfig export-ignore
.gitattributes export-ignore
.gitignore export-ignore
.travis.yml export-ignore
phpstan.neon export-ignore
rector.yaml export-ignore
phpunit.xml export-ignore
CHANGELOG.md export-ignore
CONTRIBUTING.md export-ignore
README.md export-ignore
/docker export-ignore
/docs export-ignore
/tests export-ignore
/scripts export-ignore
/.github export-ignore
.editorconfig export-ignore
.gitattributes export-ignore
.gitignore export-ignore
/phpstan.neon export-ignore
/phpunit.xml export-ignore
/CHANGELOG.md export-ignore
/CONTRIBUTING.md export-ignore
/docker-compose.yml export-ignore
/Makefile export-ignore
/rector.php export-ignore
/README.md export-ignore
/RELEASE.md export-ignore
+2 -3
View File
@@ -1,5 +1,4 @@
# These are supported funding model platforms
github: nunomaduro
patreon: nunomaduro
custom: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L
github: [nunomaduro]
custom: https://www.paypal.com/paypalme/enunomaduro
+66
View File
@@ -0,0 +1,66 @@
name: Bug Report
description: Report an Issue or Bug with the Pest
title: "[Bug]: "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
We're sorry to hear you have a problem. Can you help us solve it by providing the following details.
- type: textarea
id: what-happened
attributes:
label: What Happened
description: What did you expect to happen?
placeholder: When I use expect()->toBeTrue() in my tests, I get an error
validations:
required: true
- type: textarea
id: how-to-reproduce
attributes:
label: How to Reproduce
description: How did this occur, please add any config values used and provide a set of reliable steps if possible.
placeholder: Install a fresh Laravel app, add Pest, add a test that uses expect()->toBeTrue()
validations:
required: true
- type: input
id: repository-sample
attributes:
label: Sample Repository
description: If possible, please provide a sample repository that reproduces the issue.
placeholder: https://github.com.br/your-username/your-repository
- type: input
id: pest-version
attributes:
label: Pest Version
description: What version of our Package are you running? Please be as specific as possible
placeholder: 2.14.1
validations:
required: true
- type: input
id: php-version
attributes:
label: PHP Version
description: What version of PHP are you running? Please be as specific as possible
placeholder: 8.1.20
validations:
required: true
- type: dropdown
id: operating-systems
attributes:
label: Operation System
description: On which operating systems does the problem occur? You can select more than one.
multiple: true
options:
- macOS
- Windows
- Linux
validations:
required: true
- type: textarea
id: notes
attributes:
label: Notes
description: Use this field to provide any other notes that you feel might be relevant to the issue.
validations:
required: false
+13 -7
View File
@@ -1,10 +1,16 @@
| Q | A
| ------------- | ---
| Bug fix? | yes/no
| New feature? | yes/no
| Fixed tickets | #... <!-- #-prefixed issue number(s), if any -->
<!--
- Replace this comment by a description of what your PR is solving.
- Fill in the form below correctly. This will help the Pest team to understand the PR and also work on it.
-->
### What:
- [ ] Bug Fix
- [ ] New Feature
### Description:
<!-- describe what your PR is solving -->
### Related:
<!-- link to the issue(s) your PR is solving. If it doesn't exist, remove the "Related" section. -->
+13
View File
@@ -0,0 +1,13 @@
# Security Policy
**PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY, [SEE BELOW](#reporting-a-vulnerability).**
## Reporting a Vulnerability
If you discover a security vulnerability in Pest, please report it privately using one of the following channels:
1. **GitHub Private Vulnerability Reporting** (preferred) — go to the repository's **Security** tab and click **"Report a vulnerability"**. This creates a private advisory visible only to maintainers and provides a structured workflow for triage, fix coordination, and CVE assignment.
2. **Email** — send the details to Nuno Maduro at **enunomaduro@gmail.com**.
All security vulnerabilities will be promptly addressed.
+12
View File
@@ -0,0 +1,12 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
cooldown:
default-days: 5
groups:
github-actions:
patterns:
- "*"
-54
View File
@@ -1,54 +0,0 @@
name: Changelog
on:
push:
branches: [ master ]
paths:
- CHANGELOG.md
pull_request:
branches: [ master ]
paths:
- CHANGELOG.md
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Checkout website repository
uses: actions/checkout@v2
with:
token: ${{ secrets.CHANGELOG_KEY }}
repository: pestphp/website
path: pestphp-website
- name: Read CHANGELOG.md
id: package
uses: juliangruber/read-file-action@v1
with:
path: ./CHANGELOG.md
- name: Add file headers
uses: DamianReeves/write-file-action@v1.0
with:
path: ./CHANGELOG.md
contents: |
---
title: Changelog
description: Changelog
extends: _layouts.documentation
section: content
---
${{ steps.package.outputs.content }}
Next section: [Upgrade Guide →](/docs/upgrade-guide)
write-mode: overwrite
- name: Copy CHANGELOG to website repository
run: cp CHANGELOG.md pestphp-website/source/docs/changelog.md
- name: Create Pull Request
uses: peter-evans/create-pull-request@v2
with:
token: ${{ secrets.CHANGELOG_KEY }}
commit-message: Update changelog.md
committer: GitHub Action <noreply@github.com>
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
title: 'Update changelog.md'
path: ./pestphp-website
-46
View File
@@ -1,46 +0,0 @@
name: Formats
on: ['push', 'pull_request']
jobs:
ci:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os: [ubuntu-latest]
php: [7.4]
dependency-version: [prefer-lowest, prefer-stable]
name: Formats P${{ matrix.php }} - ${{ matrix.os }} - ${{ matrix.dependency-version }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Cache dependencies
uses: actions/cache@v1
with:
path: ~/.composer/cache/files
key: dependencies-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: dom, mbstring, zip
tools: prestissimo
coverage: pcov
- name: Install Composer dependencies
run: composer update --${{ matrix.dependency-version }} --no-interaction --prefer-dist
- name: Coding Style Checks
run: |
vendor/bin/rector process src --dry-run
vendor/bin/php-cs-fixer fix -v --dry-run
- name: Type Checks
run: vendor/bin/phpstan analyse --ansi
+70
View File
@@ -0,0 +1,70 @@
name: Static Analysis
on:
push:
branches: [5.x]
pull_request:
schedule:
- cron: '0 9 * * *'
concurrency:
group: static-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
static:
if: github.event_name != 'schedule' || github.repository == 'pestphp/pest'
name: Static Tests
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: true
matrix:
dependency-version: [prefer-stable]
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Setup PHP
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2
with:
php-version: 8.4
tools: composer:v2
coverage: none
extensions: sockets
- name: Get Composer cache directory
id: composer-cache
shell: bash
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: Cache Composer dependencies
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v5
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: static-php-8.4-${{ matrix.dependency-version }}-composer-${{ hashFiles('**/composer.json', '**/composer.lock') }}
restore-keys: |
static-php-8.4-${{ matrix.dependency-version }}-composer-
static-php-8.4-composer-
- name: Install Dependencies
env:
COMPOSER_ROOT_VERSION: 5.x-dev
run: composer update --${{ matrix.dependency-version }} --no-interaction --no-progress --ansi
- name: Profanity Check
run: composer test:profanity
- name: Type Check
run: composer test:type:check
- name: Type Coverage
run: composer test:type:coverage
- name: Style
run: composer test:lint
+55 -26
View File
@@ -1,48 +1,77 @@
name: Tests
on: ['push', 'pull_request']
on:
push:
branches: [5.x]
pull_request:
schedule:
- cron: '0 9 * * *'
concurrency:
group: tests-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
ci:
tests:
if: github.event_name != 'schedule' || github.repository == 'pestphp/pest'
runs-on: ${{ matrix.os }}
timeout-minutes: 15
strategy:
fail-fast: true
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
php: [7.3, 7.4]
dependency-version: [prefer-lowest, prefer-stable]
os: [ubuntu-latest, macos-latest] # windows-latest
symfony: ['8.0']
php: ['8.4', '8.5']
dependency_version: [prefer-stable]
name: Tests P${{ matrix.php }} - ${{ matrix.os }} - ${{ matrix.dependency-version }}
name: PHP ${{ matrix.php }} - Symfony ^${{ matrix.symfony }} - ${{ matrix.os }} - ${{ matrix.dependency_version }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Cache dependencies
uses: actions/cache@v1
with:
path: ~/.composer/cache/files
key: dependencies-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Setup PHP
uses: shivammathur/setup-php@v2
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2
with:
php-version: ${{ matrix.php }}
extensions: dom, mbstring, zip
tools: composer:v2
coverage: none
extensions: sockets
- name: Install Composer dependencies
run: composer update --${{ matrix.dependency-version }} --no-interaction --prefer-dist
- name: Get Composer cache directory
id: composer-cache
shell: bash
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: Cache Composer dependencies
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v5
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ matrix.os }}-php-${{ matrix.php }}-symfony-${{ matrix.symfony }}-composer-${{ hashFiles('**/composer.json', '**/composer.lock') }}
restore-keys: |
${{ matrix.os }}-php-${{ matrix.php }}-symfony-${{ matrix.symfony }}-composer-
${{ matrix.os }}-php-${{ matrix.php }}-composer-
- name: Setup Problem Matches
run: |
echo "::add-matcher::${{ runner.tool_cache }}/php.json"
echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
- name: Install PHP dependencies
shell: bash
env:
COMPOSER_ROOT_VERSION: 5.x-dev
run: composer update --${{ matrix.dependency_version }} --no-interaction --no-progress --ansi --with="symfony/console:^${{ matrix.symfony }}"
- name: Unit Tests
run: php bin/pest --colors=always --exclude-group=integration
run: composer test:unit
- name: Parallel Tests
run: composer test:parallel
- name: Integration Tests
run: php bin/pest --colors=always --group=integration
- name: Setup problem matchers for PHP
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
- name: Setup problem matchers for Pest
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
run: composer test:integration
+7 -2
View File
@@ -1,11 +1,16 @@
.idea/*
.idea/codeStyleSettings.xml
.temp/*
composer.lock
/vendor/
coverage.xml
.phpunit.result.cache
.php_cs.cache
.phpunit.cache
/.php-cs-fixer.php
.php-cs-fixer.cache
.temp/coverage.php
*.swp
*.swo
.vscode/
.vscode/
.STREAM.md
-32
View File
@@ -1,32 +0,0 @@
<?php
$finder = PhpCsFixer\Finder::create()
->in(__DIR__ . DIRECTORY_SEPARATOR . 'tests')
->in(__DIR__ . DIRECTORY_SEPARATOR . 'bin')
->in(__DIR__ . DIRECTORY_SEPARATOR . 'compiled')
->in(__DIR__ . DIRECTORY_SEPARATOR . 'scripts')
->in(__DIR__ . DIRECTORY_SEPARATOR . 'stubs')
->in(__DIR__ . DIRECTORY_SEPARATOR . 'src')
->append(['.php_cs']);
$rules = [
'@Symfony' => true,
'phpdoc_no_empty_return' => false,
'array_syntax' => ['syntax' => 'short'],
'yoda_style' => false,
'binary_operator_spaces' => [
'operators' => [
'=>' => 'align',
'=' => 'align',
],
],
'concat_space' => ['spacing' => 'one'],
'not_operator_with_space' => false,
];
$rules['increment_style'] = ['style' => 'post'];
return PhpCsFixer\Config::create()
->setUsingCache(true)
->setRules($rules)
->setFinder($finder);
-72
View File
@@ -1,72 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased]
### Added
- `--init` and `pest:install` artisan command output changes ([#118](https://github.com/pestphp/pest/pull/118), [db7c4b1](https://github.com/pestphp/pest/commit/db7c4b174f0974969450dda71dcd649ef0c073a3))
- `--version` option to view the current version of Pest ([9ea51ca](https://github.com/pestphp/pest/commit/9ea51caf3f74569debb1e465992e9ea916cb80fe))
## [v0.2.2 (2020-06-21)](https://github.com/pestphp/pest/compare/v0.2.1...v0.2.2)
### Added
- `depends` phpunit feature ([#103](https://github.com/pestphp/pest/pull/103))
### Fixes
- datasets name conflit ([#101](https://github.com/pestphp/pest/pull/101))
## [v0.2.1 (2020-06-17)](https://github.com/pestphp/pest/compare/v0.2.0...v0.2.1)
### Fixes
- Multiple `uses` in the same path override previous `uses` ([#97](https://github.com/pestphp/pest/pull/97))
## [v0.2.0 (2020-06-14)](https://github.com/pestphp/pest/compare/v0.1.5...v0.2.0)
### Adds
- `--init` option to install Pest on a new blank project ([70b3c7e](https://github.com/pestphp/pest/commit/70b3c7ea1ddb031f3bbfaabdc28d56270608ebbd))
- pending higher orders tests aka tests without description ([aa1917c](https://github.com/pestphp/pest/commit/aa1917c28d9b69c2bd1d51f986c4f61318ee7e16))
### Fixed
- `--verbose` and `--colors` options not being used by printers ([#51](https://github.com/pestphp/pest/pull/51))
- missing support on windows ([#61](https://github.com/pestphp/pest/pull/61))
### Changed
- `helpers.php` stub provides now namespaced functions
- functions provided by plugins are now namespaced functions:
```php
use function Pest\Faker\faker;
it('foo', function () {
$name = faker()->name;
});
```
## [v0.1.5 (2020-05-24)](https://github.com/pestphp/pest/compare/v0.1.4...v0.1.5)
### Fixed
- Missing default decorated output on coverage ([88d2391](https://github.com/pestphp/pest/commit/88d2391d2e6fe9c9416462734b9b523cb418f469))
## [v0.1.4 (2020-05-24)](https://github.com/pestphp/pest/compare/v0.1.3...v0.1.4)
### Added
- Support to Lumen on artisan commands ([#18](https://github.com/pestphp/pest/pull/18))
### Fixed
- Mockery tests without assertions being considered risky ([415f571](https://github.com/pestphp/pest/commit/415f5719101b30c11d87f74810a71686ef2786c6))
## [v0.1.3 (2020-05-21)](https://github.com/pestphp/pest/compare/v0.1.2...v0.1.3)
### Added
- `Plugin::uses()` method for making traits globally available ([6c4be01](https://github.com/pestphp/pest/commit/6c4be0190e9493702a976b996bbbf5150cc6bb53))
## [v0.1.2 (2020-05-15)](https://github.com/pestphp/pest/compare/v0.1.1...v0.1.2)
### Added
- Support to custom helpers ([#7](https://github.com/pestphp/pest/pull/7))
## [v0.1.1 (2020-05-14)](https://github.com/pestphp/pest/compare/v0.1.0...v0.1.1)
### Added
- `test` function without any arguments returns the current test case ([6fc55be](https://github.com/pestphp/pest/commit/6fc55becc8aecff685a958617015be1a4c118b01))
### Fixed
- "No coverage driver error" now returns proper error on Laravel ([28d8822](https://github.com/pestphp/pest/commit/28d8822de01f4fa92c62d8b8e019313f382b97e9))
## [v0.1.0 (2020-05-09)](https://github.com/pestphp/pest/commit/de2929077b344a099ef9c2ddc2f48abce14e248f)
### Added
- First version
+24 -1
View File
@@ -31,6 +31,10 @@ composer lint
```
## Tests
Update the snapshots:
```bash
composer update:snapshots
```
Run all tests:
```bash
composer test
@@ -38,7 +42,7 @@ composer test
Check types:
```bash
composer test:types
composer test:type:check
```
Unit tests:
@@ -50,3 +54,22 @@ Integration tests:
```bash
composer test:integration
```
## Simplified setup using Docker
If you have Docker installed, you can quickly get all dependencies for Pest in place using
our Docker files. Assuming you have the repository cloned, you may run the following
commands:
1. `make build` to build the Docker image
2. `make install` to install Composer dependencies
3. `make test` to run the project tests and analysis tools
If you want to check things work against a specific version of PHP, you may include
the `PHP` build argument when building the image:
```bash
make build ARGS="--build-arg PHP=8.3"
```
The default PHP version will always be the lowest version of PHP supported by Pest.
+43 -7
View File
@@ -1,18 +1,54 @@
<p align="center">
<img src="https://raw.githubusercontent.com/pestphp/art/master/readme.png" width="600" alt="PEST">
<img src="https://raw.githubusercontent.com/pestphp/art/master/v5/social.png" width="600" alt="PEST">
<p align="center">
<a href="https://github.com/pestphp/pest/actions"><img alt="GitHub Workflow Status (master)" src="https://img.shields.io/github/workflow/status/pestphp/pest/Continuous Integration/master"></a>
<a href="https://github.com/pestphp/pest/actions"><img alt="GitHub Workflow Status (5.x)" src="https://img.shields.io/github/actions/workflow/status/pestphp/pest/tests.yml?branch=5.x&label=Tests%205.x"></a>
<a href="https://packagist.org/packages/pestphp/pest"><img alt="Total Downloads" src="https://img.shields.io/packagist/dt/pestphp/pest"></a>
<a href="https://packagist.org/packages/pestphp/pest"><img alt="Latest Version" src="https://img.shields.io/packagist/v/pestphp/pest"></a>
<a href="https://packagist.org/packages/pestphp/pest"><img alt="License" src="https://img.shields.io/packagist/l/pestphp/pest"></a>
<a href="https://whyphp.dev"><img src="https://img.shields.io/badge/Why_PHP-in_2026-7A86E8?style=flat-square&labelColor=18181b" alt="Why PHP in 2026"></a>
<a href="https://youtube.com/@nunomaduro?sub_confirmation=1"><img alt="YouTube Channel Subscribers" src="https://img.shields.io/youtube/channel/subscribers/UCO_hYZF2gb_CyG5sA7ArlGg?style=flat&label=youtube&color=brightgreen"></a>
</p>
</p>
------
**Pest** is an elegant PHP Testing Framework with a focus on simplicity. It was carefully crafted to bring the joy of testing to PHP.
- Explore the docs: **[pestphp.com »](https://pestphp.com)**
- Follow us on Twitter: **[@pestphp »](https://twitter.com/pestphp)**
- Join us on the Discord Server: **[discord.gg/bMAJv82 »](https://discord.gg/bMAJv82)**
> Pest v5 Now Available: **[Read the announcement »](https://pestphp.com/docs/pest-v5-is-here)**.
Pest was created by **[Nuno Maduro](https://twitter.com/enunomaduro)** under the **[Sponsorware license](https://github.com/sponsorware/docs)**. It got open-sourced and is now licensed under the **[MIT license](https://opensource.org/licenses/MIT)**.
**Pest** is an elegant PHP testing Framework with a focus on simplicity, meticulously designed to bring back the joy of testing in PHP.
- Explore our docs at **[pestphp.com »](https://pestphp.com)**
- Follow the creator Nuno Maduro:
- YouTube: **[youtube.com/@nunomaduro](https://youtube.com/@nunomaduro)** — Videos every week
- Twitch: **[twitch.tv/nunomaduro](https://twitch.tv/nunomaduro)** — Live coding on Mondays, Wednesdays, and Fridays at 9PM UTC
- Twitter / X: **[x.com/enunomaduro](https://x.com/enunomaduro)**
- LinkedIn: **[linkedin.com/in/nunomaduro](https://www.linkedin.com/in/nunomaduro)**
- Instagram: **[instagram.com/enunomaduro](https://www.instagram.com/enunomaduro)**
- Tiktok: **[tiktok.com/@enunomaduro](https://www.tiktok.com/@enunomaduro)**
## Sponsors
We cannot thank our sponsors enough for their incredible support in funding Pest's development. Their contributions have been instrumental in making Pest the best it can be. For those who are interested in becoming a sponsor, please visit Nuno Maduro's Sponsor page at **[github.com/sponsors/nunomaduro](https://github.com/sponsors/nunomaduro)**.
### Platinum Sponsors
- **[CodeRabbit](https://coderabbit.ai/?ref=pestphp)**
- **[Mailtrap](https://l.rw.rw/pestphp)**
- **[SerpApi](https://serpapi.com/?ref=nunomaduro)**
- **[Tighten](https://tighten.com/?ref=nunomaduro)**
- **[Redberry](https://redberry.international/laravel-development/?utm_source=pest&utm_medium=banner&utm_campaign=pest_sponsorship)**
### Gold Sponsors
- **[CMS Max](https://cmsmax.com/?ref=pestphp)**
### Premium Sponsors
- [Zapiet](https://zapiet.com/?ref=pestphp)
- [Load Forge](https://loadforge.com/?ref=pestphp)
- [Route4Me](https://route4me.com/pt?ref=pestphp)
- [Nerdify](https://getnerdify.com/?ref=pestphp)
- [Akaunting](https://akaunting.com/?ref=pestphp)
- [TestMu AI](https://www.testmuai.com/?utm_medium=sponsor&utm_source=pest)
Pest is an open-sourced software licensed under the **[MIT license](https://opensource.org/licenses/MIT)**.
+19
View File
@@ -0,0 +1,19 @@
# Release process
When releasing a new version of Pest there are some checks and updates that need to be done:
> **For Pest v4 you should use the `4.x` branch instead.**
- Clear your local repository with: `git add . && git reset --hard && git checkout 5.x`
- On the GitHub repository, check the contents of [github.com/pestphp/pest/compare/{latest_version}...5.x](https://github.com/pestphp/pest/compare/{latest_version}...5.x)
- Update the version number in [src/Pest.php](src/Pest.php)
- Run the tests locally using: `composer test`
- Commit the Pest file with the message: `git commit -m "release: vX.X.X"`
- Push the changes to GitHub
- Check that the CI is passing as expected: [github.com/pestphp/pest/actions](https://github.com/pestphp/pest/actions)
- Tag and push the tag with `git tag vX.X.X && git push --tags`
- Publish release here: [github.com/pestphp/pest/releases/new](https://github.com/pestphp/pest/releases/new).
### Plugins
Plugins should be versioned using the same major (or minor for `0.x` releases) version as Pest core.
+192 -16
View File
@@ -1,39 +1,215 @@
#!/usr/bin/env php
<?php declare(strict_types=1);
<?php
use NunoMaduro\Collision\Provider;
use Pest\Actions\ValidatesEnvironment;
use Pest\Console\Command;
declare(strict_types=1);
use Pest\Contracts\Restarter;
use Pest\Kernel;
use Pest\Panic;
use Pest\Support\Container;
use Pest\TestCaseFilters\GitDirtyTestCaseFilter;
use Pest\TestCaseMethodFilters\AssigneeTestCaseFilter;
use Pest\TestCaseMethodFilters\IssueTestCaseFilter;
use Pest\TestCaseMethodFilters\NotesTestCaseFilter;
use Pest\TestCaseMethodFilters\PrTestCaseFilter;
use Pest\TestCaseMethodFilters\FlakyTestCaseFilter;
use Pest\TestCaseMethodFilters\TodoTestCaseFilter;
use Pest\TestSuite;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Output\OutputInterface;
(static function () {
// Ensures Collision's Printer is registered.
$_SERVER['COLLISION_PRINTER'] = 'DefaultPrinter';
$arguments = $originalArguments = $_SERVER['argv'];
$dirty = false;
$todo = false;
$flaky = false;
$notes = false;
foreach ($arguments as $key => $value) {
if ($value === '--compact') {
$_SERVER['COLLISION_PRINTER_COMPACT'] = 'true';
unset($arguments[$key]);
}
if ($value === '--profile') {
$_SERVER['COLLISION_PRINTER_PROFILE'] = 'true';
unset($arguments[$key]);
}
if (str_contains($value, '--test-directory=')) {
unset($arguments[$key]);
} elseif ($value === '--test-directory') {
unset($arguments[$key]);
if (isset($arguments[$key + 1])) {
unset($arguments[$key + 1]);
}
}
if ($value === '--dirty') {
$dirty = true;
unset($arguments[$key]);
}
if (in_array($value, ['--todo', '--todos'], true)) {
$todo = true;
unset($arguments[$key]);
}
if ($value === '--flaky') {
$flaky = true;
unset($arguments[$key]);
}
if ($value === '--notes') {
$notes = true;
unset($arguments[$key]);
}
if (str_contains($value, '--assignee=')) {
unset($arguments[$key]);
} elseif ($value === '--assignee') {
unset($arguments[$key]);
if (isset($arguments[$key + 1])) {
unset($arguments[$key + 1]);
}
}
if (str_contains($value, '--issue=')) {
unset($arguments[$key]);
} elseif ($value === '--issue') {
unset($arguments[$key]);
if (isset($arguments[$key + 1])) {
unset($arguments[$key + 1]);
}
}
if (str_contains($value, '--ticket=')) {
unset($arguments[$key]);
} elseif ($value === '--ticket') {
unset($arguments[$key]);
if (isset($arguments[$key + 1])) {
unset($arguments[$key + 1]);
}
}
if (str_contains($value, '--pr=')) {
unset($arguments[$key]);
} elseif ($value === '--pr') {
unset($arguments[$key]);
if (isset($arguments[$key + 1])) {
unset($arguments[$key + 1]);
}
}
if (str_contains($value, '--pull-request=')) {
unset($arguments[$key]);
} elseif ($value === '--pull-request') {
unset($arguments[$key]);
if (isset($arguments[$key + 1])) {
unset($arguments[$key + 1]);
}
}
if (str_contains($value, '--teamcity')) {
unset($arguments[$key]);
$arguments[] = '--no-output';
unset($_SERVER['COLLISION_PRINTER']);
}
}
// Used when Pest is required using composer.
$vendorPath = dirname(__DIR__, 4) . '/vendor/autoload.php';
$vendorPath = dirname(__DIR__, 4).'/vendor/autoload.php';
// Used when Pest maintainers are running Pest tests.
$localPath = dirname(__DIR__) . '/vendor/autoload.php';
$localPath = dirname(__DIR__).'/vendor/autoload.php';
if (file_exists($vendorPath)) {
include_once $vendorPath;
$autoloadPath = $vendorPath;
} else {
include_once $localPath;
$autoloadPath = $localPath;
}
(new Provider())->register();
// Get $rootPath based on $autoloadPath
$rootPath = dirname($autoloadPath, 2);
$rootPath = getcwd();
$input = new ArgvInput;
$testSuite = TestSuite::getInstance($rootPath);
$output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, true);
$testSuite = TestSuite::getInstance(
$rootPath,
$input->getParameterOption('--test-directory', 'tests'),
);
$container = Container::getInstance();
$container->add(TestSuite::class, $testSuite);
$container->add(OutputInterface::class, $output);
if ($dirty) {
$testSuite->tests->addTestCaseFilter(new GitDirtyTestCaseFilter($rootPath));
}
ValidatesEnvironment::in($testSuite);
if ($todo) {
$testSuite->tests->addTestCaseMethodFilter(new TodoTestCaseFilter);
}
exit($container->get(Command::class)->run($_SERVER['argv']));
if ($flaky) {
$testSuite->tests->addTestCaseMethodFilter(new FlakyTestCaseFilter);
}
if ($notes) {
$testSuite->tests->addTestCaseMethodFilter(new NotesTestCaseFilter);
}
if ($assignee = $input->getParameterOption('--assignee')) {
$testSuite->tests->addTestCaseMethodFilter(new AssigneeTestCaseFilter((string) $assignee));
}
if ($issue = $input->getParameterOption('--issue')) {
$testSuite->tests->addTestCaseMethodFilter(new IssueTestCaseFilter((int) $issue));
}
if ($issue = $input->getParameterOption('--ticket')) {
$testSuite->tests->addTestCaseMethodFilter(new IssueTestCaseFilter((int) $issue));
}
if ($pr = $input->getParameterOption('--pr')) {
$testSuite->tests->addTestCaseMethodFilter(new PrTestCaseFilter((int) $pr));
}
if ($pr = $input->getParameterOption('--pull-request')) {
$testSuite->tests->addTestCaseMethodFilter(new PrTestCaseFilter((int) $pr));
}
$isDecorated = $input->getParameterOption('--colors', 'always') !== 'never';
$output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, $isDecorated);
try {
$kernel = Kernel::boot($testSuite, $input, $output);
$container = Container::getInstance();
foreach (Kernel::RESTARTERS as $restarterClass) {
$restarter = $container->get($restarterClass);
assert($restarter instanceof Restarter);
$restarter->maybeRestart($rootPath, $originalArguments);
}
$result = $kernel->handle($originalArguments, $arguments);
$kernel->terminate();
} catch (Throwable|Error $e) {
Panic::with($e);
}
exit($result);
})();
+239
View File
@@ -0,0 +1,239 @@
#!/usr/bin/env node
import { readdir, readFile } from 'node:fs/promises'
import { existsSync } from 'node:fs'
import { createRequire } from 'node:module'
import { resolve, relative, extname, sep, join } from 'node:path'
import { pathToFileURL } from 'node:url'
const PAGE_EXTENSIONS = new Set([
'.vue', '.svelte',
'.tsx', '.jsx',
'.ts', '.js',
'.mts', '.cts', '.mjs', '.cjs',
])
const ASSET_EXT_RE = /\.(css|scss|sass|less|styl|stylus|svg|png|jpe?g|gif|webp|avif|ico|bmp|woff2?|ttf|eot|otf|md|mdx|txt|html|mp4|webm|mp3|wav|ogg|m4a|pdf|wasm|glsl|frag|vert)$/i
const PROJECT_ROOT = resolve(process.argv[2] ?? process.cwd())
const PAGE_DIR_CANDIDATES = [
'resources/js/Pages',
'resources/js/pages',
'assets/js/Pages',
'assets/js/pages',
'assets/Pages',
'assets/pages',
]
async function loadRolldown() {
const projectRequire = createRequire(join(PROJECT_ROOT, 'package.json'))
const path = projectRequire.resolve('rolldown')
return await import(pathToFileURL(path).href)
}
async function readJsonWithComments(path) {
const raw = await readFile(path, 'utf8')
const stripped = raw
.replace(/\/\*[\s\S]*?\*\//g, '')
.replace(/(^|[^:])\/\/[^\n]*/g, '$1')
return JSON.parse(stripped)
}
async function loadAliasFromTsconfig() {
const alias = {}
for (const name of ['tsconfig.json', 'jsconfig.json']) {
const p = join(PROJECT_ROOT, name)
if (!existsSync(p)) continue
let cfg
try { cfg = await readJsonWithComments(p) } catch { continue }
const baseUrl = resolve(PROJECT_ROOT, cfg?.compilerOptions?.baseUrl ?? '.')
const paths = cfg?.compilerOptions?.paths ?? {}
for (const [key, targets] of Object.entries(paths)) {
if (!key.endsWith('/*')) continue
const t0 = Array.isArray(targets) ? targets[0] : null
if (typeof t0 !== 'string' || !t0.endsWith('/*')) continue
const aliasKey = key.slice(0, -2)
if (alias[aliasKey] !== undefined) continue
alias[aliasKey] = resolve(baseUrl, t0.slice(0, -2))
}
}
return alias
}
async function listPageFiles(pagesDir) {
if (!existsSync(pagesDir)) return []
const out = []
const walk = async (dir) => {
let entries
try { entries = await readdir(dir, { withFileTypes: true }) } catch { return }
for (const entry of entries) {
const full = resolve(dir, entry.name)
if (entry.isDirectory()) { await walk(full); continue }
if (PAGE_EXTENSIONS.has(extname(entry.name))) out.push(full)
}
}
await walk(pagesDir)
return out
}
async function discoverPagesDir() {
const override = process.env.TIA_VITE_PAGES_DIR
if (override && override.length > 0) {
return resolve(PROJECT_ROOT, override.replace(/\\/g, '/'))
}
for (const rel of PAGE_DIR_CANDIDATES) {
const abs = resolve(PROJECT_ROOT, rel)
if (!existsSync(abs)) continue
const files = await listPageFiles(abs)
if (files.length > 0) return abs
}
return null
}
function componentNameFor(pageAbs, pagesDir) {
const rel = relative(pagesDir, pageAbs).split(sep).join('/')
const ext = extname(rel)
return rel.slice(0, rel.length - ext.length)
}
function isLocalSpecifier(source, aliasKeys) {
if (source.startsWith('.') || source.startsWith('/')) return true
for (const key of aliasKeys) {
if (source === key || source.startsWith(key + '/')) return true
}
return false
}
async function main() {
const pagesDir = await discoverPagesDir()
if (pagesDir === null) {
process.stdout.write('{}')
return
}
const pages = await listPageFiles(pagesDir)
if (pages.length === 0) {
process.stdout.write('{}')
return
}
const { rolldown } = await loadRolldown()
const alias = await loadAliasFromTsconfig()
const aliasKeys = Object.keys(alias)
const graph = new Map()
const collector = {
name: 'pest-tia-collector',
moduleParsed(info) {
const id = info.id
if (!id || id.startsWith('\0')) return
const deps = new Set()
for (const i of info.importedIds) if (i && !i.startsWith('\0')) deps.add(i)
for (const i of info.dynamicallyImportedIds) if (i && !i.startsWith('\0')) deps.add(i)
graph.set(id, deps)
},
}
const externalBare = {
name: 'pest-tia-external-bare',
resolveId(source) {
if (!source) return null
if (isLocalSpecifier(source, aliasKeys)) return null
return { id: source, external: true }
},
}
const assetStub = {
name: 'pest-tia-asset-stub',
load(id) {
if (!id) return null
if (ASSET_EXT_RE.test(id)) {
return { code: 'export default null', moduleSideEffects: false }
}
return null
},
}
const input = Object.create(null)
for (let i = 0; i < pages.length; i++) input[`p${i}`] = pages[i]
const bundle = await rolldown({
input,
cwd: PROJECT_ROOT,
resolve: {
alias,
extensions: ['.tsx', '.ts', '.jsx', '.js', '.mjs', '.cjs', '.json'],
},
transform: { jsx: 'preserve' },
treeshake: false,
plugins: [externalBare, assetStub, collector],
logLevel: 'silent',
onLog: () => {},
})
try {
await bundle.generate({ format: 'esm' })
} finally {
await bundle.close()
}
const reverse = new Map()
const transitiveCache = new Map()
const computeTransitive = (id, stack) => {
const cached = transitiveCache.get(id)
if (cached) return cached
if (stack.has(id)) return null
stack.add(id)
const acc = new Set()
const deps = graph.get(id)
if (deps) {
for (const dep of deps) {
if (!dep || dep.startsWith('\0')) continue
if (dep.startsWith(PROJECT_ROOT)) {
const rel = relative(PROJECT_ROOT, dep).split(sep).join('/')
acc.add(rel)
}
if (stack.has(dep)) continue
const child = computeTransitive(dep, stack)
if (child) for (const r of child) acc.add(r)
}
}
stack.delete(id)
transitiveCache.set(id, acc)
return acc
}
for (const page of pages) {
const pageComponent = componentNameFor(page, pagesDir)
const reachable = computeTransitive(page, new Set())
if (!reachable) continue
for (const rel of reachable) {
const bucket = reverse.get(rel) ?? new Set()
bucket.add(pageComponent)
reverse.set(rel, bucket)
}
}
const payload = Object.create(null)
const keys = [...reverse.keys()].sort()
for (const key of keys) {
payload[key] = [...reverse.get(key)].sort()
}
process.stdout.write(JSON.stringify(payload))
}
try {
void pathToFileURL
await main()
} catch (err) {
process.stderr.write(String(err?.stack ?? err ?? 'unknown error'))
process.exit(1)
}
+120
View File
@@ -0,0 +1,120 @@
<?php
declare(strict_types=1);
use ParaTest\WrapperRunner\ApplicationForWrapperWorker;
use ParaTest\WrapperRunner\WrapperWorker;
use Pest\Kernel;
use Pest\Plugins\Actions\CallsHandleArguments;
use Pest\Support\Container;
use Pest\TestSuite;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Output\OutputInterface;
$bootPest = (static function (): void {
$workerArgv = new ArgvInput;
$rootPath = dirname(PHPUNIT_COMPOSER_INSTALL, 2);
$testSuite = TestSuite::getInstance($rootPath, $workerArgv->getParameterOption(
'--test-directory',
'tests'
));
$input = new ArgvInput;
$output = new ConsoleOutput(OutputInterface::VERBOSITY_NORMAL, true);
Kernel::boot($testSuite, $input, $output);
});
(static function () use ($bootPest): void {
$getopt = getopt('', [
'status-file:',
'progress-file:',
'unexpected-output-file:',
'test-result-file:',
'result-cache-file:',
'teamcity-file:',
'testdox-file:',
'testdox-color',
'testdox-columns:',
'testdox-summary',
'phpunit-argv:',
]);
$composerAutoloadFiles = [
dirname(__DIR__, 3).DIRECTORY_SEPARATOR.'autoload.php',
dirname(__DIR__, 2).DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php',
dirname(__DIR__).DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php',
];
foreach ($composerAutoloadFiles as $file) {
if (file_exists($file)) {
require_once $file;
define('PHPUNIT_COMPOSER_INSTALL', $file);
break;
}
}
$container = Container::getInstance();
$rootPath = dirname(PHPUNIT_COMPOSER_INSTALL, 2);
foreach (Kernel::RESTARTERS as $restarterClass) {
$restarter = $container->get($restarterClass);
$restarter->maybeRestart($rootPath, $_SERVER['argv']);
}
assert(isset($getopt['status-file']) && is_string($getopt['status-file']));
$statusFile = fopen($getopt['status-file'], 'wb');
assert(is_resource($statusFile));
assert(isset($getopt['progress-file']) && is_string($getopt['progress-file']));
assert(isset($getopt['unexpected-output-file']) && is_string($getopt['unexpected-output-file']));
assert(isset($getopt['test-result-file']) && is_string($getopt['test-result-file']));
assert(! isset($getopt['result-cache-file']) || is_string($getopt['result-cache-file']));
assert(! isset($getopt['teamcity-file']) || is_string($getopt['teamcity-file']));
assert(! isset($getopt['testdox-file']) || is_string($getopt['testdox-file']));
assert(isset($getopt['phpunit-argv']) && is_string($getopt['phpunit-argv']));
$phpunitArgv = unserialize($getopt['phpunit-argv'], ['allowed_classes' => false]);
assert(is_array($phpunitArgv));
$bootPest();
$phpunitArgv = CallsHandleArguments::execute($phpunitArgv);
$application = new ApplicationForWrapperWorker(
$phpunitArgv,
$getopt['progress-file'],
$getopt['unexpected-output-file'],
$getopt['test-result-file'],
$getopt['result-cache-file'] ?? null,
$getopt['teamcity-file'] ?? null,
$getopt['testdox-file'] ?? null,
isset($getopt['testdox-color']),
(int) ($getopt['testdox-columns'] ?? null),
);
while (true) {
if (feof(STDIN)) {
$application->end();
exit;
}
$testPath = fgets(STDIN);
if ($testPath === false || $testPath === WrapperWorker::COMMAND_EXIT) {
$application->end();
exit;
}
// It must be a 1 byte string to ensure filesize() is equal to the number of tests executed
$exitCode = $application->runTest(realpath(trim($testPath)));
fwrite($statusFile, (string) $exitCode);
fflush($statusFile);
}
})();
View File
-1926
View File
File diff suppressed because it is too large Load Diff
+77 -37
View File
@@ -1,6 +1,6 @@
{
"name": "pestphp/pest",
"description": "An elegant PHP Testing Framework.",
"description": "The elegant PHP Testing Framework.",
"keywords": [
"php",
"framework",
@@ -17,80 +17,120 @@
}
],
"require": {
"php": "^7.3",
"nunomaduro/collision": "^5.0.0-BETA3",
"pestphp/pest-plugin": "^0.2",
"pestphp/pest-plugin-coverage": "^0.2",
"pestphp/pest-plugin-init": "^0.2",
"phpunit/phpunit": "^9.1.4",
"sebastian/environment": "^5.1"
"php": "^8.4",
"brianium/paratest": "^7.22.4",
"nunomaduro/collision": "^8.9.4",
"nunomaduro/termwind": "^2.4.0",
"pestphp/pest-plugin": "^5.0.0",
"pestphp/pest-plugin-arch": "^5.0.0",
"pestphp/pest-plugin-mutate": "^5.0.0",
"pestphp/pest-plugin-profanity": "^5.0.0",
"phpunit/phpunit": "^13.2.3",
"symfony/process": "^8.1.0"
},
"conflict": {
"filp/whoops": "<2.18.3",
"phpunit/phpunit": ">13.2.3",
"sebastian/exporter": "<7.0.0",
"webmozart/assert": "<1.11.0"
},
"autoload": {
"psr-4": {
"Pest\\": "src/"
},
"files": [
"src/globals.php",
"src/Pest.php",
"compiled/globals.php"
"src/Functions.php",
"src/Pest.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\Fixtures\\Covers\\": "tests/Fixtures/Covers",
"Tests\\Fixtures\\Inheritance\\": "tests/Fixtures/Inheritance",
"Tests\\Fixtures\\Arch\\": "tests/Fixtures/Arch",
"Tests\\": "tests/PHPUnit/"
},
"classmap": [
"tests/Fixtures/Arch/ToBeCasedCorrectly/IncorrectCasing/incorrectCasing.php"
],
"files": [
"tests/Autoload.php"
]
},
"require-dev": {
"ergebnis/phpstan-rules": "^0.15.0",
"friendsofphp/php-cs-fixer": "^2.16.3",
"illuminate/console": "^7.16.1",
"illuminate/support": "^7.16.1",
"mockery/mockery": "^1.4.0",
"phpstan/phpstan": "^0.12.30",
"phpstan/phpstan-strict-rules": "^0.12.2",
"rector/rector": "^0.7.37",
"symfony/var-dumper": "^5.1.2",
"thecodingmachine/phpstan-strict-rules": "^0.12.0"
"mrpunyapal/peststan": "^0.2.11",
"laravel/pao": "^1.1.1",
"pestphp/pest-dev-tools": "^5.0.0",
"pestphp/pest-plugin-browser": "^5.0.0",
"pestphp/pest-plugin-type-coverage": "^5.0.0",
"psy/psysh": "^0.12.24"
},
"minimum-stability": "dev",
"prefer-stable": true,
"config": {
"sort-packages": true,
"preferred-install": "dist"
"preferred-install": "dist",
"allow-plugins": {
"pestphp/pest-plugin": true
}
},
"bin": [
"bin/pest"
],
"scripts": {
"compile": "@php ./scripts/compile.php",
"lint": "rector process src && php-cs-fixer fix -v",
"test:lint": "php-cs-fixer fix -v --dry-run && rector process src --dry-run",
"test:types": "phpstan analyse --ansi --memory-limit=0",
"test:unit": "php bin/pest --colors=always --exclude-group=integration",
"test:integration": "php bin/pest --colors=always --group=integration",
"update:snapshots": "REBUILD_SNAPSHOTS=true php bin/pest --colors=always",
"lint": [
"rector",
"pint --parallel"
],
"test:lint": [
"rector --dry-run",
"pint --parallel --test"
],
"test:profanity": "php bin/pest --profanity --compact",
"test:type:check": "phpstan analyse --ansi --memory-limit=-1 --debug",
"test:type:coverage": "php -d memory_limit=-1 bin/pest --type-coverage --min=100",
"test:unit": "php bin/pest --exclude-group=integration --compact",
"test:inline": "php bin/pest --configuration=phpunit.inline.xml",
"test:parallel": "php bin/pest --exclude-group=integration --parallel --processes=3",
"test:integration": "php bin/pest --group=integration -v",
"update:snapshots": "REBUILD_SNAPSHOTS=true php bin/pest --update-snapshots",
"test": [
"@test:lint",
"@test:types",
"@test:type:check",
"@test:type:coverage",
"@test:unit",
"@test:parallel",
"@test:integration"
]
},
"extra": {
"branch-alias": {
"dev-master": "0.2.x-dev"
},
"pest": {
"plugins": [
"Pest\\Plugins\\Version"
"Pest\\Mutate\\Plugins\\Mutate",
"Pest\\Plugins\\Configuration",
"Pest\\Plugins\\Bail",
"Pest\\Plugins\\Cache",
"Pest\\Plugins\\Coverage",
"Pest\\Plugins\\Init",
"Pest\\Plugins\\Environment",
"Pest\\Plugins\\Help",
"Pest\\Plugins\\Memory",
"Pest\\Plugins\\Only",
"Pest\\Plugins\\Printer",
"Pest\\Plugins\\ProcessIsolation",
"Pest\\Plugins\\Profile",
"Pest\\Plugins\\Retry",
"Pest\\Plugins\\Snapshot",
"Pest\\Plugins\\Verbose",
"Pest\\Plugins\\Version",
"Pest\\Plugins\\Shard",
"Pest\\Plugins\\Tia",
"Pest\\Plugins\\Parallel"
]
},
"laravel": {
"providers": [
"Pest\\Laravel\\PestServiceProvider"
"phpstan": {
"includes": [
"extension.neon"
]
}
}
+16
View File
@@ -0,0 +1,16 @@
ARG PHP=8.1
FROM php:${PHP}-cli-alpine
RUN apk update && apk add \
zip libzip-dev icu-dev git
RUN docker-php-ext-install zip intl
RUN apk add --no-cache linux-headers autoconf build-base
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
ENTRYPOINT ["php"]
+4
View File
@@ -0,0 +1,4 @@
parameters:
universalObjectCratesClasses:
- Pest\Support\HigherOrderTapProxy
- Pest\Expectation
@@ -0,0 +1,90 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\Event\Code;
use NunoMaduro\Collision\Contracts\RenderableOnCollisionEditor;
use PHPUnit\Event\NoPreviousThrowableException;
use PHPUnit\Framework\Exception;
use PHPUnit\Util\Filter;
use PHPUnit\Util\ThrowableToStringMapper;
/**
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
*
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final readonly class ThrowableBuilder
{
/**
* @throws Exception
* @throws NoPreviousThrowableException
*/
public static function from(\Throwable $t): Throwable
{
$previous = $t->getPrevious();
if ($previous !== null) {
$previous = self::from($previous);
}
$trace = Filter::stackTraceFromThrowableAsString($t);
if ($t instanceof RenderableOnCollisionEditor && $frame = $t->toCollisionEditor()) {
$file = $frame->getFile();
$line = $frame->getLine();
$trace = "$file:$line\n$trace";
}
return new Throwable(
$t::class,
$t->getMessage(),
ThrowableToStringMapper::map($t),
$trace,
$previous,
);
}
}
+505
View File
@@ -0,0 +1,505 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\Logging\JUnit;
use DOMDocument;
use DOMElement;
use Pest\Logging\Converter;
use Pest\Support\Container;
use Pest\TestSuite;
use PHPUnit\Event\Code\Test;
use PHPUnit\Event\Code\TestMethod;
use PHPUnit\Event\EventFacadeIsSealedException;
use PHPUnit\Event\Facade;
use PHPUnit\Event\InvalidArgumentException;
use PHPUnit\Event\Telemetry\HRTime;
use PHPUnit\Event\Telemetry\Info;
use PHPUnit\Event\Test\Errored;
use PHPUnit\Event\Test\Failed;
use PHPUnit\Event\Test\Finished;
use PHPUnit\Event\Test\MarkedIncomplete;
use PHPUnit\Event\Test\PreparationStarted;
use PHPUnit\Event\Test\Prepared;
use PHPUnit\Event\Test\PrintedUnexpectedOutput;
use PHPUnit\Event\Test\Skipped;
use PHPUnit\Event\TestSuite\Started;
use PHPUnit\Event\UnknownSubscriberTypeException;
use PHPUnit\TextUI\Output\Printer;
use PHPUnit\Util\Xml;
use function assert;
use function basename;
use function is_int;
use function sprintf;
use function str_replace;
use function trim;
/**
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
*
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final class JunitXmlLogger
{
private readonly Printer $printer;
private readonly Converter $converter; // pest-added
private DOMDocument $document;
private DOMElement $root;
/**
* @var DOMElement[]
*/
private array $testSuites = [];
/**
* @var array<int,int>
*/
private array $testSuiteTests = [0];
/**
* @var array<int,int>
*/
private array $testSuiteAssertions = [0];
/**
* @var array<int,int>
*/
private array $testSuiteErrors = [0];
/**
* @var array<int,int>
*/
private array $testSuiteFailures = [0];
/**
* @var array<int,int>
*/
private array $testSuiteSkipped = [0];
/**
* @var array<int,int>
*/
private array $testSuiteTimes = [0];
private int $testSuiteLevel = 0;
private ?DOMElement $currentTestCase = null;
private ?HRTime $time = null;
private bool $prepared = false;
private bool $preparationFailed = false;
/**
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
public function __construct(Printer $printer, Facade $facade)
{
$this->printer = $printer;
$this->converter = new Converter(Container::getInstance()->get(TestSuite::class)->rootPath); // pest-added
$this->registerSubscribers($facade);
$this->createDocument();
}
public function flush(): void
{
$this->printer->print($this->document->saveXML() ?: '');
$this->printer->flush();
}
public function testSuiteStarted(Started $event): void
{
$testSuite = $this->document->createElement('testsuite');
$testSuite->setAttribute('name', $this->converter->getTestSuiteName($event->testSuite())); // pest-changed
if ($event->testSuite()->isForTestClass()) {
$testSuite->setAttribute('file', $this->converter->getTestSuiteLocation($event->testSuite()) ?? ''); // pest-changed
}
if ($this->testSuiteLevel > 0) {
$this->testSuites[$this->testSuiteLevel]->appendChild($testSuite);
} else {
$this->root->appendChild($testSuite);
}
$this->testSuiteLevel++;
$this->testSuites[$this->testSuiteLevel] = $testSuite;
$this->testSuiteTests[$this->testSuiteLevel] = 0;
$this->testSuiteAssertions[$this->testSuiteLevel] = 0;
$this->testSuiteErrors[$this->testSuiteLevel] = 0;
$this->testSuiteFailures[$this->testSuiteLevel] = 0;
$this->testSuiteSkipped[$this->testSuiteLevel] = 0;
$this->testSuiteTimes[$this->testSuiteLevel] = 0;
}
public function testSuiteFinished(): void
{
$this->testSuites[$this->testSuiteLevel]->setAttribute(
'tests',
(string) $this->testSuiteTests[$this->testSuiteLevel],
);
$this->testSuites[$this->testSuiteLevel]->setAttribute(
'assertions',
(string) $this->testSuiteAssertions[$this->testSuiteLevel],
);
$this->testSuites[$this->testSuiteLevel]->setAttribute(
'errors',
(string) $this->testSuiteErrors[$this->testSuiteLevel],
);
$this->testSuites[$this->testSuiteLevel]->setAttribute(
'failures',
(string) $this->testSuiteFailures[$this->testSuiteLevel],
);
$this->testSuites[$this->testSuiteLevel]->setAttribute(
'skipped',
(string) $this->testSuiteSkipped[$this->testSuiteLevel],
);
$this->testSuites[$this->testSuiteLevel]->setAttribute(
'time',
sprintf('%F', $this->testSuiteTimes[$this->testSuiteLevel]),
);
if ($this->testSuiteLevel > 1) {
$this->testSuiteTests[$this->testSuiteLevel - 1] += $this->testSuiteTests[$this->testSuiteLevel];
$this->testSuiteAssertions[$this->testSuiteLevel - 1] += $this->testSuiteAssertions[$this->testSuiteLevel];
$this->testSuiteErrors[$this->testSuiteLevel - 1] += $this->testSuiteErrors[$this->testSuiteLevel];
$this->testSuiteFailures[$this->testSuiteLevel - 1] += $this->testSuiteFailures[$this->testSuiteLevel];
$this->testSuiteSkipped[$this->testSuiteLevel - 1] += $this->testSuiteSkipped[$this->testSuiteLevel];
$this->testSuiteTimes[$this->testSuiteLevel - 1] += $this->testSuiteTimes[$this->testSuiteLevel];
}
$this->testSuiteLevel--;
}
/**
* @throws InvalidArgumentException
*/
public function testPreparationStarted(PreparationStarted $event): void
{
$this->createTestCase($event);
}
public function testPreparationFailed(): void
{
$this->preparationFailed = true;
}
public function testPrepared(): void
{
$this->prepared = true;
}
public function testPrintedUnexpectedOutput(PrintedUnexpectedOutput $event): void
{
assert($this->currentTestCase !== null);
$systemOut = $this->document->createElement(
'system-out',
Xml::prepareString($event->output()),
);
$this->currentTestCase->appendChild($systemOut);
}
/**
* @throws InvalidArgumentException
*/
public function testFinished(Finished $event): void
{
if (! $this->prepared || $this->preparationFailed) {
return;
}
$this->handleFinish($event->telemetryInfo(), $event->numberOfAssertionsPerformed());
}
/**
* @throws InvalidArgumentException
*/
public function testMarkedIncomplete(MarkedIncomplete $event): void
{
$this->handleIncompleteOrSkipped($event);
}
/**
* @throws InvalidArgumentException
*/
public function testSkipped(Skipped $event): void
{
$this->handleIncompleteOrSkipped($event);
}
/**
* @throws InvalidArgumentException
*/
public function testErrored(Errored $event): void
{
$this->handleFault($event, 'error');
$this->testSuiteErrors[$this->testSuiteLevel]++;
}
/**
* @throws InvalidArgumentException
*/
public function testFailed(Failed $event): void
{
$this->handleFault($event, 'failure');
$this->testSuiteFailures[$this->testSuiteLevel]++;
}
/**
* @throws InvalidArgumentException
*/
private function handleFinish(Info $telemetryInfo, int $numberOfAssertionsPerformed): void
{
assert($this->currentTestCase !== null);
assert($this->time !== null);
$time = $telemetryInfo->time()->duration($this->time)->asFloat();
$this->testSuiteAssertions[$this->testSuiteLevel] += $numberOfAssertionsPerformed;
$this->currentTestCase->setAttribute(
'assertions',
(string) $numberOfAssertionsPerformed,
);
$this->currentTestCase->setAttribute(
'time',
sprintf('%F', $time),
);
$this->testSuites[$this->testSuiteLevel]->appendChild(
$this->currentTestCase,
);
$this->testSuiteTests[$this->testSuiteLevel]++;
$this->testSuiteTimes[$this->testSuiteLevel] += $time;
$this->currentTestCase = null;
$this->time = null;
$this->prepared = false;
}
/**
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
private function registerSubscribers(Facade $facade): void
{
$facade->registerSubscribers(
new TestSuiteStartedSubscriber($this),
new TestSuiteFinishedSubscriber($this),
new TestPreparationStartedSubscriber($this),
new TestPreparationFailedSubscriber($this),
new TestPreparedSubscriber($this),
new TestPrintedUnexpectedOutputSubscriber($this),
new TestFinishedSubscriber($this),
new TestErroredSubscriber($this),
new TestFailedSubscriber($this),
new TestMarkedIncompleteSubscriber($this),
new TestSkippedSubscriber($this),
new TestRunnerExecutionFinishedSubscriber($this),
);
}
private function createDocument(): void
{
$this->document = new DOMDocument('1.0', 'UTF-8');
$this->document->formatOutput = true;
$this->root = $this->document->createElement('testsuites');
$this->document->appendChild($this->root);
}
/**
* @throws InvalidArgumentException
*/
private function handleFault(Errored|Failed $event, string $type): void
{
if (! $this->prepared) {
$this->createTestCase($event);
}
assert($this->currentTestCase !== null);
$buffer = $this->converter->getTestCaseMethodName($event->test()); // pest-changed
$throwable = $event->throwable();
$buffer .= trim(
$this->converter->getExceptionMessage($throwable).PHP_EOL. // pest-changed
$this->converter->getExceptionDetails($throwable), // pest-changed
);
$fault = $this->document->createElement(
$type,
Xml::prepareString($buffer),
);
$fault->setAttribute('type', $throwable->className());
$this->currentTestCase->appendChild($fault);
if (! $this->prepared) {
$this->handleFinish($event->telemetryInfo(), 0);
}
}
/**
* @throws InvalidArgumentException
*/
private function handleIncompleteOrSkipped(MarkedIncomplete|Skipped $event): void
{
if (! $this->prepared) {
$this->createTestCase($event);
}
assert($this->currentTestCase !== null);
$skipped = $this->document->createElement('skipped');
$this->currentTestCase->appendChild($skipped);
$this->testSuiteSkipped[$this->testSuiteLevel]++;
if (! $this->prepared) {
$this->handleFinish($event->telemetryInfo(), 0);
}
}
/**
* @throws InvalidArgumentException
*/
private function testAsString(Test $test): string
{
if ($test->isPhpt()) {
return basename($test->file());
}
assert($test instanceof TestMethod);
return sprintf(
'%s::%s%s',
$test->className(),
$this->name($test),
PHP_EOL,
);
}
/**
* @throws InvalidArgumentException
*/
private function name(Test $test): string
{
if ($test->isPhpt()) {
return basename($test->file());
}
assert($test instanceof TestMethod);
if (! $test->testData()->hasDataFromDataProvider()) {
return $test->methodName();
}
$dataSetName = $test->testData()->dataFromDataProvider()->dataSetName();
if (is_int($dataSetName)) {
return sprintf(
'%s with data set #%d',
$test->methodName(),
$dataSetName,
);
}
return sprintf(
'%s with data set "%s"',
$test->methodName(),
$dataSetName,
);
}
/**
* @throws InvalidArgumentException
*
* @phpstan-assert !null $this->currentTestCase
*/
private function createTestCase(Errored|Failed|MarkedIncomplete|PreparationStarted|Prepared|Skipped $event): void
{
$testCase = $this->document->createElement('testcase');
$test = $event->test();
$file = $this->converter->getTestCaseLocation($test); // pest-added
$testCase->setAttribute('name', $this->converter->getTestCaseMethodName($test)); // pest-changed
$testCase->setAttribute('file', $file); // pest-changed
if ($test->isTestMethod()) {
assert($test instanceof TestMethod);
// $testCase->setAttribute('line', (string) $test->line()); // pest-removed
$className = $this->converter->getTrimmedTestClassName($test); // pest-added
$testCase->setAttribute('class', $className); // pest-changed
$testCase->setAttribute('classname', str_replace('\\', '.', $className)); // pest-changed
}
$this->currentTestCase = $testCase;
$this->time = $event->telemetryInfo()->time();
}
}
@@ -0,0 +1,180 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\Runner\Filter;
use Pest\Contracts\HasPrintableTestCaseName;
use PHPUnit\Framework\Test;
use PHPUnit\Framework\TestSuite;
use PHPUnit\Runner\PhptTestCase;
use RecursiveFilterIterator;
use RecursiveIterator;
use function end;
use function preg_match;
use function sprintf;
use function str_replace;
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
abstract class NameFilterIterator extends RecursiveFilterIterator
{
/**
* @psalm-var non-empty-string
*/
private readonly string $regularExpression;
private readonly ?int $dataSetMinimum;
private readonly ?int $dataSetMaximum;
/**
* @psalm-param RecursiveIterator<int, Test> $iterator
* @psalm-param non-empty-string $filter
*/
public function __construct(RecursiveIterator $iterator, string $filter)
{
parent::__construct($iterator);
$preparedFilter = $this->prepareFilter($filter);
$this->regularExpression = $preparedFilter['regularExpression'];
$this->dataSetMinimum = $preparedFilter['dataSetMinimum'];
$this->dataSetMaximum = $preparedFilter['dataSetMaximum'];
}
public function accept(): bool
{
$test = $this->getInnerIterator()->current();
if ($test instanceof TestSuite) {
return true;
}
if ($test instanceof PhptTestCase) {
return false;
}
if ($test instanceof HasPrintableTestCaseName) {
$name = trim(
$test::getPrintableTestCaseName().'::'.$test->getPrintableTestCaseMethodName().$test->dataSetAsString()
);
} else {
$name = $test::class.'::'.$test->nameWithDataSet();
}
$accepted = @preg_match($this->regularExpression, $name, $matches) === 1;
if ($accepted && isset($this->dataSetMaximum)) {
$set = end($matches);
$accepted = $set >= $this->dataSetMinimum && $set <= $this->dataSetMaximum;
}
return $this->doAccept($accepted);
}
abstract protected function doAccept(bool $result): bool;
/**
* @psalm-param non-empty-string $filter
*
* @psalm-return array{regularExpression: non-empty-string, dataSetMinimum: ?int, dataSetMaximum: ?int}
*/
private function prepareFilter(string $filter): array
{
$dataSetMinimum = null;
$dataSetMaximum = null;
if (@preg_match($filter, '') === false) {
// Handles:
// * testAssertEqualsSucceeds#4
// * testAssertEqualsSucceeds#4-8
if (preg_match('/^(.*?)#(\d+)(?:-(\d+))?$/', $filter, $matches)) {
if (isset($matches[3]) && $matches[2] < $matches[3]) {
$filter = sprintf(
'%s.*with data set #(\d+)$',
$matches[1],
);
$dataSetMinimum = (int) $matches[2];
$dataSetMaximum = (int) $matches[3];
} else {
$filter = sprintf(
'%s.*with data set #%s$',
$matches[1],
$matches[2],
);
}
} // Handles:
// * testDetermineJsonError@JSON_ERROR_NONE
// * testDetermineJsonError@JSON.*
elseif (preg_match('/^(.*?)@(.+)$/', $filter, $matches)) {
$filter = sprintf(
'%s.*with data set "%s"$',
$matches[1],
$matches[2],
);
}
// Escape delimiters in regular expression. Do NOT use preg_quote,
// to keep magic characters.
$filter = sprintf(
'/%s/i',
str_replace(
'/',
'\\/',
$filter,
),
);
}
return [
'regularExpression' => $filter,
'dataSetMinimum' => $dataSetMinimum,
'dataSetMaximum' => $dataSetMaximum,
];
}
}
@@ -0,0 +1,206 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\Runner\ResultCache;
use const DIRECTORY_SEPARATOR;
use const LOCK_EX;
use PHPUnit\Framework\TestStatus\TestStatus;
use PHPUnit\Runner\DirectoryDoesNotExistException;
use PHPUnit\Runner\Exception;
use PHPUnit\Util\Filesystem;
use function array_keys;
use function assert;
use function dirname;
use function file_get_contents;
use function file_put_contents;
use function is_array;
use function is_dir;
use function is_file;
use function json_decode;
use function json_encode;
use function Pest\version;
/**
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
*
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final class DefaultResultCache implements ResultCache
{
private const string DEFAULT_RESULT_CACHE_FILENAME = '.phpunit.result.cache';
private readonly string $cacheFilename;
/**
* @var array<string, TestStatus>
*/
private array $defects = [];
/**
* @var array<string, float>
*/
private array $times = [];
public function __construct(?string $filepath = null)
{
if ($filepath !== null && is_dir($filepath)) {
$filepath .= DIRECTORY_SEPARATOR.self::DEFAULT_RESULT_CACHE_FILENAME;
}
$this->cacheFilename = $filepath ?? $_ENV['PHPUNIT_RESULT_CACHE'] ?? self::DEFAULT_RESULT_CACHE_FILENAME;
}
public function setStatus(ResultCacheId $id, TestStatus $status): void
{
if ($status->isSuccess()) {
return;
}
$this->defects[$id->asString()] = $status;
}
public function status(ResultCacheId $id): TestStatus
{
return $this->defects[$id->asString()] ?? TestStatus::unknown();
}
public function setTime(ResultCacheId $id, float $time): void
{
$this->times[$id->asString()] = $time;
}
public function time(ResultCacheId $id): float
{
return $this->times[$id->asString()] ?? 0.0;
}
public function mergeWith(self $other): void
{
foreach ($other->defects as $id => $defect) {
$this->defects[$id] = $defect;
}
foreach ($other->times as $id => $time) {
$this->times[$id] = $time;
}
}
public function load(): void
{
if (! is_file($this->cacheFilename)) {
return;
}
$contents = file_get_contents($this->cacheFilename);
if ($contents === false) {
return;
}
$data = json_decode(
$contents,
true,
);
if ($data === null) {
return;
}
if (! isset($data['version'])) {
return;
}
if ($data['version'] !== $this->cacheVersion()) {
return;
}
assert(isset($data['defects']) && is_array($data['defects']));
assert(isset($data['times']) && is_array($data['times']));
foreach (array_keys($data['defects']) as $test) {
$data['defects'][$test] = TestStatus::from($data['defects'][$test]);
}
$this->defects = $data['defects'];
$this->times = $data['times'];
}
/**
* @throws Exception
*/
public function persist(): void
{
if (! Filesystem::createDirectory(dirname($this->cacheFilename))) {
throw new DirectoryDoesNotExistException(dirname($this->cacheFilename));
}
$data = [
'version' => $this->cacheVersion(),
'defects' => [],
'times' => $this->times,
];
foreach ($this->defects as $test => $status) {
$data['defects'][$test] = $status->asInt();
}
file_put_contents(
$this->cacheFilename,
json_encode($data),
LOCK_EX,
);
}
/**
* Returns the cache version.
*/
private function cacheVersion(): string
{
return 'pest_'.version();
}
}
+227
View File
@@ -0,0 +1,227 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
namespace PHPUnit\Runner;
use Exception;
use Pest\Contracts\HasPrintableTestCaseName;
use Pest\Panic;
use Pest\TestCases\IgnorableTestCase;
use Pest\TestSuite;
use PHPUnit\Framework\TestCase;
use ReflectionClass;
use ReflectionException;
use Throwable;
use function array_diff;
use function array_values;
use function basename;
use function class_exists;
use function get_declared_classes;
use function substr;
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final class TestSuiteLoader
{
/**
* @psalm-var list<class-string>
*/
private static array $loadedClasses = [];
/**
* @psalm-var array<string, array<class-string>>
*/
private static array $loadedClassesByFilename = [];
/**
* @psalm-var list<class-string>
*/
private static array $declaredClasses = [];
public function __construct()
{
if (empty(self::$declaredClasses)) {
self::$declaredClasses = get_declared_classes();
}
}
/**
* @throws Exception
*/
public function load(string $suiteClassFile): ReflectionClass
{
$suiteClassName = $this->classNameFromFileName($suiteClassFile);
(static function () use ($suiteClassFile) {
try {
include_once $suiteClassFile;
} catch (Throwable $e) {
Panic::with($e);
}
TestSuite::getInstance()->tests->makeIfNeeded($suiteClassFile);
})();
$loadedClasses = array_values(
array_diff(
get_declared_classes(),
array_merge(
self::$declaredClasses,
self::$loadedClasses
)
)
);
self::$loadedClasses = array_merge($loadedClasses, self::$loadedClasses);
foreach ($loadedClasses as $loadedClass) {
$reflection = new ReflectionClass($loadedClass);
$filename = $reflection->getFileName();
self::$loadedClassesByFilename[$filename] = [
$loadedClass,
...self::$loadedClassesByFilename[$filename] ?? [],
];
}
$loadedClasses = array_merge(self::$loadedClassesByFilename[$suiteClassFile] ?? [], $loadedClasses);
if (empty($loadedClasses)) {
return $this->exceptionFor($suiteClassName, $suiteClassFile);
}
$testCaseFound = false;
$class = false;
foreach (array_reverse($loadedClasses) as $loadedClass) {
if (
is_subclass_of($loadedClass, HasPrintableTestCaseName::class)
|| is_subclass_of($loadedClass, TestCase::class)) {
try {
$class = new ReflectionClass($loadedClass);
// @codeCoverageIgnoreStart
} catch (ReflectionException) {
continue;
}
if ($class->isAbstract() || ($suiteClassFile !== $class->getFileName())) {
if (! str_contains($class->getFileName(), 'TestCaseFactory.php')) {
continue;
}
}
$suiteClassName = $loadedClass;
$testCaseFound = true;
break;
}
}
if (! $testCaseFound) {
foreach (array_reverse($loadedClasses) as $loadedClass) {
$offset = 0 - strlen($suiteClassName);
if (stripos(substr($loadedClass, $offset - 1), '\\'.$suiteClassName) === 0 ||
stripos(substr($loadedClass, $offset - 1), '_'.$suiteClassName) === 0) {
try {
$class = new ReflectionClass($loadedClass);
// @codeCoverageIgnoreStart
} catch (ReflectionException) {
continue;
}
$suiteClassName = $loadedClass;
$testCaseFound = true;
break;
}
}
}
if (! $testCaseFound) {
return $this->exceptionFor($suiteClassName, $suiteClassFile);
}
if (! class_exists($suiteClassName, false)) {
return $this->exceptionFor($suiteClassName, $suiteClassFile);
}
// @codeCoverageIgnoreEnd
if ($class->isSubclassOf(TestCase::class) && ! $class->isAbstract()) {
return $class;
}
if ($class->hasMethod('suite')) {
try {
$method = $class->getMethod('suite');
// @codeCoverageIgnoreStart
} catch (ReflectionException $e) {
throw new Exception($e->getMessage(), (int) $e->getCode(), $e);
}
// @codeCoverageIgnoreEnd
if (! $method->isAbstract() && $method->isPublic() && $method->isStatic()) {
return $class;
}
}
return $this->exceptionFor($suiteClassName, $suiteClassFile);
}
public function reload(ReflectionClass $aClass): ReflectionClass
{
return $aClass;
}
private function classNameFromFileName(string $suiteClassFile): string
{
$className = basename($suiteClassFile, '.php');
$dotPos = strpos($className, '.');
if ($dotPos !== false) {
$className = substr($className, 0, $dotPos);
}
return $className;
}
private function exceptionFor(string $className, string $filename): ReflectionClass
{
return new ReflectionClass(IgnorableTestCase::class);
}
}
+388
View File
@@ -0,0 +1,388 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\Runner;
use PHPUnit\Framework\DataProviderTestSuite;
use PHPUnit\Framework\Reorderable;
use PHPUnit\Framework\Test;
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\TestSuite;
use PHPUnit\Runner\ResultCache\NullResultCache;
use PHPUnit\Runner\ResultCache\ResultCache;
use PHPUnit\Runner\ResultCache\ResultCacheId;
use function array_diff;
use function array_merge;
use function array_reverse;
use function array_splice;
use function assert;
use function count;
use function in_array;
use function max;
use function shuffle;
use function usort;
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final class TestSuiteSorter
{
public const int ORDER_DEFAULT = 0;
public const int ORDER_RANDOMIZED = 1;
public const int ORDER_REVERSED = 2;
public const int ORDER_DEFECTS_FIRST = 3;
public const int ORDER_DURATION = 4;
public const int ORDER_SIZE = 5;
/**
* @var non-empty-array<non-empty-string, positive-int>
*/
private const array SIZE_SORT_WEIGHT = [
'small' => 1,
'medium' => 2,
'large' => 3,
'unknown' => 4,
];
/**
* @var array<string, int> Associative array of (string => DEFECT_SORT_WEIGHT) elements
*/
private array $defectSortOrder = [];
private readonly ResultCache $cache;
public function __construct(?ResultCache $cache = null)
{
$this->cache = $cache ?? new NullResultCache;
}
/**
* @throws Exception
*/
public function reorderTestsInSuite(Test $suite, int $order, bool $resolveDependencies, int $orderDefects): void
{
$allowedOrders = [
self::ORDER_DEFAULT,
self::ORDER_REVERSED,
self::ORDER_RANDOMIZED,
self::ORDER_DURATION,
self::ORDER_SIZE,
];
if (! in_array($order, $allowedOrders, true)) {
// @codeCoverageIgnoreStart
throw new InvalidOrderException;
// @codeCoverageIgnoreEnd
}
$allowedOrderDefects = [
self::ORDER_DEFAULT,
self::ORDER_DEFECTS_FIRST,
];
if (! in_array($orderDefects, $allowedOrderDefects, true)) {
// @codeCoverageIgnoreStart
throw new InvalidOrderException;
// @codeCoverageIgnoreEnd
}
if ($suite instanceof TestSuite) {
foreach ($suite as $_suite) {
$this->reorderTestsInSuite($_suite, $order, $resolveDependencies, $orderDefects);
}
if ($orderDefects === self::ORDER_DEFECTS_FIRST) {
$this->addSuiteToDefectSortOrder($suite);
}
$this->sort($suite, $order, $resolveDependencies, $orderDefects);
}
}
private function sort(TestSuite $suite, int $order, bool $resolveDependencies, int $orderDefects): void
{
if ($suite->tests() === []) {
return;
}
if ($order === self::ORDER_REVERSED) {
$suite->setTests($this->reverse($suite->tests()));
} elseif ($order === self::ORDER_RANDOMIZED) {
$suite->setTests($this->randomize($suite->tests()));
} elseif ($order === self::ORDER_DURATION) {
$suite->setTests($this->sortByDuration($suite->tests()));
} elseif ($order === self::ORDER_SIZE) {
$suite->setTests($this->sortBySize($suite->tests()));
}
if ($orderDefects === self::ORDER_DEFECTS_FIRST) {
$suite->setTests($this->sortDefectsFirst($suite->tests()));
}
if ($resolveDependencies && ! ($suite instanceof DataProviderTestSuite)) {
$tests = $suite->tests();
/** @noinspection PhpParamsInspection */
/** @phpstan-ignore argument.type */
$suite->setTests($this->resolveDependencies($tests));
}
}
private function addSuiteToDefectSortOrder(TestSuite $suite): void
{
$max = 0;
foreach ($suite->tests() as $test) {
assert($test instanceof Reorderable);
$sortId = $test->sortId();
if (! isset($this->defectSortOrder[$sortId])) {
$this->defectSortOrder[$sortId] = $this->cache->status(ResultCacheId::fromReorderable($test))->asInt();
$max = max($max, $this->defectSortOrder[$sortId]);
}
}
$this->defectSortOrder[$suite->sortId()] = $max;
}
/**
* @param list<Test> $tests
* @return list<Test>
*/
private function reverse(array $tests): array
{
return array_reverse($tests);
}
/**
* @param list<Test> $tests
* @return list<Test>
*/
private function randomize(array $tests): array
{
shuffle($tests);
return $tests;
}
/**
* @param list<Test> $tests
* @return list<Test>
*/
private function sortDefectsFirst(array $tests): array
{
usort(
$tests,
fn (Test $left, Test $right) => $this->cmpDefectPriorityAndTime($left, $right),
);
return $tests;
}
/**
* @param list<Test> $tests
* @return list<Test>
*/
private function sortByDuration(array $tests): array
{
usort(
$tests,
fn (Test $left, Test $right) => $this->cmpDuration($left, $right),
);
return $tests;
}
/**
* @param list<Test> $tests
* @return list<Test>
*/
private function sortBySize(array $tests): array
{
usort(
$tests,
fn (Test $left, Test $right) => $this->cmpSize($left, $right),
);
return $tests;
}
/**
* Comparator callback function to sort tests for "reach failure as fast as possible".
*
* 1. sort tests by defect weight defined in self::DEFECT_SORT_WEIGHT
* 2. when tests are equally defective, sort the fastest to the front
* 3. do not reorder successful tests
*/
private function cmpDefectPriorityAndTime(Test $a, Test $b): int
{
assert($a instanceof Reorderable);
assert($b instanceof Reorderable);
$priorityA = $this->defectSortOrder[$a->sortId()] ?? 0;
$priorityB = $this->defectSortOrder[$b->sortId()] ?? 0;
if ($priorityA !== $priorityB) {
// Sort defect weight descending
return $priorityB <=> $priorityA;
}
if ($priorityA > 0 || $priorityB > 0) {
return $this->cmpDuration($a, $b);
}
// do not change execution order
return 0;
}
/**
* Compares test duration for sorting tests by duration ascending.
*/
private function cmpDuration(Test $a, Test $b): int
{
if (! ($a instanceof Reorderable && $b instanceof Reorderable)) {
return 0;
}
return $this->cache->time(ResultCacheId::fromReorderable($a)) <=> $this->cache->time(ResultCacheId::fromReorderable($b));
}
/**
* Compares test size for sorting tests small->medium->large->unknown.
*/
private function cmpSize(Test $a, Test $b): int
{
$sizeA = ($a instanceof TestCase || $a instanceof DataProviderTestSuite)
? $a->size()->asString()
: 'unknown';
$sizeB = ($b instanceof TestCase || $b instanceof DataProviderTestSuite)
? $b->size()->asString()
: 'unknown';
return self::SIZE_SORT_WEIGHT[$sizeA] <=> self::SIZE_SORT_WEIGHT[$sizeB];
}
/**
* Reorder Tests within a TestCase in such a way as to resolve as many dependencies as possible.
* The algorithm will leave the tests in original running order when it can.
* For more details see the documentation for test dependencies.
*
* Short description of algorithm:
* 1. Pick the next Test from remaining tests to be checked for dependencies.
* 2. If the test has no dependencies: mark done, start again from the top
* 3. If the test has dependencies but none left to do: mark done, start again from the top
* 4. When we reach the end add any leftover tests to the end. These will be marked 'skipped' during execution.
*
* @param array<TestCase> $tests
* @return array<TestCase>
*/
private function resolveDependencies(array $tests): array
{
// Pest: Fast-path. If no test in this suite declares dependencies, the
// original O(N^2) algorithm is wasted work — it would splice each test
// one-by-one back into the same order. The check deliberately walks
// TestCase instances directly instead of calling TestSuite::requires(),
// because the latter lazily builds TestSuite::provides() via
// ExecutionOrderDependency::mergeUnique, which is O(N^2) in the total
// number of tests. With thousands of tests that single call alone can
// burn several seconds before the sort even begins. Reading the
// cached TestCase::$dependencies property stays O(N) and costs nothing
// when no test uses `->depends()` / PHPUnit `@depends`.
if (! $this->anyTestHasDependencies($tests)) {
return $tests;
}
$newTestOrder = [];
$i = 0;
$provided = [];
do {
if (array_diff($tests[$i]->requires(), $provided) === []) {
$provided = array_merge($provided, $tests[$i]->provides());
$newTestOrder = array_merge($newTestOrder, array_splice($tests, $i, 1));
$i = 0;
} else {
$i++;
}
} while ($tests !== [] && ($i < count($tests)));
return array_merge($newTestOrder, $tests);
}
/**
* Cheaply determines whether any test in the tree declares @depends.
*
* Walks `TestSuite` containers recursively and inspects each `TestCase`
* directly so it never triggers `TestSuite::provides()`, which is O(N^2)
* in the total number of aggregated tests.
*
* @param iterable<Test> $tests
*/
private function anyTestHasDependencies(iterable $tests): bool
{
foreach ($tests as $test) {
if ($test instanceof TestSuite) {
if ($this->anyTestHasDependencies($test->tests())) {
return true;
}
continue;
}
if ($test instanceof TestCase && $test->requires() !== []) {
return true;
}
}
return false;
}
}
@@ -0,0 +1,106 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\TextUI\Command;
use const PHP_EOL;
use PHPUnit\TextUI\Configuration\CodeCoverageFilterRegistry;
use PHPUnit\TextUI\Configuration\Configuration;
use PHPUnit\TextUI\Configuration\NoCoverageCacheDirectoryException;
use SebastianBergmann\CodeCoverage\StaticAnalysis\CacheWarmer;
use SebastianBergmann\Timer\NoActiveTimerException;
use SebastianBergmann\Timer\Timer;
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final readonly class WarmCodeCoverageCacheCommand implements Command
{
private Configuration $configuration;
private CodeCoverageFilterRegistry $codeCoverageFilterRegistry;
public function __construct(Configuration $configuration, CodeCoverageFilterRegistry $codeCoverageFilterRegistry)
{
$this->configuration = $configuration;
$this->codeCoverageFilterRegistry = $codeCoverageFilterRegistry;
}
/**
* @throws NoActiveTimerException
* @throws NoCoverageCacheDirectoryException
*/
public function execute(): Result
{
if (! $this->configuration->hasCoverageCacheDirectory()) {
return Result::from(
'Cache for static analysis has not been configured'.PHP_EOL,
Result::FAILURE,
);
}
$this->codeCoverageFilterRegistry->init($this->configuration, true);
if (! $this->codeCoverageFilterRegistry->configured()) {
return Result::from(
'Filter for code coverage has not been configured'.PHP_EOL,
Result::FAILURE,
);
}
$timer = new Timer;
$timer->start();
(new CacheWarmer)->warmCache(
$this->configuration->coverageCacheDirectory(),
! $this->configuration->disableCodeCoverageIgnore(),
$this->configuration->ignoreDeprecatedCodeUnitsFromCodeCoverage(),
$this->codeCoverageFilterRegistry->get(),
);
return Result::from();
}
}
@@ -0,0 +1,75 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Pest\Logging\TeamCity\Subscriber;
use PHPUnit\Event\Test\Skipped;
use PHPUnit\Event\Test\SkippedSubscriber;
use ReflectionClass;
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final class TestSkippedSubscriber extends Subscriber implements SkippedSubscriber
{
public function notify(Skipped $event): void
{
if (str_contains($event->message(), '__TODO__')) {
$this->printTodoItem();
}
$this->logger()->testSkipped($event);
}
/**
* Prints a "T" to the standard PHPUnit output to indicate a todo item.
*/
private function printTodoItem(): void
{
$mirror = new ReflectionClass($this->printer());
$printerMirror = $mirror->getMethod('printProgress');
$printerMirror->invoke($this->printer(), 'T');
}
}
@@ -0,0 +1,138 @@
<?php
/*
* BSD 3-Clause License
*
* Copyright (c) 2001-2023, Sebastian Bergmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\TextUI;
use Pest\Plugins\Only;
use Pest\Runner\Filter\EnsureTestCaseIsInitiatedFilter;
use PHPUnit\Event;
use PHPUnit\Framework\TestSuite;
use PHPUnit\Runner\Filter\Factory;
use PHPUnit\TextUI\Configuration\Configuration;
use PHPUnit\TextUI\Configuration\FilterNotConfiguredException;
use function array_map;
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final readonly class TestSuiteFilterProcessor
{
/**
* @throws Event\RuntimeException
* @throws FilterNotConfiguredException
*/
public function process(Configuration $configuration, TestSuite $suite): void
{
$factory = new Factory;
// @phpstan-ignore-next-line
(fn () => $this->filters[] = [
'className' => EnsureTestCaseIsInitiatedFilter::class,
'argument' => '',
])->call($factory);
if (! $configuration->hasFilter() &&
! $configuration->hasGroups() &&
! $configuration->hasExcludeGroups() &&
! $configuration->hasExcludeFilter() &&
! $configuration->hasTestsCovering() &&
! $configuration->hasTestsUsing() &&
! Only::isEnabled()) {
$suite->injectFilter($factory);
return;
}
if ($configuration->hasExcludeGroups()) {
$factory->addExcludeGroupFilter(
$configuration->excludeGroups(),
);
}
if (Only::isEnabled()) {
$factory->addIncludeGroupFilter([Only::group()]);
} elseif ($configuration->hasGroups()) {
$factory->addIncludeGroupFilter(
$configuration->groups(),
);
}
if ($configuration->hasTestsCovering()) {
$factory->addIncludeGroupFilter(
array_map(
static fn (string $name): string => '__phpunit_covers_'.$name,
$configuration->testsCovering(),
),
);
}
if ($configuration->hasTestsUsing()) {
$factory->addIncludeGroupFilter(
array_map(
static fn (string $name): string => '__phpunit_uses_'.$name,
$configuration->testsUsing(),
),
);
}
if ($configuration->hasExcludeFilter()) {
$factory->addExcludeNameFilter(
$configuration->excludeFilter(),
);
}
if ($configuration->hasFilter()) {
$factory->addIncludeNameFilter(
$configuration->filter(),
);
}
$suite->injectFilter($factory);
Event\Facade::emitter()->testSuiteFiltered(
Event\TestSuite\TestSuiteBuilder::from($suite),
);
}
}
+121
View File
@@ -0,0 +1,121 @@
parameters:
ignoreErrors:
-
message: '#^Trait Pest\\Concerns\\Expectable is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: src/Concerns/Expectable.php
-
message: '#^Trait Pest\\Concerns\\Logging\\WritesToConsole is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: src/Concerns/Logging/WritesToConsole.php
-
message: '#^Trait Pest\\Concerns\\Testable is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: src/Concerns/Testable.php
-
message: '#^Method Pest\\Expectation\:\:and\(\) should return Pest\\Expectation\<TAndValue\> but returns \(Pest\\Expectation&TAndValue\)\|Pest\\Expectation\<TAndValue of mixed\>\.$#'
identifier: return.type
count: 1
path: src/Expectation.php
-
message: '#^PHPDoc tag @property for property Pest\\Expectation\:\:\$each contains generic class Pest\\Expectations\\EachExpectation but does not specify its types\: TValue$#'
identifier: missingType.generics
count: 1
path: src/Expectation.php
-
message: '#^PHPDoc tag @property for property Pest\\Expectation\:\:\$not contains generic class Pest\\Expectations\\OppositeExpectation but does not specify its types\: TValue$#'
identifier: missingType.generics
count: 1
path: src/Expectation.php
-
message: '#^Parameter \#2 \$newScope of method Closure\:\:bindTo\(\) expects ''static''\|class\-string\|object\|null, string given\.$#'
identifier: argument.type
count: 1
path: src/Expectation.php
-
message: '#^Function expect\(\) should return Pest\\Expectation\<TValue\|null\> but returns Pest\\Expectation\<TValue\|null\>\.$#'
identifier: return.type
count: 1
path: src/Functions.php
-
message: '#^Parameter \#1 \$argv of method PHPUnit\\TextUI\\Application\:\:run\(\) expects list\<string\>, array\<int, string\> given\.$#'
identifier: argument.type
count: 1
path: src/Kernel.php
-
message: '#^Call to an undefined method object&TValue of mixed\:\:__toString\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Mixins/Expectation.php
-
message: '#^Call to an undefined method object&TValue of mixed\:\:toArray\(\)\.$#'
identifier: method.notFound
count: 4
path: src/Mixins/Expectation.php
-
message: '#^Call to an undefined method object&TValue of mixed\:\:toSnapshot\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Mixins/Expectation.php
-
message: '#^Call to an undefined method object&TValue of mixed\:\:toString\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Mixins/Expectation.php
-
message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with true will always evaluate to true\.$#'
identifier: staticMethod.alreadyNarrowedType
count: 2
path: src/Mixins/Expectation.php
-
message: '#^PHPDoc tag @var with type callable\(\)\: bool is not subtype of native type Closure\|null\.$#'
identifier: varTag.nativeType
count: 1
path: src/PendingCalls/TestCall.php
-
message: '#^Parameter \#4 \$testErroredEvents of class PHPUnit\\TestRunner\\TestResult\\TestResult constructor expects list\<PHPUnit\\Event\\Test\\AfterLastTestMethodErrored\|PHPUnit\\Event\\Test\\BeforeFirstTestMethodErrored\|PHPUnit\\Event\\Test\\Errored\>, array given\.$#'
identifier: argument.type
count: 1
path: src/Plugins/Parallel/Paratest/WrapperRunner.php
-
message: '#^Parameter \#7 \$testSuiteSkippedEvents of class PHPUnit\\TestRunner\\TestResult\\TestResult constructor expects list\<PHPUnit\\Event\\TestSuite\\Skipped\>, array given\.$#'
identifier: argument.type
count: 1
path: src/Plugins/Parallel/Paratest/WrapperRunner.php
-
message: '#^Parameter \#8 \$testSkippedEvents of class PHPUnit\\TestRunner\\TestResult\\TestResult constructor expects list\<PHPUnit\\Event\\Test\\Skipped\>, array given\.$#'
identifier: argument.type
count: 1
path: src/Plugins/Parallel/Paratest/WrapperRunner.php
-
message: '#^Parameter \#9 \$testMarkedIncompleteEvents of class PHPUnit\\TestRunner\\TestResult\\TestResult constructor expects list\<PHPUnit\\Event\\Test\\MarkedIncomplete\>, array given\.$#'
identifier: argument.type
count: 1
path: src/Plugins/Parallel/Paratest/WrapperRunner.php
-
message: '#^Property Pest\\Plugins\\Parallel\\Paratest\\WrapperRunner\:\:\$pending \(list\<non\-empty\-string\>\) does not accept array\<int, non\-empty\-string\>\.$#'
identifier: assign.propertyType
count: 1
path: src/Plugins/Parallel/Paratest/WrapperRunner.php
+5
View File
@@ -0,0 +1,5 @@
services:
-
class: Pest\PHPStan\HigherOrderExpectationTypeExtension
tags:
- phpstan.broker.expressionTypeResolverExtension
+5 -17
View File
@@ -1,23 +1,11 @@
includes:
- vendor/phpstan/phpstan-strict-rules/rules.neon
- vendor/ergebnis/phpstan-rules/rules.neon
- vendor/thecodingmachine/phpstan-strict-rules/phpstan-strict-rules.neon
- phpstan-baseline.neon
- phpstan-pest-extension.neon
- vendor/mrpunyapal/peststan/extension.neon
parameters:
level: max
level: 7
paths:
- src
excludes_analyse:
- src/globals.php
checkMissingIterableValueType: true
checkGenericClassInNonGenericObjectType: false
reportUnmatchedIgnoredErrors: true
ignoreErrors:
- "#Undefined variable: \\$this#"
- "#is not allowed to extend#"
- "#Language construct eval#"
- "# with null as default value#"
- "#has parameter \\$closure with default value.#"
- "#has parameter \\$description with default value.#"
reportUnmatchedIgnoredErrors: false
+25 -11
View File
@@ -1,16 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd"
backupGlobals="false"
beStrictAboutTestsThatDoNotTestAnything="true"
beStrictAboutOutputDuringTests="true"
bootstrap="vendor/autoload.php"
colors="true"
failOnRisky="true"
failOnWarning="false"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
backupStaticProperties="false"
>
<testsuites>
<testsuite name="default">
<directory suffix=".php">./tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./src</directory>
</whitelist>
</filter>
<testsuites>
<testsuite name="default">
<directory suffix=".php">./tests</directory>
<directory suffix=".php">./tests-external</directory>
<exclude>./tests/.snapshots</exclude>
<exclude>./tests/.tests</exclude>
<exclude>./tests/Fixtures/Inheritance</exclude>
</testsuite>
</testsuites>
<source>
<include>
<directory suffix=".php">./src</directory>
</include>
</source>
</phpunit>
+33
View File
@@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
use Rector\CodingStyle\Rector\ArrowFunction\ArrowFunctionDelegatingCallToFirstClassCallableRector;
use Rector\Config\RectorConfig;
use Rector\DeadCode\Rector\ClassMethod\RemoveDuplicatedReturnSelfDocblockRector;
use Rector\DeadCode\Rector\ClassMethod\RemoveParentDelegatingConstructorRector;
use Rector\DeadCode\Rector\ClassMethod\RemoveUselessUnionReturnDocblockRector;
use Rector\TypeDeclaration\Rector\ClassMethod\NarrowObjectReturnTypeRector;
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnNeverTypeRector;
return RectorConfig::configure()
->withPaths([
__DIR__.'/src',
])
->withSkip([
__DIR__.'/src/Plugins/Parallel/Paratest/WrapperRunner.php',
ReturnNeverTypeRector::class,
ArrowFunctionDelegatingCallToFirstClassCallableRector::class,
NarrowObjectReturnTypeRector::class,
RemoveParentDelegatingConstructorRector::class,
RemoveDuplicatedReturnSelfDocblockRector::class,
RemoveUselessUnionReturnDocblockRector::class,
])
->withPreparedSets(
deadCode: true,
codeQuality: true,
typeDeclarations: true,
privatization: true,
earlyReturn: true,
)
->withPhpSets();
-16
View File
@@ -1,16 +0,0 @@
# rector.yaml
parameters:
sets:
- 'action-injection-to-constructor-injection'
- 'array-str-functions-to-static-call'
- 'celebrity'
- 'doctrine'
- 'phpstan'
- 'phpunit-code-quality'
- 'solid'
- 'early-return'
- 'doctrine-code-quality'
- 'code-quality'
- 'php71'
- 'php72'
- 'php73'
+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Default">
<directory>tests/</directory>
</testsuite>
</testsuites>
<source>
<include>
<directory>app</directory>
<directory>src</directory>
</include>
</source>
<php>
<env name="APP_ENV" value="testing"/>
<env name="APP_MAINTENANCE_DRIVER" value="file"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_STORE" value="array"/>
<!-- <env name="DB_CONNECTION" value="sqlite"/> -->
<!-- <env name="DB_DATABASE" value=":memory:"/> -->
<env name="MAIL_MAILER" value="array"/>
<env name="PULSE_ENABLED" value="false"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>
+19
View File
@@ -0,0 +1,19 @@
<?php
/** @var string $type */
/** @var string $content */
[$bgBadgeColor, $bgBadgeText] = match ($type) {
'INFO' => ['blue', 'INFO'],
'ERROR' => ['red', 'ERROR'],
'WARN' => ['yellow', 'WARN'],
'SUCCESS' => ['green', 'SUCCESS'],
};
?>
<div class="my-1">
<span class="ml-2 px-1 bg-<?php echo $bgBadgeColor ?> font-bold"><?php echo htmlspecialchars($bgBadgeText) ?></span>
<span class="ml-1">
<?php echo htmlspecialchars($content) ?>
</span>
</div>
+1
View File
@@ -0,0 +1 @@
<div></div>
@@ -0,0 +1,12 @@
<div class="flex mx-2 max-w-150">
<span>
<?php echo htmlspecialchars($left) ?>
</span>
<span class="flex-1 content-repeat-[.] text-gray ml-1"></span>
<?php if ($right !== '') { ?>
<span class="ml-1 text-gray">
<?php echo htmlspecialchars($right) ?>
</span>
<?php } ?>
</div>
@@ -0,0 +1,22 @@
<div class="mx-2 mb-1">
<p>
<span>Using the <span class="text-yellow font-bold">visit()</span> function requires the Pest Plugin Browser to be installed.</span>
<span class="ml-1 text-yellow font-bold">Run:</span>
</p>
<div>
<span class="text-gray mr-1">- </span>
<span>composer require pestphp/pest-plugin-browser:^5.0 --dev</span>
</div>
<div>
<span class="text-gray mr-1">- </span>
<span>npm install playwright@latest</span>
</div>
<div>
<span class="text-gray mr-1">- </span>
<span>npx playwright install</span>
</div>
</div>
+4
View File
@@ -0,0 +1,4 @@
<div class="mx-2">
<span class="text-yellow font-bold">USAGE:</span><span class="ml-1">pest</span><span class="ml-1 text-gray"><?php echo htmlspecialchars('<file>') ?> [options]</span>
</div>
+3
View File
@@ -0,0 +1,3 @@
<div class="my-1 mx-2">
<span>Pest Testing Framework</span><span class="ml-1 text-blue font-bold"><?php echo htmlspecialchars($version) ?></span><span>.</span>
</div>
-36
View File
@@ -1,36 +0,0 @@
<?php
declare(strict_types=1);
$globalsFilePath = implode(DIRECTORY_SEPARATOR, [
dirname(__DIR__),
'vendor',
'phpunit',
'phpunit',
'src',
'Framework',
'Assert',
'Functions.php',
]);
$compiledFilePath = implode(DIRECTORY_SEPARATOR, [dirname(__DIR__), 'compiled', 'globals.php']);
@unlink($compiledFilePath);
$replace = function ($contents, $string, $by) {
return str_replace($string, $by, $contents);
};
$remove = function ($contents, $string) {
return str_replace($string, '', $contents);
};
$contents = file_get_contents($globalsFilePath);
$contents = $replace($contents, 'namespace PHPUnit\Framework;', 'use PHPUnit\Framework\Assert;');
$contents = $remove($contents, 'use ArrayAccess;');
$contents = $remove($contents, 'use Countable;');
$contents = $remove($contents, 'use DOMDocument;');
$contents = $remove($contents, 'use DOMElement;');
$contents = $remove($contents, 'use Throwable;');
file_put_contents(implode(DIRECTORY_SEPARATOR, [dirname(__DIR__), 'compiled', 'globals.php']), $contents);
-29
View File
@@ -1,29 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest\Actions;
use NunoMaduro\Collision\Adapters\Phpunit\Printer;
/**
* @internal
*/
final class AddsDefaults
{
/**
* Adds default arguments to the given `arguments` array.
*
* @param array<string, mixed> $arguments
*
* @return array<string, mixed>
*/
public static function to(array $arguments): array
{
if (!array_key_exists('printer', $arguments)) {
$arguments['printer'] = new Printer(null, $arguments['verbose'] ?? false, $arguments['colors'] ?? 'always');
}
return $arguments;
}
}
-66
View File
@@ -1,66 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest\Actions;
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\TestSuite;
use PHPUnit\Framework\WarningTestCase;
/**
* @internal
*/
final class AddsTests
{
/**
* Adds tests to the given test suite.
*
* @param TestSuite<\PHPUnit\Framework\TestCase> $testSuite
*/
public static function to(TestSuite $testSuite, \Pest\TestSuite $pestTestSuite): void
{
self::removeTestClosureWarnings($testSuite);
// @todo refactor this...
$testSuites = [];
$pestTestSuite->tests->build($pestTestSuite, function (TestCase $testCase) use (&$testSuites): void {
$testCaseClass = get_class($testCase);
if (!array_key_exists($testCaseClass, $testSuites)) {
$testSuites[$testCaseClass] = [];
}
$testSuites[$testCaseClass][] = $testCase;
});
foreach ($testSuites as $testCaseName => $testCases) {
$testTestSuite = new TestSuite($testCaseName);
$testTestSuite->setTests([]);
foreach ($testCases as $testCase) {
$testTestSuite->addTest($testCase, $testCase->getGroups());
}
$testSuite->addTestSuite($testTestSuite);
}
}
/**
* @param TestSuite<\PHPUnit\Framework\TestCase> $testSuite
*/
private static function removeTestClosureWarnings(TestSuite $testSuite): void
{
$tests = $testSuite->tests();
foreach ($tests as $key => $test) {
if ($test instanceof TestSuite) {
self::removeTestClosureWarnings($test);
}
if ($test instanceof WarningTestCase) {
unset($tests[$key]);
}
}
$testSuite->setTests($tests);
}
}
-62
View File
@@ -1,62 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest\Actions;
use Pest\Support\Str;
use PHPUnit\TextUI\Configuration\Configuration;
use PHPUnit\Util\FileLoader;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
/**
* @internal
*/
final class LoadStructure
{
/**
* The Pest convention.
*
* @var array<int, string>
*/
private const STRUCTURE = [
'Datasets.php',
'Helpers.php',
'Pest.php',
'Datasets',
];
/**
* Validates the configuration in the given `configuration`.
*/
public static function in(string $rootPath): void
{
$testsPath = $rootPath . DIRECTORY_SEPARATOR . 'tests';
$load = function ($filename): bool {
return file_exists($filename) && (bool) FileLoader::checkAndLoad($filename);
};
foreach (self::STRUCTURE as $filename) {
$filename = sprintf('%s%s%s', $testsPath, DIRECTORY_SEPARATOR, $filename);
if (!file_exists($filename)) {
continue;
}
if (is_dir($filename)) {
$directory = new RecursiveDirectoryIterator($filename);
$iterator = new RecursiveIteratorIterator($directory);
foreach ($iterator as $file) {
$filename = $file->__toString();
if (Str::endsWith($filename, '.php') && file_exists($filename)) {
require_once $filename;
}
}
} else {
$load($filename);
}
}
}
}
-41
View File
@@ -1,41 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest\Actions;
use Pest\Exceptions\AttributeNotSupportedYet;
use Pest\Exceptions\FileOrFolderNotFound;
use PHPUnit\TextUI\Configuration\Configuration;
use PHPUnit\TextUI\Configuration\Registry;
/**
* @internal
*/
final class ValidatesConfiguration
{
/**
* @var string
*/
private const CONFIGURATION_KEY = 'configuration';
/**
* Validates the configuration in the given `configuration`.
*
* @param array<string, mixed> $arguments
*/
public static function in($arguments): void
{
if (!array_key_exists(self::CONFIGURATION_KEY, $arguments) || !file_exists($arguments[self::CONFIGURATION_KEY])) {
throw new FileOrFolderNotFound('phpunit.xml');
}
$configuration = Registry::getInstance()
->get($arguments[self::CONFIGURATION_KEY])
->phpunit();
if ($configuration->processIsolation()) {
throw new AttributeNotSupportedYet('processIsolation', 'true');
}
}
}
-41
View File
@@ -1,41 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest\Actions;
use Pest\Exceptions\FileOrFolderNotFound;
use Pest\TestSuite;
/**
* @internal
*/
final class ValidatesEnvironment
{
/**
* The need files on the root path.
*
* @var array<int, string>
*/
private const NEEDED_FILES = [
'composer.json',
];
/**
* Validates the environment.
*/
public static function in(TestSuite $testSuite): void
{
$rootPath = $testSuite->rootPath;
$exists = function ($neededFile) use ($rootPath): bool {
return file_exists(sprintf('%s%s%s', $rootPath, DIRECTORY_SEPARATOR, $neededFile));
};
foreach (self::NEEDED_FILES as $neededFile) {
if (!$exists($neededFile)) {
throw new FileOrFolderNotFound($neededFile);
}
}
}
}
+74
View File
@@ -0,0 +1,74 @@
<?php
declare(strict_types=1);
namespace Pest\ArchPresets;
use Pest\Arch\Contracts\ArchExpectation;
use Pest\Expectation;
/**
* @internal
*/
abstract class AbstractPreset // @pest-arch-ignore-line
{
/**
* The expectations.
*
* @var array<int, Expectation<mixed>|ArchExpectation>
*/
protected array $expectations = [];
/**
* Creates a new preset instance.
*
* @param array<int, string> $userNamespaces
*/
public function __construct(
private readonly array $userNamespaces,
) {
//
}
/**
* Executes the arch preset.
*
* @internal
*/
abstract public function execute(): void;
/**
* Ignores the given "targets" or "dependencies".
*
* @param array<int, string>|string $targetsOrDependencies
*/
final public function ignoring(array|string $targetsOrDependencies): void
{
$this->expectations = array_map(
fn (ArchExpectation|Expectation $expectation): Expectation|ArchExpectation => $expectation instanceof ArchExpectation ? $expectation->ignoring($targetsOrDependencies) : $expectation,
$this->expectations,
);
}
/**
* Runs the given callback for each namespace.
*
* @param callable(Expectation<string>): ArchExpectation ...$callbacks
*/
final public function eachUserNamespace(callable ...$callbacks): void
{
foreach ($this->userNamespaces as $namespace) {
foreach ($callbacks as $callback) {
$this->expectations[] = $callback(expect($namespace));
}
}
}
/**
* Flushes the expectations.
*/
final public function flush(): void
{
$this->expectations = [];
}
}
+45
View File
@@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
namespace Pest\ArchPresets;
use Closure;
use Pest\Arch\Contracts\ArchExpectation;
use Pest\Expectation;
/**
* @internal
*/
final class Custom extends AbstractPreset
{
/**
* Creates a new preset instance.
*
* @param array<int, string> $userNamespaces
* @param Closure(array<int, string>): array<Expectation<mixed>|ArchExpectation> $execute
*/
public function __construct(
private readonly array $userNamespaces,
private readonly string $name,
private readonly Closure $execute,
) {
parent::__construct($userNamespaces);
}
/**
* Returns the name of the preset.
*/
public function name(): string
{
return $this->name;
}
/**
* Executes the arch preset.
*/
public function execute(): void
{
$this->expectations = ($this->execute)($this->userNamespaces);
}
}
+180
View File
@@ -0,0 +1,180 @@
<?php
declare(strict_types=1);
namespace Pest\ArchPresets;
use Throwable;
/**
* @internal
*/
final class Laravel extends AbstractPreset
{
/**
* Executes the arch preset.
*/
public function execute(): void
{
$this->expectations[] = expect('App\Traits')
->toBeTraits();
$this->expectations[] = expect('App\Concerns')
->toBeTraits();
$this->expectations[] = expect('App')
->not->toBeEnums()
->ignoring('App\Enums');
$this->expectations[] = expect('App\Enums')
->toBeEnums()
->ignoring('App\Enums\Concerns');
$this->expectations[] = expect('App\Features')
->toBeClasses()
->ignoring('App\Features\Concerns');
$this->expectations[] = expect('App\Features')
->toHaveMethod('resolve')
->ignoring('App\Features\Concerns');
$this->expectations[] = expect('App\Exceptions')
->classes()
->toImplement('Throwable')
->ignoring('App\Exceptions\Handler');
$this->expectations[] = expect('App')
->not->toImplement(Throwable::class)
->ignoring('App\Exceptions');
$this->expectations[] = expect('App\Http\Middleware')
->classes()
->toHaveMethod('handle');
$this->expectations[] = expect('App\Models')
->classes()
->toExtend('Illuminate\Database\Eloquent\Model')
->ignoring('App\Models\Scopes');
$this->expectations[] = expect('App\Models')
->classes()
->not->toHaveSuffix('Model');
$this->expectations[] = expect('App')
->not->toExtend('Illuminate\Database\Eloquent\Model')
->ignoring('App\Models');
$this->expectations[] = expect('App\Http\Requests')
->classes()
->toHaveSuffix('Request');
$this->expectations[] = expect('App\Http\Requests')
->classes()
->toExtend('Illuminate\Foundation\Http\FormRequest');
$this->expectations[] = expect('App\Http\Requests')
->toHaveMethod('rules');
$this->expectations[] = expect('App')
->not->toExtend('Illuminate\Foundation\Http\FormRequest')
->ignoring('App\Http\Requests');
$this->expectations[] = expect('App\Console\Commands')
->classes()
->toHaveSuffix('Command');
$this->expectations[] = expect('App\Console\Commands')
->classes()
->toExtend('Illuminate\Console\Command');
$this->expectations[] = expect('App\Console\Commands')
->classes()
->toHaveMethod('handle');
$this->expectations[] = expect('App')
->not->toExtend('Illuminate\Console\Command')
->ignoring('App\Console\Commands');
$this->expectations[] = expect('App\Mail')
->classes()
->toExtend('Illuminate\Mail\Mailable');
$this->expectations[] = expect('App\Mail')
->classes()
->toImplement('Illuminate\Contracts\Queue\ShouldQueue');
$this->expectations[] = expect('App')
->not->toExtend('Illuminate\Mail\Mailable')
->ignoring('App\Mail');
$this->expectations[] = expect('App\Jobs')
->classes()
->toImplement('Illuminate\Contracts\Queue\ShouldQueue');
$this->expectations[] = expect('App\Jobs')
->classes()
->toHaveMethod('handle');
$this->expectations[] = expect('App\Listeners')
->toHaveMethod('handle');
$this->expectations[] = expect('App\Notifications')
->classes()
->toExtend('Illuminate\Notifications\Notification');
$this->expectations[] = expect('App')
->not->toExtend('Illuminate\Notifications\Notification')
->ignoring('App\Notifications');
$this->expectations[] = expect('App\Providers')
->toHaveSuffix('ServiceProvider');
$this->expectations[] = expect('App\Providers')
->classes()
->toExtend('Illuminate\Support\ServiceProvider');
$this->expectations[] = expect('App\Providers')
->not->toBeUsed();
$this->expectations[] = expect('App')
->not->toExtend('Illuminate\Support\ServiceProvider')
->ignoring('App\Providers');
$this->expectations[] = expect('App')
->not->toHaveSuffix('ServiceProvider')
->ignoring('App\Providers');
$this->expectations[] = expect('App')
->not->toHaveSuffix('Controller')
->ignoring('App\Http\Controllers');
$this->expectations[] = expect('App\Http\Controllers')
->classes()
->toHaveSuffix('Controller');
$this->expectations[] = expect('App\Http')
->toOnlyBeUsedIn(['App\Http', 'App\Providers']);
$this->expectations[] = expect('App\Http\Controllers')
->not->toHavePublicMethodsBesides(['__construct', '__invoke', 'index', 'show', 'create', 'store', 'edit', 'update', 'destroy', 'middleware']);
$this->expectations[] = expect([
'dd',
'ddd',
'dump',
'env',
'exit',
'ray',
])->not->toBeUsed();
$this->expectations[] = expect('App\Policies')
->classes()
->toHaveSuffix('Policy');
$this->expectations[] = expect('App\Attributes')
->classes()
->toImplement('Illuminate\Contracts\Container\ContextualAttribute')
->toHaveAttribute('Attribute')
->toHaveMethod('resolve');
}
}
+93
View File
@@ -0,0 +1,93 @@
<?php
declare(strict_types=1);
namespace Pest\ArchPresets;
/**
* @internal
*/
final class Php extends AbstractPreset
{
/**
* Executes the arch preset.
*/
public function execute(): void
{
$this->expectations[] = expect([
'debug_zval_dump',
'debug_backtrace',
'debug_print_backtrace',
'dump',
'ray',
'ds',
'die',
'goto',
'global',
'var_dump',
'phpinfo',
'echo',
'ereg',
'eregi',
'mysql_connect',
'mysql_pconnect',
'mysql_query',
'mysql_select_db',
'mysql_fetch_array',
'mysql_fetch_assoc',
'mysql_fetch_object',
'mysql_fetch_row',
'mysql_num_rows',
'mysql_affected_rows',
'mysql_free_result',
'mysql_insert_id',
'mysql_error',
'mysql_real_escape_string',
'print',
'print_r',
'var_export',
'xdebug_break',
'xdebug_call_class',
'xdebug_call_file',
'xdebug_call_int',
'xdebug_call_line',
'xdebug_code_coverage_started',
'xdebug_connect_to_client',
'xdebug_debug_zval',
'xdebug_debug_zval_stdout',
'xdebug_dump_superglobals',
'xdebug_get_code_coverage',
'xdebug_get_collected_errors',
'xdebug_get_function_count',
'xdebug_get_function_stack',
'xdebug_get_gc_run_count',
'xdebug_get_gc_total_collected_roots',
'xdebug_get_gcstats_filename',
'xdebug_get_headers',
'xdebug_get_monitored_functions',
'xdebug_get_profiler_filename',
'xdebug_get_stack_depth',
'xdebug_get_tracefile_name',
'xdebug_info',
'xdebug_is_debugger_active',
'xdebug_memory_usage',
'xdebug_notify',
'xdebug_peak_memory_usage',
'xdebug_print_function_stack',
'xdebug_set_filter',
'xdebug_start_code_coverage',
'xdebug_start_error_collection',
'xdebug_start_function_monitor',
'xdebug_start_gcstats',
'xdebug_start_trace',
'xdebug_stop_code_coverage',
'xdebug_stop_error_collection',
'xdebug_stop_function_monitor',
'xdebug_stop_gcstats',
'xdebug_stop_trace',
'xdebug_time_index',
'xdebug_var_dump',
'trap',
])->not->toBeUsed();
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace Pest\ArchPresets;
use Pest\Arch\Contracts\ArchExpectation;
use Pest\Expectation;
/**
* @internal
*/
final class Relaxed extends AbstractPreset
{
/**
* Executes the arch preset.
*/
public function execute(): void
{
$this->eachUserNamespace(
fn (Expectation $namespace): ArchExpectation => $namespace->not->toUseStrictTypes(),
fn (Expectation $namespace): ArchExpectation => $namespace->classes()->not->toBeFinal(),
fn (Expectation $namespace): ArchExpectation => $namespace->classes()->not->toHavePrivateMethods(),
);
}
}
+40
View File
@@ -0,0 +1,40 @@
<?php
declare(strict_types=1);
namespace Pest\ArchPresets;
/**
* @internal
*/
final class Security extends AbstractPreset
{
/**
* Executes the arch preset.
*/
public function execute(): void
{
$this->expectations[] = expect([
'md5',
'sha1',
'uniqid',
'rand',
'mt_rand',
'tempnam',
'str_shuffle',
'shuffle',
'array_rand',
'eval',
'exec',
'shell_exec',
'system',
'passthru',
'create_function',
'unserialize',
'extract',
'mb_parse_str',
'dl',
'assert',
])->not->toBeUsed();
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace Pest\ArchPresets;
use Pest\Arch\Contracts\ArchExpectation;
use Pest\Expectation;
/**
* @internal
*/
final class Strict extends AbstractPreset
{
/**
* Executes the arch preset.
*/
public function execute(): void
{
$this->eachUserNamespace(
fn (Expectation $namespace): ArchExpectation => $namespace->classes()->not->toHaveProtectedMethods(),
fn (Expectation $namespace): ArchExpectation => $namespace->classes()->not->toBeAbstract(),
fn (Expectation $namespace): ArchExpectation => $namespace->toUseStrictTypes(),
fn (Expectation $namespace): ArchExpectation => $namespace->toUseStrictEquality(),
fn (Expectation $namespace): ArchExpectation => $namespace->classes()->toBeFinal(),
);
$this->expectations[] = expect([
'sleep',
'usleep',
])->not->toBeUsed();
}
}
+39
View File
@@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace Pest\Bootstrappers;
use Pest\Contracts\Bootstrapper;
use PHPUnit\Util\ExcludeList;
/**
* @internal
*/
final class BootExcludeList implements Bootstrapper
{
/**
* The directories to exclude.
*
* @var array<int, non-empty-string>
*/
private const array EXCLUDE_LIST = [
'bin',
'overrides',
'resources',
'src',
'stubs',
];
/**
* Boots the "exclude list" for PHPUnit to ignore Pest files.
*/
public function boot(): void
{
$baseDirectory = dirname(__DIR__, 2);
foreach (self::EXCLUDE_LIST as $directory) {
ExcludeList::addDirectory($baseDirectory.DIRECTORY_SEPARATOR.$directory);
}
}
}
+96
View File
@@ -0,0 +1,96 @@
<?php
declare(strict_types=1);
namespace Pest\Bootstrappers;
use Pest\Contracts\Bootstrapper;
use Pest\Exceptions\FatalException;
use Pest\Support\DatasetInfo;
use Pest\Support\Str;
use Pest\TestSuite;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use SebastianBergmann\FileIterator\Facade as PhpUnitFileIterator;
use function Pest\testDirectory;
/**
* @internal
*/
final class BootFiles implements Bootstrapper
{
/**
* The structure of the tests directory.
*
* @var array<int, string>
*/
private const array STRUCTURE = [
'Expectations',
'Expectations.php',
'Helpers',
'Helpers.php',
'Pest.php',
];
/**
* Boots the structure of the tests directory.
*/
public function boot(): void
{
$rootPath = TestSuite::getInstance()->rootPath;
$testsPath = $rootPath.DIRECTORY_SEPARATOR.testDirectory();
if (! is_dir($testsPath)) {
throw new FatalException(sprintf('The test directory [%s] does not exist.', $testsPath));
}
foreach (self::STRUCTURE as $filename) {
$filename = sprintf('%s%s%s', $testsPath, DIRECTORY_SEPARATOR, $filename);
if (! file_exists($filename)) {
continue;
}
if (is_dir($filename)) {
$directory = new RecursiveDirectoryIterator($filename);
$iterator = new RecursiveIteratorIterator($directory);
/** @var \DirectoryIterator $file */
foreach ($iterator as $file) {
$this->load($file->__toString());
}
} else {
$this->load($filename);
}
}
$this->bootDatasets($testsPath);
}
/**
* Loads, if possible, the given file.
*/
private function load(string $filename): void
{
if (! Str::endsWith($filename, '.php')) {
return;
}
if (! file_exists($filename)) {
return;
}
include_once $filename;
}
private function bootDatasets(string $testsPath): void
{
assert($testsPath !== '');
$files = (new PhpUnitFileIterator)->getFilesAsArray($testsPath, '.php');
foreach ($files as $file) {
if (DatasetInfo::isADatasetsFile($file) || DatasetInfo::isInsideADatasetsDirectory($file)) {
$this->load($file);
}
}
}
}
+37
View File
@@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
namespace Pest\Bootstrappers;
use Pest\Contracts\Bootstrapper;
use Pest\KernelDump;
use Pest\Support\Container;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @internal
*/
final readonly class BootKernelDump implements Bootstrapper
{
/**
* Creates a new Boot Kernel Dump instance.
*/
public function __construct(
private OutputInterface $output,
) {
// ...
}
/**
* Boots the kernel dump.
*/
public function boot(): void
{
Container::getInstance()->add(KernelDump::class, $kernelDump = new KernelDump(
$this->output,
));
$kernelDump->enable();
}
}
+47
View File
@@ -0,0 +1,47 @@
<?php
declare(strict_types=1);
namespace Pest\Bootstrappers;
use Pest\Contracts\Bootstrapper;
use Pest\Exceptions\ShouldNotHappen;
/**
* @internal
*/
final class BootOverrides implements Bootstrapper
{
/**
* The list of files to be overridden.
*
* @var array<int, string>
*/
public const array FILES = [
'Runner/Filter/NameFilterIterator.php',
'Runner/ResultCache/DefaultResultCache.php',
'Runner/TestSuiteLoader.php',
'Runner/TestSuiteSorter.php',
'TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php',
'TextUI/Output/Default/ProgressPrinter/Subscriber/TestSkippedSubscriber.php',
'TextUI/TestSuiteFilterProcessor.php',
'Event/Value/ThrowableBuilder.php',
'Logging/JUnit/JunitXmlLogger.php',
];
/**
* Boots the list of files to be overridden.
*/
public function boot(): void
{
foreach (self::FILES as $file) {
$file = __DIR__."/../../overrides/$file";
if (! file_exists($file)) {
throw ShouldNotHappen::fromMessage(sprintf('File [%s] does not exist.', $file));
}
require_once $file;
}
}
}
@@ -0,0 +1,19 @@
<?php
declare(strict_types=1);
namespace Pest\Bootstrappers;
use Pest\Contracts\Bootstrapper;
use PHPUnit\TextUI\Configuration\Builder;
/**
* @internal
*/
final class BootPhpUnitConfiguration implements Bootstrapper
{
public function boot(): void
{
(new Builder)->build(['pest']);
}
}
+61
View File
@@ -0,0 +1,61 @@
<?php
declare(strict_types=1);
namespace Pest\Bootstrappers;
use Pest\Contracts\Bootstrapper;
use Pest\Subscribers;
use Pest\Support\Container;
use PHPUnit\Event;
use PHPUnit\Event\Subscriber;
/**
* @internal
*/
final readonly class BootSubscribers implements Bootstrapper
{
/**
* The list of Subscribers.
*
* @var array<int, class-string<Subscriber>>
*/
private const array SUBSCRIBERS = [
Subscribers\EnsureConfigurationIsAvailable::class,
Subscribers\EnsureIgnorableTestCasesAreIgnored::class,
Subscribers\EnsureKernelDumpIsFlushed::class,
Subscribers\EnsureTeamCityEnabled::class,
Subscribers\EnsureTiaIsRunningPestTestsOnly::class,
Subscribers\EnsureTiaStarts::class,
Subscribers\EnsureTiaEnds::class,
Subscribers\EnsureTiaResultsAreCollected::class,
Subscribers\EnsureTiaResultIsRecordedOnPassed::class,
Subscribers\EnsureTiaResultIsRecordedOnFailed::class,
Subscribers\EnsureTiaResultIsRecordedOnErrored::class,
Subscribers\EnsureTiaResultIsRecordedOnSkipped::class,
Subscribers\EnsureTiaResultIsRecordedOnIncomplete::class,
Subscribers\EnsureTiaResultIsRecordedOnRisky::class,
Subscribers\EnsureTiaAssertionsAreRecordedOnFinished::class,
];
/**
* Creates a new instance of the Boot Subscribers.
*/
public function __construct(
private Container $container,
) {}
/**
* Boots the list of Subscribers.
*/
public function boot(): void
{
foreach (self::SUBSCRIBERS as $subscriber) {
$instance = $this->container->get($subscriber);
assert($instance instanceof Subscriber);
Event\Facade::instance()->registerSubscriber($instance);
}
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
namespace Pest\Bootstrappers;
use Pest\Contracts\Bootstrapper;
use Pest\Support\View;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @internal
*/
final readonly class BootView implements Bootstrapper
{
/**
* Creates a new instance of the Boot View.
*/
public function __construct(
private OutputInterface $output
) {
// ..
}
/**
* Boots the view renderer.
*/
public function boot(): void
{
View::renderUsing($this->output);
}
}
+100
View File
@@ -0,0 +1,100 @@
<?php
declare(strict_types=1);
namespace Pest\Collision;
use NunoMaduro\Collision\Adapters\Phpunit\TestResult;
use Pest\Configuration\Project;
use Symfony\Component\Console\Output\OutputInterface;
use function Termwind\render;
use function Termwind\renderUsing;
/**
* @internal
*/
final class Events
{
/**
* Sets the output.
*/
private static ?OutputInterface $output = null;
/**
* Sets the output.
*/
public static function setOutput(OutputInterface $output): void
{
self::$output = $output;
}
/**
* Fires before the test method description is printed.
*/
public static function beforeTestMethodDescription(TestResult $result, string $description): string
{
if (($context = $result->context) === []) {
return $description;
}
renderUsing(self::$output);
[
'assignees' => $assignees,
'issues' => $issues,
'prs' => $prs,
] = $context;
if (($link = Project::getInstance()->issues) !== '') {
$issuesDescription = array_map(fn (int $issue): string => sprintf('<a href="%s">#%s</a>', sprintf($link, $issue), $issue), $issues);
}
if (($link = Project::getInstance()->prs) !== '') {
$prsDescription = array_map(fn (int $pr): string => sprintf('<a href="%s">#%s</a>', sprintf($link, $pr), $pr), $prs);
}
if (($link = Project::getInstance()->assignees) !== '' && count($assignees) > 0) {
$assigneesDescription = array_map(fn (string $assignee): string => sprintf(
'<a href="%s">@%s</a>',
sprintf($link, $assignee),
$assignee,
), $assignees);
}
if (count($assignees) > 0 || count($issues) > 0 || count($prs) > 0) {
$description .= ' '.implode(', ', array_merge(
$issuesDescription ?? [],
$prsDescription ?? [],
isset($assigneesDescription) ? ['['.implode(', ', $assigneesDescription).']'] : [],
));
}
return $description;
}
/**
* Fires after the test method description is printed.
*/
public static function afterTestMethodDescription(TestResult $result): void
{
if (($context = $result->context) === []) {
return;
}
renderUsing(self::$output);
[
'notes' => $notes,
] = $context;
foreach ($notes as $note) {
render(sprintf(<<<'HTML'
<div class="ml-2">
<span class="text-gray"> // %s</span>
</div>
HTML, $note,
));
}
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace Pest\Concerns;
use Pest\Expectation;
/**
* @internal
*/
trait Expectable
{
/**
* @template TValue
*
* Creates a new Expectation.
*
* @param TValue $value
* @return Expectation<TValue>
*/
public function expect(mixed $value): Expectation
{
return new Expectation($value);
}
}
+40
View File
@@ -0,0 +1,40 @@
<?php
declare(strict_types=1);
namespace Pest\Concerns;
use Closure;
/**
* @internal
*
* @template T of object
*/
trait Extendable
{
/**
* The list of extends.
*
* @var array<string, Closure>
*/
private static array $extends = [];
/**
* Register a new extend.
*
* @param-closure-this T $extend
*/
public function extend(string $name, Closure $extend): void
{
static::$extends[$name] = $extend;
}
/**
* Checks if given extend name is registered.
*/
public static function hasExtend(string $name): bool
{
return array_key_exists($name, static::$extends);
}
}
+45
View File
@@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
namespace Pest\Concerns\Logging;
/**
* @internal
*/
trait WritesToConsole
{
/**
* Writes the given success message to the console.
*/
private function writeSuccess(string $message): void
{
$this->writePestTestOutput($message, 'fg-green, bold', '✓');
}
/**
* Writes the given error message to the console.
*/
private function writeError(string $message): void
{
$this->writePestTestOutput($message, 'fg-red, bold', '');
}
/**
* Writes the given warning message to the console.
*/
private function writeWarning(string $message): void
{
$this->writePestTestOutput($message, 'fg-yellow, bold', '-');
}
/**
* Writes the give message to the console.
*/
private function writePestTestOutput(string $message, string $color, string $symbol): void
{
$this->writeWithColor($color, "$symbol ", false);
$this->write($message);
$this->writeNewLine();
}
}
+71
View File
@@ -0,0 +1,71 @@
<?php
declare(strict_types=1);
namespace Pest\Concerns;
use Closure;
/**
* @internal
*/
trait Pipeable
{
/**
* The list of pipes.
*
* @var array<string, array<Closure(Closure, mixed ...$arguments): void>>
*/
private static array $pipes = [];
/**
* The list of interceptors.
*
* @var array<string, array<Closure(Closure, mixed ...$arguments): void>>
*/
private static array $interceptors = [];
/**
* Register a pipe to be applied before an expectation is checked.
*/
public function pipe(string $name, Closure $pipe): void
{
self::$pipes[$name][] = $pipe;
}
/**
* Register an interceptor that should replace an existing expectation.
*
* @param string|Closure(mixed $value, mixed ...$arguments):bool $filter
*/
public function intercept(string $name, string|Closure $filter, Closure $handler): void
{
if (is_string($filter)) {
$filter = fn ($value): bool => $value instanceof $filter;
}
self::$interceptors[$name][] = $handler;
$this->pipe($name, function ($next, ...$arguments) use ($handler, $filter): void {
/* @phpstan-ignore-next-line */
if ($filter($this->value, ...$arguments)) {
// @phpstan-ignore-next-line
$handler->bindTo($this, $this::class)(...$arguments);
return;
}
$next();
});
}
/**
* Get the list of pipes by the given name.
*
* @return array<int, Closure>
*/
private function pipes(string $name, object $context, string $scope): array
{
return array_map(fn (Closure $pipe): Closure => $pipe->bindTo($context, $scope), self::$pipes[$name] ?? []);
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
namespace Pest\Concerns;
/**
* @internal
*/
trait Retrievable
{
/**
* @template TRetrievableValue
*
* Safely retrieve the value at the given key from an object or array.
* @template TRetrievableValue
*
* @param array<string, TRetrievableValue>|object $value
* @param TRetrievableValue|null $default
* @return TRetrievableValue|null
*/
private function retrieve(string $key, mixed $value, mixed $default = null): mixed
{
if (is_array($value)) {
return $value[$key] ?? $default;
}
// @phpstan-ignore-next-line
return $value->$key ?? $default;
}
}
-158
View File
@@ -1,158 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest\Concerns;
use Closure;
use Pest\Support\ExceptionTrace;
use Pest\TestSuite;
use PHPUnit\Util\Test;
/**
* To avoid inheritance conflicts, all the fields related
* to Pest only will be prefixed by double underscore.
*
* @internal
*/
trait TestCase
{
/**
* The test case description. Contains the first
* argument of global functions like `it` and `test`.
*
* @var string
*/
private $__description;
/**
* Holds the test closure function.
*
* @var Closure
*/
private $__test;
/**
* Creates a new instance of the test case.
*/
public function __construct(Closure $test, string $description, array $data)
{
$this->__test = $test;
$this->__description = $description;
parent::__construct('__test', $data);
}
/**
* Adds the groups to the current test case.
*/
public function addGroups(array $groups): void
{
$groups = array_unique(array_merge($this->getGroups(), $groups));
$this->setGroups($groups);
}
/**
* Returns the test case name. Note that, in Pest
* we ignore withDataset argument as the description
* already contains the dataset description.
*/
public function getName(bool $withDataSet = true): string
{
return $this->__description;
}
/**
* This method is called before the first test of this test class is run.
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
$beforeAll = TestSuite::getInstance()->beforeAll->get(self::$__filename);
call_user_func(Closure::bind($beforeAll, null, self::class));
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
$afterAll = TestSuite::getInstance()->afterAll->get(self::$__filename);
call_user_func(Closure::bind($afterAll, null, self::class));
parent::tearDownAfterClass();
}
/**
* Gets executed before the test.
*/
protected function setUp(): void
{
TestSuite::getInstance()->test = $this;
parent::setUp();
$beforeEach = TestSuite::getInstance()->beforeEach->get(self::$__filename);
$this->__callClosure($beforeEach, func_get_args());
}
/**
* Gets executed after the test.
*/
protected function tearDown(): void
{
$afterEach = TestSuite::getInstance()->afterEach->get(self::$__filename);
$this->__callClosure($afterEach, func_get_args());
parent::tearDown();
TestSuite::getInstance()->test = null;
}
/**
* Returns the test case as string.
*/
public function toString(): string
{
return \sprintf(
'%s::%s',
self::$__filename,
$this->__description
);
}
/**
* Runs the test.
*
* @return mixed
*
* @throws \Throwable
*/
public function __test()
{
return $this->__callClosure($this->__test, func_get_args());
}
/**
* @return mixed
*
* @throws \Throwable
*/
private function __callClosure(Closure $closure, array $arguments)
{
return ExceptionTrace::ensure(function () use ($closure, $arguments) {
return call_user_func_array(Closure::bind($closure, $this, get_class($this)), $arguments);
});
}
public function getPrintableTestCaseName(): string
{
return ltrim(self::class, 'P\\');
}
}
+656
View File
@@ -0,0 +1,656 @@
<?php
declare(strict_types=1);
namespace Pest\Concerns;
use Closure;
use Pest\Exceptions\DatasetArgumentsMismatch;
use Pest\Panic;
use Pest\Plugins\Tia;
use Pest\Plugins\Tia\Collectors;
use Pest\Plugins\Tia\Enums\ReplayType;
use Pest\Plugins\Tia\Recorder;
use Pest\Preset;
use Pest\Support\ChainableClosure;
use Pest\Support\Container;
use Pest\Support\ExceptionTrace;
use Pest\Support\Reflection;
use Pest\Support\Shell;
use Pest\TestSuite;
use PHPUnit\Framework\AssertionFailedError;
use PHPUnit\Framework\Attributes\PostCondition;
use PHPUnit\Framework\IncompleteTest;
use PHPUnit\Framework\SkippedTest;
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\TestCase\ExceptionExpectation;
use PHPUnit\Framework\TestCase\OutputBuffer;
use ReflectionException;
use ReflectionFunction;
use ReflectionParameter;
use Throwable;
/**
* @internal
*
* @mixin TestCase
*/
trait Testable
{
/**
* The test's description.
*/
private string $__description;
/**
* The test's latest description.
*/
private static string $__latestDescription;
/**
* The test's assignees.
*/
private static array $__latestAssignees = [];
/**
* The test's notes.
*/
private static array $__latestNotes = [];
/**
* The test's issues.
*
* @var array<int, int>
*/
private static array $__latestIssues = [];
/**
* The test's PRs.
*
* @var array<int, int>
*/
private static array $__latestPrs = [];
/**
* The test's describing, if any.
*
* @var array<int, string>
*/
public array $__describing = [];
/**
* Whether the test has ran or not.
*/
public bool $__ran = false;
/**
* The active replay mode for this test, set in `setUp()` and checked
* in `__runTest()` / `tearDown()` to skip the body and after-each.
*/
private ReplayType $__replay = ReplayType::None;
/**
* The cached assertion count to replay, captured when entering replay mode.
*/
private int $__replayAssertions = 0;
/**
* The test's test closure.
*/
private Closure $__test;
/**
* The test's before each closure.
*/
private ?Closure $__beforeEach = null;
/**
* The test's after each closure.
*/
private ?Closure $__afterEach = null;
/**
* The test's before all closure.
*/
private static ?Closure $__beforeAll = null;
/**
* The test's after all closure.
*/
private static ?Closure $__afterAll = null;
/**
* The list of snapshot changes, if any.
*/
private array $__snapshotChanges = [];
/**
* Resets the test case static properties.
*/
public static function flush(): void
{
self::$__beforeAll = null;
self::$__afterAll = null;
}
/**
* Adds a new "note" to the Test Case.
*/
public function note(array|string $note): self
{
$note = is_array($note) ? $note : [$note];
self::$__latestNotes = array_merge(self::$__latestNotes, $note);
return $this;
}
/**
* Adds a new "setUpBeforeClass" to the Test Case.
*/
public function __addBeforeAll(?Closure $hook): void
{
if (! $hook instanceof Closure) {
return;
}
self::$__beforeAll = (self::$__beforeAll instanceof Closure)
? ChainableClosure::boundStatically(self::$__beforeAll, $hook)
: $hook;
}
/**
* Adds a new "tearDownAfterClass" to the Test Case.
*/
public function __addAfterAll(?Closure $hook): void
{
if (! $hook instanceof Closure) {
return;
}
self::$__afterAll = (self::$__afterAll instanceof Closure)
? ChainableClosure::boundStatically(self::$__afterAll, $hook)
: $hook;
}
/**
* Adds a new "setUp" to the Test Case.
*/
public function __addBeforeEach(?Closure $hook): void
{
$this->__addHook('__beforeEach', $hook);
}
/**
* Adds a new "tearDown" to the Test Case.
*/
public function __addAfterEach(?Closure $hook): void
{
$this->__addHook('__afterEach', $hook);
}
/**
* Adds a new "hook" to the Test Case.
*/
private function __addHook(string $property, ?Closure $hook): void
{
if (! $hook instanceof Closure) {
return;
}
$this->{$property} = ($this->{$property} instanceof Closure)
? ChainableClosure::bound($this->{$property}, $hook)
: $hook;
}
/**
* This method is called before the first test of this Test Case is run.
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
$beforeAll = TestSuite::getInstance()->beforeAll->get(self::$__filename);
if (self::$__beforeAll instanceof Closure) {
$beforeAll = ChainableClosure::boundStatically(self::$__beforeAll, $beforeAll);
}
try {
call_user_func(Closure::bind($beforeAll, null, self::class));
} catch (Throwable $e) {
Panic::with($e);
}
}
/**
* This method is called after the last test of this Test Case is run.
*/
public static function tearDownAfterClass(): void
{
$afterAll = TestSuite::getInstance()->afterAll->get(self::$__filename);
if (self::$__afterAll instanceof Closure) {
$afterAll = ChainableClosure::boundStatically(self::$__afterAll, $afterAll);
}
call_user_func(Closure::bind($afterAll, null, self::class));
parent::tearDownAfterClass();
}
/**
* Gets executed before the Test Case.
*/
protected function setUp(...$arguments): void
{
TestSuite::getInstance()->test = $this;
$method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name());
$description = $method->description;
if ($this->dataName()) {
$description = str_contains((string) $description, ':dataset')
? str_replace(':dataset', str_replace('dataset ', '', $this->dataName()), (string) $description)
: $description.' with '.$this->dataName();
}
$description = htmlspecialchars(html_entity_decode((string) $description), ENT_NOQUOTES);
if ($method->repetitions > 1) {
$matches = [];
preg_match('/\((.*?)\)/', $description, $matches);
if (count($matches) > 1) {
if (str_contains($description, 'with '.$matches[0].' /')) {
$description = str_replace('with '.$matches[0].' /', '', $description);
} else {
$description = str_replace('with '.$matches[0], '', $description);
}
}
$description .= ' @ repetition '.($matches[1].' of '.$method->repetitions);
}
$this->__description = self::$__latestDescription = $description;
self::$__latestAssignees = $method->assignees;
self::$__latestNotes = $method->notes;
self::$__latestIssues = $method->issues;
self::$__latestPrs = $method->prs;
/** @var Tia $tia */
$tia = Container::getInstance()->get(Tia::class);
$status = $tia->getStatus(self::$__filename, $this::class.'::'.$this->name());
$replay = ReplayType::fromStatus($status);
if ($replay !== ReplayType::None) {
assert($status !== null);
match ($replay) {
ReplayType::Pass, ReplayType::Risky => $this->__beginReplay($replay, $tia),
ReplayType::Skipped => $this->markTestSkipped($status->message()),
ReplayType::Incomplete => $this->markTestIncomplete($status->message()),
ReplayType::Failure => throw new AssertionFailedError($status->message() ?: 'Cached failure'),
};
return;
}
$recorder = Container::getInstance()->get(Recorder::class);
assert($recorder instanceof Recorder);
if ($recorder->isActive()) {
$recorder->beginTest($this::class, $this->name(), self::$__filename);
}
parent::setUp();
Collectors::armAll($recorder);
$beforeEach = TestSuite::getInstance()->beforeEach->get(self::$__filename)[1];
if ($this->__beforeEach instanceof Closure) {
$beforeEach = ChainableClosure::bound($this->__beforeEach, $beforeEach);
}
$this->__callClosure($beforeEach, $arguments);
}
private function __beginReplay(ReplayType $replay, Tia $tia): void
{
$this->__replay = $replay;
$this->__replayAssertions = $tia->getAssertionCount($this::class.'::'.$this->name());
$this->__ran = true;
}
/**
* Initialize test case properties from TestSuite.
*/
public function __initializeTestCase(): void
{
// Return if the test case has already been initialized
if (isset($this->__test)) {
return;
}
$name = $this->name();
$test = TestSuite::getInstance()->tests->get(self::$__filename);
if ($test->hasMethod($name)) {
$method = $test->getMethod($name);
$this->__description = self::$__latestDescription = $method->description;
self::$__latestAssignees = $method->assignees;
self::$__latestNotes = $method->notes;
self::$__latestIssues = $method->issues;
self::$__latestPrs = $method->prs;
$this->__describing = $method->describing;
$this->__test = $method->getClosure();
$method->setUp($this);
}
}
/**
* Gets executed after the Test Case.
*/
protected function tearDown(...$arguments): void
{
if ($this->__replay !== ReplayType::None) {
TestSuite::getInstance()->test = null;
return;
}
$afterEach = TestSuite::getInstance()->afterEach->get(self::$__filename);
if ($this->__afterEach instanceof Closure) {
$afterEach = ChainableClosure::bound($this->__afterEach, $afterEach);
}
try {
$this->__callClosure($afterEach, func_get_args());
} finally {
parent::tearDown();
TestSuite::getInstance()->test = null;
$method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name());
$method->tearDown($this);
}
}
/**
* Executes the Test Case current test.
*
* @throws Throwable
*/
private function __runTest(Closure $closure, ...$args): mixed
{
if ($this->__replay === ReplayType::Pass || $this->__replay === ReplayType::Risky) {
if ($this->__replay === ReplayType::Pass && $this->__replayAssertions === 0) {
$this->expectNotToPerformAssertions();
}
$this->addToAssertionCount($this->__replayAssertions);
return null;
}
$arguments = $this->__resolveTestArguments($args);
$this->__ensureDatasetArgumentNameAndNumberMatches($arguments);
$method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name());
if ($method->flakyTries === null) {
return $this->__callClosure($closure, $arguments);
}
$lastException = null;
$initialProperties = get_object_vars($this);
for ($attempt = 1; $attempt <= $method->flakyTries; $attempt++) {
try {
return $this->__callClosure($closure, $arguments);
} catch (Throwable $e) {
if ($e instanceof SkippedTest
|| $e instanceof IncompleteTest
|| $this->__isExpectedException($e)) {
throw $e;
}
$lastException = $e;
if ($attempt < $method->flakyTries) {
if ($this->__snapshotChanges !== []) {
throw $e;
}
$this->tearDown();
Closure::bind(fn (): array => $this->mockObjects = [], $this, TestCase::class)();
foreach (array_keys(array_diff_key(get_object_vars($this), $initialProperties)) as $property) {
unset($this->{$property});
}
$outputBuffer = Closure::bind(fn () => $this->outputBuffer, $this, TestCase::class)();
if ($outputBuffer->hasExpectation()) {
ob_clean();
Closure::bind(function (): void {
$this->expectedString = null;
$this->expectedRegularExpression = null;
}, $outputBuffer, OutputBuffer::class)();
}
$this->setUp();
}
}
}
throw $lastException;
}
/**
* Determines if the given exception matches PHPUnit's expected exception.
*/
private function __isExpectedException(Throwable $e): bool
{
$expectation = Closure::bind(fn () => $this->exceptionExpectation, $this, TestCase::class)();
$read = fn (string $property): mixed => Closure::bind(fn () => $this->{$property}, $expectation, ExceptionExpectation::class)();
$expectedClass = $read('expectedException');
if ($expectedClass !== null) {
return $e instanceof $expectedClass;
}
$expectedMessage = $read('expectedMessage');
if ($expectedMessage !== null) {
return str_contains($e->getMessage(), (string) $expectedMessage);
}
$expectedMessageRegex = $read('expectedMessageRegularExpression');
if ($expectedMessageRegex !== null) {
return preg_match($expectedMessageRegex, $e->getMessage()) === 1;
}
$expectedCode = $read('expectedCode');
if ($expectedCode !== null) {
return $e->getCode() === $expectedCode;
}
return false;
}
/**
* Resolve the passed arguments. Any Closures will be bound to the testcase and resolved.
*
* @throws Throwable
*/
private function __resolveTestArguments(array $arguments): array
{
$method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name());
if ($method->repetitions > 1) {
// If the test is repeated, the first argument is the iteration number
// we need to move it to the end of the arguments list
// so that the datasets are the first n arguments
// and the iteration number is the last argument
$firstArgument = array_shift($arguments);
$arguments[] = $firstArgument;
}
$underlyingTest = Reflection::getFunctionVariable($this->__test, 'closure');
$testParameterTypesByName = Reflection::getFunctionArguments($underlyingTest);
$testParameterTypes = array_values($testParameterTypesByName);
if (count($arguments) !== 1) {
foreach ($arguments as $argumentIndex => $argumentValue) {
if (! $argumentValue instanceof Closure) {
continue;
}
$parameterType = is_string($argumentIndex)
? $testParameterTypesByName[$argumentIndex]
: $testParameterTypes[$argumentIndex];
if (in_array($parameterType, [Closure::class, 'callable', 'mixed'])) {
continue;
}
$arguments[$argumentIndex] = $this->__callClosure($argumentValue, []);
}
return $arguments;
}
if (! isset($arguments[0]) || ! $arguments[0] instanceof Closure) {
return $arguments;
}
if (isset($testParameterTypes[0]) && in_array($testParameterTypes[0], [Closure::class, 'callable'])) {
return $arguments;
}
$boundDatasetResult = $this->__callClosure($arguments[0], []);
if (count($testParameterTypes) === 1) {
return [$boundDatasetResult];
}
if (! is_array($boundDatasetResult)) {
return [$boundDatasetResult];
}
return $boundDatasetResult;
}
/**
* Ensures dataset items count matches underlying test case required parameters
*
* @throws ReflectionException
* @throws DatasetArgumentsMismatch
*/
private function __ensureDatasetArgumentNameAndNumberMatches(array $arguments): void
{
if ($arguments === []) {
return;
}
$underlyingTest = Reflection::getFunctionVariable($this->__test, 'closure');
$testReflection = new ReflectionFunction($underlyingTest);
$requiredParametersCount = $testReflection->getNumberOfRequiredParameters();
$suppliedParametersCount = count($arguments);
$datasetParameterNames = array_keys($arguments);
$testParameterNames = array_map(
fn (ReflectionParameter $reflectionParameter): string => $reflectionParameter->getName(),
array_filter($testReflection->getParameters(), fn (ReflectionParameter $reflectionParameter): bool => ! $reflectionParameter->isOptional()),
);
if (array_diff($testParameterNames, $datasetParameterNames) === []) {
return;
}
if (isset($testParameterNames[0]) && $suppliedParametersCount >= $requiredParametersCount) {
return;
}
throw new DatasetArgumentsMismatch($requiredParametersCount, $suppliedParametersCount);
}
/**
* @throws Throwable
*/
private function __callClosure(Closure $closure, array $arguments): mixed
{
return ExceptionTrace::ensure(fn (): mixed => call_user_func_array(Closure::bind($closure, $this, $this::class), $arguments));
}
/**
* Uses the given preset on the test.
*/
public function preset(): Preset
{
return new Preset;
}
#[PostCondition]
protected function __MarkTestIncompleteIfSnapshotHaveChanged(): void
{
if (count($this->__snapshotChanges) === 0) {
return;
}
$this->markTestIncomplete(implode('. ', $this->__snapshotChanges));
}
/**
* The printable test case name.
*/
public static function getPrintableTestCaseName(): string
{
return preg_replace('/P\\\/', '', self::class, 1);
}
/**
* The printable test case method name.
*/
public function getPrintableTestCaseMethodName(): string
{
return $this->__description;
}
/**
* The latest printable test case method name.
*/
public static function getLatestPrintableTestCaseMethodName(): string
{
return self::$__latestDescription ?? '';
}
/**
* The printable test case method context.
*/
public static function getPrintableContext(): array
{
return [
'assignees' => self::$__latestAssignees,
'issues' => self::$__latestIssues,
'prs' => self::$__latestPrs,
'notes' => self::$__latestNotes,
];
}
/**
* Opens a shell for the test case.
*/
public function shell(): void
{
Shell::open();
}
}
+147
View File
@@ -0,0 +1,147 @@
<?php
declare(strict_types=1);
namespace Pest;
use Pest\PendingCalls\BeforeEachCall;
use Pest\PendingCalls\UsesCall;
/**
* @internal
*
* @mixin UsesCall
*/
final readonly class Configuration
{
/**
* The filename of the configuration.
*/
private string $filename;
/**
* Creates a new configuration instance.
*/
public function __construct(
string $filename,
) {
$this->filename = str_ends_with($filename, DIRECTORY_SEPARATOR.'Pest.php') ? dirname($filename) : $filename;
}
/**
* Use the given classes and traits in the given targets.
*/
public function in(string ...$targets): UsesCall
{
return new UsesCall($this->filename, [])->in(...$targets);
}
/**
* Depending on where is called, it will extend the given classes and traits globally or locally.
*/
public function extend(string ...$classAndTraits): UsesCall
{
return new UsesCall(
$this->filename,
array_values($classAndTraits)
);
}
/**
* Depending on where is called, it will extend the given classes and traits globally or locally.
*/
public function extends(string ...$classAndTraits): UsesCall
{
return $this->extend(...$classAndTraits);
}
/**
* Depending on where is called, it will add the given groups globally or locally.
*/
public function group(string ...$groups): UsesCall
{
return new UsesCall($this->filename, [])->group(...$groups);
}
/**
* Marks all tests in the current file to be run exclusively.
*/
public function only(): void
{
new BeforeEachCall(TestSuite::getInstance(), $this->filename)->only();
}
/**
* Depending on where is called, it will extend the given classes and traits globally or locally.
*/
public function use(string ...$classAndTraits): UsesCall
{
return $this->extend(...$classAndTraits);
}
/**
* Depending on where is called, it will extend the given classes and traits globally or locally.
*/
public function uses(string ...$classAndTraits): UsesCall
{
return $this->extends(...$classAndTraits);
}
/**
* Gets the printer configuration.
*/
public function printer(): Configuration\Printer
{
return new Configuration\Printer;
}
/**
* Gets the presets configuration.
*/
public function presets(): Configuration\Presets
{
return new Configuration\Presets;
}
/**
* Gets the project configuration.
*/
public function project(): Configuration\Project
{
return Configuration\Project::getInstance();
}
/**
* Gets the browser configuration.
*/
public function browser(): Browser\Configuration
{
return new Browser\Configuration;
}
/**
* Gets the evals configuration.
*/
public function evals(): Evals\Configuration
{
return new Evals\Configuration;
}
/**
* Gets the TIA (Test Impact Analysis) configuration.
*/
public function tia(): Plugins\Tia\Configuration
{
return new Plugins\Tia\Configuration;
}
/**
* Proxies calls to the uses method.
*
* @param array<array-key, mixed> $arguments
*/
public function __call(string $name, array $arguments): mixed
{
return $this->uses()->$name(...$arguments); // @phpstan-ignore-line
}
}
+19
View File
@@ -0,0 +1,19 @@
<?php
declare(strict_types=1);
namespace Pest\Configuration;
use Closure;
use Pest\Preset;
final class Presets
{
/**
* Creates a custom preset instance, and adds it to the list of presets.
*/
public function custom(string $name, Closure $execute): void
{
Preset::custom($name, $execute);
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace Pest\Configuration;
use NunoMaduro\Collision\Adapters\Phpunit\Printers\DefaultPrinter;
/**
* @internal
*/
final readonly class Printer
{
/**
* Sets the theme to compact.
*/
public function compact(): self
{
DefaultPrinter::compact(true);
return $this;
}
}
+112
View File
@@ -0,0 +1,112 @@
<?php
declare(strict_types=1);
namespace Pest\Configuration;
/**
* @internal
*/
final class Project
{
/**
* The assignees link.
*
* @internal
*/
public string $assignees = '';
/**
* The issues link.
*
* @internal
*/
public string $issues = '';
/**
* The PRs link.
*
* @internal
*/
public string $prs = '';
/**
* The singleton instance.
*/
private static ?self $instance = null;
/**
* Creates a new instance of the project.
*/
public static function getInstance(): self
{
return self::$instance ??= new self;
}
/**
* Sets the test project to GitHub.
*/
public function github(string $project): self
{
$this->issues = "https://github.com/{$project}/issues/%s";
$this->prs = "https://github.com/{$project}/pull/%s";
$this->assignees = 'https://github.com/%s';
return $this;
}
/**
* Sets the test project to GitLab.
*/
public function gitlab(string $project, string $hostname = 'gitlab.com'): self
{
// Simple way to ensure only the host is used
$hostname = parse_url($hostname, PHP_URL_HOST) ?? $hostname;
$this->issues = "https://{$hostname}/{$project}/-/work_items/%s";
$this->prs = "https://{$hostname}/{$project}/-/merge_requests/%s";
$this->assignees = "https://{$hostname}/%s";
return $this;
}
/**
* Sets the test project to Bitbucket.
*/
public function bitbucket(string $project): self
{
$this->issues = "https://bitbucket.org/{$project}/issues/%s";
$this->prs = "https://bitbucket.org/{$project}/pull-requests/%s";
$this->assignees = 'https://bitbucket.org/%s';
return $this;
}
/**
* Sets the test project to Jira.
*/
public function jira(string $namespace, string $project): self
{
$this->issues = "https://{$namespace}.atlassian.net/browse/{$project}-%s";
$this->assignees = "https://{$namespace}.atlassian.net/secure/ViewProfile.jspa?name=%s";
return $this;
}
/**
* Sets the test project to custom.
*/
public function custom(string $issues, string $prs, string $assignees): self
{
$this->issues = $issues;
$this->prs = $prs;
$this->assignees = $assignees;
return $this;
}
}
-142
View File
@@ -1,142 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest\Console;
use Pest\Actions\AddsDefaults;
use Pest\Actions\AddsTests;
use Pest\Actions\LoadStructure;
use Pest\Actions\ValidatesConfiguration;
use Pest\Contracts\Plugins\AddsOutput;
use Pest\Contracts\Plugins\HandlesArguments;
use Pest\Plugin\Loader;
use Pest\TestSuite;
use PHPUnit\Framework\TestSuite as BaseTestSuite;
use PHPUnit\TextUI\Command as BaseCommand;
use PHPUnit\TextUI\TestRunner;
use SebastianBergmann\FileIterator\Facade as FileIteratorFacade;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @internal
*/
final class Command extends BaseCommand
{
/**
* Holds the current testing suite.
*
* @var TestSuite
*/
private $testSuite;
/**
* Holds the current console output.
*
* @var OutputInterface
*/
private $output;
/**
* Creates a new instance of the command class.
*/
public function __construct(TestSuite $testSuite, OutputInterface $output)
{
$this->testSuite = $testSuite;
$this->output = $output;
}
/**
* {@inheritdoc}
*
* @phpstan-ignore-next-line
*
* @param array<int, string> $argv
*/
protected function handleArguments(array $argv): void
{
/*
* First, let's call all plugins that want to handle arguments
*/
$plugins = Loader::getPlugins(HandlesArguments::class);
/** @var HandlesArguments $plugin */
foreach ($plugins as $plugin) {
$argv = $plugin->handleArguments($argv);
}
/*
* Next, as usual, let's send the console arguments to PHPUnit.
*/
parent::handleArguments($argv);
/*
* Finally, let's validate the configuration. Making
* sure all options are yet supported by Pest.
*/
ValidatesConfiguration::in($this->arguments);
}
/**
* Creates a new PHPUnit test runner.
*/
protected function createRunner(): TestRunner
{
/*
* First, let's add the defaults we use on `pest`. Those
* are the printer class, and others that may be appear.
*/
$this->arguments = AddsDefaults::to($this->arguments);
LoadStructure::in($this->testSuite->rootPath);
$testRunner = new TestRunner($this->arguments['loader']);
$testSuite = $this->arguments['test'];
if (is_string($testSuite)) {
if (\is_dir($testSuite)) {
/** @var string[] $files */
$files = (new FileIteratorFacade())->getFilesAsArray(
$testSuite,
$this->arguments['testSuffixes']
);
} else {
$files = [$testSuite];
}
$testSuite = new BaseTestSuite($testSuite);
$testSuite->addTestFiles($files);
$this->arguments['test'] = $testSuite;
}
AddsTests::to($testSuite, $this->testSuite);
return $testRunner;
}
/**
* {@inheritdoc}
*
* @phpstan-ignore-next-line
*
* @param array<int, string> $argv
*/
public function run(array $argv, bool $exit = true): int
{
$result = parent::run($argv, false);
/*
* Let's call all plugins that want to add output after test execution
*/
$plugins = Loader::getPlugins(AddsOutput::class);
/** @var AddsOutput $plugin */
foreach ($plugins as $plugin) {
$result = $plugin->addOutput($result);
}
exit($result);
}
}
+44
View File
@@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
namespace Pest\Console;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @internal
*/
final readonly class Help
{
/**
* The Command messages.
*
* @var array<int, string>
*/
private const array HELP_MESSAGES = [
'<comment>Pest Options:</comment>',
' <info>--init</info> Initialise a standard Pest configuration',
' <info>--coverage</info> Enable coverage and output to standard output',
' <info>--min=<fg=cyan><N></></info> Set the minimum required coverage percentage (<N>), and fail if not met',
' <info>--group=<fg=cyan><name></></info> Only runs tests from the specified group(s)',
];
/**
* Creates a new Console Command instance.
*/
public function __construct(private OutputInterface $output)
{
// ..
}
/**
* Executes the Console Command.
*/
public function __invoke(): void
{
foreach (self::HELP_MESSAGES as $message) {
$this->output->writeln($message);
}
}
}
+56 -32
View File
@@ -4,63 +4,87 @@ declare(strict_types=1);
namespace Pest\Console;
use Pest\Bootstrappers\BootView;
use Pest\Support\View;
use Symfony\Component\Console\Helper\SymfonyQuestionHelper;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ConfirmationQuestion;
/**
* @internal
*/
final class Thanks
final readonly class Thanks
{
/** @var array<int, string> */
private const FUNDING_MESSAGES = [
'',
' - Star or contribute to Pest:',
' <options=bold>https://github.com/pestphp/pest</>',
' - Tweet something about Pest on Twitter:',
' <options=bold>https://twitter.com/pestphp</>',
' - Sponsor the creator:',
' <options=bold>https://github.com/sponsors/nunomaduro</>',
/**
* The support options.
*
* @var array<string, string>
*/
private const array FUNDING_MESSAGES = [
'Star' => 'https://github.com/pestphp/pest',
'YouTube' => 'https://youtube.com/@nunomaduro',
'TikTok' => 'https://tiktok.com/@enunomaduro',
'Twitch' => 'https://twitch.tv/nunomaduro',
'LinkedIn' => 'https://linkedin.com/in/nunomaduro',
'Instagram' => 'https://instagram.com/enunomaduro',
'X' => 'https://x.com/enunomaduro',
'Sponsor' => 'https://github.com/sponsors/nunomaduro',
];
/** @var OutputInterface */
private $output;
public function __construct(OutputInterface $output)
{
$this->output = $output;
/**
* Creates a new Console Command instance.
*/
public function __construct(
private InputInterface $input,
private OutputInterface $output
) {
// ..
}
/**
* Asks the user to support Pest.
* Executes the Console Command.
*/
public function __invoke(): void
{
$wantsToSupport = (new SymfonyQuestionHelper())->ask(
new ArrayInput([]),
$this->output,
new ConfirmationQuestion(
'Can you quickly <options=bold>star our GitHub repository</>? 🙏🏻',
true,
)
);
$bootstrapper = new BootView($this->output);
$bootstrapper->boot();
$wantsToSupport = false;
if (getenv('PEST_NO_SUPPORT') !== 'true' && $this->input->isInteractive()) {
$wantsToSupport = (new SymfonyQuestionHelper)->ask(
new ArrayInput([]),
$this->output,
new ConfirmationQuestion(
' <options=bold>Wanna show Pest some love by starring it on GitHub?</>',
false,
)
);
View::render('components.new-line');
foreach (self::FUNDING_MESSAGES as $message => $link) {
View::render('components.two-column-detail', [
'left' => $message,
'right' => $link,
]);
}
View::render('components.new-line');
}
if ($wantsToSupport === true) {
if (PHP_OS_FAMILY == 'Darwin') {
if (PHP_OS_FAMILY === 'Darwin') {
exec('open https://github.com/pestphp/pest');
}
if (PHP_OS_FAMILY == 'Windows') {
if (PHP_OS_FAMILY === 'Windows') {
exec('start https://github.com/pestphp/pest');
}
if (PHP_OS_FAMILY == 'Linux') {
if (PHP_OS_FAMILY === 'Linux') {
exec('xdg-open https://github.com/pestphp/pest');
}
}
foreach (self::FUNDING_MESSAGES as $message) {
$this->output->writeln($message);
}
}
}
+10
View File
@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts;
/**
* @internal
*/
interface ArchPreset {}
+16
View File
@@ -0,0 +1,16 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts;
/**
* @internal
*/
interface Bootstrapper
{
/**
* Boots the bootstrapper.
*/
public function boot(): void;
}
+8 -14
View File
@@ -4,18 +4,12 @@ declare(strict_types=1);
namespace Pest\Contracts;
if (interface_exists(\NunoMaduro\Collision\Contracts\Adapters\Phpunit\HasPrintableTestCaseName::class)) {
/**
* @internal
*/
interface HasPrintableTestCaseName extends \NunoMaduro\Collision\Contracts\Adapters\Phpunit\HasPrintableTestCaseName
{
}
} else {
/**
* @internal
*/
interface HasPrintableTestCaseName
{
}
use NunoMaduro\Collision\Contracts\Adapters\Phpunit\HasPrintableTestCaseName as BaseHasPrintableTestCaseName;
/**
* @internal
*/
interface HasPrintableTestCaseName extends BaseHasPrintableTestCaseName
{
// ..
}
+23
View File
@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @internal
*/
interface Panicable
{
/**
* Renders the panic on the given output.
*/
public function render(OutputInterface $output): void;
/**
* The exit code to be used.
*/
public function exitCode(): int;
}
+2 -2
View File
@@ -10,7 +10,7 @@ namespace Pest\Contracts\Plugins;
interface AddsOutput
{
/**
* Allows to add custom output after the test suite was executed.
* Adds output after the Test Suite execution.
*/
public function addOutput(int $testReturnCode): int;
public function addOutput(int $exitCode): int;
}
+16
View File
@@ -0,0 +1,16 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts\Plugins;
/**
* @internal
*/
interface Bootable
{
/**
* Boots the plugin.
*/
public function boot(): void;
}
+3 -7
View File
@@ -10,14 +10,10 @@ namespace Pest\Contracts\Plugins;
interface HandlesArguments
{
/**
* Allows to handle custom command line arguments.
* Adds arguments before the Test Suite execution.
*
* PLEASE NOTE: it is necessary to remove any custom argument from the array
* because otherwise the application will complain about them
*
* @param array<int, string> $arguments
*
* @return array<int, string> the updated list of arguments
* @param array<int, string> $arguments
* @return array<int, string>
*/
public function handleArguments(array $arguments): array;
}
@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts\Plugins;
/**
* @internal
*/
interface HandlesOriginalArguments
{
/**
* Adds original arguments before the Test Suite execution.
*
* @param array<int, string> $arguments
*/
public function handleOriginalArguments(array $arguments): void;
}
+16
View File
@@ -0,0 +1,16 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts\Plugins;
/**
* @internal
*/
interface Terminable
{
/**
* Terminates the plugin.
*/
public function terminate(): void;
}
+16
View File
@@ -0,0 +1,16 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts;
/**
* @internal
*/
interface Restarter
{
/**
* @param array<int, string> $arguments
*/
public function maybeRestart(string $projectRoot, array $arguments): void;
}
+13
View File
@@ -0,0 +1,13 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts;
interface TestCaseFilter
{
/**
* Whether the test case is accepted.
*/
public function accept(string $testCaseFilename): bool;
}
+15
View File
@@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace Pest\Contracts;
use Pest\Factories\TestCaseMethodFactory;
interface TestCaseMethodFilter
{
/**
* Whether the test case method is accepted.
*/
public function accept(TestCaseMethodFactory $factory): bool;
}
-115
View File
@@ -1,115 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest;
use Closure;
use Pest\Exceptions\DatasetAlreadyExist;
use Pest\Exceptions\DatasetDoesNotExist;
use SebastianBergmann\Exporter\Exporter;
use Traversable;
/**
* @internal
*/
final class Datasets
{
/**
* Holds the datasets.
*
* @var array<string, \Closure|iterable<int, mixed>>
*/
private static $datasets = [];
/**
* Sets the given.
*
* @param Closure|iterable<int, mixed> $data
*/
public static function set(string $name, $data): void
{
if (array_key_exists($name, self::$datasets)) {
throw new DatasetAlreadyExist($name);
}
self::$datasets[$name] = $data;
}
/**
* @return Closure|iterable<int, mixed>
*/
public static function get(string $name)
{
if (!array_key_exists($name, self::$datasets)) {
throw new DatasetDoesNotExist($name);
}
return self::$datasets[$name];
}
/**
* Resolves the current dataset to an array value.
*
* @param Traversable<int, mixed>|Closure|iterable<int, mixed>|string|null $data
*
* @return array<string, mixed>
*/
public static function resolve(string $description, $data): array
{
/* @phpstan-ignore-next-line */
if (is_null($data) || empty($data)) {
return [$description => []];
}
if (is_string($data)) {
$data = self::get($data);
}
if (is_callable($data)) {
$data = call_user_func($data);
}
if ($data instanceof Traversable) {
$data = iterator_to_array($data);
}
$dataSetDescriptions = [];
$dataSetValues = [];
foreach ($data as $values) {
$values = is_array($values) ? $values : [$values];
$dataSetDescriptions[] = $description . self::getDataSetDescription($values);
$dataSetValues[] = $values;
}
foreach (array_count_values($dataSetDescriptions) as $descriptionToCheck => $count) {
if ($count > 1) {
$index = 1;
foreach ($dataSetDescriptions as $i => $dataSetDescription) {
if ($dataSetDescription === $descriptionToCheck) {
$dataSetDescriptions[$i] .= sprintf(' #%d', $index++);
}
}
}
}
$namedData = [];
foreach ($dataSetDescriptions as $i => $dataSetDescription) {
$namedData[$dataSetDescription] = $dataSetValues[$i];
}
return $namedData;
}
/**
* @param array<int, mixed> $data
*/
private static function getDataSetDescription(array $data): string
{
$exporter = new Exporter();
return \sprintf(' with (%s)', $exporter->shortenedRecursiveExport($data));
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace Pest\Evaluators;
use Pest\Factories\Attribute;
/**
* @internal
*/
final class Attributes
{
/**
* Evaluates the given attributes and returns the code.
*
* @param iterable<int, Attribute> $attributes
*/
public static function code(iterable $attributes): string
{
return implode(PHP_EOL, array_map(function (Attribute $attribute): string {
$name = $attribute->name;
if ($attribute->arguments === []) {
return " #[\\{$name}]";
}
$arguments = array_map(fn (string $argument): string => var_export($argument, true), iterator_to_array($attribute->arguments));
return sprintf(' #[\\%s(%s)]', $name, implode(', ', $arguments));
}, iterator_to_array($attributes)));
}
}
+2 -2
View File
@@ -15,10 +15,10 @@ use Symfony\Component\Console\Exception\ExceptionInterface;
final class AfterAllAlreadyExist extends InvalidArgumentException implements ExceptionInterface, RenderlessEditor, RenderlessTrace
{
/**
* Creates a new instance of after all already exist exception.
* Creates a new Exception instance.
*/
public function __construct(string $filename)
{
parent::__construct(sprintf('The afterAll already exist in the filename `%s`.', $filename));
parent::__construct(sprintf('The afterAll already exists in the filename `%s`.', $filename));
}
}
@@ -12,13 +12,13 @@ use Symfony\Component\Console\Exception\ExceptionInterface;
/**
* @internal
*/
final class BeforeEachAlreadyExist extends InvalidArgumentException implements ExceptionInterface, RenderlessEditor, RenderlessTrace
final class AfterAllWithinDescribe extends InvalidArgumentException implements ExceptionInterface, RenderlessEditor, RenderlessTrace
{
/**
* Creates a new instance of before each already exist exception.
* Creates a new Exception instance.
*/
public function __construct(string $filename)
{
parent::__construct(sprintf('The beforeEach already exist in the filename `%s`.', $filename));
parent::__construct(sprintf('The afterAll method can not be used within describe functions. Filename `%s`.', $filename));
}
}
@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Pest\Exceptions;
use InvalidArgumentException;
use NunoMaduro\Collision\Contracts\RenderlessEditor;
use NunoMaduro\Collision\Contracts\RenderlessTrace;
use Symfony\Component\Console\Exception\ExceptionInterface;
/**
* @internal
*/
final class AfterBeforeTestFunction extends InvalidArgumentException implements ExceptionInterface, RenderlessEditor, RenderlessTrace
{
/**
* Creates a new Exception instance.
*/
public function __construct(string $filename)
{
parent::__construct('After method cannot be used with before the [test|it] functions in the filename `['.$filename.']`.');
}
}
@@ -1,24 +0,0 @@
<?php
declare(strict_types=1);
namespace Pest\Exceptions;
use InvalidArgumentException;
use NunoMaduro\Collision\Contracts\RenderlessEditor;
use NunoMaduro\Collision\Contracts\RenderlessTrace;
use Symfony\Component\Console\Exception\ExceptionInterface;
/**
* @internal
*/
final class AttributeNotSupportedYet extends InvalidArgumentException implements ExceptionInterface, RenderlessEditor, RenderlessTrace
{
/**
* Creates a new instance of attribute not supported yet.
*/
public function __construct(string $attribute, string $value)
{
parent::__construct(sprintf('The PHPUnit attribute `%s` with value `%s` is not supported yet.', $attribute, $value));
}
}

Some files were not shown because too many files have changed in this diff Show More