Files
web3.js/test/contract.encodeABI.js
Samuel Furter 0ef6ee8e99 ABI v2 added (#1820)
* wip adding new decoder

* improved web3.js readme

* reworked decodeParameters

* bumped ethers version

* fixed tests

* fixed decode Log tests

* fixed decoding tests

* fixed encoding tests

* removed old encoder/decoder

* fixed all tests

* updated ether-js

* struct encoding and decoding

* decoding index params separate

* improved log decoding for indexed paramaters

* removed lock files

* fixed tests

* fixed test

* add components to contract

* Added some struct tests

* Finished decodeParameters testing

* Finished encodeParameter and encodeParameters tests

* fixed ABICoder decodeParameters

* fixed ABICoder decodeParameters

* removed console.log

* removed out commented code

* console.log removed

* decodeParameter in ABICoder fixed

* codestyle improvement

* new version of ethersjs abiCoder implemented and tested

* testcases added for structs

* package-lock removed

* encodeParameters extended for simplified format

* codestyle improvement

* simplified types added to decodeParameters

* types mapping fixed

* Started with updating of the documentation for encoding and decoding of parameters

* new abi lib tested and documentation updated

* decodeParameter/s tested and documentation updated

* package-locks fixed

* web3-eth-abi package version fixed

* gitignore updated

* web3.js removed

* modified package.lock

* documentation updated
2018-08-07 14:52:04 +02:00

109 lines
3.9 KiB
JavaScript

var chai = require('chai');
var assert = chai.assert;
var Eth = require('../packages/web3-eth');
var sha3 = require('../packages/web3-utils').sha3;
var FakeIpcProvider = require('./helpers/FakeIpcProvider');
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
var Promise = require('bluebird');
var abi = [
{
constant: true,
inputs: [
{
name: "a",
type: "bytes32"
},
{
name: "b",
type: "bytes32"
}
],
name: "takesTwoBytes32",
outputs: [
{
name: "",
type: "bytes32"
}
],
payable: false,
type: "function",
stateMutability: "view"
}
];
describe('contract', function () {
describe('method.encodeABI', function () {
it('should handle bytes32 arrays that only contain 1 byte', function () {
var provider = new FakeIpcProvider();
var eth = new Eth(provider);
var contract = new eth.Contract(abi);
var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(2)), '0x'.concat('b'.repeat(2))).encodeABI();
assert.equal(result, [
'0x1323517e',
'aa00000000000000000000000000000000000000000000000000000000000000',
'bb00000000000000000000000000000000000000000000000000000000000000'
].join(''));
});
it('should handle bytes32 arrays that are short 1 byte', function () {
var provider = new FakeIpcProvider();
var eth = new Eth(provider);
var contract = new eth.Contract(abi);
var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(62)), '0x'.concat('b'.repeat(62))).encodeABI();
assert.equal(result, [
'0x1323517e',
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00',
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00'
].join(''));
});
// it('should throw an exception on bytes32 arrays that have an invalid length', function () {
// var provider = new FakeIpcProvider();
// var eth = new Eth(provider);
//
// var contract = new eth.Contract(abi);
//
// var test = function () {
// return contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(63)), '0x'.concat('b'.repeat(63))).encodeABI();
// };
//
// assert.throws(test, 'Given parameter bytes has an invalid length: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"');
// });
it('should handle bytes32 arrays that are full', function () {
var provider = new FakeIpcProvider();
var eth = new Eth(provider);
var contract = new eth.Contract(abi);
var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(64)), '0x'.concat('b'.repeat(64))).encodeABI();
assert.equal(result, [
'0x1323517e',
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
].join(''));
});
// it('should throw an exception on bytes32 arrays that are too long', function () {
// var provider = new FakeIpcProvider();
// var eth = new Eth(provider);
//
// var contract = new eth.Contract(abi);
//
// var test = function() {
// contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(66)), '0x'.concat('b'.repeat(66))).encodeABI();
// };
//
// assert.throws(test, 'Given parameter bytes is too long: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"');
// });
});
});