locklift
Version:
Node JS framework for working with Ever contracts. Inspired by Truffle and Hardhat. Helps you to build, test, run and maintain your smart contracts.
52 lines (48 loc) • 2.05 kB
text/typescript
import { ViewTracingTree } from "../../internal/tracing/viewTraceTree/viewTracingTree";
import { Addressable, TraceType } from "../../internal/tracing/types";
import { supportWithNamedArgs } from "./withNamedArgs";
import { supportWithCount } from "./count";
import { getMessage } from "../utils";
import AssertionStatic = Chai.AssertionStatic;
export const supportEmitAndCall = (Assertion: Chai.AssertionStatic, utils: Chai.ChaiUtils) => {
Assertion.addMethod("emit", function (this: AssertionStatic, eventName: string, contract?: Addressable) {
const rewriteThis: AssertionStatic & { __flags: { negate: boolean; object: ViewTracingTree } } =
this as AssertionStatic & { __flags: { negate: boolean; object: ViewTracingTree } };
const viewTracingTree = rewriteThis.__flags.object;
const events = getMessage({
contract,
viewTracingTree,
msgName: eventName,
msgType: TraceType.EVENT,
});
this.assert(
events.length > 0,
`Expected event "${eventName}" to be emitted, but it wasn't`,
`Expected event "${eventName}" NOT to be emitted, but it was`,
true,
);
utils.flag(this, "messages", events);
return this;
});
Assertion.addMethod("call", function (this: AssertionStatic, methodName: string, contract?: Addressable) {
const rewriteThis: AssertionStatic & { __flags: { negate: boolean; object: ViewTracingTree } } =
this as AssertionStatic & { __flags: { negate: boolean; object: ViewTracingTree } };
const viewTracingTree = rewriteThis.__flags.object;
const calls = getMessage({
contract,
viewTracingTree,
msgName: methodName,
msgType: TraceType.FUNCTION_CALL,
});
this.assert(
calls.length > 0,
`Expected method "${methodName}" to be called, but it wasn't`,
`Expected method "${methodName}" NOT to be called, but it was`,
true,
);
utils.flag(this, "messages", calls);
return this;
});
supportWithNamedArgs(Assertion, utils);
supportWithCount(Assertion, utils);
};