|
|
|
'use strict'
|
|
|
|
var init = require('../helpers/init')
|
|
|
|
var sauce = require('./sauce')
|
|
|
|
|
|
|
|
var assetsTestContract = `import "./contract.sol";
|
|
|
|
contract Assets {
|
|
|
|
uint[] proposals;
|
|
|
|
function add(uint8 _numProposals) public {
|
|
|
|
proposals.length = _numProposals;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`
|
|
|
|
|
|
|
|
var gmbhTestContract = `contract gmbh {
|
|
|
|
uint[] proposals;
|
|
|
|
function register(uint8 _numProposals) public {
|
|
|
|
proposals.length = _numProposals;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`
|
|
|
|
var sources = [
|
|
|
|
{
|
|
|
|
'localhost/folder1/contract2.sol': {content: 'contract test2 { function get () public returns (uint) { return 11; }}'}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'localhost/src/gmbh/company.sol': {content: assetsTestContract}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'localhost/src/gmbh/company.sol': {content: assetsTestContract},
|
|
|
|
'localhost/src/gmbh/contract.sol': {content: gmbhTestContract}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'browser/test_import_node_modules.sol': {content: 'import "openzeppelin-solidity/contracts/math/SafeMath.sol";'}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'browser/test_import_node_modules_with_github_import.sol': {content: 'import "openzeppelin-solidity/contracts/sample.sol";'}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
before: function (browser, done) {
|
|
|
|
init(browser, done)
|
|
|
|
},
|
|
|
|
'@sources': function () {
|
|
|
|
return sources
|
|
|
|
},
|
|
|
|
'Remixd': function (browser) {
|
|
|
|
runTests(browser)
|
|
|
|
},
|
|
|
|
'Import from node_modules ': function (browser) {
|
|
|
|
/*
|
|
|
|
when a relative import is used (i.e import "openzeppelin-solidity/contracts/math/SafeMath.sol")
|
|
|
|
remix (as well as truffle) try to resolve it against the node_modules and installed_contracts folder.
|
|
|
|
*/
|
|
|
|
|
|
|
|
browser.waitForElementVisible('#icon-panel', 2000)
|
|
|
|
.clickLaunchIcon('fileExplorers')
|
|
|
|
.addFile('test_import_node_modules.sol', sources[3]['browser/test_import_node_modules.sol'])
|
|
|
|
.clickLaunchIcon('solidity')
|
|
|
|
.testContracts('test_import_node_modules.sol', sources[3]['browser/test_import_node_modules.sol'], ['SafeMath'])
|
|
|
|
},
|
|
|
|
'Import from node_modules and reference a github import': function (browser) {
|
|
|
|
browser.waitForElementVisible('#icon-panel', 2000)
|
|
|
|
.clickLaunchIcon('fileExplorers')
|
|
|
|
.addFile('test_import_node_modules_with_github_import.sol', sources[4]['browser/test_import_node_modules_with_github_import.sol'])
|
|
|
|
.clickLaunchIcon('solidity')
|
|
|
|
.setSolidityCompilerVersion('soljson-v0.6.2+commit.bacdbe57.js') // open-zeppelin moved to pragma ^0.6.0
|
|
|
|
.testContracts('test_import_node_modules_with_github_import.sol', sources[4]['browser/test_import_node_modules_with_github_import.sol'], ['ERC20', 'test11'])
|
|
|
|
.clickLaunchIcon('pluginManager')
|
|
|
|
.scrollAndClick('#pluginManager article[id="remixPluginManagerListItem_remixd"] button')
|
|
|
|
.end()
|
|
|
|
},
|
|
|
|
tearDown: sauce
|
|
|
|
}
|
|
|
|
|
|
|
|
function runTests (browser, testData) {
|
|
|
|
var browserName = browser.options.desiredCapabilities.browserName
|
|
|
|
if (browserName === 'safari' || browserName === 'internet explorer') {
|
|
|
|
console.log('do not run remixd test for ' + browserName + ': sauce labs doesn\'t seems to handle websocket')
|
|
|
|
browser.end()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
browser
|
|
|
|
.waitForElementVisible('#icon-panel', 2000)
|
|
|
|
.clickLaunchIcon('fileExplorers')
|
|
|
|
.clickLaunchIcon('pluginManager')
|
|
|
|
.scrollAndClick('#pluginManager article[id="remixPluginManagerListItem_remixd"] button')
|
|
|
|
.waitForElementVisible('#modal-footer-ok', 2000)
|
|
|
|
.pause(2000)
|
|
|
|
.click('#modal-footer-ok')
|
|
|
|
.clickLaunchIcon('fileExplorers')
|
|
|
|
.waitForElementVisible('[data-path="localhost/folder1"]')
|
|
|
|
.click('[data-path="localhost/folder1"]')
|
|
|
|
.waitForElementVisible('[data-path="localhost/contract1.sol"]')
|
|
|
|
.assert.containsText('[data-path="localhost/contract1.sol"]', 'contract1.sol')
|
|
|
|
.assert.containsText('[data-path="localhost/contract2.sol"]', 'contract2.sol')
|
|
|
|
.waitForElementVisible('[data-path="localhost/folder1/contract1.sol"]')
|
|
|
|
.assert.containsText('[data-path="localhost/folder1/contract1.sol"]', 'contract1.sol')
|
|
|
|
.assert.containsText('[data-path="localhost/folder1/contract2.sol"]', 'contract2.sol') // load and test sub folder
|
|
|
|
.click('[data-path="localhost/folder1/contract2.sol"]')
|
|
|
|
.click('[data-path="localhost/folder1/contract1.sol"]') // open localhost/folder1/contract1.sol
|
|
|
|
.pause(1000)
|
|
|
|
.testEditorValue('contract test1 { function get () returns (uint) { return 10; }}') // check the content and replace by another
|
|
|
|
.setEditorValue('contract test1Changed { function get () returns (uint) { return 10; }}')
|
|
|
|
.testEditorValue('contract test1Changed { function get () returns (uint) { return 10; }}')
|
|
|
|
.setEditorValue('contract test1 { function get () returns (uint) { return 10; }}')
|
|
|
|
.click('[data-path="localhost/folder1/contract_' + browserName + '.sol"]') // rename a file and check
|
|
|
|
.pause(1000)
|
|
|
|
.renameFile('localhost/folder1/contract_' + browserName + '.sol', 'renamed_contract_' + browserName + '.sol', 'localhost/folder1/renamed_contract_' + browserName + '.sol')
|
|
|
|
.pause(1000)
|
|
|
|
.removeFile('localhost/folder1/contract_' + browserName + '_toremove.sol')
|
|
|
|
.perform(function (done) {
|
|
|
|
testImportFromRemixd(browser, () => { done() })
|
|
|
|
})
|
|
|
|
.clickLaunchIcon('fileExplorers')
|
|
|
|
.waitForElementVisible('[data-path="localhost/folder1"]')
|
|
|
|
.click('[data-path="localhost/folder1"]')
|
|
|
|
.click('[data-path="localhost/folder1"]') // click twice because remixd does not return nested folder details after update
|
|
|
|
.waitForElementVisible('[data-path="localhost/folder1/contract1.sol"]')
|
|
|
|
.waitForElementVisible('[data-path="localhost/folder1/renamed_contract_' + browserName + '.sol"]') // check if renamed file is preset
|
|
|
|
.waitForElementNotPresent('[data-path="localhost/folder1/contract_' + browserName + '.sol"]') // check if renamed (old) file is not present
|
|
|
|
.waitForElementNotPresent('[data-path="localhost/folder1/contract_' + browserName + '_toremove.sol"]') // check if removed (old) file is not present
|
|
|
|
.click('[data-path="localhost/folder1/renamed_contract_' + browserName + '.sol"]')
|
|
|
|
}
|
|
|
|
|
|
|
|
function testImportFromRemixd (browser, callback) {
|
|
|
|
browser
|
|
|
|
.waitForElementVisible('[data-path="localhost/src"]', 100000)
|
|
|
|
.click('[data-path="localhost/src"]')
|
|
|
|
.waitForElementVisible('[data-path="localhost/src/gmbh"]', 100000)
|
|
|
|
.click('[data-path="localhost/src/gmbh"]')
|
|
|
|
.waitForElementVisible('[data-path="localhost/src/gmbh/company.sol"]', 100000)
|
|
|
|
.click('[data-path="localhost/src/gmbh/company.sol"]')
|
|
|
|
.pause(1000)
|
|
|
|
.verifyContracts(['Assets', 'gmbh'])
|
|
|
|
.perform(() => { callback() })
|
|
|
|
}
|