CheckVariableDebug

pull/5370/head
filip mertens 2 years ago
parent ebde39e130
commit a11a6318d7
  1. 51
      apps/remix-ide-e2e/src/commands/checkVariableDebug.ts
  2. 34
      apps/remix-ide-e2e/src/tests/debugger.test.ts

@ -4,7 +4,7 @@ import EventEmitter from 'events'
const deepequal = require('deep-equal') const deepequal = require('deep-equal')
class CheckVariableDebug extends EventEmitter { class CheckVariableDebug extends EventEmitter {
command (this: NightwatchBrowser, id: string, debugValue: NightwatchCheckVariableDebugValue): NightwatchBrowser { command(this: NightwatchBrowser, id: string, debugValue: NightwatchCheckVariableDebugValue): NightwatchBrowser {
this.api.perform((done) => { this.api.perform((done) => {
checkDebug(this.api, id, debugValue, () => { checkDebug(this.api, id, debugValue, () => {
done() done()
@ -15,27 +15,38 @@ class CheckVariableDebug extends EventEmitter {
} }
} }
function checkDebug (browser: NightwatchBrowser, id: string, debugValue: NightwatchCheckVariableDebugValue, done: VoidFunction) { function checkDebug(browser: NightwatchBrowser, id: string, debugValue: NightwatchCheckVariableDebugValue, done: VoidFunction) {
// id is soliditylocals or soliditystate // id is soliditylocals or soliditystate
browser.execute(function (id: string) { let resultOfElement = null
const elem = document.querySelector('#' + id + ' .dropdownrawcontent') as HTMLElement let isEqual = false
browser.waitUntil(() => {
return elem.innerText browser.execute(function (id: string) {
}, [id], function (result) { const elem = document.querySelector('#' + id + ' .dropdownrawcontent') as HTMLElement
let value if (elem && elem.innerText) {
try { console.log(elem.innerText)
value = JSON.parse(<string>result.value) return elem.innerText
} catch (e) { }
browser.assert.fail('cant parse solidity state', e.message, '') }, [id], (result) => {
if (result.value) {
console.log(JSON.parse(<string>result.value))
try {
resultOfElement = JSON.parse(<string>result.value)
isEqual = deepequal(debugValue, resultOfElement)
} catch (e) {
browser.assert.fail('cant parse solidity state', e.message, '')
console.log(e)
}
}
})
if (isEqual) return true
return false
}, 10000, 1000)
.perform(() => {
if (!isEqual) {
browser.assert.fail(JSON.stringify(resultOfElement), 'info about error\n ' + JSON.stringify(debugValue) + '\n ' + JSON.stringify(resultOfElement), '')
}
done() done()
return })
}
const equal = deepequal(debugValue, value)
if (!equal) {
browser.assert.fail(JSON.stringify(value), 'info about error\n ' + JSON.stringify(debugValue) + '\n ' + JSON.stringify(value), '')
}
done()
})
} }
module.exports = CheckVariableDebug module.exports = CheckVariableDebug

@ -62,10 +62,10 @@ module.exports = {
browser.waitForElementVisible('#editorView') browser.waitForElementVisible('#editorView')
.execute(() => { .execute(() => {
(window as any).addRemixBreakpoint(11) (window as any).addRemixBreakpoint(11)
}, [], () => {}) }, [], () => { })
.execute(() => { .execute(() => {
(window as any).addRemixBreakpoint(21) (window as any).addRemixBreakpoint(21)
}, [], () => {}) }, [], () => { })
.waitForElementVisible('*[data-id="buttonNavigatorJumpPreviousBreakpoint"]') .waitForElementVisible('*[data-id="buttonNavigatorJumpPreviousBreakpoint"]')
.click('*[data-id="buttonNavigatorJumpPreviousBreakpoint"]') .click('*[data-id="buttonNavigatorJumpPreviousBreakpoint"]')
.pause(2000) .pause(2000)
@ -103,7 +103,7 @@ module.exports = {
_name = name_; _name = name_;
_symbol = symbol_; _symbol = symbol_;
}`) !== -1, }`) !== -1,
'current displayed content is not from the ERC20 source code') 'current displayed content is not from the ERC20 source code')
}) })
}, },
@ -133,31 +133,19 @@ module.exports = {
selector: '//*[@data-id="treeViewLivm trace step" and contains(.,"133")]', selector: '//*[@data-id="treeViewLivm trace step" and contains(.,"133")]',
}) })
.goToVMTraceStep(261) .goToVMTraceStep(261)
.waitForElementVisible({
locateStrategy: 'xpath',
selector: '//*[@data-id="treeViewLivm trace step" and contains(.,"261")]',
})
.waitForElementPresent('.highlightLine8') .waitForElementPresent('.highlightLine8')
/* /*
for the test below: for the test below:
source highlight should remain line `bytes32 idAsk = abi.decode(userData[:33], (bytes32));` source highlight should remain line `bytes32 idAsk = abi.decode(userData[:33], (bytes32));`
At this vmtrace index, the sourcemap has file = -1 because the execution is in the generated sources (ABIEncoderV2) At this vmtrace index, the sourcemap has file = -1 because the execution is in the generated sources (ABIEncoderV2)
the atIndex of SourceLocationTracker was buggy and return an incorrect value, this is fixed the atIndex of SourceLocationTracker was buggy and return an incorrect value, this is fixed
But the debugger uses now validSourcelocation, which means file is not -1. But the debugger uses now validSourcelocation, which means file is not -1.
In that case the source highlight at 261 should be the same as for step 262 In that case the source highlight at 261 should be the same as for step 262
*/ */
.goToVMTraceStep(266) .goToVMTraceStep(266)
.waitForElementVisible({
locateStrategy: 'xpath',
selector: '//*[@data-id="treeViewLivm trace step" and contains(.,"266")]',
})
.checkVariableDebug('soliditylocals', localVariable_step266_ABIEncoder) // locals should not be initiated at this point, only idAsk should .checkVariableDebug('soliditylocals', localVariable_step266_ABIEncoder) // locals should not be initiated at this point, only idAsk should
.goToVMTraceStep(717) .goToVMTraceStep(717)
.waitForElementVisible({
locateStrategy: 'xpath',
selector: '//*[@data-id="treeViewLivm trace step" and contains(.,"717")]',
})
.checkVariableDebug('soliditylocals', localVariable_step717_ABIEncoder) // all locals should be initiaed .checkVariableDebug('soliditylocals', localVariable_step717_ABIEncoder) // all locals should be initiaed
.clearTransactions() .clearTransactions()
}, },

Loading…
Cancel
Save