diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index fb21cf0349..3dc0e05778 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -1,7 +1,8 @@ 'use strict' import { Plugin } from '@remixproject/engine' import { RemixURLResolver } from '@remix-project/remix-url-resolver' -const remixTests = require('@remix-project/remix-tests') +// const remixTests = require('@remix-project/remix-tests') +var { assertLibCode, getAccountsLib } = require('@remix-project/remix-tests') const profile = { name: 'contentImport', @@ -106,10 +107,12 @@ export class CompilerImports extends Plugin { }) } - async importTestFiles () { + async importTestFiles (url) { const provider = await this.call('fileManager', 'getProviderOf', null) - const content = remixTests.assertLibCode - if (provider) provider.addExternal('.deps/remix-tests/remix-tests.sol', content, 'remix_tests.sol') + let content + if (url === 'remix_tests.sol' || url === 'tests.sol') content = assertLibCode + else if (url === 'remix_accounts.sol') content = getAccountsLib() + if (provider) provider.addExternal('.deps/remix-tests/' + url, content, url) return content } @@ -124,9 +127,7 @@ export class CompilerImports extends Plugin { * @returns {Promise} - string content */ async resolveAndSave (url, targetPath) { - if (url.indexOf('remix_tests.sol') !== -1) { - return await this.importTestFiles() - } + if (['remix_tests.sol', 'tests.sol', 'remix_accounts.sol'].includes(url)) return await this.importTestFiles(url) try { const provider = await this.call('fileManager', 'getProviderOf', url) if (provider) { diff --git a/libs/remix-tests/sol/tests_accounts.sol.ts b/libs/remix-tests/sol/tests_accounts.sol.ts index d97aae8f34..847e37f083 100644 --- a/libs/remix-tests/sol/tests_accounts.sol.ts +++ b/libs/remix-tests/sol/tests_accounts.sol.ts @@ -3,7 +3,7 @@ module.exports = `// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.22 <0.9.0; library TestsAccounts { - function getAccount(uint index) public returns (address) { + function getAccount(uint index) pure public returns (address) { >accounts< return accounts[index]; } diff --git a/libs/remix-tests/src/compiler.ts b/libs/remix-tests/src/compiler.ts index ee1846b7a3..9477034d27 100644 --- a/libs/remix-tests/src/compiler.ts +++ b/libs/remix-tests/src/compiler.ts @@ -6,6 +6,11 @@ import { Compiler as RemixCompiler } from '@remix-project/remix-solidity' import { SrcIfc, CompilerConfiguration, CompilationErrors } from './types' const logger = new Log() const log = logger.logger +var accountsLibCode + +export function getAccountsLib () { + return accountsLibCode +} function regexIndexOf (inputString: string, regex: RegExp, startpos = 0) { const indexOf = inputString.substring(startpos).search(regex) @@ -18,10 +23,10 @@ function writeTestAccountsContract (accounts: string[]) { if (!accounts.length) body += ';' else { accounts.map((address, index) => { - body += `\naccounts[${index}] = ${address};\n` + body += `\n\t\taccounts[${index}] = ${address};\n` }) } - return testAccountContract.replace('>accounts<', body) + accountsLibCode = testAccountContract.replace('>accounts<', body) } /** @@ -87,10 +92,11 @@ const isBrowser = !(typeof (window) === 'undefined' || userAgent.indexOf(' elect export function compileFileOrFiles (filename: string, isDirectory: boolean, opts: any, compilerConfig: CompilerConfiguration, cb): void { let compiler: any const accounts: string[] = opts.accounts || [] + writeTestAccountsContract(accounts) const sources: SrcIfc = { 'tests.sol': { content: require('../sol/tests.sol') }, 'remix_tests.sol': { content: require('../sol/tests.sol') }, - 'remix_accounts.sol': { content: writeTestAccountsContract(accounts) } + 'remix_accounts.sol': { content: getAccountsLib() } } const filepath: string = (isDirectory ? filename : path.dirname(filename)) try { @@ -173,13 +179,8 @@ export function compileFileOrFiles (filename: string, isDirectory: boolean, opts export function compileContractSources (sources: SrcIfc, compilerConfig: CompilerConfiguration, importFileCb: any, opts: any, cb): void { let compiler const accounts: string[] = opts.accounts || [] + writeTestAccountsContract(accounts) const filepath = opts.testFilePath || '' - // Iterate over sources keys. Inject test libraries. Inject test library import statements. - if (!('remix_tests.sol' in sources) && !('tests.sol' in sources)) { - sources['tests.sol'] = { content: require('../sol/tests.sol.js') } - // sources['remix_tests.sol'] = { content: require('../sol/tests.sol.js') } - sources['remix_accounts.sol'] = { content: writeTestAccountsContract(accounts) } - } const testFileImportRegEx = /^(import)\s['"](remix_tests.sol|tests.sol)['"];/gm const includeTestLibs = '\nimport \'remix_tests.sol\';\n' diff --git a/libs/remix-tests/src/index.ts b/libs/remix-tests/src/index.ts index 9552d5b5ee..0e979cdc9d 100644 --- a/libs/remix-tests/src/index.ts +++ b/libs/remix-tests/src/index.ts @@ -3,3 +3,4 @@ export { UnitTestRunner } from './runTestSources' export { runTest } from './testRunner' export * from './types' export const assertLibCode = require('../sol/tests.sol') +export { getAccountsLib } from './compiler'