From beb47308ffc582595166d6f9b436e0fcee4843f9 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Wed, 23 Mar 2022 11:19:12 +0100 Subject: [PATCH] fix bugs & tests --- apps/remix-ide-e2e/src/tests/search.test.ts | 387 +++++++++--------- .../search/src/lib/components/Exclude.tsx | 15 +- .../search/src/lib/components/Find.tsx | 6 +- .../search/src/lib/components/Include.tsx | 7 +- .../search/src/lib/context/context.tsx | 8 + .../search/src/lib/reducers/Reducer.ts | 10 +- 6 files changed, 223 insertions(+), 210 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/search.test.ts b/apps/remix-ide-e2e/src/tests/search.test.ts index 6efcedd8ef..523ce16d74 100644 --- a/apps/remix-ide-e2e/src/tests/search.test.ts +++ b/apps/remix-ide-e2e/src/tests/search.test.ts @@ -9,229 +9,228 @@ module.exports = { }, 'Should find text': function (browser: NightwatchBrowser) { browser.waitForElementVisible('*[data-id="remixIdeSidePanel"]') - .click('*[plugin="search"]').waitForElementVisible('*[id="search_input"]') - .setValue('*[id="search_input"]', 'read').pause(1000) - .waitForElementContainsText('*[data-id="search_results"]', '3_BALLOT.SOL', 60000) - .waitForElementContainsText('*[data-id="search_results"]', 'contracts', 60000) - .waitForElementContainsText('*[data-id="search_results"]', 'README.TXT', 60000) - .waitForElementContainsText('*[data-id="search_results"]', 'file must') - .waitForElementContainsText('*[data-id="search_results"]', 'be compiled') - .waitForElementContainsText('*[data-id="search_results"]', 'that person al') - .waitForElementContainsText('*[data-id="search_results"]', 'sender.voted') - .waitForElementContainsText('*[data-id="search_results"]', 'read') - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 6) - }) + .click('*[plugin="search"]').waitForElementVisible('*[id="search_input"]') + .waitForElementVisible('*[id="search_include"]') + .setValue('*[id="search_include"]', ', *.txt').pause(2000) + .setValue('*[id="search_input"]', 'read').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .pause(1000) + .waitForElementContainsText('*[data-id="search_results"]', '3_BALLOT.SOL', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'contracts', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'README.TXT', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'file must') + .waitForElementContainsText('*[data-id="search_results"]', 'be compiled') + .waitForElementContainsText('*[data-id="search_results"]', 'that person al') + .waitForElementContainsText('*[data-id="search_results"]', 'sender.voted') + .waitForElementContainsText('*[data-id="search_results"]', 'read') + .elements('css selector', '.search_plugin_search_line', (res) => { + Array.isArray(res.value) && browser.assert.equal(res.value.length, 6) + }) + }, + 'Should find text with exclude': function (browser: NightwatchBrowser) { + browser + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', 'contract').pause(1000) + .clearValue('*[id="search_include"]').pause(2000) + .setValue('*[id="search_include"]', '**').sendKeys('*[id="search_include"]', browser.Keys.ENTER).pause(4000) + .elements('css selector', '.search_plugin_search_line', (res) => { + Array.isArray(res.value) && browser.assert.equal(res.value.length, 45) + }) + .setValue('*[id="search_exclude"]', ',contracts/**').sendKeys('*[id="search_exclude"]', browser.Keys.ENTER).pause(4000) + .elements('css selector', '.search_plugin_search_line', (res) => { + Array.isArray(res.value) && browser.assert.equal(res.value.length, 40) + }) + .clearValue('*[id="search_include"]').setValue('*[id="search_include"]', '*.sol, *.js, *.txt') + .clearValue('*[id="search_exclude"]').setValue('*[id="search_exclude"]', '.*/**/*') }, 'Should find regex': function (browser: NightwatchBrowser) { browser - .waitForElementVisible('*[data-id="search_use_regex"]').click('*[data-id="search_use_regex"]') - .waitForElementVisible('*[id="search_input"]') - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', '^contract').pause(1000) - .waitForElementContainsText('*[data-id="search_results"]', '3_BALLOT.SOL', 60000) - .waitForElementContainsText('*[data-id="search_results"]', '2_OWNER.SOL', 60000) - .waitForElementContainsText('*[data-id="search_results"]', '1_STORAGE.SOL', 60000) - .waitForElementContainsText('*[data-id="search_results"]', 'BALLOT_TEST.SOL', 60000) - .waitForElementContainsText('*[data-id="search_results"]', 'tests', 60000) - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 4) - }) + .waitForElementVisible('*[data-id="search_use_regex"]').click('*[data-id="search_use_regex"]') + .waitForElementVisible('*[id="search_input"]') + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', '^contract').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id="search_results"]', '3_BALLOT.SOL', 60000) + .waitForElementContainsText('*[data-id="search_results"]', '2_OWNER.SOL', 60000) + .waitForElementContainsText('*[data-id="search_results"]', '1_STORAGE.SOL', 60000) + .waitForElementContainsText('*[data-id="search_results"]', '4_BALLOT_TEST.SOL', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'tests', 60000) + .elements('css selector', '.search_plugin_search_line', (res) => { + Array.isArray(res.value) && browser.assert.equal(res.value.length, 4) + }) }, 'Should find matchcase': function (browser: NightwatchBrowser) { browser - .waitForElementVisible('*[data-id="search_use_regex"]').click('*[data-id="search_use_regex"]') - .waitForElementVisible('*[data-id="search_case_sensitive"]').click('*[data-id="search_case_sensitive"]') - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 0) - }) - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', 'Contract').pause(1000) - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 9) - }) - .waitForElementContainsText('*[data-id="search_results"]', 'DEPLOY_ETHERS.JS', 60000) - .waitForElementContainsText('*[data-id="search_results"]', 'DEPLOY_WEB3.JS', 60000) - .waitForElementContainsText('*[data-id="search_results"]', 'STORAGE.TEST.JS', 60000) - .waitForElementContainsText('*[data-id="search_results"]', 'scripts', 60000) + .waitForElementVisible('*[data-id="search_use_regex"]').click('*[data-id="search_use_regex"]') + .waitForElementVisible('*[data-id="search_case_sensitive"]').click('*[data-id="search_case_sensitive"]').pause(4000) + .elements('css selector', '.search_plugin_search_line', (res) => { + Array.isArray(res.value) && browser.assert.equal(res.value.length, 0) + }) + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', 'Contract').sendKeys('*[id="search_input"]', browser.Keys.ENTER).pause(1000) + .elements('css selector', '.search_plugin_search_line', (res) => { + Array.isArray(res.value) && browser.assert.equal(res.value.length, 9) + }) + .waitForElementContainsText('*[data-id="search_results"]', 'DEPLOY_ETHERS.JS', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'DEPLOY_WEB3.JS', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'STORAGE.TEST.JS', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'scripts', 60000) }, 'Should find matchword': function (browser: NightwatchBrowser) { browser - .waitForElementVisible('*[data-id="search_case_sensitive"]').click('*[data-id="search_case_sensitive"]') - .waitForElementVisible('*[data-id="search_whole_word"]').click('*[data-id="search_whole_word"]') - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', 'contract').pause(1000) - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 29) - }) + .waitForElementVisible('*[data-id="search_case_sensitive"]').click('*[data-id="search_case_sensitive"]') + .waitForElementVisible('*[data-id="search_whole_word"]').click('*[data-id="search_whole_word"]').pause(2000) + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', 'contract').sendKeys('*[id="search_input"]', browser.Keys.ENTER).pause(4000) + .elements('css selector', '.search_plugin_search_line', (res) => { + Array.isArray(res.value) && browser.assert.equal(res.value.length, 29) + }) }, 'Should replace text': function (browser: NightwatchBrowser) { browser - .waitForElementVisible('*[data-id="toggle_replace"]').click('*[data-id="toggle_replace"]') - .waitForElementVisible('*[id="search_replace"]') - .setValue('*[id="search_replace"]', 'replacing').pause(1000) - .waitForElementVisible('*[data-id="contracts/2_Owner.sol-30-71"]') - .moveToElement('*[data-id="contracts/2_Owner.sol-30-71"]', 10, 10) - .waitForElementVisible('*[data-id="replace-contracts/2_Owner.sol-30-71"]') - .click('*[data-id="replace-contracts/2_Owner.sol-30-71"]').pause(2000). - modalFooterOKClick('confirmreplace').pause(2000). - getEditorValue((content) => { - browser.assert.ok(content.includes('replacing deployer for a constructor'), 'should replace text ok') - }) + .waitForElementVisible('*[data-id="toggle_replace"]').click('*[data-id="toggle_replace"]') + .waitForElementVisible('*[id="search_replace"]') + .setValue('*[id="search_replace"]', 'replacing').pause(1000) + .waitForElementVisible('*[data-id="contracts/2_Owner.sol-30-71"]') + .moveToElement('*[data-id="contracts/2_Owner.sol-30-71"]', 10, 10) + .waitForElementVisible('*[data-id="replace-contracts/2_Owner.sol-30-71"]') + .click('*[data-id="replace-contracts/2_Owner.sol-30-71"]').pause(2000). + modalFooterOKClick('confirmreplace').pause(2000). + getEditorValue((content) => { + browser.assert.ok(content.includes('replacing deployer for a constructor'), 'should replace text ok') + }) }, 'Should replace text without confirmation': function (browser: NightwatchBrowser) { browser.click('*[data-id="confirm_replace_label"]').pause(500) - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', 'replacing').pause(1000) - .setValue('*[id="search_replace"]', '2').pause(1000) - .waitForElementVisible('*[data-id="contracts/2_Owner.sol-30-71"]') - .moveToElement('*[data-id="contracts/2_Owner.sol-30-71"]', 10, 10) - .waitForElementVisible('*[data-id="replace-contracts/2_Owner.sol-30-71"]') - .click('*[data-id="replace-contracts/2_Owner.sol-30-71"]').pause(2000). - getEditorValue((content) => { - browser.assert.ok(content.includes('replacing2 deployer for a constructor'), 'should replace text ok') - }) + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', 'replacing').sendKeys('*[id="search_input"]', browser.Keys.ENTER).pause(1000) + .setValue('*[id="search_replace"]', '2').pause(1000) + .waitForElementVisible('*[data-id="contracts/2_Owner.sol-30-71"]') + .moveToElement('*[data-id="contracts/2_Owner.sol-30-71"]', 10, 10) + .waitForElementVisible('*[data-id="replace-contracts/2_Owner.sol-30-71"]') + .click('*[data-id="replace-contracts/2_Owner.sol-30-71"]').pause(2000). + getEditorValue((content) => { + browser.assert.ok(content.includes('replacing2 deployer for a constructor'), 'should replace text ok') + }) }, 'Should replace all & undo': function (browser: NightwatchBrowser) { browser - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', 'storage') - .clearValue('*[id="search_replace"]') - .setValue('*[id="search_replace"]', '123test').pause(1000) - .waitForElementVisible('*[data-id="replace-all-contracts/1_Storage.sol"]') - .click('*[data-id="replace-all-contracts/1_Storage.sol"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes('contract 123test'), 'should replace text ok') - browser.assert.ok(content.includes('title 123test'), 'should replace text ok') - }) - .waitForElementVisible('*[data-id="undo-replace-contracts/1_Storage.sol"]') - .click('*[data-id="undo-replace-contracts/1_Storage.sol"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes('contract Storage'), 'should undo text ok') - browser.assert.ok(content.includes('title Storage'), 'should undo text ok') - }) + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', 'storage').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .clearValue('*[id="search_replace"]') + .setValue('*[id="search_replace"]', '123test').pause(1000) + .waitForElementVisible('*[data-id="replace-all-contracts/1_Storage.sol"]') + .click('*[data-id="replace-all-contracts/1_Storage.sol"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes('contract 123test'), 'should replace text ok') + browser.assert.ok(content.includes('title 123test'), 'should replace text ok') + }) + .waitForElementVisible('*[data-id="undo-replace-contracts/1_Storage.sol"]') + .click('*[data-id="undo-replace-contracts/1_Storage.sol"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes('contract Storage'), 'should undo text ok') + browser.assert.ok(content.includes('title Storage'), 'should undo text ok') + }) }, 'Should replace all & undo & switch between files': function (browser: NightwatchBrowser) { browser.waitForElementVisible('*[id="search_input"]') - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', 'storage') - .clearValue('*[id="search_replace"]') - .setValue('*[id="search_replace"]', '123test').pause(1000) - .waitForElementVisible('*[data-id="replace-all-contracts/1_Storage.sol"]') - .click('*[data-id="replace-all-contracts/1_Storage.sol"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes('contract 123test'), 'should replace text ok') - browser.assert.ok(content.includes('title 123test'), 'should replace text ok') - }) - .waitForElementVisible('*[data-id="undo-replace-contracts/1_Storage.sol"]') - .openFile('README.txt') - .click('*[plugin="search"]').pause(2000) - .waitForElementNotPresent('*[data-id="undo-replace-contracts/1_Storage.sol"]') - .waitForElementVisible('*[data-id="replace-all-README.txt"]') - .click('*[data-id="replace-all-README.txt"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes("123test' contract"), 'should replace text ok') - }) - .waitForElementVisible('*[data-id="undo-replace-README.txt"]') - .click('div[title="default_workspace/contracts/1_Storage.sol"]').pause(2000) - .waitForElementVisible('*[data-id="undo-replace-contracts/1_Storage.sol"]') - .click('*[data-id="undo-replace-contracts/1_Storage.sol"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes('contract Storage'), 'should undo text ok') - browser.assert.ok(content.includes('title Storage'), 'should undo text ok') - }) - .click('div[title="default_workspace/README.txt"]').pause(2000) - .waitForElementVisible('*[data-id="undo-replace-README.txt"]') - .click('*[data-id="undo-replace-README.txt"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes("Storage' contract"), 'should replace text ok') - }) + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', 'storage').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .clearValue('*[id="search_replace"]') + .setValue('*[id="search_replace"]', '123test').pause(1000) + .waitForElementVisible('*[data-id="replace-all-contracts/1_Storage.sol"]') + .click('*[data-id="replace-all-contracts/1_Storage.sol"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes('contract 123test'), 'should replace text ok') + browser.assert.ok(content.includes('title 123test'), 'should replace text ok') + }) + .waitForElementVisible('*[data-id="undo-replace-contracts/1_Storage.sol"]') + .openFile('README.txt') + .click('*[plugin="search"]').pause(2000) + .waitForElementNotPresent('*[data-id="undo-replace-contracts/1_Storage.sol"]') + .waitForElementVisible('*[data-id="replace-all-README.txt"]') + .click('*[data-id="replace-all-README.txt"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes("123test' contract"), 'should replace text ok') + }) + .waitForElementVisible('*[data-id="undo-replace-README.txt"]') + .click('div[title="default_workspace/contracts/1_Storage.sol"]').pause(2000) + .waitForElementVisible('*[data-id="undo-replace-contracts/1_Storage.sol"]') + .click('*[data-id="undo-replace-contracts/1_Storage.sol"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes('contract Storage'), 'should undo text ok') + browser.assert.ok(content.includes('title Storage'), 'should undo text ok') + }) + .click('div[title="default_workspace/README.txt"]').pause(2000) + .waitForElementVisible('*[data-id="undo-replace-README.txt"]') + .click('*[data-id="undo-replace-README.txt"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes("Storage' contract"), 'should replace text ok') + }) }, 'Should hide button when edited content is the same': function (browser: NightwatchBrowser) { browser.waitForElementVisible('*[data-id="remixIdeSidePanel"]') - .addFile('test.sol', { content: '123'}) - .click('*[plugin="search"]').waitForElementVisible('*[id="search_input"]') - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', '123') - .clearValue('*[id="search_replace"]') - .setValue('*[id="search_replace"]', '456').pause(1000) - .waitForElementVisible('*[data-id="replace-all-test.sol"]') - .click('*[data-id="replace-all-test.sol"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes('456'), 'should replace text ok') - } - ) - .setEditorValue('123') - .getEditorValue((content) => { - browser.assert.ok(content.includes('123'), 'should have text ok') - } - ).pause(1000) - .waitForElementNotPresent('*[data-id="undo-replace-test.sol"]') + .addFile('test.sol', { content: '123' }) + .click('*[plugin="search"]').waitForElementVisible('*[id="search_input"]') + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', '123').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .clearValue('*[id="search_replace"]') + .setValue('*[id="search_replace"]', '456').pause(1000) + .waitForElementVisible('*[data-id="replace-all-test.sol"]') + .click('*[data-id="replace-all-test.sol"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes('456'), 'should replace text ok') + } + ) + .setEditorValue('123') + .getEditorValue((content) => { + browser.assert.ok(content.includes('123'), 'should have text ok') + } + ).pause(1000) + .waitForElementNotPresent('*[data-id="undo-replace-test.sol"]') }, 'Should disable/enable button when edited content changed': function (browser: NightwatchBrowser) { browser - .waitForElementVisible('*[id="search_input"]') - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', '123') - .clearValue('*[id="search_replace"]') - .setValue('*[id="search_replace"]', 'replaced').pause(1000) - .waitForElementVisible('*[data-id="replace-all-test.sol"]') - .click('*[data-id="replace-all-test.sol"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes('replaced'), 'should replace text ok') - } - ) - .setEditorValue('changed') - .getEditorValue((content) => { - browser.assert.ok(content.includes('changed'), 'should have text ok') - } - ).pause(1000) - .waitForElementVisible('*[data-id="undo-replace-test.sol"]') - .getAttribute('[data-id="undo-replace-test.sol"]', 'disabled', (result) => { - browser.assert.equal(result.value, 'true', 'should be disabled') - }) - .setEditorValue('replaced') - .getEditorValue((content) => { - browser.assert.ok(content.includes('replaced'), 'should have text ok') - } - ).pause(1000) - .waitForElementVisible('*[data-id="undo-replace-test.sol"]') - .getAttribute('[data-id="undo-replace-test.sol"]', 'disabled', (result) => { - browser.assert.equal(result.value, null, 'should not be disabled') - }) - .click('*[data-id="undo-replace-test.sol"]').pause(2000) - .getEditorValue((content) => { - browser.assert.ok(content.includes('123'), 'should have text ok') - }) - .waitForElementNotPresent('*[data-id="undo-replace-test.sol"]') - }, - 'Should find text with include': function (browser: NightwatchBrowser) { - browser - .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', 'contract').pause(1000) - .setValue('*[id="search_include"]', 'contracts/**').pause(2000) - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 4) - }) - }, - 'Should find text with exclude': function (browser: NightwatchBrowser) { - browser - .clearValue('*[id="search_include"]').pause(2000) - .setValue('*[id="search_include"]', '**').pause(2000) - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 28) - }) - .setValue('*[id="search_exclude"]', ',contracts/**').pause(2000) - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 24) - }) + .waitForElementVisible('*[id="search_input"]') + .clearValue('*[id="search_input"]') + .setValue('*[id="search_input"]', '123').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .clearValue('*[id="search_replace"]') + .setValue('*[id="search_replace"]', 'replaced').pause(1000) + .waitForElementVisible('*[data-id="replace-all-test.sol"]') + .click('*[data-id="replace-all-test.sol"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes('replaced'), 'should replace text ok') + } + ) + .setEditorValue('changed') + .getEditorValue((content) => { + browser.assert.ok(content.includes('changed'), 'should have text ok') + } + ).pause(1000) + .waitForElementVisible('*[data-id="undo-replace-test.sol"]') + .getAttribute('[data-id="undo-replace-test.sol"]', 'disabled', (result) => { + browser.assert.equal(result.value, 'true', 'should be disabled') + }) + .setEditorValue('replaced') + .getEditorValue((content) => { + browser.assert.ok(content.includes('replaced'), 'should have text ok') + } + ).pause(1000) + .waitForElementVisible('*[data-id="undo-replace-test.sol"]') + .getAttribute('[data-id="undo-replace-test.sol"]', 'disabled', (result) => { + browser.assert.equal(result.value, null, 'should not be disabled') + }) + .click('*[data-id="undo-replace-test.sol"]').pause(2000) + .getEditorValue((content) => { + browser.assert.ok(content.includes('123'), 'should have text ok') + }) + .waitForElementNotPresent('*[data-id="undo-replace-test.sol"]') }, + 'should clear search': function (browser: NightwatchBrowser) { browser - .waitForElementVisible('*[id="search_input"]') - .setValue('*[id="search_input"]', 'nodata').pause(1000) - .elements('css selector','.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 0) - }) + .waitForElementVisible('*[id="search_input"]') + .setValue('*[id="search_input"]', 'nodata').sendKeys('*[id="search_input"]', browser.Keys.ENTER).pause(1000) + .elements('css selector', '.search_plugin_search_line', (res) => { + Array.isArray(res.value) && browser.assert.equal(res.value.length, 0) + }) } } \ No newline at end of file diff --git a/libs/remix-ui/search/src/lib/components/Exclude.tsx b/libs/remix-ui/search/src/lib/components/Exclude.tsx index 1558c6b312..ef1e41b18d 100644 --- a/libs/remix-ui/search/src/lib/components/Exclude.tsx +++ b/libs/remix-ui/search/src/lib/components/Exclude.tsx @@ -2,17 +2,18 @@ import React, { useContext, useEffect, useRef, useState } from 'react' import { SearchContext } from '../context/context' export const Exclude = props => { - const { setExclude, cancelSearch } = useContext(SearchContext) + const { setExclude, cancelSearch, startSearch } = useContext(SearchContext) const [excludeInput, setExcludeInput] = useState('.*/**/*') const change = async e => { setExcludeInput(e.target.value) await cancelSearch() } - + const handleKeypress = async e => { + await setExclude(excludeInput) if (e.charCode === 13 || e.keyCode === 13) { - await setExclude(excludeInput) + startSearch() } } @@ -25,11 +26,11 @@ export const Exclude = props => {
change(e)} + onKeyUp={handleKeypress} + onChange={async (e) => change(e)} value={excludeInput} >
diff --git a/libs/remix-ui/search/src/lib/components/Find.tsx b/libs/remix-ui/search/src/lib/components/Find.tsx index c6f6162a56..284a2d07ba 100644 --- a/libs/remix-ui/search/src/lib/components/Find.tsx +++ b/libs/remix-ui/search/src/lib/components/Find.tsx @@ -5,6 +5,7 @@ export const Find = () => { const { setFind, cancelSearch, + startSearch, state, toggleCaseSensitive, toggleMatchWholeWord, @@ -19,8 +20,9 @@ export const Find = () => { const handleKeypress = async e => { if (e.charCode === 13 || e.keyCode === 13) { - await setFind(inputValue) + startSearch() } + await setFind(inputValue) } useEffect(() => { @@ -37,7 +39,7 @@ export const Find = () => { className="form-control" value={inputValue} onChange={async e => await change(e)} - onKeyPress={handleKeypress} + onKeyUp={handleKeypress} >
{ - const { setInclude, cancelSearch } = useContext(SearchContext) + const { setInclude, cancelSearch, startSearch } = useContext(SearchContext) const [includeInput, setIncludeInput] = useState('*.sol, *.js') const change = async e => { setIncludeInput(e.target.value) await cancelSearch() } const handleKeypress = async e => { + await setInclude(includeInput) if (e.charCode === 13 || e.keyCode === 13) { - await setInclude(includeInput) + startSearch() } } @@ -27,7 +28,7 @@ export const Include = props => { placeholder="Include ie *.sol ( Enter to include )" className="form-control" onChange={async(e) => change(e)} - onKeyPress={handleKeypress} + onKeyUp={handleKeypress} value={includeInput} >
diff --git a/libs/remix-ui/search/src/lib/context/context.tsx b/libs/remix-ui/search/src/lib/context/context.tsx index f309236ea2..ea21e36171 100644 --- a/libs/remix-ui/search/src/lib/context/context.tsx +++ b/libs/remix-ui/search/src/lib/context/context.tsx @@ -46,6 +46,7 @@ export interface SearchingStateInterface { undoReplace: (buffer: undoBufferRecord) => Promise clearUndo: () => void cancelSearch: (clearResults?:boolean) => Promise + startSearch: () => void } export const SearchContext = createContext(null) @@ -177,6 +178,13 @@ export const SearchProvider = ({ }) }, + startSearch: () => { + dispatch({ + type: 'START_SEARCH', + payload: undefined + }) + }, + setRun(value: boolean) { dispatch({ type: 'SET_RUN', diff --git a/libs/remix-ui/search/src/lib/reducers/Reducer.ts b/libs/remix-ui/search/src/lib/reducers/Reducer.ts index bc8be15f3a..3e83b75aea 100644 --- a/libs/remix-ui/search/src/lib/reducers/Reducer.ts +++ b/libs/remix-ui/search/src/lib/reducers/Reducer.ts @@ -2,12 +2,16 @@ import { Action, SearchingInitialState, SearchState, undoBufferRecord } from ".. export const SearchReducer = (state: SearchState = SearchingInitialState, action: Action) => { switch (action.type) { + case 'START_SEARCH': + return { + ...state, + timeStamp: Date.now() + } case 'SET_FIND': return { ...state, searchResults: null, - find: action.payload, - timeStamp: Date.now() + find: action.payload } case 'SET_REPLACE': @@ -26,14 +30,12 @@ export const SearchReducer = (state: SearchState = SearchingInitialState, action return { ...state, include: action.payload, - timeStamp: Date.now() } case 'SET_EXCLUDE': return { ...state, exclude: action.payload, - timeStamp: Date.now() } case 'SET_SEARCH_RESULTS':