diff --git a/apps/remix-ide-e2e/src/tests/staticAnalysis.test.ts b/apps/remix-ide-e2e/src/tests/staticAnalysis.test.ts new file mode 100644 index 0000000000..c7c37043d2 --- /dev/null +++ b/apps/remix-ide-e2e/src/tests/staticAnalysis.test.ts @@ -0,0 +1,70 @@ +'use strict' +import { NightwatchBrowser } from "nightwatch" +import init from '../helpers/init' +import sauce from './sauce' + +const sources = [ + { + 'browser/Untitled.sol': {content: ` +pragma solidity >=0.4.22 <0.6.0; +contract test1 { address test = tx.origin; } +contract test2 {} +contract TooMuchGas { + uint x; + function() external { + x++; + uint test; + uint test1; + } +}`}} +] + +module.exports = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + init(browser, done) + }, + '@sources': function () { + return sources + }, + 'Static Analysis': function (browser: NightwatchBrowser) { + runTests(browser) + }, + tearDown: sauce +} + +function runTests (browser: NightwatchBrowser) { + browser + .waitForElementVisible('#icon-panel', 10000) + .clickLaunchIcon('solidity') + .testContracts('Untitled.sol', sources[0]['browser/Untitled.sol'], ['TooMuchGas', 'test1', 'test2']) + .clickLaunchIcon('solidityStaticAnalysis') + .click('#staticanalysisView button') + .waitForElementPresent('#staticanalysisresult .warning', 2000, true, function () { + listSelectorContains(['Use of tx.origin', + 'Fallback function of contract TooMuchGas requires too much gas', + 'TooMuchGas.() : Variables have very similar names "test" and "test1".'], + '#staticanalysisresult .warning', + browser, function () { + browser.end() + } + ) + }) +} + +function listSelectorContains (textsToFind: string[], selector: string, browser: NightwatchBrowser, callback: VoidFunction) { + browser.execute(function (selector) { + const items = document.querySelectorAll(selector) + const ret = [] + for (let k = 0; k < items.length; k++) { + ret.push(items[k].innerText) + } + return ret + }, [selector], function (result) { + console.log(result.value) + for (const k in textsToFind) { + console.log('testing `' + result.value[k] + '` against `' + textsToFind[k] + '`') + browser.assert.equal(result.value[k].indexOf(textsToFind[k]) !== -1, true) + } + callback() + }) +}