aboutsummaryrefslogtreecommitdiffstats
path: root/packages/utils/test/abi_encoder/return_values_test.ts
blob: 308d11ee57509ab259c52516d0b4780eee730c98 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import * as chai from 'chai';
import 'mocha';

import { AbiEncoder } from '../../src/';
import { chaiSetup } from '../utils/chai_setup';

import * as ReturnValueAbis from './abi_samples/return_value_abis';

chaiSetup.configure();
const expect = chai.expect;

describe('ABI Encoder: Return Value Encoding/Decoding', () => {
    const encodingRules: AbiEncoder.EncodingRules = { shouldOptimize: false }; // optimizer is tested separately.
    it('No Return Value', async () => {
        // Decode return value
        const method = new AbiEncoder.Method(ReturnValueAbis.noReturnValues);
        const returnValue = '0x';
        const decodedReturnValue = method.decodeReturnValues(returnValue, { shouldConvertStructsToObjects: false });
        const expectedDecodedReturnValue: any[] = [];
        expect(decodedReturnValue).to.be.deep.equal(expectedDecodedReturnValue);
    });
    it('Single static return value', async () => {
        // Generate Return Value
        const method = new AbiEncoder.Method(ReturnValueAbis.singleStaticReturnValue);
        const returnValue = ['0x01020304'];
        const encodedReturnValue = method.encodeReturnValues(returnValue, encodingRules);
        const decodedReturnValue = method.decodeReturnValues(encodedReturnValue, {
            shouldConvertStructsToObjects: false,
        });
        // Validate decoded return value
        expect(decodedReturnValue).to.be.deep.equal(returnValue);
    });
    it('Multiple static return values', async () => {
        // Generate Return Value
        const method = new AbiEncoder.Method(ReturnValueAbis.multipleStaticReturnValues);
        const returnValue = ['0x01020304', '0x05060708'];
        const encodedReturnValue = method.encodeReturnValues(returnValue, encodingRules);
        const decodedReturnValue = method.decodeReturnValues(encodedReturnValue, {
            shouldConvertStructsToObjects: false,
        });
        // Validate decoded return value
        expect(decodedReturnValue).to.be.deep.equal(returnValue);
    });
    it('Single dynamic return value', async () => {
        // Generate Return Value
        const method = new AbiEncoder.Method(ReturnValueAbis.singleDynamicReturnValue);
        const returnValue = ['0x01020304'];
        const encodedReturnValue = method.encodeReturnValues(returnValue, encodingRules);
        const decodedReturnValue = method.decodeReturnValues(encodedReturnValue, {
            shouldConvertStructsToObjects: false,
        });
        // Validate decoded return value
        expect(decodedReturnValue).to.be.deep.equal(returnValue);
    });
    it('Multiple dynamic return values', async () => {
        // Generate Return Value
        const method = new AbiEncoder.Method(ReturnValueAbis.multipleDynamicReturnValues);
        const returnValue = ['0x01020304', '0x05060708'];
        const encodedReturnValue = method.encodeReturnValues(returnValue, encodingRules);
        const decodedReturnValue = method.decodeReturnValues(encodedReturnValue, {
            shouldConvertStructsToObjects: false,
        });
        // Validate decoded return value
        expect(decodedReturnValue).to.be.deep.equal(returnValue);
    });
    it('Mixed static/dynamic return values', async () => {
        // Generate Return Value
        const method = new AbiEncoder.Method(ReturnValueAbis.mixedStaticAndDynamicReturnValues);
        const returnValue = ['0x01020304', '0x05060708'];
        const encodedReturnValue = method.encodeReturnValues(returnValue, encodingRules);
        const decodedReturnValue = method.decodeReturnValues(encodedReturnValue, {
            shouldConvertStructsToObjects: false,
        });
        // Validate decoded return value
        expect(decodedReturnValue).to.be.deep.equal(returnValue);
    });
});