shellspec/shellspec

View on GitHub
CHANGELOG.md

Summary

Maintainability
Test Coverage
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.28.1] - 2021-01-11

### Changed

- Improved documentation. Thanks to Yohei Kawahara (#173).

### Fixed

- bash: Fixed an unexpected error message in self-executable specfile.
- Fixed a bug that test command cannot redefine when using "when run source"
- Fixed a bug when specified relative tmp directory path.
- Fixed option parsing

## [0.28.0] - 2021-01-05

### Added

- Added `BeforeEach` / `AfterEach` as synonym for `Before` / `After`.
- Added `FORCE_COLOR` environment variable.
- Added `--tmpdir` option.
- Added `--execdir` option to specify the directory for specfile execution.
- Added `-c` (`--chdir`) and `-C` (`--directory`) options to change directory at startup.
- Added path syntax (`*/` and `**/`) and `-L` (`--dereference`) option to match recursive directories.
- Added `--helperdir` to specify the location of `spec_helper` etc.
- Added the environment variable `SHELLSPEC_HELPERDIR` to indicate the location of `spec_helper` etc.
- Added `--reportdir` and `--covdir` options.
- Added `-O` (`--option`) option.
- Added `-I` (`--load-path`) option.
- Added `<module>_precheck` callback and some helper functions to `spec_helper` for pre-checking.
- Added `<module>_loaded` callback to be called after `spec_helper` loading.

### Changed

- Replaced with a new option parser [getoptions](https://github.com/ko1nksm/getoptions) which supports the standard option syntax.
- Replaced `--keep-tempdir` with `--keep-tmpdir`.
- Specifying a file in the shellspec's argument is now ignored if it does not match `--pattern`.
- Filled in system-out and system-err in junit xml.
- Allowed run the tests from any subdirectory.
- The `-D` option has been deprecated (Replace with the `--default-path` option).
- The environment variable `SHELLSPEC_SPECDIR` has been deprecated since there is not always a single directory for specfiles.
- Rename `.shellspec-profiler.log` to `profiler.log` for profiler log.
- Accept `banner.md` as a banner file
- `Include` and `import` (`shellspec_import`) can now pass arguments.
- The delimiter of the environment variable `SHELLSPEC_REQUIRES` has been changed from `:` to space.
- Improved documentation. Thanks to ldicarlo (#117, #119), Antoni Marcinek (#120, #139), Stuart R. Jefferys (#155), Leon Stafford (#159).

### Removed

- Removed `--kcov-common-options` option.

### Fixed

- bash 4.1 - 4.3: Fixed a bug that `run script` could not get the exit status.
- zsh < 4.2.0: Fixed a bug when extendedglob is enabled.
- Fixed possibility of I/O error in satisfy matcher (GitHub Actions only?).
- Fixed a bug in which zsh on macOS occasionally exits with exit code 147 (SIGCONT).
- Fixed several bugs related to the Windows path for busybox-w32.
- Fixed a bug when using metacharacters for tags.

## [0.27.2] - 2020-10-28

### Fixed

- Fixed a bug that didn't cause an error if there are fixed examples.

## [0.27.1] - 2020-09-30

### Removed

- Drop support for posh 0.8.5 due to signal handling broken.

### Fixed

- Fixed gray color.
- Fixed broken `--warning-as-failure`.
- Fixed a bug that can not CTRL-C with posh.

## [0.27.0] - 2020-09-25

### Added

- **Added `be exported` and `be readonly` matchers.**
- Added `%printf` and `%sleep` directives.

### Changed

- **Improved TAP formatter.**
  - Supports `TODO` and `SKIP` directives.
  - Use `Bail out!` on error.
  - Added error details.
- `BeforeAll` / `AfterAll`: Avoid crashes due to hook errors.
- `Before` / `After`: Improved hook error handling.
- `BeforeCall` / `AfterCall`, `BeforeRun` / `AfterRun`: Minor changes.

### Removed

- Drop support for dash 0.5.3 due to unstable bug.
- Drop support for busybox < 1.20.0 due to unstable bug.

### Fixed

- Fixed a bug that "Parameter is not set" error in word modifier.
- Fixed a bug that satisfy matcher succeed even syntax error.
- Fixed a bug that can not CTRL-C with parallel execution on zsh.
- shellspec-syntax-check.sh: Some minor bug fixes.

## [0.26.1] - 2020-07-13

### Added

- **Added `--docker` option.** (EXPERIMENTAL)

## [0.26.0] - 2020-07-12

### Added

- **Added `Mock` helper (command-based mock).**
- **Added `%preserve` directive.**
- **Added `--sandbox`, `--sandbox-path` option.**
- Added `--path` option.

### Fixed

- Workaround when the Windows version of `sort.exe` is executed.

## [0.25.0] - 2020-06-21

### Added

- **Coverage support for zsh and ksh.** (#62)
- Respect `NO_COLOR` environment variable.
- Support [busybox-w32](https://frippery.org/busybox/) ash for windows.
- **Added `Assert` expectation to assert side effects of system environment.**
- Added `Dump` helper - dump stdout, stderr and status for debugging.
- Added `line` and `word` subject. (`of stdout (output)` can be omitted now)
- Added `--log-file` option to specify log file for `%logger` and trace.
- **Implement `--xtrace` (`--xtrace-only`) feature.**

### Changed

- Upgrade to alpine 3.12 for docker image and officially release `shellspec/kcov` docker image.
- Separate a file descriptor for reporting and stdout to able to use `echo` in specfile.
- Minor specification change of `result` modifier and `satisfy` matcher.
- `-r` option is now a short option for `--repair`, not `--require`.
- Use [debian/eol(https://hub.docker.com/r/debian/eol/) docker images for old debian tests.

### Fixed

- Before/After hooks should not consume stdin data (#82)

## [0.24.3] - 2020-06-06

### Fixed

- Fixes `BeforeAll` / `AfterAll` to share states

## [0.24.2] - 2020-05-27

### Fixed

- Fixed a bug "SHELLSPEC_GROUP_ID: unbound variable"
- Fixes when ran by "bash shellcpec" and "ksh shellspec"

## [0.24.1] - 2020-05-22

### Fixed

- Fixed broken `Todo`.
- Fixed a bug that caused an error when "--kcov" was specified and /dev/tty no be writable. (#67 Alexander Reitzel)
- Fixed a bug when enabled extendedglob for zsh.

## [0.24.0] - 2020-05-11

### Added

- Add `BeforeAll` and `AfterAll`. (#7)
- Expand parameter within Data helper. (#57)
- Add test for [GWSH shell](https://github.com/hvdijk/gwsh).
- Add manual test for OpenBSD ksh on OpenBSD 6.6.
- Add manual test for NetBSD sh on NetBSD 9.0.

### Removed

- Removed `match` matcher. Use `match pattern` matcher instead.
- Remove tests for unstable old shells (Bus Error, Bad address, Memory fault, etc).
  - CI test for pdksh 5.2.14 on FreeBSD.
  - Docker test for pdksh 5.2.14 on Debian 2.2r7.
  - Docker test for ksh 93q on Debian 3.1r8.
- Remove tests for FreeBSD 13.0-current (Unstable due to work in progress).

## [0.23.0] - 2020-04-02

### Added

- New **quick execution** and related options (`--quick`, `--repair`, `--next`).
- New **failures formatter**.
- Support **self-executable specfile**. (#40)
- Add `--pending-message` and `--quiet` option.
- Add short options for focus and filters.
- Add `-w` short options for `--warning-as-failure`.
- Add `--boost` (joke) option.
- Reporter: Displays comments of 'temporary skip' and 'temporary pending'.
- Support windows line endings. (#45)
- Syntax check for missing `End` of parameters.
- shellspec --init: generate ignore file for cvs.

### Changed

- Run the specfile specified by arguments even not end with `_spec.sh`.
- Formatter: Change fixed color.
- Formatter: Change mark for fixed and pending of progress formatter.

### Fixed

- Fixed `--pattern` option to avoid syntax error.
- Return exit status code on the specfile properly.
- Fixed a bug that `start with` and `end with` match glob pattern.
- Formatter: Fixed not display correctly of documentation formatter when description is empty.
- Fixed an issue installer.sh fails in some environments. (#43)

### Deprecated

- Use `--require` long option instead of `-r` short option.

## [0.22.0] - 2020-02-22

### Added

- Improve kcov version detection.
- Colored TAP formatter. (#34 Kylie McClain)
- Added `--show-deprecations` and  `--hide-deprecations` options.

### Changed

- New **kcov integration**.
  - Do not create translated specfile in project directory.
  - Suppress unnecessary coverage measurement to improve testing speed.
  - Added `--coverage-report-info` to add extra information to coverage report.
- make install compatible with BSD and macOS.
- Suppress unnecessary before/after hooks of skipped examples.
- install.sh: Install to under $HOME/.local by default
- Use $HOME/.config if not defined XDG_CONFIG_HOME

### Deprecated

- `--kcov-common-options` is deprecated, merge into `--kcov-options`.
- Deprecates the `match` matcher due to cause many syntax errors. Use `match pattern` matcher instead.

### Fixed

- Fixed broken test in docker on Linux.
- Fixed `--example` option to avoid syntax error.
- Append to LOGFILE instead of overwriting.

## [0.21.0] - 2020-01-30

### Added

- Provide **docker images**.
- Provide **distribution archive**.
- Available ArchLinux package. (#15 Damien Flament)

### Changed

- docs: Improve English quality. (#16 Damien Flament)

## [0.20.2] - 2019-08-24

### Fixed

- Fixed wrong SHELLSPEC_TMPBASE
- Fixed for bug that some shell can not call external command same name as builtin.

## [0.20.1] - 2019-08-19

### Fixed

- Fixed for solaris.

## [0.20.0] - 2019-08-18

### Added

- Add **parameterized example**. (`Parameters` helper)
- Add `Set` helper for set shell option
- Add `BeforeCall` / `AfterCall` helper.
- Add `BeforeRun` / `AfterRun` helper.
- Use `hexdump` if `od` does not exist.

### Changed

- Redesign `run` evaluation. [**major breaking change**]
  - Change the behavior to close to the `run` of bats.
  - New `run` evaluation allows the execution of functions and commands.
  - Use `run command` to execute only the commands. (old `run` -> use `run command`)
  - Merge `invoke` evaluation to `run` evaluation. (old `invoke` -> use `run`)
  - Merge `execute` evaluation to `run` evaluation. (old `execute` -> use `run source`)
- Export %const values to the translation process

### Removed

- Drop support for posh 0.10.2 and similar versions as the handling of the shell flag is broken.

### Fixed

- Fixed bug for related with tag.
- Fixed bug where coverage might not work on macOS.

## [0.19.1] - 2019-07-23

### Added

- Support install via make, bpkg, basher

## [0.19.0] - 2019-07-22

### Added

- Add installer (It has not been officially released, but you can used it already).
- Testing for **single script file** (Add `execute` evaluation, `Intercept` and `__SOURCED__` variable).
- Add `--keep-tempdir` option.
- Add `Data < <FILE>` syntax.

### Removed

- Drop support for busybox 1.1.3 and similar versions as it can not redefine builtin commands.
- Drop support for ash 0.3.8 and similar versions as it can not use retrun in sourced script.
- Remove `call`/`invoke` `<STRING>` syntax.

## [0.18.0] - 2019-07-09

### Added

- **Profiler feature** (`--profile`)
- Time attribute for JUnit XML.

## [0.17.0] - 2019-07-06

### Added

- **Coverage reporting**.
- Add `--fail-low-coverage` option.

## [0.16.0] - 2019-07-03

### Added

- **Coverage** support (kcov integration)
- Add **JUnit formatter** and **report generator**.
- Add `--warning-as-failure` option.
- Support [Unofficial Bash Strict Mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/).
- Support for [Schily Bourne Shell](http://schilytools.sourceforge.net/bosh.html) (`bosh`, `pbosh`).

### Changed

- Change `--skip-message none` to `--skip-message verbose`.

### Removed

- Remove `--warnings` option.

## [0.15.0] - 2019-05-26

### Added

- Add `be empty directory` (alias: `be empty dir`) matcher.

### Changed

- Rename `be empty` matcher to `be empty file` matcher. [breaking change]

### Fixed

- Fixed bug that `be empty` (renamed to `be empty file`) matcher matches not exists file, etc.
- Ensure call & invoke start with errno zero (#2 Rowan Thorpe)

## [0.14.0] - 2019-05-15

### Added

- Add `--random` option.

### Changed

- Improve `--example`, `--tag` option.

## [0.13.1] - 2019-05-13

### Fixed

- Fixed bug when --dry-run mode.
- Fixed documentation formatter.

## [0.13.0] - 2019-05-12

### Added

- Add `--list examples:id` option.
- Add `*_spec.sh:@ID` syntax the specify id with the filename.
- Add `--pattern`, `--example`, `--tag`, `--default-path` filter option.

### Changed

- Change `Logger` Helper to `%logger` directive.
- Merge `--list-specfiles`, `--list-examples` options to `--list` option.
- Redesign reporter to improve performance, maintainability.

## [0.12.0] - 2019-04-26

### Added

- Add `--list-specfiles`, `--list-examples` option.
- Add `--env-from` option.
- Add tests that for array if supported shells.

### Changed

- Change `--count` option output includes the number of specfiles.
- Change to the banner show only on shellspec-runner.

## [0.11.3] - 2019-04-24

### Fixed

- Fixed broken parallel executor.

## [0.11.2] - 2019-04-23

### Fixed

- Fixed bug that does not work with zsh 5.4.2.

## [0.11.1] - 2019-04-21

### Fixed

- Fixed ignored specified line number when parallel execution.
- Fixed documentation formatter when supplied multiple specfiles.

## [0.11.0] - 2019-04-20

### Added

- Run **the example by line number**. (`*_spec.sh:#`)
- Run **focused groups / examples**. (`fDescribe`, `fContext`, `fExample`, `fSpecify`, `fIt`)
- Add `--count` option for count the number of examples without running.

## [0.10.0] - 2019-04-17

### Added

- Support **parallel execution**. (`--jobs` option)

### Changed

- Separete syntax checker into tools.
- Improve syntax checker.
- Improve error handling.
- Improve ctrl-c handling.

### Removed

- Remove `Def` helper. (use `%putsn`, `%puts` directive instead)

## [0.9.0] - 2019-03-30

### Added

- Add `--syntax-check` option for syntax check of the specfile.

### Changed

- Change timing of loading external script by 'Include'. [breaking change]

### Fixed

- Fix for translation speed slowdown.

### Removed

- Remove shorthand of the variable subject.

## [0.8.0] - 2019-03-26

### Added

- Add `Constant definition`.
- Add `Data` helper, `Embedded text`.
- Add `Def` helper.
- Add `Logger` helper.
- Add `result` modifier.
- Add `Include` helper.
- Add shorthand for `function` subject and `variable` subject.
- Add failed message for `Before`/`After` each hook.

### Changed

- Change behavior of `line` and `lines` modifier to like "grep -c" not "wc -l".
- Change `function` subject to alias for `value` subject.
- Improve handling unexpected errors.
- Improve examples.

### Removed

- Remove `It` statement and change `It` is alias of `Example` now.
- Remove `Set` / `Unset` helper.
- Remove `Debug` helper.
- Remove `string` subject.
- Remove `exit status` subject. (use `status` subject)

## [0.7.0] - 2019-03-08

### Added

- Added `lines` modifier.

## [0.6.0] - 2019-02-19

### Added

- Added `match` matcher.

## [0.5.0] - 2019-02-06

### Added

- Initial public release.

[Unreleased]: https://github.com/shellspec/shellspec/compare/0.28.1...HEAD
[0.28.1]: https://github.com/shellspec/shellspec/compare/0.28.0...0.28.1
[0.28.0]: https://github.com/shellspec/shellspec/compare/0.27.2...0.28.0
[0.27.2]: https://github.com/shellspec/shellspec/compare/0.27.1...0.27.2
[0.27.1]: https://github.com/shellspec/shellspec/compare/0.27.0...0.27.1
[0.27.0]: https://github.com/shellspec/shellspec/compare/0.26.1...0.27.0
[0.26.1]: https://github.com/shellspec/shellspec/compare/0.26.0...0.26.1
[0.26.0]: https://github.com/shellspec/shellspec/compare/0.25.0...0.26.0
[0.25.0]: https://github.com/shellspec/shellspec/compare/0.24.3...0.25.0
[0.24.3]: https://github.com/shellspec/shellspec/compare/0.24.2...0.24.3
[0.24.2]: https://github.com/shellspec/shellspec/compare/0.24.1...0.24.2
[0.24.1]: https://github.com/shellspec/shellspec/compare/0.24.0...0.24.1
[0.24.0]: https://github.com/shellspec/shellspec/compare/0.23.0...0.24.0
[0.23.0]: https://github.com/shellspec/shellspec/compare/0.22.0...0.23.0
[0.22.0]: https://github.com/shellspec/shellspec/compare/0.21.0...0.22.0
[0.21.0]: https://github.com/shellspec/shellspec/compare/0.20.2...0.21.0
[0.20.2]: https://github.com/shellspec/shellspec/compare/0.20.1...0.20.2
[0.20.1]: https://github.com/shellspec/shellspec/compare/0.20.0...0.20.1
[0.20.0]: https://github.com/shellspec/shellspec/compare/0.19.0...0.20.0
[0.19.1]: https://github.com/shellspec/shellspec/compare/0.19.0...0.19.1
[0.19.0]: https://github.com/shellspec/shellspec/compare/0.18.0...0.19.0
[0.18.0]: https://github.com/shellspec/shellspec/compare/0.17.0...0.18.0
[0.17.0]: https://github.com/shellspec/shellspec/compare/0.16.0...0.17.0
[0.16.0]: https://github.com/shellspec/shellspec/compare/0.15.0...0.16.0
[0.15.0]: https://github.com/shellspec/shellspec/compare/0.14.0...0.15.0
[0.14.0]: https://github.com/shellspec/shellspec/compare/0.13.1...0.14.0
[0.13.1]: https://github.com/shellspec/shellspec/compare/0.13.0...0.13.1
[0.13.0]: https://github.com/shellspec/shellspec/compare/0.12.0...0.13.0
[0.12.0]: https://github.com/shellspec/shellspec/compare/0.11.3...0.12.0
[0.11.3]: https://github.com/shellspec/shellspec/compare/0.11.2...0.11.3
[0.11.2]: https://github.com/shellspec/shellspec/compare/0.11.1...0.11.2
[0.11.1]: https://github.com/shellspec/shellspec/compare/0.11.0...0.11.1
[0.11.0]: https://github.com/shellspec/shellspec/compare/0.10.0...0.11.0
[0.10.0]: https://github.com/shellspec/shellspec/compare/0.9.0...0.10.0
[0.9.0]: https://github.com/shellspec/shellspec/compare/0.8.0...0.9.0
[0.8.0]: https://github.com/shellspec/shellspec/compare/0.7.0...0.8.0
[0.7.0]: https://github.com/shellspec/shellspec/compare/0.6.0...0.7.0
[0.6.0]: https://github.com/shellspec/shellspec/compare/0.5.0...0.6.0
[0.5.0]: https://github.com/shellspec/shellspec/commits/0.5.0