100 lines
2.5 KiB
Markdown
100 lines
2.5 KiB
Markdown
|
Ethers Test Suite
|
||
|
=================
|
||
|
|
||
|
There are a lot of test cases, and it can take a while for them to all run.
|
||
|
|
||
|
Please be patient.
|
||
|
|
||
|
|
||
|
Running Tests
|
||
|
-------------
|
||
|
|
||
|
**Node.js:**
|
||
|
|
||
|
```
|
||
|
# Test everything
|
||
|
> npm test
|
||
|
|
||
|
|
||
|
# Test just one specific package
|
||
|
|
||
|
# Test the Solidity ABI coder
|
||
|
# - See tests/contract-interface.json.gz
|
||
|
> ./node_modules/.bin/mocha test-contract-interface.js
|
||
|
|
||
|
# Test HD Wallet derivations
|
||
|
# - See tests/hdnode.json.gz
|
||
|
> ./node_modules/.bin/mocha test-hdnode.js
|
||
|
|
||
|
# Test general utilities
|
||
|
# - See tests/namehash.json.gz
|
||
|
# - See tests/rlp-coder.json.gz
|
||
|
# - See tests/units.json.gz
|
||
|
> ./node_modules/.bin/mocha test-utils.js
|
||
|
|
||
|
# Test accounts and addresses
|
||
|
# - See tests/accounts.json.gz
|
||
|
> ./node_modules/.bin/mocha test-account.js
|
||
|
|
||
|
# Test encrypting/decrypting JSON wallets and transaction parsing/signing
|
||
|
# - See tests/transactions.json.gz
|
||
|
# - See tests/wallets.json.gz
|
||
|
> ./node_modules/.bin/mocha test-wallet.js
|
||
|
|
||
|
|
||
|
# This test case has not yet been migrated to mocha
|
||
|
> nodeunit run-provider.js
|
||
|
```
|
||
|
|
||
|
|
||
|
Test Cases
|
||
|
----------
|
||
|
|
||
|
The testcases take up a large amount of space, so they are gzipped in the
|
||
|
`tests/` folder. See `./utils.js` for saving and loading.
|
||
|
|
||
|
To dump a test case from the terminal, you can use:
|
||
|
|
||
|
```
|
||
|
/Users/ethers> cat ./tests/accounts.json.gz | gunzip
|
||
|
```
|
||
|
|
||
|
|
||
|
Building Testcases
|
||
|
------------------
|
||
|
|
||
|
Each suite of testcases is produced from a variety of sources. Many include a
|
||
|
specific set of test vecotrs as well as procedurally generated tests using known
|
||
|
correct implementations.
|
||
|
|
||
|
The `contract-interface` test cases are created by selecting a (deterministically) random
|
||
|
set of types and values, a solidity contract is then created to represent a contract with
|
||
|
the correct return types and values, which is then compiled and deployed to a local
|
||
|
Ethereum node, then executed once mined.
|
||
|
|
||
|
As a result, genearting the test cases can take quite some time. So, they are generated using
|
||
|
a separate set of files found in make-tests.
|
||
|
|
||
|
- make-accounts
|
||
|
- make-contract-interface
|
||
|
- make-hdnode
|
||
|
- makr-rlpcoder
|
||
|
- make-transaction
|
||
|
- make-wallets
|
||
|
|
||
|
Additional Test Vectors:
|
||
|
- **make-tests/test-mnemonics** -- The trezor test vectors for BIP39
|
||
|
- **make-tests/test-wallets** -- Sample JSON Wallets (crowdsale and Geth)
|
||
|
|
||
|
All generated JSON test files are then placed gzipped in `tests` with the extension '.json.gz'.
|
||
|
|
||
|
|
||
|
Adding Test Cases
|
||
|
-----------------
|
||
|
|
||
|
For any patch, feature upgrade or pull request of any sort, there must be relevant
|
||
|
test cases added and all test cases must pass.
|
||
|
|
||
|
If you report a bug and provide test cases, it will get attention sooner.
|
||
|
|