diff options
author | Alex Browne <stephenalexbrowne@gmail.com> | 2018-06-07 04:43:29 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-07 04:43:29 +0800 |
commit | 785b9811f30869f01242ce9ff81c282bf7f5352f (patch) | |
tree | fe1615f0db90f76627bfb88874c19634321105bc /packages/contracts/src/utils/assertions.ts | |
parent | da3f783a9ff69b059b1a98f502d980660d6bacab (diff) | |
parent | 643c77ded08d3082aff7ae47063d40c9c1fdb677 (diff) | |
download | dexon-sol-tools-785b9811f30869f01242ce9ff81c282bf7f5352f.tar dexon-sol-tools-785b9811f30869f01242ce9ff81c282bf7f5352f.tar.gz dexon-sol-tools-785b9811f30869f01242ce9ff81c282bf7f5352f.tar.bz2 dexon-sol-tools-785b9811f30869f01242ce9ff81c282bf7f5352f.tar.lz dexon-sol-tools-785b9811f30869f01242ce9ff81c282bf7f5352f.tar.xz dexon-sol-tools-785b9811f30869f01242ce9ff81c282bf7f5352f.tar.zst dexon-sol-tools-785b9811f30869f01242ce9ff81c282bf7f5352f.zip |
Merge pull request #622 from 0xProject/geth-devnet-rebase-on-v2
Run contract tests against private Geth network
Diffstat (limited to 'packages/contracts/src/utils/assertions.ts')
-rw-r--r-- | packages/contracts/src/utils/assertions.ts | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/packages/contracts/src/utils/assertions.ts b/packages/contracts/src/utils/assertions.ts new file mode 100644 index 000000000..615e648f3 --- /dev/null +++ b/packages/contracts/src/utils/assertions.ts @@ -0,0 +1,63 @@ +import * as chai from 'chai'; +import * as _ from 'lodash'; + +import { constants } from './constants'; + +const expect = chai.expect; + +function _expectEitherErrorAsync<T>(p: Promise<T>, error1: string, error2: string): PromiseLike<void> { + return expect(p) + .to.be.rejected() + .then(e => { + expect(e).to.satisfy( + (err: Error) => _.includes(err.message, error1) || _.includes(err.message, error2), + `expected promise to reject with error message that includes "${error1}" or "${error2}", but got: ` + + `"${e.message}"\n`, + ); + }); +} + +/** + * Rejects if the given Promise does not reject with an error indicating + * insufficient funds. + * @param p the Promise which is expected to reject + * @returns a new Promise which will reject if the conditions are not met and + * otherwise resolve with no value. + */ +export function expectInsufficientFundsAsync<T>(p: Promise<T>): PromiseLike<void> { + return _expectEitherErrorAsync(p, 'insufficient funds', "sender doesn't have enough funds"); +} + +/** + * Rejects if the given Promise does not reject with a "revert" error or the + * given otherError. + * @param p the Promise which is expected to reject + * @param otherError the other error which is accepted as a valid reject error. + * @returns a new Promise which will reject if the conditions are not met and + * otherwise resolve with no value. + */ +export function expectRevertOrOtherErrorAsync<T>(p: Promise<T>, otherError: string): PromiseLike<void> { + return _expectEitherErrorAsync(p, constants.REVERT, otherError); +} + +/** + * Rejects if the given Promise does not reject with a "revert" or "always + * failing transaction" error. + * @param p the Promise which is expected to reject + * @returns a new Promise which will reject if the conditions are not met and + * otherwise resolve with no value. + */ +export function expectRevertOrAlwaysFailingTransactionAsync<T>(p: Promise<T>): PromiseLike<void> { + return expectRevertOrOtherErrorAsync(p, 'always failing transaction'); +} + +/** + * Rejects if the given Promise does not reject with a "revert" or "Contract + * call failed" error. + * @param p the Promise which is expected to reject + * @returns a new Promise which will reject if the conditions are not met and + * otherwise resolve with no value. + */ +export function expectRevertOrContractCallFailedAsync<T>(p: Promise<T>): PromiseLike<void> { + return expectRevertOrOtherErrorAsync<T>(p, 'Contract call failed'); +} |