import { NightwatchBrowser } from 'nightwatch' import { ChildProcess, spawn, execSync } from 'child_process' import { homedir } from 'os' import path from 'path' import os from 'os' const dir = path.join('remix-desktop-test-' + Date.now().toString()) const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { done() }, setuphardhat: function (browser: NightwatchBrowser) { browser.perform(async (done) => { await setupHardhatProject() done() }) }, addScript: function (browser: NightwatchBrowser) { // run script in console browser.executeAsync(function (dir, done) { (window as any).electronAPI.openFolderInSameWindow('/tmp/' + dir).then(done) }, [dir], () => { console.log('done window opened') }) .waitForElementVisible('*[data-id="treeViewDivDraggableItemhardhat.config.js"]', 10000) }, compile: function (browser: NightwatchBrowser) { browser.perform(async (done) => { console.log('generating compilation result') await compileHardhatProject() done() }) .expect.element('*[data-id="terminalJournal"]').text.to.contain('receiving compilation result from Hardhat').before(60000) let addressRef browser.clickLaunchIcon('filePanel') .openFile('contracts') .openFile('contracts/Token.sol') .clickLaunchIcon('udapp') .selectAccount('0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c') .selectContract('Token') .createContract('') .clickInstance(0) .clickFunction('balanceOf - call', { types: 'address account', values: '0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c' }) .getAddressAtPosition(0, (address) => { addressRef = address }) .perform((done) => { browser.verifyCallReturnValue(addressRef, ['0:uint256: 1000000']) .perform(() => done()) }) } } async function compileHardhatProject(): Promise { console.log(process.cwd()) try { const server = spawn('npx hardhat compile', [], { cwd: '/tmp/' + dir, shell: true, detached: true }) return new Promise((resolve, reject) => { server.on('exit', function (exitCode) { console.log("Child exited with code: " + exitCode); console.log('end') resolve() }) }) } catch (e) { console.log(e) } } async function setupHardhatProject(): Promise { console.log('setup hardhat project', dir) try { const server = spawn(`git clone https://github.com/NomicFoundation/hardhat-boilerplate ${dir} && cd ${dir} && yarn install && yarn add "@typechain/ethers-v5@^10.1.0" && yarn add "@typechain/hardhat@^6.1.2" && yarn add "typechain@^8.1.0" && echo "END"`, [], { cwd: '/tmp/', shell: true, detached: true }) return new Promise((resolve, reject) => { server.on('exit', function (exitCode) { console.log("Child exited with code: " + exitCode); console.log('end') resolve() }) }) } catch (e) { console.log(e) } } module.exports = { ...tests }