* ava-files should honor a `cwd` option.
* Properly resolve test files in non-watch mode.
* update test/watcher.js to reflect new AvaFiles Api
* extract ava-files to it's own thing
* refactor watcher tests
* move some methods from watcher to AvaFiles
* add some tests for ava-files
* add more test coverage
* fix linter error after merge
* PR Feedback
* use cross-platform split
Fixes#699. The watcher tracks how many failures (actual failures, but also
rejections and uncaught exceptions) occurred for each test file. After each run,
if there are failures from files that were not rerun, the count is added to the
logger output.
Since #713 the API no longer emits 'dependencies' events. These are emitted
instead by the RunStatus, which can be obtained by listening to the 'test-run'
event on the API.
The watcher tests use a mocked API object which wasn't updated to reflect these
changes. Consequently dependency tracking was broken since #713 was merged.
This commit fixes the watcher and the corresponding tests. I've also added an
integration test which does not rely on mocking, helping us detect breakage
sooner.
* display current time when mini & verbose reporters finish
I'm using toLocaleTimeString() which works even back to Node.js 0.10. Forcing a
24-hour clock because we're geeks.
* watcher: restart logger on subsequent runs
The CLI starts the logger so the watcher shouldn't reset it on its first run.
Restart the logger after resetting, this allows the mini reporter to render its
spinner.
* better api.run stub in watcher test
Return an object for the runStatus, add assertions to verify this object is
passed to logger.finish()
* assert that r/rs reruns all tests
* clear mini reporter in watch mode
Clear the mini reporter unless the previous run had failures, or "r\n" was
entered on stdin.
* consistent empty lines in finish output
Always print two empty lines before each error/rejection/exception when the mini
and verbose reporters finish. Remove trailing whitespace from stack traces.
Always print an empty line after the finish output.
Add a test helper to more easily compare line output, with useful debug
information. At the moment this new helper is only used for failing tests.
* print line if reporter was not be cleared
Watch mode won't clear the mini reporter if there were errors, or "r\n" was
entered on stdin. The verbose reporter can't be cleared at all. To improve the
separation between multiple test runs, write a horizontal line when starting a
new test run and the reporter was not cleared.
* remove debug output from cli test
* watcher: correctly test if source is in the cwd
Make sure the path starts with ../ (after platform-specific slashes have been
corrected). Clarify existing test and add a case where the source starts with
two dots but is still in the current working directory.
* change handling of negated source patterns
Fixes#614. Allow negated source patterns to be specified without unsetting the
default negation patterns.
Allow source patterns to override the default negation patterns if they start
with one of the ignored directories.
* update watch mode docs
* Suggest `watch:test` as the npm script
* Document how to always enable watch mode using the ava section in package.json
* Recommend source patterns are configured through the ava section in package.json
* Suggest using the verbose reporter when debugging
* extract files processing from api
* extract test-data class from API
* fix breakage from rebase
* pass testData to reporters in every method
* rename testData to runStatus
* runStatus.listenToTestRun => runStatus.observeFork
* rename test-data.js to run-status.js
* fix failing watcher test
The watcher used dir**/*.js as the recursive pattern when the initial pattern
matched a directory. This should be dir/**/*.js instead. Before this fix tests
were matched as sources, causing all tests to be rerun.
A second argument can be passed to Api#run(). If true the tests will be run
in exclusive mode, regardless of whether exclusive tests are detected.
The Api now remits the 'stats' event from the forks.
The watcher keeps track of exclusive tests. If all test files that contained
exclusive tests need to be rerun it runs them without forcing exclusive mode.
This means the exclusivity is determined by the tests themselves.
If a test file, containing exclusive tests, is not one of the files being rerun,
it forces exclusive mode. This ensures only exclusive tests are run in the
changed files, making .only sticky.
If all test files that contained exclusive tests are removed, sticky mode is
disabled. The same happens if there are no more exclusive tests after a run.
Fixes#593.
Explicitly normalize test file paths as they're discovered in `api.js`. They end
up being normalized implicitly in `fork.js` but it's saner if test file paths
always use backslashes on Windows.
Assume test file and source patterns use slashes. Ensure such when recursing
directories in `api.js` and when matching files in `watcher.js`.
Fix watcher tests to emit dependencies and chokidar changes using
platform-specific paths.
Test workers keep track of test dependencies for all registered file extensions.
These are sent back to the Api as part of the 'teardown' event, ensuring they're
captured irrespective of whether tests passed.
The watcher rejects any dependencies that are not source files, matching how
Chokidar watches for source file modifications. It maintains a list of source
dependencies for each test file.
The watcher will find the test files that depend on modified source files and
rerun those (along with any other modified test files). If any modified source
files cannot be mapped to test files all tests are rerun. This is necessary
because only `require()` dependencies are tracked, not file access.
Use a class-based approach so state can be kept on the instances, reducing the
need to pass it through function calls and closures. Extract debouncer into
a separate class (kept within the module).
Rather than passing process.stdin the CLI is now responsible for starting
observation.
When 'rs' is entered directly rerun all tests, without passing through the
change detection.
Reset the logger before every test run, including the first.