From c5337d2ceff08931350ccf74469a7f578b1ae4f6 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Fri, 24 Dec 2021 14:40:01 +0530 Subject: [PATCH] code cleaning --- apps/remix-ide/src/app/tabs/test-tab.js | 543 ------------------ .../remix-ide/src/app/tabs/testTab/testTab.js | 138 ----- .../src/lib/solidity-unit-testing.tsx | 6 +- 3 files changed, 3 insertions(+), 684 deletions(-) delete mode 100644 apps/remix-ide/src/app/tabs/testTab/testTab.js diff --git a/apps/remix-ide/src/app/tabs/test-tab.js b/apps/remix-ide/src/app/tabs/test-tab.js index 1267b585aa..8dfe2c8615 100644 --- a/apps/remix-ide/src/app/tabs/test-tab.js +++ b/apps/remix-ide/src/app/tabs/test-tab.js @@ -17,8 +17,6 @@ var { UnitTestRunner, assertLibCode } = require('@remix-project/remix-tests') const _paq = window._paq = window._paq || [] -// const TestTabLogic = require('./testTab/testTab') - const profile = { name: 'solidityUnitTesting', displayName: 'Solidity unit testing', @@ -43,15 +41,8 @@ module.exports = class TestTab extends ViewPlugin { this.renderer = new Renderer(this) this.testRunner = new UnitTestRunner() this.testTabLogic = new TestTabLogic(this.fileManager, helper) - this.hasBeenStopped = false - this.runningTestsNumber = 0 - this.readyTestsNumber = 0 - this.areTestsRunning = false - this.defaultPath = 'tests' this.offsetToLineColumnConverter = offsetToLineColumnConverter this.allFilesInvolved = ['.deps/remix-tests/remix_tests.sol', '.deps/remix-tests/remix_accounts.sol'] - this.isDebugging = false - this.currentErrors = [] this.element = document.createElement('div') appManager.event.on('activate', (name) => { @@ -150,300 +141,6 @@ module.exports = class TestTab extends ViewPlugin { this.fileManager.events.on('currentFileChanged', (file, provider) => this.updateForNewCurrent(file)) } - async updateForNewCurrent (file) { - // Ensure that when someone clicks on compilation error and that opens a new file - // Test result, which is compilation error in this case, is not cleared - if (this.currentErrors) { - if (Array.isArray(this.currentErrors) && this.currentErrors.length > 0) { - const errFiles = this.currentErrors.map(err => { if (err.sourceLocation && err.sourceLocation.file) return err.sourceLocation.file }) - if (errFiles.includes(file)) return - } else if (this.currentErrors.sourceLocation && this.currentErrors.sourceLocation.file && this.currentErrors.sourceLocation.file === file) return - } - // if current file is changed while debugging and one of the files imported in test file are opened - // do not clear the test results in SUT plugin - if (this.isDebugging && this.allFilesInvolved.includes(file)) return - this.data.allTests = [] - this.updateTestFileList() - this.clearResults() - this.updateGenerateFileAction() - if (!this.areTestsRunning) this.updateRunAction(file) - try { - await this.testTabLogic.getTests((error, tests) => { - if (error) return tooltip(error) - this.data.allTests = tests - this.data.selectedTests = [...this.data.allTests] - this.updateTestFileList(tests) - if (!this.testsOutput) return // eslint-disable-line - }) - } catch (e) { - console.log(e) - } - } - - createSingleTest (testFile) { - return yo` -
- this.toggleCheckbox(e.target.checked, testFile)} type="checkbox" checked="true"> - -
- ` - } - - listTests () { - if (!this.data.allTests || !this.data.allTests.length) return [] - return this.data.allTests.map( - testFile => this.createSingleTest(testFile) - ) - } - - async startDebug (txHash, web3) { - this.isDebugging = true - if (!await this.appManager.isActive('debugger')) await this.appManager.activatePlugin('debugger') - this.call('menuicons', 'select', 'debugger') - this.call('debugger', 'debug', txHash, web3) - } - - printHHLogs (logsArr, testName) { - let finalLogs = `${testName}:\n` - for (const log of logsArr) { - let formattedLog - // Hardhat implements the same formatting options that can be found in Node.js' console.log, - // which in turn uses util.format: https://nodejs.org/dist/latest-v12.x/docs/api/util.html#util_util_format_format_args - // For example: console.log("Name: %s, Age: %d", remix, 6) will log 'Name: remix, Age: 6' - // We check first arg to determine if 'util.format' is needed - if (typeof log[0] === 'string' && (log[0].includes('%s') || log[0].includes('%d'))) { - formattedLog = format(log[0], ...log.slice(1)) - } else { - formattedLog = log.join(' ') - } - finalLogs = finalLogs + ' ' + formattedLog + '\n' - } - _paq.push(['trackEvent', 'solidityUnitTesting', 'hardhat', 'console.log']) - this.call('terminal', 'log', { type: 'info', value: finalLogs }) - } - - testCallback (result, runningTests) { - this.testsOutput.hidden = false - let debugBtn = yo`` - if ((result.type === 'testPass' || result.type === 'testFailure') && result.debugTxHash) { - const { web3, debugTxHash } = result - debugBtn = yo`
this.startDebug(debugTxHash, web3)}> - -
` - debugBtn.style.cursor = 'pointer' - } - if (result.type === 'contract') { - this.testSuite = result.value - if (this.testSuites) { - this.testSuites.push(this.testSuite) - } else { - this.testSuites = [this.testSuite] - } - this.rawFileName = result.filename - this.runningTestFileName = this.cleanFileName(this.rawFileName, this.testSuite) - this.outputHeader = yo` -
- ${this.testSuite} (${this.rawFileName}) -
- ` - this.testsOutput.appendChild(this.outputHeader) - } else if (result.type === 'testPass') { - if (result.hhLogs && result.hhLogs.length) this.printHHLogs(result.hhLogs, result.value) - this.testsOutput.appendChild(yo` -
this.discardHighlight()} - > -
- ✓ ${result.value} - ${debugBtn} -
-
- `) - } else if (result.type === 'testFailure') { - if (result.hhLogs && result.hhLogs.length) this.printHHLogs(result.hhLogs, result.value) - if (!result.assertMethod) { - this.testsOutput.appendChild(yo` -
this.highlightLocation(result.location, runningTests, result.filename)} - > -
- ✘ ${result.value} - ${debugBtn} -
- Error Message: - "${result.errMsg}" -
- `) - } else { - const preposition = result.assertMethod === 'equal' || result.assertMethod === 'notEqual' ? 'to' : '' - const method = result.assertMethod === 'ok' ? '' : result.assertMethod - const expected = result.assertMethod === 'ok' ? '\'true\'' : result.expected - this.testsOutput.appendChild(yo` -
this.highlightLocation(result.location, runningTests, result.filename)} - > -
- ✘ ${result.value} - ${debugBtn} -
- Error Message: - "${result.errMsg}" - Assertion: -
- Expected value should be -
${method}
-
${preposition} ${expected}
-
- Received value: - ${result.returned} - Skipping the remaining tests of the function. -
- `) - } - } else if (result.type === 'logOnly') { - if (result.hhLogs && result.hhLogs.length) this.printHHLogs(result.hhLogs, result.value) - } - } - - resultsCallback (_err, result, cb) { - // total stats for the test - // result.passingNum - // result.failureNum - // result.timePassed - cb() - } - - cleanFileName (fileName, testSuite) { - return fileName ? fileName.replace(/\//g, '_').replace(/\./g, '_') + testSuite : fileName - } - - setHeader (status) { - if (status) { - const label = yo` -
- PASS -
- ` - - this.outputHeader && yo.update(this.outputHeader, yo` -
- ${label} ${this.testSuite} (${this.rawFileName}) -
- `) - } else { - const label = yo` -
- FAIL -
- ` - - this.outputHeader && yo.update(this.outputHeader, yo` -
- ${label} ${this.testSuite} (${this.rawFileName}) -
- `) - } - } - - updateFinalResult (_errors, result, filename) { - ++this.readyTestsNumber - this.testsOutput.hidden = false - if (!result && (_errors && (_errors.errors || (Array.isArray(_errors) && (_errors[0].message || _errors[0].formattedMessage))))) { - this.testCallback({ type: 'contract', filename }) - this.currentErrors = _errors.errors - this.setHeader(false) - } - if (_errors && _errors.errors) { - _errors.errors.forEach((err) => this.renderer.error(err.formattedMessage || err.message, this.testsOutput, { type: err.severity, errorType: err.type })) - } else if (_errors && Array.isArray(_errors) && (_errors[0].message || _errors[0].formattedMessage)) { - _errors.forEach((err) => this.renderer.error(err.formattedMessage || err.message, this.testsOutput, { type: err.severity, errorType: err.type })) - } else if (_errors && !_errors.errors && !Array.isArray(_errors)) { - // To track error like this: https://github.com/ethereum/remix/pull/1438 - this.renderer.error(_errors.formattedMessage || _errors.message, this.testsOutput, { type: 'error' }) - } - yo.update(this.resultStatistics, this.createResultLabel()) - if (result) { - const totalTime = parseFloat(result.totalTime).toFixed(2) - - if (result.totalPassing > 0 && result.totalFailing > 0) { - this.testsOutput.appendChild(yo` -
- Result for ${filename} - Passing: ${result.totalPassing} - Failing: ${result.totalFailing} - Total time: ${totalTime}s -
- `) - } else if (result.totalPassing > 0 && result.totalFailing <= 0) { - this.testsOutput.appendChild(yo` -
- Result for ${filename} - Passing: ${result.totalPassing} - Total time: ${totalTime}s -
- `) - } else if (result.totalPassing <= 0 && result.totalFailing > 0) { - this.testsOutput.appendChild(yo` -
- Result for ${filename} - Failing: ${result.totalFailing} - Total time: ${totalTime}s -
- `) - } - // fix for displaying right label for multiple tests (testsuites) in a single file - this.testSuites.forEach(testSuite => { - this.testSuite = testSuite - this.runningTestFileName = this.cleanFileName(filename, this.testSuite) - this.outputHeader = document.querySelector(`#${this.runningTestFileName}`) - this.setHeader(true) - }) - - result.errors.forEach((error, index) => { - this.testSuite = error.context - this.runningTestFileName = this.cleanFileName(filename, error.context) - this.outputHeader = document.querySelector(`#${this.runningTestFileName}`) - const isFailingLabel = document.querySelector(`.failed_${this.runningTestFileName}`) - if (!isFailingLabel) this.setHeader(false) - }) - this.testsOutput.appendChild(yo` -
-

