# `Kinda.Testing.NativeScenario`
[🔗](https://github.com/beaver-lodge/kinda/blob/main/lib/kinda/testing/native_scenario.ex#L1)

Runs serializable native-resource scenarios inside an isolated BEAM.

Steps can bind and drop call results, refer to earlier bindings, assert exact
or eventually-observed results, hot-upgrade NIF modules, purge old code, and
request garbage collection. The data-only form can cross the port boundary
used by `Kinda.Testing.Isolated`.

# `native_call`

```elixir
@type native_call() :: {module(), atom(), [term() | resource_ref()]}
```

# `resource_ref`

```elixir
@type resource_ref() :: {:resource, atom()}
```

# `step`

```elixir
@type step() ::
  {:call, atom(), native_call()}
  | {:call, native_call()}
  | {:drop, atom()}
  | {:expect, term(), native_call()}
  | {:eventually_expect, term(), native_call()}
  | {:upgrade, module(), atom(), String.t()}
  | {:purge, module()}
  | :garbage_collect
```

# `run`

```elixir
@spec run([step()]) :: :ok
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
