Skip to content

Commit

Permalink
Merge pull request #1961 from ethereum/refactorBrowserTest
Browse files Browse the repository at this point in the history
Refactor browser test
  • Loading branch information
yann300 committed Jun 20, 2019
2 parents 8976322 + d6ebbd4 commit f4d9507
Show file tree
Hide file tree
Showing 22 changed files with 222 additions and 248 deletions.
24 changes: 2 additions & 22 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -1,23 +1,3 @@
{
"plugins": ["fast-async",
"check-es2015-constants",
"transform-es2015-arrow-functions",
"transform-es2015-block-scoped-functions",
"transform-es2015-block-scoping",
"transform-es2015-classes",
"transform-es2015-computed-properties",
"transform-es2015-destructuring",
"transform-object-rest-spread",
"transform-es2015-duplicate-keys",
"transform-es2015-for-of",
"transform-es2015-function-name",
"transform-es2015-literals",
"transform-es2015-object-super",
"transform-es2015-parameters",
"transform-es2015-shorthand-properties",
"transform-es2015-spread",
"transform-es2015-sticky-regex",
"transform-es2015-unicode-regex",
"transform-object-assign",
]
}
"presets": ["@babel/preset-env"]
}
7 changes: 0 additions & 7 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,7 @@ jobs:

steps:
- checkout
- restore_cache:
keys:
- dep-bundle-29-{{ checksum "package.json" }}
- run: npm install
- save_cache:
key: dep-bundle-29-{{ checksum "package.json" }}
paths:
- ~/repo/node_modules
- run: npm run lint && npm run test && npm run make-mock-compiler
- run:
name: Download Selenium
Expand Down
3 changes: 2 additions & 1 deletion nightwatch.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
'use strict'
require('@babel/register')()

