|
|
|
@ -33,7 +33,22 @@ module.exports = { |
|
|
|
|
.waitForElementPresent('*[title="browser/test_test.sol"]') |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
'Should run unit test for simple_storage.sol file': function (browser) { |
|
|
|
|
'Should run simple unit test `simple_storage_test.sol` ': function (browser) { |
|
|
|
|
browser.waitForElementPresent('*[data-id="verticalIconsKindfileExplorers"]') |
|
|
|
|
.clickLaunchIcon('fileExplorers') |
|
|
|
|
.addFile('simple_storage_test.sol', sources[0]['browser/simple_storage_test.sol']) |
|
|
|
|
.click('*[data-id="verticalIconsKindsolidityUnitTesting"]') |
|
|
|
|
.waitForElementPresent('*[data-id="testTabCheckAllTests"]') |
|
|
|
|
.click('*[data-id="testTabCheckAllTests"]') |
|
|
|
|
.click('.singleTestLabel:nth-of-type(3)') |
|
|
|
|
.scrollAndClick('#runTestsTabRunAction') |
|
|
|
|
.pause(10000) |
|
|
|
|
.assert.containsText('*[data-id="testTabSolidityUnitTestsOutput"]', 'browser/simple_storage_test.sol (MyTest)') |
|
|
|
|
.assert.containsText('*[data-id="testTabSolidityUnitTestsOutput"]', '✓ (Initial value should be100)') |
|
|
|
|
.assert.containsText('*[data-id="testTabSolidityUnitTestsOutput"]', '✓ (Value is set200)') |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
'Should run advance unit test using natspec and experimental ABIEncoderV2 `ks2b_test.sol` ': function (browser) { |
|
|
|
|
browser.pause(100000) |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
@ -106,6 +121,97 @@ var sources = [ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
` |
|
|
|
|
}, |
|
|
|
|
'browser/ks2a.sol': { |
|
|
|
|
content: ` |
|
|
|
|
pragma solidity >=0.4.22 <0.6.0; |
|
|
|
|
contract Kickstarter { |
|
|
|
|
enum State { Started, Completed } |
|
|
|
|
|
|
|
|
|
struct Project { |
|
|
|
|
address owner; |
|
|
|
|
string name; |
|
|
|
|
uint goal; |
|
|
|
|
uint fundsAvailable; // added
|
|
|
|
|
uint amountContributed; // added
|
|
|
|
|
State state; |
|
|
|
|
mapping(address => uint) funders; // added
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Project[] public projects; |
|
|
|
|
|
|
|
|
|
constructor() public { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function createProject(string memory name, uint goal) public { |
|
|
|
|
projects.length++; // new line
|
|
|
|
|
Project storage project = projects[projects.length - 1]; |
|
|
|
|
project.name = name; |
|
|
|
|
project.goal = goal; |
|
|
|
|
project.owner = msg.sender; |
|
|
|
|
project.state = State.Started; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function fundProject(uint projectId) payable public { |
|
|
|
|
Project storage project = projects[projectId]; |
|
|
|
|
// require project exists
|
|
|
|
|
// PLEASE CHECK / or erase
|
|
|
|
|
// not this: require(projects[projectId].exists, "the project must exist to be funded");
|
|
|
|
|
|
|
|
|
|
// require for... underflow/overflow protection
|
|
|
|
|
project.funders[msg.sender] += msg.value; |
|
|
|
|
project.amountContributed += msg.value; |
|
|
|
|
project.fundsAvailable += msg.value; |
|
|
|
|
|
|
|
|
|
if (project.amountContributed >= project.goal) { |
|
|
|
|
project.state = State.Completed; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// this function is here because we can't use web3 when using the VM
|
|
|
|
|
function getContractBalance() public view returns(uint balance) { |
|
|
|
|
return address(this).balance; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
` |
|
|
|
|
}, |
|
|
|
|
'ks2b_test.sol': { |
|
|
|
|
content: ` |
|
|
|
|
pragma solidity >=0.4.22 <0.6.0; |
|
|
|
|
pragma experimental ABIEncoderV2; |
|
|
|
|
|
|
|
|
|
import "remix_tests.sol"; // this import is automatically injected by Remix.
|
|
|
|
|
import "remix_accounts.sol"; |
|
|
|
|
import "./ks2a.sol"; |
|
|
|
|
|
|
|
|
|
contract kickstarterTest { |
|
|
|
|
enum State { Started, Completed } |
|
|
|
|
|
|
|
|
|
Kickstarter kickstarter; |
|
|
|
|
/// #sender: account-0
|
|
|
|
|
function beforeAll () public { |
|
|
|
|
kickstarter = new Kickstarter(); |
|
|
|
|
kickstarter.createProject("ProjectA", 123000); |
|
|
|
|
kickstarter.createProject("ProjectB", 100); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// #sender: account-0
|
|
|
|
|
/// #value: 10000000
|
|
|
|
|
function checkProjectExists () public payable { |
|
|
|
|
(address owner, string memory name, uint goal, uint fundsAvailable, uint amountContributed, Kickstarter.State state) = kickstarter.projects(0); |
|
|
|
|
Assert.equal(name, "ProjectA", "project name is incorrect"); |
|
|
|
|
Assert.equal(owner, address(this), "owner is incorrect"); |
|
|
|
|
Assert.equal(goal, 123000, "funding goal is incorrect"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function checkProjectIsFundable () public { |
|
|
|
|
kickstarter.fundProject.value(120000)(0); |
|
|
|
|
(address owner, string memory name, uint goal, uint fundsAvailable, uint amountContributed, Kickstarter.State state) = kickstarter.projects(0); |
|
|
|
|
Assert.equal(amountContributed, 120000, "contributed amount is incorrect"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
` |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|