desktop e2e

pull/4837/head
bunsenstraat 11 months ago
parent fdcb818216
commit b135971f60
  1. 1
      .gitignore
  2. 2
      apps/remix-ide-e2e/src/commands/addLocalPlugin.ts
  3. 20
      apps/remixdesktop/package.json
  4. 7
      apps/remixdesktop/reports/tests/nightwatch-html-report/css/bootstrap.min.css
  5. 1523
      apps/remixdesktop/reports/tests/nightwatch-html-report/css/style.css
  6. 1
      apps/remixdesktop/reports/tests/nightwatch-html-report/images/arrows.svg
  7. 1
      apps/remixdesktop/reports/tests/nightwatch-html-report/images/badges.svg
  8. 51
      apps/remixdesktop/reports/tests/nightwatch-html-report/images/nightwatch-logo.svg
  9. 200
      apps/remixdesktop/reports/tests/nightwatch-html-report/index.html
  10. 7
      apps/remixdesktop/reports/tests/nightwatch-html-report/js/bootstrap.min.js
  11. 1
      apps/remixdesktop/reports/tests/xterm.test.json
  12. 56
      apps/remixdesktop/reports/tests/xterm.test.xml
  13. 15
      apps/remixdesktop/selenium.config.js
  14. 14
      apps/remixdesktop/src/main.ts
  15. 2
      apps/remixdesktop/test/cache_dir/remixdesktop.json
  16. 67
      apps/remixdesktop/test/nighwatch.app.ts
  17. 13
      apps/remixdesktop/test/tests/app/xterm.test.ts
  18. 108
      apps/remixdesktop/test/types/index.d.ts
  19. 7
      apps/remixdesktop/tsconfig.e2e.json
  20. 22
      apps/remixdesktop/tsconfig.json
  21. 884
      apps/remixdesktop/yarn.lock

1
.gitignore vendored

@ -61,5 +61,6 @@ testem.log
apps/remixdesktop/.webpack apps/remixdesktop/.webpack
apps/remixdesktop/out apps/remixdesktop/out
apps/remixdesktop/release/ apps/remixdesktop/release/
apps/remixdesktop/build*/
apps/remix-ide/src/assets/list.json apps/remix-ide/src/assets/list.json
apps/remix-ide/src/assets/esbuild.wasm apps/remix-ide/src/assets/esbuild.wasm