-
- `) - } - if (this.hasBeenStopped && (this.readyTestsNumber !== this.runningTestsNumber)) { - // if all tests has been through before stopping no need to print this. - this.testsExecutionStopped.hidden = false - } - if (_errors) this.testsExecutionStoppedError.hidden = false - if (_errors || this.hasBeenStopped || this.readyTestsNumber === this.runningTestsNumber) { - // All tests are ready or the operation has been canceled or there was a compilation error in one of the test files. - const stopBtn = document.getElementById('runTestsTabStopAction') - stopBtn.setAttribute('disabled', 'disabled') - const stopBtnLabel = document.getElementById('runTestsTabStopActionLabel') - stopBtnLabel.innerText = 'Stop' - if (this.data.selectedTests.length !== 0) { - const runBtn = document.getElementById('runTestsTabRunAction') - runBtn.removeAttribute('disabled') - } - this.areTestsRunning = false - } - } - async testFromPath (path) { const fileContent = await this.fileManager.readFile(path) return this.testFromSource(fileContent, path) @@ -485,167 +182,6 @@ module.exports = class TestTab extends ViewPlugin { }) } - runTest (testFilePath, callback) { - this.isDebugging = false - if (this.hasBeenStopped) { - this.updateFinalResult() - return - } - this.resultStatistics.hidden = false - this.fileManager.readFile(testFilePath).then((content) => { - const runningTests = {} - runningTests[testFilePath] = { content } - const { currentVersion, evmVersion, optimize, runs, isUrl } = this.compileTab.getCurrentCompilerConfig() - const currentCompilerUrl = isUrl ? currentVersion : urlFromVersion(currentVersion) - const compilerConfig = { - currentCompilerUrl, - evmVersion, - optimize, - usingWorker: canUseWorker(currentVersion), - runs - } - const deployCb = async (file, contractAddress) => { - const compilerData = await this.call('compilerArtefacts', 'getCompilerAbstract', file) - await this.call('compilerArtefacts', 'addResolvedContract', contractAddress, compilerData) - } - this.testRunner.runTestSources( - runningTests, - compilerConfig, - (result) => this.testCallback(result, runningTests), - (_err, result, cb) => this.resultsCallback(_err, result, cb), - deployCb, - (error, result) => { - this.updateFinalResult(error, result, testFilePath) - callback(error) - }, (url, cb) => { - return this.contentImport.resolveAndSave(url).then((result) => cb(null, result)).catch((error) => cb(error.message)) - }, { testFilePath } - ) - }).catch((error) => { - if (error) return // eslint-disable-line - }) - } - - clearResults () { - yo.update(this.resultStatistics, yo``) - this.call('editor', 'clearAnnotations') - this.testsOutput.innerHTML = '' - this.testsOutput.hidden = true - this.testsExecutionStopped.hidden = true - this.testsExecutionStoppedError.hidden = true - } - - runTests () { - this.areTestsRunning = true - this.hasBeenStopped = false - this.readyTestsNumber = 0 - this.runningTestsNumber = this.data.selectedTests.length - const stopBtn = document.getElementById('runTestsTabStopAction') - stopBtn.removeAttribute('disabled') - const runBtn = document.getElementById('runTestsTabRunAction') - runBtn.setAttribute('disabled', 'disabled') - this.clearResults() - yo.update(this.resultStatistics, this.createResultLabel()) - const tests = this.data.selectedTests - if (!tests) return - this.resultStatistics.hidden = tests.length === 0 - _paq.push(['trackEvent', 'solidityUnitTesting', 'runTests']) - async.eachOfSeries(tests, (value, key, callback) => { - if (this.hasBeenStopped) return - this.runTest(value, callback) - }) - } - - stopTests () { - this.hasBeenStopped = true - const stopBtnLabel = document.getElementById('runTestsTabStopActionLabel') - stopBtnLabel.innerText = 'Stopping' - const stopBtn = document.getElementById('runTestsTabStopAction') - stopBtn.setAttribute('disabled', 'disabled') - const runBtn = document.getElementById('runTestsTabRunAction') - runBtn.setAttribute('disabled', 'disabled') - } - - updateRunAction (currentFile) { - const el = yo` - - ` - const isSolidityActive = this.appManager.isActive('solidity') - if (!isSolidityActive || !this.listTests().length) { - el.setAttribute('disabled', 'disabled') - if (!currentFile || (currentFile && currentFile.split('.').pop().toLowerCase() !== 'sol')) { - el.setAttribute('title', 'No solidity file selected') - } else { - el.setAttribute('title', 'The "Solidity Plugin" should be activated') - } - } - if (!this.runActionElement) { - this.runActionElement = el - } else { - yo.update(this.runActionElement, el) - } - return this.runActionElement - } - - updateStopAction () { - return yo` - - ` - } - - updateTestFileList (tests) { - const testsMessage = (tests && tests.length ? this.listTests() : 'No test file available') - const el = yo`
${testsMessage}
` - if (!this.testFilesListElement) { - this.testFilesListElement = el - } else { - yo.update(this.testFilesListElement, el) - } - this.updateRunAction() - return this.testFilesListElement - } - - selectAll () { - return yo` -
- - -
- ` - } - - infoButton () { - return yo` - - - - ` - } - - createResultLabel () { - if (!this.data.selectedTests) return yo`` - const ready = this.readyTestsNumber ? `${this.readyTestsNumber}` : '0' - return yo`Progress: ${ready} finished (of ${this.runningTestsNumber})` - } - - pathAdded (text) { - for (const option of this.uiPathList.querySelectorAll('option')) { - if (option.innerHTML === text) return true - } - return false - } - render () { this.onActivationInternal() this.renderComponent() @@ -657,83 +193,4 @@ module.exports = class TestTab extends ViewPlugin { , this.element) } - - render2 () { - this.onActivationInternal() - this.testsOutput = yo`