0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-04 09:57:11 -05:00
deno/tests/specs
Óscar Otero 1287739ddf
feat(fmt): support vto and njk extensions (#25831)
Fixes #25802

markup_fmt plugin supports some HTML-like formats like Angular, Jinja,
Twig, Nunjucks or Vento, that are not supported by `deno fmt`. This PR
adds support for the extensions `njk` (Nunjucks) and `vto` (Vento).
Angular doesn't have a custom extension (it uses `html` afaik) and Jinja
and Twig are template engines written in Python and PHP respectively so
it doesn't make sense to be supported by Deno.
2024-09-23 14:27:58 -04:00
..
add feat: require jsr prefix for deno install and deno add (#25698) 2024-09-18 20:38:22 +02:00
bench feat: default to TS for file extension and support ext flag in more scenarios (#25472) 2024-09-18 21:15:13 +02:00
bundle/removed
cache tests: update specs::cache::package_json (#25827) 2024-09-23 20:17:43 +05:30
cert
check feat(check): turn on noImplicitOverride (#25695) 2024-09-18 14:49:30 +01:00
clean/general
cli/help_and_version_broken_pipe
compile
coverage fix(coverage): ignore urls from doc testing (#25736) 2024-09-20 15:04:22 +09:00
doc
eval
flags
fmt feat(fmt): support vto and njk extensions (#25831) 2024-09-23 14:27:58 -04:00
future
import_map/import_map_config
info
info_tests chore: move info itests (#25659) 2024-09-16 17:08:00 +00:00
init/lib
install feat: improve warnings for deprecations and lifecycle script for npm packages (#25694) 2024-09-18 19:04:25 +00:00
jsr
jupyter/install_command
lint fix: don't include extensionless files in file collection for lint & fmt by default (#25721) 2024-09-19 11:25:48 +02:00
lockfile feat: suggest deno install --entrypoint instead of deno cache (#25228) 2024-09-18 19:55:50 +00:00
node fix(node): Include "node" condition during CJS re-export analysis (#25785) 2024-09-21 16:10:38 -07:00
node_compat_tests
npm refactor(tests): migrate npm itests to specs (#25764) 2024-09-20 22:38:32 +02:00
permission feat: update warning message for --allow-run with no list (#25693) 2024-09-18 00:32:52 +02:00
publish
remove feat: require jsr prefix for deno install and deno add (#25698) 2024-09-18 20:38:22 +02:00
run tests: enable auto_discovered tests of run/no_deno_json (#25821) 2024-09-23 15:37:35 +02:00
serve
task
test test: make specs::test::doc_success less flaky (#25765) 2024-09-20 13:14:02 +00:00
upgrade tests: fix upgrade canary test (#25706) 2024-09-18 13:43:50 +00:00
vendor/removed
worker
workspaces
mod.rs feat: default to TS for file extension and support ext flag in more scenarios (#25472) 2024-09-18 21:15:13 +02:00
README.md
schema.json

specs

These are integration tests that execute the deno binary. They supersede the itest macro found in the tests/integration folder and are the preferred way of writing tests that use the deno binary.

Structure

Tests must have the following directory structure:

tests/specs/<category_name>/<test_name>/__test__.json

Test filtering

To run a specific test, run:

cargo test specs::category_name::test_name

Or just the following, though it might run other tests:

cargo test test_name

To run showing the output of every test use -- --nocapture (note: this will cause tests to run sequentially instead of in parallel):

cargo test test_name -- --nocapture

__test__.json file

This file describes the test(s) to execute and the steps to execute. A basic example looks like:

{
  "args": "run main.js",
  "output": "main.out"
}

This will run deno run main.js then assert that the output matches the text in main.out.

Or another example that runs multiple steps:

{
  "tempDir": true,
  "steps": [{
    "args": "cache main.ts",
    "output": "cache.out"
  }, {
    "args": "run main.ts",
    "output": "error.out",
    "exitCode": 1
  }]
}

Or if you want to run several tests at the same time:

{
  "tests": {
    "ignore_dir": {
      "args": "run script.ts",
      "output": "script.out"
    },
    "some_other_test": {
      "args": "run other.ts",
      "output": "other.out"
    }
  }
}

Top level properties

  • repeat (number) - Number of times to repeat a test.
  • tempDir (boolean) - Copy all the non-test files to a temporary directory and execute the command in that temporary directory.
    • By default, tests are executed with a current working directory of the test, but this may not be desirable for tests such as ones that create a node_modules directory.

Step properties

When writing a single step, these may be at the top level rather than nested in a "steps" array or "tests" object.

  • args - A string (that will be spilt on whitespace into an args array) or an array of arguments.
  • output - Path to use to assert the output or text (must end with an .out extension) or text to pattern match against the output.
  • flaky - Step should be repeated until success a maximum of 3 times.
  • if ("windows", "linux", "mac", "unix") - Whether to run this step.
  • exitCode (number) - Expected exit code.

Auto-complete

To get auto-complete for these files, add the following to a local .vscode/settings.json file:

{
  "json.schemas": [{
    "fileMatch": [
      "__test__.jsonc"
    ],
    "url": "./tests/specs/schema.json"
  }]
}

.out files

.out files are used to assert the output when running a test or test step.

Within the file, you can use the following for matching:

  • [WILDCARD] - match any text at the wildcard
  • [WILDLINE] - match any text on the current line
  • [WILDCHAR] - match the next character
  • [WILDCHARS(5)] - match any of the next 5 characters
  • [UNORDERED_START] followed by many lines then [UNORDERED_END] will match the lines in any order (useful for non-deterministic output)
  • [# example] - line comments start with [# and end with ]