nushell/crates
Devyn Cairns c79c43d2f8
Add test support crate for plugin developers (#12259)
# Description

Adds a `nu-plugin-test-support` crate with an interface that supports
testing plugins.

Unlike in reality, these plugins run in the same process on separate
threads. This will allow
testing aspects of the plugin internal state and handling serialized
plugin custom values easily.
We still serialize their custom values and all of the engine to plugin
logic is still in play, so
from a logical perspective this should still expose any bugs that would
have been caused by that.
The only difference is that it doesn't run in a different process, and
doesn't try to serialize
everything to the final wire format for stdin/stdout.

TODO still:

- [x] Clean up warnings about private types exposed in trait definition
- [x] Automatically deserialize plugin custom values in the result so
they can be inspected
- [x] Automatic plugin examples test function
- [x] Write a bit more documentation
- [x] More tests
- [x] Add MIT License file to new crate

# User-Facing Changes

Plugin developers get a nice way to test their plugins.

# Tests + Formatting
Run the tests with `cargo test -p nu-plugin-test-support --
--show-output` to see some examples of what the failing test output for
examples can look like. I used the `difference` crate (MIT licensed) to
make it look nice.

- 🟢 `toolkit fmt`
- 🟢 `toolkit clippy`
- 🟢 `toolkit test`
- 🟢 `toolkit test stdlib`

# After Submitting

- [ ] Add a section to the book about testing
- [ ] Test some of the example plugins this way
- [ ] Add example tests to nu_plugin_template so plugin developers have
something to start with
2024-03-23 13:29:54 -05:00
..
nu_plugin_custom_values Better generic errors for plugins (and perhaps scripts) (#12236) 2024-03-21 12:27:21 +01:00
nu_plugin_example Better generic errors for plugins (and perhaps scripts) (#12236) 2024-03-21 12:27:21 +01:00
nu_plugin_formats Better generic errors for plugins (and perhaps scripts) (#12236) 2024-03-21 12:27:21 +01:00
nu_plugin_gstat Better generic errors for plugins (and perhaps scripts) (#12236) 2024-03-21 12:27:21 +01:00
nu_plugin_inc Better generic errors for plugins (and perhaps scripts) (#12236) 2024-03-21 12:27:21 +01:00
nu_plugin_python Improve the error message for a plugin version mismatch (#12122) 2024-03-08 06:04:22 -06:00
nu_plugin_query Better generic errors for plugins (and perhaps scripts) (#12236) 2024-03-21 12:27:21 +01:00
nu-cli Address feedback from PR #12229 (#12242) 2024-03-20 20:16:18 +01:00
nu-cmd-base Make EngineState clone cheaper with Arc on all of the heavy objects (#12229) 2024-03-19 19:07:00 +01:00
nu-cmd-dataframe Make custom value type handling more consistent (#12230) 2024-03-19 11:09:59 +01:00
nu-cmd-extra Bump heck from 0.4.1 to 0.5.0 (#12187) 2024-03-21 21:17:30 +02:00
nu-cmd-lang Better generic errors for plugins (and perhaps scripts) (#12236) 2024-03-21 12:27:21 +01:00
nu-color-config IO and redirection overhaul (#11934) 2024-03-14 15:51:55 -05:00
nu-command Misc doc fixes (#12266) 2024-03-23 07:26:08 -05:00
nu-engine Make EngineState clone cheaper with Arc on all of the heavy objects (#12229) 2024-03-19 19:07:00 +01:00
nu-explore Misc doc fixes (#12266) 2024-03-23 07:26:08 -05:00
nu-glob Fix ignored clippy lints (#12160) 2024-03-11 19:46:04 +01:00
nu-json to json -r not removing whitespaces fix (#11948) 2024-03-20 22:14:31 +01:00
nu-lsp Refactor source cache into CachedFile struct (#12240) 2024-03-20 19:43:50 +01:00
nu-parser Add test support crate for plugin developers (#12259) 2024-03-23 13:29:54 -05:00
nu-path Misc doc fixes (#12266) 2024-03-23 07:26:08 -05:00
nu-plugin Add test support crate for plugin developers (#12259) 2024-03-23 13:29:54 -05:00
nu-plugin-test-support Add test support crate for plugin developers (#12259) 2024-03-23 13:29:54 -05:00
nu-pretty-hex nu-explore/ Use hex-dump for binary data (#12184) 2024-03-21 19:02:03 -05:00
nu-protocol Add test support crate for plugin developers (#12259) 2024-03-23 13:29:54 -05:00
nu-std to json -r not removing whitespaces fix (#11948) 2024-03-20 22:14:31 +01:00
nu-system Bump windows from 0.52.0 to 0.54.0 (#12037) 2024-03-07 16:36:28 -08:00
nu-table Misc doc fixes (#12266) 2024-03-23 07:26:08 -05:00
nu-term-grid Bump version to 0.91.1 (#12085) 2024-03-06 23:08:14 +01:00
nu-test-support Update tests Playground (#12134) 2024-03-08 20:31:21 -08:00
nu-utils Use the system clipboard only for explicit copy/paste operations. Addresses issue 11907 (#12179) 2024-03-15 08:59:21 -05:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.