From fe802f29c09401255d68d24f865b8eba83016a4c Mon Sep 17 00:00:00 2001 From: Eugenio Romano Date: Mon, 2 Dec 2019 14:59:16 +0000 Subject: [PATCH] Implement smart runner in ADF (#5300) --- .travis.yml | 1 + e2e/protractor/fail-fast.js | 80 ------------------ package-lock.json | 163 +++++++++++++++++++++--------------- package.json | 1 + protractor.conf.ts | 9 +- protractor.excludes.json | 3 + 6 files changed, 106 insertions(+), 151 deletions(-) delete mode 100644 e2e/protractor/fail-fast.js create mode 100644 protractor.excludes.json diff --git a/.travis.yml b/.travis.yml index 584c057e00..7728a027fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,6 +46,7 @@ addons: before_script: - "sudo chown root /opt/google/chrome/chrome-sandbox" - "sudo chmod 4755 /opt/google/chrome/chrome-sandbox" + - export GIT_HASH=`git rev-parse HEAD` before_install: - export CHROME_BIN=chromium-browser diff --git a/e2e/protractor/fail-fast.js b/e2e/protractor/fail-fast.js deleted file mode 100644 index 02ec887c00..0000000000 --- a/e2e/protractor/fail-fast.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.init = init; -exports.getSpecReferences = getSpecReferences; -exports.disableSpecs = disableSpecs; - -var wrap = require('lodash.wrap'); - -var refs = undefined; - -function init() { - refs = getSpecReferences(); - - return { - specDone: function specDone(result) { - if (result.status === 'failed') { - disableSpecs(refs); - } - } - }; -} - -/** - * Gather references to all jasmine specs and suites, through any (currently hacky) means possible. - * - * @return {Object} An object with `specs` and `suites` properties, arrays of respective types. - */ - -function getSpecReferences() { - var specs = []; - var suites = []; - - // Use specFilter to gather references to all specs. - jasmine.getEnv().specFilter = function (spec) { - specs.push(spec); - return true; - }; - - // Wrap jasmine's describe function to gather references to all suites. - jasmine.getEnv().describe = wrap(jasmine.getEnv().describe, function (describe) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var suite = describe.apply(null, args); - suites.push(suite); - return suite; - }); - - return { - specs: specs, - suites: suites - }; -} - -/** - * Hacky workaround to facilitate "fail fast". Disable all specs (basically `xit`), then - * remove references to all before/after functions, else they'll still run. Disabling the - * suites themselves does not appear to have an effect. - */ - -function disableSpecs() { - if (!refs) { - throw new Error('jasmine-fail-fast: Must call init() before calling disableSpecs()!'); - } - - refs.specs.forEach(function (spec) { - return spec.disable(); - }); - - refs.suites.forEach(function (suite) { - suite.beforeFns = []; - suite.afterFns = []; - suite.beforeAllFns = []; - suite.afterAllFns = []; - }); -} diff --git a/package-lock.json b/package-lock.json index c81a707811..814456cc03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,118 +1,88 @@ { "name": "alfresco-ng2-components", - "version": "3.5.0", + "version": "3.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@alfresco/adf-cli": { - "version": "3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce", - "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce.tgz", - "integrity": "sha512-RPvL+37PPf3ZArB7XYQ/VhbCKuw+hp+t5NDbuxe56RENsB2RH+T0V3wmWhFsKsJMLcYvW0hf6kI2kUauAqHYDA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-3.6.0.tgz", + "integrity": "sha512-HewDSVxz+BGqSTlooOj2jgnX5g5lNSXwsI8K+eqr55s12ku7AeX0JRFxrvVz20v/2efGMnwHHXGfF8tbdCChnA==", "requires": { "@angular-devkit/core": "^7.2.15", - "commander": "^2.15.1", + "commander": "^4.0.0", "ejs": "^2.6.1", "license-checker": "^25.0.1", "npm-registry-fetch": "^3.9.0", "rxjs": ">=6.2.2", "shelljs": "^0.8.3", "spdx-license-list": "^5.0.0" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } } }, "@alfresco/adf-content-services": { - "version": "3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce", - "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce.tgz", - "integrity": "sha512-3q/BkfA1bdpmDpoO2jknqECauGuPMNkEtlho7M0pm0a6xD6vxAoTgpZcDAhF+aJ2HkxfATwS8JxCf5/UEJn9ZA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-3.6.0.tgz", + "integrity": "sha512-npEPJ4eAIalIWd4lmTltYiS3XyLdagzfqDUfC9oHwFz8QfX7y8mUtaSDBVYqTGRm3lZ7vElczfsbuKlknLaxog==", "requires": { "tslib": "^1.9.0" } }, "@alfresco/adf-core": { - "version": "3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce", - "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce.tgz", - "integrity": "sha512-WqN+mBPAY2XafQhkIS1/iN82zHXRyHP5Rw8YaGgiOfigOsIMuS8+9NgfzmoW12AhQg6hjWdJumAS8JHK9Ex5+Q==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-3.6.0.tgz", + "integrity": "sha512-WlYvxuBpJ6sug5iPfJprdWDZcDtJ7Y6/SFzEchEhan30O4Efb/MgWY+3s1nCsIwX0eYhyv8pj9NHQjHNjPotLw==", "requires": { "tslib": "^1.9.0" } }, "@alfresco/adf-extensions": { - "version": "3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce", - "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce.tgz", - "integrity": "sha512-dKGzStFerojXpmK+bgxbZjlz7RO689xI++MDPIAolTbHqpQNfm9xhQSobJXt2nbT3hoiQLmaVTb/fJDDKF292Q==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-3.6.0.tgz", + "integrity": "sha512-/B2+TKrjQswXsTkkuU7qgK9Ud8Wn02bZRgRuKZiPwUxIo8s4wSMZpgWkfrIw58WDNDiL/MDgDeNiCrpxxrzdow==", "requires": { "tslib": "^1.9.0" } }, "@alfresco/adf-insights": { - "version": "3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce", - "resolved": "https://registry.npmjs.org/@alfresco/adf-insights/-/adf-insights-3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce.tgz", - "integrity": "sha512-Ndpt0s9d0zZTEtgHUZDG7oD+VwdXmzf4DxFNeX+HsN15NRZruSffal3li56/jC0iB0u/CAeikY1DdBT1J/Lmgg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-insights/-/adf-insights-3.6.0.tgz", + "integrity": "sha512-MnrunA1KpM+B5NBRhY1yxcm/51l331JhEn5+5F3UEw4X+MjYLpAdgwTmYLdmO5LHkG76NjLiLDLlzJxMV7ITjA==", "requires": { "tslib": "^1.9.0" } }, "@alfresco/adf-process-services": { - "version": "3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce", - "resolved": "https://registry.npmjs.org/@alfresco/adf-process-services/-/adf-process-services-3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce.tgz", - "integrity": "sha512-Tr4Da5vK1K+G/sLuvd58HQ1Zp+KJaEfj8l04YedEi1AmGOtviQ2RUmgYSrYK+iyta2GjKWyF7EDMbIV1UFiiXg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-process-services/-/adf-process-services-3.6.0.tgz", + "integrity": "sha512-Q57YvCpWlLmcKd4Mjrd9oRqSEImO/lDDDMxT9JpIueGq9xgsYOApN6C6fKxzy/+VFYiFEuBNCICmNkK51wUz/A==", "requires": { "tslib": "^1.9.0" } }, "@alfresco/adf-process-services-cloud": { - "version": "3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce", - "resolved": "https://registry.npmjs.org/@alfresco/adf-process-services-cloud/-/adf-process-services-cloud-3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce.tgz", - "integrity": "sha512-hfVVtb+L/07ARS3ymcyy9sAUrlUdtzUhwW2IwmavISidAKE+wXPCrJYGCxGHbuMSea9RReagkzHrpeuxOIJSSw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-process-services-cloud/-/adf-process-services-cloud-3.6.0.tgz", + "integrity": "sha512-AZJMrWxH0ldT5QBTl/5eObQX94j7ydJvaWxrXs0p9WDZdzl5A7VTds7zYueveQV2lDSO3cBo6wq2/lgrhZPnJw==", "requires": { "tslib": "^1.9.0" } }, "@alfresco/adf-testing": { - "version": "3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce", - "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-3.6.0-70fd3a1c602128ed45d195c424d45b366b8b50ce.tgz", - "integrity": "sha512-vVWtQRo5LcvxqDV12XFH325PnZQED9xywK040J263wkqjd0o/2Dwgd1u+sQNazIv+anC8VSnxtCzW5eVAgJ/Ww==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-3.6.0.tgz", + "integrity": "sha512-9m/EZCi2sQbxbl1HAmgW8ZKfaLPLOhhHOaklToWcJLmyWeREmln10Y5jemUvU8FfBsQ0C+5lTZ35J/Q46XKFpA==", "requires": { "tslib": "^1.9.0" } }, "@alfresco/js-api": { - "version": "3.6.0-5085d994f7aa1713c03ecdbc320df32423e4b4f9", - "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-3.6.0-5085d994f7aa1713c03ecdbc320df32423e4b4f9.tgz", - "integrity": "sha512-477wYs1Z1H5c3LystqIw7R9H4AgpP2gumEw6uAWUtUeA2NDWu4DbTeIssX+V3WVj+odwIKy+OVYfmAjXi4sF5g==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-3.6.0.tgz", + "integrity": "sha512-aXc4twC3jDTZqyyhrlQX5DvyuSAnsfmZ7LT03itm/II9EqFEHcpXGWzyOA2VyZSyfuYz5e13KuM6v1VqBZxCwQ==", "requires": { - "@alfresco/adf-cli": "^3.6.0-d659073389847ab312623736ec171791c10f6534", "event-emitter": "^0.3.5", "minimatch": "3.0.4", "superagent": "^3.8.2" - }, - "dependencies": { - "@alfresco/adf-cli": { - "version": "3.6.0-f731988ca6c6e691f24647dd3a26ce01bfeffc23", - "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-3.6.0-f731988ca6c6e691f24647dd3a26ce01bfeffc23.tgz", - "integrity": "sha512-IXTLRXyBh1FL5zhzZucUWJ8FS1NMCigAm+wH/S0cZLewAlXoUkrqUUGtCoQkH4/b1Et5nEbWbSGUvkqB6VUxfg==", - "requires": { - "@angular-devkit/core": "^7.2.15", - "commander": "^2.15.1", - "ejs": "^2.6.1", - "license-checker": "^25.0.1", - "npm-registry-fetch": "^3.9.0", - "rxjs": ">=6.2.2", - "shelljs": "^0.8.3", - "spdx-license-list": "^5.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } } }, "@angular-devkit/architect": { @@ -4176,8 +4146,7 @@ "commander": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.0.tgz", - "integrity": "sha512-SEa2abMBTZuEjLVYpNrAFoRgxPwG4rXP3+SGY6CM/HZGeDzIA7Pzp+7H3AHDukKEpyy2SoSGGPShKqqfH9T9AQ==", - "dev": true + "integrity": "sha512-SEa2abMBTZuEjLVYpNrAFoRgxPwG4rXP3+SGY6CM/HZGeDzIA7Pzp+7H3AHDukKEpyy2SoSGGPShKqqfH9T9AQ==" }, "comment-json": { "version": "1.1.3", @@ -5755,12 +5724,12 @@ } }, "es5-ext": { - "version": "0.10.52", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.52.tgz", - "integrity": "sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag==", + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "requires": { "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.2", + "es6-symbol": "~3.1.3", "next-tick": "~1.0.0" } }, @@ -6108,9 +6077,9 @@ } }, "ext": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.1.2.tgz", - "integrity": "sha512-/KLjJdTNyDepCihrk4HQt57nAE1IRCEo5jUt+WgWGCr1oARhibDvmI2DMcSNWood1T9AUWwq+jaV1wvRqaXfnA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", "requires": { "type": "^2.0.0" }, @@ -6379,6 +6348,23 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true + }, + "filenamify": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.1.0.tgz", + "integrity": "sha512-KQV/uJDI9VQgN7sHH1Zbk6+42cD6mnQ2HONzkXUfPJ+K2FC8GZ1dpewbbHw0Sz8Tf5k3EVdHVayM4DoAwWlmtg==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -13440,6 +13426,29 @@ } } }, + "protractor-smartrunner": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/protractor-smartrunner/-/protractor-smartrunner-0.1.1.tgz", + "integrity": "sha512-t5L6AM2mRnpOEkg3Ib0C5pLGgWu2rOzjutF/UAEevBgwwil5M1m/E6bv/uUn+kAyImJJCCI000ssrz7JcVP/dw==", + "dev": true, + "requires": { + "filenamify": "4.1.0", + "fs-extra": "8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -16355,6 +16364,15 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "style-loader": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", @@ -17414,6 +17432,15 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", diff --git a/package.json b/package.json index f0234370e0..5f7c742400 100644 --- a/package.json +++ b/package.json @@ -184,6 +184,7 @@ "protractor-browser-logs": "1.0.456", "protractor-html-reporter-2": "1.0.4", "protractor-retry": "^1.2.9", + "protractor-smartrunner": "^0.1.1", "puppeteer": "1.17.0", "raw-loader": "0.5.1", "remark": "^9.0.0", diff --git a/protractor.conf.ts b/protractor.conf.ts index e5693f7471..b388085185 100644 --- a/protractor.conf.ts +++ b/protractor.conf.ts @@ -5,13 +5,14 @@ const tsConfig = require('./e2e/tsconfig.e2e.json'); const AlfrescoApi = require('@alfresco/js-api').AlfrescoApiCompatibility; const TestConfig = require('./e2e/test.config'); const RESOURCES = require('./e2e/util/resources'); +const SmartRunner = require('protractor-smartrunner'); +const resolve = require('path').resolve; require('ts-node').register({ project: './lib/testing/tsconfig.lib.json' }); const ACTIVITI_CLOUD_APPS = require('./lib/testing').ACTIVITI_CLOUD_APPS; -const failFast = require('./e2e/protractor/fail-fast'); const { beforeAllRewrite, afterAllRewrite, beforeEachAllRewrite, afterEachAllRewrite } = require('./e2e/protractor/override-jasmine'); const { uploadScreenshot, saveReport, cleanReportFolder } = require('./e2e/protractor/save-remote'); const argv = require('yargs').argv; @@ -124,8 +125,10 @@ exports.config = { jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 120000, - print: function () { - } + print: () => {}, + ...SmartRunner.withOptionalExclusions( + resolve(__dirname, 'protractor.excludes.json') + ) }, /** diff --git a/protractor.excludes.json b/protractor.excludes.json new file mode 100644 index 0000000000..e665aa50d0 --- /dev/null +++ b/protractor.excludes.json @@ -0,0 +1,3 @@ +{ + "C260249" : "REPO-4772 ACS 6.2" +}