@ -24,7 +24,7 @@ function addLocalPlugin (browser: NightwatchBrowser, profile: Profile & Location
browser.waitForElementVisible('*[data-id="pluginManagerComponentPluginManager"]') browser.waitForElementVisible('*[data-id="pluginManagerComponentPluginManager"]')
.execute(function () { .execute(function () {
window.testmode = true (window as any).testmode = true
}) })
.click('*[data-id="pluginManagerComponentPluginSearchButton"]') .click('*[data-id="pluginManagerComponentPluginSearchButton"]')
.waitForElementVisible('*[data-id="pluginManagerLocalPluginModalDialogModalDialogContainer-react"]') .waitForElementVisible('*[data-id="pluginManagerLocalPluginModalDialogModalDialogContainer-react"]')

@ -27,16 +27,28 @@
"dist": "tsc && cp -R node_modules/yarn build/tools/ && electron-builder", "dist": "tsc && cp -R node_modules/yarn build/tools/ && electron-builder",
"installRipGrepMacOXx64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=x64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "installRipGrepMacOXx64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=x64 node node_modules/@vscode/ripgrep/lib/postinstall.js",
"installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js",
"postinstall": "electron-builder install-app-deps" "postinstall": "electron-builder install-app-deps",
"selenium-install": "selenium-standalone install --drivers.chromiumedge.version=114.0.1788.0 --drivers.chrome.version=114.0.1788.0 --drivers.chrome.baseURL=https://chromedriver.storage.googleapis.com",
"selenium-start": "selenium-standalone start --config=./selenium.config.js",
"test:app:linuxlocal": "yarn run build:e2e && nightwatch --config build-e2e/remixdesktop/test/nighwatch.app.js --env=linuxlocal",
"test:app:maclocal": "yarn run build:e2e && nightwatch --config build-e2e/remixdesktop/test/nighwatch.app.js --env=maclocal",
"test:app:winlocal": "yarn run build:e2e && nightwatch --config build-e2e/remixdesktop/test/nighwatch.app.js --env=winlocal",
"test:app:linux": "yarn run build:e2e && nightwatch --config build-e2e/remixdesktop/test/nighwatch.app.js --env=linux",
"test:app:mac": "yarn run build:e2e && nightwatch --config build-e2e/remixdesktop/test/nighwatch.app.js --env=mac",
"test:app:win": "yarn run build:e2e && nightwatch --config build-e2e/remixdesktop/test/nighwatch.app.js --env=win",
"build:e2e": "tsc -p tsconfig.e2e.json"
}, },
"devDependencies": { "devDependencies": {
"@electron/rebuild": "^3.2.13", "@electron/rebuild": "^3.2.13",
"@types/byline": "^4.2.35", "@types/byline": "^4.2.35",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/nightwatch": "^2.3.23",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"electron": "^25.0.1", "electron": "^25.0.1",
"electron-builder": "^23.6.0", "electron-builder": "^23.6.0",
"electron-devtools-installer": "^3.2.0", "electron-devtools-installer": "^3.2.0",
"selenium-standalone": "^9.3.1",
"nightwatch": "2.3",
"typescript": "^5.1.3", "typescript": "^5.1.3",
"yarn": "^1.22.21" "yarn": "^1.22.21"
}, },
@ -69,13 +81,15 @@
"files": [ "files": [
"build/**/*" "build/**/*"
], ],
"publish": [{ "publish": [
{
"provider": "github", "provider": "github",
"owner": "bunsenstraat", "owner": "bunsenstraat",
"repo": "remix-desktop", "repo": "remix-desktop",
"releaseType": "draft", "releaseType": "draft",
"publishAutoUpdate": true "publishAutoUpdate": true
}], }
],
"mac": { "mac": {
"category": "public.app-category.productivity", "category": "public.app-category.productivity",
"target": [ "target": [

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 30 800" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><rect id="Arrows" x="0" y="0" width="30" height="800" style="fill:none;"/><path d="M24,1.451l-10,10.04l-10,-10.04l1.446,-1.451l8.554,8.588l8.554,-8.588c0.482,0.484 0.964,0.968 1.446,1.451Z" style="fill:#b1b1b1;"/><path d="M22.531,403.53l-10.531,-10.579l-10.531,10.579l-1.469,-1.476l12,-12.054l12,12.054c-0.49,0.492 -0.979,0.984 -1.469,1.476Z" style="fill:#b1b1b1;"/><path d="M1.469,290l10.531,10.579l10.531,-10.579l1.469,1.476l-12,12.054l-12,-12.054c0.49,-0.492 0.979,-0.984 1.469,-1.476Z" style="fill:#b1b1b1;"/><path d="M1.469,340l10.531,10.579l10.531,-10.579l1.469,1.476l-12,12.054l-12,-12.054c0.49,-0.492 0.979,-0.984 1.469,-1.476Z" style="fill:#333;"/><path d="M24,51.451l-10,10.04l-10,-10.04l1.446,-1.451l8.554,8.588l8.554,-8.588c0.482,0.484 0.964,0.968 1.446,1.451Z" style="fill:#333;"/><path d="M15.446,110l-10,10l-1.446,-1.446l8.554,-8.554l-8.554,-8.554l1.446,-1.446c3.333,3.333 6.666,6.667 10,10Z" style="fill:#b1b1b1;"/><path d="M15.446,170l-10,10l-1.446,-1.446l8.554,-8.554l-8.554,-8.554l1.446,-1.446c3.333,3.333 6.666,6.667 10,10Z" style="fill:#333;"/><path d="M4,230l10,10l1.446,-1.446l-8.555,-8.554l8.555,-8.554l-1.446,-1.446c-3.333,3.333 -6.667,6.667 -10,10Z" style="fill:#fff;"/><path d="M29.446,660l-10,10l-1.446,-1.446l8.554,-8.554l-8.554,-8.554l1.446,-1.446c3.333,3.333 6.666,6.667 10,10Z" style="fill:#fff;"/><path d="M22.531,463.53l-10.531,-10.579l-10.531,10.579l-1.469,-1.476l12,-12.054l12,12.054c-0.49,0.492 -0.979,0.984 -1.469,1.476Z" style="fill:#333;"/><path d="M13.853,595.763l10.439,-10.439c0.472,0.472 0.943,0.943 1.415,1.415l-12.854,12.853l-12.853,-12.853l1.414,-1.415l10.439,10.439l0,-22.233l2,0l0,22.233Z" style="fill:#fff;fill-rule:nonzero;"/></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 850 260" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><rect id="Badges" x="0" y="0" width="850" height="260" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0" width="850" height="260"/></clipPath><g clip-path="url(#_clip1)"><path d="M35,0c19.317,0 35,15.683 35,35c0,19.317 -15.683,35 -35,35c-19.317,0 -35,-15.683 -35,-35c0,-19.317 15.683,-35 35,-35Zm23.061,21.986l-27.276,27.276l-16.453,-16.453l2.121,-2.122l14.332,14.332l25.154,-25.154c0.707,0.707 1.415,1.414 2.122,2.121Z" style="fill:#0edc8a;"/><path d="M205,0c19.317,0 35,15.683 35,35c0,19.317 -15.683,35 -35,35c-19.317,0 -35,-15.683 -35,-35c0,-19.317 15.683,-35 35,-35Zm0,32.879l16.277,-16.278c0.708,0.707 1.415,1.415 2.122,2.122l-16.278,16.277l16.278,16.277l-2.122,2.122l-16.277,-16.278l-16.277,16.278l-2.122,-2.122l16.278,-16.277l-16.278,-16.277l2.122,-2.122l16.277,16.278Z" style="fill:#e03d5e;"/><path d="M545,0c19.317,0 35,15.683 35,35c0,19.317 -15.683,35 -35,35c-19.317,0 -35,-15.683 -35,-35c0,-19.317 15.683,-35 35,-35Zm1.5,59.092l0,-7.449l-3,0l0,7.449l3,0Zm0,-13.031l-3,0l0,-35.153l3,0c0,11.718 0,23.435 0,35.153Z" style="fill:#e78d48;"/><path d="M715,70c19.317,0 35,-15.683 35,-35c0,-19.317 -15.683,-35 -35,-35c-19.317,0 -35,15.683 -35,35c0,19.317 15.683,35 35,35Zm1.5,-10.908l-3,0l0,-35.153l3,0c0,11.718 0,23.435 0,35.153Zm0,-40.735l0,-7.449l-3,0l0,7.449l3,0Z" style="fill:#4bb3eb;"/><path d="M375,0c19.317,0 35,15.683 35,35c0,19.317 -15.683,35 -35,35c-19.317,0 -35,-15.683 -35,-35c0,-19.317 15.683,-35 35,-35Zm0.151,11.562c11.567,0.11 22.177,9.846 23.194,21.341c1.179,13.322 -10.95,26.458 -24.997,25.478c-11.523,-0.805 -21.597,-11.022 -21.784,-23.079l-0.002,-0.298l3,-0.008c0,0.177 0.003,0.355 0.006,0.532c0.334,11.835 12.349,21.837 24.3,19.544c9.533,-1.829 16.982,-11.258 16.55,-20.993c-0.455,-10.236 -9.463,-19.346 -20.154,-19.516l-0.269,-0.001l0.01,-3c0.049,0 0.097,0 0.146,0Z" style="fill:#4bb3eb;"/><path d="M45,170c24.836,0 45,20.164 45,45c0,24.836 -20.164,45 -45,45c-24.836,0 -45,-20.164 -45,-45c0,-24.836 20.164,-45 45,-45Zm29.346,27.965l-34.765,34.766l-20.851,-20.851l2.121,-2.122l18.73,18.73l32.644,-32.644c0.707,0.707 1.414,1.414 2.121,2.121Z" style="fill:#0edc8a;"/><path d="M235,170c24.836,0 45,20.164 45,45c0,24.836 -20.164,45 -45,45c-24.836,0 -45,-20.164 -45,-45c0,-24.836 20.164,-45 45,-45Zm0,42.879l21.231,-21.231c0.707,0.707 1.414,1.414 2.121,2.121l-21.231,21.231l21.231,21.231l-2.121,2.121l-21.231,-21.231l-21.231,21.231l-2.121,-2.121l21.231,-21.231l-21.231,-21.231l2.121,-2.121l21.231,21.231Z" style="fill:#e03d5e;"/><path d="M425,170c24.836,0 45,20.164 45,45c0,24.836 -20.164,45 -45,45c-24.836,0 -45,-20.164 -45,-45c0,-24.836 20.164,-45 45,-45Zm0.192,15.294c14.562,0.14 28.059,12.011 29.396,27.047c1.255,14.103 -8.905,28.372 -22.883,31.604c-12.436,2.875 -26.392,-3.287 -32.649,-14.474c-2.461,-4.399 -3.748,-9.428 -3.762,-14.467l3,-0.008c0.038,13.064 10.598,25.043 23.64,26.536c11.853,1.357 24.149,-6.229 28.207,-17.508c3.942,-10.958 -0.331,-24.314 -9.95,-30.986c-4.431,-3.074 -9.806,-4.727 -15.196,-4.744l0.01,-3c0.062,0 0.125,0 0.187,0Z" style="fill:#4bb3eb;"/><path d="M615,170c24.836,0 45,20.164 45,45c0,24.836 -20.164,45 -45,45c-24.836,0 -45,-20.164 -45,-45c0,-24.836 20.164,-45 45,-45Zm1.5,75.975l0,-9.577l-3,0l0,9.577l3,0Zm0,-16.754l-3,0l0,-45.196l3,0c0,15.065 0,30.131 0,45.196Z" style="fill:#e78d48;"/><path d="M805,260c24.836,0 45,-20.164 45,-45c0,-24.836 -20.164,-45 -45,-45c-24.836,0 -45,20.164 -45,45c0,24.836 20.164,45 45,45Zm1.5,-14.025l-3,0l0,-45.196l3,0c0,15.065 0,30.131 0,45.196Zm0,-52.373l0,-9.577l-3,0l0,9.577l3,0Z" style="fill:#4bb3eb;"/></g></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="135.505px" height="143.92px" viewBox="0 0 135.505 143.92" enable-background="new 0 0 135.505 143.92" xml:space="preserve">
<g>
<g>
<polygon fill="#FFFFFF" points="12.73,143.919 9.923,141.114 25.26,125.779 0,100.519 2.807,97.712 30.873,125.779 "/>
<rect x="28.066" y="123.794" fill="#FFFFFF" width="107.438" height="3.969"/>
</g>
<g>
<path fill="#502D17" d="M37.136,2.677c-0.193-1.742,1.509-3.077,3.152-2.472l22.301,8.209l-22.382,21.59L37.136,2.677z"/>
<path fill="#502D17" d="M115.984,2.677c0.195-1.742-1.508-3.077-3.148-2.472L90.531,8.414l22.387,21.59L115.984,2.677z"/>
<ellipse fill="#794422" cx="76.822" cy="75.013" rx="53.819" ry="46.2"/>
<path fill="#502D17" d="M121.354,62.395c0,34.456-19.938,62.39-44.533,62.39c-24.594,0-44.531-27.934-44.531-62.39 C32.29,27.934,52.227,0,76.82,0C101.416,0,121.354,27.934,121.354,62.395z"/>
<ellipse fill="#FFFFFF" cx="58.842" cy="41.165" rx="20.767" ry="23.658"/>
<path fill="#FFFFFF" d="M107.838,88.176c0,15.942-13.887,28.868-31.018,28.868c-17.13,0-31.016-12.926-31.016-28.868 c0-15.947,13.886-28.873,31.016-28.873C93.951,59.304,107.838,72.229,107.838,88.176z"/>
<path fill="#FFFFFF" d="M115.172,41.165c0,13.066-9.297,23.658-20.769,23.658c-11.466,0-20.765-10.591-20.765-23.658 c0-13.068,9.299-23.661,20.765-23.661C105.875,17.503,115.172,28.097,115.172,41.165z"/>
<path fill="#FF7F2B" d="M75.116,49.227c1.146-0.452,2.43-0.438,3.565,0.037c3.621,1.506,6.213,3.356,8.491,6.046 c0.755,0.893,0.8,2.18,0.179,3.169c-2.373,3.782-5.249,6.625-8.916,9.444c-0.897,0.689-2.154,0.689-3.051,0 c-3.667-2.818-6.543-5.662-8.917-9.444c-0.616-0.98-0.562-2.253,0.185-3.137C69.018,52.547,71.327,50.718,75.116,49.227z"/>
<g>
<path fill="#D6D6D6" d="M74.759,73.539c0,2.293-1.857,4.152-4.149,4.152c-2.295,0-4.153-1.859-4.153-4.152H74.759z"/>
<path fill="#D6D6D6" d="M87.371,73.539c0,2.293-1.858,4.152-4.152,4.152s-4.152-1.859-4.152-4.152H87.371z"/>
<path fill="#D6D6D6" d="M68.455,81.814c0,2.295-1.859,4.152-4.153,4.152c-2.293,0-4.151-1.857-4.151-4.152H68.455z"/>
<path fill="#D6D6D6" d="M81.064,81.814c0,2.295-1.857,4.152-4.15,4.152s-4.153-1.857-4.153-4.152H81.064z"/>
<path fill="#D6D6D6" d="M93.677,81.814c0,2.295-1.86,4.152-4.152,4.152s-4.151-1.857-4.151-4.152H93.677z"/>
<path fill="#D6D6D6" d="M62.148,89.908c0,2.296-1.857,4.152-4.151,4.152c-2.293,0-4.15-1.856-4.15-4.152H62.148z"/>
<path fill="#D6D6D6" d="M74.759,89.908c0,2.296-1.857,4.152-4.149,4.152c-2.295,0-4.153-1.856-4.153-4.152H74.759z"/>
<path fill="#D6D6D6" d="M87.371,89.908c0,2.296-1.858,4.152-4.152,4.152s-4.152-1.856-4.152-4.152H87.371z"/>
<path fill="#D6D6D6" d="M99.98,89.908c0,2.296-1.857,4.152-4.15,4.152s-4.152-1.856-4.152-4.152H99.98z"/>
<path fill="#D6D6D6" d="M68.455,98.185c0,2.295-1.859,4.152-4.153,4.152c-2.293,0-4.151-1.857-4.151-4.152H68.455z"/>
<path fill="#D6D6D6" d="M81.064,98.185c0,2.295-1.857,4.152-4.15,4.152s-4.153-1.857-4.153-4.152H81.064z"/>
<path fill="#D6D6D6" d="M93.677,98.185c0,2.295-1.86,4.152-4.152,4.152s-4.151-1.857-4.151-4.152H93.677z"/>
<path fill="#D6D6D6" d="M74.759,106.279c0,2.295-1.857,4.152-4.149,4.152c-2.295,0-4.153-1.857-4.153-4.152H74.759z"/>
<path fill="#D6D6D6" d="M87.371,106.279c0,2.295-1.858,4.152-4.152,4.152s-4.152-1.857-4.152-4.152H87.371z"/>
</g>
<g>
<circle fill="#C2DDEB" cx="61.554" cy="38.516" r="12.084"/>
<circle cx="61.554" cy="38.516" r="7.561"/>
<circle fill="#FFFFFF" cx="63.458" cy="35.717" r="2.798"/>
</g>
<g>
<circle fill="#C2DDEB" cx="91.119" cy="38.516" r="12.086"/>
<circle cx="91.119" cy="38.516" r="7.561"/>
<circle fill="#FFFFFF" cx="93.023" cy="35.717" r="2.799"/>
</g>
</g>
<g>
<path fill="#FF7F2B" d="M101.904,124.798c0,3.186-1.76,5.768-3.924,5.768c-2.169,0-3.928-2.582-3.928-5.768 c0,3.186-1.758,5.768-3.927,5.768c-2.167,0-3.927-2.582-3.927-5.768c0,3.186-1.756,5.768-3.926,5.768 c-2.166,0-3.925-2.582-3.925-5.768c0-4.504,5.257-8.152,11.743-8.152c6.484,0,11.742,3.648,11.742,8.152H101.904z"/>
<path fill="#FF7F2B" d="M75.119,124.798c0,3.186-1.759,5.768-3.926,5.768c-2.168,0-3.927-2.582-3.927-5.768 c0,3.186-1.756,5.768-3.926,5.768c-2.168,0-3.923-2.582-3.923-5.768c0,3.186-1.76,5.768-3.928,5.768 c-2.167,0-3.925-2.582-3.925-5.768c0-4.504,5.257-8.152,11.742-8.152c6.486,0,11.746,3.648,11.746,8.152H75.119z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

@ -0,0 +1,200 @@
<head>
<title>Nightwatch Reporter</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="wrap">
<div id="main">
<section id="navigation">
<div class="container-fluid">
<nav class="navbar navbar-expand-lg">
<a class="navbar-brand" href="https://nightwatchjs.org" target="_blank"><div class="logo"></div></a>
</nav>
</div>
</section>
<section id="auxbar">
<div class="container-fluid">
<div class="row">
<div class="auxcol col-md-4 align-items-center">
<div class="auxcontainer">
<div class="auxbox autobox">
</div>
</div>
</div>
<div class="auxcol col-md-4 align-items-center">
<div class="auxcontainer align-h-center">
<h1>Nightwatch.js – <strong>Test Report</strong></h1>
</div>
</div>
</div>
</div>
</section>
<section id="sessions">
<div class="row">
<div class="col-md-12">
<div class="container-fluid">
<div id="s1" class="sessionbox">
<div class="sessionbox-indicator indicator-error sessionbox-padding">
<div class="row">
<div class="col-md-1">
<div class="statusbadge statusbadge-error">Error</div>
</div>
<div class="col-md-11 separator-l">
<div class="row sessionbox-head">
<div class="col-md-8">
xterm.test
</div>
</div>
<div id="tabs-s1" class="row sessionbox-tabs">
<div class="col-md-12">
<nav>
<div class="nav nav-tabs" id="nav-tab1" role="tablist">
<a class="nav-item nav-link active" id="nav-s1-t1-tab" data-bs-toggle="tab" href="#nav-s1-t1" role="tab" aria-controls="nav-s1-t1" aria-selected="true">Details</a>
<a class="nav-item nav-link" id="nav-s1-t3-tab" data-bs-toggle="tab" href="#nav-s1-t3" role="tab" aria-controls="nav-s1-t3" aria-selected="true">Raw HTTP Log</a>
</div>
</nav>
<div class="tab-content" id="nav-tab1Content">
<div class="tab-pane show active" id="nav-s1-t1" role="tabpanel" aria-labelledby="nav-home-tab">
<div class="row">
<div class="col-md-12">
<div class="statgroup autobox">
<div class="statbox autobox">
<div class="label-sessionfull">Status</div>
<div class="stat-sessionfull">PASSED</div>
</div>
</div>
<div class="statgroup autobox">
<div class="statbox autobox">
<div class="label-sessionfull">Tests</div>
<div class="stat-sessionfull">0</div>
</div>
<div class="statbox autobox">
<div class="label-sessionfull">Failed</div>
<div class="stat-sessionfull">0</div>
</div>
<div class="statbox autobox">
<div class="label-sessionfull">Errors</div>
<div class="stat-sessionfull">1</div>
</div>
<div class="statbox autobox">
<div class="label-sessionfull">Module Path</div>
<div class="stat-sessionfull">/build-e2e/remixdesktop/test/tests/app/xterm.test.js</div>
</div>
</div>
<div class="statgroup autobox">
<div class="statbox autobox">
<div class="label-sessionfull">Duration</div>
<div class="stat-sessionfull">0.000 secs</div>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane raw-http-log" id="nav-s1-t3" role="tabpanel" aria-labelledby="nav-contact-tab">
<div class="row">
<div class="col-md-12">
<div class="raw-http-log code-sessionfull"><div style="margin-left: -15px;margin-top: 10px; background: #0c5460"> Request <b><span style="color:#0AA">POST /wd/hub/session </span></b></div><div>{
desiredCapabilities: {
browserName: <span style="color:#0A0">&#39;chrome&#39;<span style="color:#FFF">,
javascriptEnabled: <span style="color:#A50">true<span style="color:#FFF">,
acceptSslCerts: <span style="color:#A50">true<span style="color:#FFF">,
<span style="color:#0A0">&#39;goog:chromeOptions&#39;<span style="color:#FFF">: {
binary: <span style="color:#0A0">&#39;release/linux-unpacked/remixdesktop --e2e-local&#39;<span style="color:#FFF">,
args: []
},
name: <span style="color:#0A0">&#39;Xterm Test&#39;<span style="color:#FFF">
},
capabilities: {
alwaysMatch: {
browserName: <span style="color:#0A0">&#39;chrome&#39;<span style="color:#FFF">,
<span style="color:#0A0">&#39;goog:chromeOptions&#39;<span style="color:#FFF">: {
binary: <span style="color:#0A0">&#39;release/linux-unpacked/remixdesktop --e2e-local&#39;<span style="color:#FFF">,
args: []
}
}
}
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div><div style="margin-left: -15px;margin-top: 10px; background: #0c5460"> Response 500 POST /wd/hub/session (160ms)</div><div>{
value: {
error: <span style="color:#0A0">&#39;session not created&#39;<span style="color:#FFF">,
message: <span style="color:#0A0">&#39;Could not start a new session. Error while creating session with the driver service. Stopping driver service: Could not start a new session. Response code 500. Message: unknown error: no chrome binary at release/linux-unpacked/remixdesktop --e2e-local \n&#39;<span style="color:#FFF"> +
<span style="color:#0A0">&quot;Host info: host: &#39;Ubuntuns&#39;, ip: &#39;127.0.1.1&#39;\n&quot;<span style="color:#FFF"> +
<span style="color:#0A0">&quot;Build info: version: &#39;4.9.0&#39;, revision: &#39;d7057100a6&#39;\n&quot;<span style="color:#FFF"> +
<span style="color:#0A0">&quot;System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;6.2.0-39-generic&#39;, java.version: &#39;11.0.21&#39;\n&quot;<span style="color:#FFF"> +
<span style="color:#0A0">&#39;Driver info: driver.version: unknown\n&#39;<span style="color:#FFF"> +
<span style="color:#0A0">&quot;Build info: version: &#39;4.9.0&#39;, revision: &#39;d7057100a6&#39;\n&quot;<span style="color:#FFF"> +
<span style="color:#0A0">&quot;System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;6.2.0-39-generic&#39;, java.version: &#39;11.0.21&#39;\n&quot;<span style="color:#FFF"> +
<span style="color:#0A0">&#39;Driver info: driver.version: unknown&#39;<span style="color:#FFF">,
stacktrace: <span style="color:#0A0">&#39;&#39;<span style="color:#FFF">
}
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="sessionfull-accordion">
<div class="card">
<div class="card-header" id="h2">
<h5 class="mb-0">
<button class="btn btn-link" style="background-image:none">
open app
<span class ="float-right">
<a href="#" class="btn btn-sm btn-secondary disabled" role="button" style="font-size: 0.65em">skipped</a>
</span>
</button>
</h5>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
<section id="footer">
<div class="container-fluid">
<div class="row footerstarbg">
<div class="col-md-12">
<nav class="footer-box">
<div class="footer-links">
<a class="cr" href="https://nightwatchjs.org" target="_blank">© 2022 Nightwatch.js</a>
</nav>
</div>
</div>
</div>
</section>
<script src="js/bootstrap.min.js"></script>
</body>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" ?>
<testsuites errors="1"
failures="0"
tests="0">
<testsuite name="xterm.test"
errors="1" failures="0" hostname="" id="" package="xterm.test" skipped="1"
tests="0" time="0.000" timestamp="">
<system-err>
An error occurred while creating a new Selenium Server session: [SessionNotCreatedError] Could not start a new session. Error while creating session with the driver service. Stopping driver service: Could not start a new session. Response code 500. Message: unknown error: no chrome binary at release/linux-unpacked/remixdesktop --e2e-local
Host info: host: &#39;Ubuntuns&#39;, ip: &#39;127.0.1.1&#39;
Build info: version: &#39;4.9.0&#39;, revision: &#39;d7057100a6&#39;
System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;6.2.0-39-generic&#39;, java.version: &#39;11.0.21&#39;
Driver info: driver.version: unknown
Build info: version: &#39;4.9.0&#39;, revision: &#39;d7057100a6&#39;
System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;6.2.0-39-generic&#39;, java.version: &#39;11.0.21&#39;
Driver info: driver.version: unknown
</system-err>
<error message="An error occurred while creating a new Selenium Server session: [SessionNotCreatedError] Could not start a new session. Error while creating session with the driver service. Stopping driver service: Could not start a new session. Response code 500. Message: unknown error: no chrome binary at release/linux-unpacked/remixdesktop --e2e-local
Host info: host: &#39;Ubuntuns&#39;, ip: &#39;127.0.1.1&#39;
Build info: version: &#39;4.9.0&#39;, revision: &#39;d7057100a6&#39;
System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;6.2.0-39-generic&#39;, java.version: &#39;11.0.21&#39;
Driver info: driver.version: unknown
Build info: version: &#39;4.9.0&#39;, revision: &#39;d7057100a6&#39;
System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;6.2.0-39-generic&#39;, java.version: &#39;11.0.21&#39;
Driver info: driver.version: unknown"><![CDATA[
SessionNotCreatedError: An error occurred while creating a new Selenium Server session: [SessionNotCreatedError] Could not start a new session. Error while creating session with the driver service. Stopping driver service: Could not start a new session. Response code 500. Message: unknown error: no chrome binary at release/linux-unpacked/remixdesktop --e2e-local
Host info: host: &#39;Ubuntuns&#39;, ip: &#39;127.0.1.1&#39;
Build info: version: &#39;4.9.0&#39;, revision: &#39;d7057100a6&#39;
System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;6.2.0-39-generic&#39;, java.version: &#39;11.0.21&#39;
Driver info: driver.version: unknown
Build info: version: &#39;4.9.0&#39;, revision: &#39;d7057100a6&#39;
System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;6.2.0-39-generic&#39;, java.version: &#39;11.0.21&#39;
Driver info: driver.version: unknown
at Object.throwDecodedError (/home/bunsen/code/remix-project/apps/remixdesktop/node_modules/selenium-webdriver/lib/error.js:522:15)
at parseHttpResponse (/home/bunsen/code/remix-project/apps/remixdesktop/node_modules/selenium-webdriver/lib/http.js:589:13)
at Executor.execute (/home/bunsen/code/remix-project/apps/remixdesktop/node_modules/selenium-webdriver/lib/http.js:514:28)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
]]></error>
<testcase
name="open app" classname="xterm.test">
<skipped />
</testcase>
</testsuite>
</testsuites>

@ -0,0 +1,15 @@
module.exports = {
baseURL: 'https://selenium-release.storage.googleapis.com',
drivers: {
chrome: {
version: '114.0.1788.0',
arch: process.arch,
baseURL: 'https://chromedriver.storage.googleapis.com'
},
chromiumedge: {
version: '114.0.1788.0',
arch: process.arch,
baseURL: 'https://msedgedriver.azureedge.net/'
}
}
}

@ -5,6 +5,18 @@ import path from 'path';
export let isPackaged = false; export let isPackaged = false;
export const version = app.getVersion(); export const version = app.getVersion();
const args = process.argv.slice(1)
export const isE2ELocal = args.find(arg => arg.startsWith('--e2e-local'))
if (isE2ELocal) {
console.log('e2e mode')
}
const cache_dir_arg = args.find(arg => arg.startsWith('--cache_dir='))
export let cache_dir = ''
if (cache_dir_arg) {
cache_dir = cache_dir_arg.split('=')[1]
}
if ( if (
process.mainModule && process.mainModule &&
process.mainModule.filename.indexOf('app.asar') !== -1 process.mainModule.filename.indexOf('app.asar') !== -1
@ -35,7 +47,7 @@ export const createWindow = async (dir?: string): Promise<void> => {
const params = dir ? `?opendir=${encodeURIComponent(dir)}` : ''; const params = dir ? `?opendir=${encodeURIComponent(dir)}` : '';
// and load the index.html of the app. // and load the index.html of the app.
mainWindow.loadURL( mainWindow.loadURL(
process.env.NODE_ENV === 'production' || isPackaged ? `file://${__dirname}/remix-ide/index.html` + params : (process.env.NODE_ENV === 'production' || isPackaged) && !isE2ELocal ? `file://${__dirname}/remix-ide/index.html` + params :
'http://localhost:8080' + params) 'http://localhost:8080' + params)
mainWindow.maximize(); mainWindow.maximize();

@ -0,0 +1,2 @@
{"openedFolders":["/home/bunsen/Documents/remix-reward"],
"recentFolders":["/home/bunsen/Documents/remix-reward"]}

@ -0,0 +1,67 @@
module.exports = {
src_folders: ['build-e2e/remixdesktop/test/tests/app'],
output_folder: './reports/tests',
custom_assertions_path: '',
page_objects_path: '',
globals_path: '',
test_settings: {
default: {
selenium_port: 4444,
selenium_host: 'localhost',
globals: {
waitForConditionTimeout: 10000,
asyncHookTimeout: 100000
},
screenshots: {
enabled: true,
path: './reports/screenshots',
on_failure: true,
on_error: true
},
},
macos: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true,
'goog:chromeOptions': {
"binary": "electron .",
"args": [
"--folder=test/contracts",
"--remix-ide-url=http://localhost:8080",
"--e2e"
]
}
}
},
linuxlocal: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true,
'goog:chromeOptions': {
"binary": "release/linux-unpacked/remixdesktop",
"args": [
"--e2e-local",
]
}
}
},
windows: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true,
'goog:chromeOptions': {
"binary": "./out/remixconnect-win32-x64/remixconnect.exe",
"args": [
"--folder=test/contracts",
"--remix-ide-url=http://localhost:8080",
"--e2e"
]
}
}
}
}
}

