packages feed

hspec 2.2.4 → 2.11.17

raw patch · 15 files changed

Files

+ CHANGES.markdown view
@@ -0,0 +1,812 @@+## Changes in 2.11.17 (2026-03-04)+  - Compatibility with QuickCheck 2.18++## Changes in 2.11.16 (2025-12-12)+  - Add support for MicroHs++## Changes in 2.11.15 (2025-12-08)+  - Remove redundant `tf-random` dependency++## Changes in 2.11.14 (2025-09-30)+  - Make sure that `--pretty` completes in *O(n)* time++## Changes in 2.11.13 (2025-09-15)+  - Make diff algorithm line based+  - Improve pretty-printing of nested records++## Changes in 2.11.12 (2025-03-17)+  - Add `--no-rerun` and `--no-rerun-all-on-success`++## Changes in 2.11.11 (2025-02-17)+  - Compatibility with GHC 9.12++## Changes in 2.11.10 (2024-11-16)+  - Add (experimental) extensions API+  - Handle small terminal sizes more gracefully when reporting progress+  - Correctly indent multi-line pending messages+  - Use "erase in line" ANSI sequence to clear transient output (instead of+    overwriting it with spaces)++## Changes in 2.11.9 (2024-05-24)+  - Compatibility with GHC 9.10.1+  - Drop support for GHC 7.10.3++## Changes in 2.11.8 (2024-04-22)+  - Make the build pass with QuickCheck 2.15++## Changes in 2.11.7 (2023-10-22)+  - Include `--seed` in the note on how to rurun a failing item.++## Changes in 2.11.6 (2023-10-11)+  - Compatibility with GHC 9.8.1+  - Run cleanup actions on `--fail-fast` (see #860)++## Changes in 2.11.5 (2023-09-20)+  - Add `--show-exceptions` and `--display-exceptions`++## Changes in 2.11.4 (2023-07-20)+  - Depend on `hspec-expectations-0.8.4`++## Changes in 2.11.3 (2023-07-10)+  - Suppress informational output from QuickCheck when+    `Test.QuickCheck.Args.chatty` is `False` (#840)++## Changes in 2.11.2 (2023-07-06)+  - Add `--expert` mode++## Changes in 2.11.1 (2023-05-28)+  - Depend on `hspec-expectations-0.8.3`++## Changes in 2.11.0.1 (2023-04-28)+  - Don't crash when home directories are unsupported (WASM/WASI) (thanks+    @amesgen)++## Changes in 2.11.0 (2023-04-21)+  - Drop support for GHC < 7.10.3+  - Improve coloring of whitespace-only segments on `--diff`+  - Add `ColorizedReason` constructor to `FailureReason`+  - Provide a new package `hspec-api`, a stable API that can be used to extend+    Hspec's functionality.+  - Deprecate `Test.Hspec.Core.Formatters.V1` in favor of+    `Test.Hspec.Api.Formatters.V1`+  - Add `--fail-on=empty-description`+  - Print slow spec items to `stderr` instead of `stdout`+  - Handle quoting/escaping in `.hspec` files+  - Flush output handle after reporting progress on `-fprogress`++## Changes in 2.10.10 (2023-03-07)+  - Re-export `sequential` from `Test.Hspec`+  - Rerun `beforeAll` / `afterAll` on `--rerun-all-on-success` (#768)++## Changes in 2.10.9 (2023-01-13)+  - Print error message on `-—fail-on=empty`+  - Only fail on `-—fail-on=empty` if at least one spec item has been filtered+  - Re-export more types from `Test.Hspec.Core.Runner`+  - Fix a pretty-printing bug where `[]` would be pretty-printed as `""`+  - Don't pretty-print if the expected and actual value would be equal after+    pretty-printing+  - Prevent deadlocks on unguarded exceptions in runner (#771)++## Changes in 2.10.8 (2022-12-19)+  - Add pretty-printing support for rational numbers+  - Force / evaluate exceptions recursively (#763)+  - Add `xprop` and `fprop`, which use `xit` and `fit` (thanks @lehins)++## Changes in 2.10.7 (2022-12-03)+  - Do not depend on `ghc` for pretty-printing (#750, #752)++## Changes in 2.10.6 (2022-09-13)+  - Suppress excessive diff output (#449)+  - Allow the use of an external diff program.  This can e.g. be used by+    setting `HSPEC_DIFF_COMMAND="diff -u --color -L expected -L actual"` or+    `HSPEC_DIFF_COMMAND="git diff"`+  - Do not imply `--fail-on=empty` on `--strict`++## Changes in 2.10.5 (2022-09-09)+  - Add `--fail-on`.  This subsums `--fail-on-focused` and `--fail-on-pending`.+  - Add `--fail-on=empty` (#650)+  - Add `registerFormatter` and `registerDefaultFormatter` to+    `Test.Hspec.Runner`.+  - Revert deprecation of `Test.Hspec.Formatters` and+    `Test.Hspec.Core.Formatters`.  Instead the module documentation now says+    that they are deprecated in favor of `Test.Hspec.Core.Formatters.V1`.++## Changes in 2.10.4 (2022-09-06)+  - Make sure that whitespace-only diff output is colorized properly (#660)++## Changes in 2.10.3 (2022-09-05)+  - Deprecate `Test.Hspec.Formatters` and `Test.Hspec.Core.Formatters`+  - Disable (most) warnings in files generated by `hspec-discover` (#702)++## Changes in 2.10.2 (2022-09-03)+  - Add `--strict`+  - Add `--fail-on-pending`+  - Do not depend on `clock`++## Changes in 2.10.1 (2022-08-22)+  - Support for GHC 9.4.1+  - Generated modules now include an export list++## Changes in 2.10.0.1 (2022-08-06)+  - Fix a deadlock with nested failed `aroundAll`s (see #679)++## Changes in 2.10.0 (2022-05-12)+  - Allow to transform the config in `SpecM`+  - Allow to customize pretty-printing (via `configPrettyPrintFunction`)+  - Add `getSpecDescriptionPath` (#637, thanks @srid)+  - Do not treat `afterAll` as another spec item (fixes #414, #364, #363)+  - Change type of `paramsSmallCheckDepth` to Maybe (see #345)++## Changes in 2.9.7+  - Ensure that interim output does not interfere with output from tests This+    facilitates using `print` when debugging test cases.++## Changes in 2.9.6+  - Ensure color codes don't span newlines (#346, thanks @robx)+  - Disable progress reporting on Buildkite+  - Improve error messages on exceptions in hooks++## Changes in 2.9.5+  - Assume `--color` by default when running on GitHub Actions. Use+    `HSPEC_COLOR=no` or `--no-color` to opt out of this behavior.+  - Disable progress reporting on GitHub Actions.+  - Retain source formatting of numbers when pretty-printing.++## Changes in 2.9.4+  - Compatibility with GHCJS (see #599)++## Changes in 2.9.3+  - Pretty-print Haskell values in failure messages++## Changes in 2.9.2+  - Show multi-line diffs for string literals (disable with `--no-pretty`)++## Changes in 2.9.1+  - Recover unicode from `ExpectedButGot`+  - Preserve unicode in `To rerun use: --match ...` output++## Changes in 2.9.0+  - Add ASCII fallbacks to "checks" formatter (fixes #512)+  - Use `checks` formatter by default (to restore the old behavior use+    `--format specdoc`)+  - Allow to extend the list of available formatters for `--format`+    (`configAvailableFormatters`)+  - Add `getExpectedTotalCount` to `Test.Hspec.Core.Formatters.V2`+  - Rename `formatConfigItemCount` to `formatConfigExpectedTotalCount`+  - Rename `configFastFail` to `configFailFast`++## Changes in 2.8.5+  - hspec-core: Include help.txt in package tarball (close #568)+  - hspec-discover: Require base >=4.5.0.0 (fixes #554)++## Changes in 2.8.4+  - Better support for GHC 9.2.1+  - Support for setting options by individual environment variables, e.g.+    `HSPEC_COLOR=yes` will set `--color`++## Changes in 2.8.3+  - Better support for `--color=auto` on Windows+  - Add support for spec hooks to `hspec-discover` (via `SpecHook.hs`)+  - Propagate exceptions from `Test.Hspec.Core.Format.monadic`+  - Re-export `aroundAll_` from `Test.Hspec`++## Changes in 2.8.2+  - Add `mapSubject` and `ignoreSubject`++## Changes in 2.8.1+  - Take the environment variable `NO_COLOR` into account++## Changes in 2.8.0+  - Add `--times` to print times for individual spec items+  - Add `--print-slow-items`+  - Use `-XNoImplicitPrelude` and do not rely on `base` for `hspec-discover`+    generated test drivers. This ensures full compatibility with custom+    preludes.+  - Add new APIs for formatters `Test.Hspec.Core.Format` and+    `Test.Hspec.Core.Formatters.V2`+  - Add `getItemCount` to `Formatter` API+  - Add `--qc-max-shrinks` (see #380)+  - Add location information for failing `afterAll`-hooks+  - hspec-discover: Deprecate `--no-main` and `--formatter` (use+    `--module-name` instead) (#196)+  - Remove `--verbose` option (this has been a noop since at least 2013)+  - Remove `--out` option (use shell output redirection instead)++## Changes in 2.7.10+  - Add a new formatter (can be used with `--format checks`)+  - Add `exampleStarted` to `Formatter` API++## Changes in 2.7.9+  - Re-export `aroundAll` and `aroundAllWith` from `Test.Hspec`++## Changes in 2.7.8+  - Add `aroundAll` / `aroundAllWith` (see #255)++## Changes in 2.7.7+  - Add `aroundAll_` (see #255)+  - Correctly handle pending for `afterAll` actions++## Changes in 2.7.6+  - Add `beforeAllWith` (see #447)++## Changes in 2.7.5+  - Extract source locations from `NoMethodError` and `AssertionFailed`++## Changes in 2.7.4+  - Apply `--randomize` recursively++## Changes in 2.7.3+  - Add `--randomize`++## Changes in 2.7.2+  - Interrupt diff calculation if it takes longer than two seconds (see #415)++## Changes in 2.7.1+  - Add compatibility with QuickCheck 2.13.1 (see #410)++## Changes in 2.7.0+  - Add `--focused-only` (see #390)+  - Add `--fail-on-focused` (see #389)++## Changes in 2.6.1+  - Add `Test.Hspec.Runner.runSpec` (see #216)++## Changes in 2.6.0+  - Allow to focus individual spec items (see #319)+  - Do not calculate diff on `--no-diff` (see #332)+  - Remove deprecated module Test.Hspec.Core++## Changes in 2.5.9+  - Extract source locations from RecConError (see #375)++## Changes in 2.5.8+  - Add `modifyArgs` and `modifyMaxShrinks` to `Test.Hspec.QuickCheck` (see #380)++## Changes in 2.5.7+  - GHC 8.6.1 related changes++## Changes in 2.5.6+  - Compatibility with `QuickCheck-2.12`++## Changes in 2.5.5+  - Use `module[line:column]` instead of `module:line:column` as default label+    for `describe`/`it` (fixes #366)++## Changes in 2.5.4+  - Show how to rerun individual spec items on test failures (see #205)++## Changes in 2.5.3+  - Treat character escapes like `\NUL` as single tokens on `--diff` (see #351)+  - Allow a `/` at the beginning and at the end of an absolute path that is+    passed to `--match` or `--skip`++## Changes in 2.5.2+  - Use module:line:column as default label for describe/it (see #250)+  - Warn if user is affected by https://ghc.haskell.org/trac/ghc/ticket/13285 (see #329)++## Changes in 2.5.1+  - Disable tests for Test.Hspec.Core.Timer (see #352)++## Changes in 2.5.0+  - Add `sequential` (see #311)+  - Add support for `--diff` when `shouldBe` is uesd with+    `QuickCheck`-properties+  - Add source locations when `shouldBe` is uesd with `QuickCheck` properties+  - Print `QuickCheck` labels on success (see #297)+  - Retain output of `verbose`, `label`, `collect`, `classify`, etc. for+    `QuickCheck` properties (see #257)+  - Extract source location from error / undefined (see #316)+  - Parse source locations from pattern match failures+  - Include source column when formatting source locations+  - Colorize whitespaces with background color instead of foreground color with+    `--diff`+  - Run `Test.Hspec.Core.Formatters.exampleProgress` in `FormatM` instead of+    `IO`+  - Make sure that progress output is always cleared (fixes #301)+  - Add location information to `pending` (not used by any formatter yet)+  - Include duration for each spec item in new formatter API (see #315) (not yet exposed)+  - Removed deprecated module `Test.Hspec.HUnit`, use+    `Test.Hspec.Contrib.HUnit` instead+  - Deprecate `--out`+  - Remove `BestEffort` source locations++## Changes in 2.4.8+  - compatibility with GHC 8.4.1-alpha3++## Changes in 2.4.7+  - compatibility with `QuickCheck-2.11.3` and up (note that `QuickCheck`+    versions `2.11` to `2.11.2` are not fully supported)++## Changes in 2.4.6+  - compatibility with the upcoming version `4.11.0.0` of `base`++## Changes in 2.4.5+  - `hspec-discover`: Sort specs using natural sort order++## Changes in 2.4.4+  - Require quickcheck-io >= 0.2.0++## Changes in 2.4.3+  - Read command-line options from environment variable `HSPEC_OPTIONS`++## Changes in 2.4.2+  - Use `--diff` by default+  - Add `--failure-report` (see #266)++## Changes in 2.4.1+  - Compatibility with HUnit < 1.3++## Changes in 2.4.0+  - Read command-line options from config files `~/.hspec` and `.hspec`+  - Add support for `--diff`+  - Add `xit`, `xspecify`, `xdescribe` and `xcontext` (see #252)+  - Add `--rerun-all-on-success`+  - Report exceptions in `beforeAll` operations only once+  - Add indentation when actual/expected contain newlines (see #263)+  - More graceful shutdown on ctrl-c (see #270)+  - Run around-hook for Bool and Result (see #252)+  - Include `CHANGES.markdown` in package tarball++Internal changes:++  - Rename `Fail` constructor of `Result`-type to `Failure`+  - Add `FailureReason` type+  - Add `Test.Hspec.Core.Spec.safeEvaluateExample`++## Changes in 2.3.2+  - Compatibility with HUnit 1.5++## Changes in 2.3.1+  - Fix build for HUnit < 1.4++## Changes in 2.3.0+  - Proper support for GHC 8 call stacks++## Changes in 2.2.4+  - Compatibility with QuickCheck-2.9++## Changes in 2.2.3+  - Make sure that `cabal haddock` works for `hspec-discover`+  - Forward compatibility for HUnit 1.4+  - Fix tests for GHC 8.0.1-rc1++## Changes in 2.2.2+  - Fix compilation for GHC 8.0.1-rc1++## Changes in 2.2.1+  - Make sure that Vim's default `errorformat` recognizes exact locations+  - GHCJS compatibility++## Changes in 2.2.0+  - Add source locations to test `Result`++## Changes in 2.1.10+  - GHC 7.0.* compatibility++## Changes in 2.1.9+  - Make use of GHC 7.10.2 source locations+  - Add `--jobs`++## Changes in 2.1.8+  - Depend on `hspec-expectations-0.7.0"++## Changes in 2.1.7+  - Add `beforeAll_`++## Changes in 2.1.6+  - If there were no previous failures, run all spec items on `--rerun`++## Changes in 2.1.5+  - Compatibility with QuickCheck-2.8++## Changes in 2.1.4+  - Make `hspec-discover` ignore modules with invalid module names, this fixes+    issues with `flycheck`'s temporary files++## Changes in 2.1.3+  - Format source locations like gcc does++## Changes in 2.1.2+  - Re-export `before_` from `Test.Hspec`++## Changes in 2.1.1+  - Add `before_`+  - Add command-line option `--skip`++## Changes in 2.1.0+  - Generalize `after_`, `afterAll_` and `around_`++## Changes in 2.0.2+  - Indent error messages for failed examples (fixes #186)+  - Export `defaultParams` from `Test.Hspec.Core.Example`+  - Bring back `Test.Hspec.HUnit` and deprecate it to provide a smother upgrade+    path++## Changes in 2.0.1+  - Add missing extra source files to for `hspec-discover`++## Changes in 2.0.0+  - Split package into `hspec`, `hspec-core` and `hspec-discover`+  - Allow hooks (`before`, `around`, etc.) to pass arguments to spec items+  - Do not print `-` in front of spec items with `specdoc` formatter+  - Move `Test.Hspec.HUnit` to `hspec-contrib`++## Changes in 1.12.4+  - Add `specGroup` and `specItem` to `Test.Hspec.Core`+  - Deprecate `Test.Hspec.Core.it` and `Test.Hspec.Core.describe`++## Changes in 1.12.3+  - Make `hspec-discover` work with `-XNoImplicitPrelude`++## Changes in 1.12.2+  - Include `IOErrorType` when printing uncaught `IOException`s (see #204)++## Changes in 1.12.1+  - Add `--module-name` option to `hspec-discover` (see #168)++## Changes in 1.12.0+  - Add optional source location to spec items+  - Move item requirement text from `SpecItem` constructor to `Item` data type+  - Remove `BuildSpecs` constructor from `SpecTree`, having `runIO` this is not+    really needed+  - Add `mapSpecTree` to `Test.Hspec.Core`+  - Add `afterAll` (see #188)+  - Do not return `Result` from `hspecWith` and accept command-line options+    (the old behavior is still available as `hspecWithResult`)+  - Rename `configHandle` to `configOutputFile`+  - Omit empty `describe` groups from report+  - Do not pass position to `Formatter.exampleGroupStarted` (we can not support+    this with the upcomming cleanup actions #188)+  - Do not print empty lines before/after spec groups+  - Deprecate `Test.Hspec.Formatters.newParagraph`++## Changes in 1.11.4+  - Make test suite independent from QuickCheck seed (see #187)++## Changes in 1.11.3+  - Depend on `hspec-expectations-0.6.1`++## Changes in 1.11.2+  - Add `beforeAll`++## Changes in 1.11.1+ - Add `specify` as an alias for `it`++## Changes in 1.11.0+ - Add `BuildSpecs` constructor to internal `SpecTree` data structure.  This+   allows you to do `IO` while constructing the spec tree.+ - Add `runIO`++## Changes in 1.10.0+ - Do not use exception type to distinguish between synchronous/asynchronous+   exceptions (thanks to Michael Snoyman)+ - Remove `Example` instance for `Test.HUnit.Test` (#101), use+   `Test.Hspec.HUnit.fromHUnitTest` instead.+ - Do not reexport `property` from `Test.Hspec.QuickCheck`+ - Move `ProgressCallback` out of `Params`+ - Add show instance for `Params`+ - Move requirement text from `Item` to `SpecItem` constructor+ - Remove deprecated modules and functions++## Changes in 1.9.5+ - Make sure that ctrl-c works properly with GHC 7.8.* and QuickCheck-2.6++## Changes in 1.9.4+ - Compatibility with transformers-0.4.0.0++## Changes in 1.9.3+ - Make internal Tree data structure more strict (#169)++## Changes in 1.9.2+ - Print type of exceptions that are raised from QuickCheck properties (#94)++## Changes in 1.9.1+ - Bring back compatibility with older versions of QuickCheck (#166)++## Changes in 1.9.0+ - Depend on QuickCheck 2.7++## Changes in 1.8.3+ - Do not use color if `TERM=dumb` (see #158)++## Changes in 1.8.2+ - `hspec-discover` now accepts `--no-main` which results in a top-level spec+   being generated instead of a test driver (thanks @DanielG)+ - Make sure that `after` is run on failing tests (see #159)++## Changes in 1.8.1+ - Add `shouldMatchList`++## Changes in 1.8.0+ - Run `before`/`after`/`around` for each single check of a QuickCheck property+ - Add `Test.Hspec.Core.mapSpecItem`+ - Add `modifyMaxSuccess`, `modifyMaxDiscardRatio` and `modifyMaxSize` to+   `Test.Hspec.QuickCheck`+ - Don't fail if callback is not called in `around`+ - `hspec-discover`: Remove `--nested` option+ - `hspec-discover`: Ignore `Spec.hs`/`Spec.lhs`++## Changes in 1.7.2+ - Add `after` and `around`++## Changes in 1.7.1+ - Add `shouldContain` (thanks to Alfredo Di Napoli)+ - When printing progress, skip total if it is 0+ - Do not colorize the description/requirement in failure list++## Changes in 1.7.0+ - Add `--depth` for use with `hspec-smallcheck`++## Change in 1.6.2+ - Add `before`+ - Add `--qc-max-discard` and `--qc-max-size`++## Changes in 1.6.1+ - Allow to specify the output file with `--out`++## Changes in 1.6.0+ - Add support for parallelization+ - Change license to MIT+ - Add MonadIO instance for FormatM+ - Add support for custom formatters to hspec-discover+ - Add hspecResult+ - Rename `--re-run` to `--rerun` + add documentation (#95)+ - Remove `configVerbose`+ - Use same `--qc-max-success` on `--rerun` (#125)+ - Add command-line option `--no-color`, `--color` does not accept arguments+   anymore (#130)++## Changes in 1.5.4+ - Make sure that QuickCheck is never chatty+ - Make sure progress for QuickCheck examples is shown++## Changes in 1.5.3+ - Print "Randomized with seed ..." only once++## Changes in 1.5.2+ - Add `--seed`, it can be used to specify the seed for QuickCheck properties+ - Reuse previous seed on `--re-run`++## Changes in 1.5.1+ - Depend on quickcheck-io++## Changes in 1.5.0+ - Allow to use expectations as QuickCheck properties (#80)+ - Do not suppress output to `stdout`+ - Change type of `pending` to `Expectation`, add `pendingWith` (#121)+ - Add the `example` function, it fixes the type of an Expectation (#86)+ - Rename `--fast-fail` to `--fail-fast` (for consistency with RSpec)+ - Do not clutter Cabal test suite logs with QuickCheck output (#112)+ - Skip redundant output from QuickCheck failure messages (#102)++## Changes in 1.4.5+ - hspec-discover now discovers .lhs files, too++## Changes in 1.4.4+ - Visually distinguish error message from requirements in the summary (#100)+ - Export `formatException` from `Test.Hspec.Formatters`+ - Add `--fast-fail` (#82)+ - Print a summary on UserInterrupt/ctrl-c (#107)++## Changes in 1.4.3+ - Add `--dry-run` (#111)++## Changes in 1.4.2+ - Properly handle ctrl-c while running QuickCheck properties (#93)+ - Default to `--color=always` when `--color` is used without argument (#106)+ - treat `--qc-max-success` as an alias for `--maximum-generated-tests`++## Changes in 1.4.1+ - Used CPU time is now only included in the test summary if run with+   `--print-cpu-time`.++## Changes in 1.4.0+ - We now have a manual at https://hspec.github.io/.  The sources are in+   `doc/`.  It's still work in progress.  Contributions are very welcome!+ - The Haddock documentation now indicates the stability of each exposed+   module.  `Test.Hspec` is now considered stable.+ - `hspec` now supports command-line options+   - `--color` can be used to enable/disable colored output+   - `--format` can be used to pick a specific formatter+   - `--html` can be used to produce an HTML report+   - `--maximum-generated-tests` can be used to specify QuickCheck's+     `maxSuccess`+   - `--match` only runs spec items that match a given string+   - `--re-run` only runs spec items that previously failed.  This is+     undocumented,+     experimental and only works within GHCi (use `:reload` / `:main`)!+ - Runner functions exported from `Test.Hspec.Runner` new expect a monadic+   spec.+ - `fromHUnitTest` has been added.  It can be used to run existing HUnit test+   suites with Hspec.+ - The `Example` instance for HUnit `Test`s has been deprecated.+   `fromHUnitTest` can be used instead.  The primary motivation is, that+   `fromHUnitTest` gives more detailed reporting for nested HUnit test suites.+ - `Test.Hspec.Monadic` has been deprecated, all functionality is available+   through one of `Test.Hspec`, `Test.Hspec.Core` or `Test.Hspec.Runner`.+ - More of Hspec's internals are now exposed from `Test.Hspec.Core`+ - All runner functions for the core spec type (aka as non-monadic spec) have+   been deprecated, use e.g. `Test.Hspec.hspec . fromSpecList` instead.  The+   motivation is to provide an API that does not expose colliding names.+ - Some other stuff from `Test.Hspec.Core` that collides with other parts of+   the API has been deprecated.  Compatible alternatives are given in each+   deprecation message.+ - The default formatter now produces less whitespace (#73) + other minor+   improvements+ - The formatter API has been revamped.+ - The exception type is now printed if an example fails due to an exception+   (#50)+ - The number of pending examples is now printed after each test run (#85)+ - `--verbose` has been added (#87)++## Changes in 1.3.0++ - `Test.Hspec` now re-exports the monadic API.  If you still use the+   non-monadic API, you can use `Test.Hspec.Core` as a drop-in replacement.++ - `hspec-expectations`, a set of combinators that allow to express+   expectations about the outcome of code examples, is now included with Hspec.+   Have a look at the [README of `hspec-expectations`]+   (https://github.com/sol/hspec-expectations#readme)+   for a short introduction.++ - `hspec-discover`, a mechanism for automatic spec discovery, is now an+   official part of Hspec.+   Have a look at [`hspec-discover`'s README]+   (https://github.com/hspec/hspec/tree/main/hspec-discover#readme)+   for a short introduction.++## Changes in 1.2.0++ - `hspec` has been removed, and `hspecX` has been renamed to `hspec` (see+   [#71](https://github.com/hspec/hspec/issues/71))++ - `hHspec` now returns a summary of the test run.++ - The time reporting after a test run is not colored anymore.++## Changes in 1.1.3++ - `Test.Hspec` warns now about future changes: It will re-export+   `Test.Hspec.Monadic` in the future.  If you still use the non-monadic API,+   you can either use `Test.Hspec.Core` as a drop-in replacement, or migrate your+   code to the monadic API.++   The monadic API is more stable and easier to use.  Now is a good time to+   switch!++ - `Test.Hspec.Core` is now a proper superset of `Test.Hspec`++## Changes in 1.1.2++ * All descriptions of nested examples are now included in summary for failing+   examples++ * `context` is now an alias for `describe`++## Changes in 1.1.1++ * Specs from Test.Hspec.Monadic has been renamed to Spec.  For backward+   compatibility Specs is still kept as an alias.++## Changes in 1.1.0++### The reason for pending examples is now optional++With this change, both of the following code snippets work.++```haskell+it "some behavior" $+  pending  -- no reason given+```++```haskell+it "some other behavior" $+  pending "some reason"+```++### Hspec does not rely on ExistentialQuantification anymore++### The type used to represent specs is now abstract++This should give more useful error messages when adapting old specs that use+the non-monadic API for `hspec-1.0`/`hspec-1.1`.++### Several internal types and functions have been deprecated++Those are internal functions, and they will be removed/hidden with the next+release.  If you use any of those, update your code.  If you really need them,+[open a ticket](https://github.com/hspec/hspec/issues) and describe your use+case.++## Changes in 1.0.0++### Hspec now re-uses QuickCheck's property function++`Test.Hspec.QuickCheck.property` is now simply a re-exports of+`Test.QuickCheck.property`.  This has the advantage that you do not get a name+collision if you import both, `Test.Hspec.QuickCheck` and `Test.QuickCheck`.++### Better support for nested specs++*NOTE: This is a breaking change to the non-monadic API.  The monadic API is+not affected.*++In some situations parent descriptions for nested specs were not included in+the generated report.  Solving this required a change to the data structure+that is used to represent specs (it was not a proper tree, now it is).++#### Updating specs that use the non-monadic API++The runner functions (`hspec`, `hspecB` and `hspecX`) now take a list of+descriptions.++The following works with `hspec-0.9`, but not with `hspec-1.0`.++```haskell+main = hspecX $+  describe "reverse" [+    it "reverses a list" $+      reverse [1, 2, 3] == [3, 2, 1],++    it "gives the original list, if applied twice" $ property $+      \xs -> reverse (reverse xs) == (xs :: [Int])+  ]++```++For `hspec-1.0`, you need to wrap it into a list.++```haskell+main = hspecX [+    describe "reverse" [+      it "reverses a list" $+        reverse [1, 2, 3] == [3, 2, 1],++      it "gives the original list, if applied twice" $ property $+        \xs -> reverse (reverse xs) == (xs :: [Int])+    ]+  ]+```++Specs consisting of several *describes*, combined with `descriptions`, continue+to work unchanged.  But `descriptions` is now a noop, and it will be removed in+a future release.  So it is a good idea to drop it.++The following works with both `hspec-0.9` and `hspec-1.0`.++```haskell+main = hspecX $ descriptions [  -- descriptions is redundant+    describe "Foo" [+      it "has some behavior" True+    ]+  , describe "Bar" [+      it "has some behavior" True+    ]+  ]+```++But the following is recommended instead.++```haskell+main = hspecX [+    describe "Foo" [+      it "has some behavior" True+    ]+  , describe "Bar" [+      it "has some behavior" True+    ]+  ]+```++### A new monadic API for custom Formatters++For all the details, have a look at the [docs]+(https://hackage.haskell.org/packages/archive/hspec/latest/doc/html/Test-Hspec-Formatters.html).+++### The total time required to run a spec is now included in the summary++In addition to the used CPU time, the total time required to run a spec is now+include in the summary.  This is useful for specs that do non-CPU-intensive+stuff, or fork subprocesses.
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2011-2015 Simon Hengel <sol@typeful.net>+Copyright (c) 2011-2026 Simon Hengel <sol@typeful.net> Copyright (c) 2011-2012 Trystan Spangler <trystan.s@comcast.net> Copyright (c) 2011-2011 Greg Weber <greg@gregweber.info> 
− changelog
@@ -1,1 +0,0 @@-See https://github.com/hspec/hspec/blob/master/CHANGES.markdown
hspec.cabal view
@@ -1,25 +1,26 @@--- This file has been generated from package.yaml by hpack version 0.14.1.+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.39.1. -- -- see: https://github.com/sol/hpack  name:             hspec-version:          2.2.4+version:          2.11.17 license:          MIT license-file:     LICENSE-copyright:        (c) 2011-2015 Simon Hengel,+copyright:        (c) 2011-2026 Simon Hengel,                   (c) 2011-2012 Trystan Spangler,                   (c) 2011 Greg Weber maintainer:       Simon Hengel <sol@typeful.net> build-type:       Simple-cabal-version:    >= 1.10 category:         Testing stability:        experimental bug-reports:      https://github.com/hspec/hspec/issues-homepage:         http://hspec.github.io/+author:           Simon Hengel <sol@typeful.net>+homepage:         https://hspec.github.io/ synopsis:         A Testing Framework for Haskell-description:      Hspec is a testing framework for Haskell. It is inspired by-                  the Ruby library RSpec. Some of Hspec's distinctive features-                  are:+description:      Hspec is a testing framework for Haskell.  Some of Hspec's distinctive+                  features are:                   .                   * a friendly DSL for defining tests                   .@@ -29,10 +30,10 @@                   .                   * automatic discovery of test files                   .-                  The Hspec Manual is at <http://hspec.github.io/>.-+                  The Hspec Manual is at <https://hspec.github.io/>. extra-source-files:-    changelog+    version.yaml+    CHANGES.markdown  source-repository head   type: git@@ -43,45 +44,19 @@   hs-source-dirs:       src   build-depends:-      base == 4.*-    , hspec-core == 2.2.4-    , hspec-discover == 2.2.4-    , hspec-expectations == 0.7.2.*-    , transformers >= 0.2.2.0-    , QuickCheck >= 2.5.1-    , HUnit >= 1.2.5+      QuickCheck >=2.12+    , base ==4.*+    , hspec-core ==2.11.17+    , hspec-discover ==2.11.17+    , hspec-expectations ==0.8.4.*   exposed-modules:       Test.Hspec-      Test.Hspec.Core       Test.Hspec.Discover       Test.Hspec.Formatters-      Test.Hspec.HUnit       Test.Hspec.QuickCheck       Test.Hspec.Runner   other-modules:       Paths_hspec   default-language: Haskell2010--test-suite spec-  type: exitcode-stdio-1.0-  ghc-options: -Wall-  hs-source-dirs:-      test-  main-is: Spec.hs-  other-modules:-      Helper-      HelperSpec-      Test.Hspec.DiscoverSpec-  build-depends:-      base == 4.*-    , hspec-core == 2.2.4-    , hspec-discover == 2.2.4-    , hspec-expectations == 0.7.2.*-    , transformers >= 0.2.2.0-    , QuickCheck >= 2.5.1-    , HUnit >= 1.2.5-    , hspec-    , directory-    , stringbuilder-    , hspec-meta >= 2.2.0-  default-language: Haskell2010+  if impl(ghc)+    cpp-options: -DENABLE_SPEC_HOOK_ARGS
src/Test/Hspec.hs view
@@ -4,29 +4,52 @@ -- Hspec is a testing framework for Haskell. -- -- This is the library reference for Hspec.--- The <http://hspec.github.io/ User's Manual> contains more in-depth+-- The <https://hspec.github.io/ User's Manual> contains more in-depth -- documentation. module Test.Hspec ( -- * Types   Spec , SpecWith-, Arg , Example+, Arg  -- * Setting expectations , module Test.Hspec.Expectations  -- * Defining a spec-, describe-, context , it , specify+, describe+, context , example-, pending-, pendingWith , parallel+, sequential , runIO +-- * Pending spec items+-- |+-- During a test run a /pending/ spec item is:+--+-- 1. not executed+--+-- 1. reported as \"pending\"+, pending+, pendingWith+, xit+, xspecify+, xdescribe+, xcontext++-- * Focused spec items #focus#+-- |+-- During a test run, when a spec contains /focused/ spec items, all other spec+-- items are ignored.+, focus+, fit+, fspecify+, fdescribe+, fcontext+ -- * Hooks , ActionWith , before@@ -34,6 +57,7 @@ , beforeWith , beforeAll , beforeAll_+, beforeAllWith , after , after_ , afterAll@@ -41,6 +65,11 @@ , around , around_ , aroundWith+, aroundAll+, aroundAll_+, aroundAllWith+, mapSubject+, ignoreSubject  -- * Running a spec , hspec@@ -65,11 +94,3 @@ -- >   putStrLn example :: Expectation -> Expectation example = id---- | @context@ is an alias for `describe`.-context :: String -> SpecWith a -> SpecWith a-context = describe---- | @specify@ is an alias for `it`.-specify :: Example a => String -> a -> SpecWith (Arg a)-specify = it
− src/Test/Hspec/Core.hs
@@ -1,18 +0,0 @@--- | Stability: unstable-module Test.Hspec.Core {-# DEPRECATED "use \"Test.Hspec.Core.Spec\" instead" #-} (-  module Test.Hspec.Core.Spec--- * Deprecated functions-, describe-, it-) where--import           Test.Hspec.Core.Spec hiding (describe, it)---{-# DEPRECATED describe "use `specGroup` instead" #-}-describe :: String -> [SpecTree a] -> SpecTree a-describe = specGroup--{-# DEPRECATED it "use `specItem` instead" #-}-it :: Example a => String -> a -> SpecTree (Arg a)-it = specItem
src/Test/Hspec/Discover.hs view
@@ -1,3 +1,5 @@+{-# OPTIONS_GHC -fno-warn-deprecations #-}+{-# OPTIONS_HADDOCK hide #-} {-# LANGUAGE FlexibleInstances #-} module Test.Hspec.Discover {-# WARNING   "This module is used by @hspec-discover@.  It is not part of the public API and may change at any time."@@ -11,17 +13,9 @@ , module Prelude ) where -import           Prelude hiding (mapM)-import           Control.Applicative-import           Data.Maybe-import           Data.List-import           Data.Traversable-import           Control.Monad.Trans.State- import           Test.Hspec.Core.Spec import           Test.Hspec.Core.Runner-import           Test.Hspec.Formatters-import           Test.Hspec.Core.Util (safeTry)+import           Test.Hspec.Core.Formatters.V1  class IsFormatter a where   toFormatter :: a -> IO Formatter@@ -38,62 +32,4 @@   hspecWith defaultConfig {configFormatter = Just f} spec  postProcessSpec :: FilePath -> Spec -> Spec-postProcessSpec = locationHeuristicFromFile--locationHeuristicFromFile :: FilePath -> Spec -> Spec-locationHeuristicFromFile file spec = do-  mInput <- either (const Nothing) Just <$> (runIO . safeTry . readFile) file-  let lookupLoc = maybe (\_ _ _ -> Nothing) (lookupLocation file)  mInput-  runIO (runSpecM spec) >>= fromSpecList . addLoctions lookupLoc--addLoctions :: (Int -> Int -> String -> Maybe Location) -> [SpecTree a] -> [SpecTree a]-addLoctions lookupLoc = map (fmap f) . enumerate-  where-    f :: ((Int, Int), Item a) -> Item a-    f ((n, total), item) = item {itemLocation = itemLocation item <|> lookupLoc n total (itemRequirement item)}--type EnumerateM = State [(String, Int)]--enumerate :: [SpecTree a] -> [Tree (ActionWith a) ((Int, Int), (Item a))]-enumerate tree = (mapM (traverse addPosition) tree >>= mapM (traverse addTotal)) `evalState` []-  where-    addPosition :: Item a -> EnumerateM (Int, Item a)-    addPosition item = (,) <$> getOccurrence (itemRequirement item) <*> pure item--    addTotal :: (Int, Item a) -> EnumerateM ((Int, Int), Item a)-    addTotal (n, item) = do-      total <- getTotal (itemRequirement item)-      return ((n, total), item)--    getTotal :: String -> EnumerateM Int-    getTotal requirement = do-      gets $ fromMaybe err . lookup requirement-      where-        err = error ("Test.Hspec.Discover.getTotal: No entry for requirement " ++ show requirement ++ "!")--    getOccurrence :: String -> EnumerateM Int-    getOccurrence requirement = do-      xs <- get-      let n = maybe 1 succ (lookup requirement xs)-      put ((requirement, n) : filter ((/= requirement) . fst) xs)-      return n--lookupLocation :: FilePath -> String -> Int -> Int -> String -> Maybe Location-lookupLocation file input n total requirement = loc-  where-    loc :: Maybe Location-    loc = Location file <$> line <*> pure 0 <*> pure BestEffort--    line :: Maybe Int-    line = case occurrences of-      xs | length xs == total -> Just (xs !! pred n)-      _ -> Nothing--    occurrences :: [Int]-    occurrences = map fst (filter p inputLines)-      where-        p :: (Int, String) -> Bool-        p = isInfixOf (show requirement) . snd--    inputLines :: [(Int, String)]-    inputLines = zip [1..] (lines input)+postProcessSpec _ = id
src/Test/Hspec/Formatters.hs view
@@ -1,2 +1,8 @@-module Test.Hspec.Formatters (module Test.Hspec.Core.Formatters) where-import           Test.Hspec.Core.Formatters+{-# OPTIONS_GHC -fno-warn-deprecations #-}+-- |+-- Stability: deprecated+module Test.Hspec.Formatters+{-# DEPRECATED "Use [Test.Hspec.Api.Formatters.V1](https://hackage.haskell.org/package/hspec-api/docs/Test-Hspec-Api-Formatters-V1.html) instead." #-}+(module Test.Hspec.Core.Formatters.V1)+where+import           Test.Hspec.Core.Formatters.V1
− src/Test/Hspec/HUnit.hs
@@ -1,24 +0,0 @@-module Test.Hspec.HUnit {-# DEPRECATED "use \"Test.Hspec.Contrib.HUnit\" from package @hspec-contrib@ instead" #-}-(--- * Interoperability with HUnit-  fromHUnitTest-) where--import           Test.Hspec.Core.Spec-import           Test.HUnit (Test (..))---- |--- Convert a HUnit test suite to a spec.  This can be used to run existing--- HUnit tests with Hspec.-fromHUnitTest :: Test -> Spec-fromHUnitTest t = case t of-  TestList xs -> mapM_ go xs-  x -> go x-  where-    go :: Test -> Spec-    go t_ = case t_ of-      TestLabel s (TestCase e) -> it s e-      TestLabel s (TestList xs) -> describe s (mapM_ go xs)-      TestLabel s x -> describe s (go x)-      TestList xs -> describe "<unlabeled>" (mapM_ go xs)-      TestCase e -> it "<unlabeled>" e
src/Test/Hspec/QuickCheck.hs view
@@ -1,22 +1,19 @@-{-# LANGUAGE CPP #-}-#if MIN_VERSION_base(4,8,1)-#define HAS_SOURCE_LOCATIONS-{-# LANGUAGE ImplicitParams #-}-#endif+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE ConstraintKinds #-} module Test.Hspec.QuickCheck ( -- * Params-  modifyMaxSuccess+  modifyArgs+, modifyMaxSuccess , modifyMaxDiscardRatio , modifyMaxSize+, modifyMaxShrinks  -- * Shortcuts , prop+, xprop+, fprop ) where -#ifdef HAS_SOURCE_LOCATIONS-import           GHC.Stack-#endif- import           Test.Hspec import           Test.QuickCheck import           Test.Hspec.Core.QuickCheck@@ -27,11 +24,37 @@ -- -- is a shortcut for ----- > it ".." $ property $--- >   ..-#ifdef HAS_SOURCE_LOCATIONS-prop :: (?loc :: CallStack, Testable prop) => String -> prop -> Spec-#else-prop :: (Testable prop) => String -> prop -> Spec-#endif+-- @+-- `it` ".." $ `property` $+--   ..+-- @+prop :: (HasCallStack, Testable prop) => String -> prop -> Spec prop s = it s . property+++-- |+-- > xprop ".." $+-- >   ..+--+-- is a shortcut for+--+-- @+-- `xit` ".." $ `property` $+--   ..+-- @+xprop :: (HasCallStack, Testable prop) => String -> prop -> Spec+xprop s = xit s . property+++-- |+-- > fprop ".." $+-- >   ..+--+-- is a shortcut for+--+-- @+-- `fit` ".." $ `property` $+--   ..+-- @+fprop :: (HasCallStack, Testable prop) => String -> prop -> Spec+fprop s = fit s . property
− test/Helper.hs
@@ -1,17 +0,0 @@-module Helper (-  module Test.Hspec.Meta-, withFileContent-) where--import           Control.Exception (finally)-import           System.Directory-import           System.IO-import           Test.Hspec.Meta--withFileContent :: String -> (FilePath -> IO a) -> IO a-withFileContent input action = do-  dir <- getTemporaryDirectory-  (file, h) <- openTempFile dir "temp"-  hPutStr h input-  hClose h-  action file `finally` removeFile file
− test/HelperSpec.hs
@@ -1,18 +0,0 @@-module HelperSpec (main, spec) where--import           Helper-import           System.IO.Error (isDoesNotExistError)--main :: IO ()-main = hspec spec--spec :: Spec-spec = do-  describe "withFileContent" $ do-    it "creates a file with specified content and runs specified action" $ do-      withFileContent "foo" $ \file -> do-        readFile file `shouldReturn` "foo"--    it "removes file after action has been run" $ do-      file <- withFileContent "foo" return-      readFile file `shouldThrow` isDoesNotExistError
− test/Spec.hs
@@ -1,1 +0,0 @@-{-# OPTIONS_GHC -F -pgmF hspec-meta-discover #-}
− test/Test/Hspec/DiscoverSpec.hs
@@ -1,74 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# OPTIONS_GHC -fno-warn-deprecations #-}-module Test.Hspec.DiscoverSpec (main, spec) where--import           Helper-import           Data.String-import           Data.String.Builder--import qualified Test.Hspec.Core.Spec as H-import           Test.Hspec.Core (Tree(..), Item(..), Location(..), LocationAccuracy(..), runSpecM)-import qualified Test.Hspec.Discover as H--infix 1 `shouldHaveLocation`--shouldHaveLocation :: Item a -> (String, Int) -> Expectation-item `shouldHaveLocation` (src, line) = itemLocation item `shouldBe` Just (Location src line 0 BestEffort)--removeLocations :: H.SpecWith a -> H.SpecWith a-removeLocations = H.mapSpecItem_ (\item -> item{H.itemLocation = Nothing})--main :: IO ()-main = hspec spec--spec :: Spec-spec = do-  describe "postProcessSpec" $ do-    it "adds heuristic source locations" $ do-      let c = build $ do-            ""-            strlit "foo"-            ""-            strlit "bar"-            ""-            strlit "baz"-      withFileContent c $ \src -> do-        [Leaf item1, Leaf item2, Leaf item3] <- runSpecM . H.postProcessSpec src . removeLocations $ do-          H.it "foo" True-          H.it "bar" True-          H.it "baz" True-        item1 `shouldHaveLocation` (src, 2)-        item2 `shouldHaveLocation` (src, 4)-        item3 `shouldHaveLocation` (src, 6)--    context "when same requirement is used multiple times" $ do-      it "assigns locations sequentially" $ do-        let c = build $ do-              strlit "foo"-              strlit "foo"-              strlit "foo"-        withFileContent c $ \src -> do-          [Leaf item1, Leaf item2, Leaf item3] <- runSpecM . H.postProcessSpec src . removeLocations $ do-            H.it "foo" True-            H.it "foo" True-            H.it "foo" True-          item1 `shouldHaveLocation` (src, 1)-          item2 `shouldHaveLocation` (src, 2)-          item3 `shouldHaveLocation` (src, 3)--      context "when a requirement occurs more often in the spec tree than in the source file" $ do-        it "assigns Nothing" $ do-          let c = build $ do-                strlit "foo"-                strlit "foo"-          withFileContent c $ \src -> do-            [Leaf item1, Leaf item2, Leaf item3] <- runSpecM . H.postProcessSpec src . removeLocations $ do-              H.it "foo" True-              H.it "foo" True-              H.it "foo" True-            itemLocation item1 `shouldBe` Nothing-            itemLocation item2 `shouldBe` Nothing-            itemLocation item3 `shouldBe` Nothing-  where-    strlit :: String -> Builder-    strlit = fromString . show
+ version.yaml view
@@ -0,0 +1,7 @@+version: &version 2.11.17+synopsis: A Testing Framework for Haskell+author: Simon Hengel <sol@typeful.net>+maintainer: Simon Hengel <sol@typeful.net>+category: Testing+stability: experimental+homepage: https://hspec.github.io/