diff --git a/e2e/package-lock.json b/e2e/package-lock.json index bc2c49b589..09156627a4 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -2290,6 +2290,18 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, "arraybuffer.slice": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", @@ -4042,22 +4054,22 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, "dependencies": { "has-symbols": { @@ -4068,6 +4080,41 @@ } } }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "dev": true, + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -5796,6 +5843,12 @@ "kind-of": "^3.0.2" } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5818,9 +5871,9 @@ "dev": true }, "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", "dev": true }, "is-ci": { @@ -5915,6 +5968,12 @@ "is-extglob": "^2.1.1" } }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -5948,20 +6007,40 @@ "dev": true }, "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", "dev": true, "requires": { - "has": "^1.0.3" + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + } } }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -6132,6 +6211,22 @@ "istanbul-lib-report": "^3.0.0" } }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, "jasmine-core": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz", @@ -9128,37 +9223,44 @@ } }, "mocha": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz", - "integrity": "sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.0.1.tgz", + "integrity": "sha512-vefaXfdYI8+Yo8nPZQQi0QO2o+5q9UIMX1jZ1XMmK3+4+CQjc7+B0hPdUeglXiTlr8IHMVRo63IhO9Mzt6fxOg==", "dev": true, "requires": { - "ansi-colors": "3.2.3", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.3.0", + "chokidar": "3.3.1", "debug": "3.2.6", - "diff": "3.5.0", + "diff": "4.0.2", "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", + "find-up": "4.1.0", + "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.13.1", "log-symbols": "3.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.3", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", + "ms": "2.1.2", "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", + "promise.allsettled": "1.0.2", + "serialize-javascript": "3.0.0", + "strip-json-comments": "3.0.1", + "supports-color": "7.1.0", + "which": "2.0.2", "wide-align": "1.1.3", + "workerpool": "6.0.0", "yargs": "13.3.2", "yargs-parser": "13.1.2", "yargs-unparser": "1.6.0" }, "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", @@ -9185,19 +9287,19 @@ } }, "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.1", + "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" + "readdirp": "~3.3.0" } }, "debug": { @@ -9209,6 +9311,12 @@ "ms": "^2.1.1" } }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -9219,30 +9327,51 @@ } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -9258,25 +9387,19 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "minimist": "^1.2.5" + "p-locate": "^4.1.0" } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "normalize-path": { @@ -9285,22 +9408,43 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", "dev": true, "requires": { - "picomatch": "^2.0.4" + "picomatch": "^2.0.7" } }, + "serialize-javascript": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.0.0.tgz", + "integrity": "sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==", + "dev": true + }, "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "to-regex-range": { @@ -9311,6 +9455,15 @@ "requires": { "is-number": "^7.0.0" } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -9451,24 +9604,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -9720,16 +9855,6 @@ "object-keys": "^1.0.11" } }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -10144,6 +10269,19 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, "prompts": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", @@ -11566,24 +11704,24 @@ "strip-ansi": "^4.0.0" } }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "dev": true, "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5" } }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", "dev": true, "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -11635,9 +11773,9 @@ } }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, "supports-color": { @@ -12672,6 +12810,12 @@ "errno": "~0.1.7" } }, + "workerpool": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", + "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "dev": true + }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", diff --git a/e2e/package.json b/e2e/package.json index 42817cc082..b02048d798 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -27,7 +27,7 @@ "karma-webpack": "^4.0.2", "link-parent-bin": "~1.0.0", "load-grunt-tasks": "~5.1.0", - "mocha": "~7.1.1", + "mocha": "^8.0.1", "mutation-testing-metrics": "~1.3.0", "rxjs": "~6.5.3", "semver": "~6.3.0", diff --git a/e2e/test/mocha-mocha/.mocharc.jsonc b/e2e/test/mocha-mocha/.mocharc.jsonc new file mode 100644 index 0000000000..3c2e5a6a9d --- /dev/null +++ b/e2e/test/mocha-mocha/.mocharc.jsonc @@ -0,0 +1,4 @@ +{ + "require": "./test/helpers/testSetup.js", + "spec": ["test/unit/*.js"] +} \ No newline at end of file diff --git a/e2e/test/mocha-mocha/stryker.conf.js b/e2e/test/mocha-mocha/stryker.conf.js index 6ccefb32e2..474169a2fe 100644 --- a/e2e/test/mocha-mocha/stryker.conf.js +++ b/e2e/test/mocha-mocha/stryker.conf.js @@ -5,8 +5,5 @@ module.exports = function (config) { testRunner: 'mocha', reporters: ['clear-text', 'html', 'event-recorder'], maxConcurrentTestRunners: 2, - mochaOptions: { - spec: ['test/*.js', 'helpers/*.js'] - }, }); }; diff --git a/e2e/test/mocha-mocha/test/helpers/testSetup.js b/e2e/test/mocha-mocha/test/helpers/testSetup.js new file mode 100644 index 0000000000..993b68e6fc --- /dev/null +++ b/e2e/test/mocha-mocha/test/helpers/testSetup.js @@ -0,0 +1,5 @@ +exports.mochaHooks = { + beforeAll() { + global.expect = require('chai').expect; + } +} diff --git a/e2e/test/mocha-mocha/test/AddSpec.js b/e2e/test/mocha-mocha/test/unit/AddSpec.js similarity index 93% rename from e2e/test/mocha-mocha/test/AddSpec.js rename to e2e/test/mocha-mocha/test/unit/AddSpec.js index c2235cf5cd..d37ba16e88 100644 --- a/e2e/test/mocha-mocha/test/AddSpec.js +++ b/e2e/test/mocha-mocha/test/unit/AddSpec.js @@ -1,5 +1,4 @@ -var expect = require('chai').expect; -var addModule = require('../src/Add'); +var addModule = require('../../src/Add'); var add = addModule.add; var addOne = addModule.addOne; var isNegativeNumber = addModule.isNegativeNumber; diff --git a/e2e/test/mocha-mocha/test/CircleSpec.js b/e2e/test/mocha-mocha/test/unit/CircleSpec.js similarity index 81% rename from e2e/test/mocha-mocha/test/CircleSpec.js rename to e2e/test/mocha-mocha/test/unit/CircleSpec.js index 53ddae6f67..065c82220b 100644 --- a/e2e/test/mocha-mocha/test/CircleSpec.js +++ b/e2e/test/mocha-mocha/test/unit/CircleSpec.js @@ -1,5 +1,4 @@ -var expect = require('chai').expect; -var circleModule = require('../src/Circle'); +var circleModule = require('../../src/Circle'); var getCircumference = circleModule.getCircumference; describe('Circle', function() { diff --git a/package.json b/package.json index c611586111..32cff4a653 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "json-schema-to-typescript": "~9.1.0", "lerna": "^3.10.7", "link-parent-bin": "~1.0.0", - "mocha": "^6.1.2", + "mocha": "^8.0.1", "nyc": "^15.0.0", "prettier": "2.0.5", "rimraf": "^3.0.0", diff --git a/packages/mocha-runner/package.json b/packages/mocha-runner/package.json index 1d85c4e09a..c04d2d864f 100644 --- a/packages/mocha-runner/package.json +++ b/packages/mocha-runner/package.json @@ -50,6 +50,6 @@ }, "peerDependencies": { "@stryker-mutator/core": "^3.0.0", - "mocha": ">= 2.3.3 < 8" + "mocha": ">= 2.3.3 < 9" } } diff --git a/packages/mocha-runner/src/LibWrapper.ts b/packages/mocha-runner/src/LibWrapper.ts index 0090999aab..6ea0ef1b87 100644 --- a/packages/mocha-runner/src/LibWrapper.ts +++ b/packages/mocha-runner/src/LibWrapper.ts @@ -5,6 +5,8 @@ import { MochaOptions } from '../src-generated/mocha-runner-options'; let loadOptions: undefined | ((argv?: string[] | string) => { [key: string]: any } | undefined); let handleFiles: undefined | ((options: MochaOptions) => string[]); +let handleRequires: undefined | ((requires?: string[]) => Promise); +let loadRootHooks: undefined | ((rootHooks: any) => Promise); try { /* @@ -19,7 +21,11 @@ try { try { // https://github.com/mochajs/mocha/blob/master/lib/cli/run-helpers.js#L132 - handleFiles = require('mocha/lib/cli/run-helpers').handleFiles; + const runHelpers = require('mocha/lib/cli/run-helpers'); + handleFiles = runHelpers.handleFiles; + handleRequires = runHelpers.handleRequires; // handleRequires is available since mocha v7.2 + loadRootHooks = runHelpers.loadRootHooks; // loadRootHooks is available since mocha v7.2 + if (!handleFiles) { // Might be moved: https://github.com/mochajs/mocha/commit/15b96afccaf508312445770e3af1c145d90b28c6#diff-39b692a81eb0c9f3614247af744ab4a8 handleFiles = require('mocha/lib/cli/collect-files'); @@ -37,4 +43,6 @@ export default class LibWrapper { public static multimatch = multimatch; public static loadOptions = loadOptions; public static handleFiles = handleFiles; + public static handleRequires = handleRequires; + public static loadRootHooks = loadRootHooks; } diff --git a/packages/mocha-runner/src/MochaTestRunner.ts b/packages/mocha-runner/src/MochaTestRunner.ts index 5d6cf05f28..0f8c8f6ad0 100644 --- a/packages/mocha-runner/src/MochaTestRunner.ts +++ b/packages/mocha-runner/src/MochaTestRunner.ts @@ -18,15 +18,15 @@ const DEFAULT_TEST_PATTERN = 'test/**/*.js'; export class MochaTestRunner implements TestRunner { private testFileNames: string[]; private readonly mochaOptions: MochaOptions; + private rootHooks: any; public static inject = tokens(commonTokens.logger, commonTokens.sandboxFileNames, commonTokens.options); constructor(private readonly log: Logger, private readonly allFileNames: readonly string[], options: StrykerOptions) { this.mochaOptions = (options as MochaRunnerWithStrykerOptions).mochaOptions; - this.additionalRequires(); StrykerMochaReporter.log = log; } - public init(): void { + public async init(): Promise { if (LibWrapper.handleFiles) { this.log.debug("Mocha >= 6 detected. Using mocha's `handleFiles` to load files"); this.testFileNames = this.mocha6DiscoverFiles(LibWrapper.handleFiles); @@ -34,6 +34,7 @@ export class MochaTestRunner implements TestRunner { this.log.debug('Mocha < 6 detected. Using custom logic to discover files'); this.testFileNames = this.legacyDiscoverFiles(); } + await this.additionalRequires(); } private mocha6DiscoverFiles(handleFiles: (options: MochaOptions) => string[]): string[] { @@ -92,7 +93,7 @@ export class MochaTestRunner implements TestRunner { return new Promise((resolve, reject) => { try { this.purgeFiles(); - const mocha = new LibWrapper.Mocha({ reporter: StrykerMochaReporter as any, bail: true }); + const mocha = new LibWrapper.Mocha({ reporter: StrykerMochaReporter as any, bail: true, rootHooks: this.rootHooks } as Mocha.MochaOptions); this.configure(mocha); this.addTestHooks(mocha, testHooks); this.addFiles(mocha); @@ -162,7 +163,12 @@ export class MochaTestRunner implements TestRunner { } } - private additionalRequires() { + private async additionalRequires() { + if (LibWrapper.handleRequires) { + // handle requires is available since mocha 7.2 + const rawRootHooks = await LibWrapper.handleRequires(this.mochaOptions.require); + this.rootHooks = await LibWrapper.loadRootHooks!(rawRootHooks); + } if (this.mochaOptions.require) { const modulesToRequire = this.mochaOptions.require.map((moduleName) => (moduleName.startsWith('.') ? path.resolve(moduleName) : moduleName)); modulesToRequire.forEach(LibWrapper.require); diff --git a/packages/mocha-runner/test/integration/MochaOptionsLoader.it.spec.ts b/packages/mocha-runner/test/integration/MochaOptionsLoader.it.spec.ts index 9935212640..8f9a9d00ea 100644 --- a/packages/mocha-runner/test/integration/MochaOptionsLoader.it.spec.ts +++ b/packages/mocha-runner/test/integration/MochaOptionsLoader.it.spec.ts @@ -25,7 +25,7 @@ describe(`${MochaOptionsLoader.name} integration`, () => { expect(actualConfig).deep.eq({ ...DEFAULT_MOCHA_OPTIONS, config: configFile, - opts: false, // mocha sets opts: false after loading it... + opts: './test/mocha.opts', package: false, // mocha sets package: false after loading it... extension: ['js'], timeout: 2000, @@ -38,7 +38,7 @@ describe(`${MochaOptionsLoader.name} integration`, () => { const actualConfig = actLoad({ config: configFile }); expect(actualConfig).deep.eq({ ...DEFAULT_MOCHA_OPTIONS, - opts: false, // mocha sets opts: false after loading it... + opts: './test/mocha.opts', package: false, // mocha sets package: false after loading it... config: configFile, extension: ['json', 'js'], @@ -53,7 +53,7 @@ describe(`${MochaOptionsLoader.name} integration`, () => { expect(actualConfig).deep.eq({ ...DEFAULT_MOCHA_OPTIONS, config: configFile, - opts: false, // mocha sets opts: false after loading it... + opts: './test/mocha.opts', package: false, // mocha sets package: false after loading it... extension: ['jsonc', 'js'], timeout: 2000, @@ -68,7 +68,7 @@ describe(`${MochaOptionsLoader.name} integration`, () => { ...DEFAULT_MOCHA_OPTIONS, 'async-only': false, config: configFile, - opts: false, // mocha sets opts: false after loading it... + opts: './test/mocha.opts', package: false, // mocha sets package: false after loading it... extension: ['yml', 'js'], file: ['/path/to/some/file', '/path/to/some/other/file'], @@ -80,24 +80,6 @@ describe(`${MochaOptionsLoader.name} integration`, () => { }); }); - it('should support loading from "mocha.opts" (including providing files)', () => { - const configFile = resolveMochaConfig('mocha.opts'); - const actualConfig = actLoad({ opts: configFile }); - expect(actualConfig).deep.eq({ - ...DEFAULT_MOCHA_OPTIONS, - 'async-only': true, - extension: ['js'], - config: false, // mocha sets config: false after loading it... - package: false, // mocha sets package: false after loading it... - file: [], - ignore: [], - opts: configFile, - spec: ['/tests/**/*.js', '/foo/*.js'], - timeout: 2000, - ui: 'bdd', - }); - }); - it('should support loading from "package.json"', () => { const pkgFile = resolveMochaConfig('package.json'); const actualConfig = actLoad({ package: pkgFile }); @@ -128,7 +110,7 @@ describe(`${MochaOptionsLoader.name} integration`, () => { 'no-opts': true, }); const expectedOptions = { - extension: ['js'], + extension: ['js', 'cjs', 'mjs'], ['no-config']: true, ['no-opts']: true, ['no-package']: true, diff --git a/packages/mocha-runner/test/integration/ProjectWithRootHooks.it.spec.ts b/packages/mocha-runner/test/integration/ProjectWithRootHooks.it.spec.ts new file mode 100644 index 0000000000..e4e3a293fb --- /dev/null +++ b/packages/mocha-runner/test/integration/ProjectWithRootHooks.it.spec.ts @@ -0,0 +1,34 @@ +import * as path from 'path'; + +import { commonTokens } from '@stryker-mutator/api/plugin'; +import { testInjector } from '@stryker-mutator/test-helpers'; +import { expect } from 'chai'; +import { RunStatus } from '@stryker-mutator/api/test_runner'; + +import { MochaTestRunner } from '../../src/MochaTestRunner'; +import MochaOptionsEditor from '../../src/MochaOptionsEditor'; +import MochaOptionsLoader from '../../src/MochaOptionsLoader'; + +describe('Running a project with root hooks', () => { + const cwd = process.cwd(); + + let sut: MochaTestRunner; + + beforeEach(async () => { + process.chdir(path.resolve(__dirname, '..', '..', 'testResources', 'parallel-with-root-hooks-sample')); + testInjector.injector.provideClass('loader', MochaOptionsLoader).injectClass(MochaOptionsEditor).edit(testInjector.options); + sut = testInjector.injector.provideValue(commonTokens.sandboxFileNames, []).injectClass(MochaTestRunner); + await sut.init(); + }); + + afterEach(() => { + process.chdir(cwd); + }); + + it('should have run the root hooks', async () => { + const result = await sut.run({}); + expect(result.status).eq(RunStatus.Complete); + expect(result.tests).has.lengthOf(2); + expect(result.errorMessages).lengthOf(0); + }); +}); diff --git a/packages/mocha-runner/test/unit/MochaOptionsLoader.spec.ts b/packages/mocha-runner/test/unit/MochaOptionsLoader.spec.ts index 060d5082e3..937ac6f8fe 100644 --- a/packages/mocha-runner/test/unit/MochaOptionsLoader.spec.ts +++ b/packages/mocha-runner/test/unit/MochaOptionsLoader.spec.ts @@ -106,6 +106,12 @@ describe(MochaOptionsLoader.name, () => { const actualOptions = sut.load(options); expect(actualOptions).deep.eq(createMochaOptions()); }); + + it('should not allow to set parallel', () => { + rawOptions['parallel'] = true; + const actualOptions = sut.load(options); + expect((actualOptions as any).parallel).undefined; + }); }); describe('with mocha < 6', () => { diff --git a/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/.mocharc.jsonc b/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/.mocharc.jsonc new file mode 100644 index 0000000000..25d293c9bd --- /dev/null +++ b/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/.mocharc.jsonc @@ -0,0 +1,6 @@ +{ + "ui": "bdd", + "parallel": true, + "require": "./test/setup.js", + "spec": "test/unit/*.js" +} diff --git a/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/setup.js b/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/setup.js new file mode 100644 index 0000000000..7a94d29780 --- /dev/null +++ b/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/setup.js @@ -0,0 +1,5 @@ +exports.mochaHooks = { + beforeEach() { + global.add = (a, b) => a + b; + } +} diff --git a/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/unit/spec.js b/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/unit/spec.js new file mode 100644 index 0000000000..add6e97789 --- /dev/null +++ b/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/unit/spec.js @@ -0,0 +1,8 @@ +const assert = require('assert'); + +describe('add', () => { + it('should add 1 + 1 = 2', () => { + assert.equal(add(1, 1), 2); + }); +}) + \ No newline at end of file diff --git a/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/unit/spec2.js b/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/unit/spec2.js new file mode 100644 index 0000000000..aa9eac54cc --- /dev/null +++ b/packages/mocha-runner/testResources/parallel-with-root-hooks-sample/test/unit/spec2.js @@ -0,0 +1,7 @@ +const assert = require('assert'); + +describe('add also', () => { + it('should add 2 - 3 = -1', () => { + assert.equal(add(2, -3), -1); + }); +})