@ -0,0 +1,13 @@
import { NightwatchBrowser } from 'nightwatch'
module.exports = {
before: function (browser: NightwatchBrowser, done: VoidFunction) {
done()
},
'open app': function (browser: NightwatchBrowser) {
browser
.pause()
.end()
}
}

@ -0,0 +1,108 @@
// Merge custom command types with nightwatch types
/* eslint-disable no-use-before-define */
import {NightwatchBrowser} from 'nightwatch' // eslint-disable-line @typescript-eslint/no-unused-vars
export type callbackCheckVerifyCallReturnValue = (values: string[]) => {message: string; pass: boolean}
declare module 'nightwatch' {
export interface NightwatchCustomCommands {
clickLaunchIcon(icon: string): NightwatchBrowser
switchBrowserTab(index: number): NightwatchBrowser
scrollAndClick(target: string): NightwatchBrowser
scrollInto(target: string): NightwatchBrowser
testContracts(fileName: string, contractCode: NightwatchContractContent, compiledContractNames: string[]): NightwatchBrowser
setEditorValue(value: string, callback?: () => void): NightwatchBrowser
addFile(name: string, content: NightwatchContractContent): NightwatchBrowser
verifyContracts(compiledContractNames: string[], opts?: {wait: number; version?: string; runs?: string}): NightwatchBrowser
selectAccount(account?: string): NightwatchBrowser
clickFunction(fnFullName: string, expectedInput?: NightwatchClickFunctionExpectedInput): NightwatchBrowser
testFunction(txHash: string, expectedInput: NightwatchTestFunctionExpectedInput): NightwatchBrowser
goToVMTraceStep(step: number, incr?: number): NightwatchBrowser
checkVariableDebug(id: string, debugValue: NightwatchCheckVariableDebugValue): NightwatchBrowser
addAtAddressInstance(address: string, isValidFormat: boolean, isValidChecksum: boolean, isAbi?: boolean): NightwatchBrowser
modalFooterOKClick(id?: string): NightwatchBrowser
clickInstance(index: number): NightwatchBrowser
journalLastChildIncludes(val: string): NightwatchBrowser
executeScriptInTerminal(script: string): NightwatchBrowser
clearEditableContent(cssSelector: string): NightwatchBrowser
journalChildIncludes(val: string, opts = {shouldHaveOnlyOneOccurence: boolean}): NightwatchBrowser
debugTransaction(index: number): NightwatchBrowser
checkElementStyle(cssSelector: string, styleProperty: string, expectedResult: string): NightwatchBrowser
openFile(name: string): NightwatchBrowser
refreshPage(): NightwatchBrowser
verifyLoad(): NightwatchBrowser
renamePath(path: string, newFileName: string, renamedPath: string): NightwatchBrowser
rightClickCustom(cssSelector: string): NightwatchBrowser
scrollToLine(line: number): NightwatchBrowser
waitForElementContainsText(id: string, value: string, timeout?: number): NightwatchBrowser
getModalBody(callback: (value: string, cb: VoidFunction) => void): NightwatchBrowser
modalFooterCancelClick(id?: string): NightwatchBrowser
selectContract(contractName: string): NightwatchBrowser
createContract(inputParams: string): NightwatchBrowser
getAddressAtPosition(index: number, cb: (pos: string) => void): NightwatchBrowser
testConstantFunction(address: string, fnFullName: string, expectedInput: NightwatchTestConstantFunctionExpectedInput | null, expectedOutput: string): NightwatchBrowser
getEditorValue(callback: (content: string) => void): NightwatchBrowser
getInstalledPlugins(cb: (plugins: string[]) => void): NightwatchBrowser
verifyCallReturnValue(address: string, checks: string[] | callbackCheckVerifyCallReturnValue): NightwatchBrowser
testEditorValue(testvalue: string): NightwatchBrowser
removeFile(path: string, workspace: string): NightwatchBrowser
switchBrowserWindow(url: string, windowName: string, cb: (browser: NightwatchBrowser, window?: NightwatchCallbackResult<Window>) => void): NightwatchBrowser
setupMetamask(passphrase: string, password: string): NightwatchBrowser
signMessage(msg: string, callback: (hash: {value: string}, signature: {value: string}) => void): NightwatchBrowser
setSolidityCompilerVersion(version: string): NightwatchBrowser
clickElementAtPosition(cssSelector: string, index: number, opt?: {forceSelectIfUnselected: boolean}): NightwatchBrowser
notContainsText(cssSelector: string, text: string): NightwatchBrowser
sendLowLevelTx(address: string, value: string, callData: string): NightwatchBrowser
journalLastChild(val: string): NightwatchBrowser
checkTerminalFilter(filter: string, test: string): NightwatchBrowser
noWorkerErrorFor(version: string): NightwatchBrowser
validateValueInput(selector: string, valueTosSet: string[], expectedValue: string): NightwatchBrowser
checkAnnotations(type: string): NightwatchBrowser
checkAnnotationsNotPresent(type: string): NightwatchBrowser
getLastTransactionHash(callback: (hash: string) => void)
currentWorkspaceIs(name: string): NightwatchBrowser
addLocalPlugin(this: NightwatchBrowser, profile: Profile & LocationProfile & ExternalProfile): NightwatchBrowser
acceptAndRemember(this: NightwatchBrowser, remember: boolean, accept: boolean): NightwatchBrowser
clearConsole(this: NightwatchBrowser): NightwatchBrowser
clearTransactions(this: NightwatchBrowser): NightwatchBrowser
getBrowserLogs(this: NightwatchBrowser): NightwatchBrowser
currentSelectedFileIs(name: string): NightwatchBrowser
switchWorkspace: (workspaceName: string) => NightwatchBrowser
switchEnvironment: (provider: string) => NightwatchBrowser
connectToExternalHttpProvider: (url: string, identifier: string) => NightwatchBrowser
waitForElementNotContainsText: (id: string, value: string, timeout: number = 10000) => NightwatchBrowser
hideToolTips: (this: NightwatchBrowser) => NightwatchBrowser
enableClipBoard: () => NightwatchBrowser
}
export interface NightwatchBrowser {
api: this
emit: (status: string) => void
fullscreenWindow: (result?: any) => this
keys(keysToSend: string, callback?: (this: NightwatchAPI, result: NightwatchCallbackResult<void>) => void): NightwatchBrowser
sendKeys: (selector: string, inputValue: string | string[], callback?: (this: NightwatchAPI, result: NightwatchCallbackResult<void>) => void) => NightwatchBrowser
}
export interface NightwatchAPI {
keys(keysToSend: string, callback?: (this: NightwatchAPI, result: NightwatchCallbackResult<void>) => void): NightwatchAPI
}
export interface NightwatchContractContent {
content: string
}
export interface NightwatchClickFunctionExpectedInput {
types: string
values: string
}
export interface NightwatchTestFunctionExpectedInput {
[key: string]: any
}
export interface NightwatchTestConstantFunctionExpectedInput {
types: string
values: string
}
export type NightwatchCheckVariableDebugValue = NightwatchTestFunctionExpectedInput
}

@ -0,0 +1,7 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "build-e2e"
},
"include": ["test/**/*.ts", "test/**/*.js", "../remix-ide-e2e/src/commands"]
}

@ -1,17 +1,21 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es6", "jsx": "react-jsx",
"target": "ES6",
"allowJs": true,
"module": "commonjs", "module": "commonjs",
"skipLibCheck": true, "skipLibCheck": true,
"esModuleInterop": true, "esModuleInterop": true,
"noImplicitAny": true, "noImplicitAny": false,
"allowSyntheticDefaultImports": true,
"sourceMap": true, "sourceMap": true,
"strictPropertyInitialization": false, "baseUrl": ".",
"strict": true,
"outDir": "build", "outDir": "build",
"rootDir": "./src/", "moduleResolution": "node",
"noEmitOnError": true, "resolveJsonModule": true,
"typeRoots": ["node_modules/@types", "./types"] "paths": {
} "*": ["node_modules/*"]
},
"typeRoots": ["src/**/*.d.ts", "node_modules/@types", "test/**/*.d.ts", "../remix-ide-e2e/src/**/*.d.ts"]
},
"include": ["src/**/*"]
} }

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save