0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-19 03:43:00 -05:00
denoland-deno/tests/specs
Bartek Iwańczuk f08ca6414b
feat(lint): add JavaScript plugin support (#27203)
This commit adds an unstable lint plugin API.

Plugins are specified in the `deno.json` file under
`lint.plugins` option like so:

```
{
  "lint": {
    "plugins": [
      "./plugins/my-plugin.ts",
      "jsr:@deno/lint-plugin1",
      "npm:@deno/lint-plugin2"
    ]
  }
}
```

The API is considered unstable and might be subject
to changes in the future.

Plugin API was modelled after ESLint API for the 
most part, but there are no guarantees for compatibility.
The AST format exposed to plugins is closely modelled
after the AST that `typescript-eslint` uses.

Lint plugins use the visitor pattern and can add
diagnostics like so:

```
export default {
  name: "lint-plugin",
  rules: {
    "plugin-rule": {
      create(context) {
        return {
          Identifier(node) {
            if (node.name === "a") {
              context.report({
                node,
                message: "should be b",
                fix(fixer) {
                  return fixer.replaceText(node, "_b");
                },
              });
            }
          },
        };
      },
    },
  },
} satisfies Deno.lint.Plugin;
```

Besides reporting errors (diagnostics) plugins can provide
automatic fixes that use text replacement to apply changes.

---------

Co-authored-by: Marvin Hagemeister <marvin@deno.com>
Co-authored-by: David Sherret <dsherret@gmail.com>
2025-02-05 16:59:24 +01:00
..
add fix: do not error when subpath has an @ symbol (#27290) 2024-12-09 13:19:08 -08:00
bench chore: move bench test to spec test (#27970) 2025-02-05 10:49:10 -05:00
bundle/removed chore: note in flags output that unstable is deprecated (#27334) 2025-01-21 19:25:46 -08:00
cache fix(npm): ensure scoped package name is encoded in URLs (#26390) 2024-10-18 20:38:57 +02:00
cert refactor: extract out FileFetcher to deno_cache_dir (#27263) 2024-12-16 23:39:40 +00:00
check feat: TypeScript 5.7 (#27857) 2025-01-31 16:07:42 -05:00
clean/general feat(clean): add progress bar (#25026) 2024-08-14 13:04:07 +02:00
cli feat(unstable): support https otlp endpoints (#27743) 2025-01-22 13:07:04 +00:00
compile feat(compile): support sloppy imports (#27944) 2025-02-03 13:08:08 -05:00
coverage fix(coverage): ignore urls from doc testing (#25736) 2024-09-20 15:04:22 +09:00
doc fix(tools/doc): HTML resolve main entrypoint from config file (#27103) 2024-11-27 02:15:15 -08:00
eval feat(node): stabilize detecting if CJS via "type": "commonjs" in a package.json (#26439) 2024-11-13 15:10:09 +00:00
flags feat: add lowercase -v version flag (#23750) 2024-05-23 00:20:20 +00:00
fmt fix(fmt): stable formatting of HTML files with JS (#27164) 2024-12-03 02:04:55 +01:00
future chore: upgrade to rust 1.82 and LLVM 19 (#26615) 2024-11-01 16:13:02 +05:30
import_map/import_map_config refactor: move importMap with imports/scopes diagnostic to deno_config (#24553) 2024-07-12 12:48:53 -04:00
info chore: fix ci by removing remote server dependent test (#27674) 2025-01-15 04:06:57 +00:00
init feat(init): add --npm flag to initialize npm projects (#26896) 2024-11-21 00:03:11 +00:00
install fix(install/global): warn about not including auto-discovered config file (#27745) 2025-01-27 14:18:27 -05:00
jsr fix(check): compiler options from workspace members (#27785) 2025-01-28 10:49:58 -05:00
jupyter/install_command refactor(jupyter): use runtimelib for Jupyter structures and directory paths (#23826) 2024-05-21 22:35:21 +02:00
lint feat(lint): add JavaScript plugin support (#27203) 2025-02-05 16:59:24 +01:00
lockfile fix(lockfile): include dependencies listed in external import map in lockfile (#27337) 2024-12-13 10:19:37 -08:00
node fix(node): resolve module as maybe CJS when it's missing a file extension (#27904) 2025-02-01 13:12:17 -05:00
npm fix(lsp): ignore a few more diagnostics for ambient modules (#27949) 2025-02-03 16:13:14 -08:00
permission fix(permissions): implicit --allow-import when using --cached-only (#27530) 2025-01-02 16:55:03 -05:00
publish feat: TypeScript 5.7 (#27857) 2025-01-31 16:07:42 -05:00
remove fix(install): better json editing (#26450) 2024-10-21 14:17:08 -04:00
repl/console_log chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
run chore: update std in test util (#27892) 2025-01-31 08:52:32 -05:00
serve fix(check): compiler options from workspace members (#27785) 2025-01-28 10:49:58 -05:00
task feat(task): add support for task wildcards (#27007) 2025-01-30 14:37:10 +01:00
test fix(check): compiler options from workspace members (#27785) 2025-01-28 10:49:58 -05:00
update fix(outdated): Use latest tag even when it's the same as the current version (#27699) 2025-01-16 20:03:25 +00:00
upgrade chore: fix two locally failing on windows tests (#27845) 2025-01-28 10:46:43 -05:00
vendor/removed chore: note in flags output that unstable is deprecated (#27334) 2025-01-21 19:25:46 -08:00
worker feat: add --allow-import flag (#25469) 2024-09-26 01:50:54 +00:00
workspaces fix(check): compiler options from workspace members (#27785) 2025-01-28 10:49:58 -05:00
mod.rs refactor: move denort to separate crate (#27688) 2025-01-17 20:39:29 +00:00
README.md chore: support -- --nocapture in the spec tests (#24113) 2024-06-06 08:37:13 -04:00
schema.json fix(compile): analyze modules in directory specified in --include (#27296) 2024-12-12 18:07:35 +00:00

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 ]