mod sandbox_config;
pub use sandbox_config::SandboxConfig;
pub mod balance_api;
pub mod contracts_api;
pub mod runtime_api;
pub mod system_api;
pub mod timestamp_api;
use std::any::Any;
use sp_externalities::Extension;
use sp_io::TestExternalities;
pub struct Sandbox<Config> {
externalities: TestExternalities,
_phantom: std::marker::PhantomData<Config>,
}
impl<Config> Sandbox<Config> {
pub fn execute_with<T>(&mut self, execute: impl FnOnce() -> T) -> T {
self.externalities.execute_with(execute)
}
pub fn dry_run<T>(&mut self, action: impl FnOnce(&mut Self) -> T) -> T {
let backend_backup = self.externalities.as_backend();
let result = action(self);
self.externalities
.commit_all()
.expect("Failed to commit changes");
self.externalities.backend = backend_backup;
result
}
pub fn register_extension<E: Any + Extension>(&mut self, ext: E) {
self.externalities.register_extension(ext);
}
}