module.exports = {
'src_folders': ['test-browser/tests'],
'output_folder': 'reports',
'custom_commands_path': '',
'custom_commands_path': ['test-browser/commands'],
'custom_assertions_path': '',
'page_objects_path': '',
'globals_path': '',
Expand Down
62 changes: 22 additions & 40 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,37 @@
"version": "v0.8.3",
"description": "Minimalistic browser-based Solidity IDE",
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/plugin-transform-object-assign": "^7.2.0",
"@babel/polyfill": "^7.4.4",
"@babel/preset-env": "^7.4.5",
"@babel/preset-es2015": "latest",
"@babel/preset-es2017": "latest",
"@babel/preset-stage-0": "^7.0.0",
"@babel/register": "^7.4.4",
"@fortawesome/fontawesome-free": "^5.8.1",
"@resolver-engine/imports": "^0.3.0",
"ace-mode-solidity": "^0.1.0",
"async": "^2.1.2",
"babel-eslint": "^7.1.1",
"babel-plugin-transform-modern-regexp": "0.0.6",
"babel-plugin-transform-object-assign": "^6.22.0",
"babel-eslint": "^10.0.0",
"babel-plugin-fast-async": "^6.1.2",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-plugin-yo-yoify": "^0.3.3",
"babel-polyfill": "^6.22.0",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.24.0",
"babel-preset-es2017": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"babelify": "^7.3.0",
"babel-plugin-yo-yoify": "^2.0.0",
"babelify": "^10.0.0",
"brace": "^0.8.0",
"browserify": "^16.2.3",
"browserify-reload": "^1.0.3",
"component-type": "^1.2.1",
"copy-text-to-clipboard": "^1.0.4",
"csjs-inject": "^1.0.1",
"csslint": "^1.0.2",
"deep-equal": "^1.0.1",
"ethereumjs-util": "^5.1.2",
"events": "^3.0.0",
"ethers": "^4.0.27",
"events": "^3.0.0",
"execr": "^1.0.1",
"exorcist": "^0.4.0",
"fast-async": "6.3.1",
"fast-async": "^7.0.6",
"fast-levenshtein": "^2.0.6",
"gists": "^1.0.1",
"javascript-serialize": "^1.6.1",
Expand All @@ -39,6 +42,7 @@
"js-beautify": "1.6.14",
"minixhr": "^3.2.2",
"mkdirp": "^0.5.1",
"nanohtml": "^1.6.3",
"nightwatch": "^0.9.20",
"notify-error": "^1.2.0",
"npm-link-local": "^1.1.0",
Expand Down Expand Up @@ -95,29 +99,6 @@
],
"parser": "babel-eslint"
},
"babel": {
"plugins": [
"transform-es2015-template-literals",
"transform-es2015-literals",
"transform-es2015-function-name",
"transform-es2015-arrow-functions",
"transform-es2015-block-scoped-functions",
"transform-es2015-classes",
"transform-es2015-object-super",
"transform-es2015-shorthand-properties",
"transform-es2015-duplicate-keys",
"transform-es2015-computed-properties",
"transform-es2015-for-of",
"transform-es2015-sticky-regex",
"transform-es2015-unicode-regex",
"check-es2015-constants",
"transform-es2015-spread",
"transform-es2015-parameters",
"transform-es2015-destructuring",
"transform-es2015-block-scoping",
"transform-modern-regexp"
]
},
"browserify": {
"transform": [
[
Expand All @@ -127,7 +108,7 @@
"sourceMaps": true,
"plugins": [
[
"fast-async",
"module:fast-async",
{
"runtimePattern": null,
"compiler": {
Expand All @@ -139,14 +120,14 @@
}
],
[
"yo-yoify"
"module:babel-plugin-yo-yoify"
],
[
"transform-object-assign"
"module:@babel/plugin-transform-object-assign"
]
],
"presets": [
"es2015"
"@babel/preset-env"
]
}
]
Expand Down Expand Up @@ -193,6 +174,7 @@
"test": "csslint && standard && node test/index.js",
"test-browser": "npm-run-all -lpr selenium downloadsolc_root make-mock-compiler serve browsertest",
"watch": "watchify src/index.js -dv -p browserify-reload -o build/app.js --exclude solc",
"reinstall": "rm ./node-modules/ -rf; rm package-lock.json; rm ./build/ -rf; npm install; npm run build"
"reinstall": "rm ./node-modules/ -rf; rm package-lock.json; rm ./build/ -rf; npm install; npm run build",
"postinstall": "cd .. && git clone https://github.com/ethereum/remix && cd remix && git checkout 517db1adce48feac758aff7465241c0dd385b906 && npm install && npm run bootstrap && cd .. && cd repo && npm run setupremix"
}
}
14 changes: 7 additions & 7 deletions src/app/debugger/debuggerUI/ButtonNavigator.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,16 @@ ButtonNavigator.prototype.render = function () {
var self = this
var view = yo`<div class="${css.buttons}">
<div class="${css.stepButtons} btn-group p-1">
<button id='overback' class='btn btn-primary btn-sm' title='Step over back' class='${css.navigator} ${css.stepButton} fas fa-reply' onclick=${function () { self.event.trigger('stepOverBack') }} disabled=${this.overBackDisabled} ></button>
<button id='intoback' class='btn btn-primary btn-sm' title='Step back' class='${css.navigator} ${css.stepButton} fas fa-level-up-alt' onclick=${function () { self.event.trigger('stepIntoBack') }} disabled=${this.intoBackDisabled} ></button>
<button id='intoforward' class='btn btn-primary btn-sm' title='Step into' class='${css.navigator} ${css.stepButton} fas fa-level-down-alt' onclick=${function () { self.event.trigger('stepIntoForward') }} disabled=${this.intoForwardDisabled} ></button>
<button id='overforward' class='btn btn-primary btn-sm' title='Step over forward' class='${css.navigator} ${css.stepButton} fas fa-share' onclick=${function () { self.event.trigger('stepOverForward') }} disabled=${this.overForwardDisabled} ></button>
<button id='overback' class='btn btn-primary btn-sm ${css.navigator} ${css.stepButton} fas fa-reply' title='Step over back' onclick=${function () { self.event.trigger('stepOverBack') }} disabled=${this.overBackDisabled} ></button>
<button id='intoback' class='btn btn-primary btn-sm ${css.navigator} ${css.stepButton} fas fa-level-up-alt' title='Step back' onclick=${function () { self.event.trigger('stepIntoBack') }} disabled=${this.intoBackDisabled} ></button>
<button id='intoforward' class='btn btn-primary btn-sm ${css.navigator} ${css.stepButton} fas fa-level-down-alt' title='Step into' onclick=${function () { self.event.trigger('stepIntoForward') }} disabled=${this.intoForwardDisabled} ></button>
<button id='overforward' class='btn btn-primary btn-sm ${css.navigator} ${css.stepButton} fas fa-share' title='Step over forward'onclick=${function () { self.event.trigger('stepOverForward') }} disabled=${this.overForwardDisabled} ></button>
</div>
<div class="${css.jumpButtons} btn-group p-1">
<button class='btn btn-primary btn-sm' id='jumppreviousbreakpoint' title='Jump to the previous breakpoint' class='${css.navigator} ${css.jumpButton} fas fa-step-backward' onclick=${function () { self.event.trigger('jumpPreviousBreakpoint') }} disabled=${this.jumpPreviousBreakpointDisabled} ></button>
<button class='btn btn-primary btn-sm' id='jumpout' title='Jump out' class='${css.navigator} ${css.jumpButton} fas fa-eject' onclick=${function () { self.event.trigger('jumpOut') }} disabled=${this.jumpOutDisabled} ></button>
<button class='btn btn-primary btn-sm' id='jumpnextbreakpoint' title='Jump to the next breakpoint' class='${css.navigator} ${css.jumpButton} fas fa-step-forward' onclick=${function () { self.event.trigger('jumpNextBreakpoint') }} disabled=${this.jumpNextBreakpointDisabled} ></button>
<button class='btn btn-primary btn-sm ${css.navigator} ${css.jumpButton} fas fa-step-backward' id='jumppreviousbreakpoint' title='Jump to the previous breakpoint' onclick=${function () { self.event.trigger('jumpPreviousBreakpoint') }} disabled=${this.jumpPreviousBreakpointDisabled} ></button>
<button class='btn btn-primary btn-sm ${css.navigator} ${css.jumpButton} fas fa-eject' id='jumpout' title='Jump out' onclick=${function () { self.event.trigger('jumpOut') }} disabled=${this.jumpOutDisabled} ></button>
<button class='btn btn-primary btn-sm ${css.navigator} ${css.jumpButton} fas fa-step-forward' id='jumpnextbreakpoint' title='Jump to the next breakpoint' onclick=${function () { self.event.trigger('jumpNextBreakpoint') }} disabled=${this.jumpNextBreakpointDisabled} ></button>
</div>
<div id='reverted' style="display:none">
<button class='btn btn-danger btn-sm' id='jumptoexception' title='Jump to exception' class='${css.navigator} ${css.button} fas fa-exclamation-triangle' onclick=${function () { self.event.trigger('jumpToException') }} disabled=${this.jumpOutDisabled} >
Expand Down
2 changes: 1 addition & 1 deletion src/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict'

require('babel-polyfill')
require('@babel/polyfill')
var App = require('./app.js')

var app = new App({})
Expand Down
25 changes: 25 additions & 0 deletions test-browser/commands/clickFunction.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const EventEmitter = require('events')

class ClickFunction extends EventEmitter {
command (fnFullName, expectedInput) {
this.api.waitForElementPresent('.instance button[title="' + fnFullName + '"]')
.perform(function (client, done) {
client.execute(function () {
document.querySelector('#runTabView').scrollTop = document.querySelector('#runTabView').scrollHeight
}, [], function () {
if (expectedInput) {
client.setValue('#runTabView input[title="' + expectedInput.types + '"]', expectedInput.values, function () {})
}
done()
})
})
.click('.instance button[title="' + fnFullName + '"]')
.pause(500)
.perform(() => {
this.emit('complete')
})
return this
}
}

module.exports = ClickFunction
12 changes: 12 additions & 0 deletions test-browser/commands/clickLaunchIcon.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const EventEmitter = require('events')

class ClickLaunchIcon extends EventEmitter {
command (icon) {
this.api.click('#icon-panel div[plugin="' + icon + '"]').perform(() => {
this.emit('complete')
})
return this
}
}

module.exports = ClickLaunchIcon
18 changes: 18 additions & 0 deletions test-browser/commands/getEditorValue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const EventEmitter = require('events')

class GetEditorValue extends EventEmitter {
command (callback) {
this.api.perform((client, done) => {
this.api.execute(function (value) {
return document.getElementById('input').editor.getValue()
}, [], (result) => {
done(result.value)
callback(result.value)
this.emit('complete')
})
})
return this
}
}

module.exports = GetEditorValue
17 changes: 17 additions & 0 deletions test-browser/commands/modalFooterOKClick.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const EventEmitter = require('events')

class ModalFooterOKClick extends EventEmitter {
command () {
this.api.perform((client, done) => {
this.api.execute(function () {
document.querySelector('#modal-footer-ok').click()
}, [], (result) => {
done()
this.emit('complete')
})
})
return this
}
}

module.exports = ModalFooterOKClick
23 changes: 23 additions & 0 deletions test-browser/commands/scrollInto.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const EventEmitter = require('events')

class ScrollInto extends EventEmitter {
command (target) {
this.api.perform((client, done) => {
_scrollInto(this.api, target, () => {
done()
this.emit('complete')
})
})
return this
}
}

function _scrollInto (browser, target, cb) {
browser.execute(function (target) {
document.querySelector(target).scrollIntoView()
}, [target], function () {
cb()
})
}

module.exports = ScrollInto
20 changes: 20 additions & 0 deletions test-browser/commands/setEditorValue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
const EventEmitter = require('events')

class SetEditorValue extends EventEmitter {
command (value, callback) {
this.api.perform((client, done) => {
this.api.execute(function (value) {
document.getElementById('input').editor.session.setValue(value)
}, [value], (result) => {
done()
if (callback) {
callback.call(this.api)
}
this.emit('complete')
})
})
return this
}
}

module.exports = SetEditorValue
14 changes: 14 additions & 0 deletions test-browser/commands/testEditorValue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const EventEmitter = require('events')

class TestEditorValue extends EventEmitter {
command (testvalue, callback) {
this.api.getEditorValue((value) => {
this.api.assert.equal(testvalue, value)
callback()
this.emit('complete')
})
return this
}
}

module.exports = TestEditorValue

0 comments on commit f4d9507

Please sign in to comment.