Skip to content

Commit

Permalink
added more tests and fixed bug when only receive declared
Browse files Browse the repository at this point in the history
  • Loading branch information
LianaHus committed Jan 30, 2020
1 parent 5b387f6 commit 16bd102
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 21 deletions.
18 changes: 12 additions & 6 deletions src/app/ui/universal-dapp-ui.js
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ UniversalDAppUI.prototype.renderInstanceFromABI = function (contractABI, address
<label class="pt-2 border-top d-flex justify-content-start flex-grow-1">
Low level interactions with contract
</label>
<a href="https://solidity.readthedocs.io/en/v0.6.2/contracts.html#receive-ether-function" class="" title="the link to documentation" target="_blank">
<a href="https://solidity.readthedocs.io/en/v0.6.2/contracts.html#receive-ether-function" title="the link to documentation" target="_blank">
<i aria-hidden="true" class="fas fa-info text-info my-2 mr-2"></i>
</a>
</div>
Expand Down Expand Up @@ -161,7 +161,7 @@ UniversalDAppUI.prototype.renderInstanceFromABI = function (contractABI, address
const fallback = self.udapp.getFallbackInterface(contractABI)
const receive = self.udapp.getReceiveInterface(contractABI)
const args = {
funABI: fallback,
funABI: fallback || receive,
address: address,
contractName: contractName,
contractABI: contractABI
Expand All @@ -177,16 +177,22 @@ UniversalDAppUI.prototype.renderInstanceFromABI = function (contractABI, address
}
}
if (calldata) {
if (calldata.length > 3 && calldata.substr(0, 2) === '0x') {
if (calldata.length < 2) setLLIError('the calldata should be a valid hexadecimal value with size of at least one byte.')
if (calldata.length < 4 && calldata.substr(0, 2) === '0x') {
setLLIError('The calldata should be a valid hexadecimal value with size of at least one byte.')
} else if (calldata.substr(0, 2) === '0x') {
if (!helper.isHexadecimal(calldata.substr(2, calldata.length))) {
setLLIError('the calldata should be a valid hexadecimal value.')
setLLIError('The calldata should be a valid hexadecimal value.')
}
} else if (!helper.isHexadecimal(calldata)) {
setLLIError('The calldata should be a valid hexadecimal value.')
}
if (!fallback) {
setLLIError("'fallback' function is not defined")
setLLIError("'Fallback' function is not defined")
}
}
if ((calldata || amount !== '0') && !error) self.runTransaction(false, args, null, calldata, null)
if (!receive && !fallback) setLLIError("Both 'receive' and 'fallback' functions are not defined")
if (!error) self.runTransaction(false, args, null, calldata, null)
}

contractActionsWrapper.appendChild(lowLevelInteracions)
Expand Down
76 changes: 61 additions & 15 deletions test-browser/tests/specialFunctions.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,6 @@
var init = require('../helpers/init')
var sauce = require('./sauce')

/**
* both are declared, sending data
* both are declared - receive called, sending wei
* both are declared - fallback should fail cause not payable, sending data and wei
* receive is declared, failing, fallback is not declared, sending data
* receive is not declared, fallback is payable, sending wei
* receive is not declared, fallback is payable, sending data and wei
* both are not declared, sending data and wei, should fail
*/
module.exports = {
before: function (browser, done) {
init(browser, done)
Expand All @@ -36,6 +27,18 @@ module.exports = {
})
})
},
'Use special functions receive/follback - both are declared - receive called, failing sending data < 1 byte': function (browser) {
// don't need to redeploy it, same contract
browser.perform((done) => {
browser.getAddressAtPosition(0, (address) => {
browser.sendLowLevelTx(address, '0', '0xa')
.pause(1000)
.waitForElementVisible(`#instance${address} label[id="deployAndRunLLTxError"]`)
.assert.containsText(`#instance${address} label[id="deployAndRunLLTxError"]`, `size of at least one byte`)
.perform(done)
})
})
},
'Use special functions receive/follback - both are declared - receive called, sending wei': function (browser) {
// don't need to redeploy it, same contract
browser.perform((done) => {
Expand All @@ -61,24 +64,37 @@ module.exports = {
})
})
},
'Use special functions receive/follback - receive is declared, failing, fallback is not declared, sending data': function (browser) {
'Use special functions receive/follback - only receive is declared, sending wei': function (browser) {
browser.waitForElementVisible('#icon-panel', 10000)
.testContracts('receiveOnly.sol', sources[1]['browser/receiveOnly.sol'], ['CheckSpecials'])
.clickLaunchIcon('udapp')
.selectContract('CheckSpecials')
.createContract('')
.clickInstance(1)
.perform((done) => {
browser.getAddressAtPosition(1, (address) => {
browser.sendLowLevelTx(address, '1', '')
.pause(1000)
.journalLastChildIncludes('to:CheckSpecials.(receive)')
.journalLastChildIncludes('value:1 wei')
.journalLastChildIncludes('data:0x')
.perform(done)
})
})
},
'Use special functions receive/follback - only receive is declared, failing, fallback is not declared, sending data': function (browser) {
// don't need to redeploy it, same contract
browser.perform((done) => {
browser.getAddressAtPosition(1, (address) => {
browser.sendLowLevelTx(address, '0', '0xaa')
.pause(1000)
.waitForElementVisible(`#instance${address} label[id="deployAndRunLLTxError"]`)
.assert.containsText(`#instance${address} label[id="deployAndRunLLTxError"]`, `'fallback' function is not defined`)
.assert.containsText(`#instance${address} label[id="deployAndRunLLTxError"]`, `'Fallback' function is not defined`)
.perform(done)
})
})
},
'Use special functions receive/fallback - receive is not declared, fallback is payable, sending wei': function (browser) {
'Use special functions receive/fallback - only fallback is payable, sending wei': function (browser) {
browser.waitForElementVisible('#icon-panel', 10000)
.testContracts('fallbackOnlyPayable.sol', sources[2]['browser/fallbackOnlyPayable.sol'], ['CheckSpecials'])
.clickLaunchIcon('udapp')
Expand All @@ -96,7 +112,7 @@ module.exports = {
})
})
},
'Use special functions receive/follback - receive is not declared, fallback is payable, sending data and wei': function (browser) {
'Use special functions receive/follback - only fallback is diclared and is payable, sending data and wei': function (browser) {
// don't need to redeploy it, same contract
browser.perform((done) => {
browser.getAddressAtPosition(2, (address) => {
Expand All @@ -109,7 +125,7 @@ module.exports = {
})
})
},
'Use special functions receive/fallback - receive is not declared, fallback should fail cause not payable, sending wei': function (browser) {
'Use special functions receive/fallback - only fallback is declared, fallback should fail cause not payable, sending wei': function (browser) {
browser.waitForElementVisible('#icon-panel', 10000)
.testContracts('fallbackOnlyNotPayable.sol', sources[3]['browser/fallbackOnlyNotPayable.sol'], ['CheckSpecials'])
.clickLaunchIcon('udapp')
Expand All @@ -136,7 +152,7 @@ module.exports = {
.setValue('#value', 0)
.createContract('')
.clickInstance(4)
.pause(10000)
.pause(1000)
.perform((done) => {
browser.getAddressAtPosition(4, (address) => {
browser.sendLowLevelTx(address, '1', '0xaa')
Expand All @@ -147,6 +163,27 @@ module.exports = {
.perform(done)
})
})
},
'Use special functions receive/fallback - receive and fallback are not declared, sending nothing': function (browser) {
browser.waitForElementVisible('#icon-panel', 10000)
.testContracts('notSpecial.sol', sources[5]['browser/notSpecial.sol'], ['CheckSpecials'])
.clickLaunchIcon('udapp')
.selectContract('CheckSpecials')
.waitForElementVisible('#value')
.clearValue('#value')
.setValue('#value', 0)
.createContract('')
.clickInstance(5)
.pause(1000)
.perform((done) => {
browser.getAddressAtPosition(5, (address) => {
browser.sendLowLevelTx(address, '0', '')
.pause(1000)
.waitForElementVisible(`#instance${address} label[id="deployAndRunLLTxError"]`)
.assert.containsText(`#instance${address} label[id="deployAndRunLLTxError"]`, `Both 'receive' and 'fallback' functions are not defined`)
.perform(done)
})
})
.end()
},
tearDown: sauce
Expand Down Expand Up @@ -199,5 +236,14 @@ var sources = [
}
`
}
},
{
'browser/notSpecial.sol': {
content: `
contract CheckSpecials {
function otherFallback() payable external {}
}
`
}
}
]

0 comments on commit 16bd102

Please sign in to comment.