soroban-test 20.3.4

Soroban Test Framework
Soroban Test
============

Test framework wrapping Soroban CLI.

Provides a way to run tests against a local sandbox; running against RPC endpoint _coming soon_.


Overview
========

- `TestEnv` is a test environment for running tests isolated from each other.
- `TestEnv::with_default` invokes a closure, which is passed a reference to a random `TestEnv`.
- `TestEnv::new_assert_cmd` creates an `assert_cmd::Command` for a given subcommand and sets the current
   directory to be the same as `TestEnv`.
- `TestEnv::cmd` is a generic function which parses a command from a string.
   Note, however, that it uses `shlex` to tokenize the string. This can cause issues
   for commands which contain strings with `"`s. For example, `{"hello": "world"}` becomes
   `{hello:world}`. For that reason it's recommended to use `TestEnv::cmd_arr` instead.
- `TestEnv::cmd_arr` is a generic function which takes an array of `&str` which is passed directly to clap.
   This is the preferred way since it ensures no string parsing footguns.
- `TestEnv::invoke` a convenience function for using the invoke command.


Example
=======

```rs
use soroban_test::{TestEnv, Wasm};

const WASM: &Wasm = &Wasm::Release("soroban_hello_world_contract");
const FRIEND: &str = "friend";

#[test]
fn invoke() {
    TestEnv::with_default(|workspace| {
        assert_eq!(
            format!("[\"Hello\",\"{FRIEND}\"]"),
            workspace
                .invoke(&[
                    "--id",
                    "1",
                    "--wasm",
                    &WASM.path().to_string_lossy(),
                    "--",
                    "hello",
                    "--to",
                    FRIEND,
                ])
                .unwrap()
        );
    });
}
```