Fixing up browser test cases.

This commit is contained in:
ricmoo 2017-03-01 15:56:49 -05:00
parent f6990b6e1f
commit cf83d92cc1
4 changed files with 23 additions and 205 deletions

View File

@ -1,8 +1,11 @@
'use strict';
module.exports = {
var Tests = {
"contract-interface": require('./run-contract-interface.js'),
"hdnode": require('./run-hdnode.js'),
"providers": require('./run-providers.js'),
"utils": require('./run-utils.js'),
"wallet": require('./run-wallet.js'),
};
module.exports = Tests;

View File

@ -23,13 +23,25 @@ var callFallback = (function() {
})();
var privateKey = null;
try {
privateKey = fs.readFileSync('.test-account.key').toString();
console.log('Found privateKey!');
} catch (error) {
console.log('Creating new private key!');
privateKey = utils.hexlify(utils.randomBytes(32));
fs.writeFileSync('.test-account.key', privateKey);
if (fs && fs.readFileSync) {
try {
privateKey = fs.readFileSync('.test-account.key').toString();
console.log('Found privateKey!');
} catch (error) {
console.log('Creating new private key!');
privateKey = utils.hexlify(utils.randomBytes(32));
fs.writeFileSync('.test-account.key', privateKey);
}
} else {
privateKey = global.localStorage.getItem('ethers-tests-privateKey');
if (privateKey) {
console.log('Found privateKey');
} else {
console.log('Creating new private key!');
privateKey = utils.hexlify(utils.randomBytes(32));
global.localStorage.setItem('ethers-tests-privateKey', privateKey);
}
}
var provider = providers.getDefaultProvider(true);

View File

@ -1,92 +0,0 @@
'use strict';
var contracts = require('../contracts/index.js');
//var providers = require('../providers/index.js');
var provider = new providers.EtherscanProvider({testnet: true});
module.exports = function(test) {
var contractAddress = '0xdfaf84077cF4bCECA4F79d167F47041Ed3006D5b';
var contractABI = {
"SimpleStorage": [
{
"constant":true,
"inputs":[],
"name":"getValue",
"outputs":[{"name":"value","type":"string"}],
"type":"function"
}, {
"constant":false,
"inputs":[{"name":"value","type":"string"}],
"name":"setValue",
"outputs":[],
"type":"function"
}, {
"anonymous":false,
"inputs":[
{"indexed":false,"name":"oldValue","type":"string"},
{"indexed":false,"name":"newValue","type":"string"}
],
"name":"valueChanged",
"type":"event"
}
]
}
var contractInterface = new contracts.Interface(contractABI.SimpleStorage);
var getValue = contractInterface.getValue()
var setValue = contractInterface.setValue("foobar");
var valueChanged = contractInterface.valueChanged()
test.equal(getValue.data, '0x20965255', "wrong call data");
test.equal(setValue.data, '0x93a0935200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006666f6f6261720000000000000000000000000000000000000000000000000000', "wrong transaction data");
test.ok(
(valueChanged.topics.length === 1 && valueChanged.topics[0] === '0x68ad6719a0070b3bb2f866fa0d46c8123b18cefe9b387ddb4feb6647ca418435'),
"wrong call data"
);
// @TODO - test decode
var privateKey = new Buffer(32);
privateKey.fill(0x42);
var wallet = new Wallet(privateKey, provider);
var contract = wallet.getContract(contractAddress, contractABI.SimpleStorage);
function testCall() {
return new Promise(function(resolve, reject) {
contract.getValue().then(function(result) {
test.equal(result[0], 'test888888', 'failed to call getVaue (positional)');
test.equal(result.value, 'test888888', 'failed to call getVaue (keyword)');
resolve(result);
}, function(error) {
test.ok(false, 'failed to call getValue (is parity running on this host?)');
reject(error);
});
});
}
function testEstimate() {
return new Promise(function(resolve, reject) {
contract.estimate.setValue('foo').then(function(result) {
test.equal(result.toString(16), '8f5a', 'failed to estimate setVaue');
resolve(result);
}, function(error) {
test.ok(false, 'failed to call getValue (is parity running on this host?)');
reject(error);
});
});
}
Promise.all([
testCall(),
testEstimate(),
]).then(function(results) {
test.done();
}, function(error) {
console.log('ERROR', error);
test.done();
});
};
module.exports.testSelf = module.exports;

View File

@ -1,105 +0,0 @@
'use strict';
var Wallet = require('../index.js');
var Web3 = require('web3');
// @TODO: We need to do a lot more test cases here:
// - homestead
// - sendTransaction
// - estimateGas with various parameters set and not set
// - estimateGas on a contract with from/value conditionals
// - Metamask-style injected Web3
module.exports = function(test) {
var url = 'http://localhost:8545';
var web3Provider = new Web3.providers.HttpProvider(url)
var web3 = new Web3(web3Provider)
var providers = [
(new Wallet.providers.Web3Provider(web3Provider)),
(new Wallet.providers.Web3Provider(web3)),
(new Wallet.providers.HttpProvider(url)),
(new Wallet.providers.EtherscanProvider({testnet: true})),
]
var pending = [];
function checkMethod(method, params, expectedValue) {
var checks = [];
providers.forEach(function(provider) {
checks.push(new Promise(function(resolve, reject) {
provider[method].apply(provider, params).then(function(value) {
resolve(value);
}, function(error) {
reject(error);
});
}));
});
pending.push(new Promise(function(resolve, reject) {
Promise.all(checks).then(function(results) {
if (!expectedValue) { expectedValue = results[0]; }
results.forEach(function(value) {
if (expectedValue instanceof Wallet.utils.BN) {
test.ok(expectedValue.eq(value), 'Failed ' + method);
} else if (typeof(expectedValue) === 'function') {
test.ok(expectedValue(value), 'Failed ' + method);
} else {
test.equal(value, expectedValue, 'Failed ' + method);
}
});
resolve();
}, function(error) {
console.log(error);
test.ok(false, 'Error - ' + error.message)
});
}));
}
checkMethod(
'getBalance', ['0x7357589f8e367c2C31F51242fB77B350A11830F3']
);
checkMethod(
'getTransactionCount', ['0x7357589f8e367c2C31F51242fB77B350A11830F3']
);
checkMethod('getGasPrice', []);
checkMethod(
'call', [{to: '0xdfaf84077cF4bCECA4F79d167F47041Ed3006D5b', data: '0x20965255'}],
'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006666f6f6261720000000000000000000000000000000000000000000000000000'
);
checkMethod(
'estimateGas', [{
to: '0xdfaf84077cF4bCECA4F79d167F47041Ed3006D5b',
from: '0x7357589f8e367c2C31F51242fB77B350A11830F3',
data: '0x93a0935200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003666f6f0000000000000000000000000000000000000000000000000000000000'
}],
new Wallet.utils.BN('35588')
);
var privateKey = new Buffer(32);
privateKey.fill(0x42);
var wallet = new Wallet(privateKey, url);
pending.push(new Promise(function(resolve, reject) {
wallet.estimateGas({
to: '0xdfaf84077cF4bCECA4F79d167F47041Ed3006D5b',
data: '0x93a0935200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003666f6f0000000000000000000000000000000000000000000000000000000000'
}).then(function(value) {
test.equal(value.toString(10), '35588', 'Failed to call wallet.estimateGas');
resolve();
}, function(error) {
reject(error);
});
}));
Promise.all(pending).then(function(results) {
test.done();
}, function(error) {
console.log(error);
test.ok(false, 'Error occured: ' + error.message);
});
}
module.exports.testSelf = module.exports;