From 2aa5d55a163e895a86e2a863db9e5b7289e1b270 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 Sep 2021 03:02:27 +0100 Subject: [PATCH 1/4] create local plugin --- apps/remix-ide-e2e/src/local-plugin/.babelrc | 4 + .../src/local-plugin/.browserslistrc | 16 ++ apps/remix-ide-e2e/src/local-plugin/.eslintrc | 248 ++++++++++++++++++ .../src/local-plugin/src/app/app.css | 128 +++++++++ .../src/local-plugin/src/app/app.tsx | 39 +++ .../src/local-plugin/src/app/logo.svg | 17 ++ .../src/local-plugin/src/app/star.svg | 11 + .../src/local-plugin/src/assets/.gitkeep | 0 .../src/environments/environment.prod.ts | 3 + .../src/environments/environment.ts | 6 + .../src/local-plugin/src/favicon.ico | Bin 0 -> 15086 bytes .../src/local-plugin/src/index.html | 14 + .../src/local-plugin/src/main.tsx | 11 + .../src/local-plugin/src/polyfills.ts | 7 + .../src/local-plugin/src/styles.css | 1 + .../src/local-plugin/tsconfig.app.json | 13 + .../src/local-plugin/tsconfig.json | 16 ++ nx.json | 5 +- workspace.json | 74 ++++++ 19 files changed, 612 insertions(+), 1 deletion(-) create mode 100644 apps/remix-ide-e2e/src/local-plugin/.babelrc create mode 100644 apps/remix-ide-e2e/src/local-plugin/.browserslistrc create mode 100644 apps/remix-ide-e2e/src/local-plugin/.eslintrc create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/app/app.css create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/app/app.tsx create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/app/logo.svg create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/app/star.svg create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/assets/.gitkeep create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/favicon.ico create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/index.html create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/main.tsx create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts create mode 100644 apps/remix-ide-e2e/src/local-plugin/src/styles.css create mode 100644 apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json create mode 100644 apps/remix-ide-e2e/src/local-plugin/tsconfig.json diff --git a/apps/remix-ide-e2e/src/local-plugin/.babelrc b/apps/remix-ide-e2e/src/local-plugin/.babelrc new file mode 100644 index 0000000000..09d67939cc --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["@nrwl/react/babel"], + "plugins": [] +} diff --git a/apps/remix-ide-e2e/src/local-plugin/.browserslistrc b/apps/remix-ide-e2e/src/local-plugin/.browserslistrc new file mode 100644 index 0000000000..f1d12df4fa --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by: +# 1. autoprefixer to adjust CSS to support the below specified browsers +# 2. babel preset-env to adjust included polyfills +# +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries +# +# If you need to support different browsers in production, you may tweak the list below. + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major version +last 2 iOS major versions +Firefox ESR +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/apps/remix-ide-e2e/src/local-plugin/.eslintrc b/apps/remix-ide-e2e/src/local-plugin/.eslintrc new file mode 100644 index 0000000000..3651dc7a8c --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/.eslintrc @@ -0,0 +1,248 @@ +{ + "rules": { + "array-callback-return": "warn", + "dot-location": ["warn", "property"], + "eqeqeq": ["warn", "smart"], + "new-parens": "warn", + "no-caller": "warn", + "no-cond-assign": ["warn", "except-parens"], + "no-const-assign": "warn", + "no-control-regex": "warn", + "no-delete-var": "warn", + "no-dupe-args": "warn", + "no-dupe-keys": "warn", + "no-duplicate-case": "warn", + "no-empty-character-class": "warn", + "no-empty-pattern": "warn", + "no-eval": "warn", + "no-ex-assign": "warn", + "no-extend-native": "warn", + "no-extra-bind": "warn", + "no-extra-label": "warn", + "no-fallthrough": "warn", + "no-func-assign": "warn", + "no-implied-eval": "warn", + "no-invalid-regexp": "warn", + "no-iterator": "warn", + "no-label-var": "warn", + "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], + "no-lone-blocks": "warn", + "no-loop-func": "warn", + "no-mixed-operators": [ + "warn", + { + "groups": [ + ["&", "|", "^", "~", "<<", ">>", ">>>"], + ["==", "!=", "===", "!==", ">", ">=", "<", "<="], + ["&&", "||"], + ["in", "instanceof"] + ], + "allowSamePrecedence": false + } + ], + "no-multi-str": "warn", + "no-native-reassign": "warn", + "no-negated-in-lhs": "warn", + "no-new-func": "warn", + "no-new-object": "warn", + "no-new-symbol": "warn", + "no-new-wrappers": "warn", + "no-obj-calls": "warn", + "no-octal": "warn", + "no-octal-escape": "warn", + "no-redeclare": "warn", + "no-regex-spaces": "warn", + "no-restricted-syntax": ["warn", "WithStatement"], + "no-script-url": "warn", + "no-self-assign": "warn", + "no-self-compare": "warn", + "no-sequences": "warn", + "no-shadow-restricted-names": "warn", + "no-sparse-arrays": "warn", + "no-template-curly-in-string": "warn", + "no-this-before-super": "warn", + "no-throw-literal": "warn", + "no-restricted-globals": [ + "error", + "addEventListener", + "blur", + "close", + "closed", + "confirm", + "defaultStatus", + "defaultstatus", + "event", + "external", + "find", + "focus", + "frameElement", + "frames", + "history", + "innerHeight", + "innerWidth", + "length", + "location", + "locationbar", + "menubar", + "moveBy", + "moveTo", + "name", + "onblur", + "onerror", + "onfocus", + "onload", + "onresize", + "onunload", + "open", + "opener", + "opera", + "outerHeight", + "outerWidth", + "pageXOffset", + "pageYOffset", + "parent", + "print", + "removeEventListener", + "resizeBy", + "resizeTo", + "screen", + "screenLeft", + "screenTop", + "screenX", + "screenY", + "scroll", + "scrollbars", + "scrollBy", + "scrollTo", + "scrollX", + "scrollY", + "self", + "status", + "statusbar", + "stop", + "toolbar", + "top" + ], + "no-unexpected-multiline": "warn", + "no-unreachable": "warn", + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": true, + "allowTernary": true, + "allowTaggedTemplates": true + } + ], + "no-unused-labels": "warn", + "no-useless-computed-key": "warn", + "no-useless-concat": "warn", + "no-useless-escape": "warn", + "no-useless-rename": [ + "warn", + { + "ignoreDestructuring": false, + "ignoreImport": false, + "ignoreExport": false + } + ], + "no-with": "warn", + "no-whitespace-before-property": "warn", + "react-hooks/exhaustive-deps": "warn", + "require-yield": "warn", + "rest-spread-spacing": ["warn", "never"], + "strict": ["warn", "never"], + "unicode-bom": ["warn", "never"], + "use-isnan": "warn", + "valid-typeof": "warn", + "no-restricted-properties": [ + "error", + { + "object": "require", + "property": "ensure", + "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" + }, + { + "object": "System", + "property": "import", + "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" + } + ], + "getter-return": "warn", + "import/first": "error", + "import/no-amd": "error", + "import/no-webpack-loader-syntax": "error", + "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], + "react/jsx-no-comment-textnodes": "warn", + "react/jsx-no-duplicate-props": "warn", + "react/jsx-no-target-blank": "warn", + "react/jsx-no-undef": "error", + "react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], + "react/jsx-uses-react": "warn", + "react/jsx-uses-vars": "warn", + "react/no-danger-with-children": "warn", + "react/no-direct-mutation-state": "warn", + "react/no-is-mounted": "warn", + "react/no-typos": "error", + "react/react-in-jsx-scope": "error", + "react/require-render-return": "error", + "react/style-prop-object": "warn", + "react/jsx-no-useless-fragment": "warn", + "jsx-a11y/accessible-emoji": "warn", + "jsx-a11y/alt-text": "warn", + "jsx-a11y/anchor-has-content": "warn", + "jsx-a11y/anchor-is-valid": [ + "warn", + { "aspects": ["noHref", "invalidHref"] } + ], + "jsx-a11y/aria-activedescendant-has-tabindex": "warn", + "jsx-a11y/aria-props": "warn", + "jsx-a11y/aria-proptypes": "warn", + "jsx-a11y/aria-role": "warn", + "jsx-a11y/aria-unsupported-elements": "warn", + "jsx-a11y/heading-has-content": "warn", + "jsx-a11y/iframe-has-title": "warn", + "jsx-a11y/img-redundant-alt": "warn", + "jsx-a11y/no-access-key": "warn", + "jsx-a11y/no-distracting-elements": "warn", + "jsx-a11y/no-redundant-roles": "warn", + "jsx-a11y/role-has-required-aria-props": "warn", + "jsx-a11y/role-supports-aria-props": "warn", + "jsx-a11y/scope": "warn", + "react-hooks/rules-of-hooks": "error", + "default-case": "off", + "no-dupe-class-members": "off", + "no-undef": "off", + "@typescript-eslint/consistent-type-assertions": "warn", + "no-array-constructor": "off", + "@typescript-eslint/no-array-constructor": "warn", + "@typescript-eslint/no-namespace": "error", + "no-use-before-define": "off", + "@typescript-eslint/no-use-before-define": [ + "warn", + { + "functions": false, + "classes": false, + "variables": false, + "typedefs": false + } + ], + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { "args": "none", "ignoreRestSiblings": true } + ], + "no-useless-constructor": "off", + "@typescript-eslint/no-useless-constructor": "warn" + }, + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "jest": true, + "node": true + }, + "settings": { "react": { "version": "detect" } }, + "plugins": ["import", "jsx-a11y", "react", "react-hooks"], + "extends": ["../../../../.eslintrc"], + "ignorePatterns": ["!**/*"] +} diff --git a/apps/remix-ide-e2e/src/local-plugin/src/app/app.css b/apps/remix-ide-e2e/src/local-plugin/src/app/app.css new file mode 100644 index 0000000000..5d5777c1cb --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/app/app.css @@ -0,0 +1,128 @@ +.app { + font-family: sans-serif; + min-width: 300px; + max-width: 600px; + margin: 50px auto; +} + +.app .gutter-left { + margin-left: 9px; +} + +.app .col-span-2 { + grid-column: span 2; +} + +.app .flex { + display: flex; + align-items: center; + justify-content: center; +} + +.app header { + background-color: #143055; + color: white; + padding: 5px; + border-radius: 3px; +} + +.app main { + padding: 0 36px; +} + +.app p { + text-align: center; +} + +.app h1 { + text-align: center; + margin-left: 18px; + font-size: 24px; +} + +.app h2 { + text-align: center; + font-size: 20px; + margin: 40px 0 10px 0; +} + +.app .resources { + text-align: center; + list-style: none; + padding: 0; + display: grid; + grid-gap: 9px; + grid-template-columns: 1fr 1fr; +} + +.app .resource { + color: #0094ba; + height: 36px; + background-color: rgba(0, 0, 0, 0); + border: 1px solid rgba(0, 0, 0, 0.12); + border-radius: 4px; + padding: 3px 9px; + text-decoration: none; +} + +.app .resource:hover { + background-color: rgba(68, 138, 255, 0.04); +} + +.app pre { + padding: 9px; + border-radius: 4px; + background-color: black; + color: #eee; +} + +.app details { + border-radius: 4px; + color: #333; + background-color: rgba(0, 0, 0, 0); + border: 1px solid rgba(0, 0, 0, 0.12); + padding: 3px 9px; + margin-bottom: 9px; +} + +.app summary { + outline: none; + height: 36px; + line-height: 36px; +} + +.app .github-star-container { + margin-top: 12px; + line-height: 20px; +} + +.app .github-star-container a { + display: flex; + align-items: center; + text-decoration: none; + color: #333; +} + +.app .github-star-badge { + color: #24292e; + display: flex; + align-items: center; + font-size: 12px; + padding: 3px 10px; + border: 1px solid rgba(27, 31, 35, 0.2); + border-radius: 3px; + background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%); + margin-left: 4px; + font-weight: 600; +} + +.app .github-star-badge:hover { + background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%); + border-color: rgba(27, 31, 35, 0.35); + background-position: -0.5em; +} +.app .github-star-badge .material-icons { + height: 16px; + width: 16px; + margin-right: 4px; +} diff --git a/apps/remix-ide-e2e/src/local-plugin/src/app/app.tsx b/apps/remix-ide-e2e/src/local-plugin/src/app/app.tsx new file mode 100644 index 0000000000..60f4f024df --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/app/app.tsx @@ -0,0 +1,39 @@ +import React, { useEffect, useState } from 'react' +import { PluginClient } from '@remixproject/plugin' +import { createClient } from '@remixproject/plugin-webview' + +import './app.css' + +import { ReactComponent as Logo } from './logo.svg' + +export const App = () => { + const [remixClient, setRemixClient] = useState(null) + + useEffect(() => { + (async () => { + const client = createClient(new PluginClient()) + + await client.onload() + console.log('Local plugin loaded') + setRemixClient(client) + })() + }, []) + + const handleClick = () => { + remixClient.call('manager', 'activatePlugin', 'LearnEth') + } + + return ( +
+
+ +

