From dfc133d9afe395a10fbe741feb76811419bd0d79 Mon Sep 17 00:00:00 2001 From: Arseniy Klempner Date: Tue, 25 Oct 2016 20:43:35 -0700 Subject: [PATCH] Create tests for Stoppable. --- contracts/test-helpers/StoppableMock.sol | 9 +- test/Stoppable.js | 108 +++++++++++++++++++++++ 2 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 test/Stoppable.js diff --git a/contracts/test-helpers/StoppableMock.sol b/contracts/test-helpers/StoppableMock.sol index 9cbd8a562..dcb9834f5 100644 --- a/contracts/test-helpers/StoppableMock.sol +++ b/contracts/test-helpers/StoppableMock.sol @@ -2,9 +2,14 @@ pragma solidity ^0.4.0; import '../Stoppable.sol'; // mock class using Stoppable -contract StoppableMock is Stoppable { +contract StoppableMock is Stoppable(msg.sender) { bool public drasticMeasureTaken; - uint public count = 0; + uint public count; + + function StoppableMock() Stoppable(msg.sender){ + drasticMeasureTaken = false; + count = 0; + } function normalProcess() external stopInEmergency { count++; diff --git a/test/Stoppable.js b/test/Stoppable.js new file mode 100644 index 000000000..f4ecc0e34 --- /dev/null +++ b/test/Stoppable.js @@ -0,0 +1,108 @@ +contract('Stoppable', function(accounts) { + + it("can perform normal process in non-emergency", function(done) { + var stoppable; + return StoppableMock.new(accounts[0]) + .then(function(_stoppable) { + stoppable = _stoppable; + return stoppable.count(); + }) + .then(function(count) { + assert.equal(count, 0); + }) + .then(function () { + return stoppable.normalProcess(); + }) + .then(function() { + return stoppable.count(); + }) + .then(function(count) { + assert.equal(count, 1); + }) + .then(done); + }); + + it("can not perform normal process in emergency", function(done) { + var stoppable; + return StoppableMock.new(accounts[0]) + .then(function(_stoppable) { + stoppable = _stoppable; + return stoppable.emergencyStop(); + }) + .then(function () { + return stoppable.count(); + }) + .then(function(count) { + assert.equal(count, 0); + }) + .then(function () { + return stoppable.normalProcess(); + }) + .then(function() { + return stoppable.count(); + }) + .then(function(count) { + assert.equal(count, 0); + }) + .then(done); + }); + + + it("can not take drastic measure in non-emergency", function(done) { + var stoppable; + return StoppableMock.new(accounts[0]) + .then(function(_stoppable) { + stoppable = _stoppable; + return stoppable.drasticMeasure(); + }) + .then(function() { + return stoppable.drasticMeasureTaken(); + }) + .then(function(taken) { + assert.isFalse(taken); + }) + .then(done); + }); + + it("can take a drastic measure in an emergency", function(done) { + var stoppable; + return StoppableMock.new(accounts[0]) + .then(function(_stoppable) { + stoppable = _stoppable; + return stoppable.emergencyStop(); + }) + .then(function() { + return stoppable.drasticMeasure(); + }) + .then(function() { + return stoppable.drasticMeasureTaken(); + }) + .then(function(taken) { + assert.isTrue(taken); + }) + .then(done); + }); + + it("should resume allowing normal process after emergency is over", function(done) { + var stoppable; + return StoppableMock.new(accounts[0]) + .then(function(_stoppable) { + stoppable = _stoppable; + return stoppable.emergencyStop(); + }) + .then(function () { + return stoppable.release(); + }) + .then(function() { + return stoppable.normalProcess(); + }) + .then(function() { + return stoppable.count(); + }) + .then(function(count) { + assert.equal(count, 1); + }) + .then(done); + }); + +});