'use strict' import { NightwatchBrowser } from 'nightwatch' import init from '../helpers/init' import sauce from './sauce' import examples from '../examples/example-contracts' const sources = [ { 'Untitled.sol': { content: examples.ballot.content } } ] module.exports = { before: function (browser: NightwatchBrowser, done: VoidFunction) { init(browser, done) }, '@sources': function () { return sources }, 'Should compile using "compileWithParamaters" API': function (browser: NightwatchBrowser) { browser .addFile('test_jsCompile.js', { content: jsCompile }) .executeScript('remix.exeCurrent()') .pause(5000) .journalChildIncludes('"languageversion": "0.6.8+commit.0bbfe453"') .click('*[data-id="terminalClearConsole"]') }, 'Should compile using "compileWithParamaters" API with optimization On': function (browser: NightwatchBrowser) { browser .addFile('test_jsCompileWithOptimization.js', { content: jsCompileWithOptimization }) .executeScript('remix.exeCurrent()') .pause(10000) .journalChildIncludes('\\"optimizer\\":{\\"enabled\\":true,\\"runs\\":300}') .click('*[data-id="terminalClearConsole"]') }, 'Should compile using "compileWithParamaters" API with optimization off check default runs': function (browser: NightwatchBrowser) { browser .addFile('test_jsCompileWithOptimizationDefault.js', { content: jsCompileWithOptimizationDefault }) .executeScript('remix.exeCurrent()') .pause(10000) .journalChildIncludes('\\"optimizer\\":{\\"enabled\\":false,\\"runs\\":200}') .click('*[data-id="terminalClearConsole"]') }, 'Should update the compiler configuration with "setCompilerConfig" API': function (browser: NightwatchBrowser) { browser .addFile('test_updateConfiguration.js', { content: updateConfiguration }) .executeScript('remix.exeCurrent()') .pause(5000) .addFile('test_updateConfiguration.sol', { content: simpleContract }) .verifyContracts(['StorageTestUpdateConfiguration'], { wait: 5000, version: '0.6.8+commit.0bbfe453' }) .end() }, tearDown: sauce } const simpleContract = `pragma solidity >=0.4.22 <0.9.1; /** * @title Storage * @dev Store & retreive value in a variable */ contract StorageTestUpdateConfiguration { uint256 number; /** * @dev Store value in variable * @param num value to store */ function store(uint256 num) public { number = num; } /** * @dev Return value * @return value of 'number' */ function retreive() public view returns (uint256){ return number; } } ` const jsCompile = `(async () => { try { const contract = { "storage.sol": {content : \`${simpleContract}\` } } console.log('compile') const params = { optimize: false, evmVersion: null, language: 'Solidity', version: '0.6.8+commit.0bbfe453' } const result = await remix.call('solidity', 'compileWithParameters', contract, params) console.log('result ', result) } catch (e) { console.log(e.message) } })()` const jsCompileWithOptimization = `(async () => { try { const contract = { "storage.sol": {content : \`${simpleContract}\` } } console.log('compile') const params = { optimize: true, runs: 300, evmVersion: null, language: 'Solidity', version: '0.6.8+commit.0bbfe453' } const result = await remix.call('solidity', 'compileWithParameters', contract, params) console.log('result ', result) } catch (e) { console.log(e.message) } })()` const jsCompileWithOptimizationDefault = `(async () => { try { const contract = { "storage.sol": {content : \`${simpleContract}\` } } console.log('compile') const params = { optimize: false, } const result = await remix.call('solidity', 'compileWithParameters', contract, params) console.log('result ', result) } catch (e) { console.log(e.message) } })()` const updateConfiguration = `(async () => { try { const params = { optimize: false, evmVersion: null, language: 'Solidity', version: '0.6.8+commit.0bbfe453' } await remix.call('solidity', 'setCompilerConfig', params) } catch (e) { console.log(e.message) } })()`