Welcome to local-plugin!

+
+
+ +
+
+ ) +} + +export default App diff --git a/apps/remix-ide-e2e/src/local-plugin/src/app/logo.svg b/apps/remix-ide-e2e/src/local-plugin/src/app/logo.svg new file mode 100644 index 0000000000..8fa84ab509 --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/app/logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/apps/remix-ide-e2e/src/local-plugin/src/app/star.svg b/apps/remix-ide-e2e/src/local-plugin/src/app/star.svg new file mode 100644 index 0000000000..901053d385 --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/app/star.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/apps/remix-ide-e2e/src/local-plugin/src/assets/.gitkeep b/apps/remix-ide-e2e/src/local-plugin/src/assets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts b/apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts new file mode 100644 index 0000000000..bc0327dbeb --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +} diff --git a/apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts b/apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts new file mode 100644 index 0000000000..9ae66f8b70 --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts @@ -0,0 +1,6 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// When building for production, this file is replaced with `environment.prod.ts`. + +export const environment = { + production: false +} diff --git a/apps/remix-ide-e2e/src/local-plugin/src/favicon.ico b/apps/remix-ide-e2e/src/local-plugin/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..317ebcb2336e0833a22dddf0ab287849f26fda57 GIT binary patch literal 15086 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 + + + + LocalPlugin + + + + + + +
+ + diff --git a/apps/remix-ide-e2e/src/local-plugin/src/main.tsx b/apps/remix-ide-e2e/src/local-plugin/src/main.tsx new file mode 100644 index 0000000000..ac848b3e6f --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/main.tsx @@ -0,0 +1,11 @@ +import React from 'react' +import ReactDOM from 'react-dom' + +import App from './app/app' + +ReactDOM.render( + + + , + document.getElementById('root') +) diff --git a/apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts b/apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts new file mode 100644 index 0000000000..53c485753e --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts @@ -0,0 +1,7 @@ +/** + * Polyfill stable language features. These imports will be optimized by `@babel/preset-env`. + * + * See: https://github.com/zloirock/core-js#babel + */ +import 'core-js/stable' +import 'regenerator-runtime/runtime' diff --git a/apps/remix-ide-e2e/src/local-plugin/src/styles.css b/apps/remix-ide-e2e/src/local-plugin/src/styles.css new file mode 100644 index 0000000000..90d4ee0072 --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/src/styles.css @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json b/apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json new file mode 100644 index 0000000000..66eb193383 --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../../dist/out-tsc", + "types": ["node"] + }, + "files": [ + "../../../../node_modules/@nrwl/react/typings/cssmodule.d.ts", + "../../../../node_modules/@nrwl/react/typings/image.d.ts" + ], + "exclude": ["**/*.spec.ts", "**/*.spec.tsx"], + "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] +} diff --git a/apps/remix-ide-e2e/src/local-plugin/tsconfig.json b/apps/remix-ide-e2e/src/local-plugin/tsconfig.json new file mode 100644 index 0000000000..6b1b431876 --- /dev/null +++ b/apps/remix-ide-e2e/src/local-plugin/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "jsx": "react", + "allowJs": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/nx.json b/nx.json index b1c4b6de08..fafda0d662 100644 --- a/nx.json +++ b/nx.json @@ -123,6 +123,9 @@ }, "solidity-compiler": { "tags": [] + }, + "remix-ide-e2e-src-local-plugin": { + "tags": [] } -} + } } diff --git a/workspace.json b/workspace.json index 5a885656d1..3d5532310b 100644 --- a/workspace.json +++ b/workspace.json @@ -945,6 +945,80 @@ } } } + }, + "remix-ide-e2e-src-local-plugin": { + "root": "apps/remix-ide-e2e/src/local-plugin", + "sourceRoot": "apps/remix-ide-e2e/src/local-plugin/src", + "projectType": "application", + "schematics": {}, + "architect": { + "build": { + "builder": "@nrwl/web:build", + "options": { + "outputPath": "dist/apps/remix-ide-e2e/src/local-plugin", + "index": "apps/remix-ide-e2e/src/local-plugin/src/index.html", + "main": "apps/remix-ide-e2e/src/local-plugin/src/main.tsx", + "polyfills": "apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts", + "tsConfig": "apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json", + "assets": [ + "apps/remix-ide-e2e/src/local-plugin/src/favicon.ico", + "apps/remix-ide-e2e/src/local-plugin/src/assets" + ], + "styles": ["apps/remix-ide-e2e/src/local-plugin/src/styles.css"], + "scripts": [], + "webpackConfig": "@nrwl/react/plugins/webpack" + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts", + "with": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + } + ] + } + } + }, + "serve": { + "builder": "@nrwl/web:dev-server", + "options": { + "buildTarget": "remix-ide-e2e-src-local-plugin:build", + "port": 2020 + }, + "configurations": { + "production": { + "buildTarget": "remix-ide-e2e-src-local-plugin:build:production" + } + } + }, + "lint": { + "builder": "@nrwl/linter:lint", + "options": { + "linter": "eslint", + "tsConfig": [ + "apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json" + ], + "exclude": [ + "**/node_modules/**", + "!apps/remix-ide-e2e/src/local-plugin/**/*" + ] + } + } + } } }, "cli": { From 6f60ef608c9ed4f2cc6854aa288f52c947b15777 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 Sep 2021 16:41:28 +0100 Subject: [PATCH 2/4] Added local plugin test --- apps/remix-ide-e2e/nightwatch.ts | 2 +- .../src/tests/pluginManager.spec.ts | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/nightwatch.ts b/apps/remix-ide-e2e/nightwatch.ts index 1473cbaf2b..cab596db23 100644 --- a/apps/remix-ide-e2e/nightwatch.ts +++ b/apps/remix-ide-e2e/nightwatch.ts @@ -30,7 +30,7 @@ module.exports = { javascriptEnabled: true, acceptSslCerts: true }, - exclude: ['dist/apps/remix-ide-e2e/src/tests/runAndDeploy.js'] + exclude: ['dist/apps/remix-ide-e2e/src/tests/runAndDeploy.js', 'dist/apps/remix-ide-e2e/src/tests/pluginManager.spec.ts'] }, chrome: { diff --git a/apps/remix-ide-e2e/src/tests/pluginManager.spec.ts b/apps/remix-ide-e2e/src/tests/pluginManager.spec.ts index 6f6758795c..69e6684b3b 100644 --- a/apps/remix-ide-e2e/src/tests/pluginManager.spec.ts +++ b/apps/remix-ide-e2e/src/tests/pluginManager.spec.ts @@ -12,6 +12,13 @@ const testData = { pluginUrl: 'https://zokrates.github.io/zokrates-remix-plugin/' } +const localPluginData = { + pluginName: 'localPlugin', + pluginDisplayName: 'Local Plugin', + pluginCanActivate: 'LearnEth', + pluginUrl: 'http://localhost:2020' +} + module.exports = { before: function (browser: NightwatchBrowser, done: VoidFunction) { init(browser, done, 'http://127.0.0.1:8080', false) @@ -147,6 +154,33 @@ module.exports = { .assert.containsText('*[data-shared="tooltipPopup"]', 'Cannot create Plugin : This name has already been used') }, + 'Local plugin should activate LearnEth plugin': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="pluginManagerComponentPluginManager"]') + .click('*[data-id="pluginManagerComponentPluginSearchButton"]') + .waitForElementVisible('*[data-id="pluginManagerLocalPluginModalDialogModalDialogContainer-react"]') + .click('*[data-id="pluginManagerLocalPluginModalDialogModalDialogModalBody-react"]') + .waitForElementVisible('*[data-id="localPluginName"]') + .clearValue('*[data-id="localPluginName"]').setValue('*[data-id="localPluginName"]', localPluginData.pluginName) + .clearValue('*[data-id="localPluginDisplayName"]').setValue('*[data-id="localPluginDisplayName"]', localPluginData.pluginDisplayName) + .clearValue('*[data-id="localPluginCanActivate"]').setValue('*[data-id="localPluginCanActivate"]', localPluginData.pluginCanActivate) + .clearValue('*[data-id="localPluginUrl"]').setValue('*[data-id="localPluginUrl"]', localPluginData.pluginUrl) + .click('*[data-id="localPluginRadioButtoniframe"]') + .click('*[data-id="localPluginRadioButtonsidePanel"]') + .click('*[data-id="pluginManagerLocalPluginModalDialogModalDialogModalFooter-react"]') + .click('*[data-id="pluginManagerLocalPluginModalDialog-modal-footer-ok-react') + .waitForElementVisible('[data-id="verticalIconsKindlocalPlugin"]') + .click('[data-id="verticalIconsKindlocalPlugin"]') + .waitForElementNotPresent('[data-id="verticalIconsKindLearnEth"]') + .pause(2000) + // @ts-ignore + .frame('plugin-localPlugin') + .useXpath().click("//button[text()='Activate Learneth']") + .pause(2000) + .frameParent() + .useCss().waitForElementPresent('[data-id="verticalIconsKindLearnEth"]') + }, + 'Should load back installed plugins after reload': function (browser: NightwatchBrowser) { browser.waitForElementVisible('*[data-id="pluginManagerComponentPluginManager"]') .getInstalledPlugins((plugins) => { From 99c8373e8c660753fb6c0bfeae03635b9a5b2cc3 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 Sep 2021 16:51:19 +0100 Subject: [PATCH 3/4] Update circle CI config --- .circleci/config.yml | 40 +++++++++++++++++++ .../ci/browser_tests_plugin_manager.sh | 21 ++++++++++ 2 files changed, 61 insertions(+) create mode 100755 apps/remix-ide/ci/browser_tests_plugin_manager.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 9d0791cd7e..fd522c92c3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -220,6 +220,40 @@ jobs: - store_artifacts: path: ./reports/screenshots + remix-ide-plugin-manager: + docker: + # specify the version you desire here + - image: circleci/node:10.18.0-browsers + + # Specify service dependencies here if necessary + # CircleCI maintains a library of pre-built images + # documented at https://circleci.com/docs/2.0/circleci-images/ + resource_class: xlarge + # - image: circleci/mongo:3.4.4 + environment: + - COMMIT_AUTHOR_EMAIL: "yann@ethereum.org" + - COMMIT_AUTHOR: "Circle CI" + - FILES_TO_PACKAGE: "dist/apps/remix-ide/assets dist/apps/remix-ide/index.html dist/apps/remix-ide/main.js dist/apps/remix-ide/polyfills.js dist/apps/remix-ide/runtime.js dist/apps/remix-ide/vendor.js dist/apps/remix-ide/favicon.ico" + working_directory: ~/remix-project + + steps: + - checkout + - run: npm install + - run: npx nx build remix-ide --with-deps + - run: npx nx build remix-ide-e2e-src-local-plugin + - run: + name: Download Selenium + command: ./node_modules/.bin/selenium-standalone install --drivers.chrome.version=2.39 --drivers.chrome.baseURL=https://chromedriver.storage.googleapis.com + - run: + name: Start Selenium + command: ./node_modules/.bin/selenium-standalone start --drivers.chrome.version=2.39 --drivers.chrome.baseURL=https://chromedriver.storage.googleapis.com + background: true + - run: ./apps/remix-ide/ci/browser_tests_plugin_manager.sh + - store_test_results: + path: ./reports/tests + - store_artifacts: + path: ./reports/screenshots + deploy-remix-live: docker: @@ -355,6 +389,9 @@ workflows: - remix-ide-run-deploy: requires: - lint + - remix-ide-plugin-manager: + requires: + - lint - publish: requires: - lint @@ -365,6 +402,7 @@ workflows: - remix-ide-firefox-1 - remix-ide-firefox-2 - remix-ide-run-deploy + - remix-ide-plugin-manager filters: branches: only: remix_live @@ -375,6 +413,7 @@ workflows: - remix-ide-firefox-1 - remix-ide-firefox-2 - remix-ide-run-deploy + - remix-ide-plugin-manager filters: branches: only: master @@ -385,6 +424,7 @@ workflows: - remix-ide-firefox-1 - remix-ide-firefox-2 - remix-ide-run-deploy + - remix-ide-plugin-manager filters: branches: only: remix_beta diff --git a/apps/remix-ide/ci/browser_tests_plugin_manager.sh b/apps/remix-ide/ci/browser_tests_plugin_manager.sh new file mode 100755 index 0000000000..4f856292c6 --- /dev/null +++ b/apps/remix-ide/ci/browser_tests_plugin_manager.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +set -e + +BUILD_ID=${CIRCLE_BUILD_NUM:-${TRAVIS_JOB_NUMBER}} +echo "$BUILD_ID" +TEST_EXITCODE=0 + +npm run serve & +npx nx serve remix-ide-e2e-src-local-plugin & + +sleep 5 + +npm run build:e2e +npm run nightwatch_local_pluginManager || TEST_EXITCODE=1 + +echo "$TEST_EXITCODE" +if [ "$TEST_EXITCODE" -eq 1 ] +then + exit 1 +fi From 8143f0f5400729768668e9ded4b7be93a427c109 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Thu, 16 Sep 2021 02:44:07 +0100 Subject: [PATCH 4/4] Fixed failing tests --- .../src/tests/{pluginManager.spec.ts => pluginManager.ts} | 7 +++++-- package.json | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) rename apps/remix-ide-e2e/src/tests/{pluginManager.spec.ts => pluginManager.ts} (97%) diff --git a/apps/remix-ide-e2e/src/tests/pluginManager.spec.ts b/apps/remix-ide-e2e/src/tests/pluginManager.ts similarity index 97% rename from apps/remix-ide-e2e/src/tests/pluginManager.spec.ts rename to apps/remix-ide-e2e/src/tests/pluginManager.ts index 69e6684b3b..f1c35100b5 100644 --- a/apps/remix-ide-e2e/src/tests/pluginManager.spec.ts +++ b/apps/remix-ide-e2e/src/tests/pluginManager.ts @@ -182,7 +182,10 @@ module.exports = { }, 'Should load back installed plugins after reload': function (browser: NightwatchBrowser) { - browser.waitForElementVisible('*[data-id="pluginManagerComponentPluginManager"]') + browser + .waitForElementVisible('*[data-id="remixIdeSidePanel"]') + .click('*[plugin="pluginManager"]') + .waitForElementVisible('*[data-id="pluginManagerComponentPluginManager"]') .getInstalledPlugins((plugins) => { browser.refresh() .waitForElementVisible('*[data-id="remixIdeSidePanel"]') @@ -190,7 +193,7 @@ module.exports = { .perform((done) => { // const filtered = plugins.filter(plugin => plugin !== 'testremixIde') // remove this when localplugin bug is resolved plugins.forEach(plugin => { - if (plugin !== testData.pluginName && plugin !== 'testremixIde') { + if ((plugin !== testData.pluginName) && plugin !== localPluginData.pluginName) { browser.waitForElementVisible(`[plugin="${plugin}"`) } }) diff --git a/package.json b/package.json index f3b6f2bed6..445c1b73cf 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "nightwatch_local_gist": "npm run build:e2e && nightwatch --config dist/apps/remix-ide-e2e/nightwatch.js dist/apps/remix-ide-e2e/src/tests/gist.spec.js --env=chrome", "nightwatch_local_workspace": "npm run build:e2e && nightwatch --config dist/apps/remix-ide-e2e/nightwatch.js dist/apps/remix-ide-e2e/src/tests/workspace.test.js --env=chrome", "nightwatch_local_defaultLayout": "npm run build:e2e && nightwatch --config dist/apps/remix-ide-e2e/nightwatch.js dist/apps/remix-ide-e2e/src/tests/defaultLayout.test.js --env=chrome", - "nightwatch_local_pluginManager": "npm run build:e2e && nightwatch --config dist/apps/remix-ide-e2e/nightwatch.js dist/apps/remix-ide-e2e/src/tests/pluginManager.spec.js --env=chrome", + "nightwatch_local_pluginManager": "npm run build:e2e && nightwatch --config dist/apps/remix-ide-e2e/nightwatch.js dist/apps/remix-ide-e2e/src/tests/pluginManager.js --env=chrome", "nightwatch_local_publishContract": "npm run build:e2e && nightwatch --config dist/apps/remix-ide-e2e/nightwatch.js dist/apps/remix-ide-e2e/src/tests/publishContract.test.js --env=chrome", "nightwatch_local_generalSettings": "npm run build:e2e && nightwatch --config dist/apps/remix-ide-e2e/nightwatch.js dist/apps/remix-ide-e2e/src/tests/generalSettings.test.js --env=chrome", "nightwatch_local_fileExplorer": "npm run build:e2e && nightwatch --config dist/apps/remix-ide-e2e/nightwatch.js dist/apps/remix-ide-e2e/src/tests/fileExplorer.test.js --env=chrome",