From 9a63ea7166c5f221aa6a4b717c6addf3e8334b05 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Tue, 12 Sep 2023 18:54:16 +0200 Subject: [PATCH] add test --- .../src/tests/editorHoverContext.test.ts | 77 ++++++++++++++++++- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts b/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts index db86224b11..7e162530e1 100644 --- a/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts +++ b/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts @@ -17,7 +17,6 @@ module.exports = { before: function (browser: NightwatchBrowser, done: VoidFunction) { init(browser, done, 'http://127.0.0.1:8080', false) }, - 'Should load the test file': function (browser: NightwatchBrowser) { browser.openFile('contracts') .openFile('contracts/3_Ballot.sol') @@ -86,7 +85,47 @@ module.exports = { const path = "//*[@class='view-line' and contains(.,'Voter') and contains(.,'struct')]//span//span[contains(.,'Voter')]" const expectedContent = 'StructDefinition' checkEditorHoverContent(browser, path, expectedContent) - } + }, + 'Add token file': function (browser: NightwatchBrowser) { + browser.addFile('contracts/mytoken.sol', { + content: myToken + }).useXpath().waitForElementVisible("//*[@class='view-line' and contains(.,'gas')]") + }, + // here we change quickly between files to test the files being parsed correctly when switching between them + 'Should show ERC20 hover over contract in editor #group1': function (browser: NightwatchBrowser) { + browser.scrollToLine(10) + const path = "//*[@class='view-line' and contains(.,'MyToken') and contains(.,'Pausable')]//span//span[contains(.,'ERC20Burnable')]" + const expectedContent = 'contract ERC20Burnable is ERC20Burnable, ERC20, IERC20Metadata, IERC20, Context' + checkEditorHoverContent(browser, path, expectedContent, 25) + }, + 'Go back to ballot file': function (browser: NightwatchBrowser) { + browser.openFile('contracts/3_Ballot.sol') + .useXpath().waitForElementVisible("//*[@class='view-line' and contains(.,'gas')]") + }, + 'Should show hover over function in editor again #group1': function (browser: NightwatchBrowser) { + browser + .scrollToLine(58) + const path: string = "//*[@class='view-line' and contains(.,'giveRightToVote(address') and contains(.,'function') and contains(.,'public')]//span//span[contains(.,'giveRightToVote')]" + let expectedContent = 'Estimated execution cost' + checkEditorHoverContent(browser, path, expectedContent) + expectedContent = 'function giveRightToVote (address internal voter) public nonpayable returns ()' + checkEditorHoverContent(browser, path, expectedContent) + expectedContent = "@dev Give 'voter' the right to vote on this ballot. May only be called by 'chairperson'" + checkEditorHoverContent(browser, path, expectedContent) + }, + 'Open token file': function (browser: NightwatchBrowser) { + browser.openFile('contracts/mytoken.sol') + .useXpath().waitForElementVisible("//*[@class='view-line' and contains(.,'gas')]") + }, + 'Should show ERC20 hover over contract in editor again #group1': function (browser: NightwatchBrowser) { + browser.scrollToLine(10) + const path = "//*[@class='view-line' and contains(.,'MyToken') and contains(.,'Pausable')]//span//span[contains(.,'ERC20Burnable')]" + const expectedContent = 'contract ERC20Burnable is ERC20Burnable, ERC20, IERC20Metadata, IERC20, Context' + checkEditorHoverContent(browser, path, expectedContent, 25) + }, + + + } @@ -233,4 +272,38 @@ contract BallotHoverTest { winnerName_ = proposals[winningProposal()].name; } } +` + +const myToken = ` +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract MyToken is ERC20, ERC20Burnable, Pausable, Ownable { + constructor() ERC20("MyToken", "MTK") {} + + function pause() public onlyOwner { + _pause(); + } + + function unpause() public onlyOwner { + _unpause(); + } + + function mint(address to, uint256 amount) public onlyOwner { + _mint(to, amount); + } + + function _beforeTokenTransfer(address from, address to, uint256 amount) + internal + whenNotPaused + override + { + super._beforeTokenTransfer(from, to, amount); + } +} ` \ No newline at end of file