3 unstable releases

new 0.1.0 Oct 17, 2024
0.1.0-rc Sep 13, 2024
0.0.1 Jun 3, 2024

#427 in Magic Beans

Download history 112/week @ 2024-09-13 25/week @ 2024-09-20 9/week @ 2024-09-27 3/week @ 2024-10-04 87/week @ 2024-10-11

127 downloads per month

MIT license

22KB
169 lines

Motsu (持つ) - Unit Testing for Stylus

This crate enables unit-testing for Stylus contracts. It abstracts away the machinery necessary for writing tests behind a #[motsu::test] procedural macro.

motsu means "to hold" in Japanese -- we hold a stylus in our hand.

Usage

Annotate tests with #[motsu::test] instead of #[test] to get access to VM affordances.

Note that we require contracts to implement stylus_sdk::prelude::StorageType. This trait is typically implemented by default with stylus_proc::sol_storage macro.

#[cfg(test)]
mod tests {
    use contracts::token::erc20::Erc20;

    #[motsu::test]
    fn reads_balance(contract: Erc20) {
        let balance = contract.balance_of(Address::ZERO); // Access storage.
        assert_eq!(balance, U256::ZERO);
    }
}

Annotating a test function that accepts no parameters will make #[motsu::test] behave the same as #[test].

#[cfg(test)]
mod tests {
    #[motsu::test]
     fn t() { // If no params, it expands to a `#[test]`.
        // ...
    }
}

Note that currently, test suites using motsu::test will run serially because of global access to storage.

Notice

We maintain this crate on a best-effort basis. We use it extensively on our own tests, so we will add here any symbols we may need. However, since we expect this to be a temporary solution, don't expect us to address all requests.

That being said, please do open an issue to start a discussion, keeping in mind our code of conduct and contribution guidelines.

Security

Refer to our Security Policy for more details.

Dependencies

~12MB
~203K SLoC