From afd57c475eba5969cc634b006a0b12e342dcdd6a Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Tue, 23 Apr 2019 16:04:33 +0200 Subject: [PATCH 1/5] chore: add cucumber as a dev dependency --- package-lock.json | 385 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 + 2 files changed, 388 insertions(+) diff --git a/package-lock.json b/package-lock.json index 90b3cd0..41078a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,16 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/polyfill": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.3.tgz", + "integrity": "sha512-rkv8WIvJshA5Ev8iNMGgz5WZkRtgtiPexiT7w5qevGTuT7ZBfM3de9ox1y9JR5/OXb/sWGBbWlHNa7vQKqku3Q==", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + } + }, "JSONSelect": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", @@ -49,6 +59,12 @@ "color-convert": "^1.9.0" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, "api-blueprint-http-formatter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/api-blueprint-http-formatter/-/api-blueprint-http-formatter-0.0.1.tgz", @@ -85,6 +101,17 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, + "assertion-error-formatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-2.0.1.tgz", + "integrity": "sha512-cjC3jUCh9spkroKue5PDSKH5RFQ/KNuZJhk3GwHYmB/8qqETxLOmMdLH+ohi/VukNzxDlMvIe7zScvLoOdhb6Q==", + "dev": true, + "requires": { + "diff": "^3.0.0", + "pad-right": "^0.2.2", + "repeat-string": "^1.6.1" + } + }, "async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", @@ -127,6 +154,18 @@ "tweetnacl": "^0.14.3" } }, + "becke-ch--regex--s0-0-v1--base--pl--lib": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", + "integrity": "sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=", + "dev": true + }, + "bluebird": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -207,6 +246,26 @@ "restore-cursor": "^2.0.0" } }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "dev": true, + "optional": true + } + } + }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", @@ -304,6 +363,66 @@ "which": "^1.2.9" } }, + "cucumber": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-5.1.0.tgz", + "integrity": "sha512-zrl2VYTBRgvxucwV2GKAvLqcfA1Naeax8plPvWgPEzl3SCJiuPPv3WxBHIRHtPYcEdbHDR6oqLpZP4bJ8UIdmA==", + "dev": true, + "requires": { + "@babel/polyfill": "^7.2.3", + "assertion-error-formatter": "^2.0.1", + "bluebird": "^3.4.1", + "cli-table3": "^0.5.1", + "colors": "^1.1.2", + "commander": "^2.9.0", + "cross-spawn": "^6.0.5", + "cucumber-expressions": "^6.0.0", + "cucumber-tag-expressions": "^1.1.1", + "duration": "^0.2.1", + "escape-string-regexp": "^1.0.5", + "figures": "2.0.0", + "gherkin": "^5.0.0", + "glob": "^7.1.3", + "indent-string": "^3.1.0", + "is-generator": "^1.0.2", + "is-stream": "^1.1.0", + "knuth-shuffle-seeded": "^1.0.6", + "lodash": "^4.17.10", + "mz": "^2.4.0", + "progress": "^2.0.0", + "resolve": "^1.3.3", + "serialize-error": "^3.0.0", + "stack-chain": "^2.0.0", + "stacktrace-js": "^2.0.0", + "string-argv": "0.1.1", + "title-case": "^2.1.1", + "util-arity": "^1.0.2", + "verror": "^1.9.0" + }, + "dependencies": { + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "dev": true + } + } + }, + "cucumber-expressions": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-6.0.1.tgz", + "integrity": "sha1-R8nFc3gcL/ch161bLNHJf0OZq44=", + "dev": true, + "requires": { + "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.2.0" + } + }, + "cucumber-tag-expressions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-1.1.1.tgz", + "integrity": "sha1-f1x7cACbwrZmWRv+ZIVFeL7e6Fo=", + "dev": true + }, "curl-trace-parser": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/curl-trace-parser/-/curl-trace-parser-0.0.10.tgz", @@ -329,6 +448,15 @@ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", "dev": true }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -383,6 +511,12 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "drange": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", @@ -462,6 +596,16 @@ } } }, + "duration": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.46" + } + }, "ebnf-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz", @@ -484,6 +628,15 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, + "error-stack-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", + "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "dev": true, + "requires": { + "stackframe": "^1.0.4" + } + }, "es-abstract": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", @@ -509,6 +662,38 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.49", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", + "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -890,6 +1075,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -945,6 +1136,12 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=", + "dev": true + }, "is-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", @@ -966,6 +1163,12 @@ "has": "^1.0.1" } }, + "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-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -1176,6 +1379,15 @@ "verror": "1.10.0" } }, + "knuth-shuffle-seeded": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", + "integrity": "sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE=", + "dev": true, + "requires": { + "seed-random": "~2.2.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -1219,6 +1431,12 @@ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -1339,12 +1557,38 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, "nomnom": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.5.2.tgz", @@ -1369,6 +1613,12 @@ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -1463,6 +1713,15 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", + "dev": true, + "requires": { + "repeat-string": "^1.5.2" + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1517,6 +1776,12 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "proxyquire": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.0.tgz", @@ -1577,6 +1842,18 @@ "util-deprecate": "~1.0.1" } }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -1660,12 +1937,24 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=", + "dev": true + }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, + "serialize-error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-3.0.0.tgz", + "integrity": "sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A==", + "dev": true + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1723,12 +2012,62 @@ "tweetnacl": "~0.14.0" } }, + "stack-chain": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", + "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", + "dev": true + }, + "stack-generator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.3.tgz", + "integrity": "sha512-kdzGoqrnqsMxOEuXsXyQTmvWXZmG0f3Ql2GDx5NtmZs59sT2Bt9Vdyq0XdtxUi58q/+nxtbF9KOQ9HkV1QznGg==", + "dev": true, + "requires": { + "stackframe": "^1.0.4" + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", "dev": true }, + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "dev": true + }, + "stacktrace-gps": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz", + "integrity": "sha512-9o+nWhiz5wFnrB3hBHs2PTyYrS60M1vvpSzHxwxnIbtY2q9Nt51hZvhrG1+2AxD374ecwyS+IUwfkHRE/2zuGg==", + "dev": true, + "requires": { + "source-map": "0.5.6", + "stackframe": "^1.0.4" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "stacktrace-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.0.tgz", + "integrity": "sha1-d2ymRqlbxsayuQd2U2p/xyxt21g=", + "dev": true, + "requires": { + "error-stack-parser": "^2.0.1", + "stack-generator": "^2.0.1", + "stacktrace-gps": "^3.0.1" + } + }, "static-eval": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", @@ -1772,6 +2111,12 @@ } } }, + "string-argv": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.1.tgz", + "integrity": "sha512-El1Va5ehZ0XTj3Ekw4WFidXvTmt9SrC0+eigdojgtJMVtPkF0qbBe9fyNSl9eQf+kUHnTSQxdQYzuHfZy8V+DQ==", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -1868,12 +2213,40 @@ "integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=", "dev": true }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -1973,6 +2346,12 @@ "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", "dev": true }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, "uptown": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/uptown/-/uptown-1.1.0.tgz", @@ -2000,6 +2379,12 @@ "pct-encode": "~1.0.0" } }, + "util-arity": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", + "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 9765518..c8e6d1d 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,15 @@ "version": "1.0.0", "description": "A meta-package to install the testing dependencies of the Dredd Hooks template test suite", "devDependencies": { + "chai": "4.2.0", + "cucumber": "5.1.0", "dredd": "9.0.5", "fs-extra": "7.0.1", "gherkin-lint": "3.0.3", "glob": "7.1.3" }, "scripts": { + "test": "cucumber-js", "lint:features": "gherkin-lint features/" }, "repository": { From f5f77a490f99d6429b49d0379ad8963d3f882afd Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Tue, 23 Apr 2019 16:15:44 +0200 Subject: [PATCH 2/5] chore: remove Ruby from CI --- .circleci/config.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1408679..b4bfcfb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,29 +11,23 @@ jobs: test-with-python-hooks: docker: - - image: circleci/ruby:2.6-node + - image: circleci/python:3.7-node working_directory: ~/repo steps: - checkout - run: name: Install dev dependencies (Node.js) command: npm install - - run: - name: Install the BDD test suite dependencies (Ruby) - command: bundle install - run: name: Install the reference hooks implementation (Python) - command: | - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - sudo python get-pip.py - sudo pip install dredd_hooks + command: sudo pip install dredd_hooks - run: name: Test command: | node scripts/prepare-test.js export PATH=$PATH:$(pwd)/node_modules/.bin cd ./test - bundle exec cucumber + npm test workflows: version: 2 From 863eb966db6c25219462f80d7c33bb49b071d858 Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Tue, 23 Apr 2019 18:11:08 +0200 Subject: [PATCH 3/5] refactor: rewrite some basic steps to Node.js --- .circleci/config.yml | 2 +- features/support/steps.js | 48 +++++++++++++++++++++++++++++++++++++++ package.json | 7 ++++-- 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 features/support/steps.js diff --git a/.circleci/config.yml b/.circleci/config.yml index b4bfcfb..dadc6e7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,7 +27,7 @@ jobs: node scripts/prepare-test.js export PATH=$PATH:$(pwd)/node_modules/.bin cd ./test - npm test + cucumber-js features workflows: version: 2 diff --git a/features/support/steps.js b/features/support/steps.js new file mode 100644 index 0000000..6955142 --- /dev/null +++ b/features/support/steps.js @@ -0,0 +1,48 @@ +const { expect } = require('chai'); +const fs = require('fs-extra'); +const os = require('os'); +const path = require('path'); +const which = require('which'); +const childProcess = require('child_process'); +const { Given, When, Then, Before, After } = require('cucumber'); + + +Before(function () { + this.dir = fs.mkdtempSync(path.join(os.tmpdir(), 'dredd-hooks-template-')); + this.env = { ...process.env }; +}); + +After(function () { + fs.remove(this.dir); +}); + + +Given(/^I have "([^"]+)" command installed$/, function (command) { + which.sync(command); // throws if the command is not found +}); + +Given(/^a file named "([^"]+)" with:$/, function (filename, content) { + fs.writeFileSync(path.join(this.dir, filename), content); +}); + +Given(/^I set the environment variables to:$/, function (env) { + this.env = { ...this.env, ...env.rowsHash() }; +}); + + +When(/^I run `([^`]+)`$/, function (command) { + this.proc = childProcess.spawnSync(command, [], { + shell: true, + cwd: this.dir, + env: this.env, + }); +}); + + +Then('the exit status should be {int}', function (number) { + expect(this.proc.status).to.equal(parseInt(number, 10)); +}); + +Then('the output should contain:', function (output) { + expect(this.proc.stdout.toString() + this.proc.stderr.toString()).to.contain(output); +}); diff --git a/package.json b/package.json index c8e6d1d..8516bb9 100644 --- a/package.json +++ b/package.json @@ -2,16 +2,19 @@ "name": "dredd-hooks-template", "version": "1.0.0", "description": "A meta-package to install the testing dependencies of the Dredd Hooks template test suite", + "engines": { + "node": ">=10" + }, "devDependencies": { "chai": "4.2.0", "cucumber": "5.1.0", "dredd": "9.0.5", "fs-extra": "7.0.1", "gherkin-lint": "3.0.3", - "glob": "7.1.3" + "glob": "7.1.3", + "which": "1.3.1" }, "scripts": { - "test": "cucumber-js", "lint:features": "gherkin-lint features/" }, "repository": { From 847944aab03582e81e8467e4a1f971a10aac3fac Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Thu, 25 Apr 2019 17:29:19 +0200 Subject: [PATCH 4/5] refactor: rewrite to Node.js --- .circleci/config.yml | 8 +-- .travis.example.yml | 7 --- Gemfile | 4 -- Gemfile.lock | 33 ---------- features/step_definitions/dredd_steps.rb | 42 ------------- features/support/env.rb | 11 ---- features/support/steps.js | 76 ++++++++++++++++++++++-- features/tcp_server.feature | 12 ++-- package-lock.json | 18 ++++-- package.json | 4 +- scripts/{prepare-test.js => test.js} | 11 +++- 11 files changed, 105 insertions(+), 121 deletions(-) delete mode 100644 .travis.example.yml delete mode 100644 Gemfile delete mode 100644 Gemfile.lock delete mode 100644 features/step_definitions/dredd_steps.rb delete mode 100644 features/support/env.rb rename scripts/{prepare-test.js => test.js} (76%) diff --git a/.circleci/config.yml b/.circleci/config.yml index dadc6e7..b8ab751 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ jobs: steps: - checkout - run: npm install - - run: npm run lint:features + - run: npm run lint test-with-python-hooks: docker: @@ -23,11 +23,7 @@ jobs: command: sudo pip install dredd_hooks - run: name: Test - command: | - node scripts/prepare-test.js - export PATH=$PATH:$(pwd)/node_modules/.bin - cd ./test - cucumber-js features + command: npm test workflows: version: 2 diff --git a/.travis.example.yml b/.travis.example.yml deleted file mode 100644 index 79c0a32..0000000 --- a/.travis.example.yml +++ /dev/null @@ -1,7 +0,0 @@ -before_install: - - nvm install node && nvm use node - - npm install -g dredd --no-optional - - bundle install - -script: - - bundle exec cucumber diff --git a/Gemfile b/Gemfile deleted file mode 100644 index a7988ae..0000000 --- a/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source "https://rubygems.org" - -gem "aruba", "0.6.2" -gem "cucumber", "~> 1.3.20" diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index db9aaae..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,33 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - aruba (0.6.2) - childprocess (>= 0.3.6) - cucumber (>= 1.1.1) - rspec-expectations (>= 2.7.0) - builder (3.2.3) - childprocess (1.0.1) - rake (< 13.0) - cucumber (1.3.20) - builder (>= 2.1.2) - diff-lcs (>= 1.1.3) - gherkin (~> 2.12) - multi_json (>= 1.7.5, < 2.0) - multi_test (>= 0.1.2) - diff-lcs (1.3) - gherkin (2.12.2) - multi_json (~> 1.3) - multi_json (1.13.1) - multi_test (0.1.2) - rake (12.3.2) - rspec-expectations (3.8.2) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.8.0) - rspec-support (3.8.0) - -PLATFORMS - ruby - -DEPENDENCIES - aruba (= 0.6.2) - cucumber (~> 1.3.20) diff --git a/features/step_definitions/dredd_steps.rb b/features/step_definitions/dredd_steps.rb deleted file mode 100644 index 06d2526..0000000 --- a/features/step_definitions/dredd_steps.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'json' -require 'socket' - - -Given(/^I have "([^"]*)" command installed$/) do |command| - is_present = system("which #{ command} > /dev/null 2>&1") - raise "Command #{command} is not present in the system" if not is_present -end - -Given(/^server under test is running$/) do -end - -Then(/^It should start listening on localhost port "([^"]*)"$/) do |port| - @client = TCPSocket.new 'localhost', port - @client.close -end - -Given(/^I connect to the server$/) do - @client = TCPSocket.new 'localhost', 61321 -end - -When(/^I send a JSON message to the socket:$/) do |string| - @data_sent = string - @client.send @data_sent, 0 -end - -When(/^I send a newline character as a message delimiter to the socket$/) do - @client.send "\n", 0 -end - -Then(/^I should receive same response$/) do - sleep 1 - data_received = @client.readline - if JSON.parse(data_received) != JSON.parse(@data_sent) - @client.close! - raise "Data received:\n#{data_received}\nDoesn't match data sent: #{@data_sent}\n" - end -end - -Then(/^I should be able to gracefully disconnect$/) do - @client.close -end \ No newline at end of file diff --git a/features/support/env.rb b/features/support/env.rb deleted file mode 100644 index 393593d..0000000 --- a/features/support/env.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'aruba/cucumber' - -Before do - puts "Killing server..." - system "for i in `ps axu | grep 'server.js' | awk '{print $2}'`; do kill -9 $i; done > /dev/null 2>&1" - puts "Killing handler..." - system "for i in `ps axu | grep 'dredd-hooks' | awk '{print $2}'`; do kill -9 $i; done > /dev/null 2>&1" - sleep 3 - - @aruba_timeout_seconds = 10 -end diff --git a/features/support/steps.js b/features/support/steps.js index 6955142..a0b9d0e 100644 --- a/features/support/steps.js +++ b/features/support/steps.js @@ -1,19 +1,25 @@ -const { expect } = require('chai'); -const fs = require('fs-extra'); const os = require('os'); const path = require('path'); -const which = require('which'); +const util = require('util'); const childProcess = require('child_process'); +const { expect } = require('chai'); +const fs = require('fs-extra'); +const net = require('net'); +const which = require('which'); +const kill = require('tree-kill'); const { Given, When, Then, Before, After } = require('cucumber'); Before(function () { this.dir = fs.mkdtempSync(path.join(os.tmpdir(), 'dredd-hooks-template-')); this.env = { ...process.env }; + this.commands = []; + this.dataSent = ''; }); -After(function () { +After(async function () { fs.remove(this.dir); + await util.promisify(kill)(this.proc.pid); }); @@ -38,11 +44,69 @@ When(/^I run `([^`]+)`$/, function (command) { }); }); +When(/^I run `([^`]+)` interactively$/, function (command) { + this.proc = childProcess.spawn(command, [], { + shell: true, + cwd: this.dir, + env: this.env, + }); +}); + +When('I wait for output to contain {string}', function (output, callback) { + const proc = this.proc; + + function read(data) { + if (data.toString().includes(output)) { + proc.stdout.removeListener('data', read); + proc.stderr.removeListener('data', read); + callback(); + } + } + + proc.stdout.on('data', read); + proc.stderr.on('data', read); +}); -Then('the exit status should be {int}', function (number) { - expect(this.proc.status).to.equal(parseInt(number, 10)); +When('I connect to the server', async function () { + this.socket = new net.Socket(); + const connect = util.promisify(this.socket.connect.bind(this.socket)); + await connect(61321, '127.0.0.1'); +}); + +When('I send a JSON message to the socket:', function (message) { + this.socket.write(message); + this.dataSent += message; +}); + +When('I send a newline character as a message delimiter to the socket', function () { + this.socket.write('\n'); +}); + + +Then('the exit status should be {int}', function (status) { + expect(this.proc.status).to.equal(status); }); Then('the output should contain:', function (output) { expect(this.proc.stdout.toString() + this.proc.stderr.toString()).to.contain(output); }); + +Then('it should start listening on localhost port {int}', async function (port) { + this.socket = new net.Socket(); + const connect = util.promisify(this.socket.connect.bind(this.socket)); + await connect(port, '127.0.0.1'); // throws if there's an issue + this.socket.end(); +}); + +Then('I should receive the same response', function (callback) { + this.socket.on('data', (data) => { + const dataReceived = JSON.parse(data.toString()); + const dataSent = JSON.parse(this.dataSent); + expect(dataReceived).to.deep.equal(dataSent); + callback(); + }); +}); + +Then('I should be able to gracefully disconnect', function () { + this.socket.end(); +}); diff --git a/features/tcp_server.feature b/features/tcp_server.feature index 2de1102..c13844d 100644 --- a/features/tcp_server.feature +++ b/features/tcp_server.feature @@ -3,7 +3,7 @@ Feature: TCP server and messages Scenario: TCP server When I run `dredd-hooks-{{mylanguage}}` interactively And I wait for output to contain "Starting" - Then It should start listening on localhost port "61321" + Then it should start listening on localhost port 61321 Scenario: Message exchange for event beforeEach Given I run `dredd-hooks-{{mylanguage}}` interactively @@ -14,7 +14,7 @@ Scenario: Message exchange for event beforeEach {"event": "beforeEach", "uuid": "1234-abcd", "data": {"key":"value"}} """ And I send a newline character as a message delimiter to the socket - Then I should receive same response + Then I should receive the same response And I should be able to gracefully disconnect Scenario: Message exchange for event beforeEachValidation @@ -26,7 +26,7 @@ Scenario: Message exchange for event beforeEachValidation {"event": "beforeEachValidation", "uuid": "2234-abcd", "data": {"key":"value"}} """ And I send a newline character as a message delimiter to the socket - Then I should receive same response + Then I should receive the same response And I should be able to gracefully disconnect Scenario: Message exchange for event afterEach @@ -38,7 +38,7 @@ Scenario: Message exchange for event afterEach {"event": "afterEach", "uuid": "3234-abcd", "data": {"key":"value"}} """ And I send a newline character as a message delimiter to the socket - Then I should receive same response + Then I should receive the same response And I should be able to gracefully disconnect Scenario: Message exchange for event beforeAll @@ -50,7 +50,7 @@ Scenario: Message exchange for event beforeAll {"event": "beforeAll", "uuid": "4234-abcd", "data": {"key":"value"}} """ And I send a newline character as a message delimiter to the socket - Then I should receive same response + Then I should receive the same response And I should be able to gracefully disconnect Scenario: Message exchange for event afterAll @@ -62,5 +62,5 @@ Scenario: Message exchange for event afterAll {"event": "afterAll", "uuid": "5234-abcd", "data": {"key":"value"}} """ And I send a newline character as a message delimiter to the socket - Then I should receive same response + Then I should receive the same response And I should be able to gracefully disconnect diff --git a/package-lock.json b/package-lock.json index 41078a1..d7da0d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -569,12 +569,14 @@ "dependencies": { "deckardcain": { "version": "0.4.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-7kp5y1Zv/ej5aKoUl8Hbe56NQK3/hqBM70iyaOMyLJDd1D+UZTtLDmDaWLHFaoRCIeitt3Py2Tu4BNuYDY4zQw==", "dev": true }, "drafter": { "version": "2.0.0-pre.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-6iiQwW7vZy5WDtWtg77JnPYyUn02DoaOyApLk1FkQWmuG9zRO44skWIfvRqe6CSoj7lI8s1h8HIvdz4XsEsZlA==", "dev": true, "requires": { "drafter.js": "^3.0.0-pre.2" @@ -582,12 +584,14 @@ }, "drafter.js": { "version": "3.0.0-pre.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-w3AwtCWvrhxs2oYAwA5zXTdRH0dvIrylUjfI4LOlhI4TOND1mss8f3B4YFd3SQOP19KbT5VaB7AcirWcXjB8ew==", "dev": true }, "fury-adapter-apib-parser": { "version": "0.13.0-beta", - "bundled": true, + "resolved": false, + "integrity": "sha512-+o2J4fdSCL0uhBSOAYSkHHfb1GWzoAPOrKEas/TX1luG5Lt9t/oNZsSVbUiHj8QuYwIRZAO5Y8LnYYubHNcRzw==", "dev": true, "requires": { "deckardcain": "^0.4.0", @@ -2274,6 +2278,12 @@ } } }, + "tree-kill": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", + "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", + "dev": true + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", diff --git a/package.json b/package.json index 8516bb9..74928fb 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,12 @@ "fs-extra": "7.0.1", "gherkin-lint": "3.0.3", "glob": "7.1.3", + "tree-kill": "1.2.1", "which": "1.3.1" }, "scripts": { - "lint:features": "gherkin-lint features/" + "test": "node scripts/test.js", + "lint": "gherkin-lint features/" }, "repository": { "type": "git", diff --git a/scripts/prepare-test.js b/scripts/test.js similarity index 76% rename from scripts/prepare-test.js rename to scripts/test.js index 805b7c6..66c8d8d 100644 --- a/scripts/prepare-test.js +++ b/scripts/test.js @@ -1,9 +1,10 @@ const fs = require('fs-extra'); const path = require('path'); const glob = require('glob'); +const { spawnSync } = require('child_process'); -const PROJECT_DIR = path.join(__dirname, '..') +const PROJECT_DIR = path.join(__dirname, '..'); const TEST_DIR = path.join(PROJECT_DIR, 'test'); @@ -45,3 +46,11 @@ glob.sync(path.join(TEST_DIR, '**/*.feature')).forEach((featurePath) => { const modifiedContent = uncommentPythonCodeBlocks(replacePlaceholders(content)); fs.writeFileSync(featurePath, modifiedContent, { encoding: 'utf-8' }); }) + +const binDir = path.join(PROJECT_DIR, 'node_modules', '.bin'); +const featuresDir = path.join(TEST_DIR, 'features'); + +const PATH = process.env.PATH.split(path.delimiter).concat([binDir]).join(path.delimiter); +const env = { ...process.env, PATH }; + +spawnSync('cucumber-js', [featuresDir], { cwd: TEST_DIR, env, stdio: 'inherit' }); From 72dd66930c0fe71c98e7a813cf70ceb7795ce6e5 Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Fri, 26 Apr 2019 16:22:25 +0200 Subject: [PATCH 5/5] chore: fix Node.js version required --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 74928fb..38e1b95 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "description": "A meta-package to install the testing dependencies of the Dredd Hooks template test suite", "engines": { - "node": ">=10" + "node": ">=8" }, "devDependencies": { "chai": "4.2.0",