Sync with v1.0.0 of zeppelin-solidity
This commit is contained in:
49
test/BasicToken.js
Normal file
49
test/BasicToken.js
Normal file
@ -0,0 +1,49 @@
|
||||
contract('BasicToken', function(accounts) {
|
||||
|
||||
it("should return the correct totalSupply after construction", function(done) {
|
||||
return BasicTokenMock.new(accounts[0], 100)
|
||||
.then(function(token) {
|
||||
return token.totalSupply();
|
||||
})
|
||||
.then(function(totalSupply) {
|
||||
assert.equal(totalSupply, 100);
|
||||
})
|
||||
.then(done);
|
||||
})
|
||||
|
||||
it("should return correct balances after transfer", function(done) {
|
||||
var token;
|
||||
return BasicTokenMock.new(accounts[0], 100)
|
||||
.then(function(_token) {
|
||||
token = _token;
|
||||
return token.transfer(accounts[1], 100);
|
||||
})
|
||||
.then(function() {
|
||||
return token.balanceOf(accounts[0]);
|
||||
})
|
||||
.then(function(balance) {
|
||||
assert.equal(balance, 0);
|
||||
})
|
||||
.then(function() {
|
||||
return token.balanceOf(accounts[1]);
|
||||
})
|
||||
.then(function(balance) {
|
||||
assert.equal(balance, 100);
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
it("should throw an error when trying to transfer more than balance", function(done) {
|
||||
var token;
|
||||
return BasicTokenMock.new(accounts[0], 100)
|
||||
.then(function(_token) {
|
||||
token = _token;
|
||||
return token.transfer(accounts[1], 101);
|
||||
})
|
||||
.catch(function(error) {
|
||||
if (error.message.search('invalid JUMP') == -1) throw error
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
});
|
||||
69
test/Killable.js
Normal file
69
test/Killable.js
Normal file
@ -0,0 +1,69 @@
|
||||
|
||||
contract('Killable', function(accounts) {
|
||||
//from https://gist.github.com/xavierlepretre/88682e871f4ad07be4534ae560692ee6
|
||||
web3.eth.getTransactionReceiptMined = function (txnHash, interval) {
|
||||
var transactionReceiptAsync;
|
||||
interval = interval ? interval : 500;
|
||||
transactionReceiptAsync = function(txnHash, resolve, reject) {
|
||||
try {
|
||||
var receipt = web3.eth.getTransactionReceipt(txnHash);
|
||||
if (receipt == null) {
|
||||
setTimeout(function () {
|
||||
transactionReceiptAsync(txnHash, resolve, reject);
|
||||
}, interval);
|
||||
} else {
|
||||
resolve(receipt);
|
||||
}
|
||||
} catch(e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
|
||||
if (Array.isArray(txnHash)) {
|
||||
var promises = [];
|
||||
txnHash.forEach(function (oneTxHash) {
|
||||
promises.push(web3.eth.getTransactionReceiptMined(oneTxHash, interval));
|
||||
});
|
||||
return Promise.all(promises);
|
||||
} else {
|
||||
return new Promise(function (resolve, reject) {
|
||||
transactionReceiptAsync(txnHash, resolve, reject);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
it("should send balance to owner after death", function(done) {
|
||||
var initBalance, newBalance, owner, address, killable, kBalance;
|
||||
web3.eth.sendTransaction({from: web3.eth.coinbase, to: accounts[0], value: web3.toWei('50','ether')}, function(err, result) {
|
||||
if(err)
|
||||
console.log("ERROR:" + err);
|
||||
else {
|
||||
console.log(result);
|
||||
}
|
||||
})
|
||||
return Killable.new({from: accounts[0], value: web3.toWei('10','ether')})
|
||||
.then(function(_killable) {
|
||||
killable = _killable;
|
||||
return killable.owner();
|
||||
})
|
||||
.then(function(_owner) {
|
||||
owner = _owner;
|
||||
initBalance = web3.eth.getBalance(owner);
|
||||
kBalance = web3.eth.getBalance(killable.address);
|
||||
})
|
||||
.then(function() {
|
||||
return killable.kill({from: owner});
|
||||
})
|
||||
.then(function (txnHash) {
|
||||
return web3.eth.getTransactionReceiptMined(txnHash);
|
||||
})
|
||||
.then(function() {
|
||||
newBalance = web3.eth.getBalance(owner);
|
||||
})
|
||||
.then(function() {
|
||||
assert.isTrue(newBalance > initBalance);
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
});
|
||||
64
test/LimitBalance.js
Normal file
64
test/LimitBalance.js
Normal file
@ -0,0 +1,64 @@
|
||||
contract('LimitBalance', function(accounts) {
|
||||
var lb;
|
||||
|
||||
beforeEach(function() {
|
||||
return LimitBalanceMock.new().then(function(deployed) {
|
||||
lb = deployed;
|
||||
});
|
||||
});
|
||||
|
||||
var LIMIT = 1000;
|
||||
|
||||
it("should expose limit", function(done) {
|
||||
return lb.limit()
|
||||
.then(function(limit) {
|
||||
assert.equal(limit, LIMIT);
|
||||
})
|
||||
.then(done)
|
||||
});
|
||||
|
||||
it("should allow sending below limit", function(done) {
|
||||
var amount = 1;
|
||||
return lb.limitedDeposit({value: amount})
|
||||
.then(function() {
|
||||
assert.equal(web3.eth.getBalance(lb.address), amount);
|
||||
})
|
||||
.then(done)
|
||||
});
|
||||
|
||||
it("shouldnt allow sending above limit", function(done) {
|
||||
var amount = 1100;
|
||||
return lb.limitedDeposit({value: amount})
|
||||
.catch(function(error) {
|
||||
if (error.message.search('invalid JUMP') == -1) throw error
|
||||
})
|
||||
.then(done)
|
||||
});
|
||||
|
||||
it("should allow multiple sends below limit", function(done) {
|
||||
var amount = 500;
|
||||
return lb.limitedDeposit({value: amount})
|
||||
.then(function() {
|
||||
assert.equal(web3.eth.getBalance(lb.address), amount);
|
||||
return lb.limitedDeposit({value: amount})
|
||||
})
|
||||
.then(function() {
|
||||
assert.equal(web3.eth.getBalance(lb.address), amount*2);
|
||||
})
|
||||
.then(done)
|
||||
});
|
||||
|
||||
it("shouldnt allow multiple sends above limit", function(done) {
|
||||
var amount = 500;
|
||||
return lb.limitedDeposit({value: amount})
|
||||
.then(function() {
|
||||
assert.equal(web3.eth.getBalance(lb.address), amount);
|
||||
return lb.limitedDeposit({value: amount+1})
|
||||
})
|
||||
.catch(function(error) {
|
||||
if (error.message.search('invalid JUMP') == -1) throw error;
|
||||
})
|
||||
.then(done)
|
||||
});
|
||||
|
||||
});
|
||||
@ -39,4 +39,20 @@ contract('Ownable', function(accounts) {
|
||||
.then(done)
|
||||
});
|
||||
|
||||
it("should guard ownership against stuck state" ,function(done) {
|
||||
var ownable = Ownable.deployed();
|
||||
|
||||
return ownable.owner()
|
||||
.then(function (originalOwner) {
|
||||
return ownable.transfer(null, {from: originalOwner})
|
||||
.then(function() {
|
||||
return ownable.owner();
|
||||
})
|
||||
.then(function(newOwner) {
|
||||
assert.equal(originalOwner, newOwner);
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
82
test/SafeMath.js
Normal file
82
test/SafeMath.js
Normal file
@ -0,0 +1,82 @@
|
||||
|
||||
contract('SafeMath', function(accounts) {
|
||||
|
||||
var safeMath;
|
||||
|
||||
before(function() {
|
||||
return SafeMathMock.new()
|
||||
.then(function(_safeMath) {
|
||||
safeMath = _safeMath;
|
||||
});
|
||||
});
|
||||
|
||||
it("multiplies correctly", function(done) {
|
||||
var a = 5678;
|
||||
var b = 1234;
|
||||
return safeMath.multiply(a, b)
|
||||
.then(function() {
|
||||
return safeMath.result();
|
||||
})
|
||||
.then(function(result) {
|
||||
assert.equal(result, a*b);
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
it("adds correctly", function(done) {
|
||||
var a = 5678;
|
||||
var b = 1234;
|
||||
return safeMath.add(a, b)
|
||||
.then(function() {
|
||||
return safeMath.result();
|
||||
})
|
||||
.then(function(result) {
|
||||
assert.equal(result, a+b);
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
it("subtracts correctly", function(done) {
|
||||
var a = 5678;
|
||||
var b = 1234;
|
||||
return safeMath.subtract(a, b)
|
||||
.then(function() {
|
||||
return safeMath.result();
|
||||
})
|
||||
.then(function(result) {
|
||||
assert.equal(result, a-b);
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
it("should throw an error if subtraction result would be negative", function (done) {
|
||||
var a = 1234;
|
||||
var b = 5678;
|
||||
return safeMath.subtract(a, b)
|
||||
.catch(function(error) {
|
||||
if (error.message.search('invalid JUMP') == -1) throw error
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
it("should throw an error on addition overflow", function(done) {
|
||||
var a = 115792089237316195423570985008687907853269984665640564039457584007913129639935;
|
||||
var b = 1;
|
||||
return safeMath.add(a, b)
|
||||
.catch(function(error) {
|
||||
if (error.message.search('invalid JUMP') == -1) throw error
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
it("should throw an error on multiplication overflow", function(done) {
|
||||
var a = 115792089237316195423570985008687907853269984665640564039457584007913129639933;
|
||||
var b = 2;
|
||||
return safeMath.multiply(a, b)
|
||||
.catch(function(error) {
|
||||
if (error.message.search('invalid JUMP') == -1) throw error
|
||||
})
|
||||
.then(done);
|
||||
});
|
||||
|
||||
});
|
||||
@ -1,25 +0,0 @@
|
||||
pragma solidity ^0.4.4;
|
||||
import "truffle/Assert.sol";
|
||||
import "truffle/DeployedAddresses.sol";
|
||||
import "../contracts/Ownable.sol";
|
||||
|
||||
contract TestOwnable {
|
||||
Ownable ownable = new Ownable();
|
||||
|
||||
function testHasOwner() {
|
||||
Assert.isNotZero(ownable.owner(), "Ownable should have an owner upon creation.");
|
||||
}
|
||||
|
||||
function testChangesOwner() {
|
||||
address originalOwner = ownable.owner();
|
||||
ownable.transfer(0x0);
|
||||
Assert.notEqual(originalOwner, ownable.owner(), "Ownable should change owners after transfer.");
|
||||
}
|
||||
|
||||
function testOnlyOwnerCanChangeOwner() {
|
||||
Ownable deployedOwnable = Ownable(DeployedAddresses.Ownable());
|
||||
address originalOwner = deployedOwnable.owner();
|
||||
deployedOwnable.transfer(0x0);
|
||||
Assert.equal(originalOwner, deployedOwnable.owner(), "Ownable should prevent non-owners from transfering");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user