import test from "tape" import { helpers } from '@remix-project/remix-lib' import { readFileSync } from 'fs' import { join } from 'path' import { default as StatRunner } from '../../src/solidity-analyzer' import solc from 'solc'; import { CompilationResult, AnalysisReportObj, AnalysisReport, AnalyzerModule } from '../../src/types' import { checksEffectsInteraction } from '../../src/solidity-analyzer/modules/' const { compilerInput } = helpers.compiler const folder: string = 'solidity-v0.4.24' let compiler test('setup', function (t) { solc.loadRemoteVersion('v0.4.24+commit.e67f0147', (error, solcVersion) => { if (error) throw error compiler = solcVersion t.end() }) }); function compile (fileName: string): CompilationResult { const content: string = readFileSync(join(__dirname, 'test-contracts/' + folder, fileName), 'utf8') return JSON.parse(compiler.compile(compilerInput(content))) } test('staticAnalysisIssues.functionParameterPassingError', function (t) { // https://github.com/ethereum/remix-ide/issues/889#issuecomment-351746474 t.plan(2) const res: CompilationResult = compile('functionParameters.sol') const Module: any = checksEffectsInteraction const statRunner: StatRunner = new StatRunner() t.doesNotThrow(() => { statRunner.runWithModuleList(res, [{ name: new Module().name, mod: new Module() }], (reports: AnalysisReport[]) => {}) }, 'Analysis should not throw') statRunner.runWithModuleList(res, [{ name: new Module().name, mod: new Module() }], (reports: AnalysisReport[]) => { t.ok(!reports.some((mod: AnalysisReport) => mod.report.some((rep: AnalysisReportObj) => rep.warning.includes('INTERNAL ERROR')), 'Should not have internal errors')) }) })