From 1ecf496c0de0517037b39110a8e015ad6d3b3620 Mon Sep 17 00:00:00 2001 From: Christian Oertel Date: Fri, 16 Feb 2024 10:07:59 +0100 Subject: [PATCH 01/45] Include review comments Signed-off-by: Christian Oertel --- new/package-lock.json | 1091 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1071 insertions(+), 20 deletions(-) diff --git a/new/package-lock.json b/new/package-lock.json index 74840892..a78fba0c 100644 --- a/new/package-lock.json +++ b/new/package-lock.json @@ -8,6 +8,10 @@ "name": "new", "version": "0.1.0", "dependencies": { + "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.15.7", + "@mui/material": "^5.15.7", + "@mui/x-data-grid": "^6.19.3", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", @@ -15,8 +19,12 @@ "@types/node": "^16.18.3", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", + "chart.js": "^4.4.1", + "i18next": "^23.8.2", "react": "^18.2.0", + "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", + "react-i18next": "^14.0.1", "react-scripts": "5.0.1", "typescript": "^4.9.3", "web-vitals": "^2.1.4" @@ -1793,11 +1801,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -1815,6 +1823,11 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "node_modules/@babel/template": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", @@ -2137,6 +2150,159 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.3.tgz", + "integrity": "sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "node_modules/@eslint/eslintrc": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", @@ -2200,6 +2366,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", @@ -2957,11 +3157,296 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.36", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.36.tgz", + "integrity": "sha512-6A8fYiXgjqTO6pgj31Hc8wm1M3rFYCxDRh09dBVk0L0W4cb2lnurRJa3cAyic6hHY+we1S58OdGYRbKmOsDpGQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.9", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.15.10", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.10.tgz", + "integrity": "sha512-qPv7B+LeMatYuzRjB3hlZUHqinHx/fX4YFBiaS19oC02A1e9JFuDKDvlyRQQ5oRSbJJt0QlaLTlr0IcauVcJRQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.15.10", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.10.tgz", + "integrity": "sha512-9cF8oUHZKo9oQ7EQ3pxPELaZuZVmphskU4OI6NiJNDVN7zcuvrEsuWjYo1Zh4fLiC39Nrvm30h/B51rcUjvSGA==", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.15.10", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.10.tgz", + "integrity": "sha512-YJJGHjwDOucecjDEV5l9ISTCo+l9YeWrho623UajzoHRYxuKUmwrGVYOW4PKwGvCx9SU9oklZnbbi2Clc5XZHw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.36", + "@mui/core-downloads-tracker": "^5.15.10", + "@mui/system": "^5.15.9", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.9", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/private-theming": { + "version": "5.15.9", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.9.tgz", + "integrity": "sha512-/aMJlDOxOTAXyp4F2rIukW1O0anodAMCkv1DfBh/z9vaKHY3bd5fFf42wmP+0GRmwMinC5aWPpNfHXOED1fEtg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.9", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.15.9", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.9.tgz", + "integrity": "sha512-NRKtYkL5PZDH7dEmaLEIiipd3mxNnQSO+Yo8rFNBNptY8wzQnQ+VjayTq39qH7Sast5cwHKYFusUrQyD+SS4Og==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.15.9", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.9.tgz", + "integrity": "sha512-SxkaaZ8jsnIJ77bBXttfG//LUf6nTfOcaOuIgItqfHv60ZCQy/Hu7moaob35kBb+guxVJnoSZ+7vQJrA/E7pKg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.9", + "@mui/styled-engine": "^5.15.9", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.9", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", + "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.15.9", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.9.tgz", + "integrity": "sha512-yDYfr61bCYUz1QtwvpqYy/3687Z8/nS4zv7lv/ih/6ZFGMl1iolEvxRmR84v2lOYxlds+kq1IVYbXxDKh8Z9sg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/x-data-grid": { + "version": "6.19.4", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.19.4.tgz", + "integrity": "sha512-qXBe2mSetdsl3ZPqB/1LpKNkEiaYUiFXIaMHTIjuzLyusXgt+w7UsHYO7R+aJYUU7c3FeHla0R1nwRMY3kZ5ng==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/utils": "^5.14.16", + "clsx": "^2.0.0", + "prop-types": "^15.8.1", + "reselect": "^4.1.8" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@mui/material": "^5.4.1", + "@mui/system": "^5.4.1", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -3071,6 +3556,15 @@ } } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -3819,9 +4313,9 @@ "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/q": { "version": "1.5.5", @@ -3856,6 +4350,14 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -5331,6 +5833,17 @@ "node": ">=10" } }, + "node_modules/chart.js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.1.tgz", + "integrity": "sha512-C74QN1bxwV1v2PEujhmKjOZ7iUM4w6BWs23Md/6aOZZSlwMzeCIDGuZay++rBgChYru7/+QFeoQW0fQoP534Dg==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=7" + } + }, "node_modules/check-types": { "version": "11.2.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", @@ -5423,6 +5936,14 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -6069,9 +6590,9 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -6354,6 +6875,15 @@ "utila": "~0.4" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -7724,6 +8254,11 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -8327,6 +8862,21 @@ "he": "bin/he" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "peer": true, + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -8414,6 +8964,14 @@ "node": ">=12" } }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "dependencies": { + "void-elements": "3.1.0" + } + }, "node_modules/html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", @@ -8548,6 +9106,28 @@ "node": ">=10.17.0" } }, + "node_modules/i18next": { + "version": "23.8.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.8.2.tgz", + "integrity": "sha512-Z84zyEangrlERm0ZugVy4bIt485e/H8VecGUZkZWrH7BDePG6jT73QdL9EA1tRTTVVMpry/MgWIP1FjEn0DRXA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -13794,6 +14374,15 @@ "node": ">=14" } }, + "node_modules/react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "peerDependencies": { + "chart.js": "^4.1.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -13928,6 +14517,27 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "node_modules/react-i18next": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.0.5.tgz", + "integrity": "sha512-5+bQSeEtgJrMBABBL5lO7jPdSNAbeAZ+MlFWDw//7FnVacuVu3l9EeWFzBQvZsKy+cihkbThWOAThEdH8YjGEw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -14013,6 +14623,21 @@ } } }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -14210,6 +14835,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -15107,6 +15737,11 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -15817,6 +16452,14 @@ "node": ">= 0.8" } }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -17955,11 +18598,18 @@ } }, "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "requires": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + } } }, "@babel/runtime-corejs3": { @@ -18139,6 +18789,133 @@ "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", "requires": {} }, + "@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "requires": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/react": { + "version": "11.11.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.3.tgz", + "integrity": "sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==", + "peer": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "requires": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + } + }, + "@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "@eslint/eslintrc": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", @@ -18183,6 +18960,36 @@ } } }, + "@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "requires": { + "@floating-ui/utils": "^0.2.1" + } + }, + "@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "requires": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "requires": { + "@floating-ui/dom": "^1.6.1" + } + }, + "@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, "@humanwhocodes/config-array": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", @@ -18744,11 +19551,141 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, "@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "@mui/base": { + "version": "5.0.0-beta.36", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.36.tgz", + "integrity": "sha512-6A8fYiXgjqTO6pgj31Hc8wm1M3rFYCxDRh09dBVk0L0W4cb2lnurRJa3cAyic6hHY+we1S58OdGYRbKmOsDpGQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.9", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + } + }, + "@mui/core-downloads-tracker": { + "version": "5.15.10", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.10.tgz", + "integrity": "sha512-qPv7B+LeMatYuzRjB3hlZUHqinHx/fX4YFBiaS19oC02A1e9JFuDKDvlyRQQ5oRSbJJt0QlaLTlr0IcauVcJRQ==" + }, + "@mui/icons-material": { + "version": "5.15.10", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.10.tgz", + "integrity": "sha512-9cF8oUHZKo9oQ7EQ3pxPELaZuZVmphskU4OI6NiJNDVN7zcuvrEsuWjYo1Zh4fLiC39Nrvm30h/B51rcUjvSGA==", + "requires": { + "@babel/runtime": "^7.23.9" + } + }, + "@mui/material": { + "version": "5.15.10", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.10.tgz", + "integrity": "sha512-YJJGHjwDOucecjDEV5l9ISTCo+l9YeWrho623UajzoHRYxuKUmwrGVYOW4PKwGvCx9SU9oklZnbbi2Clc5XZHw==", + "requires": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.36", + "@mui/core-downloads-tracker": "^5.15.10", + "@mui/system": "^5.15.9", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.9", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@mui/private-theming": { + "version": "5.15.9", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.9.tgz", + "integrity": "sha512-/aMJlDOxOTAXyp4F2rIukW1O0anodAMCkv1DfBh/z9vaKHY3bd5fFf42wmP+0GRmwMinC5aWPpNfHXOED1fEtg==", + "requires": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.9", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.15.9", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.9.tgz", + "integrity": "sha512-NRKtYkL5PZDH7dEmaLEIiipd3mxNnQSO+Yo8rFNBNptY8wzQnQ+VjayTq39qH7Sast5cwHKYFusUrQyD+SS4Og==", + "requires": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.15.9", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.9.tgz", + "integrity": "sha512-SxkaaZ8jsnIJ77bBXttfG//LUf6nTfOcaOuIgItqfHv60ZCQy/Hu7moaob35kBb+guxVJnoSZ+7vQJrA/E7pKg==", + "requires": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.9", + "@mui/styled-engine": "^5.15.9", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.9", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", + "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "requires": {} + }, + "@mui/utils": { + "version": "5.15.9", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.9.tgz", + "integrity": "sha512-yDYfr61bCYUz1QtwvpqYy/3687Z8/nS4zv7lv/ih/6ZFGMl1iolEvxRmR84v2lOYxlds+kq1IVYbXxDKh8Z9sg==", + "requires": { + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@mui/x-data-grid": { + "version": "6.19.4", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.19.4.tgz", + "integrity": "sha512-qXBe2mSetdsl3ZPqB/1LpKNkEiaYUiFXIaMHTIjuzLyusXgt+w7UsHYO7R+aJYUU7c3FeHla0R1nwRMY3kZ5ng==", + "requires": { + "@babel/runtime": "^7.23.2", + "@mui/utils": "^5.14.16", + "clsx": "^2.0.0", + "prop-types": "^15.8.1", + "reselect": "^4.1.8" + } + }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -18812,6 +19749,11 @@ "source-map": "^0.7.3" } }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -19373,9 +20315,9 @@ "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" }, "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "@types/q": { "version": "1.5.5", @@ -19410,6 +20352,14 @@ "@types/react": "*" } }, + "@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "requires": { + "@types/react": "*" + } + }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -20500,6 +21450,14 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, + "chart.js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.1.tgz", + "integrity": "sha512-C74QN1bxwV1v2PEujhmKjOZ7iUM4w6BWs23Md/6aOZZSlwMzeCIDGuZay++rBgChYru7/+QFeoQW0fQoP534Dg==", + "requires": { + "@kurkle/color": "^0.3.0" + } + }, "check-types": { "version": "11.2.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", @@ -20570,6 +21528,11 @@ "wrap-ansi": "^7.0.0" } }, + "clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -21029,9 +21992,9 @@ } }, "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "damerau-levenshtein": { "version": "1.0.8", @@ -21248,6 +22211,15 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -22275,6 +23247,11 @@ "pkg-dir": "^4.1.0" } }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -22682,6 +23659,23 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "peer": true, + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + } + } + }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -22759,6 +23753,14 @@ "terser": "^5.10.0" } }, + "html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "requires": { + "void-elements": "3.1.0" + } + }, "html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", @@ -22850,6 +23852,14 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, + "i18next": { + "version": "23.8.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.8.2.tgz", + "integrity": "sha512-Z84zyEangrlERm0ZugVy4bIt485e/H8VecGUZkZWrH7BDePG6jT73QdL9EA1tRTTVVMpry/MgWIP1FjEn0DRXA==", + "requires": { + "@babel/runtime": "^7.23.2" + } + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -26440,6 +27450,12 @@ "whatwg-fetch": "^3.6.2" } }, + "react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "requires": {} + }, "react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -26540,6 +27556,15 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "react-i18next": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.0.5.tgz", + "integrity": "sha512-5+bQSeEtgJrMBABBL5lO7jPdSNAbeAZ+MlFWDw//7FnVacuVu3l9EeWFzBQvZsKy+cihkbThWOAThEdH8YjGEw==", + "requires": { + "@babel/runtime": "^7.23.9", + "html-parse-stringify": "^3.0.1" + } + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -26605,6 +27630,17 @@ "workbox-webpack-plugin": "^6.4.1" } }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -26759,6 +27795,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -27404,6 +28445,11 @@ "postcss-selector-parser": "^6.0.4" } }, + "stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -27926,6 +28972,11 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", From a0ecf3b3a43ed08f0d011082e8e8c9cd2d071734 Mon Sep 17 00:00:00 2001 From: Christian Oertel Date: Fri, 16 Feb 2024 10:34:15 +0100 Subject: [PATCH 02/45] Provide Readme for Workshop Signed-off-by: Christian Oertel --- README_WR24.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 README_WR24.md diff --git a/README_WR24.md b/README_WR24.md new file mode 100644 index 00000000..a24e1aae --- /dev/null +++ b/README_WR24.md @@ -0,0 +1,27 @@ +# The HTML App of JGiven and JsGiven - Workshop Edition 2024 + +Please perform the following steps before our Workshop takes place. This way, we can investigate any errors which might occur +during installation procedure. + +## Prerequisites + +Ensure you have the following tooling: + * `npm` (https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) + * Typescript + * An IDE supporting Typescript (like IntelliJ ;)) + * Firefox or Chrome (perhaps even both). + +## Installation + +Perform the following steps: +1. Clone the repo `https://github.com/jgiven/jgiven-html-app` and checkout the branch `WR24`. + +The repo consists of the existing HTML App (folder `legacy`) and the new HTML App (folder `new`). + +2. Navigate to `new` and run `npm install` as well as `npm run build`. +3. After performing `npm start` you should be able to see the new HTML App in your browser on `localhost:3000`. + +## Advice + +Have a look at JGiven (http://jgiven.org/, https://github.com/TNG/JGiven) and investigate the +existing HTML-App (https://jgiven.org/jgiven-report/html5/) to get an idea on what we plan to modernize. \ No newline at end of file From a874caf20d54c0d0b10ac8698ac781424549d0fa Mon Sep 17 00:00:00 2001 From: Christian Oertel Date: Fri, 16 Feb 2024 15:25:28 +0100 Subject: [PATCH 03/45] Provide items to work on Signed-off-by: Christian Oertel --- ACTION_ITEMS.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 ACTION_ITEMS.md diff --git a/ACTION_ITEMS.md b/ACTION_ITEMS.md new file mode 100644 index 00000000..7ca48986 --- /dev/null +++ b/ACTION_ITEMS.md @@ -0,0 +1,9 @@ +- Refactor Application - SingleScenarioView l. 19ff +- Refactor APplication - ScenarioOverview l. 123 + --> involves extracting Items to new components +- Fix width-problem +- Implement Top bar with search bar +- Create links between pages +- Create Bookmark functionality +- Provide a few more tests +- Make sidebar inflatable \ No newline at end of file From 0e6e77809af0361afee44b760eda7ede1b9cc0d4 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 10:44:02 +0100 Subject: [PATCH 04/45] Add react-router-dom and basic routing example --- new/package-lock.json | 61 +++++++++++++++++++++++++++++++++++++++++++ new/package.json | 1 + new/src/App.tsx | 3 +++ new/src/index.tsx | 5 ++-- new/src/router.tsx | 13 +++++++++ 5 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 new/src/router.tsx diff --git a/new/package-lock.json b/new/package-lock.json index a78fba0c..d93cbbcc 100644 --- a/new/package-lock.json +++ b/new/package-lock.json @@ -25,6 +25,7 @@ "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", "react-i18next": "^14.0.1", + "react-router-dom": "^6.22.2", "react-scripts": "5.0.1", "typescript": "^4.9.3", "web-vitals": "^2.1.4" @@ -3565,6 +3566,14 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@remix-run/router": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.2.tgz", + "integrity": "sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -14551,6 +14560,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.2.tgz", + "integrity": "sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw==", + "dependencies": { + "@remix-run/router": "1.15.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.2.tgz", + "integrity": "sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ==", + "dependencies": { + "@remix-run/router": "1.15.2", + "react-router": "6.22.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -19754,6 +19793,11 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" }, + "@remix-run/router": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.2.tgz", + "integrity": "sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q==" + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -27575,6 +27619,23 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" }, + "react-router": { + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.2.tgz", + "integrity": "sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw==", + "requires": { + "@remix-run/router": "1.15.2" + } + }, + "react-router-dom": { + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.2.tgz", + "integrity": "sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ==", + "requires": { + "@remix-run/router": "1.15.2", + "react-router": "6.22.2" + } + }, "react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", diff --git a/new/package.json b/new/package.json index ea9cbeb0..45c13703 100644 --- a/new/package.json +++ b/new/package.json @@ -20,6 +20,7 @@ "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", "react-i18next": "^14.0.1", + "react-router-dom": "^6.22.2", "react-scripts": "5.0.1", "typescript": "^4.9.3", "web-vitals": "^2.1.4" diff --git a/new/src/App.tsx b/new/src/App.tsx index c748855a..60a28196 100644 --- a/new/src/App.tsx +++ b/new/src/App.tsx @@ -2,6 +2,7 @@ import "./App.css"; import ReportModel, { ReportStatistics } from "./reportModel"; import * as guaranteedStateScenario from "./sampleData/GuaranteedStateTestScenario.json"; import { SingleScenarioView } from "./components/Scenarios/SingleScenarioView"; +import {useParams} from "react-router-dom"; export const statistics: ReportStatistics[] = [ { @@ -20,8 +21,10 @@ export const statistics: ReportStatistics[] = [ const guaranteedStateReport: ReportModel = guaranteedStateScenario as unknown as ReportModel; function App() { + let { result } = useParams(); return (
+ {result} - + ); diff --git a/new/src/router.tsx b/new/src/router.tsx new file mode 100644 index 00000000..2c492bca --- /dev/null +++ b/new/src/router.tsx @@ -0,0 +1,13 @@ +import {createBrowserRouter} from "react-router-dom"; +import App from "./App"; + +export const router = createBrowserRouter([ + { + path: "/", + element: , + }, + { + path: "/result/:result", + element: , + }, +]); From 3af69b6ef9adc292d24b2d4c037034971b449760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 10:54:04 +0100 Subject: [PATCH 05/45] Changed Scenario UI structure --- new/src/App.tsx | 10 +- ...{ScenarioOverview.tsx => ScenarioHead.tsx} | 2 +- .../components/Scenarios/ScenarioOverview.tsx | 88 +++++++++++++++++ .../Scenarios/SingleScenarioView.tsx | 97 +------------------ 4 files changed, 98 insertions(+), 99 deletions(-) rename new/src/components/ScenarioOverview/{ScenarioOverview.tsx => ScenarioHead.tsx} (99%) create mode 100644 new/src/components/Scenarios/ScenarioOverview.tsx diff --git a/new/src/App.tsx b/new/src/App.tsx index 60a28196..fac62133 100644 --- a/new/src/App.tsx +++ b/new/src/App.tsx @@ -1,7 +1,7 @@ import "./App.css"; -import ReportModel, { ReportStatistics } from "./reportModel"; +import ReportModel, {ReportStatistics} from "./reportModel"; import * as guaranteedStateScenario from "./sampleData/GuaranteedStateTestScenario.json"; -import { SingleScenarioView } from "./components/Scenarios/SingleScenarioView"; +import {ScenarioOverview} from "./components/Scenarios/ScenarioOverview"; import {useParams} from "react-router-dom"; export const statistics: ReportStatistics[] = [ @@ -25,9 +25,11 @@ function App() { return (
{result} -
); diff --git a/new/src/components/ScenarioOverview/ScenarioOverview.tsx b/new/src/components/ScenarioOverview/ScenarioHead.tsx similarity index 99% rename from new/src/components/ScenarioOverview/ScenarioOverview.tsx rename to new/src/components/ScenarioOverview/ScenarioHead.tsx index b0076a53..f75a11e4 100644 --- a/new/src/components/ScenarioOverview/ScenarioOverview.tsx +++ b/new/src/components/ScenarioOverview/ScenarioHead.tsx @@ -57,7 +57,7 @@ const Content = styled("div")(({ theme }) => ({ padding: theme.spacing(3) })); -export function ScenarioOverview(props: ScenarioOverviewProps) { +export function ScenarioHead(props: ScenarioOverviewProps) { return (
diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx new file mode 100644 index 00000000..cd29cfbe --- /dev/null +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -0,0 +1,88 @@ +import { ReportStatistics, ScenarioModel } from "../../reportModel"; +import { MenuBar, ScenarioHead } from "../ScenarioOverview/ScenarioHead"; +import { Scenario } from "./Scenario"; +import { useState } from "react"; +import { Grid } from "@mui/material"; + +export function ScenarioOverview(props: { reportName: string, title: string, description: string, scenarios: ScenarioModel[] }) { + const [expanded, setExpanded] = useState(false); + return ( + <> + + +
+ +
+
+ + {" "} + {/* Workshop: Extract to new component. */} + + +
+ { + console.log("Collapsing stuff"); + setExpanded(false); + }, + plusButtonTarget: () => { + console.log("Expanding stuff"); + setExpanded(true); + }, + printButtonTarget: () => { + console.error("print not implemented"); + }, + bookmarkButtonTarget: () => { + console.error("bookmark not implemented"); + } + }} + /> +
+
+
+ +
+ +
+
+
+
+ + ); +} + +function createStatistics(scenarios: ScenarioModel[]): ReportStatistics { + return { + numClasses: 1, + numScenarios: 1, +// numFailedScenarios: Math.sign( +// findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED") +// ), + numFailedScenarios: 1, + numCases: 1, //scenario.scenarioCases.length, + numFailedCases: 1, //findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED"), + numSteps: 1, //scenario.scenarioCases.map(value => value.steps.length).reduce(sum), + durationInNanos: 1, //scenario.durationInNanos, + numPendingScenarios: 1, + //Math.sign( + // findNumberOfCasesWithStatus(scenario.scenarioCases, "SCENARIO_PENDING") + //), + numSuccessfulScenarios: 1, + //Math.sign( + // findNumberOfCasesWithStatus(scenario.scenarioCases, "SUCCESS") + //) + }; +} diff --git a/new/src/components/Scenarios/SingleScenarioView.tsx b/new/src/components/Scenarios/SingleScenarioView.tsx index 4e78c172..67c9cc64 100644 --- a/new/src/components/Scenarios/SingleScenarioView.tsx +++ b/new/src/components/Scenarios/SingleScenarioView.tsx @@ -1,96 +1,5 @@ -import { ReportStatistics, ScenarioCaseModel, ScenarioModel } from "../../reportModel"; -import { MenuBar, ScenarioOverview } from "../ScenarioOverview/ScenarioOverview"; -import { Scenario } from "./Scenario"; -import { useState } from "react"; -import { Grid } from "@mui/material"; +import {ScenarioProps} from "./Scenario"; -export function SingleScenarioView(props: { reportName: string; scenario: ScenarioModel }) { - const [expanded, setExpanded] = useState(false); - return ( - <> - - -
- -
-
- - {" "} - {/* Workshop: Extract to new component. */} - - -
- { - console.log("Collapsing stuff"); - setExpanded(false); - }, - plusButtonTarget: () => { - console.log("Expanding stuff"); - setExpanded(true); - }, - printButtonTarget: () => { - console.error("print not implemented"); - }, - bookmarkButtonTarget: () => { - console.error("bookmark not implemented"); - } - }} - /> -
-
-
- -
- -
-
-
-
- - ); -} +export function SingleScenarioView(scenario: ScenarioProps) { -function createStatistics(scenario: ScenarioModel): ReportStatistics { - return { - numClasses: 1, - numScenarios: 1, - numFailedScenarios: Math.sign( - findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED") - ), - numCases: scenario.scenarioCases.length, - numFailedCases: findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED"), - numSteps: scenario.scenarioCases.map(value => value.steps.length).reduce(sum), - durationInNanos: scenario.durationInNanos, - numPendingScenarios: Math.sign( - findNumberOfCasesWithStatus(scenario.scenarioCases, "SCENARIO_PENDING") - ), - numSuccessfulScenarios: Math.sign( - findNumberOfCasesWithStatus(scenario.scenarioCases, "SUCCESS") - ) - }; -} - -function findNumberOfCasesWithStatus( - scenarioCases: ScenarioCaseModel[], - status: ScenarioCaseModel["status"] -): number { - return scenarioCases.filter(value => value.status === status).length; -} - -function sum(left: number, right: number): number { - return left + right; -} +} \ No newline at end of file From 7239a851a2d95cb5d338437fdd95a5890bfd669e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 11:17:38 +0100 Subject: [PATCH 06/45] Show multiple scenarios --- new/src/App.tsx | 2 +- .../components/Scenarios/ScenarioOverview.tsx | 22 ++++++++++++------- .../GuaranteedStateTestScenario.json | 4 ++-- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/new/src/App.tsx b/new/src/App.tsx index fac62133..307b7134 100644 --- a/new/src/App.tsx +++ b/new/src/App.tsx @@ -29,7 +29,7 @@ function App() { title={"Mein Titel"} description={"Meine Description"} reportName={guaranteedStateReport.name} - scenarios={[guaranteedStateReport.scenarios[0]]} + scenarios={guaranteedStateReport.scenarios} />
); diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index cd29cfbe..84ba936c 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -47,15 +47,21 @@ export function ScenarioOverview(props: { reportName: string, title: string, des +
- + {props.scenarios.map((scenario) => { + return ( + + ); + }) } +
diff --git a/new/src/sampleData/GuaranteedStateTestScenario.json b/new/src/sampleData/GuaranteedStateTestScenario.json index ca091825..49d22e19 100644 --- a/new/src/sampleData/GuaranteedStateTestScenario.json +++ b/new/src/sampleData/GuaranteedStateTestScenario.json @@ -4,8 +4,8 @@ "scenarios": [ { "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", - "testMethodName": "assure_before_method_of_second_test_is_executed_after_guaranteed_fields_validation", - "description": "assure before method of second test is executed after guaranteed fields validation", + "testMethodName": "assure_before_method_of_first_test_is_executed_after_guaranteed_fields_validation", + "description": "assure before method of first test is executed after guaranteed fields validation", "tagIds": [], "explicitParameters": [], "derivedParameters": [], From 6157119fd3959085579b0f15a1b8129f2f4c127d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 11:27:33 +0100 Subject: [PATCH 07/45] code format --- .../components/Scenarios/ScenarioOverview.tsx | 35 +++++++++++-------- .../Scenarios/SingleScenarioView.tsx | 5 --- 2 files changed, 20 insertions(+), 20 deletions(-) delete mode 100644 new/src/components/Scenarios/SingleScenarioView.tsx diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 84ba936c..ac7ebd2d 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -1,17 +1,22 @@ -import { ReportStatistics, ScenarioModel } from "../../reportModel"; -import { MenuBar, ScenarioHead } from "../ScenarioOverview/ScenarioHead"; -import { Scenario } from "./Scenario"; -import { useState } from "react"; -import { Grid } from "@mui/material"; +import {ReportStatistics, ScenarioModel} from "../../reportModel"; +import {MenuBar, ScenarioHead} from "../ScenarioOverview/ScenarioHead"; +import {Scenario} from "./Scenario"; +import {useState} from "react"; +import {Grid} from "@mui/material"; -export function ScenarioOverview(props: { reportName: string, title: string, description: string, scenarios: ScenarioModel[] }) { +export function ScenarioOverview(props: { + reportName: string, + title: string, + description: string, + scenarios: ScenarioModel[] +}) { const [expanded, setExpanded] = useState(false); return ( <> -
- +
+
@@ -19,7 +24,7 @@ export function ScenarioOverview(props: { reportName: string, title: string, des {/* Workshop: Extract to new component. */} -
+
-
- {props.scenarios.map((scenario) => { - return ( +
+ {props.scenarios.map((scenario) => { + return ( - ); - }) } + ); + })}
@@ -87,7 +92,7 @@ function createStatistics(scenarios: ScenarioModel[]): ReportStatistics { // findNumberOfCasesWithStatus(scenario.scenarioCases, "SCENARIO_PENDING") //), numSuccessfulScenarios: 1, - //Math.sign( + //Math.sign( // findNumberOfCasesWithStatus(scenario.scenarioCases, "SUCCESS") //) }; diff --git a/new/src/components/Scenarios/SingleScenarioView.tsx b/new/src/components/Scenarios/SingleScenarioView.tsx deleted file mode 100644 index 67c9cc64..00000000 --- a/new/src/components/Scenarios/SingleScenarioView.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import {ScenarioProps} from "./Scenario"; - -export function SingleScenarioView(scenario: ScenarioProps) { - -} \ No newline at end of file From a9f721be70c9ae8773dfb22f915c424d4d4faac4 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:34:21 +0100 Subject: [PATCH 08/45] Add a complete JGiven Report Signed-off-by: unknown <30831153+l-1squared@users.noreply.github.com> --- new/resources/jgivenReport.json5 | 20537 +++++++++++++++++++++++++++++ 1 file changed, 20537 insertions(+) create mode 100644 new/resources/jgivenReport.json5 diff --git a/new/resources/jgivenReport.json5 b/new/resources/jgivenReport.json5 new file mode 100644 index 00000000..274380a8 --- /dev/null +++ b/new/resources/jgivenReport.json5 @@ -0,0 +1,20537 @@ +{ + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "name": "J Unit 5 Executor", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "after_stage_methods_of_stages_following_failing_stages_are_ignored", + "description": "after stage methods of stages following failing stages are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 429103, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 413003, + "depth": 0, + "parentFailed": false + }, + { + "name": "stage $ has a failing after stage method", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "stage" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a failing after stage method" + } + ], + "status": "PASSED", + "durationInNanos": 297902, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 1022008, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 518574231, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 1932714, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 1136408, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 287102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 525725382 + } + ], + "casesAsTable": false, + "durationInNanos": 525725382, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "tests_with_scenario_modifications_in_after_method", + "description": "tests with scenario modifications in after method", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "junit5 tests with scenario modifications in after method", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "junit5 tests with scenario modifications in after method" + } + ], + "status": "PASSED", + "durationInNanos": 653305, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 88779139, + "depth": 0, + "parentFailed": false + }, + { + "name": "each scenario contains $ cases", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "each scenario contains" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nParameters", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 451903, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 91778960 + } + ], + "casesAsTable": false, + "durationInNanos": 91778960, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "tests_with_a_per_class_lifecycle", + "description": "tests with a per class lifecycle", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "junit5 test class with a per class lifecycle", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "junit5 test class with a per class lifecycle" + } + ], + "status": "PASSED", + "durationInNanos": 532404, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 26956794, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "JGiven does not support keeping a test instance over multiple scenarios", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "JGiven does not support keeping a test instance over multiple scenarios" + } + } + ], + "status": "PASSED", + "durationInNanos": 1995814, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 30877622 + } + ], + "casesAsTable": false, + "durationInNanos": 30877622, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "all_steps_of_stages_following_failing_stages_are_ignored", + "description": "all steps of stages following failing stages are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 320702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 1719513, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 806406, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 7550454, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 84701, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 343802, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 268802, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 12169888 + } + ], + "casesAsTable": false, + "durationInNanos": 12169888, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "a_valid_report_is_generated_for_classes_that_are_disabled", + "description": "a valid report is generated for classes that are disabled", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.Issue-#25" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class with all tests ignored", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class with all tests ignored" + } + ], + "status": "PASSED", + "durationInNanos": 44600, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 16082716, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model is either null or empty", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model is either null or empty" + } + ], + "status": "PASSED", + "durationInNanos": 75400, + "extendedDescription": "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", + "depth": 0, + "parentFailed": false + }, + { + "name": "has a valid class name if it is not null", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "has a valid class name if it is not null" + } + ], + "status": "PASSED", + "durationInNanos": 49000, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 18005730 + } + ], + "casesAsTable": false, + "durationInNanos": 18005730, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#25" + } + ], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "steps_following_failing_steps_are_reported_as_skipped", + "description": "steps following failing steps are reported as skipped", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "3" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 2099415, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 266502, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 22164560, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 460003, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 269602, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "3" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 753505, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 27159096 + } + ], + "casesAsTable": false, + "durationInNanos": 27159096, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + "description": "exception in scenario is not hidden by exception in JUnit after method", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.Issue-#49" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class with a failing scenario and a failing after stage", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class with a failing scenario and a failing after stage" + } + ], + "status": "PASSED", + "durationInNanos": 40400, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 62267448, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "assertion failed in test step", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "assertion failed in test step" + } + } + ], + "status": "PASSED", + "durationInNanos": 585004, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 65271169 + } + ], + "casesAsTable": false, + "durationInNanos": 65271169, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#49", + "description": "Scenarios of Issue #49" + } + ], + "classTitle": "J Unit 5 Executor" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.TestScenarios", + "name": "Test Scenarios", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.TestScenarios", + "testMethodName": "test_with_tag_annotation", + "description": "test with tag annotation", + "tagIds": [ + "com.tngtech.jgiven.tests.TestTag-testValue" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 22100, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 356203 + } + ], + "casesAsTable": false, + "durationInNanos": 356203, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "testValue" + } + ], + "classTitle": "Test Scenarios" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + "name": "J Unit 5 After Method", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + "testMethodName": "a_failing_JUnit_5_test", + "description": "a failing JUnit 5 test", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 447503, + "depth": 0, + "parentFailed": false + }, + { + "name": "a step fails", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "a step fails" + } + ], + "status": "FAILED", + "durationInNanos": 714006, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happened", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "something happened" + } + ], + "status": "SKIPPED", + "durationInNanos": 0, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "FAILED", + "errorMessage": "java.lang.AssertionError: assertion failed in test step", + "stackTrace": [ + "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", + "com.tngtech.jgiven.tests.JUnit5AfterMethodTests.a_failing_JUnit_5_test(JUnit5AfterMethodTests.java:24)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", + "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", + "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", + "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", + "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", + "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", + "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.tests_with_scenario_modifications_in_after_method(JUnit5ExecutorTest.java:19)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", + "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", + "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", + "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", + "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", + "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", + "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", + "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", + "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", + "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", + "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", + "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", + "org.junit.rules.RunRules.evaluate(RunRules.java:20)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", + "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", + "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", + "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", + "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", + "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" + ], + "durationInNanos": 7239852 + } + ], + "casesAsTable": false, + "durationInNanos": 7239852, + "executionStatus": "FAILED", + "tags": [], + "classTitle": "J Unit 5 After Method" + }, + { + "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + "testMethodName": "a_succeeding_JUnit5_test", + "description": "a succeeding JUnit5 test", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 78000, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happens", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "something happens" + } + ], + "status": "PASSED", + "durationInNanos": 92301, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happened", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "something happened" + } + ], + "status": "PASSED", + "durationInNanos": 1700312, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 8255559 + } + ], + "casesAsTable": false, + "durationInNanos": 8255559, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "J Unit 5 After Method" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", + "name": "Report Configuration", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", + "testMethodName": "jgiven_report_directory_is_set_via_a_system_property", + "description": "jgiven report directory is set via a system property", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a set system property", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a set system property" + }, + { + "value": "jgiven.report.dir", + "argumentInfo": { + "argumentName": "key", + "formattedValue": "jgiven.report.dir" + } + }, + { + "value": "/tmp/junit9611904619136189853/junit11940332615471196075", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "/tmp/junit9611904619136189853/junit11940332615471196075" + } + } + ], + "status": "PASSED", + "durationInNanos": 363103, + "depth": 0, + "parentFailed": false + }, + { + "name": "a set system property", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a set system property" + }, + { + "value": "jgiven.report.enabled", + "argumentInfo": { + "argumentName": "key", + "formattedValue": "jgiven.report.enabled" + } + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 164101, + "depth": 0, + "parentFailed": false + }, + { + "name": "a Test scenario", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a Test scenario" + } + ], + "status": "PASSED", + "durationInNanos": 36300, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with junit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with junit" + } + ], + "status": "PASSED", + "durationInNanos": 4571533, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report is written to", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report is written to" + }, + { + "value": "/tmp/junit9611904619136189853/junit11940332615471196075", + "argumentInfo": { + "argumentName": "file", + "formattedValue": "/tmp/junit9611904619136189853/junit11940332615471196075" + } + } + ], + "status": "PASSED", + "durationInNanos": 542004, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 7318053 + } + ], + "casesAsTable": false, + "durationInNanos": 7318053, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Report Configuration" + }, + { + "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", + "testMethodName": "jgiven_report_is_disabled_by_a_system_property", + "description": "jgiven report is disabled by a system property", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a set system property", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a set system property" + }, + { + "value": "jgiven.report.dir", + "argumentInfo": { + "argumentName": "key", + "formattedValue": "jgiven.report.dir" + } + }, + { + "value": "/tmp/junit10598170150625581602/junit5361371470546127836", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "/tmp/junit10598170150625581602/junit5361371470546127836" + } + } + ], + "status": "PASSED", + "durationInNanos": 391403, + "depth": 0, + "parentFailed": false + }, + { + "name": "a set system property", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a set system property" + }, + { + "value": "jgiven.report.enabled", + "argumentInfo": { + "argumentName": "key", + "formattedValue": "jgiven.report.enabled" + } + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 128201, + "depth": 0, + "parentFailed": false + }, + { + "name": "a Test scenario", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a Test scenario" + } + ], + "status": "PASSED", + "durationInNanos": 30000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with junit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with junit" + } + ], + "status": "PASSED", + "durationInNanos": 2136916, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report is not written to", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report is not written to" + }, + { + "value": "/tmp/junit10598170150625581602/junit5361371470546127836", + "argumentInfo": { + "argumentName": "file", + "formattedValue": "/tmp/junit10598170150625581602/junit5361371470546127836" + } + } + ], + "status": "PASSED", + "durationInNanos": 196901, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 3318923 + } + ], + "casesAsTable": false, + "durationInNanos": 3318923, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Report Configuration" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.ReportGeneratorTest", + "name": "Report Generator", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.ReportGeneratorTest", + "testMethodName": "the_exclude_empty_scenarios_option_is_evaluated", + "description": "the exclude empty scenarios option is evaluated", + "tagIds": [], + "explicitParameters": [ + "excludeEmptyScenarios", + "expectedScenarios" + ], + "derivedParameters": [ + "excludeEmptyScenarios", + "expectedScenarios" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 271902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report has $ scenarios", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report has" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "1" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 4891435, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "1" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 403303, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has no steps", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has no steps" + } + ], + "status": "PASSED", + "durationInNanos": 328503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2571118, + "depth": 0, + "parentFailed": false + }, + { + "name": "the exclude empty scenarios option is set to", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the exclude empty scenarios option is set to" + }, + { + "value": "true", + "argumentInfo": { + "parameterName": "excludeEmptyScenarios", + "argumentName": "excludeEmptyScenarios", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 4529432, + "depth": 0, + "parentFailed": false + }, + { + "name": "reading the report model", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "reading the report model" + } + ], + "status": "PASSED", + "durationInNanos": 32959237, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model contains $ scenarios", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model contains" + }, + { + "value": "0", + "argumentInfo": { + "parameterName": "expectedScenarios", + "argumentName": "nScenarios", + "formattedValue": "0" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 3557626, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "true", + "0" + ], + "derivedArguments": [ + "true", + "0" + ], + "status": "SUCCESS", + "durationInNanos": 62639251 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "false", + "1" + ], + "derivedArguments": [ + "false", + "1" + ], + "status": "SUCCESS", + "durationInNanos": 19401140 + } + ], + "casesAsTable": true, + "durationInNanos": 82040391, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Report Generator" + }, + { + "className": "com.tngtech.jgiven.report.ReportGeneratorTest", + "testMethodName": "empty_report_files_are_excluded_when_the_exclude_empty_scenarios_option_is_set", + "description": "empty report files are excluded when the exclude empty scenarios option is set", + "tagIds": [], + "explicitParameters": [ + "excludeEmptyScenarios", + "expectedReports" + ], + "derivedParameters": [ + "excludeEmptyScenarios", + "expectedReports" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with name", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a report model with name" + }, + { + "value": "non empty report model", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "non empty report model" + } + } + ], + "status": "PASSED", + "durationInNanos": 843506, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report has $ scenarios", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 2889021, + "depth": 0, + "parentFailed": false + }, + { + "name": "a report model with name", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a report model with name" + }, + { + "value": "empty report model", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "empty report model" + } + } + ], + "status": "PASSED", + "durationInNanos": 2228416, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report has $ scenarios", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report has" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "1" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 487604, + "depth": 0, + "parentFailed": false + }, + { + "name": "scenario $ has no steps", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has no steps" + } + ], + "status": "PASSED", + "durationInNanos": 377303, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3361524, + "depth": 0, + "parentFailed": false + }, + { + "name": "the exclude empty scenarios option is set to", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the exclude empty scenarios option is set to" + }, + { + "value": "true", + "argumentInfo": { + "parameterName": "excludeEmptyScenarios", + "argumentName": "excludeEmptyScenarios", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 206701, + "depth": 0, + "parentFailed": false + }, + { + "name": "reading the report model", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "reading the report model" + } + ], + "status": "PASSED", + "durationInNanos": 4373531, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model contains $ reports", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model contains" + }, + { + "value": "1", + "argumentInfo": { + "parameterName": "expectedReports", + "argumentName": "nReports", + "formattedValue": "1" + } + }, + { + "value": "reports" + } + ], + "status": "PASSED", + "durationInNanos": 376102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "true", + "1" + ], + "derivedArguments": [ + "true", + "1" + ], + "status": "SUCCESS", + "durationInNanos": 18750835 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "false", + "2" + ], + "derivedArguments": [ + "false", + "2" + ], + "status": "SUCCESS", + "durationInNanos": 10725677 + } + ], + "casesAsTable": true, + "durationInNanos": 29476512, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Report Generator" + } + ] + }, + { + "className": "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", + "name": "Lambda Generating Step", + "scenarios": [ + { + "className": "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", + "testMethodName": "lambda_steps_work", + "description": "lambda steps work", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "some lambda step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "some lambda step" + }, + { + "value": "5", + "argumentInfo": { + "argumentName": "a", + "formattedValue": "5" + } + }, + { + "value": "4", + "argumentInfo": { + "argumentName": "b", + "formattedValue": "4" + } + } + ], + "status": "PASSED", + "durationInNanos": 873706, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1258209 + } + ], + "casesAsTable": false, + "durationInNanos": 1258209, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Lambda Generating Step" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.TestClassWithDescription", + "name": "Test Class With Description", + "description": "Test Description", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.TestClassWithDescription", + "testMethodName": "some_test", + "description": "some test", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 22801, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happens", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "something happens" + } + ], + "status": "PASSED", + "durationInNanos": 33200, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happened", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "something happened" + } + ], + "status": "PASSED", + "durationInNanos": 16400, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 408103 + } + ], + "casesAsTable": false, + "durationInNanos": 408103, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Test Class With Description" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "name": "HTML App", + "description": "Tests against the generated HTML5 App using WebDriver", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "the_statistics_on_the_welcome_page_of_the_HTML5_report_is_correct", + "description": "the statistics on the welcome page of the HTML5 report is correct", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 281402, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report has $ scenarios", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report has" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "3" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 480203, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has status" + }, + { + "value": "FAILED", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "FAILED" + } + } + ], + "status": "PASSED", + "durationInNanos": 424003, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2636719, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 123612487, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 449212023, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment27.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page statistics line contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page statistics line contains text" + }, + { + "value": "3 Total", + "argumentInfo": { + "argumentName": "text", + "formattedValue": "3 Total" + } + } + ], + "status": "PASSED", + "durationInNanos": 58590120, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page statistics line contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the page statistics line contains text" + }, + { + "value": "2 Successful", + "argumentInfo": { + "argumentName": "text", + "formattedValue": "2 Successful" + } + } + ], + "status": "PASSED", + "durationInNanos": 29216609, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page statistics line contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the page statistics line contains text" + }, + { + "value": "1 Failed", + "argumentInfo": { + "argumentName": "text", + "formattedValue": "1 Failed" + } + } + ], + "status": "PASSED", + "durationInNanos": 26861492, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page statistics line contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the page statistics line contains text" + }, + { + "value": "0 Pending", + "argumentInfo": { + "argumentName": "text", + "formattedValue": "0 Pending" + } + } + ], + "status": "PASSED", + "durationInNanos": 47881043, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 950393019 + } + ], + "casesAsTable": false, + "durationInNanos": 950393019, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {} + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "extended_description_should_handle_every_case_correctly", + "description": "extended description should handle every case correctly", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#236" + ], + "explicitParameters": [ + "description", + "value", + "parameterNames", + "parameterValues", + "expectedValue" + ], + "derivedParameters": [ + "value", + "argumentMap", + "expectedValue" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 316302, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$1", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$1" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 585104, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 4645033, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 61152438, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 317361077, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 767152104, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment6.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 22650262, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "1", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "1" + } + } + ], + "status": "PASSED", + "durationInNanos": 46105331, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder with index", + "$1", + "[a, b]", + "[1, 2]", + "1" + ], + "derivedArguments": [ + "$1", + "{a=1, b=2}", + "1" + ], + "status": "SUCCESS", + "durationInNanos": 1372439046, + "description": "Placeholder with index" + }, + { + "caseNr": 2, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 236302, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 460203, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2466618, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51597870, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 304909188, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 689726248, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment7.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 20214045, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "1", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "1" + } + } + ], + "status": "PASSED", + "durationInNanos": 22485061, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder without index", + "$", + "[a, b]", + "[1, 2]", + "1" + ], + "derivedArguments": [ + "$", + "{a=1, b=2}", + "1" + ], + "status": "SUCCESS", + "durationInNanos": 1276945562, + "description": "Placeholder without index" + }, + { + "caseNr": 3, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 161701, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$$", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$$" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 1202809, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2317717, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 58046417, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 326809645, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 673276331, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment8.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13930000, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "$", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "$" + } + } + ], + "status": "PASSED", + "durationInNanos": 15273210, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Escaped placeholder", + "$$", + "[a, b]", + "[1, 2]", + "$" + ], + "derivedArguments": [ + "$$", + "{a=1, b=2}", + "$" + ], + "status": "SUCCESS", + "durationInNanos": 1246449143, + "description": "Escaped placeholder" + }, + { + "caseNr": 4, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 182901, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$2 + $1", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$2 + $1" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 316503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2839020, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51293968, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 299313848, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 675541547, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment9.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 20374246, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "2 + 1", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "2 + 1" + } + } + ], + "status": "PASSED", + "durationInNanos": 16192616, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Multiple placeholders with switch order", + "$2 + $1", + "[a, b]", + "[1, 2]", + "2 + 1" + ], + "derivedArguments": [ + "$2 + $1", + "{a=1, b=2}", + "2 + 1" + ], + "status": "SUCCESS", + "durationInNanos": 1214738015, + "description": "Multiple placeholders with switch order" + }, + { + "caseNr": 5, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 424904, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "a = $1 and b = $2", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "a = $1 and b = $2" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 332302, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2311316, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 60748735, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 298025938, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 670729512, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment10.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 12422390, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "a = 1 and b = 2", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "a = 1 and b = 2" + } + } + ], + "status": "PASSED", + "durationInNanos": 17558626, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders with additional text", + "a = $1 and b = $2", + "[a, b]", + "[1, 2]", + "a = 1 and b = 2" + ], + "derivedArguments": [ + "a = $1 and b = $2", + "{a=1, b=2}", + "a = 1 and b = 2" + ], + "status": "SUCCESS", + "durationInNanos": 1210780487, + "description": "Placeholders with additional text" + }, + { + "caseNr": 6, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 209902, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "int = $int and str = $str and bool = $bool", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "int = $int and str = $str and bool = $bool" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 335702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 4431232, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 55630399, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 305683493, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 675913309, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment11.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13307887, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "int = 1 and str = some string and bool = true", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "int = 1 and str = some string and bool = true" + } + } + ], + "status": "PASSED", + "durationInNanos": 15552702, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders references by argument names in order", + "int = $int and str = $str and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "int = 1 and str = some string and bool = true" + ], + "derivedArguments": [ + "int = $int and str = $str and bool = $bool", + "{int=1, str=some string, bool=true}", + "int = 1 and str = some string and bool = true" + ], + "status": "SUCCESS", + "durationInNanos": 1239772143, + "description": "Placeholders references by argument names in order" + }, + { + "caseNr": 7, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 165201, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "str = $str and int = $int and bool = $bool", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "str = $str and int = $int and bool = $bool" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 321902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2998819, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 45726401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 305293513, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 665369488, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment12.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13382888, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "str = some string and int = 1 and bool = true", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "str = some string and int = 1 and bool = true" + } + } + ], + "status": "PASSED", + "durationInNanos": 15024299, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders references by argument names in mixed order", + "str = $str and int = $int and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "str = some string and int = 1 and bool = true" + ], + "derivedArguments": [ + "str = $str and int = $int and bool = $bool", + "{int=1, str=some string, bool=true}", + "str = some string and int = 1 and bool = true" + ], + "status": "SUCCESS", + "durationInNanos": 1199404609, + "description": "Placeholders references by argument names in mixed order" + }, + { + "caseNr": 8, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 198301, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "str = $str and int = $1 and bool = $bool", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "str = $str and int = $1 and bool = $bool" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 426403, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2485617, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 42869483, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 308050531, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 681006890, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment13.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 15642303, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "str = some string and int = 1 and bool = true", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "str = some string and int = 1 and bool = true" + } + } + ], + "status": "PASSED", + "durationInNanos": 15591102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders references by argument names and enumeration", + "str = $str and int = $1 and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "str = some string and int = 1 and bool = true" + ], + "derivedArguments": [ + "str = $str and int = $1 and bool = $bool", + "{int=1, str=some string, bool=true}", + "str = some string and int = 1 and bool = true" + ], + "status": "SUCCESS", + "durationInNanos": 1215565216, + "description": "Placeholders references by argument names and enumeration" + }, + { + "caseNr": 9, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 431703, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "bool = $3 and str = $2 and int = $int", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "bool = $3 and str = $2 and int = $int" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 402503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2770619, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51377239, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 305378814, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 675967358, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment14.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 17210813, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "bool = true and str = some string and int = 1", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "bool = true and str = some string and int = 1" + } + } + ], + "status": "PASSED", + "durationInNanos": 16482208, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders references by argument names and enumerations ", + "bool = $3 and str = $2 and int = $int", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and str = some string and int = 1" + ], + "derivedArguments": [ + "bool = $3 and str = $2 and int = $int", + "{int=1, str=some string, bool=true}", + "bool = true and str = some string and int = 1" + ], + "status": "SUCCESS", + "durationInNanos": 1218626936, + "description": "Placeholders references by argument names and enumerations " + }, + { + "caseNr": 10, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 178601, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "bool = $bool and int = $ and str = $", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "bool = $bool and int = $ and str = $" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 284001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 4179927, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 46778508, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 314210972, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 677886570, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment15.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13622490, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "bool = true and int = 1 and str = some string", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "bool = true and int = 1 and str = some string" + } + } + ], + "status": "PASSED", + "durationInNanos": 18965425, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder without index mixed with names", + "bool = $bool and int = $ and str = $", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and int = 1 and str = some string" + ], + "derivedArguments": [ + "bool = $bool and int = $ and str = $", + "{int=1, str=some string, bool=true}", + "bool = true and int = 1 and str = some string" + ], + "status": "SUCCESS", + "durationInNanos": 1228791003, + "description": "Placeholder without index mixed with names" + }, + { + "caseNr": 11, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 188601, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "bool = $bool and str = $2 and int = $ and str = $ and bool = $3" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 355003, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2395016, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 48410520, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 311125651, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 686336981, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment16.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 14212602, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "bool = true and str = some string and int = 1 and str = some string and bool = true", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "bool = true and str = some string and int = 1 and str = some string and bool = true" + } + } + ], + "status": "PASSED", + "durationInNanos": 17461625, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder without index mixed with names and index", + "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and str = some string and int = 1 and str = some string and bool = true" + ], + "derivedArguments": [ + "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + "{int=1, str=some string, bool=true}", + "bool = true and str = some string and int = 1 and str = some string and bool = true" + ], + "status": "SUCCESS", + "durationInNanos": 1241979954, + "description": "Placeholder without index mixed with names and index" + }, + { + "caseNr": 12, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 246002, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "bool = $bool and not known = $unknown and unknown = $10", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "bool = $bool and not known = $unknown and unknown = $10" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 365503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1920713, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 48820750, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 315670462, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 669488097, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment17.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 12621691, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "bool = true and not known = 1 and unknown = some string", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "bool = true and not known = 1 and unknown = some string" + } + } + ], + "status": "PASSED", + "durationInNanos": 15478511, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder with unknown argument names get erased", + "bool = $bool and not known = $unknown and unknown = $10", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and not known = 1 and unknown = some string" + ], + "derivedArguments": [ + "bool = $bool and not known = $unknown and unknown = $10", + "{int=1, str=some string, bool=true}", + "bool = true and not known = 1 and unknown = some string" + ], + "status": "SUCCESS", + "durationInNanos": 1212468686, + "description": "Placeholder with unknown argument names get erased" + }, + { + "caseNr": 13, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 264802, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$]", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$]" + } + }, + { + "value": "{int=1}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1}" + } + } + ], + "status": "PASSED", + "durationInNanos": 297902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2719919, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51976472, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 327352144, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 669318992, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment18.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13244095, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "1 ]", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "1 ]" + } + } + ], + "status": "PASSED", + "durationInNanos": 14695105, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Non-Java-Identifier char does trigger a space after a placeholder", + "$]", + "[int]", + "[1]", + "1 ]" + ], + "derivedArguments": [ + "$]", + "{int=1}", + "1 ]" + ], + "status": "SUCCESS", + "durationInNanos": 1228704298, + "description": "Non-Java-Identifier char does trigger a space after a placeholder" + } + ], + "casesAsTable": true, + "durationInNanos": 16106665098, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#236", + "description": "Scenarios of Issue #236" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "timings_greater_than_10_millis_are_displayed", + "description": "timings greater than 10 millis are displayed", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#755" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 166502, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario took $ nanos", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "0", + "argumentInfo": { + "argumentName": "step", + "formattedValue": "0" + } + }, + { + "value": "of scenario took" + }, + { + "value": "11000000", + "argumentInfo": { + "argumentName": "durationInNanos", + "formattedValue": "11000000" + } + }, + { + "value": "nanos" + } + ], + "status": "PASSED", + "durationInNanos": 407902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3631926, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 60227331, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 373285172, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment29.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the $ th element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "index", + "formattedValue": "2" + } + }, + { + "value": "th element with a" + }, + { + "value": "duration", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "duration" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 39887185, + "depth": 0, + "parentFailed": false + }, + { + "name": "has content", + "words": [ + { + "value": "has content" + }, + { + "value": "(11ms)", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "(11ms)" + } + } + ], + "status": "PASSED", + "durationInNanos": 14381103, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 661261734 + } + ], + "casesAsTable": false, + "durationInNanos": 661261734, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#755", + "description": "Scenarios of Issue #755" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "the_configured_title_appears_in_the_generated_HTML_report", + "description": "the configured title appears in the generated HTML report", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 164001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2092815, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed with title", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed with title" + }, + { + "value": "Test Title", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Test Title" + } + } + ], + "status": "PASSED", + "durationInNanos": 49715956, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 281061513, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment26.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the report title is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report title is" + }, + { + "value": "Test Title", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Test Title" + } + } + ], + "status": "PASSED", + "durationInNanos": 40468590, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 540024066 + } + ], + "casesAsTable": false, + "durationInNanos": 540024066, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {} + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "attachments_of_all_cases_appear_in_the_HTML5_report_when_having_a_data_table", + "description": "attachments of all cases appear in the HTML5 report when having a data table", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#191", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 1207509, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has one parameter", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has one parameter" + } + ], + "status": "PASSED", + "durationInNanos": 183301, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 3160522, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has a text attachment", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has a text attachment" + } + ], + "status": "PASSED", + "durationInNanos": 422403, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has a text attachment", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "has a text attachment" + } + ], + "status": "PASSED", + "durationInNanos": 290702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2415218, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 74045430, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 420960014, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment3.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "$ attachment icons exist", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nrIcons", + "formattedValue": "2" + } + }, + { + "value": "attachment icons exist" + } + ], + "status": "PASSED", + "durationInNanos": 19781842, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 700520815 + } + ], + "casesAsTable": false, + "durationInNanos": 700520815, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#191", + "description": "Scenarios of Issue #191" + }, + {} + ], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:611" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "attachments_appear_in_the_HTML5_report", + "description": "attachments appear in the HTML5 report", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 218202, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has a text attachment with content", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has a text attachment with content" + }, + { + "value": "Some Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 492203, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2025415, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 50000158, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 303408873, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment2.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an attachment icon exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an attachment icon exists" + } + ], + "status": "PASSED", + "durationInNanos": 50330961, + "depth": 0, + "parentFailed": false + }, + { + "name": "the content of the attachment referenced by the icon is", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the content of the attachment referenced by the icon is" + }, + { + "value": "Some Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 62382446, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 604436927 + } + ], + "casesAsTable": false, + "durationInNanos": 604436927, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {} + ], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:610" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "newlines_are_detected_in_formatted_values_and_shown_as_multiline_text", + "description": "newlines are detected in formatted values and shown as multiline text", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#226" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 713805, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has a formatted value $ as parameter", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has a formatted value" + }, + { + "value": "Some \n text \n with \n newlines", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "Some \n text \n with \n newlines" + } + }, + { + "value": "as parameter" + } + ], + "status": "PASSED", + "durationInNanos": 380702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2332317, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 52677477, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 314986155, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment21.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "multiline", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "multiline" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 21750056, + "depth": 0, + "parentFailed": false + }, + { + "name": "has content", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "has content" + }, + { + "value": "Some \n text \n with \n newlines", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some \n text \n with \n newlines" + } + } + ], + "status": "PASSED", + "durationInNanos": 25570883, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 550235739 + } + ], + "casesAsTable": false, + "durationInNanos": 550235739, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#226", + "description": "Scenarios of Issue #226" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "tags_with_custom_styles_are_shown_correctly", + "description": "tags with custom styles are shown correctly", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 221501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the first scenario has tag", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the first scenario has tag" + }, + { + "value": "TagWithCustomStyle", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "TagWithCustomStyle" + } + } + ], + "status": "PASSED", + "durationInNanos": 504004, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag has style", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag has style" + }, + { + "value": "background-color: black;", + "argumentInfo": { + "argumentName": "style", + "formattedValue": "background-color: black;" + } + } + ], + "status": "PASSED", + "durationInNanos": 255501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2015314, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 62243245, + "depth": 0, + "parentFailed": false + }, + { + "name": "the All Scenarios page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the All Scenarios page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 295224814, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment25.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page contains tag", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page contains tag" + }, + { + "value": "TagWithCustomStyle", + "argumentInfo": { + "argumentName": "tagName", + "formattedValue": "TagWithCustomStyle" + } + } + ], + "status": "PASSED", + "durationInNanos": 70239303, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag has style", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag has style" + }, + { + "value": "background-color: black;", + "argumentInfo": { + "argumentName": "style", + "formattedValue": "background-color: black;" + } + } + ], + "status": "PASSED", + "durationInNanos": 39512383, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 666160769 + } + ], + "casesAsTable": false, + "durationInNanos": 666160769, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {} + ], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:614" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "navigation_links_of_the_HTML_report_can_be_customized_using_a_custom_JS_file", + "description": "navigation links of the HTML report can be customized using a custom JS file", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#146" + ], + "explicitParameters": [ + "title", + "href" + ], + "derivedParameters": [ + "content", + "text", + "href" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 396502, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1850313, + "depth": 0, + "parentFailed": false + }, + { + "name": "a custom JS file with content", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a custom JS file with content" + }, + { + "value": "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", + "argumentInfo": { + "parameterName": "content", + "argumentName": "content", + "formattedValue": "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});" + } + } + ], + "status": "PASSED", + "durationInNanos": 528704, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 47137237, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 261387171, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment19.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the navigation menu has a link with text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the navigation menu has a link with text" + }, + { + "value": "JGIVEN DOCUMENTATION", + "argumentInfo": { + "parameterName": "text", + "argumentName": "text", + "formattedValue": "JGIVEN DOCUMENTATION" + } + } + ], + "status": "PASSED", + "durationInNanos": 41256496, + "depth": 0, + "parentFailed": false + }, + { + "name": "href", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "href" + }, + { + "value": "http://jgiven.org/docs", + "argumentInfo": { + "parameterName": "href", + "argumentName": "href", + "formattedValue": "http://jgiven.org/docs" + } + } + ], + "status": "PASSED", + "durationInNanos": 16444717, + "depth": 0, + "parentFailed": false + }, + { + "name": "target", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "target" + }, + { + "value": "_blank", + "argumentInfo": { + "argumentName": "target", + "formattedValue": "_blank" + } + } + ], + "status": "PASSED", + "durationInNanos": 15038808, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JGiven Documentation", + "http://jgiven.org/docs" + ], + "derivedArguments": [ + "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", + "JGIVEN DOCUMENTATION", + "http://jgiven.org/docs" + ], + "status": "SUCCESS", + "durationInNanos": 519931923 + }, + { + "caseNr": 2, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 193601, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1778213, + "depth": 0, + "parentFailed": false + }, + { + "name": "a custom JS file with content", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a custom JS file with content" + }, + { + "value": "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", + "argumentInfo": { + "parameterName": "content", + "argumentName": "content", + "formattedValue": "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});" + } + } + ], + "status": "PASSED", + "durationInNanos": 313802, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 53633484, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 306802197, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment20.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the navigation menu has a link with text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the navigation menu has a link with text" + }, + { + "value": "BACK", + "argumentInfo": { + "parameterName": "text", + "argumentName": "text", + "formattedValue": "BACK" + } + } + ], + "status": "PASSED", + "durationInNanos": 38658577, + "depth": 0, + "parentFailed": false + }, + { + "name": "href", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "href" + }, + { + "value": "javascript:window.history.back()", + "argumentInfo": { + "parameterName": "href", + "argumentName": "href", + "formattedValue": "javascript:window.history.back()" + } + } + ], + "status": "PASSED", + "durationInNanos": 13173894, + "depth": 0, + "parentFailed": false + }, + { + "name": "target", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "target" + }, + { + "value": "_blank", + "argumentInfo": { + "argumentName": "target", + "formattedValue": "_blank" + } + } + ], + "status": "PASSED", + "durationInNanos": 13057893, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Back", + "javascript:window.history.back()" + ], + "derivedArguments": [ + "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", + "BACK", + "javascript:window.history.back()" + ], + "status": "SUCCESS", + "durationInNanos": 555928380 + } + ], + "casesAsTable": true, + "durationInNanos": 1075860303, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#146", + "description": "Scenarios of Issue #146" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "the_welcome_page_of_the_HTML5_report_can_be_opened", + "description": "the welcome page of the HTML5 report can be opened", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 143201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3415424, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 45517525, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 257244742, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment28.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page title is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page title is" + }, + { + "value": "Welcome", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Welcome" + } + } + ], + "status": "PASSED", + "durationInNanos": 35213152, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 467277746 + } + ], + "casesAsTable": false, + "durationInNanos": 467277746, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {} + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "clicking_on_tag_labels_opens_the_tag_page", + "description": "clicking on tag labels opens the tag page", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTags-Tags", + "com.tngtech.jgiven.tags.Issue-#47" + ], + "explicitParameters": [ + "prependType", + "tagName" + ], + "derivedParameters": [ + "prependType", + "tagName" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 200202, + "depth": 0, + "parentFailed": false + }, + { + "name": "scenario $ has tag $ with value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has tag" + }, + { + "value": "testtag", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "testtag" + } + }, + { + "value": "with value" + }, + { + "value": "#42", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "#42" + } + } + ], + "status": "PASSED", + "durationInNanos": 293202, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag has prependType set to", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag has prependType set to" + }, + { + "value": "true", + "argumentInfo": { + "parameterName": "prependType", + "argumentName": "prependType", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 255602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 6502846, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 48201245, + "depth": 0, + "parentFailed": false + }, + { + "name": "the All Scenarios page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the All Scenarios page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 298958541, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag with name $ is clicked", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag with name" + }, + { + "value": "testtag-#42", + "argumentInfo": { + "parameterName": "tagName", + "argumentName": "tagName", + "formattedValue": "testtag-#42" + } + }, + { + "value": "is clicked" + } + ], + "status": "PASSED", + "durationInNanos": 138924495, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment4.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page title is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page title is" + }, + { + "value": "testtag-#42", + "argumentInfo": { + "parameterName": "tagName", + "argumentName": "title", + "formattedValue": "testtag-#42" + } + } + ], + "status": "PASSED", + "durationInNanos": 31012722, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "true", + "testtag-#42" + ], + "derivedArguments": [ + "true", + "testtag-#42" + ], + "status": "SUCCESS", + "durationInNanos": 700055312 + }, + { + "caseNr": 2, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 286602, + "depth": 0, + "parentFailed": false + }, + { + "name": "scenario $ has tag $ with value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has tag" + }, + { + "value": "testtag", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "testtag" + } + }, + { + "value": "with value" + }, + { + "value": "#42", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "#42" + } + } + ], + "status": "PASSED", + "durationInNanos": 382203, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag has prependType set to", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag has prependType set to" + }, + { + "value": "false", + "argumentInfo": { + "parameterName": "prependType", + "argumentName": "prependType", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 193101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2983921, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51302168, + "depth": 0, + "parentFailed": false + }, + { + "name": "the All Scenarios page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the All Scenarios page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 298688338, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag with name $ is clicked", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag with name" + }, + { + "value": "#42", + "argumentInfo": { + "parameterName": "tagName", + "argumentName": "tagName", + "formattedValue": "#42" + } + }, + { + "value": "is clicked" + } + ], + "status": "PASSED", + "durationInNanos": 146037746, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment5.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page title is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page title is" + }, + { + "value": "#42", + "argumentInfo": { + "parameterName": "tagName", + "argumentName": "title", + "formattedValue": "#42" + } + } + ], + "status": "PASSED", + "durationInNanos": 30359117, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "false", + "#42" + ], + "derivedArguments": [ + "false", + "#42" + ], + "status": "SUCCESS", + "durationInNanos": 693897168 + } + ], + "casesAsTable": true, + "durationInNanos": 1393952480, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "Tags" + }, + { + "value": "#47", + "description": "Scenarios of Issue #47" + } + ], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:612" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "showing_thumbnails_can_be_configured", + "description": "showing thumbnails can be configured", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#274" + ], + "explicitParameters": [ + "thumbOption" + ], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 306402, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has an image attachment $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has an image attachment" + }, + { + "value": "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lv+h3PtQACgiIiIiIiIiN9Uf6/2RRxo+QnXv6gT5BuHl5eX8ELkdZWVlOT+S05JJykxixuEZLDi+4Kb0pwBQRERERERERG46d6M74X7hdArpRNtqbanlWQuHwUGQOcjVpYlUqAu2C2CHhOwEdpzbwZakLRy0HiTPnnfT+lQAKCIiIiIiIiIiUokZXV2AiIiIiIiIiIiI3DwKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQSUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQMDofDYbVasVqt5Ofnu7oeERERERERERERuUEWiwU/Pz/8/PwwW61WMjIyCr8wm11dm4iIiIiIiIiIiNyggoICMjIyADCmpqbi4+Oj8E9ERERERERERKSSMJvN+Pj4YLVaMRYUFCj8ExERERERERERqWTMZjP5+fnaBERERERERERERKQyUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQUAIqIiIiIiIiIiFRiCgBFREREREREREQqMQWAIiIiIiIiIiIilZgCQBERERERERERkUrM7OoCSmvTpk1cuHABu91OVlYWPj4+ADRp0oSGDRuSnZ3Njz/+SEREBM2aNXPe53A4OHLkCIcPH3YeCwsLo1WrVphMJgB+/fVXTp48idFoJD8/n9q1a9OiRYsKfb7Dhw87a8zIyMDLywuj0UhwcDARERH88MMPVKlSpdg9NWvWpE2bNlitVnbu3El+fj52ux2z2UyHDh3w8/Nj8eLFAOTl5WG32/Hw8ACgRYsW7Nu3D4Ds7GxMJhNubm4YDAb69+8PwJIlS/D29qZnz57F+k1MTGTXrl3k5uZiNBrx9/enbdu2eHt739R3dCVTp05l9OjR5OXl8e233zJq1CjnuZ9++omJEyeybt06AE6dOsWHH35Ieno6RqOR559/vsL/X4uIiIiIiIiIVKQKDwAdDgcbN26kW7du13Vf586dAbBaraxbt47777+/2Pm4uDj8/PyIj48vFgDu27eP8+fPc8899+Dh4UFBQQFbt25l9+7dtG3blqSkJE6dOkWfPn2cAeC6desICwsjICCgTM+4c+dOGjVqVCKwu5rGjRvTuHFjABYsWECvXr2cIWd2djbu7u4lnrnI9u3bCQ8Pp2bNms53sX//fjp37uy858iRI1y4cIHIyEjnfXXr1gUgKiqK0NBQ6tev7zx3/vx57HY7ycnJZGVl4eXlBUBSUhLR0dHcdddd+Pv7OwPW9evX07dv31I/72+V5Z0Vyc/Px2KxsG/fPuc7BDh37hzLli0rFkxOmjSJvn37cs8997Br1y4++ugjZsyYUea6RURERERERERudRUeAFqt1jKFPNcSHx9Phw4d2LJlC+fPn6datWo4HA4OHjxIv379nCPfzGYzkZGRGAwGoHBknMPhwOFwAGCxWLjnnnvKXIfD4SAzM/OmPOOV5ObmOusHqF+/frEwryzi4uKoW7cu6enpxMfH07x5c6BwtGRERAT+/v4AGAwGGjdufEP9lfWd7dq1i1WrVnHo0CEmTZpEbGwsNWrUoFatWjRo0IDJkyfz7LPP8tprrznvGTdunLP24OBg0tPTy1y3iIiIiIiIiMjvQYUHgEXhXHlKSkrC4XAQEhJCvXr1iI+Pp1q1amRkZGCxWEpMTTUa/2/pw7CwMI4fP86PP/5IjRo1CAkJoWbNmri5uZWplosXL+Ln53dDz3O92rRpw+bNmzl48CAhISGEhYURGBhY5vYKCgo4efIkffv2JT09ne3btzsDQKvVetm2zeayfyuV9Z21bt0aT09PwsPDGTBgAJMmTeKVV14BYNGiRdSrV48mTZoUu+fS2mfNmsWAAQPKXLeIiIiIiIiIyO9BhQeAFy5coFWrVuXaZtFoNYB69erx008/0bZtWwwGA3a73XldSkoKGzZsAMBmszFo0CCMRiNdu3YlMzOTxMRETp8+TUxMDL179y5TKJWcnFzuAScUjlRcsmRJsWPt2rUjNDSU0NBQHnjgAc6fP09SUpJzSm+HDh3K1NeJEycICAjAx8cHHx8f7HY7586dIzg4uMQ7XbJkCTabDZvNRvfu3QkKCrru/m7kncXHxzv/3xc5e/YsP/30Ex9//PFl77HZbHz00UfYbDaGDx9epn5FRERERERERH4vKjQAzM/Pp6CgwDkdtzzk5eWRkJCAt7c3CQkJANjtdhISEqhTpw4OhwOr1Yqfnx8BAQEMHDgQgHnz5gGFYZDD4cDb29s5dTYmJobjx48TERFx3fUkJydTp06dcnu+Im5ubs7NOX4rJycHDw8PqlevTvXq1QkPD2fBggW0bdvWudHJ9YiLiyMrK4tly5YBhe8oPj6e4OBg/P39OX/+vHMabVFNv/zyS7Fg8HqU9Z39+OOPLF26lIYNG7JixQoOHz7MpEmTqFGjBllZWbzwwgtA4aYqo0eP5qOPPsLNzY1//vOf1KpViyeffNI5FVxEREREREREpLKq0ADwwoULZd5Y40qOHz9O9erVueuuu4odi42NpW7dujRv3pzo6Gi6du2Kl5enOOPyAAAgAElEQVQXDoeDhIQEZ/CzZ88e8vLy6NChA0ajEbvdjtVqpVatWtddS9F6gmWdPlwWOTk5LF26lF69ejlDudTUVDw8PMoU/lmtVtLT0xk4cKDz/szMTJYvX067du1o0aIF69evx9/f3zlqLyUlBavVisViue7+buSdPfDAA8THx/PKK6+wd+9eWrVqRZ8+fQAYNmyY87r777+fTz/9FIBvv/2WkJAQnnrqqevuT0RERERERETk96hCA8Dk5GSqV69erm3GxcWVGKl3xx13sHPnTjIyMmjSpAkWi4U1a9bgcDgwGAwEBgY6N/qIiIggJiaG5cuXYzQacTgc1KxZs0ybWly4cOGG1t67mstNAfb29qZnz5506dKFrVu3UlBQgNFoxGKxXPcuy0Xi4uKoV69esfDQ29ub4OBgTp48Sb169ejatSsxMTFkZWVhMpnw8vKiY8eOVK1a9br7u5F3ZrPZnOs5Hjp0iI4dO17znnnz5lGlShW2bt3qPPaf//ynxDqRIiIiIiIiIiKVhSE2NtYREhJSIZ1t2LCBzp07l2lk2u/B3r17b3gDjtuN3pmIiIiIiIiIyM2TmJhYsQGgiIiIiIiIiIiIVJzExESMri5CREREREREREREbh4FgCIiIiIiIiIiIpWYAkAREREREREREZFKTAGgiIiIiIiIiIhIJaYAUEREREREREREpBJTACgiIiIiIiIiIlKJKQAUERERERERERGpxIxms5mCggJX1yEiIiIiIiIiIiLlqKCgAIvFgtHPz4+MjAyFgCIiIiIiIiIiIpVEQUEBGRkZ+Pn5Yfb39wfAarWSn5/v4tJERERERERERETkRlksFnx9ffHz88OQl5fncHVBIlI2CQkJ1KtXz9VliIiIiIiIiMgtTJuAiIiIiIiIiIiIVGIKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQS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2rdvz6ZNm/jyyy9JTEzkiSeecNm7ExERERERqUxybDmM3TqWt3a+Ra4t19XlCC4aAdi0aVO6d+/O+vXree+99/Dw8KBevXpERETQo0ePYmv4lZbdbiciIoKoqCgOHDhAnTp1OHr0KAMHDrzsril2u52WLVuyceNGsrOz2b9/P/n5+URERPDLL78Uu/bIkSOcO3eOO++8Ezc3N9q1a8fy5cvZs2cPbdu2LXbt8ePHmTZtGlA4HfHw4cM4HI5iUyD79u3L+vXrWbx4MQUFBTRt2pSOHTte9zOL3EqqVavG66+/XuJ48+bNad68+VXvbdeuHe3atbvqNf369aNfv37Fjo0ePbrY1wEBAYwaNarEva1bt6Z169bOr00mEw8//DAPP/yw81h+fj65ubl4eHhctQ4REREREREpnUXHFrEneQ+TOk2idpXari7ntuaSEYAATz/9NBMnTmTYsGG0aNGCY8eOMXv2bMaOHYvVai1TmxEREZhMJmJiYtizZw8Oh6NEQHepNm3aUFBQwN69e51TC8PDw0tct3nzZgDaty/c1rpDhw7Fjl/q4sWLREdHEx0dzfbt20lLS2PkyJEMGzbMeY3FYmH48OEUFBRgMBh45JFHyvS8IlI2a9asYc6cOcWOxcbGAlCjRg1XlCQiIiIiIlIpHU8/zog1I9iWtM3VpdzWXLYLMBSuw1ezZuGikHl5eUyZMoU9e/awadMm+vbti8VSuGtMVlZWsc0xUlNTAUpMmS0K8H799VesViuBgYHUrVv3iv03b94cDw8P9u/fz+7du2nVqlWJzUfsdrtzc4Bp06Y5R/dB4RTjnJycYiOGWrduzV/+8hcApk6dytatW7l48WKJvoumGnt6elKrVq1rvCkRKU/u7u5ER0fjcDiIiIjAarWyYsUK/P39admypavLExERERERqVSybdk8H/U8EyMn0r1G92vfIOXOJSMAv/32W5588kk2bNjgPObm5uYceVO0W2fR15del5KS4pzSW6dOnRJtt2vXjjNnzrB3796rjv4r6rNly5Zs3ryZtLS0y16/b98+0tLSqF69OnfddZfzo1atWuTl5V12enGRoUOHYjabWbJkCefOnbtqLSJScbp27crgwYM5duwYM2bMYPHixdSpU4fnnntOa3GKiIiIiIjcBAWOAv665a+sOLnC1aXcllwyArB58+asXLmS6dOns2XLFgICAkhOTubXX3/FZDLRqlUrAAYPHsz+/ftZvnw5v/76K35+fhw9epTs7GyaNWt22XXF2rZty9dff01OTs41A8Ci67dt24bFYiEiIgKbzVbsfNE03379+tGzZ0/n8V27dvHhhx+yefNmOnfufNm2g4OD6dOnD8uWLWPmzJm8/PLLpX5HInJzdenShS5duri6DBERERERkduG3WFn/LbxZBdk82C9B11dzm3FJSMAW7duzauvvkqzZs04ceIEGzdu5MSJE0RERPD66687pwXXr1+fcePG0bJlSy5evMjhw4cJCgpi6NCh/OUvf8FgMJRou2jar5eXl3OX0WvVYjQandOBL5WXl8eOHTswm83Odf+KtGzZEl9fX/bu3UtaWtoV2x84cCBVqlRh586d7NmzpzSvR0RERERERESk0no35l3WnFrj6jJuK4a8vDyHq4sQkbJJSEigXr16ri5DREREREREbgHt5rdzdQmlZjaamdZlGu2D27u6lNuCy3YBFhERERERERGR21OBvYCXN73M4dTDri7ltqAAUEREREREREREKly2LZsxG8dwKuOUq0up9BQAioiIiIiIiIiIS6TmpvJ81PPk2nJdXUqlpgBQRERERERERERc5mTGSd7f/b6ry6jUzK4uQEREREREREREbtymBzaRmpdKam4q1jwrqbmFn6fkprDt3Db2Xtjr6hKvaNGxRXQM7sg9te5xdSmVknYBFvkd0y7AIiIiIiIiUlqpuamsO72OX878wvZz28mz57m6pGI8TB58f8/31PCu4epSKh0FgCK/YwoARUREREREpCyyC7KJOhvF4uOL2ZK0xdXlOIVXDWfm3TNdXUalowBQ5HdMAaCIiIiIiIjcqH0X9vHZgc+ITop2dSkAjG42mpFNRrq6jEpFAaDI75gCQBERERERESkv+y7s438H/ufyEYEeJg8W3ruQII8gl9ZRmWgXYBERERERERERoUVgC6Z1ncaHkR/i6+brsjpybDlM3jPZZf1XRhoBKALY7Xby8/MpKChwflzKbDY7PywWC0bjrZGdawSgiIiIiIiI3AzJOcn8bcvf2H1ht8tq+F/3/9GmWhuX9V+ZKACU215ubi6ZmZk4HKX7UTAYDPj4+ODm5naTK7s2BYAiIiIiIiJys9gddr4+/DWfHfiMAnvBtW8oZ/V86zG712xMRlOF913Z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atRA+/btcffuXRw8eBBNmzYVNvfQarV6UxJjYmKwatUqmJubY/HixcJmI3Xr1oWZmRl0Oh3y8vKEXYiJiIiIiIiIiIhMRZULAHU6HS5dugQA+OSTT1CrVi3hmFwux9GjR/Hnn3+ib9++eOONNxASEoIHDx5gzpw5qF+/PiwtLfHkyROkp6dDLpejdevWqFmzJmxsbPDgwQPMmDEDTZo0gUgkwt27d5GXl4e2bdsy/CMiIiIiIiIiIpNU5VKv+/fvIykpCQ0aNNAL/wCgS5cuAP7eIEQsFmPOnDn4z3/+A2dnZzx+/Bj37t2Dra0t3n33XaxYsQKNGzeGSCTCrFmz0K9fP0ilUoSFhSE0NBSWlpbo378/Pvnkk0p/nURERERERERERJVBpFardaWfRkRVUVRUFDfgICIiIiIiIqISVbkRgERERERERERERFRxGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMLGxCyAi05KQlYCxR8Yi6GEQcjQ5JZ4rl8jRt3FffN/3e9jL7CupQqooOp0OmZmZkEgksLS0NHY51Vp2djZCQ0Nx//59pKSkAAAcHR3RuHFjdOzYEVZWVkaukIiIiIiIqjORWq3WGbuI8lizZg3Gjx8PmUyGw4cPo169emjVqpXeOZcvX8aGDRswc+ZMtGjRAgCgUqmwZ88eXL16FSqVCvXq1cMHH3wADw8PY7wMogoRFRWFBg0aGLsMPQN2D8DBewfLdc3I1iPxa/9fiz2elpaGGTNm4MyZMzh8+DCaN29eapuhoaH44YcfcOvWLaSmpsLa2hrt27fH+PHj0aZNm3LVVx18//33+PHHH6HVanH9+vVSz4+MjMTbb7+N3bt3w9vbu1x9PXr0CKGhoXj06BHy8vIAADKZDC1btoSPjw8cHR1LbSM3NxcnT57E3bt3oVKp4O7ujjfffBPu7u7FXrNr1y5ERkYWe3zy5Mll6jshIQHfffcdPvzwQ9SpUwd79uyBUqnEyJEjS722JBs2bEC9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AAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABdbg894AAAD4W5g0Y1b2+sktqU7y9T3+JcMvODVJsrKiMtf+dlTuHzMpf567IJs1bpSu222dH33jgByya8ckyR3PT8ivx07OiB/9+998O99+++386Ec/ykMPPVTr8tdeey3XXntt7rnnnlxzzTWZNGlSkqSqqipJUlZW87f8Y445JnvttVd+9KMf5fDDD89pp51Waz2jRo3KkCFD0rdv3+y///558sknM3HixFx++eUbtX0XXXRRli9fnoEDB5bu869typQpGTJkSLp165YzzzxzvcuNHDkyTzzxRJYsWZJtt902Z511Vrbaaqu1lqusrMx//ud/Zty4camqqspuu+2W73//+2nUqFGd27H6WDRoUPMxqUWLFtlmm21y2GGHpWfPnhu1L2+88UaaNWuWbbfddqOW/7/if7Nfffr0yTnnnJMuXbrUunzw4MHZZpttcuyxx/6vt+/YQffniVdeT2V1dcZfcXa6f2mbJMkDYydn0O/H5L9nzk5ZvXrpuGXbnHnQl9PnkL2TJG/NnpfOFw5MxbAr/9fbsLGefvrp3HPPPenTp0969+693uUef/zx/P73v8/y5cvToUOHnH766dlhhx3WuezGvoaS5A9/+EN++9vfZvHixWnfvn1OO+207Ljjjmut74orrshll11WOm7Tp0/PXXfdlTlz5qR169Y5+eST061btw3u71VXXZXXXnst9erVK112/vnnp1OnTunTp0+tZaurq7PbbrvlkksuyYoVK3Lvvfdm/PjxWbFiRXr37p3TTz899evXr3Wbhx56KA8//PBa76F/baecckoqKipSr169NGnSJFtuuWV69uyZI444ovSe8deyvuO5atWqDBs2LOPGjcuqVavSuXPnnHnmmWnduvUG11nXca/rvXXq1KkZNmxYZs2alRYtWuTYY4/NgQcemCR55ZVX8sADD2Tu3Llp3bp1jjvuuOy7774b3Jbq6uo88MADefbZZ1NRUZEePXrkjDPOSMOGDddatq77nzJlSu69997MmjUrm2++ec4444x07tx5k/d/+PDhGTFiRJKkdevWOe2007L99tuvd/vX93vx2muvzaRJk3LbbbelZcuWtW7Tv3//VFdX5+abb97g4/O3IgACAFBIe2y7VSqGXZmrHn8+f3x7RunyYwbdl5nzFuaX3zs6e22/TVZUVOSR8a/l6IH35qkfnJoDOn8pJ/XaI8d+uUsda//7+tGPflT67+uvvz7bb799jj/++NJlb7/9dlq3bp0xY8bk5JNPrvVh9IUXXkibNm0+0/1OmzYtrVu3TpMmTTJx4sR07979s+/Eerzwwgt55pln1vuhbbV33nkn9913Xy677LJ88YtfzMMPP5xBgwblmmuuWWvZp59+OtOnT88NN9yQhg0b5oYbbshDDz2Uk08+eaO26f7770+SLFy4MOPHj8/tt9+euXPn5sgjj9zgbUeOHJmuXbsWLgD+o+/XI+eemCRpcOqlpcsGPDU61w0flZtP/UYO261TNmvcKKOn/Tnfv+uJzFtSnkuPPihf+kKbfHDzxX+37bz11ltTVVWVrbfeus7lxo4dmxEjRuTKK69M27Zt8+ijj+amm25aZzzY2NdQkkyePDkPPvhgfvrTn2abbbbJE088kZtuuim/+MUvSsssX748d955Z62otHLlytxwww05+eSTs99++2Xy5Mm56aabMmjQoLRq1arO+ywvL88FF1ywzveP1a+11a677rrss88+SZLf/OY3ef/993PjjTemsrIyV199dX7729/m6KOPLi3/5z//OS+99NIG9/uv5Sc/+Um6dOmSZcuWZdq0aRk2bFjeeOONXHzxX+85VNfxfPjhh/Pee+/l5z//eRo2bJhBgwbl3nvvTd++fetcZ13Hva731sWLF+e6667LWWedlX322SdTp07NVVddlZ122imNGjXKoEGDctFFF2XXXXfNlClT8rOf/Sw77rhj2rVrV+f2PP3005kyZUpuvPHGNGjQIEOGDMmkSZPWeo7Udf9NmzbNgAED0q9fv+y1114ZPXp0BgwYkFtuuSVNmjTZ6P2fPHlyhg8fngEDBqRFixZ57rnncv3112fo0KHr3PYN/V5s1apVRo8enSOOOKJ02RtvvJEVK1Zs8I9Qf2sCIAAA/zRGvvZ2Rkx5O2/9/Px0aFvzobVZ44b53oHd89Xd/iVbt26RJLlvzKT8euzk/OCI/fLvv3wk7w++OGX/M3rl0odHZOoHc/LIuSfmxWnv5YL7f5cFS5elflm9DDrlyBy2W6e8+/GCdPvJLbn63w7N05PfzFuz5+XQXTtl0ClHrHfb/reaNm2aNm3aZOLEienRo0eSZN68eZk5c+ZnjjYjRozIvvvum+bNm+cPf/hDrQ86AwcOTMuWLfPxxx9nyZIlqaqqyjnnnJP27dvXed2nbbfddrn88svz4IMPZunSpevdljFjxmSfffbJdtttl6Rm5OOTTz6Zjz76aK2Y8uKLL+aoo45K8+bNkyTHHntsbrrppo0OgKu1atUqhxxySFq2bJnBgwfnoIMOymabbZYJEybk17/+dcrLy9OwYcOcdNJJ6dGjRx577LGMGTMmkydPzgcffJDjjz8+jz76aJ5//vmsWrUqm2++ec4666x06NBhrft66623ctttt2X58uXp1KlTGjdunFatWuXb3/52Vq1alfvuuy8TJ05MRUVFunTpkjPOOCONGjXKkCFD0rp168ybNy+ffPJJFi1alH79+pVGr4wYMSLDhw9PRUVF2rZtm759+6Zdu3Z59tlnM2HChFRUVKSysjKXXnrpJu3X+ta7+j4fe+yxNGrUKPvss0+tkV+ftnDhwvz0pz/NzJkzs8UWW6Rv375p06ZNzjzzzFx77bX54he/mKTmA/T111+f22+/faNGWy1atiKXP/ps/vP7x+a4HruWLj9010754+VnpVmjmpFG7368IJ0vHJh5t/44W55zTV69um92bv+FJDXvFycOfSgfDL44sxYuzjl3/zavf/hxVlVWps8he+fCI/ZLkmx33oBc8PV98+zUd/LBgkVp1bRxHj3vpLRs2nit7Tr00EPTsWPHXHLJJXVu/5Zbbpn+/ftniy22SJL07t07Dz30UCoqKtba/419DSVJy5Ytc+6555aeg/vuu2/uv//+LF++vBRN7r333vTu3Tsvv/xy6XZTpkxJs2bNsv/++ydJ9thjj3Ts2DHjx4/PIYccst7nTpIsXbo0zZo1q3O7kproWV5eXrqPiRMn5oQTTijd9qijjsqjjz5aCoAVFRUZOnRoTj755AwYMGC96509e3buuOOOzJ49O2VlZenevXtOOOGENGjQIH369MmRRx6ZKVOmZP78+WnWrFl+8IMfbHB7mzZtmq5du6ZDhw45//zz86c//Sldu3bNvHnzcuedd+b9999PZWVlvvrVr+aoo45KksyaNSu33XZbZsyYkZYtW+bb3/526TFaU13Hc+edd07v3r1L72177713fve7323wsa3ruNf13tq0adN897vfLUXZXXbZJW3bts1HH32U7bffPn379s2uu9a8vnbddde0aNEis2bN2mAAfOaZZ/Kd73ynNEruoosuKl135513ZunSpenfv38qKyvXe/8rV65Mu3btSr+X9t9//zz22GOZPHlyevToUWs9de3/jBkz0rFjx7RoUfP7f/fdd88vfvGLLFu2LE2bNl1r2+v6vZgk3bp1y3PPPVcrAL7wwgvZbbfdMm3atA0eq78l5wAEAOCfxrNT38m+O25Xin9r+uLmrdKgfu3/PT6kS8dUVlXnpenvlS77zctTcsq+XTN/ybJ8c+B9+cnRB2b6Df+Rh/p9O8cNvj+zFy5Jg7KyLCxfnnr1kifPPzljL/t+fvnc+Ez7aO7fbN+qqqqy33775bnnnitdNmrUqPTq1avOALM+5eXlmTRpUnr27JmuXbtmxowZmT9/fun6srKyTJgwIf3798+VV16ZvfbaK3fccccGr/u07bfffqOCzgcffJBtttmm9HODBg3Srl27fPDBB+tcds3Y2L59+yxYsCDLli3b6P1fU48ePdK4ceNMmzYtK1asyMCBA3Paaadl6NChOemkk3LzzTensrIy3/zmN7Pddtvl1FNPzfHHH5+pU6dm+PDhueqqq/KLX/wiHTt2zN13373O+xg8eHAOPfTQ3HzzzTn00EPz4osvlqY6Pv7443n33Xdz/fXXZ8iQIamqqsp9992XJKlfv37GjRuXM888M5dddlm6d++exx9/PEnNNPIHHnggl1xySYYMGZL9998/119/fenxmzJlSo4++uhceumlm7Rfda137ty5ueuuu3LxxRfnpptuyuabb5558+at97H94x//mLPPPju//OUvs+OOO+auu+7KZpttlu7du+f5558vLTdmzJj07t17o6davvz2zFRUVuWYdYzkbddyszRvUnskTqtmTXL4Hjvl4XFTSpc99PJ/59v77J4G9ctyyq0PZ8ett8i0Aefl1av75u5RE/PYhKk1j2VZWf749sw8dt6JGX/F2Vm2qiIPjJ20zu3q2LHjRm3/DjvsUJqeWF5enqeeeip77rnnOvd/Y19Dq5fdfffdSz+/8sor6dSpUyn+TZ06NdOnT681yi5JPvzww1qvv6TmdfXhhx/W+dxJagLgU089lX79+qV///558MEHS9et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dtxxx+Xuu+/OD37wg7Rq1SoHHHBA3njjjVRVVWXo0KH53ve+lyZNmtQ57XnhwoWpX79+rcesRYsWWbRoUennNUd6rfn62VizZ89O586dS9ux5vTuysrKbLfddlm8eHHKyspq3ddnDUIVFRW57bbbMm/evPy///f/1vkeuD7rOu4b8976xhtvZNCgQTnllFPSq1evWssefPDBOfDAA/P6669n8ODBueCCC7LTTjutdxtWH4uvfe1radSoURo1apTDDjss48aNq/WcWNO67r9Vq1a54IILct999+VXv/pVevTokZ133jmbbbbZJu3/6NGj8/LLL+f2229Pq1at8qc//SlXXXVVBg4cuNZ718b8XkySAw88MJdccklOOeWUvPDCCznkkEPWu01/TwIgAACF8uqfP8r0WXPzrZ67JamJci2a1ISfr+7+L/nZky9k+qy52XGrmsCyZaua/8Ff8wP8mvbp9MXUL6uX8e98kN+8PCW/OvOYJMk2bVpmtw5bZtwVZ691m/fnb/ron09/i2Nd0aQuBx54YIYNG5a5c+d+5tF/06dPz8qVKzNs2LBal//whz/M5MmT07Vr1ySp9SF68eLFqV+/fukDbl3XfRYdOnSoNd135cqVmT179jrPp9ehQ4e8//77pfg5c+bMbL755p/5/keNGlUKUK+++mqeeOKJXHPNNWnbtm3Ky8vX+ubl1R5++OF89NFHueKKK9KoUaOMHz8+v/rVr9ZabrPNNktFRUVWrlxZGokzf/780rdwtm3bNieeeOJGfePqmtq2bZtDDjlknaOkRo0aVWtq+KbsV13rnTNnTik4JTWxYvHixevdxiVLlpT+e3UIXX2c9t9//7z00ktp0qTJekf/DXnmjzmm+y5p36ZlVlZUpqq6Oi2aNM4u7duleZNGufelSTl9/5rHrc1mNetd9anpp6s1adggR3ffOY+On5q3Zs/Lyb1rnufbtKkJNa9d1z+bNf77nMR/0qRJad68eTp27JgmTZrksMMOy0MPPZR33313rW9VmMSbAAAKw0lEQVRTrsvVV19dinKrg+/w4cMzevToXHXVVbXed8aNG5eysrKMGjUqSc3ouYEDB+bYY49Nhw4d8swzz9Ra98yZM3PAAQfU+dxZuXJl3nrrrVrTdFetWlVrhOGCBQvy7rvvZs8996y1/iZNmuSss84q/Txy5MjssMMOmTlzZubMmZNbb60Jsqv3r0+fPrngggtqTbNu3bp1Kisrs3Tp0lIYWrRo0UZ9a+7G+PDDDzNt2rSceOKJadu2bZLkxhtvXCvKLVy4MFVVVVmyZEnpvf2jjz5KmzZtNingVVVVZeDAgWnatGkuueSSTfr24fUd9w29t66Ob//xH/9RK8LPmDEjc+bMSffu3VO/fv3suuuu6dy5cyZNmlRnAGzQoEG22GKLWu8LVVVV6x0pvL77T2pGm67+Y8Hqc80ec8wxm7T/r776arp37176A0/Xrl1Tv379vPPOO7WmDW/s78Uk2WqrrdKhQ4eMHj067777brp161aaEvx5MgUYAIBCmb+0PGfe+Xgmz5iVOYuW5smJr2e/nWpCUK9/2TbH9eiSI24YlhFT3s6S5SuzaNmK/Hrs5Pz4N8+k2/Zrf0lFvXr1ckLP3TPgqdGprKoqjfD7SpeOeefj+Xn+9XeTJAuWLsspv/hN3pkzf611/D116dIl5eXlefnll7Pvvvt+pnWMGDFirVEeSc0U45EjR5Z+njhxYmk02ahRo9Kly1+mQdZ13caaPn16XnutZkrmvvvum7Fjx+add95JZWVlHn744XTq1ClbbrllkuTll18uTW094IAD8uSTT2bRokVZtmxZHnnkkRxwwAFJauLDyJEja0Wq9Vm6dGmee+65DBs2LKecckoaN26cBQsWpFWrVmndunWqqqry5JNPpqysrDTKsEGDBqWRQAsWLMjWW2+dRo0aZenSpXn22WezcuXKtaZCb7HFFmnbtm3p3GOvv/56rQ+Le++9d55++unS1LbRo0fnkUce2eD29+zZMy+99FLpHFUzZszIwIED1zr/2upt3dj9qmu9nTt3znvvvZf33qs5b+Yf/vCHOrdxwoQJtZ4na57P7MADD8yECRPqnP774B//O5c/+myWr6rIr0a9kq1bt0jHdm3TrHHDXHfCV3PuPcNz5/OvZM6ipVmxqiKjp/05Jw59KHtut+5v4T1xnz3y1J+m5cmJr+ekXjVhoW3zpjlo5y/lxt/VHJ+Kyqpc8tAf8ttX36hz3zbVms/3N998M7feemvpMR43blyWL1+eDh06bNJzePUxbd26dSlqPPXUU7n00kvXimC33nprhg4dWvqnQ4cOOe+88/K1r30tu+66a1asWJFnn302VVVVmTBhQmbMmJEePXrU+dypqqrK9ddfn5EjR6a6ujpz5szJ73//++y9996l+3333XfXGegfffTRDB06NCtWrMjHH3+cxx9/PAcffHC233773HXXXaXtXH26hKFDh651jsXWrVtnxx13LE0vLS8vz3PPPbfOL9/YFCtXrsyUKVNy3XXXpVevXtlxxx3TvHnzdOnSJcOHD09SM/rv/vvvz4QJE9KqVavSdqye/nrxxRdv1DFc0+9+97usXLlyndO0P/7447z44ovrvF1dx72u99bly5dn8ODBOe+889aKb0uWLMnNN9+c6dOnJ6mJoW+88Ubp9AXTp08vnRvx077yla/kkUceyfLly7No0aKMHDmyFIDfe++90vtfXfdfXl6ec845J2+99Vbpede0adPScmuup67933bbbTNp0qTSe91bb72VpUuXrvXHpY39vbjaQQcdlPvvvz/77LPPJoXav6V/jK0AAIC/koO7dMzF39g/h133q6ysqMzxe++WMw76y7f03Xv2v+XG372Uc+8ZnrfnzE/TRg3Tbfv2+fmJX8+/7b3uk6mf2GuP7H7Jzbn06L+MqGvdrEme+I+Tc/59v8u8JeUpq1cvp+3fLTu0a/uZRgD+taw+/9A777yz3lEuU6dOzQknnFDrsmuvvTbbb799ysvLM2bMmFx99dVr3W6fffbJr3/96yxcWLN/e+21V4YMGZKPPvoorVq1Sv/+/UvL1nXdmi677LK8+eabpWl3zz//fHbddddccsklGT16dJYuXZouXbpk2223zemnn56BAwdm8eLF2WGHHWqt88EHH8wRRxyR9u3b55BDDimdYL66ujrdunXLsccemyRZtmxZbrvttnTp0mW9UylPPPHEJDXTAVd/0+Xqb3rs2bNnXnzxxdI3Sx5//PHZa6+98rOf/SwDBgxIz549M2zYsLz55ps58sgjM3jw4Jx//vlp27ZtTjrppPz85z/P1VdfnZ/85Cel+ysrK8vZZ5+du+66K0888UR23nnn9OjRoxRM//Vf/zX3339/zj///CQ1wfB73/veOrd9TbvsskuOPfbYXHnllamsrEzjxo3zrW99q/TlImvalP0655xz1rverbbaKqeeemquueaaNGjQIPvuu2/at2+/zmmVVVVV6dWrV4YMGZJZs2alZcuW6devX+n6Dh06pH379qX1rsudZ3wz3/3lY9n8rKuzQ7s2+XXfb5W+zOf7X+mRrVq1yICnRufce2uizL9suXlO7LVH+h22zzrXd8iuHfOd22q+8GP7L7QpXT7srOPS5+7fptMFN6a6ujr77rRdDtp5h3WuY31WrVqV73znO0lqRkYOGTIkt9xyS44//vgcffTRtZ7vRx99dJYsWZJLLrkky5cvzxZbbJFzzz03rVq1yqJFi2o9h+t6DX3aiBEjMn/+/Jx55pm1Lr/iiivq/PKGBg0a5MILL8ydd96ZYcOG5Qtf+EIuuOCCNG/efIPPnR/+8Ie5++67c88996R58+Y56KCDak2JnDt3bmn03JoOO+yw3HzzzTnzzDPTuHHjHHHEEesMMBvSv3//3HHHHTnvvPOS1LyPfdbR0VdddVXpddmuXbscfPDBOfLII0vX9+3bN3fccUf69euX6urqdO7cuRS1zz333AwZMiRPP/10WrRokT59+qxzv+s6ns8880xmzZpVa/Rto0aNcvfdd+fdd9/NsGHD1vmHnw0d9/W9t77yyiuZO3dufvrTn9a63QknnJCjjjoqp556am655ZYsXLgwzZo1y9e+9rXSe+WYMWOycOHCdX5JyTe/+c0sXLgwffr0ScOGDdO7d+/S+RFHjBhR+vbeDd3/t771rdxwww0pLy/PDjvskIsuuqg0knDN9dS1/0cccUTmz5+fCy+8MPXq1Uvjxo1z7rnn1jo2m/J7cc3L77rrrs/8XPtbqLdy5crPfiZe4HM1c+bMWieIBgD4exk8eHC22WabUljb2OtYvzWnwd1www3p0qVLvv71r3/OW/X5uuGGG7Lnnnvm4IMP/rw3Bf7hDRgwIBdeeOHnvRlJas6N+PTTT5eiN58/U4ABAAA+Z1dccUUeffTRJDXn0ZsyZUqd59H6ZzB58uS88847m/Ttv/DPav78+TnssMM+780o+eSTT0qj+vjHYAowAADA5+z000/PrbfempEjR6ZBgwY54YQT/qlnelxxxRWZM2dO+vXrV/piFGD92rZtu84pxZ+Xf/Y/YPwjMgUY/g8zBRgAAADYEFOAAQAAAKDABEAAAAAAKDABEAAAAAAKzDkA4f+whg0bft6bAAAAAPyDMwIQAAAAAApMAAQAAACAAhMAAQAAAKDA/j89h62MWLJtcgAAAABJRU5ErkJggg==", + "argumentInfo": { + "argumentName": "base64image", + "formattedValue": "base64 data: iVBORw0KGg..." + } + } + ], + "status": "PASSED", + "durationInNanos": 2404217, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 5117437, + "depth": 0, + "parentFailed": false + }, + { + "name": "showing thumbnails is set to", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "showing thumbnails is set to" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "showThumbnails", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 384902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 365693817, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 326922341, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment22.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "jgiven-html-thumbnail", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "jgiven-html-thumbnail" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 19955443, + "depth": 0, + "parentFailed": false + }, + { + "name": "the image is loaded", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the image is loaded" + } + ], + "status": "PASSED", + "durationInNanos": 17135023, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "true" + ], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1060658493 + }, + { + "caseNr": 2, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 190102, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has an image attachment $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has an image attachment" + }, + { + "value": "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OM2f1v/pto+hAFBERERERERE7qi/1PkLT9Z/kqrlq+Ln5YeHh4f9JXIvysjIsL/iUuKITY9l4W8LWR21+o6MpwBQRERERERERO64csZyNPJuRAf/DrSq3Iqa7jWxGWz4mf2cXZpIqYq3xIMVzmWeY9/lfeyM3cmvyb+SY825Y2MqABQRERERERERESnDjM4uQERERERERERERO4cBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhBpvNZktOTiY5OZnc3Fxn1yMiIiIiIiIiIiK3yMXFBW9vb7y9vTEnJyeTlpaW/8ZsdnZtIiIiIiIiIiIicovy8vJIS0sDwJiUlESFChUU/omIiIiIiIiIiJQRZrOZChUqkJycjDEvL0/hn4iIiIiIiIiISBljNpvJzc3VJiAiIiIiIiIiIiJlmQJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhZmcXcCPOnz/P0aNHAcjNzaVixYq0adMGFxcXAGJiYggPDycnJweDwYC/vz8tWrTA1dWV7777jry8PEwmk70/d3d3evbsSXR0NDt27KBPnz54e3sDkJaWRmhoKL1797a337t3L1FRUQwcONDeT2ZmJt988w2enp72dmazmZYtW1K1alUAvvrqKx599FFcXFzIycnh4MGDXLhwAYPBgIuLC0FBQdSqVevOfni/ExcXx44dO+z3YDKZcHV1xWAw0K9fv2t+XgBHjx7l7NmzGI1GcnNzCQwMpEmTJmzfvp34+HisVisZGRlUqFABgPvvv5/69euX6j0uXbqUX375BbPZTEZGBt27d+epp54C8r++n376KTt27MBkMuHh4cFf//pXevToAcDPP//MO++8w4IFCxzq/vzzz1m0aBE///wzW7du5YMPPsDX19dh3FGjRpGQkMDq1asBuHTpEpUrV8ZsNtO0aVNGjRrF8OHD+fbbbx2u69atG+vWrSMyMpI5c+Ywf/584uPjGThwIC+99BJ9+/a1tx0yZAiLFi3Cw8OD8+fPM3fuXCIjI3Fzc8Pb25unn36aFi1aXPPz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RERERERERERulYuLC15eXnh7e2PIycmxObsgEbk5586do06dOs4uQ0RERERERETuYtoEREREREREREREpAxTACgiIiIiIiIiIlKGKQAUEREREREREREpwxQAioiIiIiIiIiIlGEKAEVERERERERERMowBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIrcBWw2G/v37+fChQsAxMbGsmvXLidXJSIiIiIiIiJlgQJAESez2Wzs27ePK1eu4OXlxeXLl9m9ezeVKlVydmkiIiIiIiIiUgYoABRxooLwLz4+no4dO5KZmcmuXbto1KgRDRo0cHZ5IiIiIiIiIlIGKAAUcRKFfyIiIiIiIiJSGhQAijjJqVOnuHDhAq1bt8bNzY09e/bg7++v8E9EREREREREbisFgCJOUrt2bapUqcLBgwfJy8ujRYsWXLp0iejoaGeXJiIiIiIiIiJliAJAEScxmUy0bdsWDw8Ptm/fTqVKlWjdujUHDx5UCCgiIiIiIiIit40CQBEnUggoIiIiIiIiInea2dkFiNzrCkLAPXv2cPnyZQIDAwGIjIy0/1tERERERETkXmaz2UhISCAvL6/I80ajkUqVKmEyme5oHwWysrJITk4udNxgMODr61uiPn777TfOnDmDzWa7Zjt3d3c6duyIi4vLdfssjgJAkbuAyWSiffv29vcBAQEEBAQ4sSIRERERERGRu8P58+dZsGABSUlJ12zn7u7OsGHDCAoKuiN9XO29994jNTW12D4effRRWrZsec0+FixYQG5u7jXbXN1n27ZtS9S2KAoARURERERERETkrrV8+XJatGhB3759i51ZZ7Va2bFjB0uWLGHy5MmF2t2OPq6WmprKpEmT8PPzczgeGRnJ3Llz+eKLL8jKyqJDhw7F9lHS8A8gJyenxG2LomcAioiIiIiIiIjIXevChQu0b9/+moGc0WikQ4cOZGZmkpCQUKI+1qxZw5o1a0rcR0lUrFgRd3d3AFavXk1WVtZN9XO7aQagiNyy5cuXs2vXruu2e/LJJ687BVpERERERERuTutVralgroC72R03sxvuJnc8zB5U9ahKPe961PWuS12vugSU/2M9cspms2E0Xn8OW0Ebq9Vaoj6K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1u+P/HLVLZGhCM77+Xh4HPd1fa7P53Nd9x2n9zufcf78eZKTk9mzZw8XLlzAz8+PK1euMHToUI4dO0ZycjK3b9/m8uXLOQpknyX58uXLNkht3bo1U6dOZerUqXTt2jXLshYWFsY6lCIiIiIiIvL88i/uT7dy3fK6G/9zyruWz/PNWF50z/S8xfbt2xMfH89XX31FUlISJUqU4OOPP8be3j7L6bwAFSpUoGvXrvz888/ExcVRt25dfH19c7Shw4NatGjBlStXGDNmDC4uLnTp0oVz585lGiLZ2NgwfPhw1qxZw6xZs4iKisLa2poSJUrQt29fY3292rVrExUVxU8//UR8fDzly5enf//+AFSvXp0333yT+fPnExMTg4eHB926daNChQrZ9rVixYo0atSIcePGkS9fPvz9/enduzcTJkxg8uTJNG3aNMvrfXx8uHbtGjNmzCAmJoYiRYrw8ccfG1O1e/TowcKFC4mIiMDBwYHq1avTvv3ztTinhYUFjo6O3Llz57HU5+TkpPUJREREREREXhDvV32fo5FHORJ5JK+78j+hoF1BJtebjJWFZtY9SRYmkyn3idj/oISEBGOUV3JyMn379uWTTz6hbNmyedwzeVSxsbHGximPytbW1mxzlqctPDycMmXK5Fn7IiIiIiIiL6LI+Eje/u1tIuMj87orLzRHa0fm+8+nlHOpvO7KC++ZngL8rPjtt9/45JNPuHz5MgkJCaxevRpHR0dKliyZ112Tv8HR0fFvjdxLH0koIiIiIiIiL5YCdgWY6DcRa8tneuLkc83G0obv63+v8O8p0QjAHEhOTmbp0qXs2bOHhIQEihcvzttvv423t3ded00eg/j4eOLi4nI8PdzCwgIHB4eHrgP5NGkEoIiIiIiIyJMTeC2QIYFDMKX8vdljYs7SwpJv6n5DQ8+Ged2V/xkKAEWA1NRUkpKSSEpKwmQykZSUZHbe2toaW1tbrKyssLGxeWbW/FMAKCIiIiIi8mQdjjzMB7s+4E7i41lHXmBkzZG082qX1934n6IAUOQ5pgBQRERERETkybsYe5H+O/pz/d71vO7Kc83awprxfuNpVLRRXnflf47WABQRERERERERyUIp51LM959PaefSed2V55adlR3/bvhvhX95RAGgiIiIiIiIiEg2CtgVYG7TuVQrUC2vu/LcccvnxqzGs6hZsGZe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GTx4MPv372fLli3861//4qWXXsLS0jLb82+//TZxcXEMGzaMEydOEBoayg8//EDz5s05fPgwAHPmzGHQoEHs3buX8PBwgoKCWLdunRG6ZXc+M1WqVGHLli1ERUVhMpmYPn16hhF89zty5AgdOnR4aFjm6elJw4YNzY6lr032YIBjaWlJhw4djBFzD3JxceHll19mw4YNHDlyhPPnz7N06VIAatWq9dA+5kTx4sWJi4vj0KFD3Llzh3379nH58mUcHR25du1atqMgy5QpQ5EiRVi5ciUXL14kOjqaY8eO8eOPPxobu5QrVw5bW1vWr1/PlStXCAsLY926dWYjOpOTk+nQoQOLFi16aFuOjo60adPGeO3s7MzNmze5d+8eJpOJ0NBQ5syZw7Zt2wBo06bNQ9eBa9iwIfv372fXrl1cvHiRLVu2cObMmQzv2aPIly8fNWvWZNu2bRw/fpzo6GhCQ0OZP38+q1atynE9OXluueXm5oanpyc7d+7k0qVLREREsHLlygyjzBYtWkSHDh0yXasy3bFjx4x/b1JSUggNDTVeP8roWVdXVzp37sz06dPZsmULV65cYeXKlSxYsIBevXphbW1Nvnz5yJcvH8HBwZw4cQILCwsqVarEihUrCAsL488//6R37940btyY6Ohozp8/n+mGOw/y8fHh3LlzZj/zr7/+OiVKlKB///5s3bqVjRs3MnjwYPz8/P7Wz92OHTvo27cvGzduJCwsjBMnTjBv3jyKFStmtjzC/v37//bPt4iIiIg8Ov0aVkQeqwYlG/D7hd9zdU3DUpmHFImJiXTr1s3s2KefpgWJRYsWZefOnZle98knn1C2bFmWLl3K8OHDiY6OxtnZmapVqzJ37lxjN11bW1u++eYbxo4dy8svv4ynpydDhgzh6tWrxrTWokWLMnfuXL7++mu6d++Om5sbrVu3ZsiQITk6X6xYMX7++WcmTJhA586dsba2ply5cvz000/G7qlTp05l3LhxDBgwgNjYWAoWLEiTJk0YOnRojs5n5p///CeffPIJDRo0IH/+/Lz11lt07NiRHTt2ZFo+NjaWw4cPZzkaq0mTJgDs3LmT1NRUwsLCmDhxolkZe3t72rdvn+nmBvdr1aoVW7ZsYdOmTZhMJooXL05AQMDfXrutXLly1K1bly1btrBx40bKli1L+/bt2bNnD7t378bS0hIfH5+HXm9hYUH37t3ZvHkzS5YsITExEVdXVxo1akSdOnWMe+zSpQsbNmxg1qxZuLq60qxZM/bs2WOsi5aamsrhw4eNz9rDpO9KvHbtWi5evMiCBQsylLG1taVNmzZZ7mBcvXp1TCYTgYGBbNu2jQIFCtC5c+dMR5k9iubNm2NnZ8eWLVuIjY3FycmJ8uXL4+/vn+M6cvLcHkXHjh1Zu3Ytc+fOxdnZmYYNG3LlyhWzUYFXr17l8OHDWa4vOXr0aCOUB1i4cCELFy4E4I8//jB2N86NMWPG4OjoyOjRo4mMjMTT05OBAwcav4SAtA2LZsyYwdatW9m2bRvjx49n+PDhNG/enOLFi/Pxxx9TvXp19u/fT7t27Vi/fn227darVw9ra2u2b99ubEhka2vLvHnz+Oyzz3j//fextrbG39+f0aNH5/q+7te/f39MJhNfffUVN27cwNnZmRo1ajB79mzjecfGxrJ//36++OKLv9WWiIiIiDw6C5PJ9Oj/1S0ieSo8PNxst8ZnwYXoC3RZ3oW9l/fmqHyDkg34pdMvFHV++EYa8nT079+fDz74INN15u535coVgoODOXfuHHfv3sXS0hJXV1eqVKlCrVq1tMbX/zd//nxSU1MJCAjItmxcXBzBwcGcOnXKGLXl5uZG+fLl8fX1zdUOsP9rEhMTSU5ONlvHcP78+djb29O5c2fjmL+/P7//nrtfTjzPRo8eTUhICOvWrcsy+Hwapk6dyi+//MK2bdtyvVmOiIiIiDweGgEoIo+Vl6sXwb2DuZ1wm7jEuCzLOto64myb+U6x8nRFRkbmeA2+okWLGqOKkpKSsLKyyvOA4Vm0Zs2aDCMkH8bBwYEmTZoYoywl5xYtWsTdu3dp3bo1Tk5OnD59mgsXLvD2228bZbZt20a1atXysJdP38CBA2nZsiWrVq2iQ4cOedaPq1evMmvWLD7//HOFfyIiIiJ5SCMARZ5jz+IIQBGRp+nu3bts3LiR8+fPk5iYiLu7O35+flSvXj2vu5bndu3axYABA1i1alWe/H9FUlISb7/9NuXLl2fs2LFPvX0RERER+UueBYCpqals27aN7du3G+v0FCpUiIYNG/Laa68ZOw7+4x//IF++fMyePTvbOocPH054eDhubm5MmTIlwwL0wcHBbNq0icuXLxMXF4erqyt16tShU6dO5MuXD0jbDXTFihUcOnSI6OhorK2t8fLyom3btlStWhWAESNGEBYWlmkfypUrx5gxY3LcnsjfoQBQRERERERERLKTZ1OAZ82axbZt27C0tKREiRI4OTlx7tw5Fi5cSGhoKP369ctVfZcuXSI8PBw7OzuioqI4efKk2YLpISEhTJkyBUdHR2rVqoWtrS2HDh1i/fr1xMTE0L9/f1JTUxk/fjyhoaFUqFABHx8fbt26xd69ezlz5gxffvml2SLgVatWzbB7YfqOdzlpT0RERERERERE5EnLkwDw3LlzbNu2DRsbG0aMGGEsOH/79m3GjRvH3r17adeuHS4uLjmuc/fu3QC88cYbLFu2jMDAQLMA8ODBgwB07drVWGOpffv2/PTTT7i6ugIQFRVFaGgo7u7ujBw50ljTav369Vy4cIHY2FizNt98882Hjr7KSXsiIiIiIiIiIiJPWp4EgAcOHACgQYMGZrtNuri48Omnn+Lo6IiNjQ13797NcZ1BQUHY2dnRsmVL/vjjD/bt20evXr2wtk67RXd3dyAtKHzppZcoUaIELi4uDBkyxKjDyckJGxsboqOj2b59O35+fkaduZWT9kRERERERERERJ60PAkAb9y4AUCpUqUynHuU0XGnT5/mxo0b1KlTB1tbW3x8fFi/fj2HDx+mZs2aALz22mscOnSIkydPMnz4cPLnz0/ZsmWpVasWfn5+WFlZYWtrS48ePZg3bx4zZ85k9uzZlCpViooVK9K0aVM8PT3N2h01alSGvgwcOBA/P78ctSciIiIiIiIiIvKk5UkAmD61NiUl5bHUFxgYCECtWrUAqF27NuvXrycwMNAIAJ2dnfniiy/4888/OXbsGKdPn+bAgQOEhIQQGBjIsGHDAGjatCk1atTg4MGDnDp1ihMnTrB+/Xq2bNnC0KFDzaYVZ7YGoIeHR67aExEREREREREReZLyJAAsUqQIAKGhoRnOhYWFkZycjJeXV47qSklJITg4GICpU6cydepU49yBAweIj4/Hzs7OOFaxYkUqVqwIQGRkJJ999hmHDx/mwoULRpv58+enSZMmNGnShNTUVFauXMnKlSvZuHGjWQCY1RqAuWlPRERERERERETkSbHMi0bTR+rt3r2bkydPGsejo6P54YcfGDlyJMePH89RXUePHuX27dsULlyYxo0bG39KlCiByWRi//79pKSk8Nlnn9G7d2+uXLliXOvu7k7+/PmBtCAxMDCQAQMGMGPGDKOMhYUFpUuXNsrkRE7bExERERERERERedLyZARgiRIlaNOmDWvXruWrr76iRIkSODk5ce7cOeLj46lfvz6VK1c2NgFJTEw0G9mXLiAgwJj+27p1a5o2bWqcO3jwIN988w2BgYHUq1ePihUrcubMGUaNGkXVqlWxt7cnNDSUsLAwChYsSKlSpXB1dSU5OZmdO3cSHh5OyZIluXfvHkeOHAEwphOnW7p0aYYpwADvvfdejtoTERERERERERF50vIkAAR46623KF68OFu2bCE8PJzr168bo/j8/f3NyqakpBAUFJShjvbt2xMSEoK1tTW1a9c2O1etWjVcXFw4cuQIt2/f5s0338Td3Z0//viD48ePEx8fj6urKw0aNKBjx45YW1tToEABRo8ezZo1azh58iSBgYFYW1tTvHhxmjZtSuPGjc3aOHr0aKb31qdPnxy1JyIiIiIiIiIi8qRZmEym1LzuhIg8mvDw8GzXoRQRERERERGR/215sgagiIiIiIiIiIiIPB0KAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoAReSZEhcXx/z58+ncuTO+vr6UK1eOqlWr0qpVKyZNmkRsbGxed/GRnDp1Cm9vbyZNmpRt2R9//BFvb28OHjz4FHr2aGrWrMmbb76ZZ+1XqVKFd955J9tymzdvxtvbm+XLl2dZrn///nh7e5OUlPS4uvjCuHH3Bu2XtMfhSwcsPrfI8o/TV050Wd6F6PjovO62iIiIiMgzLTo6mvPnzxMaGkpcXNwTb8/6ibcgIpJD9+7d46233uLPP/+kZcuWvPXWWzg7OxMREcEff/zBtGnT2LFjB7/88gv29vZ53d2HunnzJnXq1OH333+ndOnSub6+WrVq9OzZk0KFCj2B3onkTt//9mX1n6tzVPZu4l2WHF9CPut8zGs37wn3TERERETk+XTz5k2uX79uvL579y6lSpXCycnpibWpAFBEnhnr1q3jxIkTDB48mIEDB5qd69atGxMmTGDGjBmsWbOGLl265FEvsxcUFPS3rq9bty5169Z9TL0R+Xs2n9uc62s2nt34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K6+8kg8//DC1atWq/MP4euutl3XXXfczrftLdwRgjx49cuutt+b222/PLrvsklmzZuWCCy7INttsk379+uXUU09N796907t37yTJyy+/XHkS6tWrl1mzZmX27NmpX79+6tatuyZ3BeALN3r06Nxzzz0599xza/wL0UfX0fv4qamwKr7R/Bt54tAn8v6H72fuwrkrnbdxvcZpUq/JSudJkgMPPDBXX311Bg4cWDml4fMwc+bMPPXUUznmmGM+t3UCAMAXpU6dOtl4440zffr0fPDBB6lbt27WW2+9ynWyP9O6P4fxfa6aNm2agQMHZvTo0bntttvSpEmTdO/ePd///vdTq1atDBgwICNHjsxtt92W2rVrp127djniiCOSJJ06dcpdd92Vn//85zn22GPTsWPHNbw3AF+s9dZbLw899FB+8pOf5Kc//WkaNWqU+++/P/fcc0/69etX4y5T8O9oWr9pmtZv+rmsa5111smxxx77uazr41q2bLla1gsAAF+U2rVr5+tf//rnvt41fgow8Ok5BZjleeCBB3LJJZfkxRdfzLx589K6dev84Ac/yJFHHvm5Hm3FypVyCjAAAPDVJwDCV5gACAAAAHySWmt6AAAAAADA6iMAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AABgeSZNmrSmh1CxxRZbrOkhAAAAfGoCIABfWp3+2Ckjvjcix4w9Jg3qNMj86vmrbVtLfrUkc+fOzYsvvpjOnTtXpn+ZQiQAAMCnIQACXxnTp0/PJZdckocffjhvvfVWGjVqlI022ii777579ttvv9SuXTtJMmXKlPTp0yejR49O165d1/Co+SxmHzs7jz/+eGYfOztvv/12WrVqtdq2NWfOnCTJJptsUvkaAACgBAIg8JXwzDPP5JBDDknTpk1z4IEHpn379vnggw/y6KOP5rTTTsujjz6aSy65JFVVVfna176W008/PW3atFnTw/5KOumkk/Lmm2/myiuvXOE8O+20U/bdd98ceuihq3Us9erVS69evZIkG264YWV63bp1V+t2k2TJkiWpqqpa7dsBAABY3QRA4Etv4cKFGThwYFq3bp0bbrghTZo0qTzWr1+/fOtb38qJJ56Yxx9/PN27d0+zZs2y//77r8ERf7Ucf/zx6dmzZ77//e+v8jI///nP0759+9U4qjXrO7d9Jw/84IE1PQwAAIDPhbsAA1969913X6ZPn54TTzyxRvz7yB577JGnn3463bt3T7L0FOB27dpl3LhxefTRR9OuXbs888wzNZaZMGFC2rVrl0ceeSTJ0uu8/fjHP06XLl2y5ZZb5qijjsq0adMq8w8YMCD9+/fPmDFjstNOO6VTp07p16/fMuv9Knr++ef/7WV23XXXbLrppqthNGtW1zFLTxkX/wAAgJIIgMCX3rhx41KrVq1069ZthfM0btx4udO7d++eli1b5p577qkx/a677krLli2z/fbbZ/r06dl///1Tu3btXH/99Rk5cmTee++9HHjggVmwYEGSpE6dOhk3blyeffbZ3H777Xnqqaey9tpr5/jjj//E8VdXV2f48OHp27dvunfvnj59+mTo0KFZuHBhZZ5nn302hx56aHr06JGePXvmyCOPzHPPPVd5fMyYMendu3fGjRuXffbZJz179sw+++yTF198MXfccUd++MMfplevXhk4cGDee++9ynLvvfdeTjnllPTt2zc9evTIwQcfnHHjxlUe79q1a6ZPn57TTjst3/72tyvTa9eunQceeCC77757tttuu/zoRz/K5MmTK4/vtNNOueKKK2qM7aOIuuOOO6Zfv3657bbbajwPN998c3bddddsv/32OeKII/Lqq6+ma9eu+ctf/vKJz+EXZdye49J1TNdKCAQAACiBAAh86b399tv52te+ljp1al61YN68eZkzZ07lv/nzl71DbO3atfO9731vmQA4duzY9OnTJ7Vr187IkSNTVVWV4cOHp2PHjunUqVOGDh2a119/PXfddVeN7Z100klp1KhRGjRokN122y0vv/xy5s2bt9LxX3311bnzzjtz8skn56abbsrgwYNzzz335NJLL02SvPbaazn66KPTqlWrXH311fn973+fRo0a5aijjspbb72VZGmAnD17dm6++eZcfvnlueuuu7Jw4cIcd9xxGTduXEaNGpUxY8Zk8uTJue6665IkixcvzoABAzJx4sSceuqpue6667LZZptl4MCBeemll5Ikf/7zn5Mkxx13XI1gN2PGjPzxj3/MKaecUrm24imnnLLc/ftobFdccUWGDBmSBx98MH379s3ZZ5+dt99+O0ny3HPP5de//nV23HHHXH/99enXr18GDx6cJJ/6Onv1zqhX+XrWrFmVr+fOnZtk6fvmww8//LfXO27PcRm357hPnhEAAOArQgAEvvRq1apV42i5j+y4447ZcsstK/8dcsghy12+b9++efXVV/Piiy8mWRqjpk6dmn79+iVZevTdlltumaZNm1aW2WCDDbLRRhvVOOqtTZs2adCgQeX7Zs2aJakZn5bnpZdeSvv27bPddttlww03TM+ePXPJJZdUrrk3ZsyYNGrUKKeffno22WSTbLLJJjnzzDNTXV2dO+64o7Ke6urqHHTQQWnSpEmaNGmSHj16ZNq0aTnmmGPSoEGDtGrVKl27ds2UKVOSJE888UReeOGFnHTSSdl2223zjW98I8cee2zWX3/93HDDDTX2oVGjRpWvk2TmzJk588wz07lz53Tu3Dn77LNPXn311cyePXu5+1hdXZ2DDz446623XqqqqvKDH/wg1dXVlef8jjvuSIsWLfKLX/wibdu2Td++ffPd7353pc/bR1YUWBecvCAXX3xxnnvuudx8880ZPXp03n777TRq1ChJ0qpVq9SvX/8T1z/y+RmrNA4AAICvKjcBAb701l9//bzzzjuZP39+jQB3+eWXV8LgRRddtMJQtO2222bdddfN3XffnQ4dOuSuu+5K69ats8022yRJZs+eneeeey7f/OY3ayy3YMGCyhFsSWps++OWLFmy0vH36tUrp5xySk444YTstNNO6datW9q2bVt5/Pnnn8+mm25a4wjHRo0apU2bNpWA9pGP39m4cePGadasWdZee+0a02bMWBq0Jk2alLp166ZLly6Vx2vVqpWtt966EglXpE2bNmnevHnl+xYtWiRZenTdWmuttdxlNtlkk8rXH8XUDz74IEny6quvZsstt0zt2rUr83znO9/JJZdcstJxJEnDhg1X+FjXrl1z+eWX56233sqoUaM+cV3Ls/83v/aplgMAAPiqEACBL73tttsul112WW6//fbstddelelbbbVV5euWLVvmjTfeWO7ytWrVSp8+fXLPPfdkwIABGTt2bI073jZp0iRdu3bNWWedtcyyK7q24L+jT58+ady4cW666aaccsopWbRoUXbcccf8n//zf9KiRYvMmTMn66yzznK3PWfOnBrT6tatW+P7evXqZUXmzJmThQsXZvvtt68xfdGiRWnZsuVKx/yv0e2j03RXFjuXd7TdR/PPmjUr6667bo3HPn7E4ae17bbbZtttt/3M6wEAACiZAAh86e2www7p0KFDzj///Oy4445p1apVjcfnzp2bl156aYVH6CVLTwP+wx/+kMceeyyvvPJK5fTfZGlI/OMf/5iNNtqoRmB75ZVXltnWp7Xjjjtmxx13zLx58/Loo4/mt7/9bc4444wMGzYsa6211nJPrZ09e/Zyw+CqWmuttVKvXr1cf/31yzxWq9YXewWIevXqLXONxvfff/8LHQMAAMB/KtcABL70atWqlREjRmTBggXp27dvLrzwwtx///25++6789vf/jbf/e5389prr2XAgAErXMc222yTDTbYIGeddVY6duyYjh07Vh7bb7/9Mnfu3AwaNCiTJ0/Oq6++mgsvvDC77LJLJkyY8JnH/+CDD2b69OlJlh5Zt/POO2e33Xar3Ihjs802y/PPP1/jOocffPBBXn311Wy++eaferubb755FixYkEWLFqVt27aV/+rXr79M2Pyk05g/q4+up/jx7TzwwAOrdZsAAAAsJQACXwkdOnTIn//85/zwhz/MLbfckp/97GcZNGhQ7r///uy77765//77lznV9eOqqqry3//933nhhRdqHP2XJK1bt87IkSPz7rvvZq+99soPfvCDPPTQQ7nsssuy9dZbf+axjxo1KieccELGjx+fadOmZdy4cbn33nsr1+bba6+9Mn/+/Jx++ul57bXX8tJLL+XEE0/MWmutlV133fVTb7dbt27p2LFjTj755Dz99NOZPn16xo4dm/322y833XRTkqWn7davXz/jx4/PlClTUl1d/Zn3d3l69+6dGTNm5JJLLsm0adMyduzYPPzww6tlWwAAANTkFGDgK6Nly5YZPHhwBg8evNL5OnbsmJdffnmZ6StbtlOnTrn22mtXuM5hw4YtM+273/3ucrfzr84+++wMHTo0gwYNqpzW27Nnz/Tv3z9JsuGGG+Z3v/tdLrjgguy7776pXbt2OnfunEsvvbTGDT7+XbVr184FF1yQ4cOHZ9CgQZk3b1422GCDHHroodl///0r8x188MH5wx/+kEceeSS33nrrp97eyvTq1StHHXVUbrjhhlx//fXp0qVLBg8enP3333+V7tQLAADAp1e1YMGC1XveF7DaTJ06NRtvvPGaHgZ8oiVLlmTmzJk1rmn4zDPP5LDDDsvo0aPTrl27ZZaZNGlSjVO1P+5fb4ayOk2aNClbbLHFF7Y9AACAz5tTgAFY7caPH5/vfe97ueKKK/L6669nwoQJGTp0aDbffHMRGwAAYDVzCjAAq12XLl1y2mmn5dprr83vf//7NGnSJF26dMkxxxyTqqqqNT08AACAogmAAHwh+vbtm759+67pYQAAAPzHcQowAAAAABRMAASgeGfc8kDefPPNJMkrr7yy3HnOO++8JMndd9+dBQsWZPHixZU7NQMAAHyVuQswfIW5CzAlmzRp0poeQoW7AAMAAF9lrgEIwJeS6AYAAPD5cAowAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AAAAAFhzhgwZkokTJyZJlixZkiSpqqpKkuy2227Zc889/+11/vWvf02XLl3SoEGDz2+gAHxqAiAAAMB/sEGDBlW+Hjp0aNq0aZM99tjjM63zxhtvzOabby4AAnxJCIAAAAAs18KFCzNq1Kg8++yzqa6uzmabbZaf/OQnqVevXqZMmZJrrrkm8+bNy5IlS7L99ttnr732ytChQ/Puu+/m9NNPz0EHHZTOnTuv6d0A+I/nGoAAAAAs1+23357XXnstZ599dkaMGJHFixfnhhtuSJJcd9116dOnT4YOHZqzzz47b775Zt55550MGDAgSXLKKaeIfwBfEgIgAAAAy/XII4+kd+/eqV+/fqqqqrLLLrvkiSeeSJKsvfbaeeKJJ/LKK6+kfv36GThwYNZdd901PGIAlscpwAAAACzXnDlzcu2111aO+luyZEkWLlyYRYsW5Ygjjsidd96Ziy++OO+//3522mmnT3XDEABWPwEQAACA5WrRokX22Wef5Z7K27hx4+y9997Ze++9M23atAwZMiRt27Z12i/Al5BTgAEAAFiubt265Z577snChQuTJH/9619zyy23pLq6OieddFKmTZuWJGnVqlUaN26cJKlVa+mfmXPmzFkzgwZgGY4ABAAAYLm+//3vZ9SoURk0aFCSZJ111skhhxySOnXqZNddd83w4cOzYMGCVFVVpWvXrunatWuqqqryrW99KyeffHL233//7LTTTmt4LwCoWrBgwZI1PQjg05k6dWo23njjNT0MAAAA4EvMKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrM6aHgD8p5kxY0aWLFmSVq1apXbt2lm0aFHefvvt1KpVK+utt95y5wEAAAD4tBwBCF+wxYsXZ8mSJVm8eHGN7xctWrTCeQAAAAA+LQEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAoWJ01PQD4T9OwYcMkSZ06dSr/27Bhw1RVVa1wHgAAAIBPS12AL9jaa69d4/uqqqplpv3r9wAAAACfllOAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAfJ4XGAAAgAElEQVQAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGB11vQAAABgdZjw+ox0Oel3WZLkv7faJHf88qAkyYLqRTnn9odz/WMT8uq776Vx/Xrp3Gb9nPD9HdN7i3ZJkiseHJcb/jYx957wk9U+zpdffjknnHBCbrzxxhrTn3vuuZxzzjm59tprc/bZZ2fChAlJksWLFydJatVa+m/5u+++e7p06ZITTjghffr0ycEHH1xjPQ8//HAuvPDC9O/fP7169cqf/vSnjB8/PqeeeuoqjW/QoEGZP39+hg8fXtnm523SpEm58MILs8022+Twww9f4Xz33XdfbrvttsyePTsbbbRRjjzyyHzta19bZr5FixblD3/4Q5588sksXrw4nTp1yhFHHJF69eqtdBwfvRZ16iz9M6lJkyZp3bp1/uu//ivbbbfdKu3LCy+8kEaNGmWjjTZapfm/Kj7Lfh199NH52c9+ls0337zG9PPPPz+tW7fOHnvs8ZnHt8eI63Pb089n0ZIleer0o9L1G62TJKP+NjEj7n4s/3fqW6lVVZV267XI4d/ZNkf3/laS5KW3ZmbT44an+pozPvMYVtXYsWNz7bXX5uijj06PHj1WON+tt96au+++O/Pnz8+GG26YQw45JBtvvPFy513Vn6Ekueeee3L77bfngw8+yAYbbJCDDz44HTp0WGZ9p59+en71q19VXrcXX3wxV111Vd5+++00b948BxxwQLbZZptP3N8zzzwzzz33XKqqqirTfvGLX6R9+/Y5+uija8y7ZMmSdOrUKYMHD86HH36Y6667Lk899VQ+/PDD9OjRI4ccckhq165dY5kbb7wxY8aMWeYz9PN24IEHprq6OlVVVWnQoEHWW2+9bLfddunbt2/lM+PzsqLXc+HChbnmmmvy5JNPZuHChdl0001z+OGHp3nz5p+4zpW97iv7bJ08eXKuueaazJgxI02aNMkee+yRb3/720mSp59+OqNGjcq7776b5s2bZ88990zPnj0/cSxLlizJqFGjcv/996e6ujrdunXLYYcdlrp16y4z78q2P2nSpFx33XWZMWNGWrZsmcMOOyybbrrpv73/Y8eOzZ///Oe8//772WSTTXL00Udn7bXXXuH4V/R78ZxzzsmECRNy6aWXpmnTpjWWGThwYJYsWZILLrjgE5+f1UUABACgSFtt9LVUX3NGzrz1wTz+8uuV6buPGJmpM2fl8kN3S5e2rfNhdXX++NRz2W34dbnz2IOy46bfyP7bb5U9tt18JWv/Yp1wwgmVr4cMGZK2bdtm7733rkx7+eWX07x58zz22GM54IADavwx+tBDD630D5mVmTJlSpo3b54GDRpk/Pjx6dq166ffiRV46KGH8pe//GWFf7R95O9//3tGjhyZX/3qV/n617+eMWPGZMSIETn77LOXmXfs2LF58cUXc95556Vu3bo577zzcuONN+aAAw5YpTFdf/31SZJZs2blqaeeymWXXZZ33303u+666ycue99996Vz587FBcAv+3798Zj9kiR1Djq5Mu3cOx/Jb+54OBcc9P38V6f2aVy/Xh6Z8mqOuOq2zJw9Nyfv9p18Y921M+2C47+wcV5yySVZvHhx1l9//ZXO97e//S333ntvzjjjjLRo0SI333xzhg0bttx4sKo/Q0kyceLEjB49Oqeddlpat26d2267LcOGDcvFF19cmWf+/Pm58sora0SlBQsW5LzzzssBBxyQHXbYIRMnTsywYcMyYsSINGvWbKXbnDt3bn75y18u9/Pjo5+1j/zmN79J9+7dkyQ33XRT3njjjQwdOjSLFi3KWWedldtvvz277bZbZf5XX301f/3rXz9xvz8vJ510UjbffPPMmzcvU6ZMyTXXXJMXXnghxx//+b2HVvZ6jhkzJq+99lp++9vfpm7duhkxYkSuu+669O/ff6XrXNnrvrLP1g8++CC/+c1vcuSRR6Z79+6ZPHlyzjzzzHTs2DH16tXLiBEjMmjQoGyxxRaZNGlSfv3rX6dDhw5p1arVSsczduzYTJo0KUOHDk2dOnVy4YUXZsKECcu8R1a2/YYNG+bcc8/NgAED0qVLlzzyyCM599xz87vf/S4NGjRY5f0fP358br755px66qlp1apVrrrqqlx88cUZPHjwcsf+Sb8XmzVrlkceeSR9+/atTHvhhRfy4YcffuI/Qq1uAiAAAP8x7nvu5dw76eW89NtfZMMWS/9obVS/bg79dtfs0mmTrN+8SZJk5GMTcsPfJubYvjvkJ5f/MW+cf3xq/X9Hr5w85t5MnvZ2/njMfnl0ymv55fV35b0581K7VlVGHLhr/qtT+7zyznvZ5qTf5ay9ds7Yif+bl96amZ23aJ8RB/Zd4dg+q4YNG2bttdfO+PHj061btyTJzJkzM3Xq1E8dbe6999707Nkza621Vu65554af+gMHz48TZs2zTvvvJPZs2dn8eLF+dnPfpYNNthgpY/9qzZt2uTUU0/N6NGjM2fOnBWO5bHHHkv37t3Tpk2bJEuPfPzTn/6UN998c5mY8uijj6Zfv35Za621kiR77LFHhg0btsoB8CPNmjVL796907Rp05x//vn5zne+k8aNG2fcuHG54YYbMnfu3NStWzf7779/unXrlltuuSWPPfZYJk6cmGnTpmXvvffOzTffnAcffDALFy5My5Ytc+SRR2bDDTdcZlsvvfRSLr300syfPz/t27dP/fr106xZs+y7775ZuHBhRo4cmfHjx6e6ujqbb755DjvssNSrVy8XXnhhmjdvnpkzZ+af//xn3n///QwYMCBt27atvIZ33HFHqqur06JFi/Tv3z+tWrXK/fffn3HjxqW6ujqLFi3KySef/G/t14rW+9E2b7nlltSrVy/du3evceTXv5o1a1ZOO+20TJ06Neuss0769++ftddeO4cffnjOOeecfP3rX0+y9A/oIUOG5LLLLlulo63en/dhTr35/vzhiD2yZ7ctKtN33qJ9Hj/1yDSqt/RIo1feeS+bHjc8My85Mev97Ow8c1b/fHODdZMs/bzY76IbM+384zNj1gf52dW35/np72ThokU5uve3clzfHZIkbf7n3Pzyv3vm/sl/z7T33k+zhvVz8//sn6YN6y8z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", + "argumentInfo": { + "argumentName": "base64image", + "formattedValue": "base64 data: iVBORw0KGg..." + } + } + ], + "status": "PASSED", + "durationInNanos": 732605, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3946628, + "depth": 0, + "parentFailed": false + }, + { + "name": "showing thumbnails is set to", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "showing thumbnails is set to" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "showThumbnails", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 171602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 167430198, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 307757704, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment23.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "$ attachment icons exist", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "nrIcons", + "formattedValue": "1" + } + }, + { + "value": "attachment icons exist" + } + ], + "status": "PASSED", + "durationInNanos": 12575790, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "false" + ], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 780051284 + } + ], + "casesAsTable": false, + "durationInNanos": 1840709777, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#274", + "description": "Scenarios of Issue #274" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "a_thumbnail_is_shown_for_image_attachments", + "description": "a thumbnail is shown for image attachments", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#274" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 260602, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has an image attachment $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has an image attachment" + }, + { + "value": "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cybxDH9a/6fbPoYCQBERERERERG5o/5S7y882fBJqlesjp+XHx4eHvaXyL0oMzPT/opPjScuI46Fvy1kddTqOzKeAkARERERERERueMqGCvQxLsJnfw70aZqG2q718ZmsOFn9nN2aSJlKsGSAFY4n3WefZf3sTNuJ8dTjpNrzb1jYyoAFBERERERERERKceMzi5ARERERERERERE7hwFgCIiIiIiIiIiIuWYAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMGm81mS0lJISUlhby8PGfXIyIiIiIiIiIiIrfIxcUFb29vvL29MaekpJCenl7wxmx2dm0iIiIiIiIiIiJyi/Lz80lPTwfAmJycTKVKlRT+iYiIiIiIiIiIlBNms5lKlSqRkpKCMT8/X+GfiIiIiIiIiIhIOWM2m8nLy9MmICIiIiIiIiIiIuWZAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGNmZxdwI2JiYjh69CgAeXl5VK5cmXbt2uHi4gJAbGws4eHh5ObmYjAY8Pf3p1WrVri6uvL999+Tn5+PyWSy9+fu7k7v3r2Jjo5mx44d9OvXD29vbwDS09MJDQ2lb9++9vZ79+4lKiqKwYMH2/vJysri22+/xdPT097ObDbTunVrqlevDsDXX3/No48+iouLC7m5uRw8eJALFy5gMBhwcXEhKCiIOnXq3NkP73fi4+PZsWOH/R5MJhOurq4YDAb69+9/zc8L4OjRo5w7dw6j0UheXh6BgYE0a9aMX3/9lYSEBKxWK5mZmVSqVAmA+++/n4YNG5bpPS5dupRffvkFs9lMZmYmPXv25KmnngIKvr6ffvopO3bswGQy4eHhwV//+ld69eoFwM8//8zbb7/NggULHOr+4osvWLRoET///DPbtm3jgw8+wNfX12HcMWPGkJiYyOrVqwG4dOkSVatWxWw207x5c8aMGcPIkSP57rvvHK7r0aMH69atIzIykrlz5/LZZ5+RkJDA4MGDeemll3jkkUfsbYcNG8aiRYvw8PAgJiaGefPmERkZiZubG97e3jz99NO0atXq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ERERERERERERuVUuLi54eXnh7e2NITc31+bsgkTk5pw/f5569eo5uwwRERERERERuYtpExAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMKAEVERERERERERMoxBYAiIiIiIiIiIiLlmAJAERERERERERGRckwBoIiIiIiIiIiISDmmAFBERERERERERKQcUwAochew2Wzs37+fCxcuABAXF8euXbucXJWIiIiIiIiIlAcKAEWczGazsW/fPq5cuYKXlxeXL19m9+7dVKlSxdmliYiIiIiIiEg5oABQxIkKw7+EhAQ6d+5MVlYWu3btokmTJjRq1MjZ5YmIiIiIiIhIOaAAUMRJFP6JiIiIiIiISFlQACjiJKdPn+bChQu0bdsWNzc39uzZg7+/v8I/EREREREREbmtFACKOEndunWpVq0aBw8eJD8/n1atWnHp0iWio6OdXZqIiIiIiIiIlCMKAEWcxGQy0b59ezw8PPj111+pUqUKbdu25eDBgwoBRUREREREROS2UQAo4kQKAUVERERERETkTjM7uwCRe11hCLhnzx4uX75MYGAgAJGRkfZ/i4iIiIiIiNzLbDYbiYmJ5OfnF3veaDRSpUoVTCbTHe2jUHZ2NikpKUWOGwwGfH19S9XHb7/9xtmzZ7HZbNds5+7uTufOnXFxcblunyVRAChyFzCZTHTs2NH+PiAggICAACdWJCIiIiIiInJ3iImJYcGCBSQnJ1+znbu7OyNGjCAoKOiO9HG1d999l7S0tBL7ePTRR2nduvU1+1iwYAF5eXnXbHN1n+3bty9V2+IoABQRERERERERkbvW8uXLadWqFY888kiJM+usVis7duxgyZIlTJ06tUi729HH1dLS0pgyZQp+fn4OxyMjI5k3bx5ffvkl2dnZdOrUqcQ+Shv+AeTm5pa6bXH0DEAREREREREREblrXbhwgY4dO14zkDMajXTq1ImsrCwSExNL1ceaNWtYs2ZNqfsojcqVK+Pu7g7A6tWryc7Ovql+bjfNABSRW7Z8+XJ27dp13XZPPvnkdadAi4iIiIiIyM1pu6otlcyVcDe742Z2w93kjofZg+oe1Wng3YD63vWp71WfgIp/rEdO2Ww2jMbrz2ErbGO1WkvVR3HPArxWH6Xh6+vLtGnTAJg4cSIpKSm4ubndVF+3kwJAEbllbdu2pXbt2vb3J0+eJCIigt69e+Pj42M/ft999922MefMmUNISIjDsxNFRERERETuden56aTnpzseTICN5zfa37qZ3Gjo3ZCmlZsS7BtMsyrNqFWpVhlXKmVJAaCI3LIGDRrQoEED+/ucnBwiIiJo2bLlHdnMxGq1cv78eUJCQm573yIiIiIiIuVdtiWbw4mHOZx4mBWnVwBQuUJlgqsE09qvNf0C++Hr5uvkKov6xz/+gcViKfacyWRixowZ1+1jzZo19pl/p0+fBmDVqlUAmM1mBg0aVOK1NpuNpUuXEh4eXuqap02bRpUqVRgyZMh1Nxa5kxQAikiZsdlsbN26lZ07d5KYmIi7uztNmzalf//+eHp62tvt3LmT0NBQ4uPjMRqN1KxZkz59+tC4cWPOnDnDnDlzAFixYgUrVqzgrbfecphpKCIiIiIiIjcmKSeJ0EuhhF4KZe6RubSp2oa+tfvSq3YvPMwezi4PgNdee63EpbmlWSJ8q6Kjo9m3b5/9/bx58675XEKAAQMGYDKZ+Prrr3n33XfvdIklUgAoImVmzZo1bN++nd69e9O4cWMSEhJYt24d0dHRvPTSS5jNZiIiIlixYgXdu3dn4MCB5ObmsmvXLv773//yyiuvUKtWLUaPHs3nn39Onz59aN68uUN4KCIiIiIiIrfGarOy9/Je9l7ey9v736ZP7T4MrjeYNlXbOLWuKlWq3HIfV8/wK5z5N3To0FJdm5WV5fA+OTn5utecPXsWg8FARkbGDVR5+ykAFJEykZKSQmhoKD179qRfv34A1K9fH19fX+bOnUt4eDjt2rXj5MmTVKxY0eGXctOmTfn555+xWCy4urpSrVo1AHx8fO7IEmMRERERERH5fzae38jG8xtp7tuckU1G0rVGV2eX9Idx+PBhZ5cAwJ2fHykiQsHGIFarlWbNmpGXl2d/3Xfffbi5uREVFQWAt7c3GRkZbNmyhZycHKDgWQ4PPfQQNWvWdOYtiIiIiIiI3NMOJRzixV9fZPim4Ww4twGLtfjn8d1uRqOx2B17f6/w+YBmc9H5bsX1YTabi7S9Vh+/5+Pjg6+vb4mvG1WxYkUmTZpEixYtbvja69EMQBEpEykpKQDMmjXrmud79uxJbGws3333HevWraNu3boEBwfToUOHu2LrdBERERERkXtdZEokr+95nc+Pf84rrV4hpNqd3aCxfv36bNy4kT59+pQYzFmtVnbu3ImPj0+xS4WL66NLly4AxMfHl6qP34/997//HT8/vxLrnjhxov3f13tWoKenJxMmTMDf35+nnnqKpUuXsn///mtecyMUAIpImXryySeL/UXq7u4OFPxCffLJJ+nXrx+HDx/m6NGjrF27lq1bt/Liiy9qsw8REREREZG7RFRaFOO3j6d3rd5MajGJqu5V78g4jz/+OF9//TUffPBBiZuAGAwGAgICePrppzEYDHekj4YNG9ontUycOBGr1VpiX4UmT55M9erVr9nG29ubCRMm2B93ZTQaGTFiBK6uruzcufOa15aW0wLAqKgo1qxZw6lTp0hNTcXDw4Pg4GAeffRR/P39AXj22WdJSUlhzpw5DlMnV65cyZo1axg8eDBDhgxh8uTJnDt3DpPJxCeffELFihXtbf/xj38QGxuL2Wxm8eLFZGRkMHbsWADq1avHO++8Y2+bmJjIc889B0Dz5s155ZVXHGr+v//7P86fP0/lypWZM2eOww4ze/fuLTKzyWg04ufnR8uWLRkyZAgXL17kX//6F/7+/rz//vv25Dg1NZVJkyZhsVj46KOPbmqaqMjdrjC4q1ixInXq1Lluez8/P3r06EGPHj2IiYlhxowZbN++nQEDBtzpUkVEREREROQGbIrZRNilMMY0HcNjDR/DxehyW/uvXLkyEyZMcHofV/P29ua99967Zhuz2UylSpVKPF+/fn3S0tJ45plnimRBBoOBYcOG4ebmxo4dO7jvvvtuqV6nBIDx8fG8++67ZGdn07ZtW3x9fYmMjGTXrl2cPn2aGTNmXHdqZHEsFgsRERF06tQJgJiYGGJjY0tsf+bMGRITE+2zkcLDw0tsGxMTw/nz53FzcyMpKYnjx48TFBRUpJ2Pjw+NGjUCIC8vj1OnTvHTTz8RFxfHyy+/TKdOndixYwdbtmzhoYceAmD16tVkZWUxdOhQhX9SbjVs2BCDwcDevXtp3Lix/XhWVhbffvst3bt3p2bNmnz//fdUrVqVDh062NvUqlULDw8P8vLyAOx/ibHZbGV7EyIiIiIiIlKsLEsWcw7PYV30OmZ0mkGtSrWcXdId9dprr5Genn7NNu7u7vbVbsUpnIRWEoPBwMCBAxk4cOBN1Xg1pwSAv/32G5mZmXTq1MmevtpsNhYsWAAUPAvsRrd29vDwwNXVlf3799sDwAMHDgDg7+9vX89dKCAggAsXLhAeHk6vXr2AggCwZs2aXLx4sUj/v/76KwD9+/dn5cqV7Nixo9gAsG7durzwwgv290lJSTz33HMcPnyY3NxcHnvsMcLDw/n222/p2rUrSUlJbNmyhapVq/Lwww/f0D2L/JF4e3vzwAMPsG3bNlxdXQkODiY7O5stW7aQlJRk//7Pyclh5cqVJCcnExgYiNVq5cCBA2RmZtK8eXMA+19QwsPD7TMKvb29nXZvIiIiIiIiUuB06mmGbxrOm23fpHft3s4u545xdXW94ezKmZyyC3DlypUBOHHiBIcPH8ZqtWIwGBgzZgxjxoy5qQ8wNzeX4OBgIiIi7Lu6hIeHU7duXSpUqFCkfZUqVfD19bXP+svOzubYsWP22Xu/t2vXLtzc3OjXrx/VqlVj7969pdqBpnCGktFoxGQyUaVKFQYMGEBqairr169n+fLlWK1WHnvsMVxdXW/4vkX+SAYNGsSAAQOIjIxkwYIFrFy5El9fX1544QV7gDd48GB69erFvn37+Pzzz1myZAkJCQmMHj2ahg0bAgWBf69evTh37hzLly8nOTnZmbclIiIiIiIiV8m2ZDN592Te2f8OOZYcZ5cjOGkGYNOmTenWrRvbtm1j+vTpuLm5Ua9ePVq0aEGPHj0cnuFXWlarlRYtWhAWFsaxY8eoU6cOp06dYtCgQcXummK1WmnevDmhoaFkZWVx5MgR8vLyaNGiBb/88otD25MnT3L58mU6dOiAq6srbdu2Zf369URERNCmTRuHtlFRUcydOxcoWJL822+/YbPZ+NOf/mRf1tyvXz+2bdvGd999R35+Pk2bNqV9+/Y3fM8id6uePXvSs2fPIscNBkOJ5woZjUb69u1L3759rznGI488wiOPPHLLtYqIiIiIiMidsfbsWiLiI5jRaQaBnoHOLuee5pQZgABjx47l/fff57HHHqNZs2acPXuWZcuWMXnyZFJSUm6qzxYtWmAymQgPDyciIgKbzVYkoLta69atyc/P59ChQ/alhE2aNCnSbseOHQCEhBRsa92uXTuH41dLSkpi165d7Nq1i71795Kamsro0aN57LHH7G1cXFx4/PHHyc/Px2Aw8OSTT97U/YqIiIiIiIiI3M2i0qIYsXkEe+L2OLuUe5rTdgGGgufw1apV8FDI3NxcZs2aRUREBL/++iv9+vXDxaVg15jMzEyHzTEKl/v9fslsYYB39OhRUlJS8PX1pW7duiWOHxwcjJubG0eOHOHgwYO0bNmyyOYjVquV3bt3AzB37lz77D4oWGKcnZ2Nm5ub/VirVq345z//CcCcOXPYvXs3SUlJRcYuXGrs7u5O7dq1r/NJiYiIiIiIiIj8MWVZsng+7Hne7/g+3Wp2c3Y59ySnzAD86quvePrpp9m+fbv9mKurKzVr1gQKQjfA/v7qdomJifYlvXXq1CnSd9u2bbl48SKHDh265uy/wjGbN2/Ojh07SE1NLbb94cOHSU1NpXr16nTv3t3+ql27Nrm5ucUuLy40fPhwzGYz33//PZcvX75mLSIiIiIiIiIi5VW+LZ+Xdr7EhnMbnF3KPckpMwCDg4PZuHEjCxYsYOfOnVSpUoX4+HiOHj2KyWSiZcuWAAwdOpQjR46wfv16jh49ire3N6dOnSIrK4ugoCCCg4OL9N2mTRsWL15Mdnb2dQPAwvZ79uzBxcWFFi1aYLFYHM4XLvN95JFHHJ5bduDAAT766CN27NhB586di+27WrVq9OnTh3Xr1rFkyRImTZpU6s9IRERERERERKQ8sdqsvL7ndbLysxhcb7Czy7mnOGUGYKtWrXj55ZcJCgoiOjqa0NBQoqOjadGiBa+++qp9WXD9+vWZMmUKzZs3Jykpid9++w0/Pz+GDx/OP//5TwwGQ5G+C5f9enh4cP/995eqFqPRaF8OfLXc3Fz27duH2Wy2P/evUPPmzfHy8uLQoUOkpqaW2P+gQYPw9PRk//79RERElObjEREREREREREpt6aFT2NzzGZnl3FPMeTm5tqcXYSI3Jzz589Tr149Z5chIiIiIiIid4G2q9o6u4RSMxvNzO0yl5BqIc4u5Z7gtF2ARURERERERETk3pRvzWfSr5P4Lfk3Z5dyT1AAKCIiIiIiIiIiZS7LksWE0AnEpMc4u5RyTwGgiIiIiIiIiIg4RXJOMs+HPU+OJcfZpZRrCgBFRERERERERMRpzqWf44ODHzi7jHLN7OwCRERERERERETk1m0ftJ24zDiuZF3hcvZlLmde5nLWZa5kX+Fs6lnOpZ9zdoklWnt2Le2rteeh2g85u5RySbsAi/yBaRdgERERERERKa3YzFh2xu5k9+Xd7Luyj+ScZGeX5MDN5MY3D31DzYo1nV1KuaMAUOQPTAGgiIiIiIiI3KzjScfZEbuDr099TUpuirPLAaBJ5SYseXCJs8sod/QMQBERERERERGRe9D9le9n9P2j+a7vdzx9/9O4m9ydXRInkk7w+fHPnV1GuaMZgCJ/YJoBKCIiIiIiIrdLQnYCnx77lLVRa8m35jutDjeTG2v6rsHPzc9pNZQ3mgEoIiIiIiIiIiL4uvkyufVkVj20igcDHnRaHdmWbGZGzHTa+OWRZgCKAFarlby8PPLz8+2vq5nNZvvLxcUFo/HuyM41A1BERERERETulG0Xt/Hq7lfJseQ4ZfxPu31K66qtnTJ2eXN3pBgiTpSTk0NycjLp6elkZ2cXCf8A8vPzyc7OJj09neTkZHJzc51QqYiIiIiIiEjZ6VazGwt7LKRKhSpOGX/6gelYrBanjF3eKACUe5bFYiE1NZX09HRsttJPhLXZbKSlpZGamorVar2DFYqIiIiIiIg4V2OfxizttZQG3g3KfOwzqWfYFLOpzMctjxQAyj0rIyODvLy8m74+Ly+PjIyM21iRiIiIiIiIyN2nqntVFvVcRGf/zmU+9uLfFpf5mOXRXR0Avv7662zevLnIv//oli5dyrx585xdxj0tOzv7lsK/Qrm5uWRnZ9+GikRERERERETuXm4mN2Z3mc3AugPLdNxTKafYc3lPmY5ZHpmdXcCaNWtYs2YNo0ePpmvXrjfdz7Zt29i6dStxcXHk5uZSvXp1evXqRc+ePW9jtbdHr169in3OnJQNi8VCZmbmNdskJiYyY8YMAN59991rts3MzMTFxQWTyXTbahQRERERERG5G73a6lWi06I5GH+wzMZc/Nti2lVrV2bjlUdOnQFos9kICwsjJCSE7du333Q/v/76K8uWLaNv3768997/x959hzV5vX0A/wYIeyMgKi7cFidqQQEH/NDWXRUtFtHqiwNX3Vak1WodqIhWK85aFAe2olalRRFQrJbiqgUUBUE2hBVGQhLeP7h4mkBIwggo3p/r8mqe5OSckyej5M59zr0de/bswSeffIKgoCBER0c34Yybhrm5Odq3b9/S0/hg8fl8uXv+7d69GzY2Ngr1V1lZSUVBCCGEEEIIIYR8EFRVVLHXbi/a6zRfXONB1gO8LHzZbOO1Ri2aAfjPP/+Az+fDzc0Nq1atQnp6Otq1a1fvfv79919YW1tj2LBhzHUjRoyAtrY29PX1met+++033L59G1wuFz179oS7uzvatGkDAPj9998RHh6O3NxcmJqa4vPPP8dHH30EAPDx8YGtrS1evHiBzMxM8Pl8zJgxA0OHVkWfCwsLERgYiLi4OAgEAnTv3h3u7u4wNTVFWVkZFi1ahPnz5+PcuXOYPHkysrKykJ+fDy8vLwBAfHw8Lly4gPT0dBgYGGDw4MGYNm0aVFRUkJubi9OnT+Ply6oXerdu3eDh4QETE5OGnXSiUPalt7c3kpKSEBMT02R9EkIIIYQQQgghrYG+uj78R/hjzumiBs0AACAASURBVO054FZwm2XM84nnsWnwpmYZqzVq0QzAiIgIDBs2DIaGhrC2tkZUVFSD+unQoQPi4uIQHx8vcf2gQYPQrVtVlZoHDx4gNDQUixcvxp49e6Cjo4PDhw8zt127dg2enp44cuQIpk+fDj8/P2RlZQEAVFVVERYWhlmzZmH79u0YP348Tp8+zWSRnT17FlwuFzt27MDevXuhoaGBwMBAAICaWlWM9c8//8TXX39da5kzh8OBr68vHBwccPDgQSxZsgR3797F77//DgA4f/489PT04Ofnh71798LIyAhBQUENOk+kilAov4S4trZ2k/dJCCGEEEIIIYS0Fp30OsHX1heqrObZDuuP1D8gEFHyTUO1WACwqKgIjx49wvDhVRVk7OzscO/evQYFUpydnfHxxx9j9+7dWLVqFY4cOYLIyEiJCq1RUVEYPnw4rKysoKurC1dXVzg5OUEkEuHOnTtwdHRE586doaKigoEDB6J37964f/8+c/+BAwfC1NQUANC7d29wuVwUFRUBADw8PLBs2TLo6upCW1sbQ4cORVJSksQc7ezsYGFhAQ0NDYnr79+/DwsLC4wcORJqamro2LEjHBwcmMyz0tJSaGpqQkNDA1paWvDw8GAyB0nDKCNYJxKJmrxPQpTp5MmTsLKygpWVFT799NNG98fj8Zj+rKysFM6eJYCnpydz3rZu3drS02k24q+XP//8s9H9LV68mOnPx8enUX0NGDCA6av6BzlCCCGEEFKbjZkNNgza0CxjlQhKEJne8O3jPnQttgT47t27MDc3R+fOnQFUBdhOnTqFR48eKbz3WjU1NTXMnj0bn332GeLi4vDixQv89ttvCAoKwtKl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T7PvSarjzpw5w82bN6lVqxb29vb4+fmxbt06Dh8+TLVq1QB48803OXToECdPnmTo0KHkyZOHUqVKUb16dfz9/bGxscHe3p7u3bszZ84cpk+fzsyZMylevDhly5alcePGeHl5WZx3xIgRacYyYMAA/P39s3Q+ERERERERERGRZy1HAsDUR2uTk5OfSn+BgYEAVK9eHYAaNWqwbt06AgMDjQDQxcWFr7/+mlOnTnHs2DHOnDnDgQMHCAkJITAwkCFDhgDQuHFjqlatysGDBzl9+jQnTpxg3bp1bN68mU8//dTiseL05gD09PTM1vlERERERERERESepRwJAAsWLAhAaGhomn1hYWEkJSXh7e2dpb6Sk5MJDg4GYPLkyUyePNnYd+DAAeLi4nBwcDC2lS1blrJlywIQERHBqFGjOHz4MBcvXjTOmSdPHho1akSjRo0wm82sWLGCFStWsGHDBosAMKM5ALNzPhERERERERERkWfFOidOmlqpt3v3bk6ePGlsj4qK4qeffmL48OEcP348S30dPXqUu3fvUqBAARo2bGj8KVq0KCaTif3795OcnMyoUaPo1asXV69eNY718PAgT548QEqQGBgYSP/+/Zk2bZrRxsrKihIlShhtsiKr5xMREREREREREXnWcqQCsGjRorRp04Y1a9bwz3/+k6JFi5I7d27Onz9PXFwcdevWpXz58sYiIAkJCRaVfakCAgKMx39bt25N48aNjX0HDx7ku+++IzAwkDp16lC2bFnOnj3LiBEjqFixIo6OjoSGhhIWFka+fPkoXrw4bm5uJCUlsXPnTsLDwylWrBgPHjzgyJEjAMbjxKmWLFmS5hFggPfffz9L5xMREREREREREXnWciQABHjnnXcoUqQImzdvJjw8nBs3bhhVfE2aNLFom5ycTFBQUJo+2rdvT0hICLa2ttSoUcNiX6VKlXB1deXIkSPcvXuXt99+Gw8PD37//XeOHz9OXFwcbm5u1KtXj44dO2Jra0vevHkZOXIkq1ev5uTJkwQGBmJra0uRIkVo3LgxDRs2tDjH0aNH07223r17Z+l8IiIiIiIiIiIiz5qVyWQy5/QgROTJhIeHZzoPpYiIiIiIiIj8teXIHIAiIiIiIiIiIiLyfCgAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUkRdKbGwsc+fOpXPnztSsWRNfX18qVqxIq1atmDBhAjExMTk9xCdy+vRpfHx8mDBhQqZtf/75Z3x8fDh48OBzGNmTqVatGm+//XaOnb9ChQq89957mbbbtGkTPj4+LFu2LMN2/fr1w8fHh8TExKc1xFfGzfs3ab+4PU7fOGH1lVWGf3L/MzddlnUhKi4qp4ctIiIiIvJCi4qK4sKFC4SGhhIbG/vMz2f7zM8gIpJFDx484J133uHUqVO0bNmSd955BxcXF27fvs3vv//OlClT2LFjB4sWLcLR0TGnh/tYt27dolatWvz222+UKFEi28dXqlSJHj16kD9//mcwOpHs6fO/Pqw6tSpLbe8n3Gfx8cXkss3FnHZznvHIREREREReTrdu3eLGjRvG6/v371O8eHFy5879zM6pAFBEXhhr167lxIkTDBo0iAEDBljse/fddxk3bhzTpk1j9erVdOnSJYdGmbmgoKA/dXzt2rWpXbv2UxqNyJ+z6fymbB+z4dyGZzASEREREZGXX1RUFDdu3MDa2hpvb29MJhPh4eFcunQJb29vnJycnsl59QiwiLwwbt26BaQ83pmegQMHEhQUlCb8W7VqFR06dKBChQqULVuWN954gx9//BGTyWS0OXr0KD4+PixevJgZM2bQoEEDypYtS5MmTVi9ejVxcXGMHj2aWrVqUaFCBTp37szJkyctzpOYmMi0adNo3rw5ZcuWpXLlynTp0oWtW7cabXr16sVHH30EQJMmTdI8Vmpra8vmzZtp3bo1ZcuWpVq1anz22Wfcv3/faPPoI8CpY1+yZAlLliyhRYsWlC1bljp16jBq1CgePHhgMc5ffvmFpk2bUrZsWRo0aMCMGTM4cOAAPj4+LFy4MMP3IDo6mjFjxtCoUSPKlStHlSpV6NSpE2vWrEnT1sbGhrNnzxIQEEDFihWpUKECAQEBXLhwwaLd9evXGTp0KLVr16Z06dJUrVqVXr16pXnEuWvXrlSpUiXNeX799Vd8fHz49ddfMxz7vHnzaNKkCWXKlKFu3bpMmDAh24/03r9/n6FDh+Ln50eZMmVo1aqVxfsLKffoX//6F/Xq1aN06dJUr16dbt26ERwcbNFu8uTJ+Pj4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AAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAF9oixcvzty5cz/vYQAAAHxpCYDAl8b06dNz6qmnZptttsk3v/nN9OrVK7vvvnuuvfba1NbWVtabPHlyunTpknHjxn2Oo/3yOvnkk/PjH/94petst912ufLKKz/TcSxatCg333xzfvzjH+fggw/OsGHD8sILL3ym+wQAAChRvVNOOeW0z3sQwCfz/vvvp3Xr1p/3MP4t/vKXv2TvvffOG2+8kf322y/7779/+vbtm9mzZ+fSSy/NCy+8kJ133jlVVVVp0KBBOnTokF69eqVZs2af99C/8I4//vjMmzcv3bt3T5I88MADmTVrVnbdddcVXqdt27bp2bNnVl999c9sXHfccUcef/zxHHPMMRk0aFAaN26cSy+9NGuuuWY6duz4me0XAACgNPU/7wEArMrChQszdOjQdOjQITfccEOaN29euWzgwIHZbLPNctJJJ+XPf/5z+vbtm5YtW2bQoEGf44i/XF544YX079//Y11n5513/oxG8/978MEHc+CBB6ZLly5Jkk033TQtW7bMJZdckkWLFqVv376f+RgAAABKYAow8IX3xz/+MdOnT89JJ51UJ/4ttccee+SZZ56pBKEPTwF+7LHH0qVLl/zlL3+pc53nnnsuXbp0yaOPPpokmThxYn74wx+mV69e2WijjXLEEUdk2rRplfWHDBmSwYMH55Zbbsl2222XHj16ZODAgctsd3lqamoyYsSIDBgwIH379s1OO+2UCy64IAsXLqys8+yzz+bggw9Ov3790r9//xx++OF5/vnnK5ffcsst2X777TNu3Ljss88+6d+/f/bZZ5+89NJLueuuu7L77rtnq622ytChQ/Puu+9Wrvfuu+/m1FNPzYABA9KvX78ceOCBdaZG9+7dO9OnT8/PfvazbLPNNpXl9erVy4MPPpjvf//72XzzzfMf//EfmTRpUuXyD08BXjq2pbfh1ltvnYEDB+aOO+6oczvceuut2XnnnbPFFlvksMMOy5QpU9K7d+/84Q9/WO7tNnfu3LRo0SJJMmbMmBx11FG56qqrsuuuu+aqq67KY489tsrbHgAAAAEQ+BIYN25cqqur06dPnxWus6Kpvn379k3btm1z33331Vl+zz33pG3bttliiy0yffr0DBo0KPXq1cuYMWMyevTovPvuu9l///2zYMGCJEn9+vUzbty4PPvss7nzzjvz9NNPp3Xr1jn++ONXOf6rr746d999d0455ZTcfPPNOfHEE3PfffflsssuS5K8+uqrOfLII9OuXbtcffXV+Z//+Z80bdo0RxxxRN58883K/mfNmpVbb701V1xxRe65554sXLgwxx13XMaNG5frr78+t9xySyZNmpTrrrsuyZL30BsyZEgmTJiQ0047Ldddd13WX3/9DB06NC+//HKS5Pe//32S5LjjjqsT7GbMmJHf/va3OfXUU3PppZemqqoqp5566nKPb+nYrrzyygwfPjwPPfRQBgwYkLPPPjtvvfVWkuT555/Pz3/+82y99dYZM2ZMBg4cmBNPPDFJUlVVtdztbrjhhrn33nuTJPfff3+OO+64fO9738vvfve77L777vnNb36Thx9+eJW3PwAAwFedAAh84b311ltZc801U79+3XctmDt3bmbPnl35mjdv3jLXrVevXr773e8uEwDHjh2bnXbaKfXq1cvo0aNTVVWVESNGpHv37unRo0cuuOCCvPbaa7nnnnvq7O/kk09O06ZN07hx4+y222555ZVXVvkJtS+//HK6du2azTffPB07dkz//v1z6aWXZpdddkmy5Ay6pk2b5vTTT883vvGNfOMb38iZZ56Zmpqa3HXXXZXt1NTU5IADDkjz5s3TvHnz9OvXL9OmTcvRRx+dxo0bp127dundu3cmT56cJHnyySfz4osv5uSTT863vvWtfP3rX8+xxx6btdZaKzfccEOSpGXLlkmSpk2bVr5PkpkzZ+bMM89Mz54907Nnz+yzzz6ZMmVKZs2atdxjrKmpyYEHHpj27dunqqoqu+66a2pqavLSSy8lSe666660adMmP/nJT9K5c+cMGDAg22677UpvtwMOOCAvvPBCJVyOHTs23/3ud7PHHnvktttuy5577pnRo0fngQceWOl2AAAAvuoEQOALr7q6us502aW23nrrbLTRRpWvgw46aLnXHzBgQKZMmVKJUc8//3ymTp2agQMHJlky/XajjTaqTDdNkrXXXjvrrLNOnWmvnTp1SuPGjSs/Lw1m77333krHv9VWW+Xpp5/OCSeckPvvvz/vv/9+OnfunE6dOiVZ8h586623Xp3A2bRp03Tq1Kky5g+PYalmzZqlZcuWdT4IplmzZpVIN3HixDRo0CC9evWqXF5dXZ1NNtmkEglXpFOnTmnVqlXl5zZt2iRJ5syZs8LrfOMb36h8v/S2/OCDD5IkU6ZMyUYbbZR69epV1vn2t7+90jG0atUqJ598cp588sm0aNEic+bMyfnnn5/tt98+e+65Z26++ebstddemTp16kq3AwAA8FXnQ0CAL7y11lorb7/9dubNm1cnwF1xxRWVMHjJJZes8Ey8b33rW1ljjTVy7733plu3brnnnnvSoUOHbLrppkmSWbNm5fnnn883v/nNOtdbsGBBZQprkjr7/rDFixevdPw77bRTmjVrlptvvjmnnnpqamtrs/XWW+e///u/06ZNm8yePXu5n6bbrFmzzJ49u86yBg0a1Pm5YcOGK9zv7Nmzs3DhwmyxxRZ1ltfW1qZt27YrHXOTJk3q/Lx0mu7KjrVRo0bLLFu6/nvvvZc11lijzmUfPuNwRdq3b5+TTz45Z555Znr06JHXX3895513Xo455phUVVXlxhtv/EjTsAEAAL7KBEDgC2/zzTfP5ZdfnjvvvDN77bVXZfnGG29c+b5t27Z5/fXXl3v96urq7LTTTrnvvvsyZMiQjB07tjL9NkmaN2+e3r1756yzzlrmuit6b8GPa+utt87WW2+duXPn5rHHHsv555+fM844IxdeeGFWW2215U6tnTVr1nLD4Ee12mqrpWHDhhkzZswyl1VX/3tPAG/YsOEyU7Tff//9j3Tdf46A06ZNy3nnnVcJf7/4xS9y0kkn5etf//qnPm4AAIASmAIMfOFtueWW6datWy666KI6Z+QtNWfOnMqHWqzIgAEDMmnSpDzxxBP529/+Vpn+mywJiVOmTMk666yTLl26VL6qq6vTrl27f3n8Dz30UKZPn55kyZl1O+ywQ3bbbbfKmNdff/288MILdaY5f/DBB5kyZUo22GCDT7zfDTbYIAsWLEhtbW06d+5c+WrUqNEyx7Wqsxj/VUunU394Pw8++OBHvv7SCPi///u/6dixYzbaaKNUV1dnxx13zIABA/KrX/3qsxg2AABAEQRA4Auvuro6I0eOzIIFCzJgwICMGjUqDzzwQO69996cf/752XbbbfPqq69myJAhK9zGpptumrXXXjtnnXVWunfvnu7du1cu+8EPfpA5c+Zk2LBhmTRpUqZMmZJRo0Zlxx13zHPPPfcvj//666/PCSeckPHjx2fatGkZN25c7r///sp78+21116ZN29eTj/99Lz66qt5+eWXc9JJJ2W11VbLzjvv/In326dPn3Tv3j2nnHJKnnnmmUyfPj1jx47ND37wg9x8881JlkzbbdSoUcaPH5/JkyenpqbmXz7e5dl+++0zY8aMXHrppZk2bVrGjh2bRx555GNtY2kEnDBhQv7xj39UpiV/97vfzbRp01b4ASUAAABfdaYAA18K3bp1y+9///tcdtllue222/LLX/4yDRs2TMeOHbPvvvvmhz/8YZ0PrfhnVVVV+d73vperrroqxx13XJ3LOnTokNGjR2f48OHZa6+9Ur9+/XTr1i2XX355Ntlkk3957GeffXYuuOCCDBs2rDKtt3///hk8eHCSpGPHjvnlL3+Ziy++OPvuu2/q1auXnj175rLLLqvzAR8fV7169XLxxRdnxIgRGTZsWObOnZu11147Bx98cAYNGlRZ78ADD8xvfvObPProo7n99tv/5eNdnq222ipHHHFEbrjhhowZMya9evXKiSeemEGDBi33vQNXpH379jnllFNyxhlnZP78+dl9993z7LPPplmzZp/adG0AAIDSVC1YsOCznfcFfGamTp2adddd9/MeBqzS4sWLM3PmzDrvafiXv/wlhxxySG688cZ06dLlY23vnXfeyWWXXZZJkyZltdVWy+GHH/6pxFoAAIASCYDwJSYA8mXxzDPP5LDDDsvhhx+e73znO3n33Xdz3nnnpbq6OldffXVlOu/HNX/+/DRs2PATXx8AAOCrQACELzEBkC+Tu+++O9dee22mTp2a5s2bp1evXjn66KM/lQ9aAQAAYMUEQPgSEwAp2TPPPJNevXp97P8CAABQlwAIX2ICIAAAALAq1Z/3AAAAAACAz44ACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMHqf94DAAAA4PMzfPjwTJgwIUmyePHiJElVVVWSZLfddsuee+75sbf5+OOPp1evXmncuPGnN1AAPjEBEAAA4Cts2LBhle8vuOCCdOrUKXvssce/tM2bbropG2ywgQAI8AUhAAIAALBcCxcuzPXXX59nn302NTU1WX/99fOjH/0oDRs2zOTJk3PNNddk7ty5Wbx4cbbYYovstddeueCCC/LOO+/k9NNPzwEHHJCePXt+3ocB8JXnPQABAABYrjvvvDOvvvpqzj777IwcOTKLFi3KDTfckCS57rrrstNOO+WCCy7I2WefnTfeeCNvv/12hgwZkiQ59dRTxT+ALwgBEAAAgOV69NFHs/3226dRo0apqqrKjjvumCeffDJJ0rp16zz55JP529/+lkaNGmXo0KFZY401PucRA7A8pgADAACwXLNnz861115bOetv8eLFWbhwYWpra3PYYYfl7rvvzq9+9au8//772W677T7RB4YA8NkTAAEAAFiuNm3aZJ999lnuVN5mzZpl7733zt57751p06Zl+PDh6dy5s2m/AF9ApgADAACwXH369Ml9992XhQsXJkkef/zx3HbbbampqcnJJ5+cadOmJUnatWuXZs2aJUmqq5e8zJw9e/bnM2gAluEMQAAAAJZrl112yfXXX59hw4YlSVZfffUcdNBBqV+/fnbeeeeMGDEiCxYsSFVVVXr37p3evXunqqoqm222WU455ZQMGjQo22233ed8FABULViwYPHnPQjgk5k6dWrWXXfdz3sYAAAAwBeYKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwep/3gOAr5oZM2Zk8eLFadeuXerVq5fa2tq89dZbqa6uTvv27Ze7DgAAAMAn5QxA+DdbtGhRFi9enEWLFtX5uba2doXrAAAAAHxSAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFCw+p/3AOCrpkmTJkmS+vXrV/7bpEmTVFVVrXAdAAAAgE9KXYB/s9atW9f5uaqqapll//wzAAAAwCdlCjAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABQ9P+eYAAAgAElEQVRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrP7nPQAAAPgsPPfajPQ6+ZdZnOR7G38jdx1zQJJkQU1tzrnzkYx54rlMeefdNGvUMD07rZUTdtk622/YJUly5UPjcsOfJuT+E370mY/zlVdeyQknnJCbbrqpzvLnn38+55xzTq699tqcffbZee6555IkixYtSpJUVy/5t/zvf//76dWrV0444YTstNNOOfDAA+ts55FHHsmoUaMyePDgbLXVVvnd736X8ePH57TTTvtI4xs2bFjmzZuXESNGVPb5aZs4cWJGjRqVTTfdNIceeugK1/vjH/+YO+64I7Nmzco666yTww8/PGuuueYy69XW1uY3v/lNnnrqqSxatCg9evTIYYcdloYNG650HEvvi/r1l7xMat68eTp06JDvfOc72XzzzT/Ssbz44otp2rRp1llnnY+0/pfFv3JcRx55ZI466qhssMEGdZZfdNFF6dChQ/bYY49/eXx7jByTO555IbWLF+fp049I7693SJJc/6cJGXnvE/nfqW+muqoqXdq3yaHf/laO3H6zJMnLb87MeseNSM01Z/zLY/ioxo4dm2uvvTZHHnlk+vXrt8L1br/99tx7772ZN29eOnbsmIMOOijrrrvuctf9qI+hJLnvvvty55135oMPPsjaa6+dAw88MN26dVtme6effnp++tOfVu63l156Kb/+9a/z1ltvpVWrVtlvv/2y6aabrvJ4zzzzzDz//POpqqqqLPvJT36Srl275sgjj6yz7uLFi9OjR4+ceOKJmT9/fq677ro8/fTTmT9/fvr165eDDjoo9erVq3Odm266Kbfccssyz6Gftv333z81NTWpqqpK48aN0759+2y++eYZMGBA5Tnj07Ki+3PhwoW55ppr8tRTT2XhwoVZb731cuihh6ZVq1ar3ObK7veVPbdOmjQp11xzTWbMmJHmzZtnjz32yDbbbJMkeeaZZ3L99dfnnXfeSatWrbLnnnumf//+qxzL4sWLc/311+eBBx5ITU1N+vTpk0MOOSQNGjRYZt2V7X/ixIm57rrrMmPGjLRt2zaHHHJI1ltvveXuc2WPp4/6t2WpFf1dPOecc/Lcc8/lsssuS4sWLepcZ+jQoVm8eHEuvvjiVd4+nxUBEACAIm28zpqpueaMnHn7Q/nzK69Vln9/5OhMnflerjh4t/Tq3CHza2ry26efz24jrsvdxx6Qrdf7egZtsXH2+NYGK9n6v9cJJ5xQ+X748OHp3Llz9t5778qyV155Ja1atcoTTzyR/fbbr86L0YcffjitW7f+RPudPHlyWrVqlcaNG2f8+PHp3bv3Jz+IFXj44Yfzhz/8YYUv2pb661//mtGjR+enP/1pvva1r+WWW27JyJEjc/bZZy+z7tixY/PSSy/lvPPOS4MGDXLeeeflpptuyn777feRxjRmzJgkyXvvvZenn346l19+ed55553svPPOq7zuH//4x/Ts2bO4APhFP67fHv2DJEn9A06pLDv37kfzi7seycUH7JLv9OiaZo0a5tHJU3LYr+/IzFlzcspu387X12idaRcf/28b56WXXppFixZlrbXWWul6f/rTn3L//ffnjDPOSJs2bXLrrbfmwgsvXG48+KiPoSSZMGFCbrzxxvzsZz9Lhw4dcscdd+TCCy/Mr371q8o68+bNy1VXXVUnKi1YsCDnnXde9ttvv2y55ZaZMGFCLrzwwowcOTItW7Zc6T7nzJmTY445ZrnPH0sfa0v94he/SN++fZMkN998c15//fVccMEFqa2tzVlnnZU777wzu+22W2X9KVOm5PHHH1/lcX9aTj755GywwQaZO3duJk+enGuuuSYvvvhijj/+0/sdWtn9ecstt+TVV1/N+eefnwYNGmTkyJG57rrrMnjw4JVuc2X3+8qeWz/44IP84he/yOGHH56+fftm0qRJOfPMM9O9e/c0bNgwI0eOzLBhw7Lhhhtm4sSJ+fnPf55u3bqlXbt2Kx3P2LFjM3HixFxwwQWpX79+Ro0aleeee26Z35GV7b9JkyY599xzM2TIkPTq1SuPPvpozj333Pzyl79M48aN62xnZY+nj/O3JVn138WWLVvm0UcfzYABAyrLXnzxxcyfP3+V/wj1WRMAAQD4yvjj86/k/omv5OXzf5KObZa8aG3aqEEO3qZ3duzxjazVqnmSZPQTz+WGP03IsQO2zI+u+G1ev+j4VP+/s1dOueX+TJr2Vn579A/y2ORXc8yYe/Lu7LmpV12VkfvvnO/06Jq/vf1uNj35lzlrrx0ydsL/5eU3Z2aHDbtm5P4DVji2f1WTJk3SunXrjB8/Pn369EmSzJw5M1OnTv3E0eb+++9P//79s9pqq+W+++6r80JnxIgRadGiRd5+++3MmjUrixYtylFHHZW11157pZf9s06dOuW0007LjTfemNmzZ69wLE888UT69u2bTp06JVly5uPvfve7vPHGG8vElMceeywDBw7MaqutliTZY489cuGFF37kALhUy5Yts/3226dFixa56KKL8u1vfzvNmjXLuHHjcsMNN2TOnDlp0KBBBg0alD59+uS2227LE088kQkTJmTatGnZe++9c+utt+ahhx7KwoUL07Zt2xx++OHp2LHjMvt6+eWXc9lll2XevHnp2rVrGjVqlJYtW2bffffNwoULM3r06IwfPz41NTXZYIMNcsghh6Rhw4YZNWpUWrVqlZkzZ+Yf//hH3n///QwZMiSdO3eu3Id33XVXampq0qZNmwwePDjt2rXLAw88kHHjxqWmpia1tbU55ZRTPtZxrWi7S/d52223pWHDhunbt2+dM7/+2XvvvZef/exnmTp1alZfffUMHjw4rVu3zqGHHppzzjknX/va15IseQE9fPjwXH755R/pbKv3587Pabc+kN8ctkf27LNhZfkOG3bNn087PE0bLjnT6G9vv5v1jhuRmZeelPZHnZ2/nDU431x7jSRLni9+cMlNmXbR8Znx3gc56uo788L0t7OwtjZHbr9ZjhuwZZKk03+em2O+1z8PTPprpr37flo2aZRb/3NQWjRptMy4dthhh3Tp0iUnnnjiSsffvn37DB06NKuvvnqSpF+/frnppptSU1OzzPF/1MdQkrRo0SJHH3105Xewf//+GTNmTObNm1eJJtddd1369euXJ598snK9iRMnpmnTptlqq62SJBtvvHG6dOmSp59+Ottvv/0Kf3eSZPbs2WnatOlKx5UsiTRz5syp7GP8+PHZZ599KtcdOHBgbr311koArKmpySWXXJL99tsv55577gq3++abb+bKK6/Mm2++merq6vTu3Tv77LNP6tevnyOPPDI777xzJk6cmL///e9p2rRpjj322FWOt0mTJunZs2c6duyYn/zkJ3n22WfTs2fPzJw5M1dddVVef/311NbWZscdd8zAgQOTJDNmzMhll12W1157LS1atMi+++5buY0+bGX35ze/+c3069ev8ty22Wab5Z577lnlbbuy+31lz61NmjTJj3/840qUXX/99dOmTZu88cYb6dy5cwYPHpwNN1zy+Npwww3TvHnzzJgxY5UB8A9/+EN++MMfVs6SGzZsWOWyq666KrNnz87QoUNTW1u7wv0vWLAg7dq1q/xd2mqrrXLbbbdlwoQJ6dOnT53trOzx9HH+tiQr/7uYJJtuumkefPDBOgHw4Ycf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", + "argumentInfo": { + "argumentName": "base64image", + "formattedValue": "base64 data: iVBORw0KGg..." + } + } + ], + "status": "PASSED", + "durationInNanos": 493804, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 4516432, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 152463992, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 320519894, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "jgiven-html-thumbnail", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "jgiven-html-thumbnail" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 15772713, + "depth": 0, + "parentFailed": false + }, + { + "name": "the image is loaded", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the image is loaded" + } + ], + "status": "PASSED", + "durationInNanos": 14447903, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 834530674 + } + ], + "casesAsTable": false, + "durationInNanos": 834530674, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#274", + "description": "Scenarios of Issue #274" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "steps_can_have_multiple_attachments", + "description": "steps can have multiple attachments", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 235801, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has a text attachment with content", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has a text attachment with content" + }, + { + "value": "Some Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 347903, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has another text attachment with content", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has another text attachment with content" + }, + { + "value": "Another Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Another Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 407903, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2174316, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 49078352, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 304784681, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment24.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "$ attachment icons exist", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nrIcons", + "formattedValue": "2" + } + }, + { + "value": "attachment icons exist" + } + ], + "status": "PASSED", + "durationInNanos": 13188994, + "depth": 0, + "parentFailed": false + }, + { + "name": "the content of the attachment referenced by icon $ is", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the content of the attachment referenced by icon" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "iconNr", + "formattedValue": "1" + } + }, + { + "value": "is" + }, + { + "value": "Some Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 38565476, + "depth": 0, + "parentFailed": false + }, + { + "name": "the content of the attachment referenced by icon $ is", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the content of the attachment referenced by icon" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "iconNr", + "formattedValue": "2" + } + }, + { + "value": "is" + }, + { + "value": "Another Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Another Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 36456861, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 607583749 + } + ], + "casesAsTable": false, + "durationInNanos": 607583749, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {} + ], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:613" + } + ] + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "name": "Test Framework Execution", + "scenarios": [ + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "failing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_are_ignored", + "description": "failing tests annotated with Pending with failIfPassed set to true are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#4", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test" + } + ], + "status": "PASSED", + "durationInNanos": 43300, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 22300, + "depth": 0, + "parentFailed": false + }, + { + "name": "failIfPassed set to true", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "failIfPassed set to true" + } + ], + "status": "PASSED", + "durationInNanos": 171001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 9088565, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is ignored", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test is ignored" + } + ], + "status": "PASSED", + "durationInNanos": 181601, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 12428689 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 14912707 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 46271931 + } + ], + "casesAsTable": true, + "durationInNanos": 73613327, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + { + "value": "#4", + "description": "Scenarios of Issue #4" + }, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:152" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "description_annotations_on_test_classes_are_evaluated", + "description": "description annotations on test classes are evaluated", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class" + } + ], + "status": "PASSED", + "durationInNanos": 51101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class has a description annotation with value", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test class has a description annotation with value" + }, + { + "value": "Test Description", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "Test Description" + } + } + ], + "status": "PASSED", + "durationInNanos": 192702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 5745541, + "depth": 0, + "parentFailed": false + }, + { + "name": "the description of the report model is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the description of the report model is" + }, + { + "value": "Test Description", + "argumentInfo": { + "argumentName": "description", + "formattedValue": "Test Description" + } + } + ], + "status": "PASSED", + "durationInNanos": 202301, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 7640154 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 9046765 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 65127566 + } + ], + "casesAsTable": true, + "durationInNanos": 81814485, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:149" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "passing_tests_annotated_with_Pending_are_ignored", + "description": "passing tests annotated with Pending are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a passing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a passing test" + } + ], + "status": "PASSED", + "durationInNanos": 30700, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 12400, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1651212, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is ignored", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test is ignored" + } + ], + "status": "PASSED", + "durationInNanos": 58001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 3072422 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 10636676 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 62145845 + } + ], + "casesAsTable": true, + "durationInNanos": 75854943, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:154" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "the_error_message_of_a_failing_step_is_reported", + "description": "the error message of a failing step is reported", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test" + } + ], + "status": "PASSED", + "durationInNanos": 72300, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 2224616, + "depth": 0, + "parentFailed": false + }, + { + "name": "the case is marked as failed", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the case is marked as failed" + } + ], + "status": "PASSED", + "durationInNanos": 90601, + "depth": 0, + "parentFailed": false + }, + { + "name": "an error message is stored in the report", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "an error message is stored in the report" + } + ], + "status": "PASSED", + "durationInNanos": 56300, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 8485261 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 11512682 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 82237489 + } + ], + "casesAsTable": true, + "durationInNanos": 102235432, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:157" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "passing_steps_before_failing_steps_are_reported_as_passed", + "description": "passing steps before failing steps are reported as passed", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 180002, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 5860342, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 2147815, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as passed", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as passed" + } + ], + "status": "PASSED", + "durationInNanos": 206901, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 191002, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 9748070 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 12073186 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 85057908 + } + ], + "casesAsTable": true, + "durationInNanos": 106879164, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:153" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "failing_tests_annotated_with_Pending_are_ignored", + "description": "failing tests annotated with Pending are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test" + } + ], + "status": "PASSED", + "durationInNanos": 26200, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 12000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1683113, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is ignored", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test is ignored" + } + ], + "status": "PASSED", + "durationInNanos": 102001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 8930164 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 12805991 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 39764484 + } + ], + "casesAsTable": true, + "durationInNanos": 61500639, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:150" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "passing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_fail", + "description": "passing tests annotated with Pending with failIfPassed set to true fail", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#4", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a passing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a passing test" + } + ], + "status": "PASSED", + "durationInNanos": 25600, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 11800, + "depth": 0, + "parentFailed": false + }, + { + "name": "failIfPassed set to true", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "failIfPassed set to true" + } + ], + "status": "PASSED", + "durationInNanos": 9601, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1708512, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation.", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation." + } + } + ], + "status": "PASSED", + "durationInNanos": 230101, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 8336259 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 11254380 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 49742656 + } + ], + "casesAsTable": true, + "durationInNanos": 69333295, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + { + "value": "#4", + "description": "Scenarios of Issue #4" + }, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:155" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "failing_tests_annotated_with_Pending_with_executeSteps_set_to_true_are_ignored", + "description": "failing tests annotated with Pending with executeSteps set to true are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test" + } + ], + "status": "PASSED", + "durationInNanos": 23100, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 11001, + "depth": 0, + "parentFailed": false + }, + { + "name": "executeSteps set to true", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "executeSteps set to true" + } + ], + "status": "PASSED", + "durationInNanos": 20900, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1684912, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is ignored", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test is ignored" + } + ], + "status": "PASSED", + "durationInNanos": 51200, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 3141722 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 11048279 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 46086930 + } + ], + "casesAsTable": true, + "durationInNanos": 60276931, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:151" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "tag_annotations_appear_in_the_report_model", + "description": "tag annotations appear in the report model", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeatureTags-Tags" + ], + "explicitParameters": [ + "testFramework" + ], + "derivedParameters": [ + "testFramework" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test" + } + ], + "status": "PASSED", + "durationInNanos": 29800, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has a tag annotation named", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has a tag annotation named" + }, + { + "value": "TestTag", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "TestTag" + } + } + ], + "status": "PASSED", + "durationInNanos": 162402, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1513811, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model contains a tag named", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model contains a tag named" + }, + { + "value": "com.tngtech.jgiven.tests.TestTag", + "argumentInfo": { + "argumentName": "tagName", + "formattedValue": "com.tngtech.jgiven.tests.TestTag" + } + } + ], + "status": "PASSED", + "durationInNanos": 463803, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "JUnit" + ], + "derivedArguments": [ + "JUnit" + ], + "status": "SUCCESS", + "durationInNanos": 3787827 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "JUnit5" + ], + "derivedArguments": [ + "JUnit5" + ], + "status": "SUCCESS", + "durationInNanos": 11783785 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "TestNG" + ], + "derivedArguments": [ + "TestNG" + ], + "status": "SUCCESS", + "durationInNanos": 53718284 + } + ], + "casesAsTable": true, + "durationInNanos": 69289896, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + { + "value": "Tags" + } + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:156" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "name": "Difference Analyzer", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "testMethodName": "the_difference_analyzer_should_find_additional_steps_in_the_middle", + "description": "the difference analyzer should find additional steps in the middle", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureCaseDiffs" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 62900, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 287702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 304002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "extra step in the middle", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "extra step in the middle" + } + } + ], + "status": "PASSED", + "durationInNanos": 254902, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + } + ], + "status": "PASSED", + "durationInNanos": 224502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 380503, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + } + ], + "status": "PASSED", + "durationInNanos": 272202, + "depth": 0, + "parentFailed": false + }, + { + "name": "the difference analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the difference analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 3865428, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 269302, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "2" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 291702, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "3" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 201301, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 195402, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "2" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 198801, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 8318459 + } + ], + "casesAsTable": false, + "durationInNanos": 8318459, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Difference Analyzer", + "expanded": false, + "$$hashKey": "object:606" + }, + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "testMethodName": "the_difference_analyzer_should_find_additional_steps_at_the_beginning", + "description": "the difference analyzer should find additional steps at the beginning", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureCaseDiffs" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 45900, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 259702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "extra step at the beginning", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "extra step at the beginning" + } + } + ], + "status": "PASSED", + "durationInNanos": 260202, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 201402, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 288602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the difference analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the difference analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 115301, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 353103, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "2" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 226401, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 216301, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 3032021 + } + ], + "casesAsTable": false, + "durationInNanos": 3032021, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Difference Analyzer", + "expanded": false, + "$$hashKey": "object:604" + }, + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "testMethodName": "the_difference_analyzer_should_find_differences_in_step_arguments", + "description": "the difference analyzer should find differences in step arguments", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureCaseDiffs" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 49300, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 327702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 259502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 299702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the difference analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the difference analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 562504, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 243802, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "3" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 14760806, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 277702, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "3" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 267701, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 17969330 + } + ], + "casesAsTable": false, + "durationInNanos": 17969330, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Difference Analyzer", + "expanded": false, + "$$hashKey": "object:607" + }, + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "testMethodName": "the_difference_analyzer_should_find_additional_steps_at_the_end", + "description": "the difference analyzer should find additional steps at the end", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureCaseDiffs" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 47901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 190301, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 184502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + } + ], + "status": "PASSED", + "durationInNanos": 187201, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 190201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the difference analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the difference analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 61300, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 197501, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "2" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 201802, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 212701, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 2341117 + } + ], + "casesAsTable": false, + "durationInNanos": 2341117, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Difference Analyzer", + "expanded": false, + "$$hashKey": "object:605" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + "name": "Ascii Doc Report Generator", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + "testMethodName": "the_AsciiDoc_reporter_generates_an_index_file_a_test_file_and_multiple_other_asciidoc_files", + "description": "the AsciiDoc reporter generates an index file a test file and multiple other asciidoc files", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureAsciiDocReport" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 1695912, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3116423, + "depth": 0, + "parentFailed": false + }, + { + "name": "the asciidoc reporter is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the asciidoc reporter is executed" + } + ], + "status": "PASSED", + "durationInNanos": 104707653, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "index.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"index.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 9958772, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "totalStatistics.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"totalStatistics.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 1087808, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "allScenarios.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"allScenarios.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 253502, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "failedScenarios.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"failedScenarios.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 528704, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "pendingScenarios.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"pendingScenarios.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 244502, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "features/Test.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"features/Test.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 306902, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 126571010 + } + ], + "casesAsTable": false, + "durationInNanos": 126571010, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Ascii Doc Report Generator" + }, + { + "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + "testMethodName": "the_multilines_values_are_rendered_as_literal_blocks", + "description": "the multilines values are rendered as literal blocks", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureAsciiDocReport" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 259301, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has a formatted value $ as parameter", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has a formatted value" + }, + { + "value": "Some \ntext \nwith \nnewlines", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "Some \ntext \nwith \nnewlines" + } + }, + { + "value": "as parameter" + } + ], + "status": "PASSED", + "durationInNanos": 438003, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3492725, + "depth": 0, + "parentFailed": false + }, + { + "name": "the asciidoc reporter is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the asciidoc reporter is executed" + } + ], + "status": "PASSED", + "durationInNanos": 36131260, + "depth": 0, + "parentFailed": false + }, + { + "name": "the asciidoc report $ exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the asciidoc report" + }, + { + "value": "features/Test.asciidoc", + "argumentInfo": { + "argumentName": "ascidocFile", + "formattedValue": "features/Test.asciidoc" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 482703, + "depth": 0, + "parentFailed": false + }, + { + "name": "the literal block is added $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the literal block is added" + }, + { + "value": "....\nSome \ntext \nwith \nnewlines\n....", + "argumentInfo": { + "argumentName": "expectedLiteral", + "formattedValue": "....\nSome \ntext \nwith \nnewlines\n...." + } + } + ], + "status": "PASSED", + "durationInNanos": 32621635, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 115058328 + } + ], + "casesAsTable": false, + "durationInNanos": 115058328, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Ascii Doc Report Generator" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", + "name": "Repeated Stage Use", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", + "testMethodName": "before_stage_method_is_executed_multiple_times", + "description": "before stage method is executed multiple times", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a scenario step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a scenario step" + } + ], + "status": "PASSED", + "durationInNanos": 90501, + "depth": 0, + "parentFailed": false + }, + { + "name": "a stage is completed", + "words": [ + { + "value": "a stage is completed" + } + ], + "status": "PASSED", + "durationInNanos": 84501, + "depth": 0, + "parentFailed": false + }, + { + "name": "non repeatable lifecycle method ran", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "non repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 4823835, + "depth": 0, + "parentFailed": false + }, + { + "name": "repeatable lifecycle method ran", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 351103, + "depth": 0, + "parentFailed": false + }, + { + "name": "a scenario step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a scenario step" + } + ], + "status": "PASSED", + "durationInNanos": 404403, + "depth": 0, + "parentFailed": false + }, + { + "name": "a stage is completed", + "words": [ + { + "value": "a stage is completed" + } + ], + "status": "PASSED", + "durationInNanos": 279502, + "depth": 0, + "parentFailed": false + }, + { + "name": "repeatable lifecycle method ran", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 290903, + "depth": 0, + "parentFailed": false + }, + { + "name": "non repeatable lifecycle method ran", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "non repeatable lifecycle method ran" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 213201, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 40164489 + } + ], + "casesAsTable": false, + "durationInNanos": 40164489, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Repeated Stage Use" + }, + { + "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", + "testMethodName": "after_stage_method_is_executed_multiple_times", + "description": "after stage method is executed multiple times", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a scenario step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a scenario step" + } + ], + "status": "PASSED", + "durationInNanos": 47101, + "depth": 0, + "parentFailed": false + }, + { + "name": "a stage is completed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "a stage is completed" + } + ], + "status": "PASSED", + "durationInNanos": 101201, + "depth": 0, + "parentFailed": false + }, + { + "name": "non repeatable lifecycle method ran", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "non repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 257602, + "depth": 0, + "parentFailed": false + }, + { + "name": "repeatable lifecycle method ran", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 434603, + "depth": 0, + "parentFailed": false + }, + { + "name": "a scenario step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a scenario step" + } + ], + "status": "PASSED", + "durationInNanos": 44600, + "depth": 0, + "parentFailed": false + }, + { + "name": "a stage is completed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "a stage is completed" + } + ], + "status": "PASSED", + "durationInNanos": 57600, + "depth": 0, + "parentFailed": false + }, + { + "name": "repeatable lifecycle method ran", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 515604, + "depth": 0, + "parentFailed": false + }, + { + "name": "non repeatable lifecycle method ran", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "non repeatable lifecycle method ran" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 194502, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4888935 + } + ], + "casesAsTable": false, + "durationInNanos": 4888935, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Repeated Stage Use" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "name": "J Unit Executor", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "after_stage_methods_of_stages_following_failing_stages_are_ignored", + "description": "after stage methods of stages following failing stages are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 613505, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 2309517, + "depth": 0, + "parentFailed": false + }, + { + "name": "stage $ has a failing after stage method", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "stage" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a failing after stage method" + } + ], + "status": "PASSED", + "durationInNanos": 297602, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 280602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 126871012, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 194902, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 661205, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 281102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 135850177 + } + ], + "casesAsTable": false, + "durationInNanos": 135850177, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1332" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "test_classes_with_only_ignored_test_result_in_a_valid_report", + "description": "test classes with only ignored test result in a valid report", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#25" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class with all tests ignored", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class with all tests ignored" + } + ], + "status": "PASSED", + "durationInNanos": 2911521, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 4978835, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model is either null or empty", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model is either null or empty" + } + ], + "status": "PASSED", + "durationInNanos": 224602, + "extendedDescription": "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", + "depth": 0, + "parentFailed": false + }, + { + "name": "has a valid class name if it is not null", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "has a valid class name if it is not null" + } + ], + "status": "PASSED", + "durationInNanos": 141001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 11680684 + } + ], + "casesAsTable": false, + "durationInNanos": 11680684, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#25" + } + ], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1336" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "the_JUnit_Parametrized_runner_creates_correct_cases", + "description": "the JUnit Parametrized runner creates correct cases", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a JUnit test class with the Parameterized Runner", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a JUnit test class with the Parameterized Runner" + } + ], + "status": "PASSED", + "durationInNanos": 97101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class has $ parameters", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test class has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nParameters", + "formattedValue": "2" + } + }, + { + "value": "parameters" + } + ], + "status": "PASSED", + "durationInNanos": 5710741, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 67272583, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model contains one scenario for each test method", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model contains one scenario for each test method" + } + ], + "status": "PASSED", + "durationInNanos": 571804, + "depth": 0, + "parentFailed": false + }, + { + "name": "each scenario contains $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "each scenario contains" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nParameters", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 500904, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 81940189 + } + ], + "casesAsTable": false, + "durationInNanos": 81940189, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1337" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "all_steps_of_stages_following_failing_stages_are_ignored", + "description": "all steps of stages following failing stages are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 334602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 329002, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 278602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 2683919, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 78800, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 348702, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 238101, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 5513840 + } + ], + "casesAsTable": false, + "durationInNanos": 5513840, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1333" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "steps_following_failing_steps_are_reported_as_skipped", + "description": "steps following failing steps are reported as skipped", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "3" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 363903, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 290102, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 12578390, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 420203, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 247302, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "3" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 271202, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 15509911 + } + ], + "casesAsTable": false, + "durationInNanos": 15509911, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1335" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + "description": "exception in scenario is not hidden by exception in JUnit after method", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#49" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class with a failing scenario and a failing after stage", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class with a failing scenario and a failing after stage" + } + ], + "status": "PASSED", + "durationInNanos": 3306623, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 8229560, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "assertion failed in test step", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "assertion failed in test step" + } + } + ], + "status": "PASSED", + "durationInNanos": 796406, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 14999308 + } + ], + "casesAsTable": false, + "durationInNanos": 14999308, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#49", + "description": "Scenarios of Issue #49" + } + ], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1334" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.LifecycleOrderingTest", + "name": "Lifecycle Ordering", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.LifecycleOrderingTest", + "testMethodName": "ostensibly_empty_test", + "description": "ostensibly empty test", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "an emptySetup", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "an emptySetup" + } + ], + "status": "PASSED", + "durationInNanos": 109400, + "depth": 0, + "parentFailed": false + }, + { + "name": "no action is performed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "no action is performed" + } + ], + "status": "PASSED", + "durationInNanos": 20700, + "depth": 0, + "parentFailed": false + }, + { + "name": "nothing happens", + "words": [ + { + "value": "then", + "isIntroWord": true + }, + { + "value": "nothing happens" + } + ], + "status": "PASSED", + "durationInNanos": 11900, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4417131 + } + ], + "casesAsTable": false, + "durationInNanos": 4417131, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Lifecycle Ordering" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", + "name": "Simple Stage Repetition Use", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", + "testMethodName": "non_repeatable_methods_are_called_exactly_once", + "description": "non repeatable methods are called exactly once", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a simple stage containing before and after methods", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a simple stage containing before and after methods" + } + ], + "status": "PASSED", + "durationInNanos": 123001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the test is executed" + } + ], + "status": "PASSED", + "durationInNanos": 60000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the before stage was called $ times", + "words": [ + { + "value": "then", + "isIntroWord": true + }, + { + "value": "the before stage was called" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "numberOfCalls", + "formattedValue": "1" + } + }, + { + "value": "times" + } + ], + "status": "PASSED", + "durationInNanos": 6729049, + "depth": 0, + "parentFailed": false + }, + { + "name": "the after stage method was called $ times", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the after stage method was called" + }, + { + "value": "0", + "argumentInfo": { + "argumentName": "numberOfCalls", + "formattedValue": "0" + } + }, + { + "value": "times" + } + ], + "status": "PASSED", + "durationInNanos": 418803, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 9219067 + } + ], + "casesAsTable": false, + "durationInNanos": 9219067, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Simple Stage Repetition Use" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + "name": "Argument Analyzer", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + "testMethodName": "multiple_formatted_arguments_lead_to_one_parameter", + "description": "multiple formatted arguments lead to one parameter", + "tagIds": [ + "com.tngtech.jgiven.tags.Issue-#163" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "an unanalyzed report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "an unanalyzed report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 268502, + "extendedDescription": "A report model where the analysers have not been executed on", + "depth": 0, + "parentFailed": false + }, + { + "name": "parameters", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 625405, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 249502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 355003, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "'foo'", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"'foo'\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 4366532, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "'foo'", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"'foo'\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 492903, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 266102, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "'bar'", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"'bar'\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 649704, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "'bar'", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"'bar'\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 417703, + "depth": 0, + "parentFailed": false + }, + { + "name": "the argument analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the argument analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 247001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has derived parameters", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has derived parameters" + }, + { + "value": "arg1", + "argumentInfo": { + "argumentName": "parameters", + "formattedValue": "arg1" + } + } + ], + "status": "PASSED", + "durationInNanos": 2632319, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has derived arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has derived arguments" + }, + { + "value": "'foo'", + "argumentInfo": { + "argumentName": "arguments", + "formattedValue": "'foo'" + } + } + ], + "status": "PASSED", + "durationInNanos": 460503, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has derived arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "has derived arguments" + }, + { + "value": "'bar'", + "argumentInfo": { + "argumentName": "arguments", + "formattedValue": "'bar'" + } + } + ], + "status": "PASSED", + "durationInNanos": 399103, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 12902992 + } + ], + "casesAsTable": false, + "durationInNanos": 12902992, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "#163", + "description": "Scenarios of Issue #163" + } + ], + "classTitle": "Argument Analyzer" + }, + { + "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + "testMethodName": "different_structure_prevent_data_table", + "description": "different structure prevent data table", + "tagIds": [ + "com.tngtech.jgiven.tags.Issue-#163" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "an unanalyzed report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "an unanalyzed report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 52500, + "extendedDescription": "A report model where the analysers have not been executed on", + "depth": 0, + "parentFailed": false + }, + { + "name": "parameters", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 245602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 208602, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 234302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 325303, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 289102, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 278702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "some step different to the case before", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step different to the case before" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 255802, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 344803, + "depth": 0, + "parentFailed": false + }, + { + "name": "the argument analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the argument analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 41501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has no derived parameters", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has no derived parameters" + } + ], + "status": "PASSED", + "durationInNanos": 66501, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 2952121 + } + ], + "casesAsTable": false, + "durationInNanos": 2952121, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "#163", + "description": "Scenarios of Issue #163" + } + ], + "classTitle": "Argument Analyzer" + }, + { + "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + "testMethodName": "multiple_parameter_usages_lead_to_one_parameter", + "description": "multiple parameter usages lead to one parameter", + "tagIds": [ + "com.tngtech.jgiven.tags.Issue-#32" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "an unanalyzed report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "an unanalyzed report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 70401, + "extendedDescription": "A report model where the analysers have not been executed on", + "depth": 0, + "parentFailed": false + }, + { + "name": "parameters", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 366203, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 298802, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 419103, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 395103, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 302002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 338002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 292602, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 237702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the argument analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the argument analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 129901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has derived parameters", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has derived parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "parameters", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 239802, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has derived arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has derived arguments" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arguments", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 250302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has derived arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "has derived arguments" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arguments", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 266302, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4819435 + } + ], + "casesAsTable": false, + "durationInNanos": 4819435, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "#32", + "description": "Scenarios of Issue #32" + } + ], + "classTitle": "Argument Analyzer" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", + "name": "De Einfacher Szenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", + "testMethodName": "Szenarien_können_in_deutsch_geschrieben_werden", + "description": "Szenarien können in deutsch geschrieben werden", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureGerman" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "ein deutsches Projekt", + "words": [ + { + "value": "gegeben", + "isIntroWord": true + }, + { + "value": "ein deutsches Projekt" + } + ], + "status": "PASSED", + "durationInNanos": 157101, + "depth": 0, + "parentFailed": false + }, + { + "name": "JGiven verwendet wird", + "words": [ + { + "value": "wenn", + "isIntroWord": true + }, + { + "value": "JGiven verwendet wird" + } + ], + "status": "PASSED", + "durationInNanos": 193101, + "depth": 0, + "parentFailed": false + }, + { + "name": "die Szenarien in deutsch geschrieben werden", + "words": [ + { + "value": "und", + "isIntroWord": true + }, + { + "value": "die Szenarien in deutsch geschrieben werden" + } + ], + "status": "PASSED", + "durationInNanos": 43301, + "depth": 0, + "parentFailed": false + }, + { + "name": "generiert JGiven deutsche Berichte", + "words": [ + { + "value": "dann", + "isIntroWord": true + }, + { + "value": "generiert JGiven deutsche Berichte" + } + ], + "status": "PASSED", + "durationInNanos": 808805, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4559333 + } + ], + "casesAsTable": false, + "durationInNanos": 4559333, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "De Einfacher Szenario", + "expanded": false, + "$$hashKey": "object:602" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", + "name": "Test With Exceptions In After Method", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", + "testMethodName": "test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + "description": "test that exception in scenario is not hidden by exception in JUnit after method", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 105601, + "depth": 0, + "parentFailed": false + }, + { + "name": "a step fails", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "a step fails" + } + ], + "status": "FAILED", + "durationInNanos": 538304, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "FAILED", + "errorMessage": "java.lang.AssertionError: assertion failed in test step", + "stackTrace": [ + "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", + "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod.test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(TestWithExceptionsInAfterMethod.java:22)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", + "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", + "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", + "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", + "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", + "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", + "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(JUnit5ExecutorTest.java:43)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", + "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", + "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", + "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", + "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", + "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", + "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", + "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", + "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", + "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", + "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", + "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", + "org.junit.rules.RunRules.evaluate(RunRules.java:20)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", + "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", + "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", + "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", + "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", + "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" + ], + "durationInNanos": 5174537 + } + ], + "casesAsTable": false, + "durationInNanos": 5174537, + "executionStatus": "FAILED", + "tags": [], + "classTitle": "Test With Exceptions In After Method" + } + ] + }, + { + "className": "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", + "name": "Parallelization Error Prevention", + "scenarios": [ + { + "className": "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", + "testMethodName": "attempting_to_run_testNG_in_parallel_with_injected_stages_is_prevented", + "description": "attempting to run testNG in parallel with injected stages is prevented", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#829" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a testNG class with parallel tests and injected stages", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a testNG class with parallel tests and injected stages" + } + ], + "status": "PASSED", + "durationInNanos": 1732913, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with TestNG", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with TestNG" + } + ], + "status": "PASSED", + "durationInNanos": 51989872, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information.", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information." + } + } + ], + "status": "PASSED", + "durationInNanos": 323302, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 55119094 + } + ], + "casesAsTable": false, + "durationInNanos": 55119094, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#829", + "description": "Scenarios of Issue #829" + } + ], + "classTitle": "Parallelization Error Prevention", + "expanded": false, + "$$hashKey": "object:148" + } + ] + }, + { + "className": "com.tngtech.jgiven.testng.DataProviderTestNgTest", + "name": "Data Provider Test Ng", + "scenarios": [ + { + "className": "com.tngtech.jgiven.testng.DataProviderTestNgTest", + "testMethodName": "a_scenario_with_one_failing_case_still_executes_the_following_ones", + "description": "a scenario with one failing case still executes the following ones", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#123" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a TestNG test with two cases and the first one fails", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a TestNG test with two cases and the first one fails", + "$$hashKey": "object:444" + } + ], + "status": "PASSED", + "durationInNanos": 483504, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:407" + }, + { + "name": "the test class is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with", + "$$hashKey": "object:449" + }, + { + "value": "TestNG", + "argumentInfo": { + "argumentName": "framework", + "formattedValue": "TestNG" + }, + "$$hashKey": "object:450" + } + ], + "status": "PASSED", + "durationInNanos": 68705692, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:408" + }, + { + "name": "$ tests fail", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "nFailedTests", + "formattedValue": "1" + }, + "$$hashKey": "object:456" + }, + { + "value": "tests fail", + "$$hashKey": "object:457" + } + ], + "status": "PASSED", + "durationInNanos": 905906, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:409" + }, + { + "name": "the report model contains one scenario with $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report model contains one scenario with", + "$$hashKey": "object:463" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nCases", + "formattedValue": "2" + }, + "$$hashKey": "object:464" + }, + { + "value": "cases", + "$$hashKey": "object:465" + } + ], + "status": "PASSED", + "durationInNanos": 257701, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:410" + }, + { + "name": "the scenario has execution status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has execution status", + "$$hashKey": "object:473" + }, + { + "value": "FAILED", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "FAILED" + }, + "$$hashKey": "object:474" + } + ], + "status": "PASSED", + "durationInNanos": 120001, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:411" + }, + { + "name": "case $ has status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case", + "$$hashKey": "object:480" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + }, + "$$hashKey": "object:481" + }, + { + "value": "has status", + "$$hashKey": "object:482" + }, + { + "value": "FAILED", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "FAILED" + }, + "$$hashKey": "object:483" + } + ], + "status": "PASSED", + "durationInNanos": 192701, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:412" + }, + { + "name": "case $ has status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case", + "$$hashKey": "object:493" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + }, + "$$hashKey": "object:494" + }, + { + "value": "has status", + "$$hashKey": "object:495" + }, + { + "value": "SUCCESS", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "SUCCESS" + }, + "$$hashKey": "object:496" + } + ], + "status": "PASSED", + "durationInNanos": 212502, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:413" + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 72215616, + "$$hashKey": "object:404" + } + ], + "casesAsTable": false, + "durationInNanos": 72215616, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#123", + "description": "Scenarios of Issue #123" + } + ], + "classTitle": "Data Provider Test Ng", + "expanded": false, + "$$hashKey": "object:146" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "name": "Plain Text Scenario Writer", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "data_tables_are_generated_correctly_in_text_reports", + "description": "data tables are generated correctly in text reports", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#34" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 71801, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "3" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 264302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "43", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"43\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 332403, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg11", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg11\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 271302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "4", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"4\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 261702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg21", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg21\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 256502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ fails with error message", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "fails with error message" + }, + { + "value": "Some Error", + "argumentInfo": { + "argumentName": "errorMessage", + "formattedValue": "Some Error" + } + } + ], + "status": "PASSED", + "durationInNanos": 218602, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "3" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "1234567", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"1234567\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 267002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "3" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg31", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg31\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 245302, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 12775591, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 400403, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 157202, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 122501, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 17576626 + } + ], + "casesAsTable": false, + "durationInNanos": 17576626, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#34", + "description": "Scenarios of Issue #34" + } + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:619" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "new_lines_in_data_tables_do_not_break_the_table_layout", + "description": "new lines in data tables do not break the table layout", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#152" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 44401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 186101, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "1\n2", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"1\n2\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 431703, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "4", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"4\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 581705, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 8388660, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 176901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 159601, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 11461882 + } + ], + "casesAsTable": false, + "durationInNanos": 11461882, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#152", + "description": "Scenarios of Issue #152" + } + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:621" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "data_tables_are_generated_for_empty_strings", + "description": "data tables are generated for empty strings", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 45101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 199201, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "non empty string", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"non empty string\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 300903, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 261002, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 399503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 141801, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 115001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 2541418 + } + ], + "casesAsTable": false, + "durationInNanos": 2541418, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {} + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:620" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "ignored_steps_marked_in_text_reports", + "description": "ignored steps marked in text reports", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport" + ], + "explicitParameters": [ + "status", + "expectedText" + ], + "derivedParameters": [ + "status", + "expectedText" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 47800, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is named", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is named" + }, + { + "value": "something happens", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "something happens" + } + } + ], + "status": "PASSED", + "durationInNanos": 240202, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ has status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "has status" + }, + { + "value": "PASSED", + "argumentInfo": { + "parameterName": "status", + "argumentName": "status", + "formattedValue": "PASSED" + } + } + ], + "status": "PASSED", + "durationInNanos": 187901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 231501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "something happens", + "argumentInfo": { + "parameterName": "expectedText", + "argumentName": "line", + "formattedValue": "something happens" + } + } + ], + "status": "PASSED", + "durationInNanos": 152501, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "PASSED", + "something happens" + ], + "derivedArguments": [ + "PASSED", + "something happens" + ], + "status": "SUCCESS", + "durationInNanos": 1978214 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "FAILED", + "something happens (failed)" + ], + "derivedArguments": [ + "FAILED", + "something happens (failed)" + ], + "status": "SUCCESS", + "durationInNanos": 10393174 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "SKIPPED", + "something happens (skipped)" + ], + "derivedArguments": [ + "SKIPPED", + "something happens (skipped)" + ], + "status": "SUCCESS", + "durationInNanos": 2467018 + }, + { + "caseNr": 4, + "steps": [], + "explicitArguments": [ + "PENDING", + "something happens (pending)" + ], + "derivedArguments": [ + "PENDING", + "something happens (pending)" + ], + "status": "SUCCESS", + "durationInNanos": 12376589 + } + ], + "casesAsTable": true, + "durationInNanos": 27214995, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Plain Text Scenario Writer" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "table_annotations_at_parameters_lead_to_data_tables_in_the_report", + "description": "table annotations at parameters lead to data tables in the report", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.Issue-#52", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + "explicitParameters": [ + "headerType", + "hasHeaderLine" + ], + "derivedParameters": [ + "headerType", + "line" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 78601, + "depth": 0, + "parentFailed": false + }, + { + "name": "a step has a data table with following values", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a step has a data table with following values" + }, + { + "value": "[[foo, bar], [1, a], [2, b]]", + "argumentInfo": { + "argumentName": "dataTable", + "dataTable": { + "headerType": "HORIZONTAL", + "data": [ + [ + "foo", + "bar" + ], + [ + "1", + "a" + ], + [ + "2", + "b" + ] + ] + } + } + } + ], + "status": "PASSED", + "durationInNanos": 26546090, + "depth": 0, + "parentFailed": false + }, + { + "name": "header type set to", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "header type set to" + }, + { + "value": "VERTICAL", + "argumentInfo": { + "parameterName": "headerType", + "argumentName": "headerType", + "formattedValue": "VERTICAL" + } + } + ], + "status": "PASSED", + "durationInNanos": 211101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 465404, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n", + "argumentInfo": { + "parameterName": "line", + "argumentName": "line", + "formattedValue": "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 227502, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "VERTICAL", + "false" + ], + "derivedArguments": [ + "VERTICAL", + "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + ], + "status": "SUCCESS", + "durationInNanos": 28951607 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "HORIZONTAL", + "true" + ], + "derivedArguments": [ + "HORIZONTAL", + "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" + ], + "status": "SUCCESS", + "durationInNanos": 1995914 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "NONE", + "false" + ], + "derivedArguments": [ + "NONE", + "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + ], + "status": "SUCCESS", + "durationInNanos": 1839113 + }, + { + "caseNr": 4, + "steps": [], + "explicitArguments": [ + "BOTH", + "true" + ], + "derivedArguments": [ + "BOTH", + "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" + ], + "status": "SUCCESS", + "durationInNanos": 1593212 + } + ], + "casesAsTable": true, + "durationInNanos": 34379846, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#52", + "description": "Scenarios of Issue #52" + }, + {} + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:623" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "arguments_are_correctly_printed_in_text_reports_for_data_tables", + "description": "arguments are correctly printed in text reports for data tables", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#10" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 37100, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has parameters", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 297702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 179602, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "arg10", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "arg10" + } + } + ], + "status": "PASSED", + "durationInNanos": 147301, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg10", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg10\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 312002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "arg20", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "arg20" + } + } + ], + "status": "PASSED", + "durationInNanos": 283702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg20", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg20\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 334102, + "depth": 0, + "parentFailed": false + }, + { + "name": "all cases have a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "all cases have a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "someArg", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "someArg" + } + } + ], + "status": "PASSED", + "durationInNanos": 206201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 5862042, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "some step someArg", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "some step someArg" + } + } + ], + "status": "PASSED", + "durationInNanos": 162401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "some arg step ", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "some arg step " + } + } + ], + "status": "PASSED", + "durationInNanos": 130101, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 9048065 + } + ], + "casesAsTable": false, + "durationInNanos": 9048065, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#10", + "description": "Scenarios of Issue #10" + } + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:618" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "cases_are_generated_in_text_reports", + "description": "cases are generated in text reports", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 39201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 227401, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "someArg", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "someArg" + } + } + ], + "status": "PASSED", + "durationInNanos": 152002, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 519504, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "Case 1:", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "Case 1:" + } + } + ], + "status": "PASSED", + "durationInNanos": 145001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "Case 2:", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "Case 2:" + } + } + ], + "status": "PASSED", + "durationInNanos": 113801, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "When some step someArg", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "When some step someArg" + } + } + ], + "status": "PASSED", + "durationInNanos": 120201, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1955114 + } + ], + "casesAsTable": false, + "durationInNanos": 1955114, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Plain Text Scenario Writer" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "a_description_column_is_generated_if_cases_have_a_description", + "description": "a description column is generated if cases have a description", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 38700, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 177502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has description" + }, + { + "value": "some test description", + "argumentInfo": { + "argumentName": "description", + "formattedValue": "some test description" + } + } + ], + "status": "PASSED", + "durationInNanos": 165301, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has description" + }, + { + "value": "another case", + "argumentInfo": { + "argumentName": "description", + "formattedValue": "another case" + } + } + ], + "status": "PASSED", + "durationInNanos": 146901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 367002, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 161201, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1918714 + } + ], + "casesAsTable": false, + "durationInNanos": 1918714, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {} + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:617" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "parameters_with_equal_values_but_different_formatting_result_in_different_placeholders", + "description": "parameters with equal values but different formatting result in different placeholders", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#104" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 49000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 194301, + "depth": 0, + "parentFailed": false + }, + { + "name": "parameters", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "parameters" + }, + { + "value": "aParam, anotherParam", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "aParam, anotherParam" + } + } + ], + "status": "PASSED", + "durationInNanos": 220302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "false, false", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "false, false" + } + } + ], + "status": "PASSED", + "durationInNanos": 172601, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"false\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "anArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"anArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 304402, + "depth": 0, + "parentFailed": false + }, + { + "name": "formatted value", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "formatted value" + }, + { + "value": "off", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "\"off\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 193001, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"false\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "anotherArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"anotherArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 288402, + "depth": 0, + "parentFailed": false + }, + { + "name": "formatted value", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "formatted value" + }, + { + "value": "is not", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "\"is not\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 165201, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "true, true", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "true, true" + } + } + ], + "status": "PASSED", + "durationInNanos": 192601, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"true\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "anArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"anArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 283102, + "depth": 0, + "parentFailed": false + }, + { + "name": "formatted value", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "formatted value" + }, + { + "value": "on", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "\"on\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 188502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"true\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "anotherArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"anotherArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 234001, + "depth": 0, + "parentFailed": false + }, + { + "name": "formatted value", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "formatted value" + }, + { + "value": "is", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "\"is\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 7903256, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 417403, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 183401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 217201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 114001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 19413739 + } + ], + "casesAsTable": false, + "durationInNanos": 19413739, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#104", + "description": "Scenarios of Issue #104" + } + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:622" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", + "name": "Scenario Executor", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", + "testMethodName": "step_methods_can_have_primitive_arrays_as_parameters", + "description": "step methods can have primitive arrays as parameters", + "tagIds": [ + "com.tngtech.jgiven.tags.Issue-#1", + "com.tngtech.jgiven.tags.FeatureStepParameters" + ], + "explicitParameters": [ + "type", + "array" + ], + "derivedParameters": [ + "type", + "array" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a step method with a primitive $ array $ as parameter", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a step method with a primitive", + "$$hashKey": "object:1282" + }, + { + "value": "byte", + "argumentInfo": { + "parameterName": "type", + "argumentName": "type", + "formattedValue": "byte" + }, + "$$hashKey": "object:1283" + }, + { + "value": "array", + "$$hashKey": "object:1284" + }, + { + "value": "1, 2, 3", + "argumentInfo": { + "parameterName": "array", + "argumentName": "array", + "formattedValue": "1, 2, 3" + }, + "$$hashKey": "object:1285" + }, + { + "value": "as parameter", + "$$hashKey": "object:1286" + } + ], + "status": "PASSED", + "durationInNanos": 1192009, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:1155" + }, + { + "name": "the scenario is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the scenario is executed", + "$$hashKey": "object:1305" + } + ], + "status": "PASSED", + "durationInNanos": 70301, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:1156" + }, + { + "name": "no exception is thrown", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "no exception is thrown", + "$$hashKey": "object:1316" + } + ], + "status": "PASSED", + "durationInNanos": 281602, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:1157" + } + ], + "explicitArguments": [ + "byte", + "1, 2, 3" + ], + "derivedArguments": [ + "byte", + "1, 2, 3" + ], + "status": "SUCCESS", + "durationInNanos": 45356626, + "$$hashKey": "object:1152" + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "char", + "a, b, c" + ], + "derivedArguments": [ + "char", + "a, b, c" + ], + "status": "SUCCESS", + "durationInNanos": 2016415, + "$$hashKey": "object:1267" + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "short", + "1, 2, 3" + ], + "derivedArguments": [ + "short", + "1, 2, 3" + ], + "status": "SUCCESS", + "durationInNanos": 1923614, + "$$hashKey": "object:1268" + }, + { + "caseNr": 4, + "steps": [], + "explicitArguments": [ + "int", + "1, 2, 3" + ], + "derivedArguments": [ + "int", + "1, 2, 3" + ], + "status": "SUCCESS", + "durationInNanos": 1477311, + "$$hashKey": "object:1269" + }, + { + "caseNr": 5, + "steps": [], + "explicitArguments": [ + "long", + "1, 2, 3" + ], + "derivedArguments": [ + "long", + "1, 2, 3" + ], + "status": "SUCCESS", + "durationInNanos": 2269416, + "$$hashKey": "object:1270" + }, + { + "caseNr": 6, + "steps": [], + "explicitArguments": [ + "double", + "1.0, 2.0, 3.0" + ], + "derivedArguments": [ + "double", + "1.0, 2.0, 3.0" + ], + "status": "SUCCESS", + "durationInNanos": 2017714, + "$$hashKey": "object:1271" + }, + { + "caseNr": 7, + "steps": [], + "explicitArguments": [ + "float", + "1.0, 2.0, 3.0" + ], + "derivedArguments": [ + "float", + "1.0, 2.0, 3.0" + ], + "status": "SUCCESS", + "durationInNanos": 1714512, + "$$hashKey": "object:1272" + }, + { + "caseNr": 8, + "steps": [], + "explicitArguments": [ + "boolean", + "true, false" + ], + "derivedArguments": [ + "boolean", + "true, false" + ], + "status": "SUCCESS", + "durationInNanos": 1732412, + "$$hashKey": "object:1273" + } + ], + "casesAsTable": true, + "durationInNanos": 58508020, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "#1", + "description": "Scenarios of Issue #1" + }, + {} + ], + "classTitle": "Scenario Executor", + "expanded": true, + "$$hashKey": "object:624" + }, + { + "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", + "testMethodName": "methods_called_during_stage_construction_are_ignored_in_the_report", + "description": "methods called during stage construction are ignored in the report", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "some stage with method called during construction", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "some stage with method called during construction" + } + ], + "status": "PASSED", + "durationInNanos": 70601, + "depth": 0, + "parentFailed": false + }, + { + "name": "the method does not appear in the report", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the method does not appear in the report" + } + ], + "status": "PASSED", + "durationInNanos": 444003, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 891706 + } + ], + "casesAsTable": false, + "durationInNanos": 891706, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Scenario Executor" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", + "name": "Es Simple Escenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", + "testMethodName": "los_escenarios_se_pueden_escribir_en_espannol", + "description": "los escenarios se pueden escribir en espannol", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureSpanish" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "un proyecto en espannol", + "words": [ + { + "value": "dado", + "isIntroWord": true + }, + { + "value": "un proyecto en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 72601, + "depth": 0, + "parentFailed": false + }, + { + "name": "se usa JGiven", + "words": [ + { + "value": "cuando", + "isIntroWord": true + }, + { + "value": "se usa JGiven" + } + ], + "status": "PASSED", + "durationInNanos": 69501, + "depth": 0, + "parentFailed": false + }, + { + "name": "los escenarios se escriben en espannol", + "words": [ + { + "value": "y", + "isIntroWord": true + }, + { + "value": "los escenarios se escriben en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 31200, + "depth": 0, + "parentFailed": false + }, + { + "name": "JGiven genera los informes en espannol", + "words": [ + { + "value": "entonces", + "isIntroWord": true + }, + { + "value": "JGiven genera los informes en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 29500, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1912414 + } + ], + "casesAsTable": false, + "durationInNanos": 1912414, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Es Simple Escenario", + "expanded": false, + "$$hashKey": "object:609" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", + "name": "Guaranteed State", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", + "testMethodName": "assure_before_method_of_second_test_is_executed_after_guaranteed_fields_validation", + "description": "assure before method of second test is executed after guaranteed fields validation", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a Jgiven test with a guaranteed null state", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a Jgiven test with a guaranteed null state" + } + ], + "status": "PASSED", + "durationInNanos": 11396282, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed" + } + ], + "status": "PASSED", + "durationInNanos": 436443939, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains $ exception", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains" + }, + { + "value": "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException", + "argumentInfo": { + "argumentName": "givenException", + "formattedValue": "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException" + } + }, + { + "value": "exception" + } + ], + "status": "PASSED", + "durationInNanos": 225002718, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 706130579 + } + ], + "casesAsTable": false, + "durationInNanos": 706130579, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Guaranteed State" + }, + { + "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", + "testMethodName": "assure_before_method_of_second_test_is_executed_if_guaranteed_initialized", + "description": "assure before method of second test is executed if guaranteed initialized", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a Jgiven test with a guaranteed state", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a Jgiven test with a guaranteed state" + } + ], + "status": "PASSED", + "durationInNanos": 145501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed" + } + ], + "status": "PASSED", + "durationInNanos": 26399390, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains $ exception", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains" + }, + { + "value": "class java.lang.ClassNotFoundException", + "argumentInfo": { + "argumentName": "givenException", + "formattedValue": "class java.lang.ClassNotFoundException" + } + }, + { + "value": "exception" + } + ], + "status": "PASSED", + "durationInNanos": 1562611, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 28556606 + } + ], + "casesAsTable": false, + "durationInNanos": 28556606, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Guaranteed State" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + "name": "HTML Report Generator", + "description": "Test that only checks the generated files of the HTML report generator", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + "testMethodName": "the_HTML_report_generator_creates_a_tags_file", + "description": "the HTML report generator creates a 'tags.js' file", + "extendedDescription": "To reduce duplicated storage of tag data, the HTML reporter generates a 'tags.js' file that contains all tags that appeared in all input files", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTags-Tags" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 210402, + "depth": 0, + "parentFailed": false + }, + { + "name": "scenario $ has tag $ with value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has tag" + }, + { + "value": "TestTag", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "TestTag" + } + }, + { + "value": "with value" + }, + { + "value": "123", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "123" + } + } + ], + "status": "PASSED", + "durationInNanos": 4294631, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2268516, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 47162538, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file $ exists in folder $", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "a file" + }, + { + "value": "tags.js", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"tags.js\"" + } + }, + { + "value": "exists in folder" + }, + { + "value": "data", + "argumentInfo": { + "argumentName": "folder", + "formattedValue": "\"data\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 530004, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file $ exists in folder $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file" + }, + { + "value": "metaData.js", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"metaData.js\"" + } + }, + { + "value": "exists in folder" + }, + { + "value": "data", + "argumentInfo": { + "argumentName": "folder", + "formattedValue": "\"data\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 244502, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 59283824 + } + ], + "casesAsTable": false, + "durationInNanos": 59283824, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "Tags" + } + ], + "classTitle": "HTML Report Generator", + "expanded": false, + "$$hashKey": "object:616" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + "testMethodName": "the_title_of_the_HTML_report_can_be_configured", + "description": "the title of the HTML report can be configured", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 123001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1325610, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed with title", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed with title" + }, + { + "value": "Test Title", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Test Title" + } + } + ], + "status": "PASSED", + "durationInNanos": 45265424, + "depth": 0, + "parentFailed": false + }, + { + "name": "the metaData file has title set to", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the metaData file has title set to" + }, + { + "value": "Test Title", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Test Title" + } + } + ], + "status": "PASSED", + "durationInNanos": 3706527, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 52846878 + } + ], + "casesAsTable": false, + "durationInNanos": 52846878, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "HTML Report Generator" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + "testMethodName": "attachments_with_different_media_types_can_be_created", + "description": "attachments with different media types can be created", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 202201, + "depth": 0, + "parentFailed": false + }, + { + "name": "an attachment with content $ and mediaType", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "an attachment with content" + }, + { + "value": "{ \"foo\": \"bar\"}", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "\"{ \"foo\": \"bar\"}\"" + } + }, + { + "value": "and mediaType" + }, + { + "value": "application/json", + "argumentInfo": { + "argumentName": "mediaType", + "formattedValue": "\"application/json\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 1016608, + "depth": 0, + "parentFailed": false + }, + { + "name": "file name", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "file name" + }, + { + "value": "jsonfile", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "jsonfile" + } + } + ], + "status": "PASSED", + "durationInNanos": 577904, + "depth": 0, + "parentFailed": false + }, + { + "name": "an attachment with binary content $ and mediaType", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "an attachment with binary content" + }, + { + "value": "QkoCOIcDQKCoCg==", + "argumentInfo": { + "argumentName": "binaryContent", + "formattedValue": "\"QkoCOIcDQKCoCg==\"" + } + }, + { + "value": "and mediaType" + }, + { + "value": "application/octet-stream", + "argumentInfo": { + "argumentName": "mediaType", + "formattedValue": "\"application/octet-stream\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 308502, + "depth": 0, + "parentFailed": false + }, + { + "name": "file name", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "file name" + }, + { + "value": "binary", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "binary" + } + } + ], + "status": "PASSED", + "durationInNanos": 175601, + "depth": 0, + "parentFailed": false + }, + { + "name": "the attachments are added to step $ of case $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the attachments are added to step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + } + ], + "status": "PASSED", + "durationInNanos": 1931614, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1631712, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 45700727, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file $ exists in folder $", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "a file" + }, + { + "value": "jsonfile.json", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"jsonfile.json\"" + } + }, + { + "value": "exists in folder" + }, + { + "value": "data/attachments/Test", + "argumentInfo": { + "argumentName": "folder", + "formattedValue": "\"data/attachments/Test\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 328803, + "depth": 0, + "parentFailed": false + }, + { + "name": "content", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "content" + }, + { + "value": "{ \"foo\": \"bar\"}", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "\"{ \"foo\": \"bar\"}\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 12229187, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file $ exists in folder $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file" + }, + { + "value": "binary.octet-stream", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"binary.octet-stream\"" + } + }, + { + "value": "exists in folder" + }, + { + "value": "data/attachments/Test", + "argumentInfo": { + "argumentName": "folder", + "formattedValue": "\"data/attachments/Test\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 304602, + "depth": 0, + "parentFailed": false + }, + { + "name": "binary content", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "binary content" + }, + { + "value": "QkoCOIcDQKCoCg==", + "argumentInfo": { + "argumentName": "base64content", + "formattedValue": "\"QkoCOIcDQKCoCg==\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 1267309, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 71729213 + } + ], + "casesAsTable": false, + "durationInNanos": 71729213, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {} + ], + "classTitle": "HTML Report Generator", + "expanded": false, + "$$hashKey": "object:615" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", + "name": "De Szenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", + "testMethodName": "Szenarien_können_in_deutsch_geschrieben_werden", + "description": "Szenarien können in deutsch geschrieben werden", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureGerman" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "ein deutsches Projekt", + "words": [ + { + "value": "gegeben", + "isIntroWord": true + }, + { + "value": "ein deutsches Projekt" + } + ], + "status": "PASSED", + "durationInNanos": 222701, + "depth": 0, + "parentFailed": false + }, + { + "name": "JGiven verwendet wird", + "words": [ + { + "value": "wenn", + "isIntroWord": true + }, + { + "value": "JGiven verwendet wird" + } + ], + "status": "PASSED", + "durationInNanos": 111601, + "depth": 0, + "parentFailed": false + }, + { + "name": "die Szenarien in deutsch geschrieben werden", + "words": [ + { + "value": "und", + "isIntroWord": true + }, + { + "value": "die Szenarien in deutsch geschrieben werden" + } + ], + "status": "PASSED", + "durationInNanos": 45100, + "depth": 0, + "parentFailed": false + }, + { + "name": "generiert JGiven deutsche Berichte", + "words": [ + { + "value": "dann", + "isIntroWord": true + }, + { + "value": "generiert JGiven deutsche Berichte" + } + ], + "status": "PASSED", + "durationInNanos": 32400, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4196231 + } + ], + "casesAsTable": false, + "durationInNanos": 4196231, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "De Szenario", + "expanded": false, + "$$hashKey": "object:603" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.DataProviderTest", + "name": "Data Provider", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.DataProviderTest", + "testMethodName": "a_scenario_with_one_failing_case_leads_to_a_failed_scenario", + "description": "a scenario with one failing case leads to a failed scenario", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test with two cases and the first one fails", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test with two cases and the first one fails" + } + ], + "status": "PASSED", + "durationInNanos": 14908507, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 156169623, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has execution status", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has execution status" + }, + { + "value": "FAILED", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "FAILED" + } + } + ], + "status": "PASSED", + "durationInNanos": 615404, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 173757650 + } + ], + "casesAsTable": false, + "durationInNanos": 173757650, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Data Provider", + "expanded": false, + "$$hashKey": "object:1330" + }, + { + "className": "com.tngtech.jgiven.junit.DataProviderTest", + "testMethodName": "pending_works_correctly_with_data_provider", + "description": "pending works correctly with data provider", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#200" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a pending scenario with a data provider", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a pending scenario with a data provider" + } + ], + "status": "PASSED", + "durationInNanos": 535103, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 13844400, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has execution status", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has execution status" + }, + { + "value": "SCENARIO_PENDING", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "SCENARIO_PENDING" + } + } + ], + "status": "PASSED", + "durationInNanos": 272502, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 15924414 + } + ], + "casesAsTable": false, + "durationInNanos": 15924414, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#200", + "description": "Scenarios of Issue #200" + } + ], + "classTitle": "Data Provider", + "expanded": false, + "$$hashKey": "object:1331" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", + "name": "Es Escenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", + "testMethodName": "los_escenarios_se_pueden_escribir_en_espannol", + "description": "los escenarios se pueden escribir en espannol", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureSpanish" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "un proyecto en espannol", + "words": [ + { + "value": "dado", + "isIntroWord": true + }, + { + "value": "un proyecto en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 111301, + "depth": 0, + "parentFailed": false + }, + { + "name": "se usa JGiven", + "words": [ + { + "value": "cuando", + "isIntroWord": true + }, + { + "value": "se usa JGiven" + } + ], + "status": "PASSED", + "durationInNanos": 38800, + "depth": 0, + "parentFailed": false + }, + { + "name": "los escenarios se escriben en espannol", + "words": [ + { + "value": "y", + "isIntroWord": true + }, + { + "value": "los escenarios se escriben en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 79000, + "depth": 0, + "parentFailed": false + }, + { + "name": "JGiven genera los informes en espannol", + "words": [ + { + "value": "entonces", + "isIntroWord": true + }, + { + "value": "JGiven genera los informes en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 111101, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 2606119 + } + ], + "casesAsTable": false, + "durationInNanos": 2606119, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Es Escenario", + "expanded": false, + "$$hashKey": "object:608" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.TimingsTest", + "name": "Timings", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.TimingsTest", + "testMethodName": "recorded_timing_is_correct_for", + "description": "recorded timing is correct for", + "tagIds": [], + "explicitParameters": [ + "methodName" + ], + "derivedParameters": [ + "methodName" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "the JGiven timings test class with method", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "the JGiven timings test class with method" + }, + { + "value": "last_step_is_preceeded_by_step", + "argumentInfo": { + "parameterName": "methodName", + "argumentName": "requestedMethod", + "formattedValue": "last_step_is_preceeded_by_step" + } + } + ], + "status": "PASSED", + "durationInNanos": 26374690, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed" + } + ], + "status": "PASSED", + "durationInNanos": 73537029, + "depth": 0, + "parentFailed": false + }, + { + "name": "the recorded timing is greater than ten millis", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the recorded timing is greater than ten millis" + } + ], + "status": "PASSED", + "durationInNanos": 5095837, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "last_step_is_preceeded_by_step" + ], + "derivedArguments": [ + "last_step_is_preceeded_by_step" + ], + "status": "SUCCESS", + "durationInNanos": 105842061 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "last_step_is_preceeded_by_intro_word" + ], + "derivedArguments": [ + "last_step_is_preceeded_by_intro_word" + ], + "status": "SUCCESS", + "durationInNanos": 24511576 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "last_step_is_preceeded_by_filler_word" + ], + "derivedArguments": [ + "last_step_is_preceeded_by_filler_word" + ], + "status": "SUCCESS", + "durationInNanos": 20147745 + }, + { + "caseNr": 4, + "steps": [], + "explicitArguments": [ + "last_step_is_succeeded_by_intro_word" + ], + "derivedArguments": [ + "last_step_is_succeeded_by_intro_word" + ], + "status": "SUCCESS", + "durationInNanos": 24176973 + }, + { + "caseNr": 5, + "steps": [], + "explicitArguments": [ + "last_step_is_succeeded_by_filler_word" + ], + "derivedArguments": [ + "last_step_is_succeeded_by_filler_word" + ], + "status": "SUCCESS", + "durationInNanos": 20611849 + } + ], + "casesAsTable": true, + "durationInNanos": 195290204, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Timings" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", + "name": "Plain Text Generator Scenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", + "testMethodName": "the_plain_text_reporter_generates_one_file_for_each_test_class", + "description": "the plain text reporter generates one file for each test class", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport" + ], + "explicitParameters": [ + "numberOfModels" + ], + "derivedParameters": [ + "numberOfModels" + ], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "$ report models", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "0", + "argumentInfo": { + "parameterName": "numberOfModels", + "argumentName": "n", + "formattedValue": "0" + } + }, + { + "value": "report models" + } + ], + "status": "PASSED", + "durationInNanos": 368703, + "depth": 0, + "parentFailed": false + }, + { + "name": "the reports exist as JSON files", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the reports exist as JSON files" + } + ], + "status": "PASSED", + "durationInNanos": 101600, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text reporter is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text reporter is executed" + } + ], + "status": "PASSED", + "durationInNanos": 3764527, + "depth": 0, + "parentFailed": false + }, + { + "name": "a text file exists for each test class", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "a text file exists for each test class" + } + ], + "status": "PASSED", + "durationInNanos": 157201, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "0" + ], + "derivedArguments": [ + "0" + ], + "status": "SUCCESS", + "durationInNanos": 6371646 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": [ + "1" + ], + "derivedArguments": [ + "1" + ], + "status": "SUCCESS", + "durationInNanos": 8060458 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": [ + "3" + ], + "derivedArguments": [ + "3" + ], + "status": "SUCCESS", + "durationInNanos": 7354453 + } + ], + "casesAsTable": true, + "durationInNanos": 21786557, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Plain Text Generator Scenario" + } + ] + }, + { + "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + "name": "Lifecycle Ordering", + "scenarios": [ + { + "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + "testMethodName": "junit5_beforeAfterEach_beforeAfterScenario_execution_order", + "description": "Ordering of before/after Each methods vs. before/after Scenario methods", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test with framework and JGiven before and after methods", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test with framework and JGiven before and after methods" + } + ], + "status": "PASSED", + "durationInNanos": 1096908, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 103331840, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework before method was executed before jgivens", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the framework before method was executed before jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 3060022, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework after method was executed after jgivens", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the framework after method was executed after jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 325102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 109280482 + } + ], + "casesAsTable": false, + "durationInNanos": 109280482, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Lifecycle Ordering" + }, + { + "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + "testMethodName": "junit_beforeAfter_beforeAfterScenario_execution_order", + "description": "Ordering of before/after methods vs. before/after Scenario methods", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test with framework and JGiven before and after methods", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test with framework and JGiven before and after methods" + } + ], + "status": "PASSED", + "durationInNanos": 71000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 3442425, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework before method was executed before jgivens", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the framework before method was executed before jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 118301, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework after method was executed before jgivens", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the framework after method was executed before jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 466704, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 7053251 + } + ], + "casesAsTable": false, + "durationInNanos": 7053251, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Lifecycle Ordering", + "expanded": false, + "$$hashKey": "object:1338" + }, + { + "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + "testMethodName": "testNg_beforeAfterTest_beforeAfterScenario_execution_order", + "description": "Ordering of before/after Test methods vs. before/after Scenario methods", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test with framework and JGiven before and after methods", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test with framework and JGiven before and after methods" + } + ], + "status": "PASSED", + "durationInNanos": 35600, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with" + }, + { + "value": "TestNG", + "argumentInfo": { + "argumentName": "framework", + "formattedValue": "TestNG" + } + } + ], + "status": "PASSED", + "durationInNanos": 636466256, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework before method was executed before jgivens", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the framework before method was executed before jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 206401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework after method was executed after jgivens", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the framework after method was executed after jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 125601, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 639245876 + } + ], + "casesAsTable": false, + "durationInNanos": 639245876, + "executionStatus": "SUCCESS", + "tags": [ + {} + ], + "classTitle": "Lifecycle Ordering", + "expanded": false, + "$$hashKey": "object:147" + } + ] + } + ], + "customNavigationLinks": [], + "metaData": { + "created": "Dec 12, 2023, 6:29:36 AM", + "version": "1.3.1-240a5794", + "title": "JGiven Report", + "data": [ + "data0.js", + "data1.js" + ], + "showThumbnails": true + }, + "tagFile": { + "tagTypeMap": { + "com.tngtech.jgiven.tags.FeatureJUnit5": { + "fullType": "com.tngtech.jgiven.tags.FeatureJUnit5", + "type": "FeatureJUnit5", + "name": "JUnit5", + "description": "Tests can be be executed with JUnit5", + "tags": [ + "com.tngtech.jgiven.tags.FeatureTestFramework" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.Feature": { + "fullType": "com.tngtech.jgiven.tags.Feature", + "type": "Feature", + "name": "Features", + "description": "", + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTestFramework": { + "fullType": "com.tngtech.jgiven.tags.FeatureTestFramework", + "type": "FeatureTestFramework", + "name": "Supported Test Frameworks", + "description": "JGiven can be used together with JUnit and TestNG", + "tags": [ + "com.tngtech.jgiven.tags.Feature" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.Issue": { + "fullType": "com.tngtech.jgiven.tags.Issue", + "type": "Issue", + "description": "Scenarios of Issue #25", + "prependType": true, + "color": "orange", + "href": "" + }, + "com.tngtech.jgiven.tests.TestTag": { + "fullType": "com.tngtech.jgiven.tests.TestTag", + "type": "TestTag", + "description": "", + "href": "" + }, + "com.tngtech.jgiven.tags.BrowserTest": { + "fullType": "com.tngtech.jgiven.tags.BrowserTest", + "type": "BrowserTest", + "description": "Tests with this tag use a browser for testing", + "color": "rgb(69, 158, 19)", + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureHtml5Report": { + "fullType": "com.tngtech.jgiven.tags.FeatureHtml5Report", + "type": "FeatureHtml5Report", + "name": "HTML5 Report", + "description": "In order to have an interactive JGiven report for non-developers
As a developer,
I want that JGiven generates HTML5 reports", + "tags": [ + "com.tngtech.jgiven.tags.FeatureReport" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureReport", + "type": "FeatureReport", + "name": "Reporting", + "description": "JGiven can generate text and HTML reports. An AsciiDoc report is currently under development.", + "tags": [ + "com.tngtech.jgiven.tags.Feature" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureAttachments": { + "fullType": "com.tngtech.jgiven.tags.FeatureAttachments", + "type": "FeatureAttachments", + "name": "Attachments", + "description": "In order to get additional information about a step, like screenshots, for example
As a JGiven user,
I want that steps can have attachments", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureCore": { + "fullType": "com.tngtech.jgiven.tags.FeatureCore", + "type": "FeatureCore", + "name": "Core Features", + "description": "", + "tags": [ + "com.tngtech.jgiven.tags.Feature" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { + "fullType": "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle", + "type": "FeatureTagsWithCustomStyle", + "name": "Tags with Custom Styles", + "description": "Tags can be arbitrarily styled with the 'style' attribute of the '@IsTag' annotation. This tag shows how to apply such a custom style", + "style": "background-color: darkgreen; color: white; font-weight: bold", + "tags": [ + "com.tngtech.jgiven.tags.FeatureTags-Tags" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTags": { + "fullType": "com.tngtech.jgiven.tags.FeatureTags", + "type": "FeatureTags", + "description": "Scenarios can be tagged with annotations", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureJUnit": { + "fullType": "com.tngtech.jgiven.tags.FeatureJUnit", + "type": "FeatureJUnit", + "name": "JUnit", + "description": "Tests can be be executed with JUnit", + "tags": [ + "com.tngtech.jgiven.tags.FeatureTestFramework" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTestNg": { + "fullType": "com.tngtech.jgiven.tags.FeatureTestNg", + "type": "FeatureTestNg", + "name": "TestNG", + "description": "Tests can be be executed with TestNG", + "tags": [ + "com.tngtech.jgiven.tags.FeatureTestFramework" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeaturePending": { + "fullType": "com.tngtech.jgiven.tags.FeaturePending", + "type": "FeaturePending", + "name": "Pending Annotation", + "description": "As a good BDD practitioner,
I want to write my scenarios before I start coding
In order to discuss them with business stakeholders", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureCaseDiffs": { + "fullType": "com.tngtech.jgiven.tags.FeatureCaseDiffs", + "type": "FeatureCaseDiffs", + "name": "Case Diffs", + "description": "In order to get a better overview over structurally different cases of a scenario
As a human,
I want the differences highlighted in the generated report", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureAsciiDocReport", + "type": "FeatureAsciiDocReport", + "name": "AsciiDoc Report", + "description": "In order to easily combine hand-written documentation with JGiven scenarios
As a developer,
I want that JGiven generates AsciiDoc reports", + "tags": [ + "com.tngtech.jgiven.tags.FeatureReport" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureGerman": { + "fullType": "com.tngtech.jgiven.tags.FeatureGerman", + "type": "FeatureGerman", + "name": "German Scenarios", + "description": "Scenarios can be written in German", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTextReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureTextReport", + "type": "FeatureTextReport", + "name": "Text Report", + "description": "Plain text reports can be generated", + "tags": [ + "com.tngtech.jgiven.tags.FeatureReport" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureDataTables": { + "fullType": "com.tngtech.jgiven.tags.FeatureDataTables", + "type": "FeatureDataTables", + "name": "Data Tables", + "description": "In order to get a better overview over the different cases of a scenario
As a human,
I want to have different cases represented as a data table", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureStepParameters": { + "fullType": "com.tngtech.jgiven.tags.FeatureStepParameters", + "type": "FeatureStepParameters", + "name": "Step Parameters", + "description": "Steps can have parameters", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureSpanish": { + "fullType": "com.tngtech.jgiven.tags.FeatureSpanish", + "type": "FeatureSpanish", + "name": "Spanish Scenarios", + "description": "Scenarios can be written in Spanish", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + } + }, + "tags": { + "com.tngtech.jgiven.tags.FeatureJUnit5": { + "tagType": "com.tngtech.jgiven.tags.FeatureJUnit5" + }, + "com.tngtech.jgiven.tags.Feature": { + "tagType": "com.tngtech.jgiven.tags.Feature" + }, + "com.tngtech.jgiven.tags.FeatureTestFramework": { + "tagType": "com.tngtech.jgiven.tags.FeatureTestFramework" + }, + "com.tngtech.jgiven.tags.Issue-#25": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#25" + }, + "com.tngtech.jgiven.tags.Issue-#49": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#49", + "description": "Scenarios of Issue #49" + }, + "com.tngtech.jgiven.tests.TestTag-testValue": { + "tagType": "com.tngtech.jgiven.tests.TestTag", + "value": "testValue" + }, + "com.tngtech.jgiven.tags.BrowserTest": { + "tagType": "com.tngtech.jgiven.tags.BrowserTest" + }, + "com.tngtech.jgiven.tags.FeatureHtml5Report": { + "tagType": "com.tngtech.jgiven.tags.FeatureHtml5Report" + }, + "com.tngtech.jgiven.tags.FeatureReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureReport" + }, + "com.tngtech.jgiven.tags.Issue-#236": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#236", + "description": "Scenarios of Issue #236" + }, + "com.tngtech.jgiven.tags.Issue-#755": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#755", + "description": "Scenarios of Issue #755" + }, + "com.tngtech.jgiven.tags.Issue-#191": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#191", + "description": "Scenarios of Issue #191" + }, + "com.tngtech.jgiven.tags.FeatureAttachments": { + "tagType": "com.tngtech.jgiven.tags.FeatureAttachments" + }, + "com.tngtech.jgiven.tags.FeatureCore": { + "tagType": "com.tngtech.jgiven.tags.FeatureCore" + }, + "com.tngtech.jgiven.tags.Issue-#226": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#226", + "description": "Scenarios of Issue #226" + }, + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { + "tagType": "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" + }, + "com.tngtech.jgiven.tags.FeatureTags-Tags": { + "tagType": "com.tngtech.jgiven.tags.FeatureTags", + "value": "Tags" + }, + "com.tngtech.jgiven.tags.Issue-#146": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#146", + "description": "Scenarios of Issue #146" + }, + "com.tngtech.jgiven.tags.Issue-#47": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#47", + "description": "Scenarios of Issue #47" + }, + "com.tngtech.jgiven.tags.Issue-#274": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#274", + "description": "Scenarios of Issue #274" + }, + "com.tngtech.jgiven.tags.FeatureJUnit": { + "tagType": "com.tngtech.jgiven.tags.FeatureJUnit" + }, + "com.tngtech.jgiven.tags.FeatureTestNg": { + "tagType": "com.tngtech.jgiven.tags.FeatureTestNg" + }, + "com.tngtech.jgiven.tags.Issue-#4": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#4", + "description": "Scenarios of Issue #4" + }, + "com.tngtech.jgiven.tags.FeaturePending": { + "tagType": "com.tngtech.jgiven.tags.FeaturePending" + }, + "com.tngtech.jgiven.tags.FeatureCaseDiffs": { + "tagType": "com.tngtech.jgiven.tags.FeatureCaseDiffs" + }, + "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureAsciiDocReport" + }, + "com.tngtech.jgiven.tags.Issue-#163": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#163", + "description": "Scenarios of Issue #163" + }, + "com.tngtech.jgiven.tags.Issue-#32": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#32", + "description": "Scenarios of Issue #32" + }, + "com.tngtech.jgiven.tags.FeatureGerman": { + "tagType": "com.tngtech.jgiven.tags.FeatureGerman" + }, + "com.tngtech.jgiven.tags.Issue-#829": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#829", + "description": "Scenarios of Issue #829" + }, + "com.tngtech.jgiven.tags.Issue-#123": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#123", + "description": "Scenarios of Issue #123" + }, + "com.tngtech.jgiven.tags.FeatureTextReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureTextReport" + }, + "com.tngtech.jgiven.tags.FeatureDataTables": { + "tagType": "com.tngtech.jgiven.tags.FeatureDataTables" + }, + "com.tngtech.jgiven.tags.Issue-#34": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#34", + "description": "Scenarios of Issue #34" + }, + "com.tngtech.jgiven.tags.Issue-#152": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#152", + "description": "Scenarios of Issue #152" + }, + "com.tngtech.jgiven.tags.Issue-#52": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#52", + "description": "Scenarios of Issue #52" + }, + "com.tngtech.jgiven.tags.Issue-#10": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#10", + "description": "Scenarios of Issue #10" + }, + "com.tngtech.jgiven.tags.Issue-#104": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#104", + "description": "Scenarios of Issue #104" + }, + "com.tngtech.jgiven.tags.Issue-#1": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#1", + "description": "Scenarios of Issue #1" + }, + "com.tngtech.jgiven.tags.FeatureStepParameters": { + "tagType": "com.tngtech.jgiven.tags.FeatureStepParameters" + }, + "com.tngtech.jgiven.tags.FeatureSpanish": { + "tagType": "com.tngtech.jgiven.tags.FeatureSpanish" + }, + "com.tngtech.jgiven.tags.Issue-#200": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#200", + "description": "Scenarios of Issue #200" + } + } + } +} \ No newline at end of file From 14c939a27944fd93986dbbc87674906ec93816f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 11:52:48 +0100 Subject: [PATCH 09/45] Single expansion logic does not work correclty yet --- new/src/components/Scenarios/Scenario.tsx | 44 +++++++++++++------ .../components/Scenarios/ScenarioClass.tsx | 36 --------------- .../components/Scenarios/ScenarioOverview.tsx | 19 +++++--- 3 files changed, 42 insertions(+), 57 deletions(-) delete mode 100644 new/src/components/Scenarios/ScenarioClass.tsx diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index 9b9a8a51..b3ec6906 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -1,23 +1,39 @@ -import type { ScenarioCaseModel, ScenarioModel, StepModel } from "../../reportModel"; -import { Accordion, AccordionDetails, Box, Grid, Link, Typography } from "@mui/material"; -import { styled } from "@mui/material/styles"; +import type {ScenarioCaseModel, ScenarioModel, StepModel} from "../../reportModel"; +import {Accordion, AccordionDetails, Box, Grid, Link, Typography} from "@mui/material"; +import {styled} from "@mui/material/styles"; import ArrowForwardIosSharpIcon from "@mui/icons-material/ArrowForwardIosSharp"; -import MuiAccordionSummary, { AccordionSummaryProps } from "@mui/material/AccordionSummary"; -import { PropsWithChildren } from "react"; -import { addRuntime } from "../utils"; -import { StatusIcon } from "../StatusIconSelector"; -import { processWords } from "../../wordProcessor"; +import MuiAccordionSummary, {AccordionSummaryProps} from "@mui/material/AccordionSummary"; +import {PropsWithChildren, useCallback, useEffect, useState} from "react"; +import {addRuntime} from "../utils"; +import {StatusIcon} from "../StatusIconSelector"; +import {processWords} from "../../wordProcessor"; +import {ExpansionState} from "./ScenarioOverview"; export interface ScenarioProps { scenario: ScenarioModel; + globalExpansionState: ExpansionState; + onExpansionCallback: () => void; + onCollapsionCallback: () => void; reportName?: string; - accordionExpansion: { - expanded: boolean; - setExpanded: (expanded: boolean) => void; - }; } export function Scenario(props: ScenarioProps) { + const [expanded, setExpanded] = useState(false); + + useEffect(() => { + if (props.globalExpansionState === ExpansionState.COLLAPSED) { + setExpanded(false); + } + if (props.globalExpansionState === ExpansionState.EXPANDED) { + setExpanded(true); + } + }, [props.globalExpansionState]) + + const onExpansionChanged = useCallback((isExpansion: boolean) => { + setExpanded(isExpansion); + isExpansion ? props.onExpansionCallback : props.onCollapsionCallback; + }, [expanded]) + return props.scenario.scenarioCases.length === 1 ? (
diff --git a/new/src/components/Scenarios/ScenarioClass.tsx b/new/src/components/Scenarios/ScenarioClass.tsx deleted file mode 100644 index 8ec6ab8c..00000000 --- a/new/src/components/Scenarios/ScenarioClass.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { ScenarioModel } from "../../reportModel"; -import { Scenario } from "./Scenario"; -import { useState } from "react"; - -export function ScenarioClass(props: { scenarios: ScenarioModel[] }) { - const accordionExpansion: Map< - string, - { expanded: boolean; setExpanded: (expanded: boolean) => void } - > = new Map(); - const [expanded, setExpanded] = useState(props.scenarios.map(__ => false)); - for (let i = 0; i < props.scenarios.length; i++) { - accordionExpansion.set(props.scenarios[i].testMethodName, { - expanded: expanded[i], - setExpanded: value => { - const newExpanded = expanded; - newExpanded[i] = value; - setExpanded(newExpanded); - } - }); - } - return ( -
- {props.scenarios.map(scenario => ( - void; - } - } - /> - ))} -
- ); -} diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index ac7ebd2d..be44a2b3 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -4,13 +4,19 @@ import {Scenario} from "./Scenario"; import {useState} from "react"; import {Grid} from "@mui/material"; + +export enum ExpansionState { + COLLAPSED, + INTERMEDIATE, + EXPANDED +} export function ScenarioOverview(props: { reportName: string, title: string, description: string, scenarios: ScenarioModel[] }) { - const [expanded, setExpanded] = useState(false); + const [allExpanded, setAllExpanded] = useState(ExpansionState.COLLAPSED); return ( <> @@ -34,11 +40,11 @@ export function ScenarioOverview(props: { targets={{ minusButtonTarget: () => { console.log("Collapsing stuff"); - setExpanded(false); + setAllExpanded(ExpansionState.COLLAPSED); }, plusButtonTarget: () => { console.log("Expanding stuff"); - setExpanded(true); + setAllExpanded(ExpansionState.EXPANDED); }, printButtonTarget: () => { console.error("print not implemented"); @@ -59,10 +65,9 @@ export function ScenarioOverview(props: { {setAllExpanded(ExpansionState.INTERMEDIATE)}} + onExpansionCallback={() => {setAllExpanded(ExpansionState.INTERMEDIATE)}} > ); })} From 9047eb09f361f15e5f57088d04375e16ccfc895e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 11:55:54 +0100 Subject: [PATCH 10/45] small fix --- new/src/components/Scenarios/Scenario.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index b3ec6906..97d57b04 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -31,7 +31,7 @@ export function Scenario(props: ScenarioProps) { const onExpansionChanged = useCallback((isExpansion: boolean) => { setExpanded(isExpansion); - isExpansion ? props.onExpansionCallback : props.onCollapsionCallback; + isExpansion ? props.onExpansionCallback() : props.onCollapsionCallback(); }, [expanded]) return props.scenario.scenarioCases.length === 1 ? ( From 087320064dfcf9846fefce17c9766305edb69839 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:59:50 +0100 Subject: [PATCH 11/45] Use url parameters for link to scenarios filtered by status --- new/src/App.tsx | 6 ++-- .../ScenarioOverview/ScenarioHead.css | 3 ++ .../ScenarioOverview/ScenarioHead.tsx | 31 +++++++++++++++++-- new/src/router.tsx | 6 +--- 4 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 new/src/components/ScenarioOverview/ScenarioHead.css diff --git a/new/src/App.tsx b/new/src/App.tsx index 307b7134..957b69db 100644 --- a/new/src/App.tsx +++ b/new/src/App.tsx @@ -2,7 +2,7 @@ import "./App.css"; import ReportModel, {ReportStatistics} from "./reportModel"; import * as guaranteedStateScenario from "./sampleData/GuaranteedStateTestScenario.json"; import {ScenarioOverview} from "./components/Scenarios/ScenarioOverview"; -import {useParams} from "react-router-dom"; +import { useSearchParams} from "react-router-dom"; export const statistics: ReportStatistics[] = [ { @@ -21,10 +21,10 @@ export const statistics: ReportStatistics[] = [ const guaranteedStateReport: ReportModel = guaranteedStateScenario as unknown as ReportModel; function App() { - let { result } = useParams(); + const [searchParams] = useSearchParams(); return (
- {result} + {searchParams.get('result')} TAGS} /> + + + + mytag + + } + /> + + CLASSES} /> @@ -214,18 +231,26 @@ function ScenarioOverviewItem(props: { children: React.ReactNode; action: MouseE ); } +export enum ScenarioStatusFilter { + SUCCESS = 'success', + FAILURE = 'failure', + PENDING = 'pending' +} + function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { + const [_urlSearchParams, setUrlSearchParams] = useSearchParams(); + return ( - + setUrlSearchParams({result: ScenarioStatusFilter.SUCCESS})}> {props.statistic.numSuccessfulScenarios} Successful, - + setUrlSearchParams({result: ScenarioStatusFilter.FAILURE})}> {props.statistic.numFailedScenarios} failed, - + setUrlSearchParams({result: ScenarioStatusFilter.PENDING})}> {props.statistic.numPendingScenarios} pending, diff --git a/new/src/router.tsx b/new/src/router.tsx index 2c492bca..e672eeb0 100644 --- a/new/src/router.tsx +++ b/new/src/router.tsx @@ -5,9 +5,5 @@ export const router = createBrowserRouter([ { path: "/", element: , - }, - { - path: "/result/:result", - element: , - }, + } ]); From ac5e589d65f1c76e0dcf019be0ea16380219cc54 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:10:24 +0100 Subject: [PATCH 12/45] Added prettier Use "npm run format" to run it --- new/package-lock.json | 24 + new/package.json | 6 +- new/resources/jgivenReport.json5 | 40278 ++++++++-------- new/src/App.tsx | 8 +- .../ScenarioOverview/ScenarioHead.tsx | 31 +- new/src/components/Scenarios/Scenario.tsx | 31 +- .../components/Scenarios/ScenarioOverview.tsx | 49 +- new/src/index.tsx | 6 +- new/src/router.tsx | 4 +- 9 files changed, 19940 insertions(+), 20497 deletions(-) diff --git a/new/package-lock.json b/new/package-lock.json index d93cbbcc..091313aa 100644 --- a/new/package-lock.json +++ b/new/package-lock.json @@ -29,6 +29,9 @@ "react-scripts": "5.0.1", "typescript": "^4.9.3", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "prettier": "3.2.5" } }, "node_modules/@adobe/css-tools": { @@ -14124,6 +14127,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -27302,6 +27320,12 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, + "prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true + }, "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", diff --git a/new/package.json b/new/package.json index 45c13703..4a397cae 100644 --- a/new/package.json +++ b/new/package.json @@ -29,7 +29,8 @@ "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "format": "prettier --write ." }, "prettier": { "printWidth": 100, @@ -68,5 +69,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "prettier": "3.2.5" } } diff --git a/new/resources/jgivenReport.json5 b/new/resources/jgivenReport.json5 index 274380a8..b48e45d7 100644 --- a/new/resources/jgivenReport.json5 +++ b/new/resources/jgivenReport.json5 @@ -1,20537 +1,19933 @@ { - "scenarios": [ - { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "name": "J Unit 5 Executor", - "scenarios": [ + scenarios: [ { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "testMethodName": "after_stage_methods_of_stages_following_failing_stages_are_ignored", - "description": "after stage methods of stages following failing stages are ignored", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test with $ steps", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test with" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "steps" - } - ], - "status": "PASSED", - "durationInNanos": 429103, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test has $ failing stages", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "failing stages" - } - ], - "status": "PASSED", - "durationInNanos": 413003, - "depth": 0, - "parentFailed": false - }, - { - "name": "stage $ has a failing after stage method", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "stage" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "has a failing after stage method" - } - ], - "status": "PASSED", - "durationInNanos": 297902, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ fails", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "fails" - } - ], - "status": "PASSED", - "durationInNanos": 1022008, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with JUnit5", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with JUnit5" - } - ], - "status": "PASSED", - "durationInNanos": 518574231, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails" - } - ], - "status": "PASSED", - "durationInNanos": 1932714, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as failed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "is reported as failed" - } - ], - "status": "PASSED", - "durationInNanos": 1136408, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as skipped", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "is reported as skipped" - } - ], - "status": "PASSED", - "durationInNanos": 287102, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 525725382 - } - ], - "casesAsTable": false, - "durationInNanos": 525725382, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit 5 Executor" - }, - { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "testMethodName": "tests_with_scenario_modifications_in_after_method", - "description": "tests with scenario modifications in after method", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "junit5 tests with scenario modifications in after method", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "junit5 tests with scenario modifications in after method" - } - ], - "status": "PASSED", - "durationInNanos": 653305, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit5", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit5" - } - ], - "status": "PASSED", - "durationInNanos": 88779139, - "depth": 0, - "parentFailed": false - }, - { - "name": "each scenario contains $ cases", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "each scenario contains" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "nParameters", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 451903, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + name: "J Unit 5 Executor", + scenarios: [ + { + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + testMethodName: "after_stage_methods_of_stages_following_failing_stages_are_ignored", + description: "after stage methods of stages following failing stages are ignored", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test with $ steps", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test with" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "steps" + } + ], + status: "PASSED", + durationInNanos: 429103, + depth: 0, + parentFailed: false + }, + { + name: "the test has $ failing stages", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test has" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "failing stages" + } + ], + status: "PASSED", + durationInNanos: 413003, + depth: 0, + parentFailed: false + }, + { + name: "stage $ has a failing after stage method", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "stage" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "has a failing after stage method" + } + ], + status: "PASSED", + durationInNanos: 297902, + depth: 0, + parentFailed: false + }, + { + name: "step $ fails", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "fails" + } + ], + status: "PASSED", + durationInNanos: 1022008, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with JUnit5", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with JUnit5" + } + ], + status: "PASSED", + durationInNanos: 518574231, + depth: 0, + parentFailed: false + }, + { + name: "the test fails", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails" + } + ], + status: "PASSED", + durationInNanos: 1932714, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as failed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "is reported as failed" + } + ], + status: "PASSED", + durationInNanos: 1136408, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as skipped", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "is reported as skipped" + } + ], + status: "PASSED", + durationInNanos: 287102, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 525725382 + } + ], + casesAsTable: false, + durationInNanos: 525725382, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit 5 Executor" + }, + { + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + testMethodName: "tests_with_scenario_modifications_in_after_method", + description: "tests with scenario modifications in after method", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "junit5 tests with scenario modifications in after method", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "junit5 tests with scenario modifications in after method" + } + ], + status: "PASSED", + durationInNanos: 653305, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit5", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit5" + } + ], + status: "PASSED", + durationInNanos: 88779139, + depth: 0, + parentFailed: false + }, + { + name: "each scenario contains $ cases", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "each scenario contains" + }, + { + value: "2", + argumentInfo: { + argumentName: "nParameters", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 451903, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 91778960 + } + ], + casesAsTable: false, + durationInNanos: 91778960, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit 5 Executor" + }, + { + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + testMethodName: "tests_with_a_per_class_lifecycle", + description: "tests with a per class lifecycle", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "junit5 test class with a per class lifecycle", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "junit5 test class with a per class lifecycle" + } + ], + status: "PASSED", + durationInNanos: 532404, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit5", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit5" + } + ], + status: "PASSED", + durationInNanos: 26956794, + depth: 0, + parentFailed: false + }, + { + name: "the test fails with message", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails with message" + }, + { + value: "JGiven does not support keeping a test instance over multiple scenarios", + argumentInfo: { + argumentName: "expectedMessage", + formattedValue: "JGiven does not support keeping a test instance over multiple scenarios" + } + } + ], + status: "PASSED", + durationInNanos: 1995814, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 30877622 + } + ], + casesAsTable: false, + durationInNanos: 30877622, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit 5 Executor" + }, + { + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + testMethodName: "all_steps_of_stages_following_failing_stages_are_ignored", + description: "all steps of stages following failing stages are ignored", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test with $ steps", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test with" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "steps" + } + ], + status: "PASSED", + durationInNanos: 320702, + depth: 0, + parentFailed: false + }, + { + name: "the test has $ failing stages", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test has" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "failing stages" + } + ], + status: "PASSED", + durationInNanos: 1719513, + depth: 0, + parentFailed: false + }, + { + name: "step $ fails", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "fails" + } + ], + status: "PASSED", + durationInNanos: 806406, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 7550454, + depth: 0, + parentFailed: false + }, + { + name: "the test fails", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails" + } + ], + status: "PASSED", + durationInNanos: 84701, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as failed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "is reported as failed" + } + ], + status: "PASSED", + durationInNanos: 343802, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as skipped", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "is reported as skipped" + } + ], + status: "PASSED", + durationInNanos: 268802, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 12169888 + } + ], + casesAsTable: false, + durationInNanos: 12169888, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit 5 Executor" + }, + { + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + testMethodName: "a_valid_report_is_generated_for_classes_that_are_disabled", + description: "a valid report is generated for classes that are disabled", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.Issue-#25" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test class with all tests ignored", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test class with all tests ignored" + } + ], + status: "PASSED", + durationInNanos: 44600, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit5", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit5" + } + ], + status: "PASSED", + durationInNanos: 16082716, + depth: 0, + parentFailed: false + }, + { + name: "the report model is either null or empty", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report model is either null or empty" + } + ], + status: "PASSED", + durationInNanos: 75400, + extendedDescription: "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", + depth: 0, + parentFailed: false + }, + { + name: "has a valid class name if it is not null", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "has a valid class name if it is not null" + } + ], + status: "PASSED", + durationInNanos: 49000, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 18005730 + } + ], + casesAsTable: false, + durationInNanos: 18005730, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "#25" + } + ], + classTitle: "J Unit 5 Executor" + }, + { + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + testMethodName: "steps_following_failing_steps_are_reported_as_skipped", + description: "steps following failing steps are reported as skipped", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test with $ steps", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test with" + }, + { + value: "3", + argumentInfo: { + argumentName: "n", + formattedValue: "3" + } + }, + { + value: "steps" + } + ], + status: "PASSED", + durationInNanos: 2099415, + depth: 0, + parentFailed: false + }, + { + name: "step $ fails", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "fails" + } + ], + status: "PASSED", + durationInNanos: 266502, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with JUnit5", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with JUnit5" + } + ], + status: "PASSED", + durationInNanos: 22164560, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as failed", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "is reported as failed" + } + ], + status: "PASSED", + durationInNanos: 460003, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as skipped", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "is reported as skipped" + } + ], + status: "PASSED", + durationInNanos: 269602, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as skipped", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "3", + argumentInfo: { + argumentName: "i", + formattedValue: "3" + } + }, + { + value: "is reported as skipped" + } + ], + status: "PASSED", + durationInNanos: 753505, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 27159096 + } + ], + casesAsTable: false, + durationInNanos: 27159096, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit 5 Executor" + }, + { + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + testMethodName: "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + description: "exception in scenario is not hidden by exception in JUnit after method", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.Issue-#49" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test class with a failing scenario and a failing after stage", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test class with a failing scenario and a failing after stage" + } + ], + status: "PASSED", + durationInNanos: 40400, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit5", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit5" + } + ], + status: "PASSED", + durationInNanos: 62267448, + depth: 0, + parentFailed: false + }, + { + name: "the test fails with message", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails with message" + }, + { + value: "assertion failed in test step", + argumentInfo: { + argumentName: "expectedMessage", + formattedValue: "assertion failed in test step" + } + } + ], + status: "PASSED", + durationInNanos: 585004, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 65271169 + } + ], + casesAsTable: false, + durationInNanos: 65271169, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "#49", + description: "Scenarios of Issue #49" + } + ], + classTitle: "J Unit 5 Executor" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 91778960 - } - ], - "casesAsTable": false, - "durationInNanos": 91778960, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit 5 Executor" + ] }, { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "testMethodName": "tests_with_a_per_class_lifecycle", - "description": "tests with a per class lifecycle", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "junit5 test class with a per class lifecycle", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "junit5 test class with a per class lifecycle" - } - ], - "status": "PASSED", - "durationInNanos": 532404, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit5", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit5" - } - ], - "status": "PASSED", - "durationInNanos": 26956794, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails with message", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails with message" - }, - { - "value": "JGiven does not support keeping a test instance over multiple scenarios", - "argumentInfo": { - "argumentName": "expectedMessage", - "formattedValue": "JGiven does not support keeping a test instance over multiple scenarios" - } - } - ], - "status": "PASSED", - "durationInNanos": 1995814, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.tests.TestScenarios", + name: "Test Scenarios", + scenarios: [ + { + className: "com.tngtech.jgiven.tests.TestScenarios", + testMethodName: "test_with_tag_annotation", + description: "test with tag annotation", + tagIds: ["com.tngtech.jgiven.tests.TestTag-testValue"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "nothing", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "nothing" + } + ], + status: "PASSED", + durationInNanos: 22100, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 356203 + } + ], + casesAsTable: false, + durationInNanos: 356203, + executionStatus: "SUCCESS", + tags: [ + { + value: "testValue" + } + ], + classTitle: "Test Scenarios" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 30877622 - } - ], - "casesAsTable": false, - "durationInNanos": 30877622, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit 5 Executor" + ] }, { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "testMethodName": "all_steps_of_stages_following_failing_stages_are_ignored", - "description": "all steps of stages following failing stages are ignored", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test with $ steps", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test with" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "steps" - } - ], - "status": "PASSED", - "durationInNanos": 320702, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test has $ failing stages", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "failing stages" - } - ], - "status": "PASSED", - "durationInNanos": 1719513, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ fails", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "fails" - } - ], - "status": "PASSED", - "durationInNanos": 806406, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 7550454, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails" - } - ], - "status": "PASSED", - "durationInNanos": 84701, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as failed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "is reported as failed" - } - ], - "status": "PASSED", - "durationInNanos": 343802, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as skipped", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "is reported as skipped" - } - ], - "status": "PASSED", - "durationInNanos": 268802, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + name: "J Unit 5 After Method", + scenarios: [ + { + className: "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + testMethodName: "a_failing_JUnit_5_test", + description: "a failing JUnit 5 test", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "nothing", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "nothing" + } + ], + status: "PASSED", + durationInNanos: 447503, + depth: 0, + parentFailed: false + }, + { + name: "a step fails", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "a step fails" + } + ], + status: "FAILED", + durationInNanos: 714006, + depth: 0, + parentFailed: false + }, + { + name: "something happened", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "something happened" + } + ], + status: "SKIPPED", + durationInNanos: 0, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "FAILED", + errorMessage: "java.lang.AssertionError: assertion failed in test step", + stackTrace: [ + "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", + "com.tngtech.jgiven.tests.JUnit5AfterMethodTests.a_failing_JUnit_5_test(JUnit5AfterMethodTests.java:24)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", + "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", + "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", + "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", + "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", + "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", + "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.tests_with_scenario_modifications_in_after_method(JUnit5ExecutorTest.java:19)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", + "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", + "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", + "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", + "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", + "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", + "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", + "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", + "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", + "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", + "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", + "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", + "org.junit.rules.RunRules.evaluate(RunRules.java:20)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", + "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", + "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", + "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", + "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", + "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" + ], + durationInNanos: 7239852 + } + ], + casesAsTable: false, + durationInNanos: 7239852, + executionStatus: "FAILED", + tags: [], + classTitle: "J Unit 5 After Method" + }, + { + className: "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + testMethodName: "a_succeeding_JUnit5_test", + description: "a succeeding JUnit5 test", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "nothing", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "nothing" + } + ], + status: "PASSED", + durationInNanos: 78000, + depth: 0, + parentFailed: false + }, + { + name: "something happens", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "something happens" + } + ], + status: "PASSED", + durationInNanos: 92301, + depth: 0, + parentFailed: false + }, + { + name: "something happened", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "something happened" + } + ], + status: "PASSED", + durationInNanos: 1700312, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 8255559 + } + ], + casesAsTable: false, + durationInNanos: 8255559, + executionStatus: "SUCCESS", + tags: [], + classTitle: "J Unit 5 After Method" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 12169888 - } - ], - "casesAsTable": false, - "durationInNanos": 12169888, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit 5 Executor" + ] }, { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "testMethodName": "a_valid_report_is_generated_for_classes_that_are_disabled", - "description": "a valid report is generated for classes that are disabled", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.Issue-#25" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test class with all tests ignored", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test class with all tests ignored" - } - ], - "status": "PASSED", - "durationInNanos": 44600, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit5", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit5" - } - ], - "status": "PASSED", - "durationInNanos": 16082716, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report model is either null or empty", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report model is either null or empty" - } - ], - "status": "PASSED", - "durationInNanos": 75400, - "extendedDescription": "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", - "depth": 0, - "parentFailed": false - }, - { - "name": "has a valid class name if it is not null", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "has a valid class name if it is not null" - } - ], - "status": "PASSED", - "durationInNanos": 49000, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.report.json.ReportConfigurationTest", + name: "Report Configuration", + scenarios: [ + { + className: "com.tngtech.jgiven.report.json.ReportConfigurationTest", + testMethodName: "jgiven_report_directory_is_set_via_a_system_property", + description: "jgiven report directory is set via a system property", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a set system property", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a set system property" + }, + { + value: "jgiven.report.dir", + argumentInfo: { + argumentName: "key", + formattedValue: "jgiven.report.dir" + } + }, + { + value: "/tmp/junit9611904619136189853/junit11940332615471196075", + argumentInfo: { + argumentName: "value", + formattedValue: "/tmp/junit9611904619136189853/junit11940332615471196075" + } + } + ], + status: "PASSED", + durationInNanos: 363103, + depth: 0, + parentFailed: false + }, + { + name: "a set system property", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a set system property" + }, + { + value: "jgiven.report.enabled", + argumentInfo: { + argumentName: "key", + formattedValue: "jgiven.report.enabled" + } + }, + { + value: "true", + argumentInfo: { + argumentName: "value", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 164101, + depth: 0, + parentFailed: false + }, + { + name: "a Test scenario", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a Test scenario" + } + ], + status: "PASSED", + durationInNanos: 36300, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with junit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with junit" + } + ], + status: "PASSED", + durationInNanos: 4571533, + depth: 0, + parentFailed: false + }, + { + name: "the report is written to", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report is written to" + }, + { + value: "/tmp/junit9611904619136189853/junit11940332615471196075", + argumentInfo: { + argumentName: "file", + formattedValue: "/tmp/junit9611904619136189853/junit11940332615471196075" + } + } + ], + status: "PASSED", + durationInNanos: 542004, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 7318053 + } + ], + casesAsTable: false, + durationInNanos: 7318053, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Report Configuration" + }, + { + className: "com.tngtech.jgiven.report.json.ReportConfigurationTest", + testMethodName: "jgiven_report_is_disabled_by_a_system_property", + description: "jgiven report is disabled by a system property", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a set system property", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a set system property" + }, + { + value: "jgiven.report.dir", + argumentInfo: { + argumentName: "key", + formattedValue: "jgiven.report.dir" + } + }, + { + value: "/tmp/junit10598170150625581602/junit5361371470546127836", + argumentInfo: { + argumentName: "value", + formattedValue: "/tmp/junit10598170150625581602/junit5361371470546127836" + } + } + ], + status: "PASSED", + durationInNanos: 391403, + depth: 0, + parentFailed: false + }, + { + name: "a set system property", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a set system property" + }, + { + value: "jgiven.report.enabled", + argumentInfo: { + argumentName: "key", + formattedValue: "jgiven.report.enabled" + } + }, + { + value: "false", + argumentInfo: { + argumentName: "value", + formattedValue: "false" + } + } + ], + status: "PASSED", + durationInNanos: 128201, + depth: 0, + parentFailed: false + }, + { + name: "a Test scenario", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a Test scenario" + } + ], + status: "PASSED", + durationInNanos: 30000, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with junit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with junit" + } + ], + status: "PASSED", + durationInNanos: 2136916, + depth: 0, + parentFailed: false + }, + { + name: "the report is not written to", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report is not written to" + }, + { + value: "/tmp/junit10598170150625581602/junit5361371470546127836", + argumentInfo: { + argumentName: "file", + formattedValue: "/tmp/junit10598170150625581602/junit5361371470546127836" + } + } + ], + status: "PASSED", + durationInNanos: 196901, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 3318923 + } + ], + casesAsTable: false, + durationInNanos: 3318923, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Report Configuration" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 18005730 - } - ], - "casesAsTable": false, - "durationInNanos": 18005730, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "#25" - } - ], - "classTitle": "J Unit 5 Executor" + ] }, { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "testMethodName": "steps_following_failing_steps_are_reported_as_skipped", - "description": "steps following failing steps are reported as skipped", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test with $ steps", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test with" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "3" - } - }, - { - "value": "steps" - } - ], - "status": "PASSED", - "durationInNanos": 2099415, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ fails", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "fails" - } - ], - "status": "PASSED", - "durationInNanos": 266502, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with JUnit5", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with JUnit5" - } - ], - "status": "PASSED", - "durationInNanos": 22164560, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as failed", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "is reported as failed" - } - ], - "status": "PASSED", - "durationInNanos": 460003, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as skipped", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "is reported as skipped" - } - ], - "status": "PASSED", - "durationInNanos": 269602, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as skipped", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "3" - } - }, - { - "value": "is reported as skipped" - } - ], - "status": "PASSED", - "durationInNanos": 753505, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.report.ReportGeneratorTest", + name: "Report Generator", + scenarios: [ + { + className: "com.tngtech.jgiven.report.ReportGeneratorTest", + testMethodName: "the_exclude_empty_scenarios_option_is_evaluated", + description: "the exclude empty scenarios option is evaluated", + tagIds: [], + explicitParameters: ["excludeEmptyScenarios", "expectedScenarios"], + derivedParameters: ["excludeEmptyScenarios", "expectedScenarios"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 271902, + depth: 0, + parentFailed: false + }, + { + name: "the report has $ scenarios", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report has" + }, + { + value: "1", + argumentInfo: { + argumentName: "n", + formattedValue: "1" + } + }, + { + value: "scenarios" + } + ], + status: "PASSED", + durationInNanos: 4891435, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncases", + formattedValue: "1" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 403303, + depth: 0, + parentFailed: false + }, + { + name: "case $ has no steps", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "has no steps" + } + ], + status: "PASSED", + durationInNanos: 328503, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2571118, + depth: 0, + parentFailed: false + }, + { + name: "the exclude empty scenarios option is set to", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the exclude empty scenarios option is set to" + }, + { + value: "true", + argumentInfo: { + parameterName: "excludeEmptyScenarios", + argumentName: "excludeEmptyScenarios", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 4529432, + depth: 0, + parentFailed: false + }, + { + name: "reading the report model", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "reading the report model" + } + ], + status: "PASSED", + durationInNanos: 32959237, + depth: 0, + parentFailed: false + }, + { + name: "the report model contains $ scenarios", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report model contains" + }, + { + value: "0", + argumentInfo: { + parameterName: "expectedScenarios", + argumentName: "nScenarios", + formattedValue: "0" + } + }, + { + value: "scenarios" + } + ], + status: "PASSED", + durationInNanos: 3557626, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["true", "0"], + derivedArguments: ["true", "0"], + status: "SUCCESS", + durationInNanos: 62639251 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["false", "1"], + derivedArguments: ["false", "1"], + status: "SUCCESS", + durationInNanos: 19401140 + } + ], + casesAsTable: true, + durationInNanos: 82040391, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Report Generator" + }, + { + className: "com.tngtech.jgiven.report.ReportGeneratorTest", + testMethodName: "empty_report_files_are_excluded_when_the_exclude_empty_scenarios_option_is_set", + description: "empty report files are excluded when the exclude empty scenarios option is set", + tagIds: [], + explicitParameters: ["excludeEmptyScenarios", "expectedReports"], + derivedParameters: ["excludeEmptyScenarios", "expectedReports"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with name", + words: [ + { + value: "given", + isIntroWord: true + }, + { + value: "a report model with name" + }, + { + value: "non empty report model", + argumentInfo: { + argumentName: "name", + formattedValue: "non empty report model" + } + } + ], + status: "PASSED", + durationInNanos: 843506, + depth: 0, + parentFailed: false + }, + { + name: "the report has $ scenarios", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report has" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "scenarios" + } + ], + status: "PASSED", + durationInNanos: 2889021, + depth: 0, + parentFailed: false + }, + { + name: "a report model with name", + words: [ + { + value: "given", + isIntroWord: true + }, + { + value: "a report model with name" + }, + { + value: "empty report model", + argumentInfo: { + argumentName: "name", + formattedValue: "empty report model" + } + } + ], + status: "PASSED", + durationInNanos: 2228416, + depth: 0, + parentFailed: false + }, + { + name: "the report has $ scenarios", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report has" + }, + { + value: "1", + argumentInfo: { + argumentName: "n", + formattedValue: "1" + } + }, + { + value: "scenarios" + } + ], + status: "PASSED", + durationInNanos: 487604, + depth: 0, + parentFailed: false + }, + { + name: "scenario $ has no steps", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has no steps" + } + ], + status: "PASSED", + durationInNanos: 377303, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 3361524, + depth: 0, + parentFailed: false + }, + { + name: "the exclude empty scenarios option is set to", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the exclude empty scenarios option is set to" + }, + { + value: "true", + argumentInfo: { + parameterName: "excludeEmptyScenarios", + argumentName: "excludeEmptyScenarios", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 206701, + depth: 0, + parentFailed: false + }, + { + name: "reading the report model", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "reading the report model" + } + ], + status: "PASSED", + durationInNanos: 4373531, + depth: 0, + parentFailed: false + }, + { + name: "the report model contains $ reports", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report model contains" + }, + { + value: "1", + argumentInfo: { + parameterName: "expectedReports", + argumentName: "nReports", + formattedValue: "1" + } + }, + { + value: "reports" + } + ], + status: "PASSED", + durationInNanos: 376102, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["true", "1"], + derivedArguments: ["true", "1"], + status: "SUCCESS", + durationInNanos: 18750835 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["false", "2"], + derivedArguments: ["false", "2"], + status: "SUCCESS", + durationInNanos: 10725677 + } + ], + casesAsTable: true, + durationInNanos: 29476512, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Report Generator" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 27159096 - } - ], - "casesAsTable": false, - "durationInNanos": 27159096, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit 5 Executor" + ] }, { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "testMethodName": "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", - "description": "exception in scenario is not hidden by exception in JUnit after method", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.Issue-#49" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test class with a failing scenario and a failing after stage", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test class with a failing scenario and a failing after stage" - } - ], - "status": "PASSED", - "durationInNanos": 40400, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit5", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit5" - } - ], - "status": "PASSED", - "durationInNanos": 62267448, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails with message", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails with message" - }, - { - "value": "assertion failed in test step", - "argumentInfo": { - "argumentName": "expectedMessage", - "formattedValue": "assertion failed in test step" - } - } - ], - "status": "PASSED", - "durationInNanos": 585004, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 65271169 - } - ], - "casesAsTable": false, - "durationInNanos": 65271169, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "#49", - "description": "Scenarios of Issue #49" - } - ], - "classTitle": "J Unit 5 Executor" - } - ] - }, - { - "className": "com.tngtech.jgiven.tests.TestScenarios", - "name": "Test Scenarios", - "scenarios": [ - { - "className": "com.tngtech.jgiven.tests.TestScenarios", - "testMethodName": "test_with_tag_annotation", - "description": "test with tag annotation", - "tagIds": [ - "com.tngtech.jgiven.tests.TestTag-testValue" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "nothing", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "nothing" - } - ], - "status": "PASSED", - "durationInNanos": 22100, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 356203 - } - ], - "casesAsTable": false, - "durationInNanos": 356203, - "executionStatus": "SUCCESS", - "tags": [ - { - "value": "testValue" - } - ], - "classTitle": "Test Scenarios" - } - ] - }, - { - "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", - "name": "J Unit 5 After Method", - "scenarios": [ - { - "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", - "testMethodName": "a_failing_JUnit_5_test", - "description": "a failing JUnit 5 test", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "nothing", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "nothing" - } - ], - "status": "PASSED", - "durationInNanos": 447503, - "depth": 0, - "parentFailed": false - }, - { - "name": "a step fails", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "a step fails" - } - ], - "status": "FAILED", - "durationInNanos": 714006, - "depth": 0, - "parentFailed": false - }, - { - "name": "something happened", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "something happened" - } - ], - "status": "SKIPPED", - "durationInNanos": 0, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", + name: "Lambda Generating Step", + scenarios: [ + { + className: "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", + testMethodName: "lambda_steps_work", + description: "lambda steps work", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "some lambda step", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "some lambda step" + }, + { + value: "5", + argumentInfo: { + argumentName: "a", + formattedValue: "5" + } + }, + { + value: "4", + argumentInfo: { + argumentName: "b", + formattedValue: "4" + } + } + ], + status: "PASSED", + durationInNanos: 873706, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 1258209 + } + ], + casesAsTable: false, + durationInNanos: 1258209, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Lambda Generating Step" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "FAILED", - "errorMessage": "java.lang.AssertionError: assertion failed in test step", - "stackTrace": [ - "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", - "com.tngtech.jgiven.tests.JUnit5AfterMethodTests.a_failing_JUnit_5_test(JUnit5AfterMethodTests.java:24)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", - "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", - "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", - "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", - "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", - "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", - "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", - "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", - "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", - "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", - "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", - "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", - "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", - "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.tests_with_scenario_modifications_in_after_method(JUnit5ExecutorTest.java:19)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", - "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", - "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", - "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", - "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", - "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", - "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", - "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", - "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", - "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", - "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", - "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", - "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", - "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", - "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", - "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", - "org.junit.rules.RunRules.evaluate(RunRules.java:20)", - "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", - "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", - "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", - "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", - "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", - "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", - "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", - "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", - "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", - "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", - "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", - "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" - ], - "durationInNanos": 7239852 - } - ], - "casesAsTable": false, - "durationInNanos": 7239852, - "executionStatus": "FAILED", - "tags": [], - "classTitle": "J Unit 5 After Method" + ] }, { - "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", - "testMethodName": "a_succeeding_JUnit5_test", - "description": "a succeeding JUnit5 test", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "nothing", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "nothing" - } - ], - "status": "PASSED", - "durationInNanos": 78000, - "depth": 0, - "parentFailed": false - }, - { - "name": "something happens", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "something happens" - } - ], - "status": "PASSED", - "durationInNanos": 92301, - "depth": 0, - "parentFailed": false - }, - { - "name": "something happened", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "something happened" - } - ], - "status": "PASSED", - "durationInNanos": 1700312, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 8255559 - } - ], - "casesAsTable": false, - "durationInNanos": 8255559, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "J Unit 5 After Method" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", - "name": "Report Configuration", - "scenarios": [ - { - "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", - "testMethodName": "jgiven_report_directory_is_set_via_a_system_property", - "description": "jgiven report directory is set via a system property", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a set system property", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a set system property" - }, - { - "value": "jgiven.report.dir", - "argumentInfo": { - "argumentName": "key", - "formattedValue": "jgiven.report.dir" - } - }, - { - "value": "/tmp/junit9611904619136189853/junit11940332615471196075", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "/tmp/junit9611904619136189853/junit11940332615471196075" - } - } - ], - "status": "PASSED", - "durationInNanos": 363103, - "depth": 0, - "parentFailed": false - }, - { - "name": "a set system property", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a set system property" - }, - { - "value": "jgiven.report.enabled", - "argumentInfo": { - "argumentName": "key", - "formattedValue": "jgiven.report.enabled" - } - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 164101, - "depth": 0, - "parentFailed": false - }, - { - "name": "a Test scenario", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a Test scenario" - } - ], - "status": "PASSED", - "durationInNanos": 36300, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with junit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with junit" - } - ], - "status": "PASSED", - "durationInNanos": 4571533, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report is written to", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report is written to" - }, - { - "value": "/tmp/junit9611904619136189853/junit11940332615471196075", - "argumentInfo": { - "argumentName": "file", - "formattedValue": "/tmp/junit9611904619136189853/junit11940332615471196075" - } - } - ], - "status": "PASSED", - "durationInNanos": 542004, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.tests.TestClassWithDescription", + name: "Test Class With Description", + description: "Test Description", + scenarios: [ + { + className: "com.tngtech.jgiven.tests.TestClassWithDescription", + testMethodName: "some_test", + description: "some test", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "nothing", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "nothing" + } + ], + status: "PASSED", + durationInNanos: 22801, + depth: 0, + parentFailed: false + }, + { + name: "something happens", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "something happens" + } + ], + status: "PASSED", + durationInNanos: 33200, + depth: 0, + parentFailed: false + }, + { + name: "something happened", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "something happened" + } + ], + status: "PASSED", + durationInNanos: 16400, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 408103 + } + ], + casesAsTable: false, + durationInNanos: 408103, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Test Class With Description" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 7318053 - } - ], - "casesAsTable": false, - "durationInNanos": 7318053, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Report Configuration" + ] }, { - "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", - "testMethodName": "jgiven_report_is_disabled_by_a_system_property", - "description": "jgiven report is disabled by a system property", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a set system property", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a set system property" - }, - { - "value": "jgiven.report.dir", - "argumentInfo": { - "argumentName": "key", - "formattedValue": "jgiven.report.dir" - } - }, - { - "value": "/tmp/junit10598170150625581602/junit5361371470546127836", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "/tmp/junit10598170150625581602/junit5361371470546127836" - } - } - ], - "status": "PASSED", - "durationInNanos": 391403, - "depth": 0, - "parentFailed": false - }, - { - "name": "a set system property", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a set system property" - }, - { - "value": "jgiven.report.enabled", - "argumentInfo": { - "argumentName": "key", - "formattedValue": "jgiven.report.enabled" - } - }, - { - "value": "false", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "false" - } - } - ], - "status": "PASSED", - "durationInNanos": 128201, - "depth": 0, - "parentFailed": false - }, - { - "name": "a Test scenario", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a Test scenario" - } - ], - "status": "PASSED", - "durationInNanos": 30000, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with junit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with junit" - } - ], - "status": "PASSED", - "durationInNanos": 2136916, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report is not written to", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report is not written to" - }, - { - "value": "/tmp/junit10598170150625581602/junit5361371470546127836", - "argumentInfo": { - "argumentName": "file", - "formattedValue": "/tmp/junit10598170150625581602/junit5361371470546127836" - } - } - ], - "status": "PASSED", - "durationInNanos": 196901, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 3318923 - } - ], - "casesAsTable": false, - "durationInNanos": 3318923, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Report Configuration" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.ReportGeneratorTest", - "name": "Report Generator", - "scenarios": [ - { - "className": "com.tngtech.jgiven.report.ReportGeneratorTest", - "testMethodName": "the_exclude_empty_scenarios_option_is_evaluated", - "description": "the exclude empty scenarios option is evaluated", - "tagIds": [], - "explicitParameters": [ - "excludeEmptyScenarios", - "expectedScenarios" - ], - "derivedParameters": [ - "excludeEmptyScenarios", - "expectedScenarios" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 271902, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report has $ scenarios", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report has" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "1" - } - }, - { - "value": "scenarios" - } - ], - "status": "PASSED", - "durationInNanos": 4891435, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "1" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 403303, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has no steps", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "has no steps" - } - ], - "status": "PASSED", - "durationInNanos": 328503, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2571118, - "depth": 0, - "parentFailed": false - }, - { - "name": "the exclude empty scenarios option is set to", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the exclude empty scenarios option is set to" - }, - { - "value": "true", - "argumentInfo": { - "parameterName": "excludeEmptyScenarios", - "argumentName": "excludeEmptyScenarios", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 4529432, - "depth": 0, - "parentFailed": false - }, - { - "name": "reading the report model", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "reading the report model" - } - ], - "status": "PASSED", - "durationInNanos": 32959237, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report model contains $ scenarios", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report model contains" - }, - { - "value": "0", - "argumentInfo": { - "parameterName": "expectedScenarios", - "argumentName": "nScenarios", - "formattedValue": "0" - } - }, - { - "value": "scenarios" - } - ], - "status": "PASSED", - "durationInNanos": 3557626, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + name: "HTML App", + description: "Tests against the generated HTML5 App using WebDriver", + scenarios: [ + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "the_statistics_on_the_welcome_page_of_the_HTML5_report_is_correct", + description: "the statistics on the welcome page of the HTML5 report is correct", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 281402, + depth: 0, + parentFailed: false + }, + { + name: "the report has $ scenarios", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report has" + }, + { + value: "3", + argumentInfo: { + argumentName: "n", + formattedValue: "3" + } + }, + { + value: "scenarios" + } + ], + status: "PASSED", + durationInNanos: 480203, + depth: 0, + parentFailed: false + }, + { + name: "step $ of case $ has status", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "has status" + }, + { + value: "FAILED", + argumentInfo: { + argumentName: "status", + formattedValue: "FAILED" + } + } + ], + status: "PASSED", + durationInNanos: 424003, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2636719, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 123612487, + depth: 0, + parentFailed: false + }, + { + name: "the index page is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the index page is opened" + } + ], + status: "PASSED", + durationInNanos: 449212023, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment27.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the page statistics line contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the page statistics line contains text" + }, + { + value: "3 Total", + argumentInfo: { + argumentName: "text", + formattedValue: "3 Total" + } + } + ], + status: "PASSED", + durationInNanos: 58590120, + depth: 0, + parentFailed: false + }, + { + name: "the page statistics line contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the page statistics line contains text" + }, + { + value: "2 Successful", + argumentInfo: { + argumentName: "text", + formattedValue: "2 Successful" + } + } + ], + status: "PASSED", + durationInNanos: 29216609, + depth: 0, + parentFailed: false + }, + { + name: "the page statistics line contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the page statistics line contains text" + }, + { + value: "1 Failed", + argumentInfo: { + argumentName: "text", + formattedValue: "1 Failed" + } + } + ], + status: "PASSED", + durationInNanos: 26861492, + depth: 0, + parentFailed: false + }, + { + name: "the page statistics line contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the page statistics line contains text" + }, + { + value: "0 Pending", + argumentInfo: { + argumentName: "text", + formattedValue: "0 Pending" + } + } + ], + status: "PASSED", + durationInNanos: 47881043, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 950393019 + } + ], + casesAsTable: false, + durationInNanos: 950393019, + executionStatus: "SUCCESS", + tags: [{}, {}], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "extended_description_should_handle_every_case_correctly", + description: "extended description should handle every case correctly", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#236" + ], + explicitParameters: [ + "description", + "value", + "parameterNames", + "parameterValues", + "expectedValue" + ], + derivedParameters: ["value", "argumentMap", "expectedValue"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 316302, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "$1", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "$1" + } + }, + { + value: "{a=1, b=2}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{a=1, b=2}" + } + } + ], + status: "PASSED", + durationInNanos: 585104, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 4645033, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 61152438, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 317361077, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 767152104, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment6.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 22650262, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "1", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "1" + } + } + ], + status: "PASSED", + durationInNanos: 46105331, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholder with index", + "$1", + "[a, b]", + "[1, 2]", + "1" + ], + derivedArguments: ["$1", "{a=1, b=2}", "1"], + status: "SUCCESS", + durationInNanos: 1372439046, + description: "Placeholder with index" + }, + { + caseNr: 2, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 236302, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "$", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "$" + } + }, + { + value: "{a=1, b=2}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{a=1, b=2}" + } + } + ], + status: "PASSED", + durationInNanos: 460203, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2466618, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 51597870, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 304909188, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 689726248, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment7.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 20214045, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "1", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "1" + } + } + ], + status: "PASSED", + durationInNanos: 22485061, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholder without index", + "$", + "[a, b]", + "[1, 2]", + "1" + ], + derivedArguments: ["$", "{a=1, b=2}", "1"], + status: "SUCCESS", + durationInNanos: 1276945562, + description: "Placeholder without index" + }, + { + caseNr: 3, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 161701, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "$$", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "$$" + } + }, + { + value: "{a=1, b=2}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{a=1, b=2}" + } + } + ], + status: "PASSED", + durationInNanos: 1202809, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2317717, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 58046417, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 326809645, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 673276331, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment8.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 13930000, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "$", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "$" + } + } + ], + status: "PASSED", + durationInNanos: 15273210, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Escaped placeholder", + "$$", + "[a, b]", + "[1, 2]", + "$" + ], + derivedArguments: ["$$", "{a=1, b=2}", "$"], + status: "SUCCESS", + durationInNanos: 1246449143, + description: "Escaped placeholder" + }, + { + caseNr: 4, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 182901, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "$2 + $1", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "$2 + $1" + } + }, + { + value: "{a=1, b=2}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{a=1, b=2}" + } + } + ], + status: "PASSED", + durationInNanos: 316503, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2839020, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 51293968, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 299313848, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 675541547, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment9.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 20374246, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "2 + 1", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "2 + 1" + } + } + ], + status: "PASSED", + durationInNanos: 16192616, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Multiple placeholders with switch order", + "$2 + $1", + "[a, b]", + "[1, 2]", + "2 + 1" + ], + derivedArguments: ["$2 + $1", "{a=1, b=2}", "2 + 1"], + status: "SUCCESS", + durationInNanos: 1214738015, + description: "Multiple placeholders with switch order" + }, + { + caseNr: 5, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 424904, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "a = $1 and b = $2", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "a = $1 and b = $2" + } + }, + { + value: "{a=1, b=2}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{a=1, b=2}" + } + } + ], + status: "PASSED", + durationInNanos: 332302, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2311316, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 60748735, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 298025938, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 670729512, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment10.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 12422390, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "a = 1 and b = 2", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "a = 1 and b = 2" + } + } + ], + status: "PASSED", + durationInNanos: 17558626, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholders with additional text", + "a = $1 and b = $2", + "[a, b]", + "[1, 2]", + "a = 1 and b = 2" + ], + derivedArguments: [ + "a = $1 and b = $2", + "{a=1, b=2}", + "a = 1 and b = 2" + ], + status: "SUCCESS", + durationInNanos: 1210780487, + description: "Placeholders with additional text" + }, + { + caseNr: 6, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 209902, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "int = $int and str = $str and bool = $bool", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "int = $int and str = $str and bool = $bool" + } + }, + { + value: "{int=1, str=some string, bool=true}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{int=1, str=some string, bool=true}" + } + } + ], + status: "PASSED", + durationInNanos: 335702, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 4431232, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 55630399, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 305683493, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 675913309, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment11.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 13307887, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "int = 1 and str = some string and bool = true", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "int = 1 and str = some string and bool = true" + } + } + ], + status: "PASSED", + durationInNanos: 15552702, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholders references by argument names in order", + "int = $int and str = $str and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "int = 1 and str = some string and bool = true" + ], + derivedArguments: [ + "int = $int and str = $str and bool = $bool", + "{int=1, str=some string, bool=true}", + "int = 1 and str = some string and bool = true" + ], + status: "SUCCESS", + durationInNanos: 1239772143, + description: "Placeholders references by argument names in order" + }, + { + caseNr: 7, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 165201, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "str = $str and int = $int and bool = $bool", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "str = $str and int = $int and bool = $bool" + } + }, + { + value: "{int=1, str=some string, bool=true}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{int=1, str=some string, bool=true}" + } + } + ], + status: "PASSED", + durationInNanos: 321902, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2998819, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 45726401, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 305293513, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 665369488, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment12.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 13382888, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "str = some string and int = 1 and bool = true", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "str = some string and int = 1 and bool = true" + } + } + ], + status: "PASSED", + durationInNanos: 15024299, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholders references by argument names in mixed order", + "str = $str and int = $int and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "str = some string and int = 1 and bool = true" + ], + derivedArguments: [ + "str = $str and int = $int and bool = $bool", + "{int=1, str=some string, bool=true}", + "str = some string and int = 1 and bool = true" + ], + status: "SUCCESS", + durationInNanos: 1199404609, + description: "Placeholders references by argument names in mixed order" + }, + { + caseNr: 8, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 198301, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "str = $str and int = $1 and bool = $bool", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "str = $str and int = $1 and bool = $bool" + } + }, + { + value: "{int=1, str=some string, bool=true}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{int=1, str=some string, bool=true}" + } + } + ], + status: "PASSED", + durationInNanos: 426403, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2485617, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 42869483, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 308050531, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 681006890, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment13.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 15642303, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "str = some string and int = 1 and bool = true", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "str = some string and int = 1 and bool = true" + } + } + ], + status: "PASSED", + durationInNanos: 15591102, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholders references by argument names and enumeration", + "str = $str and int = $1 and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "str = some string and int = 1 and bool = true" + ], + derivedArguments: [ + "str = $str and int = $1 and bool = $bool", + "{int=1, str=some string, bool=true}", + "str = some string and int = 1 and bool = true" + ], + status: "SUCCESS", + durationInNanos: 1215565216, + description: "Placeholders references by argument names and enumeration" + }, + { + caseNr: 9, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 431703, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "bool = $3 and str = $2 and int = $int", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "bool = $3 and str = $2 and int = $int" + } + }, + { + value: "{int=1, str=some string, bool=true}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{int=1, str=some string, bool=true}" + } + } + ], + status: "PASSED", + durationInNanos: 402503, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2770619, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 51377239, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 305378814, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 675967358, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment14.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 17210813, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "bool = true and str = some string and int = 1", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "bool = true and str = some string and int = 1" + } + } + ], + status: "PASSED", + durationInNanos: 16482208, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholders references by argument names and enumerations ", + "bool = $3 and str = $2 and int = $int", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and str = some string and int = 1" + ], + derivedArguments: [ + "bool = $3 and str = $2 and int = $int", + "{int=1, str=some string, bool=true}", + "bool = true and str = some string and int = 1" + ], + status: "SUCCESS", + durationInNanos: 1218626936, + description: "Placeholders references by argument names and enumerations " + }, + { + caseNr: 10, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 178601, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "bool = $bool and int = $ and str = $", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "bool = $bool and int = $ and str = $" + } + }, + { + value: "{int=1, str=some string, bool=true}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{int=1, str=some string, bool=true}" + } + } + ], + status: "PASSED", + durationInNanos: 284001, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 4179927, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 46778508, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 314210972, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 677886570, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment15.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 13622490, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "bool = true and int = 1 and str = some string", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "bool = true and int = 1 and str = some string" + } + } + ], + status: "PASSED", + durationInNanos: 18965425, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholder without index mixed with names", + "bool = $bool and int = $ and str = $", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and int = 1 and str = some string" + ], + derivedArguments: [ + "bool = $bool and int = $ and str = $", + "{int=1, str=some string, bool=true}", + "bool = true and int = 1 and str = some string" + ], + status: "SUCCESS", + durationInNanos: 1228791003, + description: "Placeholder without index mixed with names" + }, + { + caseNr: 11, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 188601, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "bool = $bool and str = $2 and int = $ and str = $ and bool = $3" + } + }, + { + value: "{int=1, str=some string, bool=true}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{int=1, str=some string, bool=true}" + } + } + ], + status: "PASSED", + durationInNanos: 355003, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2395016, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 48410520, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 311125651, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 686336981, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment16.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 14212602, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "bool = true and str = some string and int = 1 and str = some string and bool = true", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "bool = true and str = some string and int = 1 and str = some string and bool = true" + } + } + ], + status: "PASSED", + durationInNanos: 17461625, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholder without index mixed with names and index", + "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and str = some string and int = 1 and str = some string and bool = true" + ], + derivedArguments: [ + "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + "{int=1, str=some string, bool=true}", + "bool = true and str = some string and int = 1 and str = some string and bool = true" + ], + status: "SUCCESS", + durationInNanos: 1241979954, + description: "Placeholder without index mixed with names and index" + }, + { + caseNr: 12, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 246002, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "bool = $bool and not known = $unknown and unknown = $10", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "bool = $bool and not known = $unknown and unknown = $10" + } + }, + { + value: "{int=1, str=some string, bool=true}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{int=1, str=some string, bool=true}" + } + } + ], + status: "PASSED", + durationInNanos: 365503, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 1920713, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 48820750, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 315670462, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 669488097, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment17.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 12621691, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "bool = true and not known = 1 and unknown = some string", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "bool = true and not known = 1 and unknown = some string" + } + } + ], + status: "PASSED", + durationInNanos: 15478511, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Placeholder with unknown argument names get erased", + "bool = $bool and not known = $unknown and unknown = $10", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and not known = 1 and unknown = some string" + ], + derivedArguments: [ + "bool = $bool and not known = $unknown and unknown = $10", + "{int=1, str=some string, bool=true}", + "bool = true and not known = 1 and unknown = some string" + ], + status: "SUCCESS", + durationInNanos: 1212468686, + description: "Placeholder with unknown argument names get erased" + }, + { + caseNr: 13, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 264802, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has extended description with arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has extended description with arguments" + }, + { + value: "$]", + argumentInfo: { + parameterName: "value", + argumentName: "description", + formattedValue: "$]" + } + }, + { + value: "{int=1}", + argumentInfo: { + parameterName: "argumentMap", + argumentName: "argumentMap", + formattedValue: "{int=1}" + } + } + ], + status: "PASSED", + durationInNanos: 297902, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2719919, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 51976472, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 327352144, + depth: 0, + parentFailed: false + }, + { + name: "show tooltip of extended description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "show tooltip of extended description" + } + ], + status: "PASSED", + durationInNanos: 669318992, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment18.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "has-tip", + argumentInfo: { + argumentName: "multiline", + formattedValue: "has-tip" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 13244095, + depth: 0, + parentFailed: false + }, + { + name: "attribute $ has value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "attribute" + }, + { + value: "tooltip-html-unsafe", + argumentInfo: { + argumentName: "attribute", + formattedValue: "tooltip-html-unsafe" + } + }, + { + value: "has value" + }, + { + value: "1 ]", + argumentInfo: { + parameterName: "expectedValue", + argumentName: "content", + formattedValue: "1 ]" + } + } + ], + status: "PASSED", + durationInNanos: 14695105, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [ + "Non-Java-Identifier char does trigger a space after a placeholder", + "$]", + "[int]", + "[1]", + "1 ]" + ], + derivedArguments: ["$]", "{int=1}", "1 ]"], + status: "SUCCESS", + durationInNanos: 1228704298, + description: "Non-Java-Identifier char does trigger a space after a placeholder" + } + ], + casesAsTable: true, + durationInNanos: 16106665098, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#236", + description: "Scenarios of Issue #236" + } + ], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "timings_greater_than_10_millis_are_displayed", + description: "timings greater than 10 millis are displayed", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#755" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 166502, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario took $ nanos", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "0", + argumentInfo: { + argumentName: "step", + formattedValue: "0" + } + }, + { + value: "of scenario took" + }, + { + value: "11000000", + argumentInfo: { + argumentName: "durationInNanos", + formattedValue: "11000000" + } + }, + { + value: "nanos" + } + ], + status: "PASSED", + durationInNanos: 407902, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 3631926, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 60227331, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 373285172, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment29.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the $ th element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the" + }, + { + value: "2", + argumentInfo: { + argumentName: "index", + formattedValue: "2" + } + }, + { + value: "th element with a" + }, + { + value: "duration", + argumentInfo: { + argumentName: "multiline", + formattedValue: "duration" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 39887185, + depth: 0, + parentFailed: false + }, + { + name: "has content", + words: [ + { + value: "has content" + }, + { + value: "(11ms)", + argumentInfo: { + argumentName: "content", + formattedValue: "(11ms)" + } + } + ], + status: "PASSED", + durationInNanos: 14381103, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 661261734 + } + ], + casesAsTable: false, + durationInNanos: 661261734, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#755", + description: "Scenarios of Issue #755" + } + ], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "the_configured_title_appears_in_the_generated_HTML_report", + description: "the configured title appears in the generated HTML report", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 164001, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2092815, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed with title", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed with title" + }, + { + value: "Test Title", + argumentInfo: { + argumentName: "title", + formattedValue: "Test Title" + } + } + ], + status: "PASSED", + durationInNanos: 49715956, + depth: 0, + parentFailed: false + }, + { + name: "the index page is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the index page is opened" + } + ], + status: "PASSED", + durationInNanos: 281061513, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment26.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the report title is", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report title is" + }, + { + value: "Test Title", + argumentInfo: { + argumentName: "title", + formattedValue: "Test Title" + } + } + ], + status: "PASSED", + durationInNanos: 40468590, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 540024066 + } + ], + casesAsTable: false, + durationInNanos: 540024066, + executionStatus: "SUCCESS", + tags: [{}, {}], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "attachments_of_all_cases_appear_in_the_HTML5_report_when_having_a_data_table", + description: "attachments of all cases appear in the HTML5 report when having a data table", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#191", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 1207509, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has one parameter", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has one parameter" + } + ], + status: "PASSED", + durationInNanos: 183301, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ default cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "default cases" + } + ], + status: "PASSED", + durationInNanos: 3160522, + depth: 0, + parentFailed: false + }, + { + name: "step $ of case $ has a text attachment", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "has a text attachment" + } + ], + status: "PASSED", + durationInNanos: 422403, + depth: 0, + parentFailed: false + }, + { + name: "step $ of case $ has a text attachment", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "has a text attachment" + } + ], + status: "PASSED", + durationInNanos: 290702, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2415218, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 74045430, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 420960014, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment3.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "$ attachment icons exist", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "2", + argumentInfo: { + argumentName: "nrIcons", + formattedValue: "2" + } + }, + { + value: "attachment icons exist" + } + ], + status: "PASSED", + durationInNanos: 19781842, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 700520815 + } + ], + casesAsTable: false, + durationInNanos: 700520815, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#191", + description: "Scenarios of Issue #191" + }, + {} + ], + classTitle: "HTML App", + expanded: false, + $$hashKey: "object:611" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "attachments_appear_in_the_HTML5_report", + description: "attachments appear in the HTML5 report", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 218202, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has a text attachment with content", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has a text attachment with content" + }, + { + value: "Some Example Attachment\nwith some example content", + argumentInfo: { + argumentName: "content", + formattedValue: "Some Example Attachment\nwith some example content" + } + } + ], + status: "PASSED", + durationInNanos: 492203, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2025415, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 50000158, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 303408873, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment2.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an attachment icon exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an attachment icon exists" + } + ], + status: "PASSED", + durationInNanos: 50330961, + depth: 0, + parentFailed: false + }, + { + name: "the content of the attachment referenced by the icon is", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the content of the attachment referenced by the icon is" + }, + { + value: "Some Example Attachment\nwith some example content", + argumentInfo: { + argumentName: "content", + formattedValue: "Some Example Attachment\nwith some example content" + } + } + ], + status: "PASSED", + durationInNanos: 62382446, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 604436927 + } + ], + casesAsTable: false, + durationInNanos: 604436927, + executionStatus: "SUCCESS", + tags: [{}, {}, {}], + classTitle: "HTML App", + expanded: false, + $$hashKey: "object:610" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "newlines_are_detected_in_formatted_values_and_shown_as_multiline_text", + description: "newlines are detected in formatted values and shown as multiline text", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#226" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 713805, + depth: 0, + parentFailed: false + }, + { + name: "step $ of case $ has a formatted value $ as parameter", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "has a formatted value" + }, + { + value: "Some \n text \n with \n newlines", + argumentInfo: { + argumentName: "formattedValue", + formattedValue: "Some \n text \n with \n newlines" + } + }, + { + value: "as parameter" + } + ], + status: "PASSED", + durationInNanos: 380702, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2332317, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 52677477, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 314986155, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment21.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "multiline", + argumentInfo: { + argumentName: "multiline", + formattedValue: "multiline" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 21750056, + depth: 0, + parentFailed: false + }, + { + name: "has content", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "has content" + }, + { + value: "Some \n text \n with \n newlines", + argumentInfo: { + argumentName: "content", + formattedValue: "Some \n text \n with \n newlines" + } + } + ], + status: "PASSED", + durationInNanos: 25570883, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 550235739 + } + ], + casesAsTable: false, + durationInNanos: 550235739, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#226", + description: "Scenarios of Issue #226" + } + ], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "tags_with_custom_styles_are_shown_correctly", + description: "tags with custom styles are shown correctly", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 221501, + depth: 0, + parentFailed: false + }, + { + name: "the first scenario has tag", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the first scenario has tag" + }, + { + value: "TagWithCustomStyle", + argumentInfo: { + argumentName: "name", + formattedValue: "TagWithCustomStyle" + } + } + ], + status: "PASSED", + durationInNanos: 504004, + depth: 0, + parentFailed: false + }, + { + name: "the tag has style", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the tag has style" + }, + { + value: "background-color: black;", + argumentInfo: { + argumentName: "style", + formattedValue: "background-color: black;" + } + } + ], + status: "PASSED", + durationInNanos: 255501, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2015314, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 62243245, + depth: 0, + parentFailed: false + }, + { + name: "the All Scenarios page is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the All Scenarios page is opened" + } + ], + status: "PASSED", + durationInNanos: 295224814, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment25.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the page contains tag", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the page contains tag" + }, + { + value: "TagWithCustomStyle", + argumentInfo: { + argumentName: "tagName", + formattedValue: "TagWithCustomStyle" + } + } + ], + status: "PASSED", + durationInNanos: 70239303, + depth: 0, + parentFailed: false + }, + { + name: "the tag has style", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the tag has style" + }, + { + value: "background-color: black;", + argumentInfo: { + argumentName: "style", + formattedValue: "background-color: black;" + } + } + ], + status: "PASSED", + durationInNanos: 39512383, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 666160769 + } + ], + casesAsTable: false, + durationInNanos: 666160769, + executionStatus: "SUCCESS", + tags: [{}, {}, {}], + classTitle: "HTML App", + expanded: false, + $$hashKey: "object:614" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "navigation_links_of_the_HTML_report_can_be_customized_using_a_custom_JS_file", + description: "navigation links of the HTML report can be customized using a custom JS file", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#146" + ], + explicitParameters: ["title", "href"], + derivedParameters: ["content", "text", "href"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 396502, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 1850313, + depth: 0, + parentFailed: false + }, + { + name: "a custom JS file with content", + words: [ + { + value: "given", + isIntroWord: true + }, + { + value: "a custom JS file with content" + }, + { + value: "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", + argumentInfo: { + parameterName: "content", + argumentName: "content", + formattedValue: "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});" + } + } + ], + status: "PASSED", + durationInNanos: 528704, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 47137237, + depth: 0, + parentFailed: false + }, + { + name: "the index page is opened", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the index page is opened" + } + ], + status: "PASSED", + durationInNanos: 261387171, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment19.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the navigation menu has a link with text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the navigation menu has a link with text" + }, + { + value: "JGIVEN DOCUMENTATION", + argumentInfo: { + parameterName: "text", + argumentName: "text", + formattedValue: "JGIVEN DOCUMENTATION" + } + } + ], + status: "PASSED", + durationInNanos: 41256496, + depth: 0, + parentFailed: false + }, + { + name: "href", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "href" + }, + { + value: "http://jgiven.org/docs", + argumentInfo: { + parameterName: "href", + argumentName: "href", + formattedValue: "http://jgiven.org/docs" + } + } + ], + status: "PASSED", + durationInNanos: 16444717, + depth: 0, + parentFailed: false + }, + { + name: "target", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "target" + }, + { + value: "_blank", + argumentInfo: { + argumentName: "target", + formattedValue: "_blank" + } + } + ], + status: "PASSED", + durationInNanos: 15038808, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JGiven Documentation", "http://jgiven.org/docs"], + derivedArguments: [ + "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", + "JGIVEN DOCUMENTATION", + "http://jgiven.org/docs" + ], + status: "SUCCESS", + durationInNanos: 519931923 + }, + { + caseNr: 2, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 193601, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 1778213, + depth: 0, + parentFailed: false + }, + { + name: "a custom JS file with content", + words: [ + { + value: "given", + isIntroWord: true + }, + { + value: "a custom JS file with content" + }, + { + value: "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", + argumentInfo: { + parameterName: "content", + argumentName: "content", + formattedValue: "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});" + } + } + ], + status: "PASSED", + durationInNanos: 313802, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 53633484, + depth: 0, + parentFailed: false + }, + { + name: "the index page is opened", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the index page is opened" + } + ], + status: "PASSED", + durationInNanos: 306802197, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment20.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the navigation menu has a link with text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the navigation menu has a link with text" + }, + { + value: "BACK", + argumentInfo: { + parameterName: "text", + argumentName: "text", + formattedValue: "BACK" + } + } + ], + status: "PASSED", + durationInNanos: 38658577, + depth: 0, + parentFailed: false + }, + { + name: "href", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "href" + }, + { + value: "javascript:window.history.back()", + argumentInfo: { + parameterName: "href", + argumentName: "href", + formattedValue: "javascript:window.history.back()" + } + } + ], + status: "PASSED", + durationInNanos: 13173894, + depth: 0, + parentFailed: false + }, + { + name: "target", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "target" + }, + { + value: "_blank", + argumentInfo: { + argumentName: "target", + formattedValue: "_blank" + } + } + ], + status: "PASSED", + durationInNanos: 13057893, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["Back", "javascript:window.history.back()"], + derivedArguments: [ + "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", + "BACK", + "javascript:window.history.back()" + ], + status: "SUCCESS", + durationInNanos: 555928380 + } + ], + casesAsTable: true, + durationInNanos: 1075860303, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#146", + description: "Scenarios of Issue #146" + } + ], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "the_welcome_page_of_the_HTML5_report_can_be_opened", + description: "the welcome page of the HTML5 report can be opened", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 143201, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 3415424, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 45517525, + depth: 0, + parentFailed: false + }, + { + name: "the index page is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the index page is opened" + } + ], + status: "PASSED", + durationInNanos: 257244742, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment28.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the page title is", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the page title is" + }, + { + value: "Welcome", + argumentInfo: { + argumentName: "title", + formattedValue: "Welcome" + } + } + ], + status: "PASSED", + durationInNanos: 35213152, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 467277746 + } + ], + casesAsTable: false, + durationInNanos: 467277746, + executionStatus: "SUCCESS", + tags: [{}, {}], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "clicking_on_tag_labels_opens_the_tag_page", + description: "clicking on tag labels opens the tag page", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTags-Tags", + "com.tngtech.jgiven.tags.Issue-#47" + ], + explicitParameters: ["prependType", "tagName"], + derivedParameters: ["prependType", "tagName"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 200202, + depth: 0, + parentFailed: false + }, + { + name: "scenario $ has tag $ with value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has tag" + }, + { + value: "testtag", + argumentInfo: { + argumentName: "name", + formattedValue: "testtag" + } + }, + { + value: "with value" + }, + { + value: "#42", + argumentInfo: { + argumentName: "value", + formattedValue: "#42" + } + } + ], + status: "PASSED", + durationInNanos: 293202, + depth: 0, + parentFailed: false + }, + { + name: "the tag has prependType set to", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the tag has prependType set to" + }, + { + value: "true", + argumentInfo: { + parameterName: "prependType", + argumentName: "prependType", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 255602, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 6502846, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 48201245, + depth: 0, + parentFailed: false + }, + { + name: "the All Scenarios page is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the All Scenarios page is opened" + } + ], + status: "PASSED", + durationInNanos: 298958541, + depth: 0, + parentFailed: false + }, + { + name: "the tag with name $ is clicked", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the tag with name" + }, + { + value: "testtag-#42", + argumentInfo: { + parameterName: "tagName", + argumentName: "tagName", + formattedValue: "testtag-#42" + } + }, + { + value: "is clicked" + } + ], + status: "PASSED", + durationInNanos: 138924495, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment4.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the page title is", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the page title is" + }, + { + value: "testtag-#42", + argumentInfo: { + parameterName: "tagName", + argumentName: "title", + formattedValue: "testtag-#42" + } + } + ], + status: "PASSED", + durationInNanos: 31012722, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["true", "testtag-#42"], + derivedArguments: ["true", "testtag-#42"], + status: "SUCCESS", + durationInNanos: 700055312 + }, + { + caseNr: 2, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 286602, + depth: 0, + parentFailed: false + }, + { + name: "scenario $ has tag $ with value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has tag" + }, + { + value: "testtag", + argumentInfo: { + argumentName: "name", + formattedValue: "testtag" + } + }, + { + value: "with value" + }, + { + value: "#42", + argumentInfo: { + argumentName: "value", + formattedValue: "#42" + } + } + ], + status: "PASSED", + durationInNanos: 382203, + depth: 0, + parentFailed: false + }, + { + name: "the tag has prependType set to", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the tag has prependType set to" + }, + { + value: "false", + argumentInfo: { + parameterName: "prependType", + argumentName: "prependType", + formattedValue: "false" + } + } + ], + status: "PASSED", + durationInNanos: 193101, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2983921, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 51302168, + depth: 0, + parentFailed: false + }, + { + name: "the All Scenarios page is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the All Scenarios page is opened" + } + ], + status: "PASSED", + durationInNanos: 298688338, + depth: 0, + parentFailed: false + }, + { + name: "the tag with name $ is clicked", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the tag with name" + }, + { + value: "#42", + argumentInfo: { + parameterName: "tagName", + argumentName: "tagName", + formattedValue: "#42" + } + }, + { + value: "is clicked" + } + ], + status: "PASSED", + durationInNanos: 146037746, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment5.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "the page title is", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the page title is" + }, + { + value: "#42", + argumentInfo: { + parameterName: "tagName", + argumentName: "title", + formattedValue: "#42" + } + } + ], + status: "PASSED", + durationInNanos: 30359117, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["false", "#42"], + derivedArguments: ["false", "#42"], + status: "SUCCESS", + durationInNanos: 693897168 + } + ], + casesAsTable: true, + durationInNanos: 1393952480, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "Tags" + }, + { + value: "#47", + description: "Scenarios of Issue #47" + } + ], + classTitle: "HTML App", + expanded: false, + $$hashKey: "object:612" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "showing_thumbnails_can_be_configured", + description: "showing thumbnails can be configured", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#274" + ], + explicitParameters: ["thumbOption"], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 306402, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has an image attachment $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has an image attachment" + }, + { + value: "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lv+h3PtQACgiIiIiIiIiN9Uf6/2RRxo+QnXv6gT5BuHl5eX8ELkdZWVlOT+S05JJykxixuEZLDi+4Kb0pwBQRERERERERG46d6M74X7hdArpRNtqbanlWQuHwUGQOcjVpYlUqAu2C2CHhOwEdpzbwZakLRy0HiTPnnfT+lQAKCIiIiIiIiIiUokZXV2AiIiIiIiIiIiI3DwKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQSUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQMDofDYbVasVqt5Ofnu7oeERERERERERERuUEWiwU/Pz/8/PwwW61WMjIyCr8wm11dm4iIiIiIiIiIiNyggoICMjIyADCmpqbi4+Oj8E9ERERERERERKSSMJvN+Pj4YLVaMRYUFCj8ExERERERERERqWTMZjP5+fnaBERERERERERERKQyUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQUAIqIiIiIiIiIiFRiCgBFREREREREREQqMQWAIiIiIiIiIiIilZgCQBERERERERERkUrM7OoCSmvTpk1cuHABu91OVlYWPj4+ADRp0oSGDRuSnZ3Njz/+SEREBM2aNXPe53A4OHLkCIcPH3YeCwsLo1WrVphMJgB+/fVXTp48idFoJD8/n9q1a9OiRYsKfb7Dhw87a8zIyMDLywuj0UhwcDARERH88MMPVKlSpdg9NWvWpE2bNlitVnbu3El+fj52ux2z2UyHDh3w8/Nj8eLFAOTl5WG32/Hw8ACgRYsW7Nu3D4Ds7GxMJhNubm4YDAb69+8PwJIlS/D29qZnz57F+k1MTGTXrl3k5uZiNBrx9/enbdu2eHt739R3dCVTp05l9OjR5OXl8e233zJq1CjnuZ9++omJEyeybt06AE6dOsWHH35Ieno6RqOR559/vsL/X4uIiIiIiIiIVKQKDwAdDgcbN26kW7du13Vf586dAbBaraxbt47777+/2Pm4uDj8/PyIj48vFgDu27eP8+fPc8899+Dh4UFBQQFbt25l9+7dtG3blqSkJE6dOkWfPn2cAeC6desICwsjICCgTM+4c+dOGjVqVCKwu5rGjRvTuHFjABYsWECvXr2cIWd2djbu7u4lnrnI9u3bCQ8Pp2bNms53sX//fjp37uy858iRI1y4cIHIyEjnfXXr1gUgKiqK0NBQ6tev7zx3/vx57HY7ycnJZGVl4eXlBUBSUhLR0dHcdddd+Pv7OwPW9evX07dv31I/72+V5Z0Vyc/Px2KxsG/fPuc7BDh37hzLli0rFkxOmjSJvn37cs8997Br1y4++ugjZsyYUea6RURERERERERudRUeAFqt1jKFPNcSHx9Phw4d2LJlC+fPn6datWo4HA4OHjxIv379nCPfzGYzkZGRGAwGoHBknMPhwOFwAGCxWLjnnnvKXIfD4SAzM/OmPOOV5ObmOusHqF+/frEwryzi4uKoW7cu6enpxMfH07x5c6BwtGRERAT+/v4AGAwGGjdufEP9lfWd7dq1i1WrVnHo0CEmTZpEbGwsNWrUoFatWjRo0IDJkyfz7LPP8tprrznvGTdunLP24OBg0tPTy1y3iIiIiIiIiMjvQYUHgEXhXHlKSkrC4XAQEhJCvXr1iI+Pp1q1amRkZGCxWEpMTTUa/2/pw7CwMI4fP86PP/5IjRo1CAkJoWbNmri5uZWplosXL+Ln53dDz3O92rRpw+bNmzl48CAhISGEhYURGBhY5vYKCgo4efIkffv2JT09ne3btzsDQKvVetm2zeayfyuV9Z21bt0aT09PwsPDGTBgAJMmTeKVV14BYNGiRdSrV48mTZoUu+fS2mfNmsWAAQPKXLeIiIiIiIiIyO9BhQeAFy5coFWrVuXaZtFoNYB69erx008/0bZtWwwGA3a73XldSkoKGzZsAMBmszFo0CCMRiNdu3YlMzOTxMRETp8+TUxMDL179y5TKJWcnFzuAScUjlRcsmRJsWPt2rUjNDSU0NBQHnjgAc6fP09SUpJzSm+HDh3K1NeJEycICAjAx8cHHx8f7HY7586dIzg4uMQ7XbJkCTabDZvNRvfu3QkKCrru/m7kncXHxzv/3xc5e/YsP/30Ex9//PFl77HZbHz00UfYbDaGDx9epn5FRERERERERH4vKjQAzM/Pp6CgwDkdtzzk5eWRkJCAt7c3CQkJANjtdhISEqhTpw4OhwOr1Yqfnx8BAQEMHDgQgHnz5gGFYZDD4cDb29s5dTYmJobjx48TERFx3fUkJydTp06dcnu+Im5ubs7NOX4rJycHDw8PqlevTvXq1QkPD2fBggW0bdvWudHJ9YiLiyMrK4tly5YBhe8oPj6e4OBg/P39OX/+vHMabVFNv/zyS7Fg8HqU9Z39+OOPLF26lIYNG7JixQoOHz7MpEmTqFGjBllZWbzwwgtA4aYqo0eP5qOPPsLNzY1//vOf1KpViyeffNI5FVxEREREREREpLKq0ADwwoULZd5Y40qOHz9O9erVueuuu4odi42NpW7dujRv3pzo6Gi6du2Kl5enOOPyAAAgAElEQVQXDoeDhIQEZ/CzZ88e8vLy6NChA0ajEbvdjtVqpVatWtddS9F6gmWdPlwWOTk5LF26lF69ejlDudTUVDw8PMoU/lmtVtLT0xk4cKDz/szMTJYvX067du1o0aIF69evx9/f3zlqLyUlBavVisViue7+buSdPfDAA8THx/PKK6+wd+9eWrVqRZ8+fQAYNmyY87r777+fTz/9FIBvv/2WkJAQnnrqqevuT0RERERERETk96hCA8Dk5GSqV69erm3GxcWVGKl3xx13sHPnTjIyMmjSpAkWi4U1a9bgcDgwGAwEBgY6N/qIiIggJiaG5cuXYzQacTgc1KxZs0ybWly4cOGG1t67mstNAfb29qZnz5506dKFrVu3UlBQgNFoxGKxXPcuy0Xi4uKoV69esfDQ29ub4OBgTp48Sb169ejatSsxMTFkZWVhMpnw8vKiY8eOVK1a9br7u5F3ZrPZnOs5Hjp0iI4dO17znnnz5lGlShW2bt3qPPaf//ynxDqRIiIiIiIiIiKVhSE2NtYREhJSIZ1t2LCBzp07l2lk2u/B3r17b3gDjtuN3pmIiIiIiIiIyM2TmJhYsQGgiIiIiIiIiIiIVJzExESMri5CREREREREREREbh4FgCIiIiIiIiIiIpWYAkAREREREREREZFKTAGgiIiIiIiIiIhIJaYAUEREREREREREpBJTACgiIiIiIiIiIlKJKQAUERERERERERGpxIxms5mCggJX1yEiIiIiIiIiIiLlqKCgAIvFgtHPz4+MjAyFgCIiIiIiIiIiIpVEQUEBGRkZ+Pn5Yfb39wfAarWSn5/v4tJERERERERERETkRlksFnx9ffHz88OQl5fncHVBIlI2CQkJ1KtXz9VliIiIiIiIiMgtTJuAiIiIiIiIiIiIVGIKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQS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2rdvz6ZNm/jyyy9JTEzkiSeecNm7ExERERERqUxybDmM3TqWt3a+Ra4t19XlCC4aAdi0aVO6d+/O+vXree+99/Dw8KBevXpERETQo0ePYmv4lZbdbiciIoKoqCgOHDhAnTp1OHr0KAMHDrzsril2u52WLVuyceNGsrOz2b9/P/n5+URERPDLL78Uu/bIkSOcO3eOO++8Ezc3N9q1a8fy5cvZs2cPbdu2LXbt8ePHmTZtGlA4HfHw4cM4HI5iUyD79u3L+vXrWbx4MQUFBTRt2pSOHTte9zOL3EqqVavG66+/XuJ48+bNad68+VXvbdeuHe3atbvqNf369aNfv37Fjo0ePbrY1wEBAYwaNarEva1bt6Z169bOr00mEw8//DAPP/yw81h+fj65ubl4eHhctQ4REREREREpnUXHFrEneQ+TOk2idpXari7ntuaSEYAATz/9NBMnTmTYsGG0aNGCY8eOMXv2bMaOHYvVai1TmxEREZhMJmJiYtizZw8Oh6NEQHepNm3aUFBQwN69e51TC8PDw0tct3nzZgDaty/c1rpDhw7Fjl/q4sWLREdHEx0dzfbt20lLS2PkyJEMGzbMeY3FYmH48OEUFBRgMBh45JFHyvS8IlI2a9asYc6cOcWOxcbGAlCjRg1XlCQiIiIiIlIpHU8/zog1I9iWtM3VpdzWXLYLMBSuw1ezZuGikHl5eUyZMoU9e/awadMm+vbti8VSuGtMVlZWsc0xUlNTAUpMmS0K8H799VesViuBgYHUrVv3iv03b94cDw8P9u/fz+7du2nVqlWJzUfsdrtzc4Bp06Y5R/dB4RTjnJycYiOGWrduzV/+8hcApk6dytatW7l48WKJvoumGnt6elKrVq1rvCkRKU/u7u5ER0fjcDiIiIjAarWyYsUK/P39admypavLExERERERqVSybdk8H/U8EyMn0r1G92vfIOXOJSMAv/32W5588kk2bNjgPObm5uYceVO0W2fR15del5KS4pzSW6dOnRJtt2vXjjNnzrB3796rjv4r6rNly5Zs3ryZtLS0y16/b98+0tLSqF69OnfddZfzo1atWuTl5V12enGRoUOHYjabWbJkCefOnbtqLSJScbp27crgwYM5duwYM2bMYPHixdSpU4fnnntOa3GKiIiIiIjcBAWOAv665a+sOLnC1aXcllwyArB58+asXLmS6dOns2XLFgICAkhOTubXX3/FZDLRqlUrAAYPHsz+/ftZvnw5v/76K35+fhw9epTs7GyaNWt22XXF2rZty9dff01OTs41A8Ci67dt24bFYiEiIgKbzVbsfNE03379+tGzZ0/n8V27dvHhhx+yefNmOnfufNm2g4OD6dOnD8uWLWPmzJm8/PLLpX5HInJzdenShS5duri6DBERERERkduG3WFn/LbxZBdk82C9B11dzm3FJSMAW7duzauvvkqzZs04ceIEGzdu5MSJE0RERPD66687pwXXr1+fcePG0bJlSy5evMjhw4cJCgpi6NCh/OUvf8FgMJRou2jar5eXl3OX0WvVYjQandOBL5WXl8eOHTswm83Odf+KtGzZEl9fX/bu3UtaWtoV2x84cCBVqlRh586d7NmzpzSvR0RERERERESk0no35l3WnFrj6jJuK4a8vDyHq4sQkbJJSEigXr16ri5DREREREREbgHt5rdzdQmlZjaamdZlGu2D27u6lNuCy3YBFhERERERERGR21OBvYCXN73M4dTDri7ltqAAUEREREREREREKly2LZsxG8dwKuOUq0up9BQAioiIiIiIiIiIS6TmpvJ81PPk2nJdXUqlpgBQRERERERERERc5mTGSd7f/b6ry6jUzK4uQEREREREREREbtymBzaRmpdKam4q1jwrqbmFn6fkprDt3Db2Xtjr6hKvaNGxRXQM7sg9te5xdSmVknYBFvkd0y7AIiIiIiIiUlqpuamsO72OX878wvZz28mz57m6pGI8TB58f8/31PCu4epSKh0FgCK/YwoARUREREREpCyyC7KJOhvF4uOL2ZK0xdXlOIVXDWfm3TNdXUalowBQ5HdMAaCIiIiIiIjcqH0X9vHZgc+ITop2dSkAjG42mpFNRrq6jEpFAaDI75gCQBERERERESkv+y7s438H/ufyEYEeJg8W3ruQII8gl9ZRmWgXYBERERERERERoUVgC6Z1ncaHkR/i6+brsjpybDlM3jPZZf1XRhoBKALY7Xby8/MpKChwflzKbDY7PywWC0bjrZGdawSgiIiIiIiI3AzJOcn8bcvf2H1ht8tq+F/3/9GmWhuX9V+ZKACU215ubi6ZmZk4HKX7UTAYDPj4+ODm5naTK7s2BYAiIiIiIiJys9gddr4+/DWfHfiMAnvBtW8oZ/V86zG712xMRlOF913Z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atRA+/btcffuXRw8eBBNmzYVNvfQarV6UxJjYmKwatUqmJubY/HixcJmI3Xr1oWZmRl0Oh3y8vKEXYiJiIiIiIiIiIhMRZULAHU6HS5dugQA+OSTT1CrVi3hmFwux9GjR/Hnn3+ib9++eOONNxASEoIHDx5gzpw5qF+/PiwtLfHkyROkp6dDLpejdevWqFmzJmxsbPDgwQPMmDEDTZo0gUgkwt27d5GXl4e2bdsy/CMiIiIiIiIiIpNU5VKv+/fvIykpCQ0aNNAL/wCgS5cuAP7eIEQsFmPOnDn4z3/+A2dnZzx+/Bj37t2Dra0t3n33XaxYsQKNGzeGSCTCrFmz0K9fP0ilUoSFhSE0NBSWlpbo378/Pvnkk0p/nURERERERERERJVBpFardaWfRkRVUVRUFDfgICIiIiIiIqISVbkRgERERERERERERFRxGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMLGxCyAi05KQlYCxR8Yi6GEQcjQ5JZ4rl8jRt3FffN/3e9jL7CupQqooOp0OmZmZkEgksLS0NHY51Vp2djZCQ0Nx//59pKSkAAAcHR3RuHFjdOzYEVZWVkaukIiIiIiIqjORWq3WGbuI8lizZg3Gjx8PmUyGw4cPo169emjVqpXeOZcvX8aGDRswc+ZMtGjRAgCgUqmwZ88eXL16FSqVCvXq1cMHH3wADw8PY7wMogoRFRWFBg0aGLsMPQN2D8DBewfLdc3I1iPxa/9fiz2elpaGGTNm4MyZMzh8+DCaN29eapuhoaH44YcfcOvWLaSmpsLa2hrt27fH+PHj0aZNm3LVVx18//33+PHHH6HVanH9+vVSz4+MjMTbb7+N3bt3w9vbu1x9PXr0CKGhoXj06BHy8vIAADKZDC1btoSPjw8cHR1LbSM3NxcnT57E3bt3oVKp4O7ujjfffBPu7u7FXrNr1y5ERkYWe3zy5Mll6jshIQHfffcdPvzwQ9SpUwd79uyBUqnEyJEjS722JBs2bEC9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AAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABdbg894AAAD4W5g0Y1b2+sktqU7y9T3+JcMvODVJsrKiMtf+dlTuHzMpf567IJs1bpSu222dH33jgByya8ckyR3PT8ivx07OiB/9+998O99+++386Ec/ykMPPVTr8tdeey3XXntt7rnnnlxzzTWZNGlSkqSqqipJUlZW87f8Y445JnvttVd+9KMf5fDDD89pp51Waz2jRo3KkCFD0rdv3+y///558sknM3HixFx++eUbtX0XXXRRli9fnoEDB5bu869typQpGTJkSLp165YzzzxzvcuNHDkyTzzxRJYsWZJtt902Z511Vrbaaqu1lqusrMx//ud/Zty4camqqspuu+2W73//+2nUqFGd27H6WDRoUPMxqUWLFtlmm21y2GGHpWfPnhu1L2+88UaaNWuWbbfddqOW/7/if7Nfffr0yTnnnJMuXbrUunzw4MHZZpttcuyxx/6vt+/YQffniVdeT2V1dcZfcXa6f2mbJMkDYydn0O/H5L9nzk5ZvXrpuGXbnHnQl9PnkL2TJG/NnpfOFw5MxbAr/9fbsLGefvrp3HPPPenTp0969+693uUef/zx/P73v8/y5cvToUOHnH766dlhhx3WuezGvoaS5A9/+EN++9vfZvHixWnfvn1OO+207Ljjjmut74orrshll11WOm7Tp0/PXXfdlTlz5qR169Y5+eST061btw3u71VXXZXXXnst9erVK112/vnnp1OnTunTp0+tZaurq7PbbrvlkksuyYoVK3Lvvfdm/PjxWbFiRXr37p3TTz899evXr3Wbhx56KA8//PBa76F/baecckoqKipSr169NGnSJFtuuWV69uyZI444ovSe8deyvuO5atWqDBs2LOPGjcuqVavSuXPnnHnmmWnduvUG11nXca/rvXXq1KkZNmxYZs2alRYtWuTYY4/NgQcemCR55ZVX8sADD2Tu3Llp3bp1jjvuuOy7774b3Jbq6uo88MADefbZZ1NRUZEePXrkjDPOSMOGDddatq77nzJlSu69997MmjUrm2++ec4444x07tx5k/d/+PDhGTFiRJKkdevWOe2007L99tuvd/vX93vx2muvzaRJk3LbbbelZcuWtW7Tv3//VFdX5+abb97g4/O3IgACAFBIe2y7VSqGXZmrHn8+f3x7RunyYwbdl5nzFuaX3zs6e22/TVZUVOSR8a/l6IH35qkfnJoDOn8pJ/XaI8d+uUsda//7+tGPflT67+uvvz7bb799jj/++NJlb7/9dlq3bp0xY8bk5JNPrvVh9IUXXkibNm0+0/1OmzYtrVu3TpMmTTJx4sR07979s+/Eerzwwgt55pln1vuhbbV33nkn9913Xy677LJ88YtfzMMPP5xBgwblmmuuWWvZp59+OtOnT88NN9yQhg0b5oYbbshDDz2Uk08+eaO26f7770+SLFy4MOPHj8/tt9+euXPn5sgjj9zgbUeOHJmuXbsWLgD+o+/XI+eemCRpcOqlpcsGPDU61w0flZtP/UYO261TNmvcKKOn/Tnfv+uJzFtSnkuPPihf+kKbfHDzxX+37bz11ltTVVWVrbfeus7lxo4dmxEjRuTKK69M27Zt8+ijj+amm25aZzzY2NdQkkyePDkPPvhgfvrTn2abbbbJE088kZtuuim/+MUvSsssX748d955Z62otHLlytxwww05+eSTs99++2Xy5Mm56aabMmjQoLRq1arO+ywvL88FF1ywzveP1a+11a677rrss88+SZLf/OY3ef/993PjjTemsrIyV199dX7729/m6KOPLi3/5z//OS+99NIG9/uv5Sc/+Um6dOmSZcuWZdq0aRk2bFjeeOONXHzxX+85VNfxfPjhh/Pee+/l5z//eRo2bJhBgwbl3nvvTd++fetcZ13Hva731sWLF+e6667LWWedlX322SdTp07NVVddlZ122imNGjXKoEGDctFFF2XXXXfNlClT8rOf/Sw77rhj2rVrV+f2PP3005kyZUpuvPHGNGjQIEOGDMmkSZPWeo7Udf9NmzbNgAED0q9fv+y1114ZPXp0BgwYkFtuuSVNmjTZ6P2fPHlyhg8fngEDBqRFixZ57rnncv3112fo0KHr3PYN/V5s1apVRo8enSOOOKJ02RtvvJEVK1Zs8I9Qf2sCIAAA/zRGvvZ2Rkx5O2/9/Px0aFvzobVZ44b53oHd89Xd/iVbt26RJLlvzKT8euzk/OCI/fLvv3wk7w++OGX/M3rl0odHZOoHc/LIuSfmxWnv5YL7f5cFS5elflm9DDrlyBy2W6e8+/GCdPvJLbn63w7N05PfzFuz5+XQXTtl0ClHrHfb/reaNm2aNm3aZOLEienRo0eSZN68eZk5c+ZnjjYjRozIvvvum+bNm+cPf/hDrQ86AwcOTMuWLfPxxx9nyZIlqaqqyjnnnJP27dvXed2nbbfddrn88svz4IMPZunSpevdljFjxmSfffbJdtttl6Rm5OOTTz6Zjz76aK2Y8uKLL+aoo45K8+bNkyTHHntsbrrppo0OgKu1atUqhxxySFq2bJnBgwfnoIMOymabbZYJEybk17/+dcrLy9OwYcOcdNJJ6dGjRx577LGMGTMmkydPzgcffJDjjz8+jz76aJ5//vmsWrUqm2++ec4666x06NBhrft66623ctttt2X58uXp1KlTGjdunFatWuXb3/52Vq1alfvuuy8TJ05MRUVFunTpkjPOOCONGjXKkCFD0rp168ybNy+ffPJJFi1alH79+pVGr4wYMSLDhw9PRUVF2rZtm759+6Zdu3Z59tlnM2HChFRUVKSysjKXXnrpJu3X+ta7+j4fe+yxNGrUKPvss0+tkV+ftnDhwvz0pz/NzJkzs8UWW6Rv375p06ZNzjzzzFx77bX54he/mKTmA/T111+f22+/faNGWy1atiKXP/ps/vP7x+a4HruWLj9010754+VnpVmjmpFG7368IJ0vHJh5t/44W55zTV69um92bv+FJDXvFycOfSgfDL44sxYuzjl3/zavf/hxVlVWps8he+fCI/ZLkmx33oBc8PV98+zUd/LBgkVp1bRxHj3vpLRs2nit7Tr00EPTsWPHXHLJJXVu/5Zbbpn+/ftniy22SJL07t07Dz30UCoqKtba/419DSVJy5Ytc+6555aeg/vuu2/uv//+LF++vBRN7r333vTu3Tsvv/xy6XZTpkxJs2bNsv/++ydJ9thjj3Ts2DHjx4/PIYccst7nTpIsXbo0zZo1q3O7kproWV5eXrqPiRMn5oQTTijd9qijjsqjjz5aCoAVFRUZOnRoTj755AwYMGC96509e3buuOOOzJ49O2VlZenevXtOOOGENGjQIH369MmRRx6ZKVOmZP78+WnWrFl+8IMfbHB7mzZtmq5du6ZDhw45//zz86c//Sldu3bNvHnzcuedd+b9999PZWVlvvrVr+aoo45KksyaNSu33XZbZsyYkZYtW+bb3/526TFaU13Hc+edd07v3r1L72177713fve7323wsa3ruNf13tq0adN897vfLUXZXXbZJW3bts1HH32U7bffPn379s2uu9a8vnbddde0aNEis2bN2mAAfOaZZ/Kd73ynNEruoosuKl135513ZunSpenfv38qKyvXe/8rV65Mu3btSr+X9t9//zz22GOZPHlyevToUWs9de3/jBkz0rFjx7RoUfP7f/fdd88vfvGLLFu2LE2bNl1r2+v6vZgk3bp1y3PPPVcrAL7wwgvZbbfdMm3atA0eq78l5wAEAOCfxrNT38m+O25Xin9r+uLmrdKgfu3/PT6kS8dUVlXnpenvlS77zctTcsq+XTN/ybJ8c+B9+cnRB2b6Df+Rh/p9O8cNvj+zFy5Jg7KyLCxfnnr1kifPPzljL/t+fvnc+Ez7aO7fbN+qqqqy33775bnnnitdNmrUqPTq1avOALM+5eXlmTRpUnr27JmuXbtmxowZmT9/fun6srKyTJgwIf3798+VV16ZvfbaK3fccccGr/u07bfffqOCzgcffJBtttmm9HODBg3Srl27fPDBB+tcds3Y2L59+yxYsCDLli3b6P1fU48ePdK4ceNMmzYtK1asyMCBA3Paaadl6NChOemkk3LzzTensrIy3/zmN7Pddtvl1FNPzfHHH5+pU6dm+PDhueqqq/KLX/wiHTt2zN13373O+xg8eHAOPfTQ3HzzzTn00EPz4osvlqY6Pv7443n33Xdz/fXXZ8iQIamqqsp9992XJKlfv37GjRuXM888M5dddlm6d++exx9/PEnNNPIHHnggl1xySYYMGZL9998/119/fenxmzJlSo4++uhceumlm7Rfda137ty5ueuuu3LxxRfnpptuyuabb5558+at97H94x//mLPPPju//OUvs+OOO+auu+7KZpttlu7du+f5558vLTdmzJj07t17o6davvz2zFRUVuWYdYzkbddyszRvUnskTqtmTXL4Hjvl4XFTSpc99PJ/59v77J4G9ctyyq0PZ8ett8i0Aefl1av75u5RE/PYhKk1j2VZWf749sw8dt6JGX/F2Vm2qiIPjJ20zu3q2LHjRm3/DjvsUJqeWF5enqeeeip77rnnOvd/Y19Dq5fdfffdSz+/8sor6dSpUyn+TZ06NdOnT681yi5JPvzww1qvv6TmdfXhhx/W+dxJagLgU089lX79+qV///558MEHS9et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dtxxx+Xuu+/OD37wg7Rq1SoHHHBA3njjjVRVVWXo0KH53ve+lyZNmtQ57XnhwoWpX79+rcesRYsWWbRoUennNUd6rfn62VizZ89O586dS9ux5vTuysrKbLfddlm8eHHKyspq3ddnDUIVFRW57bbbMm/evPy///f/1vkeuD7rOu4b8976xhtvZNCgQTnllFPSq1evWssefPDBOfDAA/P6669n8ODBueCCC7LTTjutdxtWH4uvfe1radSoURo1apTDDjss48aNq/WcWNO67r9Vq1a54IILct999+VXv/pVevTokZ133jmbbbbZJu3/6NGj8/LLL+f2229Pq1at8qc//SlXXXVVBg4cuNZ718b8XkySAw88MJdccklOOeWUvPDCCznkkEPWu01/TwIgAACF8uqfP8r0WXPzrZ67JamJci2a1ISfr+7+L/nZky9k+qy52XGrmsCyZaua/8Ff8wP8mvbp9MXUL6uX8e98kN+8PCW/OvOYJMk2bVpmtw5bZtwVZ691m/fnb/ron09/i2Nd0aQuBx54YIYNG5a5c+d+5tF/06dPz8qVKzNs2LBal//whz/M5MmT07Vr1ySp9SF68eLFqV+/fukDbl3XfRYdOnSoNd135cqVmT179jrPp9ehQ4e8//77pfg5c+bMbL755p/5/keNGlUKUK+++mqeeOKJXHPNNWnbtm3Ky8vX+ubl1R5++OF89NFHueKKK9KoUaOMHz8+v/rVr9ZabrPNNktFRUVWrlxZGokzf/780rdwtm3bNieeeOJGfePqmtq2bZtDDjlknaOkRo0aVWtq+KbsV13rnTNnTik4JTWxYvHixevdxiVLlpT+e3UIXX2c9t9//7z00ktp0qTJekf/DXnmjzmm+y5p36ZlVlZUpqq6Oi2aNM4u7duleZNGufelSTl9/5rHrc1mNetd9anpp6s1adggR3ffOY+On5q3Zs/Lyb1rnufbtKkJNa9d1z+bNf77nMR/0qRJad68eTp27JgmTZrksMMOy0MPPZR33313rW9VmMSbAAAKw0lEQVRTrsvVV19dinKrg+/w4cMzevToXHXVVbXed8aNG5eysrKMGjUqSc3ouYEDB+bYY49Nhw4d8swzz9Ra98yZM3PAAQfU+dxZuXJl3nrrrVrTdFetWlVrhOGCBQvy7rvvZs8996y1/iZNmuSss84q/Txy5MjssMMOmTlzZubMmZNbb60Jsqv3r0+fPrngggtqTbNu3bp1Kisrs3Tp0lIYWrRo0UZ9a+7G+PDDDzNt2rSceOKJadu2bZLkxhtvXCvKLVy4MFVVVVmyZEnpvf2jjz5KmzZtNingVVVVZeDAgWnatGkuueSSTfr24fUd9w29t66Ob//xH/9RK8LPmDEjc+bMSffu3VO/fv3suuuu6dy5cyZNmlRnAGzQoEG22GKLWu8LVVVV6x0pvL77T2pGm67+Y8Hqc80ec8wxm7T/r776arp37176A0/Xrl1Tv379vPPOO7WmDW/s78Uk2WqrrdKhQ4eMHj067777brp161aaEvx5MgUYAIBCmb+0PGfe+Xgmz5iVOYuW5smJr2e/nWpCUK9/2TbH9eiSI24YlhFT3s6S5SuzaNmK/Hrs5Pz4N8+k2/Zrf0lFvXr1ckLP3TPgqdGprKoqjfD7SpeOeefj+Xn+9XeTJAuWLsspv/hN3pkzf611/D116dIl5eXlefnll7Pvvvt+pnWMGDFirVEeSc0U45EjR5Z+njhxYmk02ahRo9Kly1+mQdZ13caaPn16XnutZkrmvvvum7Fjx+add95JZWVlHn744XTq1ClbbrllkuTll18uTW094IAD8uSTT2bRokVZtmxZHnnkkRxwwAFJauLDyJEja0Wq9Vm6dGmee+65DBs2LKecckoaN26cBQsWpFWrVmndunWqqqry5JNPpqysrDTKsEGDBqWRQAsWLMjWW2+dRo0aZenSpXn22WezcuXKtaZCb7HFFmnbtm3p3GOvv/56rQ+Le++9d55++unS1LbRo0fnkUce2eD29+zZMy+99FLpHFUzZszIwIED1zr/2upt3dj9qmu9nTt3znvvvZf33qs5b+Yf/vCHOrdxwoQJtZ4na57P7MADD8yECRPqnP774B//O5c/+myWr6rIr0a9kq1bt0jHdm3TrHHDXHfCV3PuPcNz5/OvZM6ipVmxqiKjp/05Jw59KHtut+5v4T1xnz3y1J+m5cmJr+ekXjVhoW3zpjlo5y/lxt/VHJ+Kyqpc8tAf8ttX36hz3zbVms/3N998M7feemvpMR43blyWL1+eDh06bNJzePUxbd26dSlqPPXUU7n00kvXimC33nprhg4dWvqnQ4cOOe+88/K1r30tu+66a1asWJFnn302VVVVmTBhQmbMmJEePXrU+dypqqrK9ddfn5EjR6a6ujpz5szJ73//++y9996l+3333XfXGegfffTRDB06NCtWrMjHH3+cxx9/PAcffHC233773HXXXaXtXH26hKFDh651jsXWrVtnxx13LE0vLS8vz3PPPbfOL9/YFCtXrsyUKVNy3XXXpVevXtlxxx3TvHnzdOnSJcOHD09SM/rv/vvvz4QJE9KqVavSdqye/nrxxRdv1DFc0+9+97usXLlyndO0P/7447z44ovrvF1dx72u99bly5dn8ODBOe+889aKb0uWLMnNN9+c6dOnJ6mJoW+88Ubp9AXTp08vnRvx077yla/kkUceyfLly7No0aKMHDmyFIDfe++90vtfXfdfXl6ec845J2+99Vbpede0adPScmuup67933bbbTNp0qTSe91bb72VpUuXrvXHpY39vbjaQQcdlPvvvz/77LPPJoXav6V/jK0AAIC/koO7dMzF39g/h133q6ysqMzxe++WMw76y7f03Xv2v+XG372Uc+8ZnrfnzE/TRg3Tbfv2+fmJX8+/7b3uk6mf2GuP7H7Jzbn06L+MqGvdrEme+I+Tc/59v8u8JeUpq1cvp+3fLTu0a/uZRgD+taw+/9A777yz3lEuU6dOzQknnFDrsmuvvTbbb799ysvLM2bMmFx99dVr3W6fffbJr3/96yxcWLN/e+21V4YMGZKPPvoorVq1Sv/+/UvL1nXdmi677LK8+eabpWl3zz//fHbddddccsklGT16dJYuXZouXbpk2223zemnn56BAwdm8eLF2WGHHWqt88EHH8wRRxyR9u3b55BDDimdYL66ujrdunXLsccemyRZtmxZbrvttnTp0mW9UylPPPHEJDXTAVd/0+Xqb3rs2bNnXnzxxdI3Sx5//PHZa6+98rOf/SwDBgxIz549M2zYsLz55ps58sgjM3jw4Jx//vlp27ZtTjrppPz85z/P1VdfnZ/85Cel+ysrK8vZZ5+du+66K0888UR23nnn9OjRoxRM//Vf/zX3339/zj///CQ1wfB73/veOrd9TbvsskuOPfbYXHnllamsrEzjxo3zrW99q/TlImvalP0655xz1rverbbaKqeeemquueaaNGjQIPvuu2/at2+/zmmVVVVV6dWrV4YMGZJZs2alZcuW6devX+n6Dh06pH379qX1rsudZ3wz3/3lY9n8rKuzQ7s2+XXfb5W+zOf7X+mRrVq1yICnRufce2uizL9suXlO7LVH+h22zzrXd8iuHfOd22q+8GP7L7QpXT7srOPS5+7fptMFN6a6ujr77rRdDtp5h3WuY31WrVqV73znO0lqRkYOGTIkt9xyS44//vgcffTRtZ7vRx99dJYsWZJLLrkky5cvzxZbbJFzzz03rVq1yqJFi2o9h+t6DX3aiBEjMn/+/Jx55pm1Lr/iiivq/PKGBg0a5MILL8ydd96ZYcOG5Qtf+EIuuOCCNG/efIPPnR/+8Ie5++67c88996R58+Y56KCDak2JnDt3bmn03JoOO+yw3HzzzTnzzDPTuHHjHHHEEesMMBvSv3//3HHHHTnvvPOS1LyPfdbR0VdddVXpddmuXbscfPDBOfLII0vX9+3bN3fccUf69euX6urqdO7cuRS1zz333AwZMiRPP/10WrRokT59+qxzv+s6ns8880xmzZpVa/Rto0aNcvfdd+fdd9/NsGHD1vmHnw0d9/W9t77yyiuZO3dufvrTn9a63QknnJCjjjoqp556am655ZYsXLgwzZo1y9e+9rXSe+WYMWOycOHCdX5JyTe/+c0sXLgwffr0ScOGDdO7d+/S+RFHjBhR+vbeDd3/t771rdxwww0pLy/PDjvskIsuuqg0knDN9dS1/0cccUTmz5+fCy+8MPXq1Uvjxo1z7rnn1jo2m/J7cc3L77rrrs/8XPtbqLdy5crPfiZe4HM1c+bMWieIBgD4exk8eHC22WabUljb2OtYvzWnwd1www3p0qVLvv71r3/OW/X5uuGGG7Lnnnvm4IMP/rw3Bf7hDRgwIBdeeOHnvRlJas6N+PTTT5eiN58/U4ABAAA+Z1dccUUeffTRJDXn0ZsyZUqd59H6ZzB58uS88847m/Ttv/DPav78+TnssMM+780o+eSTT0qj+vjHYAowAADA5+z000/PrbfempEjR6ZBgwY54YQT/qlnelxxxRWZM2dO+vXrV/piFGD92rZtu84pxZ+Xf/Y/YPwjMgUY/g8zBRgAAADYEFOAAQAAAKDABEAAAAAAKDABEAAAAAAKzDkA4f+whg0bft6bAAAAAPyDMwIQAAAAAApMAAQAAACAAhMAAQAAAKDA/j89h62MWLJtcgAAAABJRU5ErkJggg==", + argumentInfo: { + argumentName: "base64image", + formattedValue: "base64 data: iVBORw0KGg..." + } + } + ], + status: "PASSED", + durationInNanos: 2404217, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 5117437, + depth: 0, + parentFailed: false + }, + { + name: "showing thumbnails is set to", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "showing thumbnails is set to" + }, + { + value: "true", + argumentInfo: { + argumentName: "showThumbnails", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 384902, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 365693817, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 326922341, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment22.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "jgiven-html-thumbnail", + argumentInfo: { + argumentName: "multiline", + formattedValue: "jgiven-html-thumbnail" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 19955443, + depth: 0, + parentFailed: false + }, + { + name: "the image is loaded", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the image is loaded" + } + ], + status: "PASSED", + durationInNanos: 17135023, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["true"], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 1060658493 + }, + { + caseNr: 2, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 190102, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has an image attachment $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has an image attachment" + }, + { + value: "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OM2f1v/pto+hAFBERERERERE7qi/1PkLT9Z/kqrlq+Ln5YeHh4f9JXIvysjIsL/iUuKITY9l4W8LWR21+o6MpwBQRERERERERO64csZyNPJuRAf/DrSq3Iqa7jWxGWz4mf2cXZpIqYq3xIMVzmWeY9/lfeyM3cmvyb+SY825Y2MqABQRERERERERESnDjM4uQERERERERERERO4cBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhBpvNZktOTiY5OZnc3Fxn1yMiIiIiIiIiIiK3yMXFBW9vb7y9vTEnJyeTlpaW/8ZsdnZtIiIiIiIiIiIicovy8vJIS0sDwJiUlESFChUU/omIiIiIiIiIiJQRZrOZChUqkJycjDEvL0/hn4iIiIiIiIiISBljNpvJzc3VJiAiIiIiIiIiIiJlmQJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhZmcXcCPOnz/P0aNHAcjNzaVixYq0adMGFxcXAGJiYggPDycnJweDwYC/vz8tWrTA1dWV7777jry8PEwmk70/d3d3evbsSXR0NDt27KBPnz54e3sDkJaWRmhoKL1797a337t3L1FRUQwcONDeT2ZmJt988w2enp72dmazmZYtW1K1alUAvvrqKx599FFcXFzIycnh4MGDXLhwAYPBgIuLC0FBQdSqVevOfni/ExcXx44dO+z3YDKZcHV1xWAw0K9fv2t+XgBHjx7l7NmzGI1GcnNzCQwMpEmTJmzfvp34+HisVisZGRlUqFABgPvvv5/69euX6j0uXbqUX375BbPZTEZGBt27d+epp54C8r++n376KTt27MBkMuHh4cFf//pXevToAcDPP//MO++8w4IFCxzq/vzzz1m0aBE///wzW7du5YMPPsDX19dh3FGjRpGQkMDq1asBuHTpEpUrV8ZsNtO0aVNGjRrF8OHD+fbbbx2u69atG+vWrSMyMpI5c+Ywf/584uPjGThwIC+99BJ9+/a1tx0yZAiLFi3Cw8OD8+fPM3fuXCIjI3Fzc8Pb25unn36aFi1aXPPz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RERERERERERulYuLC15eXnh7e2PIycmxObsgEbk5586do06dOs4uQ0RERERERETuYtoEREREREREREREpAxTACgiIiIiIiIiIlKGKQAUEREREREREREpwxQAioiIiIiIiIiIlGEKAEVERERERERERMowBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIrcBWw2G/v37+fChQsAxMbGsmvXLidXJSIiIiIiIiJlgQJAESez2Wzs27ePK1eu4OXlxeXLl9m9ezeVKlVydmkiIiIiIiIiUgYoABRxooLwLz4+no4dO5KZmcmuXbto1KgRDRo0cHZ5IiIiIiIiIlIGKAAUcRKFfyIiIiIiIiJSGhQAijjJqVOnuHDhAq1bt8bNzY09e/bg7++v8E9EREREREREbisFgCJOUrt2bapUqcLBgwfJy8ujRYsWXLp0iejoaGeXJiIiIiIiIiJliAJAEScxmUy0bdsWDw8Ptm/fTqVKlWjdujUHDx5UCCgiIiIiIiIit40CQBEnUggoIiIiIiIiInea2dkFiNzrCkLAPXv2cPnyZQIDAwGIjIy0/1tERERERETkXmaz2UhISCAvL6/I80ajkUqVKmEyme5oHwWysrJITk4udNxgMODr61uiPn777TfOnDmDzWa7Zjt3d3c6duyIi4vLdfssjgJAkbuAyWSiffv29vcBAQEEBAQ4sSIRERERERGRu8P58+dZsGABSUlJ12zn7u7OsGHDCAoKuiN9XO29994jNTW12D4effRRWrZsec0+FixYQG5u7jXbXN1n27ZtS9S2KAoARURERERERETkrrV8+XJatGhB3759i51ZZ7Va2bFjB0uWLGHy5MmF2t2OPq6WmprKpEmT8PPzczgeGRnJ3Llz+eKLL8jKyqJDhw7F9lHS8A8gJyenxG2LomcAioiIiIiIiIjIXevChQu0b9/+moGc0WikQ4cOZGZmkpCQUKI+1qxZw5o1a0rcR0lUrFgRd3d3AFavXk1WVtZN9XO7aQagiNyy5cuXs2vXruu2e/LJJ687BVpERERERERuTutVralgroC72R03sxvuJnc8zB5U9ahKPe961PWuS12vugSU/2M9cspms2E0Xn8OW0Ebq9Vaoj6K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1u+P/HLVLZGhCM77+Xh4HPd1fa7P53Nd9x2n9zufcf78eZKTk9mzZw8XLlzAz8+PK1euMHToUI4dO0ZycjK3b9/m8uXLOQpknyX58uXLNkht3bo1U6dOZerUqXTt2jXLshYWFsY6lCIiIiIiIvL88i/uT7dy3fK6G/9zyruWz/PNWF50z/S8xfbt2xMfH89XX31FUlISJUqU4OOPP8be3j7L6bwAFSpUoGvXrvz888/ExcVRt25dfH19c7Shw4NatGjBlStXGDNmDC4uLnTp0oVz585lGiLZ2NgwfPhw1qxZw6xZs4iKisLa2poSJUrQt29fY3292rVrExUVxU8//UR8fDzly5enf//+AFSvXp0333yT+fPnExMTg4eHB926daNChQrZ9rVixYo0atSIcePGkS9fPvz9/enduzcTJkxg8uTJNG3aNMvrfXx8uHbtGjNmzCAmJoYiRYrw8ccfG1O1e/TowcKFC4mIiMDBwYHq1avTvv3ztTinhYUFjo6O3Llz57HU5+TkpPUJREREREREXhDvV32fo5FHORJ5JK+78j+hoF1BJtebjJWFZtY9SRYmkyn3idj/oISEBGOUV3JyMn379uWTTz6hbNmyedwzeVSxsbHGximPytbW1mxzlqctPDycMmXK5Fn7IiIiIiIiL6LI+Eje/u1tIuMj87orLzRHa0fm+8+nlHOpvO7KC++ZngL8rPjtt9/45JNPuHz5MgkJCaxevRpHR0dKliyZ112Tv8HR0fFvjdxLH0koIiIiIiIiL5YCdgWY6DcRa8tneuLkc83G0obv63+v8O8p0QjAHEhOTmbp0qXs2bOHhIQEihcvzttvv423t3ded00eg/j4eOLi4nI8PdzCwgIHB4eHrgP5NGkEoIiIiIiIyJMTeC2QIYFDMKX8vdljYs7SwpJv6n5DQ8+Ged2V/xkKAEWA1NRUkpKSSEpKwmQykZSUZHbe2toaW1tbrKyssLGxeWbW/FMAKCIiIiIi8mQdjjzMB7s+4E7i41lHXmBkzZG082qX1934n6IAUOQ5pgBQRERERETkybsYe5H+O/pz/d71vO7Kc83awprxfuNpVLRRXnflf47WABQRERERERERyUIp51LM959PaefSed2V55adlR3/bvhvhX95RAGgiIiIiIiIiEg2CtgVYG7TuVQrUC2vu/LcccvnxqzGs6hZsGZe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GTx4MPv372fLli3861//4qWXXsLS0jLb82+//TZxcXEMGzaMEydOEBoayg8//EDz5s05fPgwAHPmzGHQoEHs3buX8PBwgoKCWLdunRG6ZXc+M1WqVGHLli1ERUVhMpmYPn16hhF89zty5AgdOnR4aFjm6elJw4YNzY6lr032YIBjaWlJhw4djBFzD3JxceHll19mw4YNHDlyhPPnz7N06VIAatWq9dA+5kTx4sWJi4vj0KFD3Llzh3379nH58mUcHR25du1atqMgy5QpQ5EiRVi5ciUXL14kOjqaY8eO8eOPPxobu5QrVw5bW1vWr1/PlStXCAsLY926dWYjOpOTk+nQoQOLFi16aFuOjo60adPGeO3s7MzNmze5d+8eJpOJ0NBQ5syZw7Zt2wBo06bNQ9eBa9iwIfv372fXrl1cvHiRLVu2cObMmQzv2aPIly8fNWvWZNu2bRw/fpzo6GhCQ0OZP38+q1atynE9OXluueXm5oanpyc7d+7k0qVLREREsHLlygyjzBYtWkSHDh0yXasy3bFjx4x/b1JSUggNDTVeP8roWVdXVzp37sz06dPZsmULV65cYeXKlSxYsIBevXphbW1Nvnz5yJcvH8HBwZw4cQILCwsqVarEihUrCAsL488//6R37940btyY6Ohozp8/n+mGOw/y8fHh3LlzZj/zr7/+OiVKlKB///5s3bqVjRs3MnjwYPz8/P7Wz92OHTvo27cvGzduJCwsjBMnTjBv3jyKFStmtjzC/v37//bPt4iIiIg8Ov0aVkQeqwYlG/D7hd9zdU3DUpmHFImJiXTr1s3s2KefpgWJRYsWZefOnZle98knn1C2bFmWLl3K8OHDiY6OxtnZmapVqzJ37lxjN11bW1u++eYbxo4dy8svv4ynpydDhgzh6tWrxrTWokWLMnfuXL7++mu6d++Om5sbrVu3ZsiQITk6X6xYMX7++WcmTJhA586dsba2ply5cvz000/G7qlTp05l3LhxDBgwgNjYWAoWLEiTJk0YOnRojs5n5p///CeffPIJDRo0IH/+/Lz11lt07NiRHTt2ZFo+NjaWw4cPZzkaq0mTJgDs3LmT1NRUwsLCmDhxolkZe3t72rdvn+nmBvdr1aoVW7ZsYdOmTZhMJooXL05AQMDfXrutXLly1K1bly1btrBx40bKli1L+/bt2bNnD7t378bS0hIfH5+HXm9hYUH37t3ZvHkzS5YsITExEVdXVxo1akSdOnWMe+zSpQsbNmxg1qxZuLq60qxZM/bs2WOsi5aamsrhw4eNz9rDpO9KvHbtWi5evMiCBQsylLG1taVNmzZZ7mBcvXp1TCYTgYGBbNu2jQIFCtC5c+dMR5k9iubNm2NnZ8eWLVuIjY3FycmJ8uXL4+/vn+M6cvLcHkXHjh1Zu3Ytc+fOxdnZmYYNG3LlyhWzUYFXr17l8OHDWa4vOXr0aCOUB1i4cCELFy4E4I8//jB2N86NMWPG4OjoyOjRo4mMjMTT05OBAwcav4SAtA2LZsyYwdatW9m2bRvjx49n+PDhNG/enOLFi/Pxxx9TvXp19u/fT7t27Vi/fn227darVw9ra2u2b99ubEhka2vLvHnz+Oyzz3j//fextrbG39+f0aNH5/q+7te/f39MJhNfffUVN27cwNnZmRo1ajB79mzjecfGxrJ//36++OKLv9WWiIiIiDw6C5PJ9Oj/1S0ieSo8PNxst8ZnwYXoC3RZ3oW9l/fmqHyDkg34pdMvFHV++EYa8nT079+fDz74INN15u535coVgoODOXfuHHfv3sXS0hJXV1eqVKlCrVq1tMbX/zd//nxSU1MJCAjItmxcXBzBwcGcOnXKGLXl5uZG+fLl8fX1zdUOsP9rEhMTSU5ONlvHcP78+djb29O5c2fjmL+/P7//nrtfTjzPRo8eTUhICOvWrcsy+Hwapk6dyi+//MK2bdtyvVmOiIiIiDweGgEoIo+Vl6sXwb2DuZ1wm7jEuCzLOto64myb+U6x8nRFRkbmeA2+okWLGqOKkpKSsLKyyvOA4Vm0Zs2aDCMkH8bBwYEmTZoYoywl5xYtWsTdu3dp3bo1Tk5OnD59mgsXLvD2228bZbZt20a1atXysJdP38CBA2nZsiWrVq2iQ4cOedaPq1evMmvWLD7//HOFfyIiIiJ5SCMARZ5jz+IIQBGRp+nu3bts3LiR8+fPk5iYiLu7O35+flSvXj2vu5bndu3axYABA1i1alWe/H9FUlISb7/9NuXLl2fs2LFPvX0RERER+UueBYCpqals27aN7du3G+v0FCpUiIYNG/Laa68ZOw7+4x//IF++fMyePTvbOocPH054eDhubm5MmTIlwwL0wcHBbNq0icuXLxMXF4erqyt16tShU6dO5MuXD0jbDXTFihUcOnSI6OhorK2t8fLyom3btlStWhWAESNGEBYWlmkfypUrx5gxY3LcnsjfoQBQRERERERERLKTZ1OAZ82axbZt27C0tKREiRI4OTlx7tw5Fi5cSGhoKP369ctVfZcuXSI8PBw7OzuioqI4efKk2YLpISEhTJkyBUdHR2rVqoWtrS2HDh1i/fr1xMTE0L9/f1JTUxk/fjyhoaFUqFABHx8fbt26xd69ezlz5gxffvml2SLgVatWzbB7YfqOdzlpT0RERERERERE5EnLkwDw3LlzbNu2DRsbG0aMGGEsOH/79m3GjRvH3r17adeuHS4uLjmuc/fu3QC88cYbLFu2jMDAQLMA8ODBgwB07drVWGOpffv2/PTTT7i6ugIQFRVFaGgo7u7ujBw50ljTav369Vy4cIHY2FizNt98882Hjr7KSXsiIiIiIiIiIiJPWp4EgAcOHACgQYMGZrtNuri48Omnn+Lo6IiNjQ13797NcZ1BQUHY2dnRsmVL/vjjD/bt20evXr2wtk67RXd3dyAtKHzppZcoUaIELi4uDBkyxKjDyckJGxsboqOj2b59O35+fkaduZWT9kRERERERERERJ60PAkAb9y4AUCpUqUynHuU0XGnT5/mxo0b1KlTB1tbW3x8fFi/fj2HDx+mZs2aALz22mscOnSIkydPMnz4cPLnz0/ZsmWpVasWfn5+WFlZYWtrS48ePZg3bx4zZ85k9uzZlCpViooVK9K0aVM8PT3N2h01alSGvgwcOBA/P78ctSciIiIiIiIiIvKk5UkAmD61NiUl5bHUFxgYCECtWrUAqF27NuvXrycwMNAIAJ2dnfniiy/4888/OXbsGKdPn+bAgQOEhIQQGBjIsGHDAGjatCk1atTg4MGDnDp1ihMnTrB+/Xq2bNnC0KFDzaYVZ7YGoIeHR67aExEREREREREReZLyJAAsUqQIAKGhoRnOhYWFkZycjJeXV47qSklJITg4GICpU6cydepU49yBAweIj4/Hzs7OOFaxYkUqVqwIQGRkJJ999hmHDx/mwoULRpv58+enSZMmNGnShNTUVFauXMnKlSvZuHGjWQCY1RqAuWlPRERERERERETkSbHMi0bTR+rt3r2bkydPGsejo6P54YcfGDlyJMePH89RXUePHuX27dsULlyYxo0bG39KlCiByWRi//79pKSk8Nlnn9G7d2+uXLliXOvu7k7+/PmBtCAxMDCQAQMGMGPGDKOMhYUFpUuXNsrkRE7bExERERERERERedLyZARgiRIlaNOmDWvXruWrr76iRIkSODk5ce7cOeLj46lfvz6VK1c2NgFJTEw0G9mXLiAgwJj+27p1a5o2bWqcO3jwIN988w2BgYHUq1ePihUrcubMGUaNGkXVqlWxt7cnNDSUsLAwChYsSKlSpXB1dSU5OZmdO3cSHh5OyZIluXfvHkeOHAEwphOnW7p0aYYpwADvvfdejtoTERERERERERF50vIkAAR46623KF68OFu2bCE8PJzr168bo/j8/f3NyqakpBAUFJShjvbt2xMSEoK1tTW1a9c2O1etWjVcXFw4cuQIt2/f5s0338Td3Z0//viD48ePEx8fj6urKw0aNKBjx45YW1tToEABRo8ezZo1azh58iSBgYFYW1tTvHhxmjZtSuPGjc3aOHr0aKb31qdPnxy1JyIiIiIiIiIi8qRZmEym1LzuhIg8mvDw8GzXoRQRERERERGR/215sgagiIiIiIiIiIiIPB0KAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoAReSZEhcXx/z58+ncuTO+vr6UK1eOqlWr0qpVKyZNmkRsbGxed/GRnDp1Cm9vbyZNmpRt2R9//BFvb28OHjz4FHr2aGrWrMmbb76ZZ+1XqVKFd955J9tymzdvxtvbm+XLl2dZrn///nh7e5OUlPS4uvjCuHH3Bu2XtMfhSwcsPrfI8o/TV050Wd6F6PjovO62iIiIiMgzLTo6mvPnzxMaGkpcXNwTb8/6ibcgIpJD9+7d46233uLPP/+kZcuWvPXWWzg7OxMREcEff/zBtGnT2LFjB7/88gv29vZ53d2HunnzJnXq1OH333+ndOnSub6+WrVq9OzZk0KFCj2B3onkTt//9mX1n6tzVPZu4l2WHF9CPut8zGs37wn3TERERETk+XTz5k2uX79uvL579y6lSpXCycnpibWpAFBEnhnr1q3jxIkTDB48mIEDB5qd69atGxMmTGDGjBmsWbOGLl265FEvsxcUFPS3rq9bty5169Z9TL0R+Xs2n9uc62s2nt34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K6+8kg8//DC1atWq/MP4euutl3XXXfczrftLdwRgjx49cuutt+b222/PLrvsklmzZuWCCy7INttsk379+uXUU09N796907t37yTJyy+/XHkS6tWrl1mzZmX27NmpX79+6tatuyZ3BeALN3r06Nxzzz0599xza/wL0UfX0fv4qamwKr7R/Bt54tAn8v6H72fuwrkrnbdxvcZpUq/JSudJkgMPPDBXX311Bg4cWDml4fMwc+bMPPXUUznmmGM+t3UCAMAXpU6dOtl4440zffr0fPDBB6lbt27WW2+9ynWyP9O6P4fxfa6aNm2agQMHZvTo0bntttvSpEmTdO/ePd///vdTq1atDBgwICNHjsxtt92W2rVrp127djniiCOSJJ06dcpdd92Vn//85zn22GPTsWPHNbw3AF+s9dZbLw899FB+8pOf5Kc//WkaNWqU+++/P/fcc0/69etX4y5T8O9oWr9pmtZv+rmsa5111smxxx77uazr41q2bLla1gsAAF+U2rVr5+tf//rnvt41fgow8Ok5BZjleeCBB3LJJZfkxRdfzLx589K6dev84Ac/yJFHHvm5Hm3FypVyCjAAAPDVJwDCV5gACAAAAHySWmt6AAAAAADA6iMAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AABgeSZNmrSmh1CxxRZbrOkhAAAAfGoCIABfWp3+2Ckjvjcix4w9Jg3qNMj86vmrbVtLfrUkc+fOzYsvvpjOnTtXpn+ZQiQAAMCnIQACXxnTp0/PJZdckocffjhvvfVWGjVqlI022ii777579ttvv9SuXTtJMmXKlPTp0yejR49O165d1/Co+SxmHzs7jz/+eGYfOztvv/12WrVqtdq2NWfOnCTJJptsUvkaAACgBAIg8JXwzDPP5JBDDknTpk1z4IEHpn379vnggw/y6KOP5rTTTsujjz6aSy65JFVVVfna176W008/PW3atFnTw/5KOumkk/Lmm2/myiuvXOE8O+20U/bdd98ceuihq3Us9erVS69evZIkG264YWV63bp1V+t2k2TJkiWpqqpa7dsBAABY3QRA4Etv4cKFGThwYFq3bp0bbrghTZo0qTzWr1+/fOtb38qJJ56Yxx9/PN27d0+zZs2y//77r8ERf7Ucf/zx6dmzZ77//e+v8jI///nP0759+9U4qjXrO7d9Jw/84IE1PQwAAIDPhbsAA1969913X6ZPn54TTzyxRvz7yB577JGnn3463bt3T7L0FOB27dpl3LhxefTRR9OuXbs888wzNZaZMGFC2rVrl0ceeSTJ0uu8/fjHP06XLl2y5ZZb5qijjsq0adMq8w8YMCD9+/fPmDFjstNOO6VTp07p16/fMuv9Knr++ef/7WV23XXXbLrppqthNGtW1zFLTxkX/wAAgJIIgMCX3rhx41KrVq1069ZthfM0btx4udO7d++eli1b5p577qkx/a677krLli2z/fbbZ/r06dl///1Tu3btXH/99Rk5cmTee++9HHjggVmwYEGSpE6dOhk3blyeffbZ3H777Xnqqaey9tpr5/jjj//E8VdXV2f48OHp27dvunfvnj59+mTo0KFZuHBhZZ5nn302hx56aHr06JGePXvmyCOPzHPPPVd5fMyYMendu3fGjRuXffbZJz179sw+++yTF198MXfccUd++MMfplevXhk4cGDee++9ynLvvfdeTjnllPTt2zc9evTIwQcfnHHjxlUe79q1a6ZPn57TTjst3/72tyvTa9eunQceeCC77757tttuu/zoRz/K5MmTK4/vtNNOueKKK2qM7aOIuuOOO6Zfv3657bbbajwPN998c3bddddsv/32OeKII/Lqq6+ma9eu+ctf/vKJz+EXZdye49J1TNdKCAQAACiBAAh86b399tv52te+ljp1al61YN68eZkzZ07lv/nzl71DbO3atfO9731vmQA4duzY9OnTJ7Vr187IkSNTVVWV4cOHp2PHjunUqVOGDh2a119/PXfddVeN7Z100klp1KhRGjRokN122y0vv/xy5s2bt9LxX3311bnzzjtz8skn56abbsrgwYNzzz335NJLL02SvPbaazn66KPTqlWrXH311fn973+fRo0a5aijjspbb72VZGmAnD17dm6++eZcfvnlueuuu7Jw4cIcd9xxGTduXEaNGpUxY8Zk8uTJue6665IkixcvzoABAzJx4sSceuqpue6667LZZptl4MCBeemll5Ikf/7zn5Mkxx13XI1gN2PGjPzxj3/MKaecUrm24imnnLLc/ftobFdccUWGDBmSBx98MH379s3ZZ5+dt99+O0ny3HPP5de//nV23HHHXH/99enXr18GDx6cJJ/6Onv1zqhX+XrWrFmVr+fOnZtk6fvmww8//LfXO27PcRm357hPnhEAAOArQgAEvvRq1apV42i5j+y4447ZcsstK/8dcsghy12+b9++efXVV/Piiy8mWRqjpk6dmn79+iVZevTdlltumaZNm1aW2WCDDbLRRhvVOOqtTZs2adCgQeX7Zs2aJakZn5bnpZdeSvv27bPddttlww03TM+ePXPJJZdUrrk3ZsyYNGrUKKeffno22WSTbLLJJjnzzDNTXV2dO+64o7Ke6urqHHTQQWnSpEmaNGmSHj16ZNq0aTnmmGPSoEGDtGrVKl27ds2UKVOSJE888UReeOGFnHTSSdl2223zjW98I8cee2zWX3/93HDDDTX2oVGjRpWvk2TmzJk588wz07lz53Tu3Dn77LNPXn311cyePXu5+1hdXZ2DDz446623XqqqqvKDH/wg1dXVlef8jjvuSIsWLfKLX/wibdu2Td++ffPd7353pc/bR1YUWBecvCAXX3xxnnvuudx8880ZPXp03n777TRq1ChJ0qpVq9SvX/8T1z/y+RmrNA4AAICvKjcBAb701l9//bzzzjuZP39+jQB3+eWXV8LgRRddtMJQtO2222bdddfN3XffnQ4dOuSuu+5K69ats8022yRJZs+eneeeey7f/OY3ayy3YMGCyhFsSWps++OWLFmy0vH36tUrp5xySk444YTstNNO6datW9q2bVt5/Pnnn8+mm25a4wjHRo0apU2bNpWA9pGP39m4cePGadasWdZee+0a02bMWBq0Jk2alLp166ZLly6Vx2vVqpWtt966EglXpE2bNmnevHnl+xYtWiRZenTdWmuttdxlNtlkk8rXH8XUDz74IEny6quvZsstt0zt2rUr83znO9/JJZdcstJxJEnDhg1X+FjXrl1z+eWX56233sqoUaM+cV3Ls/83v/aplgMAAPiqEACBL73tttsul112WW6//fbstddelelbbbVV5euWLVvmjTfeWO7ytWrVSp8+fXLPPfdkwIABGTt2bI073jZp0iRdu3bNWWedtcyyK7q24L+jT58+ady4cW666aaccsopWbRoUXbcccf8n//zf9KiRYvMmTMn66yzznK3PWfOnBrT6tatW+P7evXqZUXmzJmThQsXZvvtt68xfdGiRWnZsuVKx/yv0e2j03RXFjuXd7TdR/PPmjUr6667bo3HPn7E4ae17bbbZtttt/3M6wEAACiZAAh86e2www7p0KFDzj///Oy4445p1apVjcfnzp2bl156aYVH6CVLTwP+wx/+kMceeyyvvPJK5fTfZGlI/OMf/5iNNtqoRmB75ZVXltnWp7Xjjjtmxx13zLx58/Loo4/mt7/9bc4444wMGzYsa6211nJPrZ09e/Zyw+CqWmuttVKvXr1cf/31yzxWq9YXewWIevXqLXONxvfff/8LHQMAAMB/KtcABL70atWqlREjRmTBggXp27dvLrzwwtx///25++6789vf/jbf/e5389prr2XAgAErXMc222yTDTbYIGeddVY6duyYjh07Vh7bb7/9Mnfu3AwaNCiTJ0/Oq6++mgsvvDC77LJLJkyY8JnH/+CDD2b69OlJlh5Zt/POO2e33Xar3Ihjs802y/PPP1/jOocffPBBXn311Wy++eaferubb755FixYkEWLFqVt27aV/+rXr79M2Pyk05g/q4+up/jx7TzwwAOrdZsAAAAsJQACXwkdOnTIn//85/zwhz/MLbfckp/97GcZNGhQ7r///uy77765//77lznV9eOqqqry3//933nhhRdqHP2XJK1bt87IkSPz7rvvZq+99soPfvCDPPTQQ7nsssuy9dZbf+axjxo1KieccELGjx+fadOmZdy4cbn33nsr1+bba6+9Mn/+/Jx++ul57bXX8tJLL+XEE0/MWmutlV133fVTb7dbt27p2LFjTj755Dz99NOZPn16xo4dm/322y833XRTkqWn7davXz/jx4/PlClTUl1d/Zn3d3l69+6dGTNm5JJLLsm0adMyduzYPPzww6tlWwAAANTkFGDgK6Nly5YZPHhwBg8evNL5OnbsmJdffnmZ6StbtlOnTrn22mtXuM5hw4YtM+273/3ucrfzr84+++wMHTo0gwYNqpzW27Nnz/Tv3z9JsuGGG+Z3v/tdLrjgguy7776pXbt2OnfunEsvvbTGDT7+XbVr184FF1yQ4cOHZ9CgQZk3b1422GCDHHroodl///0r8x188MH5wx/+kEceeSS33nrrp97eyvTq1StHHXVUbrjhhlx//fXp0qVLBg8enP3333+V7tQLAADAp1e1YMGC1XveF7DaTJ06NRtvvPGaHgZ8oiVLlmTmzJk1rmn4zDPP5LDDDsvo0aPTrl27ZZaZNGlSjVO1P+5fb4ayOk2aNClbbLHFF7Y9AACAz5tTgAFY7caPH5/vfe97ueKKK/L6669nwoQJGTp0aDbffHMRGwAAYDVzCjAAq12XLl1y2mmn5dprr83vf//7NGnSJF26dMkxxxyTqqqqNT08AACAogmAAHwh+vbtm759+67pYQAAAPzHcQowAAAAABRMAASgeGfc8kDefPPNJMkrr7yy3HnOO++8JMndd9+dBQsWZPHixZU7NQMAAHyVuQswfIW5CzAlmzRp0poeQoW7AAMAAF9lrgEIwJeS6AYAAPD5cAowAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AAAAAFhzhgwZkokTJyZJlixZkiSpqqpKkuy2227Zc889/+11/vWvf02XLl3SoEGDz2+gAHxqAiAAAMB/sEGDBlW+Hjp0aNq0aZM99tjjM63zxhtvzOabby4AAnxJCIAAAAAs18KFCzNq1Kg8++yzqa6uzmabbZaf/OQnqVevXqZMmZJrrrkm8+bNy5IlS7L99ttnr732ytChQ/Puu+/m9NNPz0EHHZTOnTuv6d0A+I/nGoAAAAAs1+23357XXnstZ599dkaMGJHFixfnhhtuSJJcd9116dOnT4YOHZqzzz47b775Zt55550MGDAgSXLKKaeIfwBfEgIgAAAAy/XII4+kd+/eqV+/fqqqqrLLLrvkiSeeSJKsvfbaeeKJJ/LKK6+kfv36GThwYNZdd901PGIAlscpwAAAACzXnDlzcu2111aO+luyZEkWLlyYRYsW5Ygjjsidd96Ziy++OO+//3522mmnT3XDEABWPwEQAACA5WrRokX22Wef5Z7K27hx4+y9997Ze++9M23atAwZMiRt27Z12i/Al5BTgAEAAFiubt265Z577snChQuTJH/9619zyy23pLq6OieddFKmTZuWJGnVqlUaN26cJKlVa+mfmXPmzFkzgwZgGY4ABAAAYLm+//3vZ9SoURk0aFCSZJ111skhhxySOnXqZNddd83w4cOzYMGCVFVVpWvXrunatWuqqqryrW99KyeffHL233//7LTTTmt4LwCoWrBgwZI1PQjg05k6dWo23njjNT0MAAAA4EvMKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrM6aHgD8p5kxY0aWLFmSVq1apXbt2lm0aFHefvvt1KpVK+utt95y5wEAAAD4tBwBCF+wxYsXZ8mSJVm8eHGN7xctWrTCeQAAAAA+LQEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAoWJ01PQD4T9OwYcMkSZ06dSr/27Bhw1RVVa1wHgAAAIBPS12AL9jaa69d4/uqqqplpv3r9wAAAACfllOAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAfJ4XGAAAgAElEQVQAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGB11vQAAABgdZjw+ox0Oel3WZLkv7faJHf88qAkyYLqRTnn9odz/WMT8uq776Vx/Xrp3Gb9nPD9HdN7i3ZJkiseHJcb/jYx957wk9U+zpdffjknnHBCbrzxxhrTn3vuuZxzzjm59tprc/bZZ2fChAlJksWLFydJatVa+m/5u+++e7p06ZITTjghffr0ycEHH1xjPQ8//HAuvPDC9O/fP7169cqf/vSnjB8/PqeeeuoqjW/QoEGZP39+hg8fXtnm523SpEm58MILs8022+Twww9f4Xz33XdfbrvttsyePTsbbbRRjjzyyHzta19bZr5FixblD3/4Q5588sksXrw4nTp1yhFHHJF69eqtdBwfvRZ16iz9M6lJkyZp3bp1/uu//ivbbbfdKu3LCy+8kEaNGmWjjTZapfm/Kj7Lfh199NH52c9+ls0337zG9PPPPz+tW7fOHnvs8ZnHt8eI63Pb089n0ZIleer0o9L1G62TJKP+NjEj7n4s/3fqW6lVVZV267XI4d/ZNkf3/laS5KW3ZmbT44an+pozPvMYVtXYsWNz7bXX5uijj06PHj1WON+tt96au+++O/Pnz8+GG26YQw45JBtvvPFy513Vn6Ekueeee3L77bfngw8+yAYbbJCDDz44HTp0WGZ9p59+en71q19VXrcXX3wxV111Vd5+++00b948BxxwQLbZZptP3N8zzzwzzz33XKqqqirTfvGLX6R9+/Y5+uija8y7ZMmSdOrUKYMHD86HH36Y6667Lk899VQ+/PDD9OjRI4ccckhq165dY5kbb7wxY8aMWeYz9PN24IEHprq6OlVVVWnQoEHWW2+9bLfddunbt2/lM+PzsqLXc+HChbnmmmvy5JNPZuHChdl0001z+OGHp3nz5p+4zpW97iv7bJ08eXKuueaazJgxI02aNMkee+yRb3/720mSp59+OqNGjcq7776b5s2bZ88990zPnj0/cSxLlizJqFGjcv/996e6ujrdunXLYYcdlrp16y4z78q2P2nSpFx33XWZMWNGWrZsmcMOOyybbrrpv73/Y8eOzZ///Oe8//772WSTTXL00Udn7bXXXuH4V/R78ZxzzsmECRNy6aWXpmnTpjWWGThwYJYsWZILLrjgE5+f1UUABACgSFtt9LVUX3NGzrz1wTz+8uuV6buPGJmpM2fl8kN3S5e2rfNhdXX++NRz2W34dbnz2IOy46bfyP7bb5U9tt18JWv/Yp1wwgmVr4cMGZK2bdtm7733rkx7+eWX07x58zz22GM54IADavwx+tBDD630D5mVmTJlSpo3b54GDRpk/Pjx6dq166ffiRV46KGH8pe//GWFf7R95O9//3tGjhyZX/3qV/n617+eMWPGZMSIETn77LOXmXfs2LF58cUXc95556Vu3bo577zzcuONN+aAAw5YpTFdf/31SZJZs2blqaeeymWXXZZ33303u+666ycue99996Vz587FBcAv+3798Zj9kiR1Djq5Mu3cOx/Jb+54OBcc9P38V6f2aVy/Xh6Z8mqOuOq2zJw9Nyfv9p18Y921M+2C47+wcV5yySVZvHhx1l9//ZXO97e//S333ntvzjjjjLRo0SI333xzhg0bttx4sKo/Q0kyceLEjB49Oqeddlpat26d2267LcOGDcvFF19cmWf+/Pm58sora0SlBQsW5LzzzssBBxyQHXbYIRMnTsywYcMyYsSINGvWbKXbnDt3bn75y18u9/Pjo5+1j/zmN79J9+7dkyQ33XRT3njjjQwdOjSLFi3KWWedldtvvz277bZbZf5XX301f/3rXz9xvz8vJ510UjbffPPMmzcvU6ZMyTXXXJMXXnghxx//+b2HVvZ6jhkzJq+99lp++9vfpm7duhkxYkSuu+669O/ff6XrXNnrvrLP1g8++CC/+c1vcuSRR6Z79+6ZPHlyzjzzzHTs2DH16tXLiBEjMmjQoGyxxRaZNGlSfv3rX6dDhw5p1arVSsczduzYTJo0KUOHDk2dOnVy4YUXZsKECcu8R1a2/YYNG+bcc8/NgAED0qVLlzzyyCM599xz87vf/S4NGjRY5f0fP358br755px66qlp1apVrrrqqlx88cUZPHjwcsf+Sb8XmzVrlkceeSR9+/atTHvhhRfy4YcffuI/Qq1uAiAAAP8x7nvu5dw76eW89NtfZMMWS/9obVS/bg79dtfs0mmTrN+8SZJk5GMTcsPfJubYvjvkJ5f/MW+cf3xq/X9Hr5w85t5MnvZ2/njMfnl0ymv55fV35b0581K7VlVGHLhr/qtT+7zyznvZ5qTf5ay9ds7Yif+bl96amZ23aJ8RB/Zd4dg+q4YNG2bttdfO+PHj061btyTJzJkzM3Xq1E8dbe6999707Nkza621Vu65554af+gMHz48TZs2zTvvvJPZs2dn8eLF+dnPfpYNNthgpY/9qzZt2uTUU0/N6NGjM2fOnBWO5bHHHkv37t3Tpk2bJEuPfPzTn/6UN998c5mY8uijj6Zfv35Za621kiR77LFHhg0btsoB8CPNmjVL796907Rp05x//vn5zne+k8aNG2fcuHG54YYbMnfu3NStWzf7779/unXrlltuuSWPPfZYJk6cmGnTpmXvvffOzTffnAcffDALFy5My5Ytc+SRR2bDDTdcZlsvvfRSLr300syfPz/t27dP/fr106xZs+y7775ZuHBhRo4cmfHjx6e6ujqbb755DjvssNSrVy8XXnhhmjdvnpkzZ+af//xn3n///QwYMCBt27atvIZ33HFHqqur06JFi/Tv3z+tWrXK/fffn3HjxqW6ujqLFi3KySef/G/t14rW+9E2b7nlltSrVy/du3evceTXv5o1a1ZOO+20TJ06Neuss0769++ftddeO4cffnjOOeecfP3rX0+y9A/oIUOG5LLLLlulo63en/dhTr35/vzhiD2yZ7ctKtN33qJ9Hj/1yDSqt/RIo1feeS+bHjc8My85Mev97Ow8c1b/fHODdZMs/bzY76IbM+384zNj1gf52dW35/np72ThokU5uve3clzfHZIkbf7n3Pzyv3vm/sl/z7T33k+zhvVz8//sn6YN6y8z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", + argumentInfo: { + argumentName: "base64image", + formattedValue: "base64 data: iVBORw0KGg..." + } + } + ], + status: "PASSED", + durationInNanos: 732605, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 3946628, + depth: 0, + parentFailed: false + }, + { + name: "showing thumbnails is set to", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "showing thumbnails is set to" + }, + { + value: "false", + argumentInfo: { + argumentName: "showThumbnails", + formattedValue: "false" + } + } + ], + status: "PASSED", + durationInNanos: 171602, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 167430198, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 307757704, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment23.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "$ attachment icons exist", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "1", + argumentInfo: { + argumentName: "nrIcons", + formattedValue: "1" + } + }, + { + value: "attachment icons exist" + } + ], + status: "PASSED", + durationInNanos: 12575790, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["false"], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 780051284 + } + ], + casesAsTable: false, + durationInNanos: 1840709777, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#274", + description: "Scenarios of Issue #274" + } + ], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "a_thumbnail_is_shown_for_image_attachments", + description: "a thumbnail is shown for image attachments", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#274" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 260602, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has an image attachment $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has an image attachment" + }, + { + value: "iVBORw0KGgoAAAANSUhEUgAABQAAAAMACAYAAAB7NMrNAAAAAXNSR0IArs4c6QAAIABJREFUeJzs3Xl8zWf+///HWRJJyEKCEBo7ldjFrpZSQ2sZ1GhH20EpNW3VTNuPVpdptXRhbNWZVpWWopjSFlVKSWoXYi9BQpCQfd/OOb8/8sv5Ok1CbDkaz/vtdm513u/rfV2v98lyu/WZ63pfBt7ChoiIiIiIiIiIiJRLRmcXICIiIiIiIiIiIneOAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMKAEVERERERERERMoxs7MLEBEREREREZHyz8PsQROvJnTw70AbvzbUcq8FRvA1+Tq7NJEyFZ8fj8FmICYrhn1X9rE7bjfHU46TZcm6Y2MaeAvbHetdRERERERERO55QwKH8Lcmf8Pfw5/KFSvj4uKCq6srLi4uzi5NxCny8vLIzc0lLy+PpIwk4jLj+PzE53wb/e0dGU8BoIiIiIiIiIjcEWajma+7f01jv8bU9q+N0WjEZDJhMpkwGAwYDAYA+39FyjubzWb/r81mw2KxYLFYsFqtnI89z/H44zy+9XGsNuttHVcBoIiIiIiIiIjcdh2qdmBu+7nU8K+Bl5cXZrMZs9mM0WhU8Cf3vKuDQKvVSn5+Pnl5eaSlpXEp9hITdk9gz5U9t208BYAiIiIiIiIiclsNqjeIN1u/Sd1adXFxccHFxaXIrD8RKXD1bMC8vDzy8vI4c/4Mbx94mzVn1tyWMRQAioiIiIiIiMhtU8FUgbC+YTRq2Mj+rL+rZ/1dzWazkZCQgMViwdfXF7NZe5XKvatwNmDhswFPnjpJux/aYbsN0Z1+skRERERERETktlnx4AoCagbYwz+TyVSkTXJyMosWLWLdunUkJSUBULFiRR588EHGjh2Lv79/WZct4nQGgwGTyYSrqysAATUDWNlrJUM3D73lvo233MMN+s8j/8H2ps3+6nJfF4fzXhW8eP2B19k/dj+pk1PJez2Pi/+4yJLBSwipGeLQtpZXLWxv2vhby7+V5S1cU+TzkQ73Z3vThuUNC1ETo1gzfA3tAto5u0QRERERERGRO+Kx+o/RxK8JXl5euLi4YDQWjR1Onz7NX//6V5YsWWIP/wAyMjL47rvvGD58OOHh4WVZ9h0xffp0fvrpp1K1zczM5JlnnuHChQt3uCrnOXjwIJMmTXJ2GX8IRqMRFxcXvLy8aOLXhMGBg2+9z9tQ1w2Zs3sOfZf2ZXrY9CLn6vrU5cAzB3i588tsi97G6LWjGb5qOHN3z6V9QHt2jN7BX5v91d4+KSuJ8evGs/P8zrK8hesKvxROj8U97K8+S/owLXQaTas2ZctTW2hYpaGzSyziz03+zL6x+5xdhoiIiIiIiPxBeZg9eLz+4wTUCLDP/Pv9st/MzEwmTpxIXFwcfn5+vPPOO2zdupWwsDBmz55N/fr1SU9P5x//+AdxcXFOupOyV6FCBSZNmoSfn5+zS7ljGjRowLPPPuvsMv4Qrp4JGBgQyKgmo6hgrHBLfZb5EuBjV45x7MoxfNx8ipxb8egKfNx8CPkshBPxJxzOzdk9h41PbOTtHm/zv+P/Iys/i4y8DP6z7z9lVXqpJWUn8UvULw7HNrOZH07+wNmJZ3m166uMXDvSSdUVr32t9s4uQURERERERP7Amng1wb+iPyaTqdjwD2D58uVcunQJHx8fvvjiC2rUqGE/17lzZ1q2bMmoUaM4ffo0n332GVOmTCnLW3Aak8lE48aNnV3GHVWpUiUaNGjg7DL+MApDQJPJRHWP6jTxbkJEUsRN93fXPAOwR50ehNQM4cWNLxYJ/wAy8jLo81UfMvMy7Q8/rOVVi/Mvnmfk2pGcSznHz0/+zJBvhvC/4/9zuDZiXASJWYn0WNwDAwb+3u7vjGo1ioa+DcnKy2L9qfW8vOll4jIK/rrwWPBjfD3ka1r/tzVTe06lXUA7jAYjm85s4tl1z5KYlXhT93gh7QLRydHUrVzXfqw09SwetJg2NdswZcsUpvacSh2fOqRkp/DJvk+Yun2qvS8fNx+m95rOgMYDqOpRlSuZV1h3ch2Tf55MfGY8AJ/1/4yQgBDeD3uf2X1ns/bEWhr6NqRbYDcAbG/aeGnTS3y046ObukcRERERERG5N3Wt2RVfz4KNPEra6Xfz5s0AjBo1yiH8K1SxYkWef/55XnjhBTZv3szkyZOLfYbgtfzyyy/89NNPpKSk4O3tTe/evenRowcA8fHxLF++nDNnzmC1WmndujXDhw+3P3Nt165dbNiwgYSEBDw9Penduzc9e/YE4JtvviEzM5PMzEzOnDnDRx99RE5ODitWrODAgQMYjUbatGnDsGHD7JuZ5Ofn89lnn3Ho0CEqVKjAY489Rps2bYrUnJmZyYsvvsgbb7yBr68vL7zwAuPGjWPz5s2kpKTg5ubGqFGjqFmzZpFrLRYLy5cv58CBA2RnZ1OjRg2GDh1qDxQPHz7Mt99+y+XLl4ucO378OGvXruXixYu4ubnRu3dvevfuDcDKlSvJyMigYsWKnDhxgrS0NDp27Mif//xnAFJTU1m2bBknT54kLy+P+vXrM2LECHx9fcnKymLixIk89dRTrF69mv79++Pj48OXX37JzJkzATh58iSrV6/m0qVLeHl50apVK/785z9jNBpJTExkyZIlnDlzBpvNZu+7SpUqN/S98EdnMBgwm81UqVSFB2o+cEsBYJkvAS5J9zrdAfgx8scS22TkZZS488kvUb8QkxrDX4L+4nD8fr/7aV69OYsjFgPwatdXmdN3DquOrSJ4fjBDvhlCm5pt2PTkJlyMLgDkWfMA+LT/p0zdPpVqH1ajx+IeDGg8gNcfeP2m79GrghcBXgGcTTprP1baeur41GFsm7E8uPhBKk+vzFu/vMU7Pd6xL4k2YGD9X9fTv1F/xv0wjgZzGjD+h/E80ugR1j2+DgMFv3xzLblUca/C+JDxPPG/J5gWNo2Bywby0+mfiIiLoOqHVfl4z8c3fY8iIiIiIiJyb2rl1wo3N7cSd/wFOHfuHACtW7cusZ/CgCw9PZ2EhIQbquHixYusXLmScePGMXfuXMaMGcPatWu5cOECNpuNefPm4efnx/Tp05k6dSrJycl8/fXXAMTGxvLFF18wZMgQZs2axciRI1m1ahVRUVEAmM1mjhw5QpMmTXjzzTeBgpAsNjaWKVOmMHnyZCIjI/n+++/t9YSFhdGpUyc+/PBDunTpwtdff43Ndu0dXQsDz9DQUF544QWmTp1KjRo1WLt2bbHtQ0NDOX36NK+//jqzZ8/mgQceYMGCBVgsFuLj4/nvf/9Lnz59+PDDD+ncuTMff/wx6enpxMfHM3/+fHr06MGsWbN48cUX2bJlCzt37rTXsX//fho3bszrr7/Oiy++yMaNG4mJiQFgxYoVZGRk8K9//Yv333+fChUqsGzZMvtnBbB3715eeuklOnbs6FBzcnIys2fPpkuXLsycOZNx48axc+dOfv75ZwBWrVqFl5cX77//PtOnT8fHx4dvvvmmlN8F5YfBYMBoNOLm5kYbv6LB8Y24awLAAK8AbNiISo5yOO5mdsPHzcfhVcFUdN2z1WZl6eGlPNzoYTxcPOzHH2/2OJl5maw6tgo3sxv/1+X/+OboN7wb+i5RyVFsj97OqLWjaFatGUOaDnHo87Pwz9gZsxMbNg7FHSI0OrRUS2UNGDAbzfZXBVMFgqoGsWLoClyMLny892P7vZW2noouFZm0cRJxGXHkWfP4LPwzjlw+wshWBUuJu9XpRsdaHZn440S+++07olOiWfvbWl7Z/ArtAtrZ67Zho7ZXbV7e9DIbT2/kTNIZUnJSyLPmkW/NJz4znqz8rFJ+1UREREREREQK1KhQAzc3txLDP8C+KUh+fn6JbfLy8uz/tlqtN1RDVlYWBoOBSpUqYTQaqVu3LjNnziQgIIDIyEguX77M4MGDcXV1pVKlSvTv3589e/aQn59PtWrV+OCDD2jevDlms5lGjRpRrVo1oqOj7f27ubnRs2dPPD09sVgs7Nmzh759++Lr64ufnx8jR450WMobFBREUFAQbm5udOzYkfT0dFJTU0t1Lw888IB9ZmLjxo2JjY0t8Z5NJhPu7u6YTCa6du3K+++/j8lkYu/evdSsWZP27dvj7u5O9+7defzxx7FYLOzevZvatWvTvn17jEYjNWrUoFu3bvz666/2vqtVq0bz5s0BqFGjBt7e3vY6RowYwfjx46lUqRLu7u6EhITYw9JCHTp0wN/fnwoVHHOcXbt24e/vT9euXTGbzdSqVYvOnTvbN3/JzMykQoUKVKhQAXd3d0aMGMG4ceNK9bmVNwaDAXd3d2q4FZ0xeyPumiXAVlvBD3WuJdfh+P91+T/e7Pamw7GSlqh+FfEVr3R+hYcbPszKYysBGB48nNXHV5Oem05IzRAquVZi3al1DtftubCHlJwU2tZsy/Ijy+3HD1w64NAuKTuJ+7zvu+699Kzbk7zX84ocj4iLoP+y/uy7WLDZRrNqzUpdT3puepGl0YfiDtGtTsHS3cIdksPOhTm0KdwgpXWN1uyK2QVAvjWfPRf2XPc+RERERERERErLZrDh7u5+zTYNGjTg0KFDhIWFERwcXGybsLCC/6+tVKkS1apVu6Ea6tatS6tWrZgyZQqNGjWiWbNmdOzYEQ8PD65cuYLFYuG5554rcl1ycjJ+fn7s3r2bX3/9lfT0dAwGAxkZGQ5hZdWqVe3/Tk1NJScnx+FY7dq1Hfq9+lxhmHet8PNqPj7/b+8EFxcXcnNzi23XuXNn9u3bxyuvvELTpk1p0aKFfRbllStXHGqAglCu8Nzp06d55plnHM5fvcz26hp+X0dycjL/+9//iI6Oxmq1Fntfvx+7UHx8fJEl4P7+/vbZh4888giffPIJhw8fJigoiJCQEBo1alRsX/cCd3d3bIZrzxy9nrsmAIxOjsaAgQZVGnAy4aT9+KKDixw21Nj61NYS+zh65SgHYg8wLGgYK4+tJKRmCA2qNGDcDwUpsbebNwALBizg0/6fOlzranIlwDPA4VhxM+Gu9ZeMQnsu7GHC+gn29480eoQ3ur3Bc+ufI/RcqP34jdSTlptWZJz03HQqu1V26CslJ8WhTWpOwV8WPF097cdSclLsgauIiIiIiIjI7WCwGcjJySky2+tq/fr149ChQyxZsoQuXboUCQEvXbrE7NmzAejdu7d9xmBpGY1GRo8ebR+n8Jl+kydPxtXVFQ8PD/79738Xe21oaCgbNmzgueeeo169egC88847Dm2ufh5hYT5wvSW9N6s0+QOAl5cXU6ZMITIykkOHDrF69Wq2bt3KSy+9hMFgKLE+FxcXWrZsyfjx42+4BovFwpw5cwgODmb06NG4ublx8OBBFi1a5NDuRp/fWBgiNmjQgGnTpnH06FEOHTrEvHnz6NatG0OGDLlOD+WPwWAgOzsbg6103w8lKZMAsKZnTepXru8QfrmaCpLvzLxMADad2cTUnlMZ33Y8L2580d4uKjmqyLLga/kq4ium9pxKRZeKPNbsMc6nnmdrVEFomJSVBMDkzZOLzLqDgkDtdkjLTbPP8oOCmYQPN3yYhQMX0uI/Lez3fCP1eFXwKnLex82HhKyC5yEkZycD4F3B297/1dcVnhcRERERERG5E2KyYmiR3QIvr6L//1po0KBBrFmzhhMnTjBu3DhGjBhBly5dMJvNhIeHs3DhQpKTC/7/tXCm2o2wWCxkZWVRo0YNatSowUMPPcTUqVM5cOAADRs2JDMzk8TERPsst5ycHHJzc/H09OT06dM0bdrUHv5lZmZy+fLlEsfy9vbG1dWVS5cu2WezRUVFERMTQ5cuXW649puVk5MDQMOGDWnYsCF9+vThn//8JzExMVStWpXdu3c7tN+0aRMtWrSgWrVqHD9+3OFcamoq7u7uuLi4XHPM5ORkEhMTefDBB3FzcwPg7Nmz17zmasXVFRsba5/xmZqaiqenJ61ataJVq1Y0b96cRYsW3ZMBoM1mIzs7m5ismFvqp0yeATip4yS2/m2rw4y2FtVbYMPGqYRTQMGsuU1nNjE+ZDwdahX/Q965dufrjrXsyDIqmCvQp0EfhgUN46uIr+yz3Y5cPkJabhq1vWtzIv6Ew8uAgQupF27D3RZlsVkY8/0Y6vjU4b0H37Mfv5F6KrpUpH2A4/MH2wW049iVYwDsjin4welyn+Mvmc73FXxmpVnyW7hRiIiIiIiIiMiN2h+/n6ysrGvOiDObzcyaNYv777+f7OxsFixYwN/+9jdGjBjBzJkz7eEfwFtvvWV/JlxphYWF8eGHHxIbG4vNZuPSpUukpKTg5+dHYGAggYGBrFixgvT0dLKysli2bBmfffYZAL6+vly4cIGsrCySk5NZsmQJlStXdqjpagaDgY4dO7Ju3TpiY2O5cuUKS5cuvWZoeCd8+eWXLF68mLS0NKxWK6dOncJoNFK5cmXat29PXFwcW7ZsIT09ne3bt/P999/j7u5Ohw4dSElJYcOGDeTm5pKQkMCcOXPYuHHjdcf09PTEbDYTGRmJxWLhwIEDnDp1ipycHLKyrr+vQGFdYWFhWCwWoqOjCQsLo2PHjlitVt59911++ukncnNzyc3N5cyZM/j5+d2Oj+sPKTs7m31X9l2/4TWUyQzAz/Z/xvi241n72FqmhU6jjk8dxoeMZ9HBRQ5LW5/89kl+euIntv1tG18c/IItZ7eQnptOgGcADzd6mAGNBxB2LoyvIr4qcazY9Fg2nd7Ea11fI8AzgC8jvrSfy7Hk8H7Y+7ze7XWikqNYf2o9riZXxrYZy7i24+i4oCP7L+2/I5/BwdiDzNo1i390+gerj60m9FzoDdWTkpPCzD4z+edP/+RK5hXGtR1HHZ86vLL5FQBCz4USei6UmX1mkp6bzpHLRwgJCGF6r+n8GPkjB2IPXKs8ErMS6Vy7M+0D2hOXEXdDsy5FREREREREdsXuIjEtkdq22tds5+fnxxdffMF3333H+vXr7cFR7dq16dGjB/379+eVV17h5MmTPP/888yaNYu2bduWqoauXbsSHx/PjBkzyMjIwMfHh169etGyZUsAxo4dy7Jly5g8eTIuLi40adKE0aNHA9CjRw8iIyN5+eWX8fHxYdiwYaSkpLBixQo8PT2LHe/RRx9l2bJlvPfee7i4uNC6dWv69+9/A5/arRs+fDhLlizh9ddfJz8/H39/f8aNG2ev+fnnn2fZsmWsXr2aGjVqMGHCBPu5CRMmsGrVKn744QcqVapEu3bt6Nu373XHdHV15a9//Svffvstq1atolmzZjz77LPMnDmTKVOmMHXq1Gte7+PjwzPPPMP333/PN998g7e3Nw8//DAPPPAABoOBcePGsWLFCn744QdMJhN169bl6aefvvUP6w/IZrORmJbIjtgdt9SPgbe4M4vVf+eBwAd478H3aOnfksSsRFYfW82rP79a5Dl77mZ3xoeMZ1jQMJr4NcHd7M6VzCvsvbCXpYeXsvrYamz/f8m1vGpx/sXzjFw7kkUH/98688ebPc7SwUvZFbOLjp87bjUN8GzIs0wImUCDKg1Iy00jIjaCqdun2pcKD206lJWPrqTZJ804cvmI/brlQ5fT0r8lTeY1KfE+I5+PJCo5il5f9ipyzsPFgyPPHsFitTgsBb5ePQsGLKB3vd6M/m40H/T+gKCqQcRnxjNvzzymhU2z9+9dwZv3e7/PwMYD8fPwIzY9llXHVjFlyxQy8jIAmNdvHsODh+P3gWNy3j6gPSuHraR6xep8tOMjXtvyWon3KCIiIiIiIvJ77iZ3lvdcTt+QvpjN5lI/w644ycnJjBs3jsjISNzc3Fi4cOE9vQmE3JtsNhv5+fn8uO9Hhm4eSq61+I1gSqPMAkC5eQsGLOBPDf5ErZm1nF2KiIiIiIiISIkG3TeIqZ2mcn/D+294A4/fuzoE/OCDD+jZs+dtqlLkj8FqtXL81HEm/zqZ789/f0t93TW7AIuIiIiIiIjIH9uac2t4qvFT+Pv5U6VKlVuaBejj48PChQs5e/YsQUFBt7FKkbufzWYjMTGRkwknbzn8gzLaBERERERERERE7g3Dfh7G2aizWK3Wa24IUhoeHh4K/+SeY7PZsFgsREVHMeznYbelTy0BFhEREREREZHbqkv1LsztOpdmTZphNBpvaSagyL2kMPw7dOIQ47ePZ8+VPbelXxPdeeu29CQiIiIiIiIiApzLOMexxGO0MLbA3c0dNzc3hYAi12Gz2UhKSuL4ieM8u+PZ2xb+gWYAioiIiIiIiMgdtLHfRhr6NSQwMBCDwaAgUOR3bDYbNpuN02dPcybxDH9a/6fbPoYCQBERERERERG5o/5S7y882fBJqlesjp+XHx4eHvaXyL0oMzPT/opPjScuI46Fvy1kddTqOzKeAkARERERERERueMqGCvQxLsJnfw70aZqG2q718ZmsOFn9nN2aSJlKsGSAFY4n3WefZf3sTNuJ8dTjpNrzb1jYyoAFBERERERERERKceMzi5ARERERERERERE7hwFgCIiIiIiIiIiIuWYAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMGm81mS0lJISUlhby8PGfXIyIiIiIiIiIiIrfIxcUFb29vvL29MaekpJCenl7wxmx2dm0iIiIiIiIiIiJyi/Lz80lPTwfAmJycTKVKlRT+iYiIiIiIiIiIlBNms5lKlSqRkpKCMT8/X+GfiIiIiIiIiIhIOWM2m8nLy9MmICIiIiIiIiIiIuWZAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGNmZxdwI2JiYjh69CgAeXl5VK5cmXbt2uHi4gJAbGws4eHh5ObmYjAY8Pf3p1WrVri6uvL999+Tn5+PyWSy9+fu7k7v3r2Jjo5mx44d9OvXD29vbwDS09MJDQ2lb9++9vZ79+4lKiqKwYMH2/vJysri22+/xdPT097ObDbTunVrqlevDsDXX3/No48+iouLC7m5uRw8eJALFy5gMBhwcXEhKCiIOnXq3NkP73fi4+PZsWOH/R5MJhOurq4YDAb69+9/zc8L4OjRo5w7dw6j0UheXh6BgYE0a9aMX3/9lYSEBKxWK5mZmVSqVAmA+++/n4YNG5bpPS5dupRffvkFs9lMZmYmPXv25KmnngIKvr6ffvopO3bswGQy4eHhwV//+ld69eoFwM8//8zbb7/NggULHOr+4osvWLRoET///DPbtm3jgw8+wNfX12HcMWPGkJiYyOrVqwG4dOkSVatWxWw207x5c8aMGcPIkSP57rvvHK7r0aMH69atIzIykrlz5/LZZ5+RkJDA4MGDeemll3jkkUfsbYcNG8aiRYvw8PAgJiaGefPmERkZiZubG97e3jz99NO0atXq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ERERERERERERuVUuLi54eXnh7e2NITc31+bsgkTk5pw/f5569eo5uwwRERERERERuYtpExAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMKAEVERERERERERMoxBYAiIiIiIiIiIiLlmAJAERERERERERGRckwBoIiIiIiIiIiISDmmAFBERERERERERKQcUwAochew2Wzs37+fCxcuABAXF8euXbucXJWIiIiIiIiIlAcKAEWczGazsW/fPq5cuYKXlxeXL19m9+7dVKlSxdmliYiIiIiIiEg5oABQxIkKw7+EhAQ6d+5MVlYWu3btokmTJjRq1MjZ5YmIiIiIiIhIOaAAUMRJFP6JiIiIiIiISFlQACjiJKdPn+bChQu0bdsWNzc39uzZg7+/v8I/EREREREREbmtFACKOEndunWpVq0aBw8eJD8/n1atWnHp0iWio6OdXZqIiIiIiIiIlCMKAEWcxGQy0b59ezw8PPj111+pUqUKbdu25eDBgwoBRUREREREROS2UQAo4kQKAUVERERERETkTjM7uwCRe11hCLhnzx4uX75MYGAgAJGRkfZ/i4iIiIiIiNzLbDYbiYmJ5OfnF3veaDRSpUoVTCbTHe2jUHZ2NikpKUWOGwwGfH19S9XHb7/9xtmzZ7HZbNds5+7uTufOnXFxcblunyVRAChyFzCZTHTs2NH+PiAggICAACdWJCIiIiIiInJ3iImJYcGCBSQnJ1+znbu7OyNGjCAoKOiO9HG1d999l7S0tBL7ePTRR2nduvU1+1iwYAF5eXnXbHN1n+3bty9V2+IoABQRERERERERkbvW8uXLadWqFY888kiJM+usVis7duxgyZIlTJ06tUi729HH1dLS0pgyZQp+fn4OxyMjI5k3bx5ffvkl2dnZdOrUqcQ+Shv+AeTm5pa6bXH0DEAREREREREREblrXbhwgY4dO14zkDMajXTq1ImsrCwSExNL1ceaNWtYs2ZNqfsojcqVK+Pu7g7A6tWryc7Ovql+bjfNABSRW7Z8+XJ27dp13XZPPvnkdadAi4iIiIiIyM1pu6otlcyVcDe742Z2w93kjofZg+oe1Wng3YD63vWp71WfgIp/rEdO2Ww2jMbrz2ErbGO1WkvV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q1atQnp6Otq1a1fvfv79919YW1tj2LBhzHUjRoyAtrY29PX1met+++033L59G1wuFz179oS7uzvatGkDAPj9998RHh6O3NxcmJqa4vPPP8dHH30EAPDx8YGtrS1evHiBzMxM8Pl8zJgxA0OHVkWfCwsLERgYiLi4OAgEAnTv3h3u7u4wNTVFWVkZFi1ahPnz5+PcuXOYPHkysrKykJ+fDy8vLwBAfHw8Lly4gPT0dBgYGGDw4MGYNm0aVFRUkJubi9OnT+Ply6oXerdu3eDh4QETE5OGnXSiUPalt7c3kpKSEBMT02R9EkIIIYQQQgghrYG+uj78R/hjzumiBs0AACAASURBVO054FZwm2XM84nnsWnwpmYZqzVq0QzAiIgIDBs2DIaGhrC2tkZUVFSD+unQoQPi4uIQHx8vcf2gQYPQrVtVlZoHDx4gNDQUixcvxp49e6Cjo4PDhw8zt127dg2enp44cuQIpk+fDj8/P2RlZQEAVFVVERYWhlmzZmH79u0YP348Tp8+zWSRnT17FlwuFzt27MDevXuhoaGBwMBAAICaWlWM9c8//8TXX39da5kzh8OBr68vHBwccPDgQSxZsgR3797F77//DgA4f/489PT04Ofnh71798LIyAhBQUENOk+kilAov4S4trZ2k/dJCCGEEEIIIYS0Fp30OsHX1heqrObZDuuP1D8gEFHyTUO1WACwqKgIjx49wvDhVRVk7OzscO/evQYFUpydnfHxxx9j9+7dWLVqFY4cOYLIyEiJCq1RUVEYPnw4rKysoKurC1dXVzg5OUEkEuHOnTtwdHRE586doaKigoEDB6J37964f/8+c/+BAwfC1NQUANC7d29wuVwUFRUBADw8PLBs2TLo6upCW1sbQ4cORVJSksQc7ezsYGFhAQ0NDYnr79+/DwsLC4wcORJqamro2LEjHBwcmMyz0tJSaGpqQkNDA1paWvDw8GAyB0nDKCNYJxKJmrxPQpTp5MmTsLKygpWVFT799NNG98fj8Zj+rKysFM6eJYCnpydz3rZu3drS02k24q+XP//8s9H9LV68mOnPx8enUX0NGDCA6av6BzlCCCGEEFKbjZkNNgza0CxjlQhKEJne8O3jPnQttgT47t27MDc3R+fOnQFUBdhOnTqFR48eKbz3WjU1NTXMnj0bn332GeLi4vDixQv89ttvCAoKwtKl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T7PvSarjzpw5w82bN6lVqxb29vb4+fmxbt06Dh8+TLVq1QB48803OXToECdPnmTo0KHkyZOHUqVKUb16dfz9/bGxscHe3p7u3bszZ84cpk+fzsyZMylevDhly5alcePGeHl5WZx3xIgRacYyYMAA/P39s3Q+ERERERERERGRZy1HAsDUR2uTk5OfSn+BgYEAVK9eHYAaNWqwbt06AgMDjQDQxcWFr7/+mlOnTnHs2DHOnDnDgQMHCAkJITAwkCFDhgDQuHFjqlatysGDBzl9+jQnTpxg3bp1bN68mU8//dTiseL05gD09PTM1vlERERERERERESepRwJAAsWLAhAaGhomn1hYWEkJSXh7e2dpb6Sk5MJDg4GYPLkyUyePNnYd+DAAeLi4nBwcDC2lS1blrJlywIQERHBqFGjOHz4MBcvXjTOmSdPHho1akSjRo0wm82sWLGCFStWsGHDBosAMKM5ALNzPhERERERERERkWfFOidOmlqpt3v3bk6ePGlsj4qK4qeffmL48OEcP348S30dPXqUu3fvUqBAARo2bGj8KVq0KCaTif3795OcnMyoUaPo1asXV69eNY718PAgT548QEqQGBgYSP/+/Zk2bZrRxsrKihIlShhtsiKr5xMREREREREREXnWcqQCsGjRorRp04Y1a9bwz3/+k6JFi5I7d27Onz9PXFwcdevWpXz58sYiIAkJCRaVfakCAgKMx39bt25N48aNjX0HDx7ku+++IzAwkDp16lC2bFnOnj3LiBEjqFixIo6OjoSGhhIWFka+fPkoXrw4bm5uJCUlsXPnTsLDwylWrBgPHjzgyJEjAMbjxKmWLFmS5hFggPfffz9L5xMREREREREREXnWciQABHjnnXcoUqQImzdvJjw8nBs3bhhVfE2aNLFom5ycTFBQUJo+2rdvT0hICLa2ttSoUcNiX6VKlXB1deXIkSPcvXuXt99+Gw8PD37//XeOHz9OXFwcbm5u1KtXj44dO2Jra0vevHkZOXIkq1ev5uTJkwQGBmJra0uRIkVo3LgxDRs2tDjH0aNH07223r17Z+l8IiIiIiIiIiIiz5qVyWQy5/QgROTJhIeHZzoPpYiIiIiIiIj8teXIHIAiIiIiIiIiIiLyfCgAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUkRdKbGwsc+fOpXPnztSsWRNfX18qVqxIq1atmDBhAjExMTk9xCdy+vRpfHx8mDBhQqZtf/75Z3x8fDh48OBzGNmTqVatGm+//XaOnb9ChQq89957mbbbtGkTPj4+LFu2LMN2/fr1w8fHh8TExKc1xFfGzfs3ab+4PU7fOGH1lVWGf3L/MzddlnUhKi4qp4ctIiIiIvJCi4qK4sKFC4SGhhIbG/vMz2f7zM8gIpJFDx484J133uHUqVO0bNmSd955BxcXF27fvs3vv//OlClT2LFjB4sWLcLR0TGnh/tYt27dolatWvz222+UKFEi28dXqlSJHj16kD9//mcwOpHs6fO/Pqw6tSpLbe8n3Gfx8cXkss3FnHZznvHIREREREReTrdu3eLGjRvG6/v371O8eHFy5879zM6pAFBEXhhr167lxIkTDBo0iAEDBljse/fddxk3bhzTpk1j9erVdOnSJYdGmbmgoKA/dXzt2rWpXbv2UxqNyJ+z6fymbB+z4dyGZzASEREREZGXX1RUFDdu3MDa2hpvb29MJhPh4eFcunQJb29vnJycnsl59QiwiLwwbt26BaQ83pmegQMHEhQUlCb8W7VqFR06dKBChQqULVuWN954gx9//BGTyWS0OXr0KD4+PixevJgZM2bQoEEDypYtS5MmTVi9ejVxcXGMHj2aWrVqUaFCBTp37szJkyctzpOYmMi0adNo3rw5ZcuWpXLlynTp0oWtW7cabXr16sVHH30EQJMmTdI8Vmpra8vmzZtp3bo1ZcuWpVq1anz22Wfcv3/faPPoI8CpY1+yZAlLliyhRYsWlC1bljp16jBq1CgePHhgMc5ffvmFpk2bUrZsWRo0aMCMGTM4cOAAPj4+LFy4MMP3IDo6mjFjxtCoUSPKlStHlSpV6NSpE2vWrEnT1sbGhrNnzxIQEEDFihWpUKECAQEBXLhwwaLd9evXGTp0KLVr16Z06dJUrVqVXr16pXnEuWvXrlSpUiXNeX799Vd8fHz49ddfMxz7vHnzaNKkCWXKlKFu3bpMmDAh24/03r9/n6FDh+Ln50eZMmVo1aqVxfsLKffoX//6F/Xq1aN06dJUr16dbt26ERwcbNFu8uTJ+Pj4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AAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAF9oixcvzty5cz/vYQAAAHxpCYDAl8b06dNz6qmnZptttsk3v/nN9OrVK7vvvnuuvfba1NbWVtabPHlyunTpknHjxn2Oo/3yOvnkk/PjH/94petst912ufLKKz/TcSxatCg333xzfvzjH+fggw/OsGHD8sILL3ym+wQAAChRvVNOOeW0z3sQwCfz/vvvp3Xr1p/3MP4t/vKXv2TvvffOG2+8kf322y/7779/+vbtm9mzZ+fSSy/NCy+8kJ133jlVVVVp0KBBOnTokF69eqVZs2af99C/8I4//vjMmzcv3bt3T5I88MADmTVrVnbdddcVXqdt27bp2bNnVl999c9sXHfccUcef/zxHHPMMRk0aFAaN26cSy+9NGuuuWY6duz4me0XAACgNPU/7wEArMrChQszdOjQdOjQITfccEOaN29euWzgwIHZbLPNctJJJ+XPf/5z+vbtm5YtW2bQoEGf44i/XF544YX079//Y11n5513/oxG8/978MEHc+CBB6ZLly5Jkk033TQtW7bMJZdckkWLFqVv376f+RgAAABKYAow8IX3xz/+MdOnT89JJ51UJ/4ttccee+SZZ56pBKEPTwF+7LHH0qVLl/zlL3+pc53nnnsuXbp0yaOPPpokmThxYn74wx+mV69e2WijjXLEEUdk2rRplfWHDBmSwYMH55Zbbsl2222XHj16ZODAgctsd3lqamoyYsSIDBgwIH379s1OO+2UCy64IAsXLqys8+yzz+bggw9Ov3790r9//xx++OF5/vnnK5ffcsst2X777TNu3Ljss88+6d+/f/bZZ5+89NJLueuuu7L77rtnq622ytChQ/Puu+9Wrvfuu+/m1FNPzYABA9KvX78ceOCBdaZG9+7dO9OnT8/PfvazbLPNNpXl9erVy4MPPpjvf//72XzzzfMf//EfmTRpUuXyD08BXjq2pbfh1ltvnYEDB+aOO+6oczvceuut2XnnnbPFFlvksMMOy5QpU9K7d+/84Q9/WO7tNnfu3LRo0SJJMmbMmBx11FG56qqrsuuuu+aqq67KY489tsrbHgAAAAEQ+BIYN25cqqur06dPnxWus6Kpvn379k3btm1z33331Vl+zz33pG3bttliiy0yffr0DBo0KPXq1cuYMWMyevTovPvuu9l///2zYMGCJEn9+vUzbty4PPvss7nzzjvz9NNPp3Xr1jn++ONXOf6rr746d999d0455ZTcfPPNOfHEE3PfffflsssuS5K8+uqrOfLII9OuXbtcffXV+Z//+Z80bdo0RxxxRN58883K/mfNmpVbb701V1xxRe65554sXLgwxx13XMaNG5frr78+t9xySyZNmpTrrrsuyZL30BsyZEgmTJiQ0047Ldddd13WX3/9DB06NC+//HKS5Pe//32S5LjjjqsT7GbMmJHf/va3OfXUU3PppZemqqoqp5566nKPb+nYrrzyygwfPjwPPfRQBgwYkLPPPjtvvfVWkuT555/Pz3/+82y99dYZM2ZMBg4cmBNPPDFJUlVVtdztbrjhhrn33nuTJPfff3+OO+64fO9738vvfve77L777vnNb36Thx9+eJW3PwAAwFedAAh84b311ltZc801U79+3XctmDt3bmbPnl35mjdv3jLXrVevXr773e8uEwDHjh2bnXbaKfXq1cvo0aNTVVWVESNGpHv37unRo0cuuOCCvPbaa7nnnnvq7O/kk09O06ZN07hx4+y222555ZVXVvkJtS+//HK6du2azTffPB07dkz//v1z6aWXZpdddkmy5Ay6pk2b5vTTT883vvGNfOMb38iZZ56Zmpqa3HXXXZXt1NTU5IADDkjz5s3TvHnz9OvXL9OmTcvRRx+dxo0bp127dundu3cmT56cJHnyySfz4osv5uSTT863vvWtfP3rX8+xxx6btdZaKzfccEOSpGXLlkmSpk2bVr5PkpkzZ+bMM89Mz54907Nnz+yzzz6ZMmVKZs2atdxjrKmpyYEHHpj27dunqqoqu+66a2pqavLSSy8lSe666660adMmP/nJT9K5c+cMGDAg22677UpvtwMOOCAvvPBCJVyOHTs23/3ud7PHHnvktttuy5577pnRo0fngQceWOl2AAAAvuoEQOALr7q6us502aW23nrrbLTRRpWvgw46aLnXHzBgQKZMmVKJUc8//3ymTp2agQMHJlky/XajjTaqTDdNkrXXXjvrrLNOnWmvnTp1SuPGjSs/Lw1m77333krHv9VWW+Xpp5/OCSeckPvvvz/vv/9+OnfunE6dOiVZ8h586623Xp3A2bRp03Tq1Kky5g+PYalmzZqlZcuWdT4IplmzZpVIN3HixDRo0CC9evWqXF5dXZ1NNtmkEglXpFOnTmnVqlXl5zZt2iRJ5syZs8LrfOMb36h8v/S2/OCDD5IkU6ZMyUYbbZR69epV1vn2t7+90jG0atUqJ598cp588sm0aNEic+bMyfnnn5/tt98+e+65Z26++ebstddemTp16kq3AwAA8FXnQ0CAL7y11lorb7/9dubNm1cnwF1xxRWVMHjJJZes8Ey8b33rW1ljjTVy7733plu3brnnnnvSoUOHbLrppkmSWbNm5fnnn883v/nNOtdbsGBBZQprkjr7/rDFixevdPw77bRTmjVrlptvvjmnnnpqamtrs/XWW+e///u/06ZNm8yePXu5n6bbrFmzzJ49u86yBg0a1Pm5YcOGK9zv7Nmzs3DhwmyxxRZ1ltfW1qZt27YrHXOTJk3q/Lx0mu7KjrVRo0bLLFu6/nvvvZc11lijzmUfPuNwRdq3b5+TTz45Z555Znr06JHXX3895513Xo455phUVVXlxhtv/EjTsAEAAL7KBEDgC2/zzTfP5ZdfnjvvvDN77bVXZfnGG29c+b5t27Z5/fXXl3v96urq7LTTTrnvvvsyZMiQjB07tjL9NkmaN2+e3r1756yzzlrmuit6b8GPa+utt87WW2+duXPn5rHHHsv555+fM844IxdeeGFWW2215U6tnTVr1nLD4Ee12mqrpWHDhhkzZswyl1VX/3tPAG/YsOEyU7Tff//9j3Tdf46A06ZNy3nnnVcJf7/4xS9y0kkn5etf//qnPm4AAIASmAIMfOFtueWW6datWy666KI6Z+QtNWfOnMqHWqzIgAEDMmnSpDzxxBP529/+Vpn+mywJiVOmTMk666yTLl26VL6qq6vTrl27f3n8Dz30UKZPn55kyZl1O+ywQ3bbbbfKmNdff/288MILdaY5f/DBB5kyZUo22GCDT7zfDTbYIAsWLEhtbW06d+5c+WrUqNEyx7Wqsxj/VUunU394Pw8++OBHvv7SCPi///u/6dixYzbaaKNUV1dnxx13zIABA/KrX/3qsxg2AABAEQRA4Auvuro6I0eOzIIFCzJgwICMGjUqDzzwQO69996cf/752XbbbfPqq69myJAhK9zGpptumrXXXjtnnXVWunfvnu7du1cu+8EPfpA5c+Zk2LBhmTRpUqZMmZJRo0Zlxx13zHPPPfcvj//666/PCSeckPHjx2fatGkZN25c7r///sp78+21116ZN29eTj/99Lz66qt5+eWXc9JJJ2W11VbLzjvv/In326dPn3Tv3j2nnHJKnnnmmUyfPj1jx47ND37wg9x8881JlkzbbdSoUcaPH5/JkyenpqbmXz7e5dl+++0zY8aMXHrppZk2bVrGjh2bRx555GNtY2kEnDBhQv7xj39UpiV/97vfzbRp01b4ASUAAABfdaYAA18K3bp1y+9///tcdtllue222/LLX/4yDRs2TMeOHbPvvvvmhz/8YZ0PrfhnVVVV+d73vperrroqxx13XJ3LOnTokNGjR2f48OHZa6+9Ur9+/XTr1i2XX355Ntlkk3957GeffXYuuOCCDBs2rDKtt3///hk8eHCSpGPHjvnlL3+Ziy++OPvuu2/q1auXnj175rLLLqvzAR8fV7169XLxxRdnxIgRGTZsWObOnZu11147Bx98cAYNGlRZ78ADD8xvfvObPProo7n99tv/5eNdnq222ipHHHFEbrjhhowZMya9evXKiSeemEGDBi33vQNXpH379jnllFNyxhlnZP78+dl9993z7LPPplmzZp/adG0AAIDSVC1YsOCznfcFfGamTp2adddd9/MeBqzS4sWLM3PmzDrvafiXv/wlhxxySG688cZ06dLlY23vnXfeyWWXXZZJkyZltdVWy+GHH/6pxFoAAIASCYDwJSYA8mXxzDPP5LDDDsvhhx+e73znO3n33Xdz3nnnpbq6OldffXVlOu/HNX/+/DRs2PATXx8AAOCrQACELzEBkC+Tu+++O9dee22mTp2a5s2bp1evXjn66KM/lQ9aAQAAYMUEQPgSEwAp2TPPPJNevXp97P8CAABQlwAIX2ICIAAAALAq1Z/3AAAAAACAz44ACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMHqf94DAAAA4PMzfPjwTJgwIUmyePHiJElVVVWSZLfddsuee+75sbf5+OOPp1evXmncuPGnN1AAPjEBEAAA4Cts2LBhle8vuOCCdOrUKXvssce/tM2bbropG2ywgQAI8AUhAAIAALBcCxcuzPXXX59nn302NTU1WX/99fOjH/0oDRs2zOTJk3PNNddk7ty5Wbx4cbbYYovstddeueCCC/LOO+/k9NNPzwEHHJCePXt+3ocB8JXnPQABAABYrjvvvDOvvvpqzj777IwcOTKLFi3KDTfckCS57rrrstNOO+WCCy7I2WefnTfeeCNvv/12hgwZkiQ59dRTxT+ALwgBEAAAgOV69NFHs/3226dRo0apqqrKjjvumCeffDJJ0rp16zz55JP529/+lkaNGmXo0KFZY401PucRA7A8pgADAACwXLNnz861115bOetv8eLFWbhwYWpra3PYYYfl7rvvzq9+9au8//772W677T7RB4YA8NkTAAEAAFiuNm3aZJ999lnuVN5mzZpl7733zt57751p06Zl+PDh6dy5s2m/AF9ApgADAACwXH369Ml9992XhQsXJkkef/zx3HbbbampqcnJJ5+cadOmJUnatWuXZs2aJUmqq5e8zJw9e/bnM2gAluEMQAAAAJZrl112yfXXX59hw4YlSVZfffUcdNBBqV+/fnbeeeeMGDEiCxYsSFVVVXr37p3evXunqqoqm222WU455ZQMGjQo22233ed8FABULViwYPHnPQjgk5k6dWrWXXfdz3sYAAAAwBeYKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwep/3gOAr5oZM2Zk8eLFadeuXerVq5fa2tq89dZbqa6uTvv27Ze7DgAAAMAn5QxA+DdbtGhRFi9enEWLFtX5uba2doXrAAAAAHxSAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFCw+p/3AOCrpkmTJkmS+vXrV/7bpEmTVFVVrXAdAAAAgE9KXYB/s9atW9f5uaqqapll//wzAAAAwCdlCjAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABQ9P+eYAAAgAElEQVRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrP7nPQAAAPgsPPfajPQ6+ZdZnOR7G38jdx1zQJJkQU1tzrnzkYx54rlMeefdNGvUMD07rZUTdtk622/YJUly5UPjcsOfJuT+E370mY/zlVdeyQknnJCbbrqpzvLnn38+55xzTq699tqcffbZee6555IkixYtSpJUVy/5t/zvf//76dWrV0444YTstNNOOfDAA+ts55FHHsmoUaMyePDgbLXVVvnd736X8ePH57TTTvtI4xs2bFjmzZuXESNGVPb5aZs4cWJGjRqVTTfdNIceeugK1/vjH/+YO+64I7Nmzco666yTww8/PGuuueYy69XW1uY3v/lNnnrqqSxatCg9evTIYYcdloYNG650HEvvi/r1l7xMat68eTp06JDvfOc72XzzzT/Ssbz44otp2rRp1llnnY+0/pfFv3JcRx55ZI466qhssMEGdZZfdNFF6dChQ/bYY49/eXx7jByTO555IbWLF+fp049I7693SJJc/6cJGXnvE/nfqW+muqoqXdq3yaHf/laO3H6zJMnLb87MeseNSM01Z/zLY/ioxo4dm2uvvTZHHnlk+vXrt8L1br/99tx7772ZN29eOnbsmIMOOijrrrvuctf9qI+hJLnvvvty55135oMPPsjaa6+dAw88MN26dVtme6effnp++tOfVu63l156Kb/+9a/z1ltvpVWrVtlvv/2y6aabrvJ4zzzzzDz//POpqqqqLPvJT36Srl275sgjj6yz7uLFi9OjR4+ceOKJmT9/fq677ro8/fTTmT9/fvr165eDDjoo9erVq3Odm266Kbfccssyz6Gftv333z81NTWpqqpK48aN0759+2y++eYZMGBA5Tnj07Ki+3PhwoW55ppr8tRTT2XhwoVZb731cuihh6ZVq1ar3ObK7veVPbdOmjQp11xzTWbMmJHmzZtnjz32yDbbbJMkeeaZZ3L99dfnnXfeSatWrbLnnnumf//+qxzL4sWLc/311+eBBx5ITU1N+vTpk0MOOSQNGjRYZt2V7X/ixIm57rrrMmPGjLRt2zaHHHJI1ltvveXuc2WPp4/6t2WpFf1dPOecc/Lcc8/lsssuS4sWLepcZ+jQoVm8eHEuvvjiVd4+nxUBEACAIm28zpqpueaMnHn7Q/nzK69Vln9/5OhMnflerjh4t/Tq3CHza2ry26efz24jrsvdxx6Qrdf7egZtsXH2+NYGK9n6v9cJJ5xQ+X748OHp3Llz9t5778qyV155Ja1atcoTTzyR/fbbr86L0YcffjitW7f+RPudPHlyWrVqlcaNG2f8+PHp3bv3Jz+IFXj44Yfzhz/8YYUv2pb661//mtGjR+enP/1pvva1r+WWW27JyJEjc/bZZy+z7tixY/PSSy/lvPPOS4MGDXLeeeflpptuyn777feRxjRmzJgkyXvvvZenn346l19+ed55553svPPOq7zuH//4x/Ts2bO4APhFP67fHv2DJEn9A06pLDv37kfzi7seycUH7JLv9OiaZo0a5tHJU3LYr+/IzFlzcspu387X12idaRcf/28b56WXXppFixZlrbXWWul6f/rTn3L//ffnjDPOSJs2bXLrrbfmwgsvXG48+KiPoSSZMGFCbrzxxvzsZz9Lhw4dcscdd+TCCy/Mr371q8o68+bNy1VXXVUnKi1YsCDnnXde9ttvv2y55ZaZMGFCLrzwwowcOTItW7Zc6T7nzJmTY445ZrnPH0sfa0v94he/SN++fZMkN998c15//fVccMEFqa2tzVlnnZU777wzu+22W2X9KVOm5PHHH1/lcX9aTj755GywwQaZO3duJk+enGuuuSYvvvhijj/+0/sdWtn9ecstt+TVV1/N+eefnwYNGmTkyJG57rrrMnjw4JVuc2X3+8qeWz/44IP84he/yOGHH56+fftm0qRJOfPMM9O9e/c0bNgwI0eOzLBhw7Lhhhtm4sSJ+fnPf55u3bqlXbt2Kx3P2LFjM3HixFxwwQWpX79+Ro0aleeee26Z35GV7b9JkyY599xzM2TIkPTq1SuPPvpozj333Pzyl79M48aN62xnZY+nj/O3JVn138WWLVvm0UcfzYABAyrLXnzxxcyfP3+V/wj1WRMAAQD4yvjj86/k/omv5OXzf5KObZa8aG3aqEEO3qZ3duzxjazVqnmSZPQTz+WGP03IsQO2zI+u+G1ev+j4VP+/s1dOueX+TJr2Vn579A/y2ORXc8yYe/Lu7LmpV12VkfvvnO/06Jq/vf1uNj35lzlrrx0ydsL/5eU3Z2aHDbtm5P4DVji2f1WTJk3SunXrjB8/Pn369EmSzJw5M1OnTv3E0eb+++9P//79s9pqq+W+++6r80JnxIgRadGiRd5+++3MmjUrixYtylFHHZW11157pZf9s06dOuW0007LjTfemNmzZ69wLE888UT69u2bTp06JVly5uPvfve7vPHGG8vElMceeywDBw7MaqutliTZY489cuGFF37kALhUy5Yts/3226dFixa56KKL8u1vfzvNmjXLuHHjcsMNN2TOnDlp0KBBBg0alD59+uS2227LE088kQkTJmTatGnZe++9c+utt+ahhx7KwoUL07Zt2xx++OHp2LHjMvt6+eWXc9lll2XevHnp2rVrGjVqlJYtW2bffffNwoULM3r06IwfPz41NTXZYIMNcsghh6Rhw4YZNWpUWrVqlZkzZ+Yf//hH3n///QwZMiSdO3eu3Id33XVXampq0qZNmwwePDjt2rXLAw88kHHjxqWmpia1tbU55ZRTPtZxrWi7S/d52223pWHDhunbt2+dM7/+2XvvvZef/exnmTp1alZfffUMHjw4rVu3zqGHHppzzjknX/va15IseQE9fPjwXH755R/pbKv3587Pabc+kN8ctkf27LNhZfkOG3bNn087PE0bLjnT6G9vv5v1jhuRmZeelPZHnZ2/nDU431x7jSRLni9+cMlNmXbR8Znx3gc56uo788L0t7OwtjZHbr9ZjhuwZZKk03+em2O+1z8PTPprpr37flo2aZRb/3NQWjRptMy4dthhh3Tp0iUnnnjiSsffvn37DB06NKuvvnqSpF+/frnppptSU1OzzPF/1MdQkrRo0SJHH3105Xewf//+GTNmTObNm1eJJtddd1369euXJ598snK9iRMnpmnTptlqq62SJBtvvHG6dOmSp59+Ottvv/0Kf3eSZPbs2WnatOlKx5UsiTRz5syp7GP8+PHZZ599KtcdOHBgbr311koArKmpySWXXJL99tsv55577gq3++abb+bKK6/Mm2++merq6vTu3Tv77LNP6tevnyOPPDI777xzJk6cmL///e9p2rRpjj322FWOt0mTJunZs2c6duyYn/zkJ3n22WfTs2fPzJw5M1dddVVef/311NbWZscdd8zAgQOTJDNmzMhll12W1157LS1atMi+++5buY0+bGX35ze/+c3069ev8ty22Wab5Z577lnlbbuy+31lz61NmjTJj3/840qUXX/99dOmTZu88cYb6dy5cwYPHpwNN1zy+Npwww3TvHnzzJgxY5UB8A9/+EN++MMfVs6SGzZsWOWyq666KrNnz87QoUNTW1u7wv0vWLAg7dq1q/xd2mqrrXLbbbdlwoQJ6dOnT53trOzx9HH+tiQr/7uYJJtuumkefPDBOgHw4Ycf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", + argumentInfo: { + argumentName: "base64image", + formattedValue: "base64 data: iVBORw0KGg..." + } + } + ], + status: "PASSED", + durationInNanos: 493804, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 4516432, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 152463992, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 320519894, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "an element with a $ class exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "an element with a" + }, + { + value: "jgiven-html-thumbnail", + argumentInfo: { + argumentName: "multiline", + formattedValue: "jgiven-html-thumbnail" + } + }, + { + value: "class exists" + } + ], + status: "PASSED", + durationInNanos: 15772713, + depth: 0, + parentFailed: false + }, + { + name: "the image is loaded", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the image is loaded" + } + ], + status: "PASSED", + durationInNanos: 14447903, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 834530674 + } + ], + casesAsTable: false, + durationInNanos: 834530674, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#274", + description: "Scenarios of Issue #274" + } + ], + classTitle: "HTML App" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5AppTest", + testMethodName: "steps_can_have_multiple_attachments", + description: "steps can have multiple attachments", + tagIds: [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 235801, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has a text attachment with content", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has a text attachment with content" + }, + { + value: "Some Example Attachment\nwith some example content", + argumentInfo: { + argumentName: "content", + formattedValue: "Some Example Attachment\nwith some example content" + } + } + ], + status: "PASSED", + durationInNanos: 347903, + depth: 0, + parentFailed: false + }, + { + name: "step $ of scenario $ has another text attachment with content", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "has another text attachment with content" + }, + { + value: "Another Example Attachment\nwith some example content", + argumentInfo: { + argumentName: "content", + formattedValue: "Another Example Attachment\nwith some example content" + } + } + ], + status: "PASSED", + durationInNanos: 407903, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2174316, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 49078352, + depth: 0, + parentFailed: false + }, + { + name: "the page of scenario $ is opened", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the page of scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "scenarioNr", + formattedValue: "1" + } + }, + { + value: "is opened" + } + ], + status: "PASSED", + durationInNanos: 304784681, + attachments: [ + { + title: "Screenshot", + value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment24.png", + mediaType: "image/png", + binary: true + } + ], + depth: 0, + parentFailed: false + }, + { + name: "$ attachment icons exist", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "2", + argumentInfo: { + argumentName: "nrIcons", + formattedValue: "2" + } + }, + { + value: "attachment icons exist" + } + ], + status: "PASSED", + durationInNanos: 13188994, + depth: 0, + parentFailed: false + }, + { + name: "the content of the attachment referenced by icon $ is", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the content of the attachment referenced by icon" + }, + { + value: "1", + argumentInfo: { + argumentName: "iconNr", + formattedValue: "1" + } + }, + { + value: "is" + }, + { + value: "Some Example Attachment\nwith some example content", + argumentInfo: { + argumentName: "content", + formattedValue: "Some Example Attachment\nwith some example content" + } + } + ], + status: "PASSED", + durationInNanos: 38565476, + depth: 0, + parentFailed: false + }, + { + name: "the content of the attachment referenced by icon $ is", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the content of the attachment referenced by icon" + }, + { + value: "2", + argumentInfo: { + argumentName: "iconNr", + formattedValue: "2" + } + }, + { + value: "is" + }, + { + value: "Another Example Attachment\nwith some example content", + argumentInfo: { + argumentName: "content", + formattedValue: "Another Example Attachment\nwith some example content" + } + } + ], + status: "PASSED", + durationInNanos: 36456861, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 607583749 + } + ], + casesAsTable: false, + durationInNanos: 607583749, + executionStatus: "SUCCESS", + tags: [{}, {}, {}], + classTitle: "HTML App", + expanded: false, + $$hashKey: "object:613" } - ], - "explicitArguments": [ - "true", - "0" - ], - "derivedArguments": [ - "true", - "0" - ], - "status": "SUCCESS", - "durationInNanos": 62639251 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "false", - "1" - ], - "derivedArguments": [ - "false", - "1" - ], - "status": "SUCCESS", - "durationInNanos": 19401140 - } - ], - "casesAsTable": true, - "durationInNanos": 82040391, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Report Generator" + ] }, { - "className": "com.tngtech.jgiven.report.ReportGeneratorTest", - "testMethodName": "empty_report_files_are_excluded_when_the_exclude_empty_scenarios_option_is_set", - "description": "empty report files are excluded when the exclude empty scenarios option is set", - "tagIds": [], - "explicitParameters": [ - "excludeEmptyScenarios", - "expectedReports" - ], - "derivedParameters": [ - "excludeEmptyScenarios", - "expectedReports" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with name", - "words": [ - { - "value": "given", - "isIntroWord": true - }, - { - "value": "a report model with name" - }, - { - "value": "non empty report model", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "non empty report model" - } - } - ], - "status": "PASSED", - "durationInNanos": 843506, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report has $ scenarios", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "scenarios" - } - ], - "status": "PASSED", - "durationInNanos": 2889021, - "depth": 0, - "parentFailed": false - }, - { - "name": "a report model with name", - "words": [ - { - "value": "given", - "isIntroWord": true - }, - { - "value": "a report model with name" - }, - { - "value": "empty report model", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "empty report model" - } - } - ], - "status": "PASSED", - "durationInNanos": 2228416, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report has $ scenarios", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report has" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "1" - } - }, - { - "value": "scenarios" - } - ], - "status": "PASSED", - "durationInNanos": 487604, - "depth": 0, - "parentFailed": false - }, - { - "name": "scenario $ has no steps", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has no steps" - } - ], - "status": "PASSED", - "durationInNanos": 377303, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 3361524, - "depth": 0, - "parentFailed": false - }, - { - "name": "the exclude empty scenarios option is set to", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the exclude empty scenarios option is set to" - }, - { - "value": "true", - "argumentInfo": { - "parameterName": "excludeEmptyScenarios", - "argumentName": "excludeEmptyScenarios", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 206701, - "depth": 0, - "parentFailed": false - }, - { - "name": "reading the report model", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "reading the report model" - } - ], - "status": "PASSED", - "durationInNanos": 4373531, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report model contains $ reports", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report model contains" - }, - { - "value": "1", - "argumentInfo": { - "parameterName": "expectedReports", - "argumentName": "nReports", - "formattedValue": "1" - } - }, - { - "value": "reports" - } - ], - "status": "PASSED", - "durationInNanos": 376102, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "true", - "1" - ], - "derivedArguments": [ - "true", - "1" - ], - "status": "SUCCESS", - "durationInNanos": 18750835 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "false", - "2" - ], - "derivedArguments": [ - "false", - "2" - ], - "status": "SUCCESS", - "durationInNanos": 10725677 - } - ], - "casesAsTable": true, - "durationInNanos": 29476512, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Report Generator" - } - ] - }, - { - "className": "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", - "name": "Lambda Generating Step", - "scenarios": [ - { - "className": "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", - "testMethodName": "lambda_steps_work", - "description": "lambda steps work", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "some lambda step", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "some lambda step" - }, - { - "value": "5", - "argumentInfo": { - "argumentName": "a", - "formattedValue": "5" - } - }, - { - "value": "4", - "argumentInfo": { - "argumentName": "b", - "formattedValue": "4" - } - } - ], - "status": "PASSED", - "durationInNanos": 873706, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 1258209 - } - ], - "casesAsTable": false, - "durationInNanos": 1258209, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Lambda Generating Step" - } - ] - }, - { - "className": "com.tngtech.jgiven.tests.TestClassWithDescription", - "name": "Test Class With Description", - "description": "Test Description", - "scenarios": [ - { - "className": "com.tngtech.jgiven.tests.TestClassWithDescription", - "testMethodName": "some_test", - "description": "some test", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "nothing", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "nothing" - } - ], - "status": "PASSED", - "durationInNanos": 22801, - "depth": 0, - "parentFailed": false - }, - { - "name": "something happens", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "something happens" - } - ], - "status": "PASSED", - "durationInNanos": 33200, - "depth": 0, - "parentFailed": false - }, - { - "name": "something happened", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "something happened" - } - ], - "status": "PASSED", - "durationInNanos": 16400, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 408103 - } - ], - "casesAsTable": false, - "durationInNanos": 408103, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Test Class With Description" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "name": "HTML App", - "description": "Tests against the generated HTML5 App using WebDriver", - "scenarios": [ - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "the_statistics_on_the_welcome_page_of_the_HTML5_report_is_correct", - "description": "the statistics on the welcome page of the HTML5 report is correct", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 281402, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report has $ scenarios", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report has" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "3" - } - }, - { - "value": "scenarios" - } - ], - "status": "PASSED", - "durationInNanos": 480203, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of case $ has status", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "has status" - }, - { - "value": "FAILED", - "argumentInfo": { - "argumentName": "status", - "formattedValue": "FAILED" - } - } - ], - "status": "PASSED", - "durationInNanos": 424003, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2636719, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 123612487, - "depth": 0, - "parentFailed": false - }, - { - "name": "the index page is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the index page is opened" - } - ], - "status": "PASSED", - "durationInNanos": 449212023, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment27.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the page statistics line contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the page statistics line contains text" - }, - { - "value": "3 Total", - "argumentInfo": { - "argumentName": "text", - "formattedValue": "3 Total" - } - } - ], - "status": "PASSED", - "durationInNanos": 58590120, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page statistics line contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the page statistics line contains text" - }, - { - "value": "2 Successful", - "argumentInfo": { - "argumentName": "text", - "formattedValue": "2 Successful" - } - } - ], - "status": "PASSED", - "durationInNanos": 29216609, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page statistics line contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the page statistics line contains text" - }, - { - "value": "1 Failed", - "argumentInfo": { - "argumentName": "text", - "formattedValue": "1 Failed" - } - } - ], - "status": "PASSED", - "durationInNanos": 26861492, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page statistics line contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the page statistics line contains text" - }, - { - "value": "0 Pending", - "argumentInfo": { - "argumentName": "text", - "formattedValue": "0 Pending" - } - } - ], - "status": "PASSED", - "durationInNanos": 47881043, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 950393019 - } - ], - "casesAsTable": false, - "durationInNanos": 950393019, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {} - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "extended_description_should_handle_every_case_correctly", - "description": "extended description should handle every case correctly", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#236" - ], - "explicitParameters": [ - "description", - "value", - "parameterNames", - "parameterValues", - "expectedValue" - ], - "derivedParameters": [ - "value", - "argumentMap", - "expectedValue" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 316302, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "$1", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "$1" - } - }, - { - "value": "{a=1, b=2}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{a=1, b=2}" - } - } - ], - "status": "PASSED", - "durationInNanos": 585104, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 4645033, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 61152438, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 317361077, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 767152104, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment6.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 22650262, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "1", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "1" - } - } - ], - "status": "PASSED", - "durationInNanos": 46105331, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholder with index", - "$1", - "[a, b]", - "[1, 2]", - "1" - ], - "derivedArguments": [ - "$1", - "{a=1, b=2}", - "1" - ], - "status": "SUCCESS", - "durationInNanos": 1372439046, - "description": "Placeholder with index" - }, - { - "caseNr": 2, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 236302, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "$", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "$" - } - }, - { - "value": "{a=1, b=2}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{a=1, b=2}" - } - } - ], - "status": "PASSED", - "durationInNanos": 460203, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2466618, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 51597870, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 304909188, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 689726248, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment7.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 20214045, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "1", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "1" - } - } - ], - "status": "PASSED", - "durationInNanos": 22485061, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholder without index", - "$", - "[a, b]", - "[1, 2]", - "1" - ], - "derivedArguments": [ - "$", - "{a=1, b=2}", - "1" - ], - "status": "SUCCESS", - "durationInNanos": 1276945562, - "description": "Placeholder without index" - }, - { - "caseNr": 3, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 161701, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "$$", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "$$" - } - }, - { - "value": "{a=1, b=2}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{a=1, b=2}" - } - } - ], - "status": "PASSED", - "durationInNanos": 1202809, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2317717, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 58046417, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 326809645, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 673276331, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment8.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 13930000, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "$", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "$" - } - } - ], - "status": "PASSED", - "durationInNanos": 15273210, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Escaped placeholder", - "$$", - "[a, b]", - "[1, 2]", - "$" - ], - "derivedArguments": [ - "$$", - "{a=1, b=2}", - "$" - ], - "status": "SUCCESS", - "durationInNanos": 1246449143, - "description": "Escaped placeholder" - }, - { - "caseNr": 4, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 182901, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "$2 + $1", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "$2 + $1" - } - }, - { - "value": "{a=1, b=2}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{a=1, b=2}" - } - } - ], - "status": "PASSED", - "durationInNanos": 316503, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2839020, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 51293968, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 299313848, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 675541547, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment9.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 20374246, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "2 + 1", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "2 + 1" - } - } - ], - "status": "PASSED", - "durationInNanos": 16192616, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Multiple placeholders with switch order", - "$2 + $1", - "[a, b]", - "[1, 2]", - "2 + 1" - ], - "derivedArguments": [ - "$2 + $1", - "{a=1, b=2}", - "2 + 1" - ], - "status": "SUCCESS", - "durationInNanos": 1214738015, - "description": "Multiple placeholders with switch order" - }, - { - "caseNr": 5, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 424904, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "a = $1 and b = $2", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "a = $1 and b = $2" - } - }, - { - "value": "{a=1, b=2}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{a=1, b=2}" - } - } - ], - "status": "PASSED", - "durationInNanos": 332302, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2311316, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 60748735, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 298025938, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 670729512, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment10.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 12422390, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "a = 1 and b = 2", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "a = 1 and b = 2" - } - } - ], - "status": "PASSED", - "durationInNanos": 17558626, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholders with additional text", - "a = $1 and b = $2", - "[a, b]", - "[1, 2]", - "a = 1 and b = 2" - ], - "derivedArguments": [ - "a = $1 and b = $2", - "{a=1, b=2}", - "a = 1 and b = 2" - ], - "status": "SUCCESS", - "durationInNanos": 1210780487, - "description": "Placeholders with additional text" - }, - { - "caseNr": 6, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 209902, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "int = $int and str = $str and bool = $bool", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "int = $int and str = $str and bool = $bool" - } - }, - { - "value": "{int=1, str=some string, bool=true}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{int=1, str=some string, bool=true}" - } - } - ], - "status": "PASSED", - "durationInNanos": 335702, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 4431232, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 55630399, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 305683493, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 675913309, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment11.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 13307887, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "int = 1 and str = some string and bool = true", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "int = 1 and str = some string and bool = true" - } - } - ], - "status": "PASSED", - "durationInNanos": 15552702, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholders references by argument names in order", - "int = $int and str = $str and bool = $bool", - "[int, str, bool]", - "[1, some string, true]", - "int = 1 and str = some string and bool = true" - ], - "derivedArguments": [ - "int = $int and str = $str and bool = $bool", - "{int=1, str=some string, bool=true}", - "int = 1 and str = some string and bool = true" - ], - "status": "SUCCESS", - "durationInNanos": 1239772143, - "description": "Placeholders references by argument names in order" - }, - { - "caseNr": 7, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 165201, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "str = $str and int = $int and bool = $bool", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "str = $str and int = $int and bool = $bool" - } - }, - { - "value": "{int=1, str=some string, bool=true}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{int=1, str=some string, bool=true}" - } - } - ], - "status": "PASSED", - "durationInNanos": 321902, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2998819, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 45726401, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 305293513, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 665369488, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment12.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 13382888, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "str = some string and int = 1 and bool = true", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "str = some string and int = 1 and bool = true" - } - } - ], - "status": "PASSED", - "durationInNanos": 15024299, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholders references by argument names in mixed order", - "str = $str and int = $int and bool = $bool", - "[int, str, bool]", - "[1, some string, true]", - "str = some string and int = 1 and bool = true" - ], - "derivedArguments": [ - "str = $str and int = $int and bool = $bool", - "{int=1, str=some string, bool=true}", - "str = some string and int = 1 and bool = true" - ], - "status": "SUCCESS", - "durationInNanos": 1199404609, - "description": "Placeholders references by argument names in mixed order" - }, - { - "caseNr": 8, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 198301, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "str = $str and int = $1 and bool = $bool", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "str = $str and int = $1 and bool = $bool" - } - }, - { - "value": "{int=1, str=some string, bool=true}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{int=1, str=some string, bool=true}" - } - } - ], - "status": "PASSED", - "durationInNanos": 426403, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2485617, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 42869483, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 308050531, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 681006890, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment13.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 15642303, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "str = some string and int = 1 and bool = true", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "str = some string and int = 1 and bool = true" - } - } - ], - "status": "PASSED", - "durationInNanos": 15591102, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholders references by argument names and enumeration", - "str = $str and int = $1 and bool = $bool", - "[int, str, bool]", - "[1, some string, true]", - "str = some string and int = 1 and bool = true" - ], - "derivedArguments": [ - "str = $str and int = $1 and bool = $bool", - "{int=1, str=some string, bool=true}", - "str = some string and int = 1 and bool = true" - ], - "status": "SUCCESS", - "durationInNanos": 1215565216, - "description": "Placeholders references by argument names and enumeration" - }, - { - "caseNr": 9, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 431703, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "bool = $3 and str = $2 and int = $int", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "bool = $3 and str = $2 and int = $int" - } - }, - { - "value": "{int=1, str=some string, bool=true}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{int=1, str=some string, bool=true}" - } - } - ], - "status": "PASSED", - "durationInNanos": 402503, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2770619, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 51377239, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 305378814, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 675967358, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment14.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 17210813, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "bool = true and str = some string and int = 1", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "bool = true and str = some string and int = 1" - } - } - ], - "status": "PASSED", - "durationInNanos": 16482208, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholders references by argument names and enumerations ", - "bool = $3 and str = $2 and int = $int", - "[int, str, bool]", - "[1, some string, true]", - "bool = true and str = some string and int = 1" - ], - "derivedArguments": [ - "bool = $3 and str = $2 and int = $int", - "{int=1, str=some string, bool=true}", - "bool = true and str = some string and int = 1" - ], - "status": "SUCCESS", - "durationInNanos": 1218626936, - "description": "Placeholders references by argument names and enumerations " - }, - { - "caseNr": 10, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 178601, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "bool = $bool and int = $ and str = $", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "bool = $bool and int = $ and str = $" - } - }, - { - "value": "{int=1, str=some string, bool=true}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{int=1, str=some string, bool=true}" - } - } - ], - "status": "PASSED", - "durationInNanos": 284001, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 4179927, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 46778508, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 314210972, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 677886570, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment15.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 13622490, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "bool = true and int = 1 and str = some string", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "bool = true and int = 1 and str = some string" - } - } - ], - "status": "PASSED", - "durationInNanos": 18965425, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholder without index mixed with names", - "bool = $bool and int = $ and str = $", - "[int, str, bool]", - "[1, some string, true]", - "bool = true and int = 1 and str = some string" - ], - "derivedArguments": [ - "bool = $bool and int = $ and str = $", - "{int=1, str=some string, bool=true}", - "bool = true and int = 1 and str = some string" - ], - "status": "SUCCESS", - "durationInNanos": 1228791003, - "description": "Placeholder without index mixed with names" - }, - { - "caseNr": 11, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 188601, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "bool = $bool and str = $2 and int = $ and str = $ and bool = $3" - } - }, - { - "value": "{int=1, str=some string, bool=true}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{int=1, str=some string, bool=true}" - } - } - ], - "status": "PASSED", - "durationInNanos": 355003, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2395016, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 48410520, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 311125651, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 686336981, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment16.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 14212602, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "bool = true and str = some string and int = 1 and str = some string and bool = true", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "bool = true and str = some string and int = 1 and str = some string and bool = true" - } - } - ], - "status": "PASSED", - "durationInNanos": 17461625, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholder without index mixed with names and index", - "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", - "[int, str, bool]", - "[1, some string, true]", - "bool = true and str = some string and int = 1 and str = some string and bool = true" - ], - "derivedArguments": [ - "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", - "{int=1, str=some string, bool=true}", - "bool = true and str = some string and int = 1 and str = some string and bool = true" - ], - "status": "SUCCESS", - "durationInNanos": 1241979954, - "description": "Placeholder without index mixed with names and index" - }, - { - "caseNr": 12, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 246002, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "bool = $bool and not known = $unknown and unknown = $10", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "bool = $bool and not known = $unknown and unknown = $10" - } - }, - { - "value": "{int=1, str=some string, bool=true}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{int=1, str=some string, bool=true}" - } - } - ], - "status": "PASSED", - "durationInNanos": 365503, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 1920713, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 48820750, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 315670462, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 669488097, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment17.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 12621691, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "bool = true and not known = 1 and unknown = some string", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "bool = true and not known = 1 and unknown = some string" - } - } - ], - "status": "PASSED", - "durationInNanos": 15478511, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Placeholder with unknown argument names get erased", - "bool = $bool and not known = $unknown and unknown = $10", - "[int, str, bool]", - "[1, some string, true]", - "bool = true and not known = 1 and unknown = some string" - ], - "derivedArguments": [ - "bool = $bool and not known = $unknown and unknown = $10", - "{int=1, str=some string, bool=true}", - "bool = true and not known = 1 and unknown = some string" - ], - "status": "SUCCESS", - "durationInNanos": 1212468686, - "description": "Placeholder with unknown argument names get erased" - }, - { - "caseNr": 13, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 264802, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has extended description with arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has extended description with arguments" - }, - { - "value": "$]", - "argumentInfo": { - "parameterName": "value", - "argumentName": "description", - "formattedValue": "$]" - } - }, - { - "value": "{int=1}", - "argumentInfo": { - "parameterName": "argumentMap", - "argumentName": "argumentMap", - "formattedValue": "{int=1}" - } - } - ], - "status": "PASSED", - "durationInNanos": 297902, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2719919, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 51976472, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 327352144, - "depth": 0, - "parentFailed": false - }, - { - "name": "show tooltip of extended description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "show tooltip of extended description" - } - ], - "status": "PASSED", - "durationInNanos": 669318992, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment18.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "has-tip", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "has-tip" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 13244095, - "depth": 0, - "parentFailed": false - }, - { - "name": "attribute $ has value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "attribute" - }, - { - "value": "tooltip-html-unsafe", - "argumentInfo": { - "argumentName": "attribute", - "formattedValue": "tooltip-html-unsafe" - } - }, - { - "value": "has value" - }, - { - "value": "1 ]", - "argumentInfo": { - "parameterName": "expectedValue", - "argumentName": "content", - "formattedValue": "1 ]" - } - } - ], - "status": "PASSED", - "durationInNanos": 14695105, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Non-Java-Identifier char does trigger a space after a placeholder", - "$]", - "[int]", - "[1]", - "1 ]" - ], - "derivedArguments": [ - "$]", - "{int=1}", - "1 ]" - ], - "status": "SUCCESS", - "durationInNanos": 1228704298, - "description": "Non-Java-Identifier char does trigger a space after a placeholder" - } - ], - "casesAsTable": true, - "durationInNanos": 16106665098, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#236", - "description": "Scenarios of Issue #236" - } - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "timings_greater_than_10_millis_are_displayed", - "description": "timings greater than 10 millis are displayed", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#755" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 166502, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario took $ nanos", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "0", - "argumentInfo": { - "argumentName": "step", - "formattedValue": "0" - } - }, - { - "value": "of scenario took" - }, - { - "value": "11000000", - "argumentInfo": { - "argumentName": "durationInNanos", - "formattedValue": "11000000" - } - }, - { - "value": "nanos" - } - ], - "status": "PASSED", - "durationInNanos": 407902, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 3631926, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 60227331, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 373285172, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment29.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the $ th element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "index", - "formattedValue": "2" - } - }, - { - "value": "th element with a" - }, - { - "value": "duration", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "duration" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 39887185, - "depth": 0, - "parentFailed": false - }, - { - "name": "has content", - "words": [ - { - "value": "has content" - }, - { - "value": "(11ms)", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "(11ms)" - } - } - ], - "status": "PASSED", - "durationInNanos": 14381103, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 661261734 - } - ], - "casesAsTable": false, - "durationInNanos": 661261734, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#755", - "description": "Scenarios of Issue #755" - } - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "the_configured_title_appears_in_the_generated_HTML_report", - "description": "the configured title appears in the generated HTML report", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 164001, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2092815, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed with title", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed with title" - }, - { - "value": "Test Title", - "argumentInfo": { - "argumentName": "title", - "formattedValue": "Test Title" - } - } - ], - "status": "PASSED", - "durationInNanos": 49715956, - "depth": 0, - "parentFailed": false - }, - { - "name": "the index page is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the index page is opened" - } - ], - "status": "PASSED", - "durationInNanos": 281061513, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment26.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the report title is", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report title is" - }, - { - "value": "Test Title", - "argumentInfo": { - "argumentName": "title", - "formattedValue": "Test Title" - } - } - ], - "status": "PASSED", - "durationInNanos": 40468590, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 540024066 - } - ], - "casesAsTable": false, - "durationInNanos": 540024066, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {} - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "attachments_of_all_cases_appear_in_the_HTML5_report_when_having_a_data_table", - "description": "attachments of all cases appear in the HTML5 report when having a data table", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#191", - "com.tngtech.jgiven.tags.FeatureAttachments" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 1207509, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has one parameter", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has one parameter" - } - ], - "status": "PASSED", - "durationInNanos": 183301, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ default cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "default cases" - } - ], - "status": "PASSED", - "durationInNanos": 3160522, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of case $ has a text attachment", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "has a text attachment" - } - ], - "status": "PASSED", - "durationInNanos": 422403, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of case $ has a text attachment", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "has a text attachment" - } - ], - "status": "PASSED", - "durationInNanos": 290702, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2415218, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 74045430, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 420960014, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment3.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "$ attachment icons exist", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "nrIcons", - "formattedValue": "2" - } - }, - { - "value": "attachment icons exist" - } - ], - "status": "PASSED", - "durationInNanos": 19781842, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 700520815 - } - ], - "casesAsTable": false, - "durationInNanos": 700520815, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#191", - "description": "Scenarios of Issue #191" - }, - {} - ], - "classTitle": "HTML App", - "expanded": false, - "$$hashKey": "object:611" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "attachments_appear_in_the_HTML5_report", - "description": "attachments appear in the HTML5 report", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureAttachments" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 218202, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has a text attachment with content", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has a text attachment with content" - }, - { - "value": "Some Example Attachment\nwith some example content", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "Some Example Attachment\nwith some example content" - } - } - ], - "status": "PASSED", - "durationInNanos": 492203, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2025415, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 50000158, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 303408873, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment2.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an attachment icon exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an attachment icon exists" - } - ], - "status": "PASSED", - "durationInNanos": 50330961, - "depth": 0, - "parentFailed": false - }, - { - "name": "the content of the attachment referenced by the icon is", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the content of the attachment referenced by the icon is" - }, - { - "value": "Some Example Attachment\nwith some example content", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "Some Example Attachment\nwith some example content" - } - } - ], - "status": "PASSED", - "durationInNanos": 62382446, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 604436927 - } - ], - "casesAsTable": false, - "durationInNanos": 604436927, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {} - ], - "classTitle": "HTML App", - "expanded": false, - "$$hashKey": "object:610" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "newlines_are_detected_in_formatted_values_and_shown_as_multiline_text", - "description": "newlines are detected in formatted values and shown as multiline text", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#226" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 713805, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of case $ has a formatted value $ as parameter", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "has a formatted value" - }, - { - "value": "Some \n text \n with \n newlines", - "argumentInfo": { - "argumentName": "formattedValue", - "formattedValue": "Some \n text \n with \n newlines" - } - }, - { - "value": "as parameter" - } - ], - "status": "PASSED", - "durationInNanos": 380702, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2332317, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 52677477, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 314986155, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment21.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "multiline", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "multiline" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 21750056, - "depth": 0, - "parentFailed": false - }, - { - "name": "has content", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "has content" - }, - { - "value": "Some \n text \n with \n newlines", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "Some \n text \n with \n newlines" - } - } - ], - "status": "PASSED", - "durationInNanos": 25570883, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 550235739 - } - ], - "casesAsTable": false, - "durationInNanos": 550235739, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#226", - "description": "Scenarios of Issue #226" - } - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "tags_with_custom_styles_are_shown_correctly", - "description": "tags with custom styles are shown correctly", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 221501, - "depth": 0, - "parentFailed": false - }, - { - "name": "the first scenario has tag", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the first scenario has tag" - }, - { - "value": "TagWithCustomStyle", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "TagWithCustomStyle" - } - } - ], - "status": "PASSED", - "durationInNanos": 504004, - "depth": 0, - "parentFailed": false - }, - { - "name": "the tag has style", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the tag has style" - }, - { - "value": "background-color: black;", - "argumentInfo": { - "argumentName": "style", - "formattedValue": "background-color: black;" - } - } - ], - "status": "PASSED", - "durationInNanos": 255501, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2015314, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 62243245, - "depth": 0, - "parentFailed": false - }, - { - "name": "the All Scenarios page is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the All Scenarios page is opened" - } - ], - "status": "PASSED", - "durationInNanos": 295224814, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment25.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the page contains tag", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the page contains tag" - }, - { - "value": "TagWithCustomStyle", - "argumentInfo": { - "argumentName": "tagName", - "formattedValue": "TagWithCustomStyle" - } - } - ], - "status": "PASSED", - "durationInNanos": 70239303, - "depth": 0, - "parentFailed": false - }, - { - "name": "the tag has style", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the tag has style" - }, - { - "value": "background-color: black;", - "argumentInfo": { - "argumentName": "style", - "formattedValue": "background-color: black;" - } - } - ], - "status": "PASSED", - "durationInNanos": 39512383, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 666160769 - } - ], - "casesAsTable": false, - "durationInNanos": 666160769, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {} - ], - "classTitle": "HTML App", - "expanded": false, - "$$hashKey": "object:614" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "navigation_links_of_the_HTML_report_can_be_customized_using_a_custom_JS_file", - "description": "navigation links of the HTML report can be customized using a custom JS file", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#146" - ], - "explicitParameters": [ - "title", - "href" - ], - "derivedParameters": [ - "content", - "text", - "href" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 396502, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 1850313, - "depth": 0, - "parentFailed": false - }, - { - "name": "a custom JS file with content", - "words": [ - { - "value": "given", - "isIntroWord": true - }, - { - "value": "a custom JS file with content" - }, - { - "value": "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", - "argumentInfo": { - "parameterName": "content", - "argumentName": "content", - "formattedValue": "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});" - } - } - ], - "status": "PASSED", - "durationInNanos": 528704, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 47137237, - "depth": 0, - "parentFailed": false - }, - { - "name": "the index page is opened", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the index page is opened" - } - ], - "status": "PASSED", - "durationInNanos": 261387171, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment19.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the navigation menu has a link with text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the navigation menu has a link with text" - }, - { - "value": "JGIVEN DOCUMENTATION", - "argumentInfo": { - "parameterName": "text", - "argumentName": "text", - "formattedValue": "JGIVEN DOCUMENTATION" - } - } - ], - "status": "PASSED", - "durationInNanos": 41256496, - "depth": 0, - "parentFailed": false - }, - { - "name": "href", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "href" - }, - { - "value": "http://jgiven.org/docs", - "argumentInfo": { - "parameterName": "href", - "argumentName": "href", - "formattedValue": "http://jgiven.org/docs" - } - } - ], - "status": "PASSED", - "durationInNanos": 16444717, - "depth": 0, - "parentFailed": false - }, - { - "name": "target", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "target" - }, - { - "value": "_blank", - "argumentInfo": { - "argumentName": "target", - "formattedValue": "_blank" - } - } - ], - "status": "PASSED", - "durationInNanos": 15038808, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JGiven Documentation", - "http://jgiven.org/docs" - ], - "derivedArguments": [ - "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", - "JGIVEN DOCUMENTATION", - "http://jgiven.org/docs" - ], - "status": "SUCCESS", - "durationInNanos": 519931923 - }, - { - "caseNr": 2, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 193601, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 1778213, - "depth": 0, - "parentFailed": false - }, - { - "name": "a custom JS file with content", - "words": [ - { - "value": "given", - "isIntroWord": true - }, - { - "value": "a custom JS file with content" - }, - { - "value": "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", - "argumentInfo": { - "parameterName": "content", - "argumentName": "content", - "formattedValue": "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});" - } - } - ], - "status": "PASSED", - "durationInNanos": 313802, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 53633484, - "depth": 0, - "parentFailed": false - }, - { - "name": "the index page is opened", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the index page is opened" - } - ], - "status": "PASSED", - "durationInNanos": 306802197, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment20.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the navigation menu has a link with text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the navigation menu has a link with text" - }, - { - "value": "BACK", - "argumentInfo": { - "parameterName": "text", - "argumentName": "text", - "formattedValue": "BACK" - } - } - ], - "status": "PASSED", - "durationInNanos": 38658577, - "depth": 0, - "parentFailed": false - }, - { - "name": "href", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "href" - }, - { - "value": "javascript:window.history.back()", - "argumentInfo": { - "parameterName": "href", - "argumentName": "href", - "formattedValue": "javascript:window.history.back()" - } - } - ], - "status": "PASSED", - "durationInNanos": 13173894, - "depth": 0, - "parentFailed": false - }, - { - "name": "target", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "target" - }, - { - "value": "_blank", - "argumentInfo": { - "argumentName": "target", - "formattedValue": "_blank" - } - } - ], - "status": "PASSED", - "durationInNanos": 13057893, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "Back", - "javascript:window.history.back()" - ], - "derivedArguments": [ - "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", - "BACK", - "javascript:window.history.back()" - ], - "status": "SUCCESS", - "durationInNanos": 555928380 - } - ], - "casesAsTable": true, - "durationInNanos": 1075860303, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#146", - "description": "Scenarios of Issue #146" - } - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "the_welcome_page_of_the_HTML5_report_can_be_opened", - "description": "the welcome page of the HTML5 report can be opened", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 143201, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 3415424, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 45517525, - "depth": 0, - "parentFailed": false - }, - { - "name": "the index page is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the index page is opened" - } - ], - "status": "PASSED", - "durationInNanos": 257244742, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment28.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the page title is", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the page title is" - }, - { - "value": "Welcome", - "argumentInfo": { - "argumentName": "title", - "formattedValue": "Welcome" - } - } - ], - "status": "PASSED", - "durationInNanos": 35213152, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 467277746 - } - ], - "casesAsTable": false, - "durationInNanos": 467277746, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {} - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "clicking_on_tag_labels_opens_the_tag_page", - "description": "clicking on tag labels opens the tag page", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureTags-Tags", - "com.tngtech.jgiven.tags.Issue-#47" - ], - "explicitParameters": [ - "prependType", - "tagName" - ], - "derivedParameters": [ - "prependType", - "tagName" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 200202, - "depth": 0, - "parentFailed": false - }, - { - "name": "scenario $ has tag $ with value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has tag" - }, - { - "value": "testtag", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "testtag" - } - }, - { - "value": "with value" - }, - { - "value": "#42", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "#42" - } - } - ], - "status": "PASSED", - "durationInNanos": 293202, - "depth": 0, - "parentFailed": false - }, - { - "name": "the tag has prependType set to", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the tag has prependType set to" - }, - { - "value": "true", - "argumentInfo": { - "parameterName": "prependType", - "argumentName": "prependType", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 255602, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 6502846, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 48201245, - "depth": 0, - "parentFailed": false - }, - { - "name": "the All Scenarios page is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the All Scenarios page is opened" - } - ], - "status": "PASSED", - "durationInNanos": 298958541, - "depth": 0, - "parentFailed": false - }, - { - "name": "the tag with name $ is clicked", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the tag with name" - }, - { - "value": "testtag-#42", - "argumentInfo": { - "parameterName": "tagName", - "argumentName": "tagName", - "formattedValue": "testtag-#42" - } - }, - { - "value": "is clicked" - } - ], - "status": "PASSED", - "durationInNanos": 138924495, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment4.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the page title is", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the page title is" - }, - { - "value": "testtag-#42", - "argumentInfo": { - "parameterName": "tagName", - "argumentName": "title", - "formattedValue": "testtag-#42" - } - } - ], - "status": "PASSED", - "durationInNanos": 31012722, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "true", - "testtag-#42" - ], - "derivedArguments": [ - "true", - "testtag-#42" - ], - "status": "SUCCESS", - "durationInNanos": 700055312 - }, - { - "caseNr": 2, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 286602, - "depth": 0, - "parentFailed": false - }, - { - "name": "scenario $ has tag $ with value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has tag" - }, - { - "value": "testtag", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "testtag" - } - }, - { - "value": "with value" - }, - { - "value": "#42", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "#42" - } - } - ], - "status": "PASSED", - "durationInNanos": 382203, - "depth": 0, - "parentFailed": false - }, - { - "name": "the tag has prependType set to", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the tag has prependType set to" - }, - { - "value": "false", - "argumentInfo": { - "parameterName": "prependType", - "argumentName": "prependType", - "formattedValue": "false" - } - } - ], - "status": "PASSED", - "durationInNanos": 193101, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2983921, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 51302168, - "depth": 0, - "parentFailed": false - }, - { - "name": "the All Scenarios page is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the All Scenarios page is opened" - } - ], - "status": "PASSED", - "durationInNanos": 298688338, - "depth": 0, - "parentFailed": false - }, - { - "name": "the tag with name $ is clicked", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the tag with name" - }, - { - "value": "#42", - "argumentInfo": { - "parameterName": "tagName", - "argumentName": "tagName", - "formattedValue": "#42" - } - }, - { - "value": "is clicked" - } - ], - "status": "PASSED", - "durationInNanos": 146037746, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment5.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "the page title is", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the page title is" - }, - { - "value": "#42", - "argumentInfo": { - "parameterName": "tagName", - "argumentName": "title", - "formattedValue": "#42" - } - } - ], - "status": "PASSED", - "durationInNanos": 30359117, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "false", - "#42" - ], - "derivedArguments": [ - "false", - "#42" - ], - "status": "SUCCESS", - "durationInNanos": 693897168 - } - ], - "casesAsTable": true, - "durationInNanos": 1393952480, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "Tags" - }, - { - "value": "#47", - "description": "Scenarios of Issue #47" - } - ], - "classTitle": "HTML App", - "expanded": false, - "$$hashKey": "object:612" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "showing_thumbnails_can_be_configured", - "description": "showing thumbnails can be configured", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#274" - ], - "explicitParameters": [ - "thumbOption" - ], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 306402, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has an image attachment $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has an image attachment" - }, - { - "value": "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lv+h3PtQACgiIiIiIiIiN9Uf6/2RRxo+QnXv6gT5BuHl5eX8ELkdZWVlOT+S05JJykxixuEZLDi+4Kb0pwBQRERERERERG46d6M74X7hdArpRNtqbanlWQuHwUGQOcjVpYlUqAu2C2CHhOwEdpzbwZakLRy0HiTPnnfT+lQAKCIiIiIiIiIiUokZXV2AiIiIiIiIiIiI3DwKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQSUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQMDofDYbVasVqt5Ofnu7oeERERERERERERuUEWiwU/Pz/8/PwwW61WMjIyCr8wm11dm4iIiIiIiIiIiNyggoICMjIyADCmpqbi4+Oj8E9ERERERERERKSSMJvN+Pj4YLVaMRYUFCj8ExERERERERERqWTMZjP5+fnaBERERERERERERKQyUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQUAIqIiIiIiIiIiFRiCgBFREREREREREQqMQWAIiIiIiIiIiIilZgCQBERERERERERkUrM7OoCSmvTpk1cuHABu91OVlYWPj4+ADRp0oSGDRuSnZ3Njz/+SEREBM2aNXPe53A4OHLkCIcPH3YeCwsLo1WrVphMJgB+/fVXTp48idFoJD8/n9q1a9OiRYsKfb7Dhw87a8zIyMDLywuj0UhwcDARERH88MMPVKlSpdg9NWvWpE2bNlitVnbu3El+fj52ux2z2UyHDh3w8/Nj8eLFAOTl5WG32/Hw8ACgRYsW7Nu3D4Ds7GxMJhNubm4YDAb69+8PwJIlS/D29qZnz57F+k1MTGTXrl3k5uZiNBrx9/enbdu2eHt739R3dCVTp05l9OjR5OXl8e233zJq1CjnuZ9++omJEyeybt06AE6dOsWHH35Ieno6RqOR559/vsL/X4uIiIiIiIiIVKQKDwAdDgcbN26kW7du13Vf586dAbBaraxbt47777+/2Pm4uDj8/PyIj48vFgDu27eP8+fPc8899+Dh4UFBQQFbt25l9+7dtG3blqSkJE6dOkWfPn2cAeC6desICwsjICCgTM+4c+dOGjVqVCKwu5rGjRvTuHFjABYsWECvXr2cIWd2djbu7u4lnrnI9u3bCQ8Pp2bNms53sX//fjp37uy858iRI1y4cIHIyEjnfXXr1gUgKiqK0NBQ6tev7zx3/vx57HY7ycnJZGVl4eXlBUBSUhLR0dHcdddd+Pv7OwPW9evX07dv31I/72+V5Z0Vyc/Px2KxsG/fPuc7BDh37hzLli0rFkxOmjSJvn37cs8997Br1y4++ugjZsyYUea6RURERERERERudRUeAFqt1jKFPNcSHx9Phw4d2LJlC+fPn6datWo4HA4OHjxIv379nCPfzGYzkZGRGAwGoHBknMPhwOFwAGCxWLjnnnvKXIfD4SAzM/OmPOOV5ObmOusHqF+/frEwryzi4uKoW7cu6enpxMfH07x5c6BwtGRERAT+/v4AGAwGGjdufEP9lfWd7dq1i1WrVnHo0CEmTZpEbGwsNWrUoFatWjRo0IDJkyfz7LPP8tprrznvGTdunLP24OBg0tPTy1y3iIiIiIiIiMjvQYUHgEXhXHlKSkrC4XAQEhJCvXr1iI+Pp1q1amRkZGCxWEpMTTUa/2/pw7CwMI4fP86PP/5IjRo1CAkJoWbNmri5uZWplosXL+Ln53dDz3O92rRpw+bNmzl48CAhISGEhYURGBhY5vYKCgo4efIkffv2JT09ne3btzsDQKvVetm2zeayfyuV9Z21bt0aT09PwsPDGTBgAJMmTeKVV14BYNGiRdSrV48mTZoUu+fS2mfNmsWAAQPKXLeIiIiIiIiIyO9BhQeAFy5coFWrVuXaZtFoNYB69erx008/0bZtWwwGA3a73XldSkoKGzZsAMBmszFo0CCMRiNdu3YlMzOTxMRETp8+TUxMDL179y5TKJWcnFzuAScUjlRcsmRJsWPt2rUjNDSU0NBQHnjgAc6fP09SUpJzSm+HDh3K1NeJEycICAjAx8cHHx8f7HY7586dIzg4uMQ7XbJkCTabDZvNRvfu3QkKCrru/m7kncXHxzv/3xc5e/YsP/30Ex9//PFl77HZbHz00UfYbDaGDx9epn5FRERERERERH4vKjQAzM/Pp6CgwDkdtzzk5eWRkJCAt7c3CQkJANjtdhISEqhTpw4OhwOr1Yqfnx8BAQEMHDgQgHnz5gGFYZDD4cDb29s5dTYmJobjx48TERFx3fUkJydTp06dcnu+Im5ubs7NOX4rJycHDw8PqlevTvXq1QkPD2fBggW0bdvWudHJ9YiLiyMrK4tly5YBhe8oPj6e4OBg/P39OX/+vHMabVFNv/zyS7Fg8HqU9Z39+OOPLF26lIYNG7JixQoOHz7MpEmTqFGjBllZWbzwwgtA4aYqo0eP5qOPPsLNzY1//vOf1KpViyeffNI5FVxEREREREREpLKq0ADwwoULZd5Y40qOHz9O9erVueuuu4odi42NpW7dujRv3pzo6Gi6du2Kl5enOOPyAAAgAElEQVQXDoeDhIQEZ/CzZ88e8vLy6NChA0ajEbvdjtVqpVatWtddS9F6gmWdPlwWOTk5LF26lF69ejlDudTUVDw8PMoU/lmtVtLT0xk4cKDz/szMTJYvX067du1o0aIF69evx9/f3zlqLyUlBavVisViue7+buSdPfDAA8THx/PKK6+wd+9eWrVqRZ8+fQAYNmyY87r777+fTz/9FIBvv/2WkJAQnnrqqevuT0RERERERETk96hCA8Dk5GSqV69erm3GxcWVGKl3xx13sHPnTjIyMmjSpAkWi4U1a9bgcDgwGAwEBgY6N/qIiIggJiaG5cuXYzQacTgc1KxZs0ybWly4cOGG1t67mstNAfb29qZnz5506dKFrVu3UlBQgNFoxGKxXPcuy0Xi4uKoV69esfDQ29ub4OBgTp48Sb169ejatSsxMTFkZWVhMpnw8vKiY8eOVK1a9br7u5F3ZrPZnOs5Hjp0iI4dO17znnnz5lGlShW2bt3qPPaf//ynxDqRIiIiIiIiIiKVhSE2NtYREhJSIZ1t2LCBzp07l2lk2u/B3r17b3gDjtuN3pmIiIiIiIiIyM2TmJhYsQGgiIiIiIiIiIiIVJzExESMri5CREREREREREREbh4FgCIiIiIiIiIiIpWYAkAREREREREREZFKTAGgiIiIiIiIiIhIJaYAUEREREREREREpBJTACgiIiIiIiIiIlKJKQAUERERERERERGpxIxms5mCggJX1yEiIiIiIiIiIiLlqKCgAIvFgtHPz4+MjAyFgCIiIiIiIiIiIpVEQUEBGRkZ+Pn5Yfb39wfAarWSn5/v4tJERERERERERETkRlksFnx9ffHz88OQl5fncHVBIlI2CQkJ1KtXz9VliIiIiIiIiMgtTJuAiIiIiIiIiIiIVGIKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQS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2rdvz6ZNm/jyyy9JTEzkiSeecNm7ExERERERqUxybDmM3TqWt3a+Ra4t19XlCC4aAdi0aVO6d+/O+vXree+99/Dw8KBevXpERETQo0ePYmv4lZbdbiciIoKoqCgOHDhAnTp1OHr0KAMHDrzsril2u52WLVuyceNGsrOz2b9/P/n5+URERPDLL78Uu/bIkSOcO3eOO++8Ezc3N9q1a8fy5cvZs2cPbdu2LXbt8ePHmTZtGlA4HfHw4cM4HI5iUyD79u3L+vXrWbx4MQUFBTRt2pSOHTte9zOL3EqqVavG66+/XuJ48+bNad68+VXvbdeuHe3atbvqNf369aNfv37Fjo0ePbrY1wEBAYwaNarEva1bt6Z169bOr00mEw8//DAPP/yw81h+fj65ubl4eHhctQ4REREREREpnUXHFrEneQ+TOk2idpXari7ntuaSEYAATz/9NBMnTmTYsGG0aNGCY8eOMXv2bMaOHYvVai1TmxEREZhMJmJiYtizZw8Oh6NEQHepNm3aUFBQwN69e51TC8PDw0tct3nzZgDaty/c1rpDhw7Fjl/q4sWLREdHEx0dzfbt20lLS2PkyJEMGzbMeY3FYmH48OEUFBRgMBh45JFHyvS8IlI2a9asYc6cOcWOxcbGAlCjRg1XlCQiIiIiIlIpHU8/zog1I9iWtM3VpdzWXLYLMBSuw1ezZuGikHl5eUyZMoU9e/awadMm+vbti8VSuGtMVlZWsc0xUlNTAUpMmS0K8H799VesViuBgYHUrVv3iv03b94cDw8P9u/fz+7du2nVqlWJzUfsdrtzc4Bp06Y5R/dB4RTjnJycYiOGWrduzV/+8hcApk6dytatW7l48WKJvoumGnt6elKrVq1rvCkRKU/u7u5ER0fjcDiIiIjAarWyYsUK/P39admypavLExERERERqVSybdk8H/U8EyMn0r1G92vfIOXOJSMAv/32W5588kk2bNjgPObm5uYceVO0W2fR15del5KS4pzSW6dOnRJtt2vXjjNnzrB3796rjv4r6rNly5Zs3ryZtLS0y16/b98+0tLSqF69OnfddZfzo1atWuTl5V12enGRoUOHYjabWbJkCefOnbtqLSJScbp27crgwYM5duwYM2bMYPHixdSpU4fnnntOa3GKiIiIiIjcBAWOAv665a+sOLnC1aXcllwyArB58+asXLmS6dOns2XLFgICAkhOTubXX3/FZDLRqlUrAAYPHsz+/ftZvnw5v/76K35+fhw9epTs7GyaNWt22XXF2rZty9dff01OTs41A8Ci67dt24bFYiEiIgKbzVbsfNE03379+tGzZ0/n8V27dvHhhx+yefNmOnfufNm2g4OD6dOnD8uWLWPmzJm8/PLLpX5HInJzdenShS5duri6DBERERERkduG3WFn/LbxZBdk82C9B11dzm3FJSMAW7duzauvvkqzZs04ceIEGzdu5MSJE0RERPD66687pwXXr1+fcePG0bJlSy5evMjhw4cJCgpi6NCh/OUvf8FgMJRou2jar5eXl3OX0WvVYjQandOBL5WXl8eOHTswm83Odf+KtGzZEl9fX/bu3UtaWtoV2x84cCBVqlRh586d7NmzpzSvR0RERERERESk0no35l3WnFrj6jJuK4a8vDyHq4sQkbJJSEigXr16ri5DREREREREbgHt5rdzdQmlZjaamdZlGu2D27u6lNuCy3YBFhERERERERGR21OBvYCXN73M4dTDri7ltqAAUEREREREREREKly2LZsxG8dwKuOUq0up9BQAioiIiIiIiIiIS6TmpvJ81PPk2nJdXUqlpgBQRERERERERERc5mTGSd7f/b6ry6jUzK4uQEREREREREREbtymBzaRmpdKam4q1jwrqbmFn6fkprDt3Db2Xtjr6hKvaNGxRXQM7sg9te5xdSmVknYBFvkd0y7AIiIiIiIiUlqpuamsO72OX878wvZz28mz57m6pGI8TB58f8/31PCu4epSKh0FgCK/YwoARUREREREpCyyC7KJOhvF4uOL2ZK0xdXlOIVXDWfm3TNdXUalowBQ5HdMAaCIiIiIiIjcqH0X9vHZgc+ITop2dSkAjG42mpFNRrq6jEpFAaDI75gCQBERERERESkv+y7s438H/ufyEYEeJg8W3ruQII8gl9ZRmWgXYBERERERERERoUVgC6Z1ncaHkR/i6+brsjpybDlM3jPZZf1XRhoBKALY7Xby8/MpKChwflzKbDY7PywWC0bjrZGdawSgiIiIiIiI3AzJOcn8bcvf2H1ht8tq+F/3/9GmWhuX9V+ZKACU215ubi6ZmZk4HKX7UTAYDPj4+ODm5naTK7s2BYAiIiIiIiJys9gddr4+/DWfHfiMAnvBtW8oZ/V86zG712xMRlOF913Z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atRA+/btcffuXRw8eBBNmzYVNvfQarV6UxJjYmKwatUqmJubY/HixcJmI3Xr1oWZmRl0Oh3y8vKEXYiJiIiIiIiIiIhMRZULAHU6HS5dugQA+OSTT1CrVi3hmFwux9GjR/Hnn3+ib9++eOONNxASEoIHDx5gzpw5qF+/PiwtLfHkyROkp6dDLpejdevWqFmzJmxsbPDgwQPMmDEDTZo0gUgkwt27d5GXl4e2bdsy/CMiIiIiIiIiIpNU5VKv+/fvIykpCQ0aNNAL/wCgS5cuAP7eIEQsFmPOnDn4z3/+A2dnZzx+/Bj37t2Dra0t3n33XaxYsQKNGzeGSCTCrFmz0K9fP0ilUoSFhSE0NBSWlpbo378/Pvnkk0p/nURERERERERERJVBpFardaWfRkRVUVRUFDfgICIiIiIiIqISVbkRgERERERERERERFRxGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMLGxCyAi05KQlYCxR8Yi6GEQcjQ5JZ4rl8jRt3FffN/3e9jL7CupQqooOp0OmZmZkEgksLS0NHY51Vp2djZCQ0Nx//59pKSkAAAcHR3RuHFjdOzYEVZWVkaukIiIiIiIqjORWq3WGbuI8lizZg3Gjx8PmUyGw4cPo169emjVqpXeOZcvX8aGDRswc+ZMtGjRAgCgUqmwZ88eXL16FSqVCvXq1cMHH3wADw8PY7wMogoRFRWFBg0aGLsMPQN2D8DBewfLdc3I1iPxa/9fiz2elpaGGTNm4MyZMzh8+DCaN29eapuhoaH44YcfcOvWLaSmpsLa2hrt27fH+PHj0aZNm3LVVx18//33+PHHH6HVanH9+vVSz4+MjMTbb7+N3bt3w9vbu1x9PXr0CKGhoXj06BHy8vIAADKZDC1btoSPjw8cHR1LbSM3NxcnT57E3bt3oVKp4O7ujjfffBPu7u7FXrNr1y5ERkYWe3zy5Mll6jshIQHfffcdPvzwQ9SpUwd79uyBUqnEyJEjS722JBs2bEC9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AAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABdbg894AAAD4W5g0Y1b2+sktqU7y9T3+JcMvODVJsrKiMtf+dlTuHzMpf567IJs1bpSu222dH33jgByya8ckyR3PT8ivx07OiB/9+998O99+++386Ec/ykMPPVTr8tdeey3XXntt7rnnnlxzzTWZNGlSkqSqqipJUlZW87f8Y445JnvttVd+9KMf5fDDD89pp51Waz2jRo3KkCFD0rdv3+y///558sknM3HixFx++eUbtX0XXXRRli9fnoEDB5bu869typQpGTJkSLp165YzzzxzvcuNHDkyTzzxRJYsWZJtt902Z511Vrbaaqu1lqusrMx//ud/Zty4camqqspuu+2W73//+2nUqFGd27H6WDRoUPMxqUWLFtlmm21y2GGHpWfPnhu1L2+88UaaNWuWbbfddqOW/7/if7Nfffr0yTnnnJMuXbrUunzw4MHZZpttcuyxx/6vt+/YQffniVdeT2V1dcZfcXa6f2mbJMkDYydn0O/H5L9nzk5ZvXrpuGXbnHnQl9PnkL2TJG/NnpfOFw5MxbAr/9fbsLGefvrp3HPPPenTp0969+693uUef/zx/P73v8/y5cvToUOHnH766dlhhx3WuezGvoaS5A9/+EN++9vfZvHixWnfvn1OO+207Ljjjmut74orrshll11WOm7Tp0/PXXfdlTlz5qR169Y5+eST061btw3u71VXXZXXXnst9erVK112/vnnp1OnTunTp0+tZaurq7PbbrvlkksuyYoVK3Lvvfdm/PjxWbFiRXr37p3TTz899evXr3Wbhx56KA8//PBa76F/baecckoqKipSr169NGnSJFtuuWV69uyZI444ovSe8deyvuO5atWqDBs2LOPGjcuqVavSuXPnnHnmmWnduvUG11nXca/rvXXq1KkZNmxYZs2alRYtWuTYY4/NgQcemCR55ZVX8sADD2Tu3Llp3bp1jjvuuOy7774b3Jbq6uo88MADefbZZ1NRUZEePXrkjDPOSMOGDddatq77nzJlSu69997MmjUrm2++ec4444x07tx5k/d/+PDhGTFiRJKkdevWOe2007L99tuvd/vX93vx2muvzaRJk3LbbbelZcuWtW7Tv3//VFdX5+abb97g4/O3IgACAFBIe2y7VSqGXZmrHn8+f3x7RunyYwbdl5nzFuaX3zs6e22/TVZUVOSR8a/l6IH35qkfnJoDOn8pJ/XaI8d+uUsda//7+tGPflT67+uvvz7bb799jj/++NJlb7/9dlq3bp0xY8bk5JNPrvVh9IUXXkibNm0+0/1OmzYtrVu3TpMmTTJx4sR07979s+/Eerzwwgt55pln1vuhbbV33nkn9913Xy677LJ88YtfzMMPP5xBgwblmmuuWWvZp59+OtOnT88NN9yQhg0b5oYbbshDDz2Uk08+eaO26f7770+SLFy4MOPHj8/tt9+euXPn5sgjj9zgbUeOHJmuXbsWLgD+o+/XI+eemCRpcOqlpcsGPDU61w0flZtP/UYO261TNmvcKKOn/Tnfv+uJzFtSnkuPPihf+kKbfHDzxX+37bz11ltTVVWVrbfeus7lxo4dmxEjRuTKK69M27Zt8+ijj+amm25aZzzY2NdQkkyePDkPPvhgfvrTn2abbbbJE088kZtuuim/+MUvSsssX748d955Z62otHLlytxwww05+eSTs99++2Xy5Mm56aabMmjQoLRq1arO+ywvL88FF1ywzveP1a+11a677rrss88+SZLf/OY3ef/993PjjTemsrIyV199dX7729/m6KOPLi3/5z//OS+99NIG9/uv5Sc/+Um6dOmSZcuWZdq0aRk2bFjeeOONXHzxX+85VNfxfPjhh/Pee+/l5z//eRo2bJhBgwbl3nvvTd++fetcZ13Hva731sWLF+e6667LWWedlX322SdTp07NVVddlZ122imNGjXKoEGDctFFF2XXXXfNlClT8rOf/Sw77rhj2rVrV+f2PP3005kyZUpuvPHGNGjQIEOGDMmkSZPWeo7Udf9NmzbNgAED0q9fv+y1114ZPXp0BgwYkFtuuSVNmjTZ6P2fPHlyhg8fngEDBqRFixZ57rnncv3112fo0KHr3PYN/V5s1apVRo8enSOOOKJ02RtvvJEVK1Zs8I9Qf2sCIAAA/zRGvvZ2Rkx5O2/9/Px0aFvzobVZ44b53oHd89Xd/iVbt26RJLlvzKT8euzk/OCI/fLvv3wk7w++OGX/M3rl0odHZOoHc/LIuSfmxWnv5YL7f5cFS5elflm9DDrlyBy2W6e8+/GCdPvJLbn63w7N05PfzFuz5+XQXTtl0ClHrHfb/reaNm2aNm3aZOLEienRo0eSZN68eZk5c+ZnjjYjRozIvvvum+bNm+cPf/hDrQ86AwcOTMuWLfPxxx9nyZIlqaqqyjnnnJP27dvXed2nbbfddrn88svz4IMPZunSpevdljFjxmSfffbJdtttl6Rm5OOTTz6Zjz76aK2Y8uKLL+aoo45K8+bNkyTHHntsbrrppo0OgKu1atUqhxxySFq2bJnBgwfnoIMOymabbZYJEybk17/+dcrLy9OwYcOcdNJJ6dGjRx577LGMGTMmkydPzgcffJDjjz8+jz76aJ5//vmsWrUqm2++ec4666x06NBhrft66623ctttt2X58uXp1KlTGjdunFatWuXb3/52Vq1alfvuuy8TJ05MRUVFunTpkjPOOCONGjXKkCFD0rp168ybNy+ffPJJFi1alH79+pVGr4wYMSLDhw9PRUVF2rZtm759+6Zdu3Z59tlnM2HChFRUVKSysjKXXnrpJu3X+ta7+j4fe+yxNGrUKPvss0+tkV+ftnDhwvz0pz/NzJkzs8UWW6Rv375p06ZNzjzzzFx77bX54he/mKTmA/T111+f22+/faNGWy1atiKXP/ps/vP7x+a4HruWLj9010754+VnpVmjmpFG7368IJ0vHJh5t/44W55zTV69um92bv+FJDXvFycOfSgfDL44sxYuzjl3/zavf/hxVlVWps8he+fCI/ZLkmx33oBc8PV98+zUd/LBgkVp1bRxHj3vpLRs2nit7Tr00EPTsWPHXHLJJXVu/5Zbbpn+/ftniy22SJL07t07Dz30UCoqKtba/419DSVJy5Ytc+6555aeg/vuu2/uv//+LF++vBRN7r333vTu3Tsvv/xy6XZTpkxJs2bNsv/++ydJ9thjj3Ts2DHjx4/PIYccst7nTpIsXbo0zZo1q3O7kproWV5eXrqPiRMn5oQTTijd9qijjsqjjz5aCoAVFRUZOnRoTj755AwYMGC96509e3buuOOOzJ49O2VlZenevXtOOOGENGjQIH369MmRRx6ZKVOmZP78+WnWrFl+8IMfbHB7mzZtmq5du6ZDhw45//zz86c//Sldu3bNvHnzcuedd+b9999PZWVlvvrVr+aoo45KksyaNSu33XZbZsyYkZYtW+bb3/526TFaU13Hc+edd07v3r1L72177713fve7323wsa3ruNf13tq0adN897vfLUXZXXbZJW3bts1HH32U7bffPn379s2uu9a8vnbddde0aNEis2bN2mAAfOaZZ/Kd73ynNEruoosuKl135513ZunSpenfv38qKyvXe/8rV65Mu3btSr+X9t9//zz22GOZPHlyevToUWs9de3/jBkz0rFjx7RoUfP7f/fdd88vfvGLLFu2LE2bNl1r2+v6vZgk3bp1y3PPPVcrAL7wwgvZbbfdMm3atA0eq78l5wAEAOCfxrNT38m+O25Xin9r+uLmrdKgfu3/PT6kS8dUVlXnpenvlS77zctTcsq+XTN/ybJ8c+B9+cnRB2b6Df+Rh/p9O8cNvj+zFy5Jg7KyLCxfnnr1kifPPzljL/t+fvnc+Ez7aO7fbN+qqqqy33775bnnnitdNmrUqPTq1avOALM+5eXlmTRpUnr27JmuXbtmxowZmT9/fun6srKyTJgwIf3798+VV16ZvfbaK3fccccGr/u07bfffqOCzgcffJBtttmm9HODBg3Srl27fPDBB+tcds3Y2L59+yxYsCDLli3b6P1fU48ePdK4ceNMmzYtK1asyMCBA3Paaadl6NChOemkk3LzzTensrIy3/zmN7Pddtvl1FNPzfHHH5+pU6dm+PDhueqqq/KLX/wiHTt2zN13373O+xg8eHAOPfTQ3HzzzTn00EPz4osvlqY6Pv7443n33Xdz/fXXZ8iQIamqqsp9992XJKlfv37GjRuXM888M5dddlm6d++exx9/PEnNNPIHHnggl1xySYYMGZL9998/119/fenxmzJlSo4++uhceumlm7Rfda137ty5ueuuu3LxxRfnpptuyuabb5558+at97H94x//mLPPPju//OUvs+OOO+auu+7KZpttlu7du+f5558vLTdmzJj07t17o6davvz2zFRUVuWYdYzkbddyszRvUnskTqtmTXL4Hjvl4XFTSpc99PJ/59v77J4G9ctyyq0PZ8ett8i0Aefl1av75u5RE/PYhKk1j2VZWf749sw8dt6JGX/F2Vm2qiIPjJ20zu3q2LHjRm3/DjvsUJqeWF5enqeeeip77rnnOvd/Y19Dq5fdfffdSz+/8sor6dSpUyn+TZ06NdOnT681yi5JPvzww1qvv6TmdfXhhx/W+dxJagLgU089lX79+qV///558MEHS9et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dtxxx+Xuu+/OD37wg7Rq1SoHHHBA3njjjVRVVWXo0KH53ve+lyZNmtQ57XnhwoWpX79+rcesRYsWWbRoUennNUd6rfn62VizZ89O586dS9ux5vTuysrKbLfddlm8eHHKyspq3ddnDUIVFRW57bbbMm/evPy///f/1vkeuD7rOu4b8976xhtvZNCgQTnllFPSq1evWssefPDBOfDAA/P6669n8ODBueCCC7LTTjutdxtWH4uvfe1radSoURo1apTDDjss48aNq/WcWNO67r9Vq1a54IILct999+VXv/pVevTokZ133jmbbbbZJu3/6NGj8/LLL+f2229Pq1at8qc//SlXXXVVBg4cuNZ718b8XkySAw88MJdccklOOeWUvPDCCznkkEPWu01/TwIgAACF8uqfP8r0WXPzrZ67JamJci2a1ISfr+7+L/nZky9k+qy52XGrmsCyZaua/8Ff8wP8mvbp9MXUL6uX8e98kN+8PCW/OvOYJMk2bVpmtw5bZtwVZ691m/fnb/ron09/i2Nd0aQuBx54YIYNG5a5c+d+5tF/06dPz8qVKzNs2LBal//whz/M5MmT07Vr1ySp9SF68eLFqV+/fukDbl3XfRYdOnSoNd135cqVmT179jrPp9ehQ4e8//77pfg5c+bMbL755p/5/keNGlUKUK+++mqeeOKJXHPNNWnbtm3Ky8vX+ubl1R5++OF89NFHueKKK9KoUaOMHz8+v/rVr9ZabrPNNktFRUVWrlxZGokzf/780rdwtm3bNieeeOJGfePqmtq2bZtDDjlknaOkRo0aVWtq+KbsV13rnTNnTik4JTWxYvHixevdxiVLlpT+e3UIXX2c9t9//7z00ktp0qTJekf/DXnmjzmm+y5p36ZlVlZUpqq6Oi2aNM4u7duleZNGufelSTl9/5rHrc1mNetd9anpp6s1adggR3ffOY+On5q3Zs/Lyb1rnufbtKkJNa9d1z+bNf77nMR/0qRJad68eTp27JgmTZrksMMOy0MPPZR33313rW9VmMSbAAAKw0lEQVRTrsvVV19dinKrg+/w4cMzevToXHXVVbXed8aNG5eysrKMGjUqSc3ouYEDB+bYY49Nhw4d8swzz9Ra98yZM3PAAQfU+dxZuXJl3nrrrVrTdFetWlVrhOGCBQvy7rvvZs8996y1/iZNmuSss84q/Txy5MjssMMOmTlzZubMmZNbb60Jsqv3r0+fPrngggtqTbNu3bp1Kisrs3Tp0lIYWrRo0UZ9a+7G+PDDDzNt2rSceOKJadu2bZLkxhtvXCvKLVy4MFVVVVmyZEnpvf2jjz5KmzZtNingVVVVZeDAgWnatGkuueSSTfr24fUd9w29t66Ob//xH/9RK8LPmDEjc+bMSffu3VO/fv3suuuu6dy5cyZNmlRnAGzQoEG22GKLWu8LVVVV6x0pvL77T2pGm67+Y8Hqc80ec8wxm7T/r776arp37176A0/Xrl1Tv379vPPOO7WmDW/s78Uk2WqrrdKhQ4eMHj067777brp161aaEvx5MgUYAIBCmb+0PGfe+Xgmz5iVOYuW5smJr2e/nWpCUK9/2TbH9eiSI24YlhFT3s6S5SuzaNmK/Hrs5Pz4N8+k2/Zrf0lFvXr1ckLP3TPgqdGprKoqjfD7SpeOeefj+Xn+9XeTJAuWLsspv/hN3pkzf611/D116dIl5eXlefnll7Pvvvt+pnWMGDFirVEeSc0U45EjR5Z+njhxYmk02ahRo9Kly1+mQdZ13caaPn16XnutZkrmvvvum7Fjx+add95JZWVlHn744XTq1ClbbrllkuTll18uTW094IAD8uSTT2bRokVZtmxZHnnkkRxwwAFJauLDyJEja0Wq9Vm6dGmee+65DBs2LKecckoaN26cBQsWpFWrVmndunWqqqry5JNPpqysrDTKsEGDBqWRQAsWLMjWW2+dRo0aZenSpXn22WezcuXKtaZCb7HFFmnbtm3p3GOvv/56rQ+Le++9d55++unS1LbRo0fnkUce2eD29+zZMy+99FLpHFUzZszIwIED1zr/2upt3dj9qmu9nTt3znvvvZf33qs5b+Yf/vCHOrdxwoQJtZ4na57P7MADD8yECRPqnP774B//O5c/+myWr6rIr0a9kq1bt0jHdm3TrHHDXHfCV3PuPcNz5/OvZM6ipVmxqiKjp/05Jw59KHtut+5v4T1xnz3y1J+m5cmJr+ekXjVhoW3zpjlo5y/lxt/VHJ+Kyqpc8tAf8ttX36hz3zbVms/3N998M7feemvpMR43blyWL1+eDh06bNJzePUxbd26dSlqPPXUU7n00kvXimC33nprhg4dWvqnQ4cOOe+88/K1r30tu+66a1asWJFnn302VVVVmTBhQmbMmJEePXrU+dypqqrK9ddfn5EjR6a6ujpz5szJ73//++y9996l+3333XfXGegfffTRDB06NCtWrMjHH3+cxx9/PAcffHC233773HXXXaXtXH26hKFDh651jsXWrVtnxx13LE0vLS8vz3PPPbfOL9/YFCtXrsyUKVNy3XXXpVevXtlxxx3TvHnzdOnSJcOHD09SM/rv/vvvz4QJE9KqVavSdqye/nrxxRdv1DFc0+9+97usXLlyndO0P/7447z44ovrvF1dx72u99bly5dn8ODBOe+889aKb0uWLMnNN9+c6dOnJ6mJoW+88Ubp9AXTp08vnRvx077yla/kkUceyfLly7No0aKMHDmyFIDfe++90vtfXfdfXl6ec845J2+99Vbpede0adPScmuup67933bbbTNp0qTSe91bb72VpUuXrvXHpY39vbjaQQcdlPvvvz/77LPPJoXav6V/jK0AAIC/koO7dMzF39g/h133q6ysqMzxe++WMw76y7f03Xv2v+XG372Uc+8ZnrfnzE/TRg3Tbfv2+fmJX8+/7b3uk6mf2GuP7H7Jzbn06L+MqGvdrEme+I+Tc/59v8u8JeUpq1cvp+3fLTu0a/uZRgD+taw+/9A777yz3lEuU6dOzQknnFDrsmuvvTbbb799ysvLM2bMmFx99dVr3W6fffbJr3/96yxcWLN/e+21V4YMGZKPPvoorVq1Sv/+/UvL1nXdmi677LK8+eabpWl3zz//fHbddddccsklGT16dJYuXZouXbpk2223zemnn56BAwdm8eLF2WGHHWqt88EHH8wRRxyR9u3b55BDDimdYL66ujrdunXLsccemyRZtmxZbrvttnTp0mW9UylPPPHEJDXTAVd/0+Xqb3rs2bNnXnzxxdI3Sx5//PHZa6+98rOf/SwDBgxIz549M2zYsLz55ps58sgjM3jw4Jx//vlp27ZtTjrppPz85z/P1VdfnZ/85Cel+ysrK8vZZ5+du+66K0888UR23nnn9OjRoxRM//Vf/zX3339/zj///CQ1wfB73/veOrd9TbvsskuOPfbYXHnllamsrEzjxo3zrW99q/TlImvalP0655xz1rverbbaKqeeemquueaaNGjQIPvuu2/at2+/zmmVVVVV6dWrV4YMGZJZs2alZcuW6devX+n6Dh06pH379qX1rsudZ3wz3/3lY9n8rKuzQ7s2+XXfb5W+zOf7X+mRrVq1yICnRufce2uizL9suXlO7LVH+h22zzrXd8iuHfOd22q+8GP7L7QpXT7srOPS5+7fptMFN6a6ujr77rRdDtp5h3WuY31WrVqV73znO0lqRkYOGTIkt9xyS44//vgcffTRtZ7vRx99dJYsWZJLLrkky5cvzxZbbJFzzz03rVq1yqJFi2o9h+t6DX3aiBEjMn/+/Jx55pm1Lr/iiivq/PKGBg0a5MILL8ydd96ZYcOG5Qtf+EIuuOCCNG/efIPPnR/+8Ie5++67c88996R58+Y56KCDak2JnDt3bmn03JoOO+yw3HzzzTnzzDPTuHHjHHHEEesMMBvSv3//3HHHHTnvvPOS1LyPfdbR0VdddVXpddmuXbscfPDBOfLII0vX9+3bN3fccUf69euX6urqdO7cuRS1zz333AwZMiRPP/10WrRokT59+qxzv+s6ns8880xmzZpVa/Rto0aNcvfdd+fdd9/NsGHD1vmHnw0d9/W9t77yyiuZO3dufvrTn9a63QknnJCjjjoqp556am655ZYsXLgwzZo1y9e+9rXSe+WYMWOycOHCdX5JyTe/+c0sXLgwffr0ScOGDdO7d+/S+RFHjBhR+vbeDd3/t771rdxwww0pLy/PDjvskIsuuqg0knDN9dS1/0cccUTmz5+fCy+8MPXq1Uvjxo1z7rnn1jo2m/J7cc3L77rrrs/8XPtbqLdy5crPfiZe4HM1c+bMWieIBgD4exk8eHC22WabUljb2OtYvzWnwd1www3p0qVLvv71r3/OW/X5uuGGG7Lnnnvm4IMP/rw3Bf7hDRgwIBdeeOHnvRlJas6N+PTTT5eiN58/U4ABAAA+Z1dccUUeffTRJDXn0ZsyZUqd59H6ZzB58uS88847m/Ttv/DPav78+TnssMM+780o+eSTT0qj+vjHYAowAADA5+z000/PrbfempEjR6ZBgwY54YQT/qlnelxxxRWZM2dO+vXrV/piFGD92rZtu84pxZ+Xf/Y/YPwjMgUY/g8zBRgAAADYEFOAAQAAAKDABEAAAAAAKDABEAAAAAAKzDkA4f+whg0bft6bAAAAAPyDMwIQAAAAAApMAAQAAACAAhMAAQAAAKDA/j89h62MWLJtcgAAAABJRU5ErkJggg==", - "argumentInfo": { - "argumentName": "base64image", - "formattedValue": "base64 data: iVBORw0KGg..." - } - } - ], - "status": "PASSED", - "durationInNanos": 2404217, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 5117437, - "depth": 0, - "parentFailed": false - }, - { - "name": "showing thumbnails is set to", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "showing thumbnails is set to" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "showThumbnails", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 384902, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 365693817, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 326922341, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment22.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "jgiven-html-thumbnail", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "jgiven-html-thumbnail" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 19955443, - "depth": 0, - "parentFailed": false - }, - { - "name": "the image is loaded", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the image is loaded" - } - ], - "status": "PASSED", - "durationInNanos": 17135023, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "true" - ], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 1060658493 - }, - { - "caseNr": 2, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 190102, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has an image attachment $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has an image attachment" - }, - { - "value": "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OM2f1v/pto+hAFBERERERERE7qi/1PkLT9Z/kqrlq+Ln5YeHh4f9JXIvysjIsL/iUuKITY9l4W8LWR21+o6MpwBQRERERERERO64csZyNPJuRAf/DrSq3Iqa7jWxGWz4mf2cXZpIqYq3xIMVzmWeY9/lfeyM3cmvyb+SY825Y2MqABQRERERERERESnDjM4uQERERERERERERO4cBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhBpvNZktOTiY5OZnc3Fxn1yMiIiIiIiIiIiK3yMXFBW9vb7y9vTEnJyeTlpaW/8ZsdnZtIiIiIiIiIiIicovy8vJIS0sDwJiUlESFChUU/omIiIiIiIiIiJQRZrOZChUqkJycjDEvL0/hn4iIiIiIiIiISBljNpvJzc3VJiAiIiIiIiIiIiJlmQJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhZmcXcCPOnz/P0aNHAcjNzaVixYq0adMGFxcXAGJiYggPDycnJweDwYC/vz8tWrTA1dWV7777jry8PEwmk70/d3d3evbsSXR0NDt27KBPnz54e3sDkJaWRmhoKL1797a337t3L1FRUQwcONDeT2ZmJt988w2enp72dmazmZYtW1K1alUAvvrqKx599FFcXFzIycnh4MGDXLhwAYPBgIuLC0FBQdSqVevOfni/ExcXx44dO+z3YDKZcHV1xWAw0K9fv2t+XgBHjx7l7NmzGI1GcnNzCQwMpEmTJmzfvp34+HisVisZGRlUqFABgPvvv5/69euX6j0uXbqUX375BbPZTEZGBt27d+epp54C8r++n376KTt27MBkMuHh4cFf//pXevToAcDPP//MO++8w4IFCxzq/vzzz1m0aBE///wzW7du5YMPPsDX19dh3FGjRpGQkMDq1asBuHTpEpUrV8ZsNtO0aVNGjRrF8OHD+fbbbx2u69atG+vWrSMyMpI5c+Ywf/584uPjGThwIC+99BJ9+/a1tx0yZAiLFi3Cw8OD8+fPM3fuXCIjI3Fzc8Pb25unn36aFi1aXPPz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RERERERERERulYuLC15eXnh7e2PIycmxObsgEbk5586do06dOs4uQ0RERERERETuYtoEREREREREREREpAxTACgiIiIiIiIiIlKGKQAUEREREREREREpwxQAioiIiIiIiIiIlGEKAEVERERERERERMowBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIrcBWw2G/v37+fChQsAxMbGsmvXLidXJSIiIiIiIiJlgQJAESez2Wzs27ePK1eu4OXlxeXLl9m9ezeVKlVydmkiIiIiIiIiUgYoABRxooLwLz4+no4dO5KZmcmuXbto1KgRDRo0cHZ5IiIiIiIiIlIGKAAUcRKFfyIiIiIiIiJSGhQAijjJqVOnuHDhAq1bt8bNzY09e/bg7++v8E9EREREREREbisFgCJOUrt2bapUqcLBgwfJy8ujRYsWXLp0iejoaGeXJiIiIiIiIiJliAJAEScxmUy0bdsWDw8Ptm/fTqVKlWjdujUHDx5UCCgiIiIiIiIit40CQBEnUggoIiIiIiIiInea2dkFiNzrCkLAPXv2cPnyZQIDAwGIjIy0/1tERERERETkXmaz2UhISCAvL6/I80ajkUqVKmEyme5oHwWysrJITk4udNxgMODr61uiPn777TfOnDmDzWa7Zjt3d3c6duyIi4vLdfssjgJAkbuAyWSiffv29vcBAQEEBAQ4sSIRERERERGRu8P58+dZsGABSUlJ12zn7u7OsGHDCAoKuiN9XO29994jNTW12D4effRRWrZsec0+FixYQG5u7jXbXN1n27ZtS9S2KAoARURERERERETkrrV8+XJatGhB3759i51ZZ7Va2bFjB0uWLGHy5MmF2t2OPq6WmprKpEmT8PPzczgeGRnJ3Llz+eKLL8jKyqJDhw7F9lHS8A8gJyenxG2LomcAioiIiIiIiIjIXevChQu0b9/+moGc0WikQ4cOZGZmkpCQUKI+1qxZw5o1a0rcR0lUrFgRd3d3AFavXk1WVtZN9XO7aQagiNyy5cuXs2vXruu2e/LJJ687BVpERERERERuTutVralgroC72R03sxvuJnc8zB5U9ahKPe961PWuS12vugSU/2M9cspms2E0Xn8OW0Ebq9Vaoj6KehbgtfooCV9fX6ZMmQLA+PHjSU5Oxs3N7ab6up0UAIrILWvdujU1a9a0vz9x4gQRERH07NkTHx8f+/H77rvvto05e/ZsQkJCHJ6dKCIiIiIicq9Ly0sjLS/N8WA8bDy30f7WzeRGfe/6NK7YmGDfYJpUakKNCjVKuVIpTQoAReSW1atXj3r16tnfZ2dnExERQfPmze/IZiZWq5Vz584REhJy2/sWEREREREp67IsWRxOOMzhhMOsOLUCgIrlKhJcKZiWfi3pE9gHXzdfJ1dZ2D/+8Q8sFkuR50wmE9OnT79uH2vWrLHP/Dt16hQAq1atAsBsNjNgwIBir7XZbCxdupTw8PAS1zxlyhQqVarEoEGDrruxyJ2kAFBESo3NZmPLli3s3LmThIQE3N3dady4Mf369cPT09PebufOnYSGhhIXF4fRaKR69er06tWLhg0bcvr0aWbPng3AihUrWLFiBW+99ZbDTEMRERERERG5MYnZiYReCiX0UihzjsyhVeVW9K7Zmx41e+Bh9nB2eQC89tprxS7NLckS4VsVHR3Nvn377O/nzp17zecSAvTv3x+TycRXX33Fe++9d6dLLJYCQBEpNWvWrGHbtm307NmThg0bEh8fz7p164iOjuall17CbDYTERHBihUr6Nq1K4888gg5OTns2rWL//73v7zyyivUqFGDkSNH8tlnn9GrVy+aNm3qEB6KiIiIiIjIrbHarOy9vJe9l/fyzv536FWzFwPrDKRV5VZOratSpUq33MfVM/wKZv4NHjy4RNdmZmY6vE9KSrruNWfOnMFgMJCenn4DVd5+CgBFpFQkJycTGhpK9+7d6dOnDwB169bF19eXOXPmEB4eTps2bThx4gTly5d3+KXcuHFjfv75ZywWC66urlSpUgUAHx+fO7LEWERERERERP7PxnMb2XhuI019mzK80XA6V+vs7JL+MA4fPuzsEgC48/MjRUTI3xjEarXSpEkTcnNz7a/77rsPNzc3oqKiAPD29iY9PZ3NmzeTnZ0N5D/L4aGHHqJ69erOvAUREREREZF72qH4Q7y4/UWG/jSUDWc3YLEW/Ty+281oNBa5Y+/vFTwf0GwuPN+tqD7MZnOhttfq4/d8fHzw9fUt9nWjypcvz4QJE2jWrNkNX3s9mgEoIqUiOTkZgJkzZ17zfPfu3YmJieHbb79l3bp11K5dm+DgYNq1a3dXbJ0uIiIiIiJyr4tMjuT1Pa/z2a+f8UqLVwipcmc3aKxbty4bN26kV69exQZzVquVnTt34uPjU+RS4aL66NSpEwBxcXEl6uP3Y//973/Hz8+v2LrHjx9v//f1nhXo6enJuHHj8Pf356mnnmLp0qXs37//mtfcCAWAIlKqnnzyySJ/kbq7uwP5v1CffPJJ+vTpw+HDhzl69Chr165ly5YtvPjii9rsQ0RERERE5C4RlRrF2G1j6VmjJxOaTaCye+U7Ms7jjz/OV199xQcffFDsJiAGg4GAgACefvppDAbDHemjfv369kkt48ePx2q1FttXgYkTJ1K1atVrtvH29mbcuHH2x10ZjUaGDRuGq6srO3fuvOa1JeW0ADAqKoo1a9Zw8uRJUlJS8PDwIDg4mEcffRR/f38Ann32WZKTk5k9e7bD1MmVK1eyZs0aBg4cyKBBg5g4cSJnz57FZDLxySefUL58eXvbf/zjH8TExGA2m1m8eDHp6emMHj0agDp16vDuu+/a2yYkJPDcc88B0LRpU1555RWHmv/1r39x7tw5KlasyOzZsx12mNm7d2+hmU1GoxE/Pz+aN2/OoEGDuHjxIm+//Tb+/v5MmzbNnhynpKQwYcIELBYLH3300U1NExW52xUEd+XLl6dWrVrXbe/n50e3bt3o1q0b58+fZ/r06Wzbto3+/fvf6VJFRERERETkBvx0/ifCLoUxqvEoHqv/GC5Gl9vaf8WKFRk3bpzT+7iat7c377///jXbmM1mKlSoUOz5unXrkpqayjPPPFMoCzIYDAwZMgQ3Nzd27NjBfffdd0v1OiUAjIuL47333iMrK4vWrVvj6+tLZGQku3bt4tSpU0yfPv26UyOLYrFYiIiIoEOHDgCcP3+emJiYYtufPn2ahIQE+2yk8PDwYtueP3+ec+fO4ebmRmJiIr/++itBQUGF2vn4+NCgQQMAcnNzOXnyJD/++COxsbG8/PLLdOjQgR07drB582YeeughAFavXk1mZiaDBw9W+CdlVv369TEYDOzdu5eGDRvaj2dmZvLNN9/QtWtXqlevznfffUflypVp166dvU2NGjXw8PAgNzcXwP6XGJvNVro3ISIiIiIiIkXKtGQy+/Bs1kWvY3qH6dSoUMPZJd1Rr732Gmlpadds4+7ubl/tVpSCSWjFMRgMPPLIIzzyyCM3VePVnBIA/vbbb2RkZNChQwd7+mqz2ViwYAGQ/yywG93a2cPDA1dXV/bv328PAA8cOACAv7+/fT13gYCAAC5cuEB4eDg9evQA8gPA6tWrc/HixUL9b9++HYB+/fqxcuVKduzYUWQAWLt2bV544QX7+8TERJ577jkOHz5MTk4Ojz32GOHh4XzzzTd07tyZxMRENm/eTOXKlXn44Ydv6J5F/ki8vb154IEH2Lp1K66urgQHB5OVlcXmzZtJTEy0f/9nZ2ezcuVKkpKSCAwMxGq1cuDAATIyMmjatCmA/S8o4eHh9hmF3t7eTrs3ERERERERyXcq5RRDfxrKm63fpGfNns4u545xdXW94ezKmZyyC3DFihUBOH78OIcPH8ZqtWIwGBg1ahSjRo26qQ8wJyeH4OBgIiIi7Lu6hIeHU7t2bcqVK1eofaVKlfD19bXP+svKyuLYsWP22Xu/t2vXLtzc3OjTpw9VqlRh7969JdqBpmCGktFoxGQyUalSJfr3709KSgrr169n+fLlWK1WHnvsMVxdXW/4vkX+SAYMGED//v2JjIxkwYIFrFy5El9fX1544QV7gDdw4EB69OjBvn37+Oyzz1iyZAnx8fGMHDmS+vXrA/mBf48ePTh79izLly8nKSnJmbclIiIiIiIiV8myZDFx90Te3f8u2ZZsZ5cjOGkGYOPGjenSpQtbt25l6tSpuLm5UadOHZo1a0a3bt0cnuFXUlarlWbNmhEWFsaxY8eoVasWJ0+eZMCAAUXummK1WmnatCmhoaFkZmZy5MgRcnNzadasGb/88otD2xMnTnD58mXatWuHq6srrVu3Zv369URERNCqVSuHtlFRUcyZMwfIX5L822+/YbPZ+NOf/mRf1tynTx+2bt3Kt99+S15eHo0bN6Zt27Y3fM8id6vu3bvTvXv3QscNBkOx5woYjUZ69+5N7969rzlG37596du37y3XKiIiIiIiInfG2jNriYiLYHqH6QR6Bjq7nHuaU2YAAowePZpp06bx2GOP0aRJE86cOcOyZcuYOHEiycnJN9Vns2bNMJlMhIeHExERgc1mKxTQXa1ly5bk5eVx6NAh+1LCRo0aFWq3Y8cOAEJC8re1btOmjcPxqyUmJrJr1y527drF3r17SUlJYeTIkTz22GP2Ni4uLjz++OPk5eVhMBh48sknb+p+RURERERERETuZlGpUQzbNIw9sXucXco9zWm7AEP+c/hq1Mh/KGROTg4zZ84kIiKC7du306dPH1xc8neNycjIcNgco2C53++XzBYEeEePHiU5ORlfX19q165d7PjBwcG4ublx5MgRDh48SPPmzQttPmK1Wtm9ezcAc+bMsc/ug/wlxllZWbi5udmPtWjRgn/+858AzJ49m927d5OYmFho7IKlxu7u7tSsWfM6n5SIiIiIiIiIyB9TpiWT58OeZ1r7aXSp3sXZ5dyTnDID8Msvv+Tpp59m27Zt9mOurq5Ur14dyA/dAPv7q9slJCTYl/TWqlWrUN+tW7fm4sWLHDp06Jqz/wrGbNq0KTt27CAlJaXI9ocPHyYlJYWqVavStWtX+6tmzZrk5OQUuby4wNChQzGbzXz33Xdcvnz5mrWIiIiIiIiIiJRVebY8Xtr5EhvObnB2Kfckp8wADA4OZuPGjSxYsICdO3dSqVIl4uLiOHr0KCaTiebNmwMwePBgjhw5wvr16zl69Cje3t6cPHmSzMxMgoKCCA4OLtR3q1atWLx4MVlZWdcNAAva79mzBxcXF5o1a4bFYnE4X7DMt2/fvg7PLTtw4AAfffQRO3bsoGPHjkX2XaVKFXr16sW6detYsmQJEyZMKPFnJCIiIiIiIiJSllhtVl7f8zqZeZkMrDPQ2eXcU5wyA7BFixa8/PLLBAUFER0dTWhoKNHR0TRr1oxXX33Vviy4bt26TJo0iaZNm5KYmMhvv/2Gn58fQ4cO5Z///CcGg6FQ3wXLfj08PLj//vtLVIvRaLQvB75aTk4O+/btw2w225/7V6Bp06Z4eXlx6NAhUlJSiu1/wIABeHp6sn//fiIiIkry8YiIiIiIiIiIlFlTwqew6fwmZ5dxTzHk5OTYnF2EiNycc+fOUadOHWeXISIiIiIiIneB1qtaO7uEEjMbzczpNIeQKiHOLuWe4LRdgEVERERERERE5N6UZ81jwvYJ/Jb0m7NLuScoABQRERERERERkVKXaclkXOg4zqedd3YpZZ4CQBERERERERERcYqk7CSeD3uebEu2s0sp0xQAioiIiIiIiIiI05xNO8sHBz9wdhllmtnZBYiIiIiIiIiIyK3b/uftxGXGkZiTSGL2/71OJJ1g7+W9JGQnOLvEYq09s5a2VdryUM2HnF1KmaRdgEX+wLQLsIiIiIiIiJTU6ZTT7L28lz2xe9h/ZT9peWnOLsmBm8mNrx/6murlqzu7lDJHAaDIH5gCQBEREREREbkZFpuFTec38dXJrziacNTZ5dg19GnIou6LcDG6OLuUMkUBoMgfmAJAERERERERuVWH4g+x7OQytlzcQp41z9nlMDZoLCPvH+nsMsoUBYAif2AKAEVEREREROR2iU6NZuqBqey9vNepdbiZ3FjTew1+bn5OraMs0S7AIiIiIiIiIiJCoGcgnzzwCdPaTaOqe1Wn1ZFlyWJGxAynjV8WaQagCGC1WsnNzSUvL8/+uprZbLa/XFxcMBrvjuxcMwBFRERERETkTsiyZLHg2AKWnlxKrjXXKTV82uVTWlZu6ZSxyxoFgHLPy87OJj09HZutZD8KBoOBChUq4Orqeocruz4FgCIiIiIiInInRadG89qe1zieeLzUx67nVY/lDy0v9XHLortjGpOIE1gsFlJSUkhLSytx+Adgs9lITU0lJSUFq9V6BysUERERERERca5Az0Dmd5lP68qtS33syJRIfjj7Q6mPWxYpAJR7Vnp6Orm5Nz+NOTc3l/T09NtYkYiIiIiIiMjdx93sztzOc+lcrXOpj734t8WlPmZZdFcHgK+//jqbNm0q9O8/uqVLlzJ37lxnl3FPy8rKuqXwr0BOTg5ZWVm3oSIRERERERGRu5fZaGZ6h+n0DexbquOeTD7JrthdpTpmWWR2dgFr1qxhzZo1jBw5ks6dbz5J3rp1K1u2bCE2NpacnByqVq1Kjx496N69+22s9vbo0aNHoU0mpPRYLBYyMjKu2SYhIYHp06cD8N57712zbUZGBi4uLphMpttWo4iIiIiIiMjdxmgw8lbIW1T1qMpnv35WauN+eeJL2lVtV2rjlUVODQBtNhthYWGEhISwbdu2mw4At2/fzrJlyxg+fDgNGjTAYDBw5MgRFi9ejJubGx06dLjNld+aqlX/H3v3Hdfk1f4P/BMg7I2AqLhQXMWJWlBQK5Radx8Vrdai1QcH7tVa0VYfrVa0iFYrzloVB7aiVqVFWYqjCKhVQFAUFNkzQBKS8PuDH/c3N4SElYB4vV8vX82dnJxzcmeUXLnOuZqvlDapzNpTtOffzp07MWTIEERHRyvsr6KiAkKhEDo6Ok01RUIIIYQQQgghpMVa2Gchcvg5CEoJUsl49zLvIakwCd2NuqtkvNaoWQOA//77L4RCIWbOnIlVq1YhPT0d7dq1q3c/T58+hZ2dHYYOHcpcN3z4cOjq6sLQ0JC57s8//8TNmzfB4/HQo0cPzJ49G23atAEA/PXXXwgNDUVOTg7Mzc3x+eef44MPPgAAbNq0CQ4ODnj27BkyMjIgFAoxbdo0DBkyBABQWFiIkydPIj4+HiKRCN27d8fs2bNhbm6OsrIyLFy4EPPmzcOZM2cwadIkZGZmIj8/H15eXgCAhIQEnDt3Dunp6TAyMsKgQYMwZcoUqKmpIScnBydOnEBSUhIAoFu3bvDw8ICZmVnDTjqpU/alt7c3UlJS6hQArGufhBBCCCGEEEJIa7G2/1rE5cThVUjYGuEAACAASURBVPErlYx3NvksNgzaoJKxWqNm3QMwPDwcQ4cOhbGxMezs7BAZGdmgfjp06ID4+HgkJLBLUg8cOBDdunUDANy7dw/BwcFYtGgRdu3aBT09PRw4cIC57cqVK/D09MTBgwcxdepU+Pr6IjMzEwCgrq6OkJAQzJgxA9u2bcO4ceNw4sQJJovs9OnT4PF42L59O3bv3g0tLS2cPHkSAKChURljvXv3Lr799tsaWY55eXnw8fGBs7Mz9u3bh8WLF+PWrVv466+/AABnz56FgYEBfH19sXv3bpiYmCAgIKBB54lUEovFCtvo6uo2eZ+EEEIIIYQQQkhroaWuhR8dfgRXjauS8f5O+xsiCSXfNFSzBQCLiooQGxuLYcOGAQAcHR1x+/btBgVSXF1d8eGHH2Lnzp1YtWoVDh48iIiICFaF1sjISAwbNgw2NjbQ19eHu7s7XFxcIJFIEBYWhhEjRqBz585QU1PDgAED0KtXL9y5c4e5/4ABA2Bubg4A6NWrF3g8HoqKigAAHh4eWLp0KfT19aGrq4shQ4YgJSWFNUdHR0dYWVlBS0uLdf2dO3dgZWWFkSNHQkNDAx07doSzszOTeVZaWgptbW1oaWlBR0cHHh4eTOYgaRhlBOskEkmT90mIMh07dgw2NjawsbHB2LFjG92fQCBg+rOxsalz9iwBPD09mfO2ZcuW5p6Oyki/Xu7ebfymzosWLWL627RpU6P66t+/P9NX1Q9yhBBCCCGkJhtDG6zou0IlY5WIShCRHqGSsVqjZlsCfOvWLVhaWqJz584AKgNsx48fR2xsLOzt7evVl4aGBmbNmoX//Oc/iI+Px7Nnz/Dnn38iICAAS5YsQe/evZGVlYWBAwcy9zE2NoaDgwMAIDs7G/Hx8bh8+TKrXwMDA+ayiYkJc5nLrYxuC4VCAJVZfIGBgUhJSYFEIoFIJKqxx5yFhYXMuWdnZ9dY9mxlZYVbt24BACZOnIi9e/fi4cOHzDLnnj171uv8EDYNDY0mX7JLBUBkk0gkuHPnDkJDQxEfH4+XL1+iqKgIfD4fWlpa0NXVRfv27dG9e3cMHz4cH330EfT19Zt72oQQQgghhBBC6mhat2kITw/Hvax7Sh8r+HUwPurQ8oq9vguaLQAYGRmJzMxMeHp6MtcJhUJERkbWOwBYRUdHBwMHDsTAgQPh7u4Of39/BAQEYMuWLeBwOLUWfuByuZg5cyZcXV1r7ZvD4ci8XiwWY/fu3ejbty9++OEH6OjoICYmBocOHWK1q2+AqCpAZWtrCx8fHzx+/BgPHz7ETz/9hNGjR2PatGn16o/8H2UEAKuWepP/Exoaiq1bt9bIhq1SVlaGsrIy5Obm4tGjR7hw4QKMjIywbNkyfPnllyqebevy+PFj3Lx5E2ZmZpg1a1ZzT4cQQgghhBDSyq3otwLT/56u9HHC34SjpLwEelw9pY/V2jRL1CIxMREZGRnw9vaGnt7/PWlpaWn4+eefkZ+fz8q4k0cikeDYsWNwcnKCra0tcz2Hw0HXrl2Z4hkWFhZ4+/Ytc3tRURHCwsIwZswYWFpaIi0tjdVvTk4OzMzMag38VcnLy0Nubi5cXV2ZKrAvXryo09wBwNzcnLXUGADevn3LZAwWFhbC0NAQ9vb2sLe3R79+/XDkyBEKADaComBsRkYGNm/eDIFAgIKCAixatAgjRoyAu7t7g/t83xw5cgTbtm1jXWdgYICePXvC3NwcOjo64PP5ePPmDRISEsDn8wFUvt43b96M5OTk92opZFMLCgrCsWPH0L17d5UFADU1NREeHs4c15b1TAghhBBCCGl9uhl1w9hOY/Hnqz+VOo6oQoS/X/+NSV0mKXWc1qhZAoDh4eHo27cvunbtyrre0tISbdu2xa1btzB+/Pg69aWmpgaxWIyDBw/C3d2d2ccvJSUFf/75JwYPHgwAcHJywrFjxzBgwABYW1szVXcnTJiAUaNGYd++fbC3t0efPn2QnJyMPXv2YOnSpQqX2xoZGYHL5SIpKQmWlpaIjY1FYmIiBAIBysrKFGaGOTo64uLFi4iIiMCwYcOQlpaG8PBwTJ48GRKJBN999x1cXFzg4uICAHj+/DmzFyFpGC0tLZSWltaaEdq2bVvs37+/zv1xOJwaezu+z+7fv48ffviBObaxscHXX38NZ2dnme8HgUCAq1evYseOHcjOzgZQWVhn8ODBmDBhgsrm3ZrExcWpfEwOh4MOHTqofFxCCCGEEEJIy7CozyIEpwZDVKHcQh2RbyMpANgAKg8AlpaW4p9//mEt/ZU2fPhwhIeHY9y4cXXu86uvvsKVK1dw8eJF5ObmQiwWw8LCAqNHj8ann34KABgyZAjy8/Ph7+8PPp+PHj16YNGiRQCAfv36Ydq0aThx4gQKCwvRpk0bzJw5s0577WlqamL27NkIDAzEmTNn0L9/fyxduhQ7duzAmjVrsHPnTrn3NzExweLFi/HHH3/g1KlTMDExYYKSHA4HS5YswalTpxAUFAR1dXXY2NjUeu5I3XA4HOjp6YHH4zVJf/r6+gozRd8nv/zyCxNc7dy5My5cuMDaT7M6LS0tTJ48GQ4ODpg4cSJycnIAAD4+Phg3bhzU1Jq1WPk7p7y8HE+ePGnuaRBCCCGEEELeM5a6lnDv5o5TSaeUOk50FhUcbAiVBwB1dXVr7I8nbezYsUxFSuklgPKWA6qrq2PixImYOHGi3LHd3Nzg5uYm8zZXV9da9wDcuHEj69jU1BTHjx9njp2cnODk5MRq87///Y+5LN0WAGbOnMk67t+/P/r37y9z7K5du8Lb21vmbaThtLS0IBQKmUIuDaWpqQlNTc0mmtW7TyKR4Pbt28zx3Llz5Qb/pLVt2xYLFixg3jvZ2dl4/Pgx+vXrp5S5tlYJCQmNfl0TQgghhBBCSEN8bvs5TiedRgVkr7hrCiWiEiQVJqG7UXeljdEaUeUC8t7S09NDeXl5rUuBFanKJCT/Jy8vj1VgpUuXLvW6/7Rp02BpaQlbW1t06dJF4d6KRUVFuHDhAm7duoVnz54hPz8fYrEYJiYmsLa2hqOjIyZPnoyOHTvW2kdUVBS++OILAECvXr1w5coVAMCTJ09w+PBh3LlzB/n5+TAyMoK1tTU+++wzTJkyhbXsOz09Hb/++itCQkKQnp4ONTU1tG3bFs7Ozpg/f36NSt+1iYyMxNWrVxETE4PMzEzw+XyYmJgwfU2YMAE2NjYy7+vp6YmQkBDWdUlJSaz2GzZswJw5c2rcVzrL8vHjxwgICEB0dDQyMjIgFothZmaGQYMGYebMmbUWaRIIBOjduzdzfPbs2Rpt3d3dER1d+WvdL7/8AldXV0gkEoSGhiIgIACPHj1CQUEBtLW1YWVlBQcHB3h4eDDV4uV5/vw5AgICmAJTYrEY7du3x9ChQ+Hh4cG8Fj08PBAZGQkA2Lx5c40fZOpLIBDg8uXLuHnzJhITE5GdnY2ysjJoa2vDwsICPXr0wEcffYQJEybU6ceCqmziiooK3LhxA+fPn0diYiIyMzOhpaUFS0tLDB8+HHPmzKnzkut79+7h2rVruH//PrKyslBcXAw9PT2YmpqiX79+GDVqFMaMGSP3/ebi4sIU9Nm0aRNmz54td8x9+/bhp59+AgAMGjQI586dq9NcZSkoKMCJEydw48YNpKWloaysDObm5rC1tcXEiRPx6aefKnUf1qr3R2lpKS5evIhLly4hNTUVubm50NfXR+fOneHi4oLZs2fX6f8J6enp+P3333Hv3j0kJyejqKgI5eXlMDAwgLW1Nezt7TF16lT06NFDbj9jxozBs2fPAAD79++Hm5sbeDweAgMDcfXqVaSmpqKgoACGhobo2LEjPvnkE0yfPr3WSuvXr1/H4sWLAQA9evTA1atXAQAxMTE4e/YsoqOjkZ2dzayysLe3h7u7e50LtwmFQly6dAmhoaF4/Pgx8vLyIJFIYGZmxpzD8ePHw9TUtNY+avu8zsjIwKlTp/D3338jLS0NIpEIRkZG6NOnD8aPH4+JEyfSXr2EEEKIiljqWKJ/m/6IzYlV6jixObEUAKwnCgCS95aamhpMTU3B5/Pl7glYHYfDga6uLrS1tZU8w3cPl8tlHaenp9fr/np6esyyfUXOnTuHbdu2obi4uMZtmZmZyMzMRHR0NPbv348vv/wSX3/9tczlxNLPY1lZGQDg5MmT2LRpE6tdbm4ucnNzERcXh/PnzyMgIAA6OjoIDQ3F4sWLIRAIWO1fvnyJly9fIigoCKdOnUKvXr1qfSxpaWlYunQpHj16VOO2rKwsZGVl4dGjR8xjWbduXY1z3RhVezMeOHAAPj4+NW5/8+YN3rx5g0uXLsHLywsrVqxo0DjVz3VpaSm8vLxYxUMAoKSkBMnJyUhOTsa5c+fw888/Y9SoUbX2+9tvv2Hbtm01Mh+TkpKQlJTEVIN3d3dHYWEhc3tj9+6MjY3F0qVLZb7OS0tLmddAcHAwfH194efnh4EDB8rtk8vlorS0FKtXr0ZwcDDrNqFQiOLiYiQnJ+P06dPYv3+/3POSk5ODlStXsrJyqxQWFqKwsBApKSm4ePEi9uzZA19fX/Tp06eOj1417t+/j8WLFyMvL491fdVrMjQ0FOfOncOePXuUNgcNDQ2kpqZi/vz5SE5OZt1WUFCAuLg4xMXF4fTp0zh9+jSsra1r7evAgQPw8/OTmaVbUFCAgoICPH78GMeOHcNXX32Fb775ptYtJqRfv8XFxUhLS8O8efNqzLHqsys2NhYnTpzA/v378cEHHyjsD6gM1MvayiQ1NRWpqan4/fffMXv2bGzcuFHuVhi3b9/GqlWrmH1epaWnpyM9PR1RUVHw9fXFt99+iylTpsjsR9bndWhoKLy8vJhiUtKPOyIiAhEREbh48SIOHz5MGfuEEEKIirhZuyk9APgg6wGm2VBx1PqgACB572lra0NLSwsikQgikQhCoZCVxQZUfgHU1NSEuro6uFwu7flXCyMjI1hZWTEVtw8dOgQ3N7c6LwOuq4MHD+LHH39kjo2NjeHi4gIbGxtwuVy8efMGN27cQGpqKkQiEY4cOYLs7GwmI0madGGS0tJShIWFYdOmTdDW1sbIkSNhbW2NwsJCREREICMjA0Bllty+ffvwySefwNPTExKJBI6OjujZsyfEYjFiYmLw+PFjAJWBlrVr1+Ly5csyH8vLly/x2WefMYEpdXV1ODs7o2fPnmjTpg2ys7MRGRmJJ0+eMFXP3759Cz8/P1ZGy5dffglXV1fcunWLGcvS0hIrV65k2tS2nFpPT48J/nG5XDg4OKBbt26QSCRISkrCnTt3IJFIAFRmdg0cOBAjRoxQ/EQpONdLlixBeHg4DA0N4ezsDCsrK/D5fMTFxTHnTyAQYMWKFbhx4wbMzMxq9Hn58mV89913zLGOjg5cXV3RvXt3lJeXIyoqCtHR0Vi/fj309fVRUlLCtG1MMCAtLQ2zZ89GaWkpgMpzOHz4cHTp0gU6OjooKChAQkIC7t27B4lEgrdv32LOnDkICgqSm9Goo6ODxYsXIyIignVeSktLERsbi6dPnwKoDAYuX74cN27cQJs2bWr0k5OTgylTprAq3A8aNAgffvghzMzMUFJSgocPHyI0NBRisRgvXrzA559/jpMnT8LOzq7B56UppaSkYP78+cx+rWpqanBxcUG/fv2gpaWFtLQ0/P3334iKisLKlSthaGiolHnw+XzMmDEDGRkZ6NChAxwdHWFsbIy8vDzcvn2b+bxLT0/H8uXLERgYKPP/Efv378euXbuYYwMDA4waNQpt27aFlpYWMjMzERkZyfR35MgRcLlcrFmzRua8pF+/eXl58PDwwMuXL2FmZgZHR0e0bdsWPB4Pd+/eZbI337x5g6+++gqXL1+uUalbur/S0lKcP3+eCf7Z29ujV69e0NTUxKtXrxAREcEEMU+cOAEjIyMsX75c5jyvXr2KZcuWMZ8hBgYG+Oijj2BjYwMdHR28evUKN27cwNu3b1FUVIR169ahuLhYZrZy9c+QmJgYeHp6QiwWo2/fvujXrx+0tbXx9u1bhIeHM4HM27dvw8/PD6tXr5Y5R0IIIYQ0rY+tP8bOuJ0QV4iVNkZiYaLS+m6tKABICCqz+rhcLrhcLnR0dJp7Ou+0KVOmYO/evQCA5ORkfPbZZ9i4cWONfTIb6uHDh6wsNTc3N+zYsaNGkPGbb77BTz/9hAMHDgAALl26hJEjR9bYK1Q6K7CsrAybN2+GnZ0dDhw4ACsrK+Y2Pp+PL7/8klnCev78eSZIc+jQIQwYMIDV765du5hq0k+fPsW///5bI+tGJBJh4cKFTPCvc+fOOHjwILp168Zqt2bNGgQFBWHt2rUQiUS4fv06Tp8+zSyFAyorigOVmTtVAUBDQ8NaM2mkZWVlwdfXF3Z2dvDz86uxZPrx48f44osvmC/Tv/76a4MCgNLn+ty5c3j48CGmTJkCb2/vGssSz549i/Xr1zOP6Y8//sC8efNYbUpLS1n7w3bu3BnHjx9nZWAtW7YMwcHBWL58Ob7//nvW/RVVaZfnl19+YYJ/dnZ2OHbsGExMTGq0S01NxaJFixAfHw8ej4c9e/bIDERXuX79OhITE/HZZ59h06ZNcs8Lj8fDhQsXZBaG+uabb5jgn66uLvbt2yfzOUtOTsacOXOQnp4OHo+HNWvW4NKlSy0iU2rbtm1M8E9HRwe//vorBg0axGrz9ddfY+vWrTh58mST/9BQxc/PD1lZWfD29sbs2bNZr+Py8nJs2LABgYGBACorcD969KhGsD03N5f5XAQq36/+/v41/n9TXl6Or7/+GhcvXgQAHD58GJ9//jnat29fY17S8zh27BiysrIwZ84crF27tsbzd+jQIWzfvh1AZXDYz8+PtVdx9f5KSkqwfft2WFpawt/fv8Zn1+vXrzFv3jwkJSUBqHw/TJs2rcZ2By9fvsTatWuZ4N9HH30EHx8fGBkZsdp9++23+PHHH3Hs2DEAlc+9g4NDjWJs1T+v161bB2NjY/j5+eHDDz9ktc3Pz8fMmTORmFj55eD06dNYtmxZk2ZPE0IIIUQ2Q01DDLUciqiMKKWN8Zr3GkKxEJrqzf9367uCymsSQpqUp6cna7nrixcv4OHhgY8++ghbt25FSEgI8vPzG9z/nj17mC+TNjY22LNnj8wv/urq6li9ejWcnZ2Z6/bt21ejnfQXyuLiYuTl5eHQoUOs4B9QmSkqvfQ1NzcXT58+hY+PT43gHwAsWbKElZEUG1szBT4oKIjZw6sqwFE9+Fdl4sSJrPF9fX2brNjH8+fPYWFhgRMnTsjcL9HOzg4eHh7M8f379xu0d6b0uX748CFcXV2xY8cOmXuSubu7s4oj3bt3r0abS5cuITc3lznes2ePzOWXbm5u2L59O7MUskpjMnnv3r3LXF60aJHM4B8AdOzYEf7+/lBTU4O2tjZSUlLknrvExES4uLhg586dtZ6XwYMHM8f379+v0ebhw4e4efMmc7xly5ZaA7bdunWDn58fc5yUlFRj6XFzeP36NesxrFq1qkbwD6jMWvv+++9hb28vczuAppCYmIhvvvkGHh4eNbYR4HK58Pb2ZgXyZL1Wr1+/zrxf1dXV4evrK/PHJi6Xiy1btjCfaSKRCH/99ZfMeUm/frOysjBy5Ehs2LBBZvB2/vz5rB8/AgMDWdmw1fsrLy9HYWFhrcuFO3TogP379zPno7y8HKdPn67Rbv/+/cxS3d69e+Pnn3+uEfwDKp/HDRs2MK9TiUQiczuC6p/Xr169wuHDh2sE/wDAxMQEX3/9NXNcWFjIBAMJIYQQonxu1rILsDalNF6a4kaEQQFAQkiT0tHRwZkzZzB69GjW9a9evcLRo0fh6ekJe3t7fPzxx/jmm28QGBiIrKysOvWdmZmJiIgI5tjT01NhNsf8+fOZyy9evGCWltZm6tSpMDc3l3nbwIEDWV+SbW1tMXLkSJltNTU10bdvX+Y4NTW1RpvffvuNuTxr1iyFRR08PDyYwEBBQQFu3bolt319LFu2TO4SyqoMQ6Ay8yYnJ6fRY0p/OZdl2LBhzOWXL1/WuF06QDR06FCZgYoqEydOrLXaekNIB5sUZQ23a9cODx48wJMnT3Dx4kW5gUcOh8Nk+NVG+rl49epVjdvPnz/PXO7QoQMmTZokt78BAwawCjkEBQXJba8Kf//9N3OZy+XC3d1dbvsFCxYobS4dOnRgBcCr09fXZ2X8yXqvf/LJJzh//jz2798PHx8fmcvZq+jq6rKej6ofCRRZtmyZ3Nvnzp3LXC4vL2cFsWUZMWKE3PdM165dWZ9/0p/NQOV7RPq1tHLlSoWZpV5eXszlyMhI1p6dsowbN471OVvdhx9+yAoayvocIYQQQohyjGwv+3tSU3pVXPNvYVI7CgASQpqcvr4+/P39cfz4cZmZGUBl1tm5c+ewbt06ODg4YNKkSQgICKhRTENadHQ0K3vK1dVV4VyGDh3K2jj+wYMHctvLK6qgqanJyvQaPny43L7atm3LXK6ebVNcXIwnT54wxx9//LHcvoDKLETp4I+s4g4NweFw4OYm/xc66ccCoNHZVj179lRY3Vd62aOs8R4+fMhcVvRcAJXB3aYivdTx2LFjNfYNra6u+9P16dMHnTp1kttGOjtV1nmRzgqsy3sEACuQo+g9ogrSBXH69esHXV1due2HDRumtKWdbm5uMgsISZN+f8h6TszMzDBw4EC4ublhwoQJCseU3tdRURAMqHxNyAuEAZWvLenXofTnjyyffPKJwnGlP48SEhJY74Po6GjmWEdHp07v0QEDBsDY2BhAZfajrGzK+sxRU1OT9YOOsrJECSGEEFKTnoYezLRr/9GzKbziUQCwPigASAhRGicnJ5w6dQpRUVH4/vvv4ebmJrNgAVC5z9yGDRvg5OSE0NBQmW2qCiAAlV+46xJUUVdXh42NDXMcHx8vt72ioJR0MFFRW+mqmuXl5azbqop6VOnSpYvcvqr06NGDuVzXzCBFrKysFO6fVr3qdfXHU1/Sj6M20pl11ccrKSlhZSF27dpVYX/SWVWN9Z///Ie5HB4ejnHjxuHs2bOsJcYNYWtrq7CN9OuqeuCRz+fjxYsX9eqveruioqJ6V/Buas+fP2cuK3qfAZWBnrq8BhqiLudQ+v1R1/dGXl4eHj9+jDt37iAiIgLh4eHMP+lquWKx4s2z5VUZr8LhcFjnsqowSGP6lP7cEovFeP36NXMsHcS1trauU4CWw+Gwzreiz7jGfo4QQgghRLk66tfcXqgpUQZg/VAREEKI0llaWmLWrFmYNWsWgMolcg8ePEB0dDRu377NqlSam5uLefPm4euvv2Yt3wXACvhYWlrWeXzpDBBFAZr6FBJQ1FbeUs/q+yA2JDjVVEGaujzmpq58XZfgrbwxqz+PtS3bltaUAaKZM2fi/v37uHr1KoDKvfPWr1+P9evXw9bWFkOGDMGwYcPg6Ogocy+/2jT2ucjLy2Nlydb1fVL9/OXm5tYo6KBKeXl5zOW6PLcA5C6rbYymfH88f/4cR48eRVhYGFNVvCnU9bmSPpcFBQWN7rP6cyPdp/Rz+OzZM9YPMXWl6DOusZ8jhBBCCFGujvodEZtTcy/0ppJdlq24EWFQAJAQonIdO3ZEx44dMXnyZACVWXlHjhzBH3/8wbTZsWMHhg4dylrWJr18S9GSQGnSbauqitZG0VI/aY35YlmXZX2KKHosddUcX5DV1dUbdf+qwgJV6lK9W01NDfr6+k1y3tTU1ODn5wdnZ2f88ssvrL3Fnj17hmfPnuHkyZPQ0tLCRx99hAULFsjdo7BKY5+L6ksc6/o+qd6uqV5bDSW9ZL569mlt9PT0lDKXpnp/HDlyBNu3b2dl/jaVuj526XNZVcW6MX1Wf26k+ywqKqrTnOSpvnVCdY39HCGEEEKIcnUykL+1TWOVicsUNyIMCgASQppdr1694OPjgxEjRmD58uUAgIqKChw7dgw//fSTzPvUpwqt9Bfu+gT4lKn6PBYtWlTvPuoaGGmNqi+LrGuQpimffw6Hg6lTp+I///kPbt++jZCQEISFhbGWQQoEAly7dg3Xrl3DnDlzsH79epW+Buv6PqkelGru90lDqkwr2oexOf3+++/Ytm0bc9yuXTvMnTsXQ4cOhbm5OYyMjFgFMjZs2ICAgIA696+hUbc/56TPq6LnuC59Vn+epPuUfk+2a9dOYTEaWbp3717v+xBCCCGk5VB2ALC0XP4PmoSNAoCEoPLLb3l5OUQiEfNPmoaGBvOPy+U2+5fj1mr8+PEICgpi9gCMjo5m3S693EtRZog06ayU+izxVabqS9cWL178Xgf06qt6xpq84jFVKioqlFIEQE1NDU5OTnBycgJQWZk3KioKN2/eREREBPN5cuzYMWhpaWHNmjVNPocq1V9XdX2fVM8Ga+z7pLFZbrq6usxzxefz63Sf+nwmqJJYLMaPP/7IHPfp0wenTp2Se47rGwBVlM1XRfp9oig7tLS0VOHroPr7TrpP6ddimzZtsGrVqjrNkRBCCCGtB2UAtiwUxSDvPYFAgIKCAvB4PPD5fJlZJCKRCHw+HzweDwUFBRAKhc0w03eHUChsUAYPAPTv35+5LL2HFMDebyozM7POfUq3ret+YspmYWHBOn779m0zzeTdVD0wUf21IktqamqDX5f10alTJ8yYMQOHDh1CaGgoq1Lq0aNHWQUempqpqSnrB4q6vk+qt5P3PqnLOWzsEveqSrAAe+9PeaQzL1uSmJgY1nO+ceNGhYG1rKyseo1R13MkPY/aCjLVp8/qr2XpPqX3n6TPN0IIIeT9pKehnC1aqpSKKAOwPigASN5bYrEYRUVF4PF49QoKVGURFRUVKWUvp3dVeno6vv32W0yYMAF2dnaIjIxsUD/SGSXVvyRL7weYlZVVp4qrQqGQVRW1T58+DZpXU+vdGQAqKwAAIABJREFUuzdr/6rHjx8342zePWZmZqw9ylJTUxXep3pGqSq0a9cOv/zyC/NaFgqFSp2HlpYWqzKqdOVseaSrY5ubm9cIAEpXcK1LRp6iatuK1KdaLVBZfKK5KxfX5s2bN8xlNTU1DBw4UG77hrxG6loR/NWr/6uUp6jyeF36lN77UlNTE1ZWVsyxnZ0dczk7O7teP9oQQgghpHUoEyk3Q0/Z/bc2FAAk762SkhKUl5c3+P7l5eUtdslZczA2NsYff/yBJ0+eQCQS4ciRIw3qJywsjLksHcgAgEGDBrH2pQoODlbYX3h4OOt5HjJkSIPm1dS0tbUxYMAA5vjSpUt1ul90dDSePHmikky2ls7W1pa5fP/+fYXtAwMDm2RciUSClJQUXLlyhRXcqY2enh6rArGyPzc+/PBD5nJISEidfqgICQlhLst6j0hXMlaUzZWTk4MHDx7UZaq16t27N3P50aNHCpe4/v33340aT5mkA6Z12ULiwoUL9S6gkZiYqDAAmpiYyMrM7Nevn9z2VVsxyCP9vuvXrx9r37/+/fuztjWo62fcX3/9Vaf3FSGEEEJaPmUv0RVXiBU3Iox3NgDo7e3NfGGRvlxfmZmZ8PDwQEFBQVNOr9k05ly8T/h8fqOCf1WEQmGd96dq7XR1deHu7s4c37p1Cz4+PvUKVPn6+rIylsaPH8+63dTUFG5ubszx4cOH5S7HrqiowMGDB5lje3t72NjY1Hk+yjZ9+nTmcmhoKKKiouS2z8vLw8KFCzFhwgQ4ODjgyZMnNdpIfwFviiqcLZmzszNzOTQ0VG6GUXBwcJ2ChHWxbds2uLi4YNmyZfDz81PYvry8HGlpacxxu3btmmQetZF+XWVmZioMfIaFhbEy9qTvX6Vjx47M5aioKLnvax8fn0YX5Bg9ejRzWSgU4syZM7W2FQgEOHDgQKPGUybp5f4CgUDuUuWUlBTs2LGDlR1c14DxoUOH5N7+22+/MZf19fUxaNAgue0vX74sN6iYnp6OGzduMMcjR45k3a6vr49x48YxxwcPHlSYtX337l0sXLgQzs7OGDduHG23QQghhLzjlJ2hp8dV7hLj1qZZAoAFBQXw8PCQ+U96o2x55s6dq3AZTVPIycmBv78/VqxYgblz52Lx4sX4+eeflbqHU2Oo6ry8y8RiscJskosXL8LLywteXl44fvy43LalpaU1KpK+r5YtW4YOHTowxwcOHMDUqVMRHBxca6BUIBAgLCwMX3zxBfbu3ctc37dvX3z22Wc12i9ZsoSplvnq1SssW7ZM5hdkoVCIDRs2IDY2FkBlYGzlypWNenxNbdy4cfjggw+Y48WLFyMiIkJm28TERLi7uzN73RkbG9fIkATYy6YzMzORnJzcxLNuOSZPnsxkhAqFQqxYsUJmkY+wsDCsXr0anTt3rlEkoyEmTpzIXA4MDMSuXbtqLULC5/OxceNG5nkzMTGBvb19o+cgT7du3VgVV7ds2VLrkvy4uDhWURJHR0fWnoVVpLMCnz9/LjPYJBAIsHXrVpw/f561l2dD9OrVi9WHj48Pbt26VaNdbm4uFixYgFevXrH2nGtJBgwYwMpc3r17t8yszPDwcLi7u0NTU5Ophg4ACQkJCgOqJiYm+O2333D69GmZtwcFBbGqCs+aNYtVdbg6LpcLDQ0NLFiwQOZ+hAUFBVi6dCkzr+o/AFVZsmQJkz2an5+P2bNns5YNV6moqEBwcDD++9//Mtf1799f7hwJIYQQ0vIpOwCoqyG/qBlha9YqwEuWLGEFCwDU+Y89RXvXNAWJRIKdO3fC2toaq1atgrGxMfLy8nD+/Hns2rUL27Zta3HVYFVxXt51igpUvHz5EtevX8dPP/0ELpeLDRs2ICYmptbAakVFBYRCIXR0dJQ15XeGsbExjh8/jrlz5zJ7ssXGxmLRokVQV1dHp06d0KZNG+jo6EAgECAnJwevXr2qkY3Zu3dvHD58WOb7q3v37ti4cSM2bNgAoHK52KhRo+Dm5oauXbtCIpHg1atXCAkJYWWELV++HEOHDlXio68/LpeLn376CdOnT0dubi6KioowZ84c9O3bF0OGDIGRkRGys7ORkJDAyl7T09ODr68vK6hQRXrfLQCYNm0aHB0doa6uDn19fWzdulXpj0tVrK2t4eHhgcOHDwMA7t27BxcXF4wZMwadOnUCn8/H7du3cefOHWhoaGDr1q1YunRpo8e1s7PDF198wWRU7d+/H7/++iuGDRsGKysrGBkZobi4GOnp6YiMjGT94LBx40aVBDW+++47/Pvvv0hOTkZpaSk8PDzg4OCAoUOHwsjICAUFBYiJiWEFBtu1a4edO3fK7G/s2LHYtWsXk8G1Y8cOBAUFYdCgQdDX10dmZiYiIyORm5uLQYMGYc6cOfDy8gLQ8IrA3t7emD59OsrLyyEQCPDll1/C3t4effr0gYaGBlJTU3H79m2UlpbC0dERXbt2xcmTJwGgRf0oY2Jigs8++wznzp0DUBmMS0lJwejRo2FiYoKsrCyEh4fj8ePHUFdXx8GDB2FkZMTcPz8/H//9738xevRodOnSRWaAdvbs2fjjjz/g7e2NM2fOwMnJCebm5uDxeLh79y7u3LnDtO3cuTM8PT3lzlldXR3r1q2Dt7c3Ro8eDVdXV/To0QOampp4+fIlrl69yiq8s27dOpiYmNTop0OHDti+fTuWLVsGsViMhIQEuLm5wcnJCb169YKmpiYyMjJw//591l6t3bt3x9dff133k0wIIYSQFknpAUB1CgDWR7MGAE1NTWv9xb6wsBAnT55EfHw8RCIRunfvjtmzZzMbk3t7e2PEiBFwcXFh3U8gEODs2bOIi4sDj8eDjY0N5syZwyzBKSgowOHDh5GUlAQzMzPW8pTqcnNzkZmZiaVLl6J9+/YAKpe0zJ8/HzExMRAKhdDW1gafz8fp06fx4MEDqKmpYfDgwZgxYwa4XK7c+ZSVlWHhwoXw8vJCcHAwCgsLoa2tDU9PT2a8qKgoXLlyBdnZ2TAyMoKbmxtcXV0BAAEBASgpKUFpaSmSk5Ph5+fHOi9CoRDnzp1DTEwMBAIBrK2tMW3aNGYvqpCQEAQHByM/Px8mJiZwc3OrcT5bI0WZFLGxsXBwcGACes7OzoiOjpabWdnY5W6tSZcuXXDp0iXs2bMHp06dYpZwicVivHjxgvUlrzoDAwPMnz8f8+fPlxskmTFjBgwNDbFp0ybk5+cjNze31swXAwMDfPPNNzKzU1qCrl274sKFC1ixYgWTrfjo0SM8evRIZvsePXpg165d6Nmzp8zbbW1tMWLECISHhwOo/Cy9du0aAChc8vcuWrt2LXJycnDx4kUAlVnb0ksdgcqAqZ+fH2tvvMbauHEjdHV1cejQIUgkEpSUlOCvv/6qtb2JiQk2bdpUY1m7shgYGOD8+fNYvXo1s0zzzp07rECQNEdHR+zevbvW6r/6+vrw9fXFggULmIzbhIQEJCQksNoNHjwY/v7+iIuLY65r6HYL/fv3x549e7B69WomiBodHV2jQEbfvn3h5+fHykpsii0emtK3336LZ8+eMedF1ntcT08Pe/fuxYgRIwBUZkFWLc0ODw9HeHg4Zs2aJTMAqKGhAX9/fyxcuBBPnjyRuT0AANjY2MDf319hJqxIJMKMGTPw9u1b7N+/H0FBQTLbcTgcLF26FLNmzaq1rzFjxjCfw+np6RCJRAgNDa11j0FXV1ds376dte8kIYQQQt5NfIlyt8vS5VIAsD6aNQAoz+nTp8Hj8bB9+3aoqanh6NGjOHnyJFasWCH3fgEBAUhPT4e3tzf09fVx6dIl+Pj4YMeOHeBwODh58iTEYjF2794NgUAAf3//WvsyNjaGnp4egoOD4e7uzlScNDQ0ZO11c+bMGbx9+xbff/89JBIJ/Pz8EBQUhClTpsidT1X2TkREBFavXg0tLS388ssv+P3337FkyRKkp6fD398fy5Ytg52dHZKTk7Fz507Y2Niga9eu0NDQwKNHjzB+/Hh4eHjUmP/Zs2eRnJyM9evXw9DQEIGBgfD19YWPjw+ys7Nx9uxZbNiwAdbW1khJSYGPjw969uxZIyuztVGUGZKfn8/6EmxiYlJrMKaufb5vDAwMsGHDBnh5eSE0NBR37txBUlIS3rx5g5KSEiZj0sDAAO3bt0fv3r3h4OCAUaNG1Tk7auzYsRgxYgQuXLiAiIgIJCYmMhkppqamsLW1hZOTE6ZMmVKjmnBLY21tjcDAQEREROD69euIjo5GdnY2eDwe9PT0YGFhgb59+2LMmDEYOXIka38wWfbu3Ysff/wRwcHByMvLg56eHqysrODk5KSiR6Q66urq2LVrF8aNG4fAwEA8fPgQubm5UFNTQ6dOnfDJJ59g9uzZMDY2rnHfxmRwq6mpYe3atZgxYwZ+//133Lt3D69evUJeXh7Ky8uho6ODNm3aoEePHhgxYgTGjRun8tehoaEh/P39ERMTg0uXLuH+/fvIyMgAj8eDgYEBLC0tMXjwYIwdO7ZOxXEcHR1x7do1HD16FFFRUXjz5g3KyspgYGCAPn36YPr06fjkk0+grq4OXd3/+2OstuXRdeHm5oZ+/frhxIkTCA8Px5s3byAQCNCmTRvY2tpi/PjxGDt2LLhcLiuo1dL2ZtXX10dAQADOnTuHy5cv49mzZ+DxeNDV1UWXLl0wZswY5oeNKkeOHMGmTZtw+/ZtSCQSdOrUqdYgftUPpUFBQfjjjz9w7do1pKSkIC8vD4aGhujcuTPGjh2LadOm1SlbXSQSgcPhYNWqVXB1dUVgYCDu3LmDrKwsiEQiWFpaYsiQIfj8889Z1dlrM3z4cNy4cQOXLl1CaGgo/v33X+Tl5UEoFEJfXx/W1tYYNGgQJk2aVCOLmRBCCCHvrjx+nuJGjaDPpR8M64MjFApVXkqyoKAAy5cvx6ZNm2pdslpWVpkqWvWH6v3793Hy5Elmw3XpTLeqyyNHjsTChQuxfPly9OnTB0Dl0qOq62xtbTF//nwsX76c+YM1JiYGfn5+8PX1lfkF8dmzZzh+/DgyMzNhY2ODHj16oH///kwhAbFYjEWLFmHRokVMRb3U1FQUFhaiV69ecufTrVs3zJ8/H0uWLGH+qA8PD8f169fxww8/QCKRoKioiDWv9evXw8XFBR999BHOnz+Pf/75h7VvYtW5GD16NP773/9iwYIFTN9lZWXw8vLCihUroKWlhR9//BE//PAD2rRpw8ytpS1pVgZFm5AfPXoU5ubmTKZOVFQUIiIi5C5H4nA4MDU1bdJ51kVaWhqruighRL7evXszAanffvtNZjYVIe+CGTNmMFsDLF26FMuWLWtUf3fv3sXMmTOZ4+fPnzeqP0IIIYSQVVGrEJ4errT+x3cej032m5TWf2vTrBmAmzdvrnGdi4sLZs6ciby8PAQGBiIlJQUSiQQikUhhNdH8/HyUl5fL3MMoJycHlpaWkEgkMDMzY65v27at3D5tbW2xbds2pKWlISEhAfHx8bh27Rr69u0LLy8vFBYWQiAQsDLGqqolZmdny51Pt27dAIC1bw6Xy2WWLqmpqSEqKgq3bt1CcXExOBwOeDwea2mTdHVBaYWFhSgvL2dVm9TR0YGpqSlycnLg7OwMe3t7rFu3Dj179kS/fv0wbNgwJsuxNdPQ0JC7ZLfqHFXJyspigqS1UZSRRQhpfrm5uaxstOYI2hNCCCGEEPI+kFRI8E/WP0odo6N+R6X239o0awBwwYIFzF53VfT19Zklun379sUPP/wAHR0dxMTEyKw6KK1q6eCWLVtgbW1d4/aqSnYcDoe5rq77BFlbW8Pa2hqurq548+YNU120KoNRVnBS0Xyqxpaej7SwsDD8+eefWLlyJZNxuHHjRlabhgSeRCIR1NTU4OnpiXHjxiEuLo7Za9Db27vWPaBaC0UBwEGDBuF///sfpk+fDg0NDYSGhuKrr75S2CchRLWEQiGeP3+O58+f4+XLl1iwYIHc9+K9e/eYy1paWsyPMIQQQgghhDRULj8X+lx9aKlrNfdUWpSkgiSUikoVN2yETgadlNp/a9OsUQsLCwuZ+81lZ2cjNzcXrq6uzBJgeYUDqhgZGUFbWxtpaWmsgFt2djbMzc1hZGQEDoeDnJwcJjMuIyOj1v4ePnyIx48f19jcul27dtDV1UVZWRlMTEygqamJ9PR0Jpj54sULvH79Gs7OznLno0hSUhL69OnDBP9KSkrkzrf6udDU1MSbN29gZWUFoHIJcF5eHiwsLCAWi1FWVob27dujffv2+PTTT7Fx40bExMTAzc2tTmO8qxQFTa2trTF+/HisXbsWQOW+V4r2OKIMQEJU78mTJ5gyZQpz3LVrV3z66acy20okEhw9epQ5dnR0pMA9IYQQQgipt0JBIR5kP0B0djT+yfoHKcUp2Dx4Mz7tJPvv0PfVg+wHSh/DWr9mohWpXYv89mNkZAQul4ukpCRYWloiNjYWiYmJEAgEKCsrk7uB9ahRoxAUFITOnTvD0tISYWFhuHDhAnbt2gUdHR306NED165dQ+fOncHn83Hz5s1a+zIzM0N4eDhEIhFGjhwJY2NjFBUVISQkBCKRCL179waHw8Hw4cNx6dIltG/fHurq6vj111/xwQcfKJyPoi+f5ubmuH//PsrKyphKw2ZmZigoKFB4DjkcDpydnXHlyhXY2NhAV1cXgYGBMDY2Ru/evREeHo6///4bS5cuRdu2bZGeno7CwsJWn/0HVGb+lJaWyl1SPm7cOLkVoqVxOBxoadGvPYSo2oABA9C7d288ffoUQOUeqRYWFrC3t2e14/P52Lx5M1NlGYDCrF5CCCGEEEIAoFRUiticWPyT9Q+is6ORmJ+ICrC/S15LvUYBwGpUEQDspE8ZgPXRIgOAmpqamD17NgIDA3HmzBn0798fS5cuxY4dO7BmzRr4+vrWet/JkyeDz+dj27ZtEIlEsLa2xqpVq5ig4bx583D48GGsXr0abdq0wZQpU5CYmCgzGNShQwd88803uHz5Mnbv3s1U7OvWrRvWr1/P7B81Y8YM/Pbbb9i8eTM0NDQwePBgTJo0SeF8FC0/dnFxwbNnz7B8+XKYmJhg+vTpKCoqwsmTJ1mVAmszZcoUnDx5Et9//z3Ky8vRrVs3rFu3DhoaGhg5ciSys7Oxfft28Hg8mJqa4uOPP8bAgQMV9vuu43A40NPTA4/Ha5L+9PX1a13GTQhRrm3btmHatGkQCoUoLi6Gu7s77O3t0bt3bxgaGiI9PR3h4eGs4j8zZ86Eg4NDM86aEEIIIYS0VAKxAA9zHjIZfvEF8RBJat9CCgDuZ91HLj8XZtpmctu9LyQVEvyTrdz9/9rqtoWmuqZSx2htmqUKMCEtQXFxMYRCYaP60NTUhIGBQRPNqP6oCjAhwD///IPly5cr3CJBTU0N8+bNw5o1a96LiuekdaMqwIQQQkjTEFeI8W/ev/gn6x/8k/UPHuc+hlBS/++Jq/qtwozuM5Qww3fPrbe3sPz2cqWOMar9KOx0qFlwldSuRWYAEqIKenp6KC8vV1hdujZVmYSEkOY1ePBghISE4OLFi7hx4wYSEhKQm5uLiooKGBoaolOnThgyZAimTZuGTp1omQAhhBBCyPtMUiFBYkEis6Q3LieuSYpVXE+7TgHA/+94wnGljzHYYrDSx2htKAOQvPf4fL7CPQGlcTgc6OrqQltbW8kzU4wyAAkhhBBCCCFEPoFYgD9S/kB0VjSis6LBEzXNdlDV/e72OzoadFRK3++Kx7mPMSd0jtLHOf/xeXQx7KL0cVoTWgNF3nva2towMTGBoaEhdHV1ZRZn0dDQgK6uLgwMDGBiYtIign+EEEIIIYQQQhTTVNPE8YTjCEsPU1rwDwCOJyo/862lU8U5MNUypeBfA1AAkBBUZvVxuVzo6OjAyMgIZmZmrH9GRkbQ0dGBpqYmFfwghBBCCCGEkHcIh8PB6A6jlT7OpZeXkJifqPRxWqpXxa8QkR6h9HFo+W/DUACQEEIIIYQQQgghrZprB1eVjPND7A8qGaclOpZwDBVQ/i5zI9qNUPoYrREFAAkhhBBCCCGEENKq9W/THxY6Fkof59+8f3E19arSx2lp0nhpuPLqitLH0VHXoQBgA1EAkBBCCCGEEEIIIa2eqrIA/R75gS/mq2SslkAkEWHdnXUqGcu5nTO01LVUMlZrQwFAQgghhBBCCCGEtHofW3+sknFy+Dk4/PSwSsZqCXwf+eJZ4TOVjPVJx09UMk5rRAFAQgghhBBCCCGEtHp9TPugvV57lYx1PPE4kgqTVDJWc4p8G4kzyWdUMpahpiGcrJxUMlZrRAFAQgghhBBCCCGEvBdUtQwYALwivZBRmqGy8VQtqywLG+9vVNl4o9srv5Jza0YBQEIIIYQQQgghhLwXVLUMGABy+blYEL4AhcJClY2pKuIKMdbcWYPi8mKVjTm923SVjdUaUQCQEAASiQQCgQAlJSUoLCxEbm4u619hYSFKSkogEAggkUiae7qEEEIIIYQQQhrA1tgW/c36q2y81yWvsThyMcpEZSobU9kEYgFW3l6JJ3lPVDamg6UDbIxsVDZea0QBQPLeEwgEKCgoAI/HA5/Ph0gkqtFGJBKBz+eDx+OhoKAAQqGwGWZKCCGEEEIIIaSxVvZbqdLxEvITsDJqJcQVYpWOqwyFgkLMD5uP2xm3VTrunJ5zVDpea0QBQPLeEovFKCoqAo/HQ0VFRZ3vV1FRgeLiYhQVFVE2ICGEEEIIIYS8Y3qb9oabtZtKx/wn6x98e+/ben33bGnelr7Flze/xNP8pyodt6dxTww0H6jSMVsjCgCS91ZJSQnKy8sbfP/y8nKUlJQ04YwIIYQQQgghhKjCoj6LoMHRUOmYIa9DsOTWEhQIClQ6blNIzE/E7Buz8brktcrH9uzjqfIxW6P3KgB48OBBHD9+HABw6tQp7Nu3r5ln1DK8j+eCz+c3KvhXRSgUgs/nN8GMCCGEEEIIIYSoSnv99phqM1Xl497NvIsZf89AbE6sysduqKiMKMwPn498Qb7Kx+7fpj+crJxUPm5rpNpw9/9XUFCA5cuXs67T19dHt27dMG3aNLRr107pc3BxcZG511tTKC8vx8WLFxEdHY28vDxwOBx06dIFkyZNQq9evZQyZmMo81y0RGKxGKWlpXLbXLx4ESEhIQAAe3t7eHh41Nq2tLQUXC4X6urqTTpPQgghhBBCCCHKM6/XPFx+eRk8EU+l42bzs+EZ7ol5veZhXq95UOO0zNysXH4udj/cjeC04GYZnwMO1g1Y1yxjt0bNEgCssmLFClhbWwOoDAoGBQVh9+7d2Lp1K7S0tJQ6tqWlpdL6/vXXX/HixQvMmTMH7du3R1lZGUJDQ7Fr1y5s3bpVqWM3REubj7IJhUK5+y68fPkS169fx08//QQul4sNGzYgJiYGAwfK3nOgoqICQqEQOjo6ypoyIYQQQgghhJAmZqRlhC97fomf//1Z5WNLKiTwf+qP+5n3sd1hO9pot1H5HGojlohxJvkM/J/6o0TUfNte/afrf9DdqHuzjd/aNGsA0NDQEKampgAAU1NTzJ8/H15eXkhJSUHPnj0hEAhw9uxZxMXFgcfjwcbGBnPmzIGFhQXKysqwcOFCeHl5ITg4GIWFhdDW1oanpyfat28PALh58yb+/PNPlJaWwsHBgVWw4dSpU8jPz4eXlxcCAgLA4/Ggr6+Pp0+fori4GMOGDcPUqZXpwGKxGL/99huioqKgr6+PqVOn4vLlyxg/fjwcHBxqPK6EhASMGTMGPXv2BAAYGBjA3d0dlpaW4HA4TLs///wTN2/eBI/HQ48ePTB79my0aVP5pv/rr78QGhqKnJwcmJub4/PPP8cHH3wAANi0aRMcHBzw7NkzZGRkQCgUYtq0aRgyZAgA4MWLFwgICEBqaio0NTUxcOBAzJo1C1wuFzExMThz5gxGjBiBixcvYtOmTQgPD2fOBQDcuHEDISEhyMvLg4WFBcaMGQNHR0cAQHx8PM6cOYO3b99CS0sLgwcPxueffw4NjWZ9KdWLomzH2NhYODg4MAE9Z2dnREdH1xoArEufhBBCCCGEEEJans+7f44zyWeQy89tlvHjcuPw2fXP8FnXzzDLdlazBwIf5jzE1piteFH0olnnYcA1wOIPFjfrHFqbFpVnyuVyAVQG3AAgICAAr1+/hre3N37++Wd069YNPj4+qKioYAJOERERWL16NX788Ue0a9cOv//+OwDg9evXOHHiBGbNmoW9e/eic+fOiIuLkzmuhoYGoqOj0atXL2zZsgVr1qzB1atXkZaWBqAyGBcbG4uNGzdi8+bNuH//PvLy8qCmJvv0tW/fHrdu3UJWVhbr+pEjR8LCwgIAcO/ePQQHB2PRokXYtWsX9PT0cODAAea2K1euwNPTEwcPHsTUqVPh6+uLzMxMAIC6ujpCQkIwY8YMbNu2DePGjcOJEydQUVGBiooK7N27F7a2tti3bx+8vb0RHx/PLGfV0NBAcXExsrOzsWPHDlhZWbHmeP/+fVy4cAFz587F/v37MX78eBw6dAgpKSkAgAMHDmDkyJE4cOAAvvvuOzx//hxhYWF1fYpbhKrXV23y8/OZwDQAmJiYIC8vr1F9EkIIIYQQQghpebTUtbDEbkmzzqFUVIqTz07ikyufYHP0ZqQWp6p8Dn+l/YX5YfPxVdhXzR78A4AldktgoGnQ3NNoVVpMAJDP5+P8+fMwMDBAly5dIBKJcPv2bUycOBEmJibgcrmYPHkyCgsLkZCQwNxvxIgRzHLhXr16IT09HQAQHR2Nrl27YsCAAdDQ0ICzs7Pcpa4WFhbo378/gMoAnrGxMdNXbGwshg0bhg4dOkBfXx/Tp0+XW/jhyy+/hL6+PtatW4cNGzbgxIkTiImJYQWJIiMjMWzYMNjY2EBfXx/u7u5wcXGBRCJBWFgYRoxKtXPuAAAgAElEQVQYgc6dO0NNTQ0DBgxAr169cOfOHeb+AwYMgLm5OfO4eTweioqKwOFw8P3332PSpEngcrmwsLCAnZ0dE8ADgLKyMkyYMAGmpqY19q2rmlf37t2hrq6OIUOGoGvXrsz8y8rKoKenB3V1dZiZmWHTpk1wcXGR/+S2MPUN1tWlTLt0dikhhBBCCCGEkHfHuE7jMLr96OaeBgDg0stLmPLXFKy7sw6JBYlKHSuzLBP7/90PtytuWH9vfYspTNLfrD8md5nc3NNodZp13ea2bduYLDqBQAArKyssXboUurq6yM7ORnl5OXbu3Fnjfjk5OejWrRuAyuysKlwul6nsmpeXBzMzM9b92rZtW+tcpPup3ldBQQGTuQdU7pknb783U1NTrFq1Cnl5eYiPj0dCQgKOHj0KQ0NDrF69GqampsjKymItKTU2NmaWE2dnZyM+Ph6XL19m9Wtg8H/R7+qPG6jc2w6oXAJ8+fJlZGVlgcPhgM/nM8uHgcoMQukMN2nZ2dkYNGgQ6zorKytkZ2dDXV0d06ZNg7+/P65evQo7OzsMGzZM7nltiTQ0NOQu2TU1NUVOTg5znJWVxSzNrg0VACGEEEIIIYSQd9f3Q77Hi5AXSClOUdxYySQVEtx4cwM33txAO712sDO1wwemH8DOzA49jHuAq8ZtcN8VFRW4k3kHgc8DcSvjFiQVLSuZxVjTGDscdrC2TyNNo1kDgAsWLECHDh0AVFYB1tPTY27T1NQEAGzZsoUpFCKtKjhX24tCJBLVuK3qPrLIe3FJLzmuS/sqpqamGDZsGIYNG4aysjJs3rwZ165dw8yZM8HhcGrNLONyuZg5cyZcXV3rPd83b95g79698PDwgKOjI9TV1XH69GlWQKsh+/VVBcxcXV0xZMgQPHz4EDExMfj222+xePFiufvjtTSKAoCDBg3C//73P0yfPh0aGhoIDQ3FV199pbBPQgghhBBCCCHvJm11bex03IkvQr5AmbisuafDSC9JR3pJOqsS7wemH+AD0w/QXq89zLTNYK5jDlMtU7TRbgM9rh7y+HkoEZWAV85DkbAIz4ue40XRCzwvrPxvcxb2UGTzkM0w0zZT3JDUW7NGLUxNTWtdlmtkZARtbW2kpaWxAoDZ2dnM0ld5TExMEB8fz7ouIyMDRkZG9Z6ngYEBsrOzmeOcnByUlpbKbJuZmYnAwEDMnTuXlSWoo6ODdu3aMfezsLDA27dvmduLiooQFhaGMWPGwNLSktl/UHpMMzMzhYHHlJQU6OnpwcnJibnuxYsXMDQ0rNNjtbCwwOvXr1nXvX37Fj179kRFRQWKiopgZGQEZ2dnODs74+TJk4iMjHynAoCKsvWsra0xfvx4rF27FgDg6OiIvn37NqpPQgghhBBCCCEtW2eDzvhu8HdYd3ddc09Frn/z/sW/ef829zSa3CzbWXBs69jc02i1WswegLKMGjUKQUFBSE9Ph1gsxo0bN7Bp0yaUlSmOxtvZ2eHFixd48OAB+Hw+bty4gYKCggbNo2/fvkxRj9LSUpw7dw7a2toy25qamiI1NRV79uxBfHw88vLykJGRgevXryMuLo4JlDk5OeH27dt48uQJioqKcO7cOcTFxYHL5WLUqFG4c+cOHj16BLFYjMTERGzcuBGJiYrX/5uZmaGkpARv3rxBWVkZLl68CKFQWOfH7uzsjKioKPw/9u47Psd78f/4K1O2JGLEjtReLSFiEy1FbS2lwrcctdpqUXqMtrQ9qFbpoXpsSu3RY7eoEQmxV+1IbIkkQiR31u+P/HLVLZGhCM77+Xh4HPd1fa7P53Nd9x2n9zufcf78eZKTk9mzZw8XLlzAz8+PK1euMHToUI4dO0ZycjK3b9/m8uXLOQpknyX58uXLNkht3bo1U6dOZerUqXTt2jXLshYWFsY6lCIiIiIiIvL88i/uT7dy3fK6G/9zyruWz/PNWF50z/S8xfbt2xMfH89XX31FUlISJUqU4OOPP8be3j7L6bwAFSpUoGvXrvz888/ExcVRt25dfH19c7Shw4NatGjBlStXGDNmDC4uLnTp0oVz585lGiLZ2NgwfPhw1qxZw6xZs4iKisLa2poSJUrQt29fY3292rVrExUVxU8//UR8fDzly5enf//+AFSvXp0333yT+fPnExMTg4eHB926daNChQrZ9rVixYo0atSIcePGkS9fPvz9/enduzcTJkxg8uTJNG3aNMvrfXx8uHbtGjNmzCAmJoYiRYrw8ccfG1O1e/TowcKFC4mIiMDBwYHq1avTvv3ztTinhYUFjo6O3Llz57HU5+TkpPUJREREREREXhDvV32fo5FHORJ5JK+78j+hoF1BJtebjJWFZtY9SRYmkyn3idj/oISEBGOUV3JyMn379uWTTz6hbNmyedwzeVSxsbHGximPytbW1mxzlqctPDycMmXK5Fn7IiIiIiIiL6LI+Eje/u1tIuMj87orLzRHa0fm+8+nlHOpvO7KC++ZngL8rPjtt9/45JNPuHz5MgkJCaxevRpHR0dKliyZ112Tv8HR0fFvjdxLH0koIiIiIiIiL5YCdgWY6DcRa8tneuLkc83G0obv63+v8O8p0QjAHEhOTmbp0qXs2bOHhIQEihcvzttvv423t3ded00eg/j4eOLi4nI8PdzCwgIHB4eHrgP5NGkEoIiIiIiIyJMTeC2QIYFDMKX8vdljYs7SwpJv6n5DQ8+Ged2V/xkKAEWA1NRUkpKSSEpKwmQykZSUZHbe2toaW1tbrKyssLGxeWbW/FMAKCIiIiIi8mQdjjzMB7s+4E7i41lHXmBkzZG082qX1934n6IAUOQ5pgBQRERERETkybsYe5H+O/pz/d71vO7Kc83awprxfuNpVLRRXnflf47WABQRERERERERyUIp51LM959PaefSed2V55adlR3/bvhvhX95RAGgiIiIiIiIiEg2CtgVYG7TuVQrUC2vu/LcccvnxqzGs6hZsGZe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GTx4MPv372fLli3861//4qWXXsLS0jLb82+//TZxcXEMGzaMEydOEBoayg8//EDz5s05fPgwAHPmzGHQoEHs3buX8PBwgoKCWLdunRG6ZXc+M1WqVGHLli1ERUVhMpmYPn16hhF89zty5AgdOnR4aFjm6elJw4YNzY6lr032YIBjaWlJhw4djBFzD3JxceHll19mw4YNHDlyhPPnz7N06VIAatWq9dA+5kTx4sWJi4vj0KFD3Llzh3379nH58mUcHR25du1atqMgy5QpQ5EiRVi5ciUXL14kOjqaY8eO8eOPPxobu5QrVw5bW1vWr1/PlStXCAsLY926dWYjOpOTk+nQoQOLFi16aFuOjo60adPGeO3s7MzNmze5d+8eJpOJ0NBQ5syZw7Zt2wBo06bNQ9eBa9iwIfv372fXrl1cvHiRLVu2cObMmQzv2aPIly8fNWvWZNu2bRw/fpzo6GhCQ0OZP38+q1atynE9OXluueXm5oanpyc7d+7k0qVLREREsHLlygyjzBYtWkSHDh0yXasy3bFjx4x/b1JSUggNDTVeP8roWVdXVzp37sz06dPZsmULV65cYeXKlSxYsIBevXphbW1Nvnz5yJcvH8HBwZw4cQILCwsqVarEihUrCAsL488//6R37940btyY6Ohozp8/n+mGOw/y8fHh3LlzZj/zr7/+OiVKlKB///5s3bqVjRs3MnjwYPz8/P7Wz92OHTvo27cvGzduJCwsjBMnTjBv3jyKFStmtjzC/v37//bPt4iIiIg8Ov0aVkQeqwYlG/D7hd9zdU3DUpmHFImJiXTr1s3s2KefpgWJRYsWZefOnZle98knn1C2bFmWLl3K8OHDiY6OxtnZmapVqzJ37lxjN11bW1u++eYbxo4dy8svv4ynpydDhgzh6tWrxrTWokWLMnfuXL7++mu6d++Om5sbrVu3ZsiQITk6X6xYMX7++WcmTJhA586dsba2ply5cvz000/G7qlTp05l3LhxDBgwgNjYWAoWLEiTJk0YOnRojs5n5p///CeffPIJDRo0IH/+/Lz11lt07NiRHTt2ZFo+NjaWw4cPZzkaq0mTJgDs3LmT1NRUwsLCmDhxolkZe3t72rdvn+nmBvdr1aoVW7ZsYdOmTZhMJooXL05AQMDfXrutXLly1K1bly1btrBx40bKli1L+/bt2bNnD7t378bS0hIfH5+HXm9hYUH37t3ZvHkzS5YsITExEVdXVxo1akSdOnWMe+zSpQsbNmxg1qxZuLq60qxZM/bs2WOsi5aamsrhw4eNz9rDpO9KvHbtWi5evMiCBQsylLG1taVNmzZZ7mBcvXp1TCYTgYGBbNu2jQIFCtC5c+dMR5k9iubNm2NnZ8eWLVuIjY3FycmJ8uXL4+/vn+M6cvLcHkXHjh1Zu3Ytc+fOxdnZmYYNG3LlyhWzUYFXr17l8OHDWa4vOXr0aCOUB1i4cCELFy4E4I8//jB2N86NMWPG4OjoyOjRo4mMjMTT05OBAwcav4SAtA2LZsyYwdatW9m2bRvjx49n+PDhNG/enOLFi/Pxxx9TvXp19u/fT7t27Vi/fn227darVw9ra2u2b99ubEhka2vLvHnz+Oyzz3j//fextrbG39+f0aNH5/q+7te/f39MJhNfffUVN27cwNnZmRo1ajB79mzjecfGxrJ//36++OKLv9WWiIiIiDw6C5PJ9Oj/1S0ieSo8PNxst8ZnwYXoC3RZ3oW9l/fmqHyDkg34pdMvFHV++EYa8nT079+fDz74INN15u535coVgoODOXfuHHfv3sXS0hJXV1eqVKlCrVq1tMbX/zd//nxSU1MJCAjItmxcXBzBwcGcOnXKGLXl5uZG+fLl8fX1zdUOsP9rEhMTSU5ONlvHcP78+djb29O5c2fjmL+/P7//nrtfTjzPRo8eTUhICOvWrcsy+Hwapk6dyi+//MK2bdtyvVmOiIiIiDweGgEoIo+Vl6sXwb2DuZ1wm7jEuCzLOto64myb+U6x8nRFRkbmeA2+okWLGqOKkpKSsLKyyvOA4Vm0Zs2aDCMkH8bBwYEmTZoYoywl5xYtWsTdu3dp3bo1Tk5OnD59mgsXLvD2228bZbZt20a1atXysJdP38CBA2nZsiWrVq2iQ4cOedaPq1evMmvWLD7//HOFfyIiIiJ5SCMARZ5jz+IIQBGRp+nu3bts3LiR8+fPk5iYiLu7O35+flSvXj2vu5bndu3axYABA1i1alWe/H9FUlISb7/9NuXLl2fs2LFPvX0RERER+UueBYCpqals27aN7du3G+v0FCpUiIYNG/Laa68ZOw7+4x//IF++fMyePTvbOocPH054eDhubm5MmTIlwwL0wcHBbNq0icuXLxMXF4erqyt16tShU6dO5MuXD0jbDXTFihUcOnSI6OhorK2t8fLyom3btlStWhWAESNGEBYWlmkfypUrx5gxY3LcnsjfoQBQRERERERERLKTZ1OAZ82axbZt27C0tKREiRI4OTlx7tw5Fi5cSGhoKP369ctVfZcuXSI8PBw7OzuioqI4efKk2YLpISEhTJkyBUdHR2rVqoWtrS2HDh1i/fr1xMTE0L9/f1JTUxk/fjyhoaFUqFABHx8fbt26xd69ezlz5gxffvml2SLgVatWzbB7YfqOdzlpT0RERERERERE5EnLkwDw3LlzbNu2DRsbG0aMGGEsOH/79m3GjRvH3r17adeuHS4uLjmuc/fu3QC88cYbLFu2jMDAQLMA8ODBgwB07drVWGOpffv2/PTTT7i6ugIQFRVFaGgo7u7ujBw50ljTav369Vy4cIHY2FizNt98882Hjr7KSXsiIiIiIiIiIiJPWp4EgAcOHACgQYMGZrtNuri48Omnn+Lo6IiNjQ13797NcZ1BQUHY2dnRsmVL/vjjD/bt20evXr2wtk67RXd3dyAtKHzppZcoUaIELi4uDBkyxKjDyckJGxsboqOj2b59O35+fkaduZWT9kRERERERERERJ60PAkAb9y4AUCpUqUynHuU0XGnT5/mxo0b1KlTB1tbW3x8fFi/fj2HDx+mZs2aALz22mscOnSIkydPMnz4cPLnz0/ZsmWpVasWfn5+WFlZYWtrS48ePZg3bx4zZ85k9uzZlCpViooVK9K0aVM8PT3N2h01alSGvgwcOBA/P78ctSciIiIiIiIiIvKk5UkAmD61NiUl5bHUFxgYCECtWrUAqF27NuvXrycwMNAIAJ2dnfniiy/4888/OXbsGKdPn+bAgQOEhIQQGBjIsGHDAGjatCk1atTg4MGDnDp1ihMnTrB+/Xq2bNnC0KFDzaYVZ7YGoIeHR67aExEREREREREReZLyJAAsUqQIAKGhoRnOhYWFkZycjJeXV47qSklJITg4GICpU6cydepU49yBAweIj4/Hzs7OOFaxYkUqVqwIQGRkJJ999hmHDx/mwoULRpv58+enSZMmNGnShNTUVFauXMnKlSvZuHGjWQCY1RqAuWlPRERERERERETkSbHMi0bTR+rt3r2bkydPGsejo6P54YcfGDlyJMePH89RXUePHuX27dsULlyYxo0bG39KlCiByWRi//79pKSk8Nlnn9G7d2+uXLliXOvu7k7+/PmBtCAxMDCQAQMGMGPGDKOMhYUFpUuXNsrkRE7bExERERERERERedLyZARgiRIlaNOmDWvXruWrr76iRIkSODk5ce7cOeLj46lfvz6VK1c2NgFJTEw0G9mXLiAgwJj+27p1a5o2bWqcO3jwIN988w2BgYHUq1ePihUrcubMGUaNGkXVqlWxt7cnNDSUsLAwChYsSKlSpXB1dSU5OZmdO3cSHh5OyZIluXfvHkeOHAEwphOnW7p0aYYpwADvvfdejtoTERERERERERF50vIkAAR46623KF68OFu2bCE8PJzr168bo/j8/f3NyqakpBAUFJShjvbt2xMSEoK1tTW1a9c2O1etWjVcXFw4cuQIt2/f5s0338Td3Z0//viD48ePEx8fj6urKw0aNKBjx45YW1tToEABRo8ezZo1azh58iSBgYFYW1tTvHhxmjZtSuPGjc3aOHr0aKb31qdPnxy1JyIiIiIiIiIi8qRZmEym1LzuhIg8mvDw8GzXoRQRERERERGR/215sgagiIiIiIiIiIiIPB0KAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoAReSZEhcXx/z58+ncuTO+vr6UK1eOqlWr0qpVKyZNmkRsbGxed/GRnDp1Cm9vbyZNmpRt2R9//BFvb28OHjz4FHr2aGrWrMmbb76ZZ+1XqVKFd955J9tymzdvxtvbm+XLl2dZrn///nh7e5OUlPS4uvjCuHH3Bu2XtMfhSwcsPrfI8o/TV050Wd6F6PjovO62iIiIiMgzLTo6mvPnzxMaGkpcXNwTb8/6ibcgIpJD9+7d46233uLPP/+kZcuWvPXWWzg7OxMREcEff/zBtGnT2LFjB7/88gv29vZ53d2HunnzJnXq1OH333+ndOnSub6+WrVq9OzZk0KFCj2B3onkTt//9mX1n6tzVPZu4l2WHF9CPut8zGs37wn3TERERETk+XTz5k2uX79uvL579y6lSpXCycnpibWpAFBEnhnr1q3jxIkTDB48mIEDB5qd69atGxMmTGDGjBmsWbOGLl265FEvsxcUFPS3rq9bty5169Z9TL0R+Xs2n9uc62s2nt34BHoiIiIiIvL8i46O5vr161haWuLl5YXJZCI8PJyLFy/i5eWFg4PDE2lXU4BF5Jlx8+ZNIG16Z2YGDRpEUFBQhvBv9erVdOjQgSpVqlCxYkVeffVVvv/+e0wmk1Hm6NGjeHt7s2TJEmbNmkWjRo2oWLEi/v7+rFmzhvj4eMaOHUudOnWoUqUKnTt35uTJk2btJCUlMWPGDFq0aEHFihWpXr06Xbp0YevWrUaZ3r178+GHHwLg7++fYVqptbU1W7ZsoXXr1lSsWJGaNWvyySefcPfuXaPMg1OA0/u+dOlSli5dyuuvv07FihWpV68en332Gffu3TPr588//0yzZs2oWLEijRo1YtasWRw4cABvb28WL16c5XsQExPDuHHjaNKkCZUqVeLll1+mU6dOrF27NkNZKysrzpw5Q0BAAFWrVqVKlSoEBARw/vx5s3LXrl1j+PDh1K1bl/Lly1OjRg169+6dYYpz165defnllzO08+uvv+Lt7c2vv/6aZd8XLFiAv78/FSpUoH79+kyaNCnXU3rv3r3L8OHD8fHxoUKFCrRq1crs/YW0Z/Svf/2LBg0aUL58eWrVqkX37t0JDg42Kzd16lS8vb05cOAAQ4cOpWbNmlSoUIFmzZpleB+6d+9O7dq1OX36NN27d6dq1apUqlSJTp06sW/fPrOyOfkcAsycORNvb29Onz7N+PHjadCggfGZX7BgQY6fSVxi9tMRaherzd4+e6lWuFraczTdzeYKEREREZH/Tekj/0qXLo29vT358+enaNGipKamEhYWRkpKyhNpVwGgiDwWV65cyXZ9vosXL2YIq+5XvXp1AL777jsuXryY4by9vT0FCxY0O/bjjz/y8ccfU7RoUSZPnsysWbNo3rw5U6dOZcCAAUY5W1tbAObNm8elS5dYuHAha9asIV++fAwdOpS+ffvi6enJ6tWrWbBgAWFhYXzwwQdm//gOHjyYCRMm0KBBA2bPns2kSZOws7OjT58+rF6dNkVyzJgxdOrUCYCffvqJX3/9FWvrvwZbh4SE8M0339C9e3cmT55MvXr1WL58OdOmTXvoc0nv+8KFC9m+fTuTJ09mx44d9OjRgwULFphd+8svvzB69GgKFCjA5MmTGTFiBL/++qux9qCNjc1D2wH48MMPWbp0KT169GDmzJlMmDCBwoULM3jwYDZuNB/VFRsbS9++ffHz8+Pbb7+lV69eBAYGMnToUKPMrVu36NixI7///jv9+vVjwYIFfP7551y9epWuXbty4MCBLPuTU8uXL+ezzz7D09OT6dOnM3bsWEJDQ/nhhx9yXIetrS39+vXDzs6OL7/8kn/+85/cuHGDQYMGER3915p2/fr1Y86cOXTt2pWZM2cycuRIIiMjCQgI4MSJE2b1AQwZMoSqVauyYcMGtm3bRrly5Rg5cqRZqGpra0tsbCwfffQRvXv3ZufOnaxcuZLo6Gh69uxp9vOQk8/h/e0PGzYMOzs7Fi1axObNm6lYsSKfffYZu3fvzv2DzoRPUR82dd9EraK1WNs1Y1AsIiIiIiJ/SU5OxtLS0mxZK1dXV1xcXEhKSiI+Pv6JtKspwCLyWKxYsQKAgIAAXFxcMpz/888/WbZsGX5+fjRr1izTOurWrcu7777LrFmzaNq0KS+//DI+Pj7UqFEDX19fXF1dzcrfvn2bKVOmUK1aNaZOnYqFhYVRT3R0NIsXL+bgwYO88sorZteNGTPG+Hu3bt0YPXo0jo6O9O7dG4AiRYrQunVr5s6dy7Vr1yhatCj79u1j/fr1vPfee2YBV+PGjWnVqhXjx4+nTZs2lChRggIFCgDg7e2dYQ3AkydPsnXrVuMZ+fv7s2vXLrZu3WpWb2ZiYmJYsWKFEeL17duXefPmsX37dj7++GMAZsyYgZubG3PnzjX+D6Vx48Y0b948y7oBEhMT2b17N61ataJXr17G8VdffZUZM2ZkWI/i5MmTLFmyBB8fH6PcqVOn+P3334mKisLNzY1Zs2Zx7do1Zs6cSZMmTYxrfXx8aNSoEVOmTGHu3LnZ9i07M2bMwNXVlZkzZ2JnZwdAkyZNeOutt3Jch8lkol69embBcWJiIl9++SVBQUG0aNGCyMhIbGxs6Nu3L/379zfKlS5dmg4dOrB27VoqVaoEgKVl2u/YXnnlFXr06GGU/eabb9i+fTuzZ8+mTZs2RlmTyURAQACNGzcG0v4j4IsvvuCdd95h0aJFjBgxIsefw/S2Aby8vPjggw+M10OGDDHCyHr16uX4+bjZufFBnQ+YuHsidxPTRvjV8KzBlne24GqX9rM5cffEHNUVGRnJnDlzeP/99zl16pQRXJYuXZru3bsbP8u5FRERwbx583j//fezDbtFRERERPKCi4sL0dHRhIWFUapUKW7fvk14eLjxC/z7B5A8TnkyArBfv3707Nkz0z/3f+nMrYSEBLZv3/4YeyoiOdWlSxcSEhKYO3cut2/fNjuXHv6VLl3aCDce5tNPP2Xt2rX06NGD27dvM3PmTPr370+tWrUICAggJCTEKBsSEkJCQgItWrTIEBikh4wPrsdXq1Yts9fpIwofdjwiIgLAmF75+uuvk5CQYPxJTk6mcePG3Lhxg7CwsCzvDaBp06ZmAam1tTUlS5YkMjIy22v9/PwyhBpFihQxhpDfuXOHsLAw6tSpY/bbJDs7Ozp27Jht/TY2NhQsWJDt27ezceNGEhMTAbCwsOC9996jfv36ZuWLFStmhH/pvLy8AIz72bVrF/b29jRq1MisnKenJ5UrV2bv3r0kJydn27esxMTEcP78eXx8fIzwL11Ogs/7tWvXzuz1g/dToEAB5s2bx0cffWRW7qWXXgLg0qVLGep88N4dHByoVq0ap06dyrZs7dq1sbCw4M8//wQe7XOY2bMHuHHjRob2H8YCC9Z3W8+YRmNY23UtdtZ2vFLkFX7r8ZsR/g3eNJh/7/t3jupbuHAhHTt2xMrKisWLF9O/f39GjRpFXFyc2c94bnl4eFCzZk02bNjwyHWIiIiIiDxJnp6e5MuXj9jYWMLDw7GxsSE1NZWEhARcXFywtbUlMTGRuLg4UlNTH1u7eTIC8PPPPzduYtmyZSQkJNC9e/e/Xe/Zs2fZvn17tgGDiDx+BQsWJCAggHnz5jF37lx69uyJi4uLEf55eXnRpUuXHP02o3LlylSuXBlIWyD14MGD/P7776xZs4auXbvy448/4u/vz9WrV4G/Ao37pR+7du2a2XF3d3ez1+n9cXNzMztuZWUFYIRTly9fBqBt27YP7ffVq1ez3fW3cOHCGY7Z2trmKAR7cPozpPU//dr0sDKz3YPLli2bbf0As2bNYvDgwQwYMAB7e3teeeUVGjRoQMeOHY2RjemKFCmS6b3AX8/t6tWrFC5c2GxEWjpPT0+OHDlCTExMhvclN9KDrMyeT2Z9zMqD78+D9wNpazLOnz+fkJAQIiMjjaAUyHS9jsz65ebmhslk4vbt22aBsIeHh1k5a2trYydseLTP4YPtp3+2c7M+YiqpJCQnANDUqykbum2gauGquNml/dwM/204k4Mm56iuy5cvYzKZ8PLy4sKFCxQpUsT4bNWqVYsjR47wyiuvMHr0aGrVqsX169dJSkqiUqVKhIWFcf36dQYNGoSdnR3z58/n1q1bJCYmUqVKFVq1akW9evUYOXIkLVu2fGK/PRUREREReVRWVlZ4eXlx7tw5YmJiiImJMc7FxsYSFhZmDKqxsbGhZMmSZgM8HlWe/Jfx/V9O8+XLB5h/6Tp+/DgrVqzg8uXL2Nvb07x5c15//XUg7Qvu/PnzOXPmDJA26qJnz55cu3aNb7/9lpSUFPr27cvo0aMpVqzYU7wrEXkwBKxbty4bNmzIVfj3IFdXV5o0aUKTJk3o0aMHrVu3Zvr06fj7+2d5XXoQ86hTCR/mxx9/zBDSpCtTpsxjbSu30jc9ySxsy+lzqFChAhs2bODIkSPs2LGDnTt3MmHCBH744QdmzpxJ7dq1H1t/n9R7dL+/O7rwQQcPHqRLly54enry/vvvU7ZsWRwcHEhMTKRVq1Y5ruf+0ZXZSUpKyvCe5sXn8I1Fb/Bbj9+oXaw2jUv/9Yu2UdtGMX73+BzXc/LkSSpWrAiQIQB1dXUlJiYGCwsLIiMjadSoEe7u7owZMwYnJyd69uzJokWLOH78OEWLFiUyMpKPP/6Y1NRUtm/fTkpKCjY2NhQrVowLFy7kOPgWEREREXmarK2t8fb25tq1a8bIP2tray5fvszt27extbXFzs6O27dvc+HCBUqVKoWjo+Pfa/Mx9f2xuXHjBlOmTKFnz574+vpy9epVvv32W5ydnalfvz5LlizB2dmZyZMnk5KSwuLFi1m8eDEDBw7kzTffZM+ePXz22Wd5fRsi/7PuDwHXrVuHt7d3jsK/pKQk1q1bh8lkonPnzpmWKVeuHB4eHsbIv6JFiwJpG5A8KKvRgY8i/RcKrq6uGdYUfFakr5GYPlrsfg/uzJud7/Z/YwAAIABJREFUatWqUa1aNQYOHMipU6fo3Lkz48ePN9Z6zKmiRYty5swZkpOTjZFn6a5evYqDgwP58+cH0oLLzEalpe8O/TDpowczKxceHp6r/mZn2bJlJCUl8d1335l9DrJ6vg+OQoW09yhfvnw4OztnKJv+uQaIi4sjLi7OCPvy8nMYa4qlxcIWbOu5jeqF0zbsGbdjHON2jMtVPbdu3TLuI6spDfb29sZ76+joaDwXBwcH7t27R6FChUhMTGT69OlUr16dOnXqGEGpm5sbUVFRub5HEREREZGnxdramuLFixuv7/8+k5SURPHixYmOjubKlSuEhoZSpkyZvzUS8JnbBXjPnj2ULFkSPz8/LC0tKVasGE2bNmXnzp1A2pchOzs78uXLh729PT179mTgwIF53GsRuV96CFijRo0cj/yztrZmzpw5jBo1in379mVaZufOnVy/fp0qVaoAaRtJODg4sH79+gxBwvr16wFo2LDh37ybNOlLCyxevDjDuR9//JHp06cbr9NHdT3u0WfZKVSoEB4eHuzcudMYDQhpIwNzEtydOHGCDz/8kLNnz5odL1++PMWLF3+kQKVx48bEx8cba9elu3jxIsePH6d+/fpGaJM/f37u3buXYQ3JHTt2ZNlGgQIFKF68OIGBgdy9e9c4npyczLp163Ld56ykP9cHg+UZM2YAmU8B3rx5s9nr69evc/z4cerUqZNt2fTnll42N5/DJyEqPopX57/KoWuH+HrX14zaNuqR6kn/GXFzc+PWrVt/1R8VZQTZD456vH+0ZGpqKjY2NnzyySe0aNGCq1ev8vXXX5t97kVEREREnifp34NKly5NoUKFsLS0xN3dnRIlSpCampqrNbwz80yOADxz5gw9e/Y0O56+PlDbtm2ZOnUqhw8fpmrVqvj6+lKhQoW86KqIZKFgwYK88cYbubpm3Lhx9OrVi27dutGsWTN8fX1xcnIiJiaGAwcOsGXLFjw8PBg+fDgAzs7ODB48mC+//JJBgwbRvn17rK2t2blzJ6tWraJTp07GVMO/y9fXlxYtWrBmzRosLCxo3rw51tbWbN68mWXLltGvXz+jbPqSBnPmzKF+/fr4+vo+lj7kRI8ePfj222/5xz/+wTvvvENSUhIzZsygdOnShIaGZnlt0aJF2bVrFwcOHKBPnz6ULl2axMREtm7dyqlTpxg2bFiu+9OrVy9WrlzJiBEjuH79ujHMfdq0adjb2zN48GCj7KuvvsqmTZuYMGECAwYMIDExkUWLFuVog5SePXsan5/u3buTmprK0qVLcXBwyHWfs1K3bl1WrVrF2LFj6dWrF/fu3WPhwoUUKlSIggULcvjwYUJCQow1LCFtzbthw4bRsmVL7t69y/Tp00lJSSEgIMCsbltbW5YvX86dO3d45ZVXuHjxIhMnTsTZ2ZlOnToBufscPi62VraYkv8K1m7G3eSVGVmPPrSztnvouftDv+LFixMREUFERAQeHh4EBQVRt27dHPUrPDyc69ev4+Pjg5eXFydPniQ2NpYCBQoYu1CLiIiIiDwvbG1tuXfvHjExMWZL2mW2LvmjeOYCQFtbW2rWrMmgQYMyPV+uXDm++eYbjh49yuHDh/nuu+/w9/fnzTfffMo9FZHHrUqVKqxZs4bZs2cTGBjIjh07SEhIwMHBAS8vL/r370+PHj3Mvtj/3//9Hx4eHsyePZtBgwaRmpqKl5cXI0eOzBCw/F3ff/89s2bNYtWqVcYIw/LlyzN+/HgjoIG0nWTXr1/P8uXL2bhxI8uWLXus/chKv379MJlMLF++nIEDB1KyZEneffddChQowPbt27Ncc87V1ZXly5fz/fffM23aNKKiooxn/+A95lT+/PlZvnw5kyZN4t///jeRkZHkz58fX19fpk2bZrZGW9u2bQkPD2fFihWsWLECDw8P3nzzTUaNGkXXrl3NNtt4UK9evTCZTCxatIihQ4dSsGBBOnXqRL169ejSpUuuNrzISvv27bl06RLLli3jnXfewdPTkzfffJN//OMfVKhQgYkTJ/Lee++xcuVK45rhw4fz22+/MXz4cKKjoylRogQTJ07MsDsvpI3iGzt2LDNn/j/27j3+6/nw///93fmggyIjU1PKEFGalGyTj33KmjnNeWzOq3y2ka8c5jgW64A5M0MSzWGYmDMzh0R9E/kwh5QcmkUn9a6+f/Tz+nmvg4bEY9fr5eKy9/v5eh4ez9fr9X699771PFyRBQsWpFOnTjnxxBNr3IBlVd+Hn5cdNtoh971y37+1TK82Kz7y9pvf/GZuuOGG7Lrrrqldu3YOPPDAXHrppVm8eHE6dOiQzp07L/dIyn+1zjrr5E9/+lMeeOCBJMlmm22Wli1bprq6Om+88UblDs4AAPBVsP7662fu3Ll57733snjx4my44YaZP39+5UCOz3LjxCSpWrBgwed3T+FP4fLLL8+HH35YOY33rrvuyoMPPpjf/Ob/v6D4rFmz0qhRo9StWzezZs1K06ZNK3/Ejhs3LldeeWUuvvji3H333a4ByH+UqVOnrvEbT/DVMGrUqJx00km56KKLsssuu6zp4fxHuPzyy3POOedk9OjR6dq160rnPfTQQ/PQQw9VbnD1ZfLKP1/JPmP2yZPTnlyl+XfYaIfcsOcN2aDJBiucZ9iwYdl9993Tpk2bz2uYFQ899FDee++97Lbbbp/7ugEAYHWqrq7OK6+8kg8//DC1atWq/MP4euutl3XXXfczrftLdwRgjx49cuutt+b222/PLrvsklmzZuWCCy7INttsk379+uXUU09N796907t37yTJyy+/XHkS6tWrl1mzZmX27NmpX79+6tatuyZ3BeALN3r06Nxzzz0599xza/wL0UfX0fv4qamwKr7R/Bt54tAn8v6H72fuwrkrnbdxvcZpUq/JSudJkgMPPDBXX311Bg4cWDml4fMwc+bMPPXUUznmmGM+t3UCAMAXpU6dOtl4440zffr0fPDBB6lbt27WW2+9ynWyP9O6P4fxfa6aNm2agQMHZvTo0bntttvSpEmTdO/ePd///vdTq1atDBgwICNHjsxtt92W2rVrp127djniiCOSJJ06dcpdd92Vn//85zn22GPTsWPHNbw3AF+s9dZbLw899FB+8pOf5Kc//WkaNWqU+++/P/fcc0/69etX4y5T8O9oWr9pmtZv+rmsa5111smxxx77uazr41q2bLla1gsAAF+U2rVr5+tf//rnvt41fgow8Ok5BZjleeCBB3LJJZfkxRdfzLx589K6dev84Ac/yJFHHvm5Hm3FypVyCjAAAPDVJwDCV5gACAAAAHySWmt6AAAAAADA6iMAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AABgeSZNmrSmh1CxxRZbrOkhAAAAfGoCIABfWp3+2Ckjvjcix4w9Jg3qNMj86vmrbVtLfrUkc+fOzYsvvpjOnTtXpn+ZQiQAAMCnIQACXxnTp0/PJZdckocffjhvvfVWGjVqlI022ii777579ttvv9SuXTtJMmXKlPTp0yejR49O165d1/Co+SxmHzs7jz/+eGYfOztvv/12WrVqtdq2NWfOnCTJJptsUvkaAACgBAIg8JXwzDPP5JBDDknTpk1z4IEHpn379vnggw/y6KOP5rTTTsujjz6aSy65JFVVVfna176W008/PW3atFnTw/5KOumkk/Lmm2/myiuvXOE8O+20U/bdd98ceuihq3Us9erVS69evZIkG264YWV63bp1V+t2k2TJkiWpqqpa7dsBAABY3QRA4Etv4cKFGThwYFq3bp0bbrghTZo0qTzWr1+/fOtb38qJJ56Yxx9/PN27d0+zZs2y//77r8ERf7Ucf/zx6dmzZ77//e+v8jI///nP0759+9U4qjXrO7d9Jw/84IE1PQwAAIDPhbsAA1969913X6ZPn54TTzyxRvz7yB577JGnn3463bt3T7L0FOB27dpl3LhxefTRR9OuXbs888wzNZaZMGFC2rVrl0ceeSTJ0uu8/fjHP06XLl2y5ZZb5qijjsq0adMq8w8YMCD9+/fPmDFjstNOO6VTp07p16/fMuv9Knr++ef/7WV23XXXbLrppqthNGtW1zFLTxkX/wAAgJIIgMCX3rhx41KrVq1069ZthfM0btx4udO7d++eli1b5p577qkx/a677krLli2z/fbbZ/r06dl///1Tu3btXH/99Rk5cmTee++9HHjggVmwYEGSpE6dOhk3blyeffbZ3H777Xnqqaey9tpr5/jjj//E8VdXV2f48OHp27dvunfvnj59+mTo0KFZuHBhZZ5nn302hx56aHr06JGePXvmyCOPzHPPPVd5fMyYMendu3fGjRuXffbZJz179sw+++yTF198MXfccUd++MMfplevXhk4cGDee++9ynLvvfdeTjnllPTt2zc9evTIwQcfnHHjxlUe79q1a6ZPn57TTjst3/72tyvTa9eunQceeCC77757tttuu/zoRz/K5MmTK4/vtNNOueKKK2qM7aOIuuOOO6Zfv3657bbbajwPN998c3bddddsv/32OeKII/Lqq6+ma9eu+ctf/vKJz+EXZdye49J1TNdKCAQAACiBAAh86b399tv52te+ljp1al61YN68eZkzZ07lv/nzl71DbO3atfO9731vmQA4duzY9OnTJ7Vr187IkSNTVVWV4cOHp2PHjunUqVOGDh2a119/PXfddVeN7Z100klp1KhRGjRokN122y0vv/xy5s2bt9LxX3311bnzzjtz8skn56abbsrgwYNzzz335NJLL02SvPbaazn66KPTqlWrXH311fn973+fRo0a5aijjspbb72VZGmAnD17dm6++eZcfvnlueuuu7Jw4cIcd9xxGTduXEaNGpUxY8Zk8uTJue6665IkixcvzoABAzJx4sSceuqpue6667LZZptl4MCBeemll5Ikf/7zn5Mkxx13XI1gN2PGjPzxj3/MKaecUrm24imnnLLc/ftobFdccUWGDBmSBx98MH379s3ZZ5+dt99+O0ny3HPP5de//nV23HHHXH/99enXr18GDx6cJJ/6Onv1zqhX+XrWrFmVr+fOnZtk6fvmww8//LfXO27PcRm357hPnhEAAOArQgAEvvRq1apV42i5j+y4447ZcsstK/8dcsghy12+b9++efXVV/Piiy8mWRqjpk6dmn79+iVZevTdlltumaZNm1aW2WCDDbLRRhvVOOqtTZs2adCgQeX7Zs2aJakZn5bnpZdeSvv27bPddttlww03TM+ePXPJJZdUrrk3ZsyYNGrUKKeffno22WSTbLLJJjnzzDNTXV2dO+64o7Ke6urqHHTQQWnSpEmaNGmSHj16ZNq0aTnmmGPSoEGDtGrVKl27ds2UKVOSJE888UReeOGFnHTSSdl2223zjW98I8cee2zWX3/93HDDDTX2oVGjRpWvk2TmzJk588wz07lz53Tu3Dn77LNPXn311cyePXu5+1hdXZ2DDz446623XqqqqvKDH/wg1dXVlef8jjvuSIsWLfKLX/wibdu2Td++ffPd7353pc/bR1YUWBecvCAXX3xxnnvuudx8880ZPXp03n777TRq1ChJ0qpVq9SvX/8T1z/y+RmrNA4AAICvKjcBAb701l9//bzzzjuZP39+jQB3+eWXV8LgRRddtMJQtO2222bdddfN3XffnQ4dOuSuu+5K69ats8022yRJZs+eneeeey7f/OY3ayy3YMGCyhFsSWps++OWLFmy0vH36tUrp5xySk444YTstNNO6datW9q2bVt5/Pnnn8+mm25a4wjHRo0apU2bNpWA9pGP39m4cePGadasWdZee+0a02bMWBq0Jk2alLp166ZLly6Vx2vVqpWtt966EglXpE2bNmnevHnl+xYtWiRZenTdWmuttdxlNtlkk8rXH8XUDz74IEny6quvZsstt0zt2rUr83znO9/JJZdcstJxJEnDhg1X+FjXrl1z+eWX56233sqoUaM+cV3Ls/83v/aplgMAAPiqEACBL73tttsul112WW6//fbstddelelbbbVV5euWLVvmjTfeWO7ytWrVSp8+fXLPPfdkwIABGTt2bI073jZp0iRdu3bNWWedtcyyK7q24L+jT58+ady4cW666aaccsopWbRoUXbcccf8n//zf9KiRYvMmTMn66yzznK3PWfOnBrT6tatW+P7evXqZUXmzJmThQsXZvvtt68xfdGiRWnZsuVKx/yv0e2j03RXFjuXd7TdR/PPmjUr6667bo3HPn7E4ae17bbbZtttt/3M6wEAACiZAAh86e2www7p0KFDzj///Oy4445p1apVjcfnzp2bl156aYVH6CVLTwP+wx/+kMceeyyvvPJK5fTfZGlI/OMf/5iNNtqoRmB75ZVXltnWp7Xjjjtmxx13zLx58/Loo4/mt7/9bc4444wMGzYsa6211nJPrZ09e/Zyw+CqWmuttVKvXr1cf/31yzxWq9YXewWIevXqLXONxvfff/8LHQMAAMB/KtcABL70atWqlREjRmTBggXp27dvLrzwwtx///25++6789vf/jbf/e5389prr2XAgAErXMc222yTDTbYIGeddVY6duyYjh07Vh7bb7/9Mnfu3AwaNCiTJ0/Oq6++mgsvvDC77LJLJkyY8JnH/+CDD2b69OlJlh5Zt/POO2e33Xar3Ihjs802y/PPP1/jOocffPBBXn311Wy++eaferubb755FixYkEWLFqVt27aV/+rXr79M2Pyk05g/q4+up/jx7TzwwAOrdZsAAAAsJQACXwkdOnTIn//85/zwhz/MLbfckp/97GcZNGhQ7r///uy77765//77lznV9eOqqqry3//933nhhRdqHP2XJK1bt87IkSPz7rvvZq+99soPfvCDPPTQQ7nsssuy9dZbf+axjxo1KieccELGjx+fadOmZdy4cbn33nsr1+bba6+9Mn/+/Jx++ul57bXX8tJLL+XEE0/MWmutlV133fVTb7dbt27p2LFjTj755Dz99NOZPn16xo4dm/322y833XRTkqWn7davXz/jx4/PlClTUl1d/Zn3d3l69+6dGTNm5JJLLsm0adMyduzYPPzww6tlWwAAANTkFGDgK6Nly5YZPHhwBg8evNL5OnbsmJdffnmZ6StbtlOnTrn22mtXuM5hw4YtM+273/3ucrfzr84+++wMHTo0gwYNqpzW27Nnz/Tv3z9JsuGGG+Z3v/tdLrjgguy7776pXbt2OnfunEsvvbTGDT7+XbVr184FF1yQ4cOHZ9CgQZk3b1422GCDHHroodl///0r8x188MH5wx/+kEceeSS33nrrp97eyvTq1StHHXVUbrjhhlx//fXp0qVLBg8enP3333+V7tQLAADAp1e1YMGC1XveF7DaTJ06NRtvvPGaHgZ8oiVLlmTmzJk1rmn4zDPP5LDDDsvo0aPTrl27ZZaZNGlSjVO1P+5fb4ayOk2aNClbbLHFF7Y9AACAz5tTgAFY7caPH5/vfe97ueKKK/L6669nwoQJGTp0aDbffHMRGwAAYDVzCjAAq12XLl1y2mmn5dprr83vf//7NGnSJF26dMkxxxyTqqqqNT08AACAogmAAHwh+vbtm759+67pYQAAAPzHcQowAAAAABRMAASgeGfc8kDefPPNJMkrr7yy3HnOO++8JMndd9+dBQsWZPHixZU7NQMAAHyVuQswfIW5CzAlmzRp0poeQoW7AAMAAF9lrgEIwJeS6AYAAPD5cAowAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AAAAAFhzhgwZkokTJyZJlixZkiSpqqpKkuy2227Zc889/+11/vWvf02XLl3SoEGDz2+gAHxqAiAAAMB/sEGDBlW+Hjp0aNq0aZM99tjjM63zxhtvzOabby4AAnxJCIAAAAAs18KFCzNq1Kg8++yzqa6uzmabbZaf/OQnqVevXqZMmZJrrrkm8+bNy5IlS7L99ttnr732ytChQ/Puu+/m9NNPz0EHHZTOnTuv6d0A+I/nGoAAAAAs1+23357XXnstZ599dkaMGJHFixfnhhtuSJJcd9116dOnT4YOHZqzzz47b775Zt55550MGDAgSXLKKaeIfwBfEgIgAAAAy/XII4+kd+/eqV+/fqqqqrLLLrvkiSeeSJKsvfbaeeKJJ/LKK6+kfv36GThwYNZdd901PGIAlscpwAAAACzXnDlzcu2111aO+luyZEkWLlyYRYsW5Ygjjsidd96Ziy++OO+//3522mmnT3XDEABWPwEQAACA5WrRokX22Wef5Z7K27hx4+y9997Ze++9M23atAwZMiRt27Z12i/Al5BTgAEAAFiubt265Z577snChQuTJH/9619zyy23pLq6OieddFKmTZuWJGnVqlUaN26cJKlVa+mfmXPmzFkzgwZgGY4ABAAAYLm+//3vZ9SoURk0aFCSZJ111skhhxySOnXqZNddd83w4cOzYMGCVFVVpWvXrunatWuqqqryrW99KyeffHL233//7LTTTmt4LwCoWrBgwZI1PQjg05k6dWo23njjNT0MAAAA4EvMKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrM6aHgD8p5kxY0aWLFmSVq1apXbt2lm0aFHefvvt1KpVK+utt95y5wEAAAD4tBwBCF+wxYsXZ8mSJVm8eHGN7xctWrTCeQAAAAA+LQEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAoWJ01PQD4T9OwYcMkSZ06dSr/27Bhw1RVVa1wHgAAAIBPS12AL9jaa69d4/uqqqplpv3r9wAAAACfllOAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAfJ4XGAAAgAElEQVQAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGB11vQAAABgdZjw+ox0Oel3WZLkv7faJHf88qAkyYLqRTnn9odz/WMT8uq776Vx/Xrp3Gb9nPD9HdN7i3ZJkiseHJcb/jYx957wk9U+zpdffjknnHBCbrzxxhrTn3vuuZxzzjm59tprc/bZZ2fChAlJksWLFydJatVa+m/5u+++e7p06ZITTjghffr0ycEHH1xjPQ8//HAuvPDC9O/fP7169cqf/vSnjB8/PqeeeuoqjW/QoEGZP39+hg8fXtnm523SpEm58MILs8022+Twww9f4Xz33XdfbrvttsyePTsbbbRRjjzyyHzta19bZr5FixblD3/4Q5588sksXrw4nTp1yhFHHJF69eqtdBwfvRZ16iz9M6lJkyZp3bp1/uu//ivbbbfdKu3LCy+8kEaNGmWjjTZapfm/Kj7Lfh199NH52c9+ls0337zG9PPPPz+tW7fOHnvs8ZnHt8eI63Pb089n0ZIleer0o9L1G62TJKP+NjEj7n4s/3fqW6lVVZV267XI4d/ZNkf3/laS5KW3ZmbT44an+pozPvMYVtXYsWNz7bXX5uijj06PHj1WON+tt96au+++O/Pnz8+GG26YQw45JBtvvPFy513Vn6Ekueeee3L77bfngw8+yAYbbJCDDz44HTp0WGZ9p59+en71q19VXrcXX3wxV111Vd5+++00b948BxxwQLbZZptP3N8zzzwzzz33XKqqqirTfvGLX6R9+/Y5+uija8y7ZMmSdOrUKYMHD86HH36Y6667Lk899VQ+/PDD9OjRI4ccckhq165dY5kbb7wxY8aMWeYz9PN24IEHprq6OlVVVWnQoEHWW2+9bLfddunbt2/lM+PzsqLXc+HChbnmmmvy5JNPZuHChdl0001z+OGHp3nz5p+4zpW97iv7bJ08eXKuueaazJgxI02aNMkee+yRb3/720mSp59+OqNGjcq7776b5s2bZ88990zPnj0/cSxLlizJqFGjcv/996e6ujrdunXLYYcdlrp16y4z78q2P2nSpFx33XWZMWNGWrZsmcMOOyybbrrpv73/Y8eOzZ///Oe8//772WSTTXL00Udn7bXXXuH4V/R78ZxzzsmECRNy6aWXpmnTpjWWGThwYJYsWZILLrjgE5+f1UUABACgSFtt9LVUX3NGzrz1wTz+8uuV6buPGJmpM2fl8kN3S5e2rfNhdXX++NRz2W34dbnz2IOy46bfyP7bb5U9tt18JWv/Yp1wwgmVr4cMGZK2bdtm7733rkx7+eWX07x58zz22GM54IADavwx+tBDD630D5mVmTJlSpo3b54GDRpk/Pjx6dq166ffiRV46KGH8pe//GWFf7R95O9//3tGjhyZX/3qV/n617+eMWPGZMSIETn77LOXmXfs2LF58cUXc95556Vu3bo577zzcuONN+aAAw5YpTFdf/31SZJZs2blqaeeymWXXZZ33303u+666ycue99996Vz587FBcAv+3798Zj9kiR1Djq5Mu3cOx/Jb+54OBcc9P38V6f2aVy/Xh6Z8mqOuOq2zJw9Nyfv9p18Y921M+2C47+wcV5yySVZvHhx1l9//ZXO97e//S333ntvzjjjjLRo0SI333xzhg0bttx4sKo/Q0kyceLEjB49Oqeddlpat26d2267LcOGDcvFF19cmWf+/Pm58sora0SlBQsW5LzzzssBBxyQHXbYIRMnTsywYcMyYsSINGvWbKXbnDt3bn75y18u9/Pjo5+1j/zmN79J9+7dkyQ33XRT3njjjQwdOjSLFi3KWWedldtvvz277bZbZf5XX301f/3rXz9xvz8vJ510UjbffPPMmzcvU6ZMyTXXXJMXXnghxx//+b2HVvZ6jhkzJq+99lp++9vfpm7duhkxYkSuu+669O/ff6XrXNnrvrLP1g8++CC/+c1vcuSRR6Z79+6ZPHlyzjzzzHTs2DH16tXLiBEjMmjQoGyxxRaZNGlSfv3rX6dDhw5p1arVSsczduzYTJo0KUOHDk2dOnVy4YUXZsKECcu8R1a2/YYNG+bcc8/NgAED0qVLlzzyyCM599xz87vf/S4NGjRY5f0fP358br755px66qlp1apVrrrqqlx88cUZPHjwcsf+Sb8XmzVrlkceeSR9+/atTHvhhRfy4YcffuI/Qq1uAiAAAP8x7nvu5dw76eW89NtfZMMWS/9obVS/bg79dtfs0mmTrN+8SZJk5GMTcsPfJubYvjvkJ5f/MW+cf3xq/X9Hr5w85t5MnvZ2/njMfnl0ymv55fV35b0581K7VlVGHLhr/qtT+7zyznvZ5qTf5ay9ds7Yif+bl96amZ23aJ8RB/Zd4dg+q4YNG2bttdfO+PHj061btyTJzJkzM3Xq1E8dbe6999707Nkza621Vu65554af+gMHz48TZs2zTvvvJPZs2dn8eLF+dnPfpYNNthgpY/9qzZt2uTUU0/N6NGjM2fOnBWO5bHHHkv37t3Tpk2bJEuPfPzTn/6UN998c5mY8uijj6Zfv35Za621kiR77LFHhg0btsoB8CPNmjVL796907Rp05x//vn5zne+k8aNG2fcuHG54YYbMnfu3NStWzf7779/unXrlltuuSWPPfZYJk6cmGnTpmXvvffOzTffnAcffDALFy5My5Ytc+SRR2bDDTdcZlsvvfRSLr300syfPz/t27dP/fr106xZs+y7775ZuHBhRo4cmfHjx6e6ujqbb755DjvssNSrVy8XXnhhmjdvnpkzZ+af//xn3n///QwYMCBt27atvIZ33HFHqqur06JFi/Tv3z+tWrXK/fffn3HjxqW6ujqLFi3KySef/G/t14rW+9E2b7nlltSrVy/du3evceTXv5o1a1ZOO+20TJ06Neuss0769++ftddeO4cffnjOOeecfP3rX0+y9A/oIUOG5LLLLlulo63en/dhTr35/vzhiD2yZ7ctKtN33qJ9Hj/1yDSqt/RIo1feeS+bHjc8My85Mev97Ow8c1b/fHODdZMs/bzY76IbM+384zNj1gf52dW35/np72ThokU5uve3clzfHZIkbf7n3Pzyv3vm/sl/z7T33k+zhvVz8//sn6YN6y8zrp133jnt2rVbYVz4yHrrrZeBAwdmnXXWSZL06NEjN954Y6qrq5fZ/1X9GUqSpk2b5phjjqm8B3v27Jnrr78+8+fPr0ST6667Lj169MgTTzxRWW7SpElp1KhRevXqlSTZaqut0q5duzz11FPp3bv3Ct87STJnzpw0atRopeNKlkbPuXPnVrYxfvz47LPPPpVl+/Xrl5tvvrkSAKurq3PRRRflgAMOyLnnnrvC9b711lu54oor8tZbb6VWrVrp2rVr9tlnn9SpUydHH310dt1110yaNCn/+Mc/0qhRoxx77LGfON6GDRumc+fO2XDDDfOLX/wizz77bDp37pyZM2fmyiuvzBtvvJFFixZll112Sb9+/ZIkM2bMyKWXXprXX389TZs2zb777lt5jj5uZa/nN7/5zfTo0aPy2fatb30rd9111yc+tyt73Vf22dqwYcP89Kc/rUTZzTbbLC1atMibb76Ztm3bpn///tlii6U/X1tssUWaNGmSGTNmfGIA/Mtf/pIf//jHlaPkBg0aVHnsyiuvzJw5czJw4MAsWrRohdtfsGBBWrVqVfm91KtXr9xyyy2ZOHFiunXrVmM9K9v/Z555Jttvv33l99OPfvSjHHbYYfnggw/SpEmTZca+st+LSbLNNtvkgQceqBEAH3rooXTq1ClTpkz5xNdqdXINQAAA/mPcP/nv6dmhTSX+fdzXWzZLndo1/+9x783bZdHiJfnri69Vpt30xKQc2LNz/jF7Xn44fGRO2u3befG8n+fGAftmz/Ovz1uzZqdOrVqZNXd+qqqSP/3igPztV0fk8geeypQ3311t+7Z48eLssMMOeeCBByrTHn744Wy//fYrDTArMnfu3EyYMCHbbbddOnfunNdffz3/+Mc/Ko/XqlUr48aNy8CBA3PGGWekS5cuueKKKz7xsX/Vtm3bVQo606ZNS+vWrSvf16lTJ61atcq0adOWO+/HY+MGG2yQ9957L/PmzVvl/f+4bt26pX79+pkyZUo+/PDDDB8+PAcffHAuuuii7L///rnggguyaNGi/PCHP0ybNm1y0EEHZe+9987kyZNzxx135Mwzz8zFF1+cdu3a5eqrr17uNs4///zsvPPOueCCC7Lzzjvn0UcfrZzqeOutt+aVV17JkCFDcuGFF2bx4sUZOXJkkqR27dp58sknc/jhh+dXv/pVunbtmltvvTXJ0tPIR40alcGDB+fCCy9Mr169MmTIkMrzN2nSpOy22245+eST/639Wtl633333Vx11VU5/vjjM2zYsLRs2TIzZ85c4XP7+OOP56ijjsrll1+eDh065Kqrrkrjxo3TtWvXPPjgg5X5HnvssfTo0WOVT7V84uWpqV60OLsv50jeVk0bZ60GNY/EadaoQfps1TFjnpxUmXbjE/83+3bfMnVq18qBl4xJh/XXyZRz/yfPnNU/Vz88PreMm7z0uaxVK4+/PDW3/M9+eer0ozJvYXVG/W3CcsfVrl27VRr/xhtvXDk9ce7cubnzzjuz9dZbL3f/V/Vn6KN5t9xyy8r3Tz/9dNq3b1+Jf5MnT86LL75Y4yi7JJk+fXqNn79k6c/V9OnTV/reSZYGwDvvvDMDBgzIwIEDM3r06MpjH1m0aFFGjhyZAw88sMb0jy55kCSNGjXKm2++Wfn+lltuSYcOHbLZZputdJ9HjBiR9u3b5/zzz8/ZZ5+diRMn5t57702y9LPqf//3f3PcccflnHPOyYIFC/6tIwrXWWedbLXVVpk0aen75oILLsj666+fESNGZMiQIXnwwQfz5JNPVsax9dZb58orr8yAAQNy/vnn55///Ocy61zZ6/mvR+GOHz++EuBWZmWv+8o+W5s3b14JskkyderUvP/++2nfvn1atGhRCZjV1dV58MEHs2TJkrRv336lY6murs60adMyY8aMHHfccenfv3+uvfbaVFdXJ0l22mmn9OnTJ0lWuv2k5vsjWfoemT59+jLr+aT3/cfX07BhwyRLg+2/+qTfi0nSsWPHzJ07N3//+9+TLD169sknn1zly0isTgIgAAD/Mf5fe/cfFWWZNnD8O8MAg6AgmRrOpmkpiIWSIpIKikuaWqauenCtfFctf/+gNg9uW4uRW1KRIq/ulnJILTMsXS1LsBxCUkjTVVRUWKFdARHk1wADzLx/zPLIwDCAb5utXZ9zPMd55pn7uZ95fsx5Lq7rvksqq+npYf0Xfd2yN+i5eB09F69jaqx1OZrGQc1vAgaRlHEWsIwreK2iisf8BvDZqQt069yJyUMsZVoP/qoHI/v3Zu+Jc6hUYAZmDrc8cLh30tLLswt511s+7DWaP3++1b+YmJgO719QUBBZWVnKQ+WRI0eUsZI6Sq/XM3ToUJycnFCr1YwaNYrDhw9brRMQEKA8LAUEBJCVlYXZbG7zvVthq3zK2dmZ2traNtd1dnZWlt8qFxcXDAYDzs7ObNmyRXno9vPzo7a2ltLS0haf8fb2Ji4uTsly8fPzs/lQWVxcTEFBgfKgO3DgQKux3vR6PY8++iharRa1Ws2ECRNIT08HQKVSMXjwYOW71ul0FBdbAs2pqakEBgYq2Thjx46lsLBQeUDu2rWrEjzpyH7Za/fs2bPodDolSDFmzBi7Y0cOHTqU7t27o1KpGDt2LOfPn8dsNhMSEkJqaiomkwmTycS3337LqFGjWm2nuZLKau7u4qpk7gLM2Pihcq33XNyydDw86CHlWm8wmfgkM4vfPjKYH0rK+PpcLs8/NhKVSoVHJy1Pj/Jn97+DhSqViunDfJVA+8Bed5N3vazdfbUnLi6OZ555hsuXLzN//vwfpc1G33//PZ988okyDl9tbS1/+ctfWLhwYYsAVE1Njc3rr6amps1zZ9iwYQQFBfHOO++wevVq0tPTOXDggFVber0eLy8vq+CRv78/Bw4coLKykoqKCr744gvq6uowm83k5eWRmpraZlZvaWkply5dYvLkyYDlOg4JCeHEiROA5dgFBgYqx67p9dNenTp1oqqqiuvXr5OVlcXkyZNRqVS4uroSHBxMeno6paWlXL58mV//+teAJcAbHx/fYpy4jti9ezeFhYVMnz69Q5+zddzbc28tLCxk/fr1LFiwwKrfKSkpzJ49mw8++IBly5a1mT1pMBgwm81cuXKF6Oho1q5dy6lTp/jss88AS7DOVhCx+fZ9fHy4du0a6enpmEwmMjIyyMvLo66uzm47zfd/yJAhHD16lPz8fOrr60lKSkKj0SjtNNWe30WVSsXo0aOVP2BkZGQwYMCA/9ex/rFICbAQQgghhPjF6N7Flax/Flkt+27tIsxmSMo4ozzQNxUe5MesuF28PfsxPjr2d2YMfxAnjQOlVdX8o/gGfVbcDNRV19XxSP/eyuumJYAOKjUNptYDYM1L2C5cuEBcXFyH9s/FxYVhw4ah1+vx8fFBo9EopaAdlZycTFFREUePHgUsGRJubm5MnTpVCeg0fdBzcXHBZDIpWXatvdeeUkBbtFptiwfSpmWLzdc1Go1W68HNQGBH1dfXU1xcrIx1duTIEdLS0qwCms0zUcCS+bFr1y4uXLiAWq2murra5noVFRVoNBqrfWks/QRLBlVCQgLbt29XltXV1SlZVE2/U7VarWyjsrKSM2fOcPLkSeV9R0dHJUDcvLytvftlr92KigqlPLGxP01fN9d0nDk3Nzfq6+upqanBz88PsDysa7VatFpti4kq7OnexZWCGxXUNTTg+O9Myi3/8wS1dQ1cvVGB/0ubWnxm0hBvfvfXT7hUeJ3ca6Xc5daJoff14u/5hQAMf3mzsm5dQwMP3XtzApouLjePneVab/m93YolS5Ywb9489Ho9a9as4e233+7QNbRkyRIMBgMAr7zyihKYPXjwIPv372fNmjVKWeSOHTsIDAzkvvvua9FOW9efvXPn2WefVZZ5eXnx2GOPkZaWppTGgiWI1Jit1Wj69OkkJCTw/PPP4+7uTnBwMOfPn8dkMhEfH8+8efPQarV2y57LyspwcHCw+s46d+5MeXm58roxeA7W1097FRYW4u3trfSjaXl3Q0MDvXv3pqKiArVabbWtWw0I1dfXs2XLFq5fv84f//hHm/fA1tg67u25t54/f5533nmHOXPmEBQUZLVuaGgoISEhnDt3jg0bNhAREcGAAQNa7UPjsRg/fjxOTk44OTkRFhbG8ePHrc6Jpmxt393dnYiICHbs2MG2bdsICAjAx8cHV1fXDu2/v78/jz/+uJLFPGnSJJycnGy2057fRYCQkBAiIyOZM2cOR44cYdy4ca326ackAUAhhBBCCHFHOfmPq2QXFDMz8EHAEpTrrLUEfh596AFe23eE7IJi+ve0BFh6uFuCE00f4Jsacf+vcFCryMj5J7uPnWHbgqkA9OrahQd1PTgetbDFZ34o6Xj2T/NZHO0FTewJCQkhMTGR4uLiW87+y87Oxmg0kpiYaLV89erVnD59msGDBwNYPURXVFTg4OCgPODae+9W6HQ6q3Jfo9FIYWGhzfH0dDodP/zwgxL8zM/P56677rrl7ev1eiUAdfLkSfbu3cu6devw9PTEYDC0mHm50ccff8zVq1eJiorCycmJjIwMtm3b1mI9V1dX6uvrMRqNSiZOSUmJMgunp6cn4eHh7ZpxtSlPT0/GjRtnM0tKr9dblYZ3ZL/stVtUVKQEnMASrKioqGi1j5WVlcr/GwOhjcdp9OjRpKWlodVqW83+izv0LVOHDsSraxeM9Q2YzGY6a50Z6NUdN60T29NOMXe05Xvr6mppt65Z+WkjraOGKUN92JORxaXC6/z2Ect53qurJVBz9vVluDr/NIP4nzp1Cjc3N/r164dWqyUsLIyPPvqI3NzcFrMp2xMdHa0E5RoDvvv37yc1NZVXX33V6r5z/Phx1Go1er0esGTPxcbGMm3aNHQ6HYcOHbJqOz8/n+DgYLvnjtFo5NKlS1ZlunV1dVYZhqWlpeTm5jJkyBCr9rVaLc8995zyOiUlhb59+5Kfn09RURGbN1sCso37t2jRIiIiIqzKrD08PGhoaKCqqkoJ6JSXl7dr1tz2+Ne//sWFCxcIDw/H09MTgLfeeqtFUK6srAyTyURlZaVyb7969Spdu3btUADPZDIRGxuLi4sLkZGRHZp9uLXj3ta9tTH4tnLlSqsgfF5eHkVFRQwdOhQHBwcGDRqEt7c3p06dshsA1Gg0dOvWzeq+YDKZWs0Ubm37YMk2bfxjQeNYs1OnTu3Q/oNlfMmmYzVu3769xZi17f1dBOjZsyc6nY7U1FRyc3Px9/dXSoJvJykBFkIIIYQQd5SSKgML3vuU03kFFJVXse/EOUYNsASCgh64l+kBvkyMSST5zGUqa4yUV9fyYfpp1uw+hH+flpNUqFQqZgU+xPoDqTSYTEqG31jffuRcK+Hrc7kAlFZVM+d/d5NTVNKijZ+Sr68vBoOBY8eOMXLkyFtqIzk5uUWWB1hKjFNSUpTXJ06cULLJ9Ho9vr43yyDtvdde2dnZnD1rKckcOXIk6enp5OTk0NDQwMcff8z9999Pjx49ADh27JhS2hocHMy+ffsoLy+nurqapKQkgoODAUvwISUlxSpI1Zqqqiq++uorEhMTmTNnDs7OzpSWluLu7o6Hhwcmk4l9+/ahVquVLEONRqNkApWWlnLPPffg5OREVVUVhw8fxmg0tiiF7tatG56ensrYY+fOnbN6WBw+fDgHDx5UStJSU1NJSkpqs/+BgYGkpaUpY1Tl5eURGxvbYvy1xr62d7/stevt7c2VK1e4csUybuaXX35pt4+ZmZlW50nT8cxCQkLIzMy0W/6769u/88qew9TU1bNN/x33eHSmX3dPOjk78vqsR1n+/n7e+/o7isqrqK2rJ/XCPwiP/4ghvW3Pwhs+wo8D319g34lzzA6yBBY83VwY43Mfb31uOT71DSYiP/qSv508b3ffOqrp+X7x4kU2b96sfMfHjx+npqYGnU7XoWcKadYAAAa2SURBVHO48Zh6eHjg4OBATk4OBw4c4KWXXmoRBNm8eTPx8fHKP51Ox4oVKxg/fjyDBg2itraWw4cPYzKZyMzMJC8vj4CAALvnjslk4o033iAlJQWz2UxRURFffPEFw4cPV7abm5trM0C/Z88e4uPjqa2t5dq1a3z66aeEhobSp08ftm7dqvSzcbiE+Pj4FmMsenh40L9/f6W81GAw8NVXX9mcfKMjjEYjZ86c4fXXXycoKIj+/fvj5uaGr68v+/fvByzZfzt37iQzMxN3d3elH43lry+++GK7jmFTn3/+OUaj0WaZ9rVr1/jmm29sfs7ecbd3b62pqWHDhg2sWLGiRfCtsrKSjRs3kp2dDViCoefPn1eGL8jOzlbGRmxu7NixJCUlUVNTQ3l5OSkpKUoA+MqVK8r9z972DQYDixcv5tKlS8p55+LioqzXtB17+3/27FlWr17NjRs3qKmpITExkeDgYBwdHa3Wa+/vYqMxY8awc+dORowY0aFA7X/Sz6MXQgghhBBC/EhCffvx4uTRhL2+DWN9AzOGP8j8MTdn6du+8De89Xkay9/fz+WiElycHPHv48Wb4RP4zXDbg6mHB/nxUORGXppyM6POo5OWvSt/y6odn3O90oBapeKZ0f707e55SxmAP5bG8YdycnJazXLJyspi1qxZVsv+/Oc/06dPHwwGA0ePHiU6OrrF50aMGMGHH35IWZll/x5++GHi4uK4evUq7u7uLFu2TFnX3ntNvfzyy1y8eFEpu/v6668ZNGgQkZGRpKamUlVVha+vL/feey9z584lNjaWiooK+vbta9Xmrl27mDhxIl5eXowbN04ZYN5sNuPv78+0adMAqK6uZsuWLfj6+rZaShkeHg5YygEbZ7psnOkxMDCQb775RplZcsaMGTz88MO89tprrF+/nsDAQBITE7l48SKTJk1iw4YNrFq1Ck9PT2bPns2bb75JdHQ0f/jDH5TtqdVqFi5cyNatW9m7dy8+Pj4EBAQoAdMnnniCnTt3smrVKsASMJw3b57Nvjc1cOBApk2bxtq1a2loaMDZ2ZmZM2cqk4s01ZH9Wrx4cavt9uzZk6eeeop169ah0WgYOXIkXl5eNssqTSYTQUFBxMXFUVBQQJcuXVi6dKnyvk6nw8vLS2nXlvfmP8nv/voJdz0XTd/uXflwyUxlMp9nxwbQ070z6w+ksny7JSjzQI+7CA/yY2nYCJvtjRvUj6e3WCb86HN3V2V54nPTWZTwN+6PeAuz2czIAb0Z49PXZhutqaur4+mnnwYsmZFxcXFs2rSJGTNmMGXKFKvzfcqUKVRWVhIZGUlNTQ3dunVj+fLluLu7U15ebnUO27uGmktOTqakpIQFCxZYLY+KirI7eYNGo+GFF17gvffeIzExkbvvvpuIiAjc3NzaPHdWr15NQkIC77//Pm5ubowZM8aqJLK4uFjJnmsqLCyMjRs3smDBApydnZk4caLNAExbli1bxrvvvsuKFSsAy33sVrOjX331VeW67N69O6GhoUyaNEl5f8mSJbz77rssXboUs9mMt7e3EtRevnw5cXFxHDx4kM6dO7No0SKb+23veB46dIiCggKr7FsnJycSEhLIzc0lMTHR5h9+2jrurd1bv/vuO4qLi/nTn/5k9blZs2bx+OOP89RTT7Fp0ybKysro1KkT48ePV+6VR48epayszOYkJU8++SRlZWUsWrQIR0dHHnnkEWV8xOTkZGX23ra2P3PmTGJiYjAYDPTt25ff//73SiZh03bs7b+Pjw8DBw5k5cqVgGVc0uaT0XTkd7Hp8q1bt97yufafoDIajbc+Eq8Q4rbKz8+3GiBaCCGEEOKnsmHDBnr16qUE1tr7nmhd0zK4mJgYfH19mTBhwm3u1e0VExPDkCFDCA0Nvd1dEeJnb/369bzwwgu3uxuAZWzEgwcPKkFvcftJCbAQQgghhBBC3GZRUVHs2bMHsIyjd+bMGbvjaP0SnD59mpycnA7N/ivEL1VJSQlhYWG3uxuKGzduKFl94udBSoCFEEIIIYQQ4jabO3cumzdvJiUlBY1Gw6xZs37RlR5RUVEUFRWxdOlSZWIUIUTrPD09bZYU3y6/9D9g/BxJCbAQ/8WkBFgIIYQQQgghhBBtkRJgIYQQQgghhBBCCCHuYBIAFEIIIYQQQgghhBDiDiYBQCGEEEIIIYQQQggh7mAyBqAQ/8UcHR1vdxeEEEIIIYQQQgjxMycZgEIIIYQQQgghhBBC3MEkACiEEEIIIYQQQgghxB1MAoBCCCGEEEIIIYQQQtzB/g+w98QZBgwYMQAAAABJRU5ErkJggg==", - "argumentInfo": { - "argumentName": "base64image", - "formattedValue": "base64 data: iVBORw0KGg..." - } - } - ], - "status": "PASSED", - "durationInNanos": 732605, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 3946628, - "depth": 0, - "parentFailed": false - }, - { - "name": "showing thumbnails is set to", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "showing thumbnails is set to" - }, - { - "value": "false", - "argumentInfo": { - "argumentName": "showThumbnails", - "formattedValue": "false" - } - } - ], - "status": "PASSED", - "durationInNanos": 171602, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 167430198, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 307757704, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment23.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "$ attachment icons exist", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "nrIcons", - "formattedValue": "1" - } - }, - { - "value": "attachment icons exist" - } - ], - "status": "PASSED", - "durationInNanos": 12575790, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "false" - ], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 780051284 - } - ], - "casesAsTable": false, - "durationInNanos": 1840709777, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#274", - "description": "Scenarios of Issue #274" - } - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "a_thumbnail_is_shown_for_image_attachments", - "description": "a thumbnail is shown for image attachments", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#274" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 260602, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has an image attachment $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has an image attachment" - }, - { - "value": "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cybxDH9a/6fbPoYCQBERERERERG5o/5S7y882fBJqlesjp+XHx4eHvaXyL0oMzPT/opPjScuI46Fvy1kddTqOzKeAkARERERERERueMqGCvQxLsJnfw70aZqG2q718ZmsOFn9nN2aSJlKsGSAFY4n3WefZf3sTNuJ8dTjpNrzb1jYyoAFBERERERERERKceMzi5ARERERERERERE7hwFgCIiIiIiIiIiIuWYAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMGm81mS0lJISUlhby8PGfXIyIiIiIiIiIiIrfIxcUFb29vvL29MaekpJCenl7wxmx2dm0iIiIiIiIiIiJyi/Lz80lPTwfAmJycTKVKlRT+iYiIiIiIiIiIlBNms5lKlSqRkpKCMT8/X+GfiIiIiIiIiIhIOWM2m8nLy9MmICIiIiIiIiIiIuWZAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGNmZxdwI2JiYjh69CgAeXl5VK5cmXbt2uHi4gJAbGws4eHh5ObmYjAY8Pf3p1WrVri6uvL999+Tn5+PyWSy9+fu7k7v3r2Jjo5mx44d9OvXD29vbwDS09MJDQ2lb9++9vZ79+4lKiqKwYMH2/vJysri22+/xdPT097ObDbTunVrqlevDsDXX3/No48+iouLC7m5uRw8eJALFy5gMBhwcXEhKCiIOnXq3NkP73fi4+PZsWOH/R5MJhOurq4YDAb69+9/zc8L4OjRo5w7dw6j0UheXh6BgYE0a9aMX3/9lYSEBKxWK5mZmVSqVAmA+++/n4YNG5bpPS5dupRffvkFs9lMZmYmPXv25KmnngIKvr6ffvopO3bswGQy4eHhwV//+ld69eoFwM8//8zbb7/NggULHOr+4osvWLRoET///DPbtm3jgw8+wNfX12HcMWPGkJiYyOrVqwG4dOkSVatWxWw207x5c8aMGcPIkSP57rvvHK7r0aMH69atIzIykrlz5/LZZ5+RkJDA4MGDeemll3jkkUfsbYcNG8aiRYvw8PAgJiaGefPmERkZiZubG97e3jz99NO0atXq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ERERERERERERuVUuLi54eXnh7e2NITc31+bsgkTk5pw/f5569eo5uwwRERERERERuYtpExAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMKAEVERERERERERMoxBYAiIiIiIiIiIiLlmAJAERERERERERGRckwBoIiIiIiIiIiISDmmAFBERERERERERKQcUwAochew2Wzs37+fCxcuABAXF8euXbucXJWIiIiIiIiIlAcKAEWczGazsW/fPq5cuYKXlxeXL19m9+7dVKlSxdmliYiIiIiIiEg5oABQxIkKw7+EhAQ6d+5MVlYWu3btokmTJjRq1MjZ5YmIiIiIiIhIOaAAUMRJFP6JiIiIiIiISFlQACjiJKdPn+bChQu0bdsWNzc39uzZg7+/v8I/EREREREREbmtFACKOEndunWpVq0aBw8eJD8/n1atWnHp0iWio6OdXZqIiIiIiIiIlCMKAEWcxGQy0b59ezw8PPj111+pUqUKbdu25eDBgwoBRUREREREROS2UQAo4kQKAUVERERERETkTjM7uwCRe11hCLhnzx4uX75MYGAgAJGRkfZ/i4iIiIiIiNzLbDYbiYmJ5OfnF3veaDRSpUoVTCbTHe2jUHZ2NikpKUWOGwwGfH19S9XHb7/9xtmzZ7HZbNds5+7uTufOnXFxcblunyVRAChyFzCZTHTs2NH+PiAggICAACdWJCIiIiIiInJ3iImJYcGCBSQnJ1+znbu7OyNGjCAoKOiO9HG1d999l7S0tBL7ePTRR2nduvU1+1iwYAF5eXnXbHN1n+3bty9V2+IoABQRERERERERkbvW8uXLadWqFY888kiJM+usVis7duxgyZIlTJ06tUi729HH1dLS0pgyZQp+fn4OxyMjI5k3bx5ffvkl2dnZdOrUqcQ+Shv+AeTm5pa6bXH0DEAREREREREREblrXbhwgY4dO14zkDMajXTq1ImsrCwSExNL1ceaNWtYs2ZNqfsojcqVK+Pu7g7A6tWryc7Ovql+bjfNABSRW7Z8+XJ27dp13XZPPvnkdadAi4iIiIiIyM1pu6otlcyVcDe742Z2w93kjofZg+oe1Wng3YD63vWp71WfgIp/rEdO2Ww2jMbrz2ErbGO1WkvV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q1atQnp6Otq1a1fvfv79919YW1tj2LBhzHUjRoyAtrY29PX1met+++033L59G1wuFz179oS7uzvatGkDAPj9998RHh6O3NxcmJqa4vPPP8dHH30EAPDx8YGtrS1evHiBzMxM8Pl8zJgxA0OHVkWfCwsLERgYiLi4OAgEAnTv3h3u7u4wNTVFWVkZFi1ahPnz5+PcuXOYPHkysrKykJ+fDy8vLwBAfHw8Lly4gPT0dBgYGGDw4MGYNm0aVFRUkJubi9OnT+Ply6oXerdu3eDh4QETE5OGnXSiUPalt7c3kpKSEBMT02R9EkIIIYQQQgghrYG+uj78R/hjzumiBs0AACAASURBVO054FZwm2XM84nnsWnwpmYZqzVq0QzAiIgIDBs2DIaGhrC2tkZUVFSD+unQoQPi4uIQHx8vcf2gQYPQrVtVlZoHDx4gNDQUixcvxp49e6Cjo4PDhw8zt127dg2enp44cuQIpk+fDj8/P2RlZQEAVFVVERYWhlmzZmH79u0YP348Tp8+zWSRnT17FlwuFzt27MDevXuhoaGBwMBAAICaWlWM9c8//8TXX39da5kzh8OBr68vHBwccPDgQSxZsgR3797F77//DgA4f/489PT04Ofnh71798LIyAhBQUENOk+kilAov4S4trZ2k/dJCCGEEEIIIYS0Fp30OsHX1heqrObZDuuP1D8gEFHyTUO1WACwqKgIjx49wvDhVRVk7OzscO/evQYFUpydnfHxxx9j9+7dWLVqFY4cOYLIyEiJCq1RUVEYPnw4rKysoKurC1dXVzg5OUEkEuHOnTtwdHRE586doaKigoEDB6J37964f/8+c/+BAwfC1NQUANC7d29wuVwUFRUBADw8PLBs2TLo6upCW1sbQ4cORVJSksQc7ezsYGFhAQ0NDYnr79+/DwsLC4wcORJqamro2LEjHBwcmMyz0tJSaGpqQkNDA1paWvDw8GAyB0nDKCNYJxKJmrxPQpTp5MmTsLKygpWVFT799NNG98fj8Zj+rKysFM6eJYCnpydz3rZu3drS02k24q+XP//8s9H9LV68mOnPx8enUX0NGDCA6av6BzlCCCGEEFKbjZkNNgza0CxjlQhKEJne8O3jPnQttgT47t27MDc3R+fOnQFUBdhOnTqFR48eKbz3WjU1NTXMnj0bn332GeLi4vDixQv89ttvCAoKwtKl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T7PvSarjzpw5w82bN6lVqxb29vb4+fmxbt06Dh8+TLVq1QB48803OXToECdPnmTo0KHkyZOHUqVKUb16dfz9/bGxscHe3p7u3bszZ84cpk+fzsyZMylevDhly5alcePGeHl5WZx3xIgRacYyYMAA/P39s3Q+ERERERERERGRZy1HAsDUR2uTk5OfSn+BgYEAVK9eHYAaNWqwbt06AgMDjQDQxcWFr7/+mlOnTnHs2DHOnDnDgQMHCAkJITAwkCFDhgDQuHFjqlatysGDBzl9+jQnTpxg3bp1bN68mU8//dTiseL05gD09PTM1vlERERERERERESepRwJAAsWLAhAaGhomn1hYWEkJSXh7e2dpb6Sk5MJDg4GYPLkyUyePNnYd+DAAeLi4nBwcDC2lS1blrJlywIQERHBqFGjOHz4MBcvXjTOmSdPHho1akSjRo0wm82sWLGCFStWsGHDBosAMKM5ALNzPhERERERERERkWfFOidOmlqpt3v3bk6ePGlsj4qK4qeffmL48OEcP348S30dPXqUu3fvUqBAARo2bGj8KVq0KCaTif3795OcnMyoUaPo1asXV69eNY718PAgT548QEqQGBgYSP/+/Zk2bZrRxsrKihIlShhtsiKr5xMREREREREREXnWcqQCsGjRorRp04Y1a9bwz3/+k6JFi5I7d27Onz9PXFwcdevWpXz58sYiIAkJCRaVfakCAgKMx39bt25N48aNjX0HDx7ku+++IzAwkDp16lC2bFnOnj3LiBEjqFixIo6OjoSGhhIWFka+fPkoXrw4bm5uJCUlsXPnTsLDwylWrBgPHjzgyJEjAMbjxKmWLFmS5hFggPfffz9L5xMREREREREREXnWciQABHjnnXcoUqQImzdvJjw8nBs3bhhVfE2aNLFom5ycTFBQUJo+2rdvT0hICLa2ttSoUcNiX6VKlXB1deXIkSPcvXuXt99+Gw8PD37//XeOHz9OXFwcbm5u1KtXj44dO2Jra0vevHkZOXIkq1ev5uTJkwQGBmJra0uRIkVo3LgxDRs2tDjH0aNH07223r17Z+l8IiIiIiIiIiIiz5qVyWQy5/QgROTJhIeHZzoPpYiIiIiIiIj8teXIHIAiIiIiIiIiIiLyfCgAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUkRdKbGwsc+fOpXPnztSsWRNfX18qVqxIq1atmDBhAjExMTk9xCdy+vRpfHx8mDBhQqZtf/75Z3x8fDh48OBzGNmTqVatGm+//XaOnb9ChQq89957mbbbtGkTPj4+LFu2LMN2/fr1w8fHh8TExKc1xFfGzfs3ab+4PU7fOGH1lVWGf3L/MzddlnUhKi4qp4ctIiIiIvJCi4qK4sKFC4SGhhIbG/vMz2f7zM8gIpJFDx484J133uHUqVO0bNmSd955BxcXF27fvs3vv//OlClT2LFjB4sWLcLR0TGnh/tYt27dolatWvz222+UKFEi28dXqlSJHj16kD9//mcwOpHs6fO/Pqw6tSpLbe8n3Gfx8cXkss3FnHZznvHIREREREReTrdu3eLGjRvG6/v371O8eHFy5879zM6pAFBEXhhr167lxIkTDBo0iAEDBljse/fddxk3bhzTpk1j9erVdOnSJYdGmbmgoKA/dXzt2rWpXbv2UxqNyJ+z6fymbB+z4dyGZzASEREREZGXX1RUFDdu3MDa2hpvb29MJhPh4eFcunQJb29vnJycnsl59QiwiLwwbt26BaQ83pmegQMHEhQUlCb8W7VqFR06dKBChQqULVuWN954gx9//BGTyWS0OXr0KD4+PixevJgZM2bQoEEDypYtS5MmTVi9ejVxcXGMHj2aWrVqUaFCBTp37szJkyctzpOYmMi0adNo3rw5ZcuWpXLlynTp0oWtW7cabXr16sVHH30EQJMmTdI8Vmpra8vmzZtp3bo1ZcuWpVq1anz22Wfcv3/faPPoI8CpY1+yZAlLliyhRYsWlC1bljp16jBq1CgePHhgMc5ffvmFpk2bUrZsWRo0aMCMGTM4cOAAPj4+LFy4MMP3IDo6mjFjxtCoUSPKlStHlSpV6NSpE2vWrEnT1sbGhrNnzxIQEEDFihWpUKECAQEBXLhwwaLd9evXGTp0KLVr16Z06dJUrVqVXr16pXnEuWvXrlSpUiXNeX799Vd8fHz49ddfMxz7vHnzaNKkCWXKlKFu3bpMmDAh24/03r9/n6FDh+Ln50eZMmVo1aqVxfsLKffoX//6F/Xq1aN06dJUr16dbt26ERwcbNFu8uTJ+Pj4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AAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAF9oixcvzty5cz/vYQAAAHxpCYDAl8b06dNz6qmnZptttsk3v/nN9OrVK7vvvnuuvfba1NbWVtabPHlyunTpknHjxn2Oo/3yOvnkk/PjH/94petst912ufLKKz/TcSxatCg333xzfvzjH+fggw/OsGHD8sILL3ym+wQAAChRvVNOOeW0z3sQwCfz/vvvp3Xr1p/3MP4t/vKXv2TvvffOG2+8kf322y/7779/+vbtm9mzZ+fSSy/NCy+8kJ133jlVVVVp0KBBOnTokF69eqVZs2af99C/8I4//vjMmzcv3bt3T5I88MADmTVrVnbdddcVXqdt27bp2bNnVl999c9sXHfccUcef/zxHHPMMRk0aFAaN26cSy+9NGuuuWY6duz4me0XAACgNPU/7wEArMrChQszdOjQdOjQITfccEOaN29euWzgwIHZbLPNctJJJ+XPf/5z+vbtm5YtW2bQoEGf44i/XF544YX079//Y11n5513/oxG8/978MEHc+CBB6ZLly5Jkk033TQtW7bMJZdckkWLFqVv376f+RgAAABKYAow8IX3xz/+MdOnT89JJ51UJ/4ttccee+SZZ56pBKEPTwF+7LHH0qVLl/zlL3+pc53nnnsuXbp0yaOPPpokmThxYn74wx+mV69e2WijjXLEEUdk2rRplfWHDBmSwYMH55Zbbsl2222XHj16ZODAgctsd3lqamoyYsSIDBgwIH379s1OO+2UCy64IAsXLqys8+yzz+bggw9Ov3790r9//xx++OF5/vnnK5ffcsst2X777TNu3Ljss88+6d+/f/bZZ5+89NJLueuuu7L77rtnq622ytChQ/Puu+9Wrvfuu+/m1FNPzYABA9KvX78ceOCBdaZG9+7dO9OnT8/PfvazbLPNNpXl9erVy4MPPpjvf//72XzzzfMf//EfmTRpUuXyD08BXjq2pbfh1ltvnYEDB+aOO+6oczvceuut2XnnnbPFFlvksMMOy5QpU9K7d+/84Q9/WO7tNnfu3LRo0SJJMmbMmBx11FG56qqrsuuuu+aqq67KY489tsrbHgAAAAEQ+BIYN25cqqur06dPnxWus6Kpvn379k3btm1z33331Vl+zz33pG3bttliiy0yffr0DBo0KPXq1cuYMWMyevTovPvuu9l///2zYMGCJEn9+vUzbty4PPvss7nzzjvz9NNPp3Xr1jn++ONXOf6rr746d999d0455ZTcfPPNOfHEE3PfffflsssuS5K8+uqrOfLII9OuXbtcffXV+Z//+Z80bdo0RxxxRN58883K/mfNmpVbb701V1xxRe65554sXLgwxx13XMaNG5frr78+t9xySyZNmpTrrrsuyZL30BsyZEgmTJiQ0047Ldddd13WX3/9DB06NC+//HKS5Pe//32S5LjjjqsT7GbMmJHf/va3OfXUU3PppZemqqoqp5566nKPb+nYrrzyygwfPjwPPfRQBgwYkLPPPjtvvfVWkuT555/Pz3/+82y99dYZM2ZMBg4cmBNPPDFJUlVVtdztbrjhhrn33nuTJPfff3+OO+64fO9738vvfve77L777vnNb36Thx9+eJW3PwAAwFedAAh84b311ltZc801U79+3XctmDt3bmbPnl35mjdv3jLXrVevXr773e8uEwDHjh2bnXbaKfXq1cvo0aNTVVWVESNGpHv37unRo0cuuOCCvPbaa7nnnnvq7O/kk09O06ZN07hx4+y222555ZVXVvkJtS+//HK6du2azTffPB07dkz//v1z6aWXZpdddkmy5Ay6pk2b5vTTT883vvGNfOMb38iZZ56Zmpqa3HXXXZXt1NTU5IADDkjz5s3TvHnz9OvXL9OmTcvRRx+dxo0bp127dundu3cmT56cJHnyySfz4osv5uSTT863vvWtfP3rX8+xxx6btdZaKzfccEOSpGXLlkmSpk2bVr5PkpkzZ+bMM89Mz54907Nnz+yzzz6ZMmVKZs2atdxjrKmpyYEHHpj27dunqqoqu+66a2pqavLSSy8lSe666660adMmP/nJT9K5c+cMGDAg22677UpvtwMOOCAvvPBCJVyOHTs23/3ud7PHHnvktttuy5577pnRo0fngQceWOl2AAAAvuoEQOALr7q6us502aW23nrrbLTRRpWvgw46aLnXHzBgQKZMmVKJUc8//3ymTp2agQMHJlky/XajjTaqTDdNkrXXXjvrrLNOnWmvnTp1SuPGjSs/Lw1m77333krHv9VWW+Xpp5/OCSeckPvvvz/vv/9+OnfunE6dOiVZ8h586623Xp3A2bRp03Tq1Kky5g+PYalmzZqlZcuWdT4IplmzZpVIN3HixDRo0CC9evWqXF5dXZ1NNtmkEglXpFOnTmnVqlXl5zZt2iRJ5syZs8LrfOMb36h8v/S2/OCDD5IkU6ZMyUYbbZR69epV1vn2t7+90jG0atUqJ598cp588sm0aNEic+bMyfnnn5/tt98+e+65Z26++ebstddemTp16kq3AwAA8FXnQ0CAL7y11lorb7/9dubNm1cnwF1xxRWVMHjJJZes8Ey8b33rW1ljjTVy7733plu3brnnnnvSoUOHbLrppkmSWbNm5fnnn883v/nNOtdbsGBBZQprkjr7/rDFixevdPw77bRTmjVrlptvvjmnnnpqamtrs/XWW+e///u/06ZNm8yePXu5n6bbrFmzzJ49u86yBg0a1Pm5YcOGK9zv7Nmzs3DhwmyxxRZ1ltfW1qZt27YrHXOTJk3q/Lx0mu7KjrVRo0bLLFu6/nvvvZc11lijzmUfPuNwRdq3b5+TTz45Z555Znr06JHXX3895513Xo455phUVVXlxhtv/EjTsAEAAL7KBEDgC2/zzTfP5ZdfnjvvvDN77bVXZfnGG29c+b5t27Z5/fXXl3v96urq7LTTTrnvvvsyZMiQjB07tjL9NkmaN2+e3r1756yzzlrmuit6b8GPa+utt87WW2+duXPn5rHHHsv555+fM844IxdeeGFWW2215U6tnTVr1nLD4Ee12mqrpWHDhhkzZswyl1VX/3tPAG/YsOEyU7Tff//9j3Tdf46A06ZNy3nnnVcJf7/4xS9y0kkn5etf//qnPm4AAIASmAIMfOFtueWW6datWy666KI6Z+QtNWfOnMqHWqzIgAEDMmnSpDzxxBP529/+Vpn+mywJiVOmTMk666yTLl26VL6qq6vTrl27f3n8Dz30UKZPn55kyZl1O+ywQ3bbbbfKmNdff/288MILdaY5f/DBB5kyZUo22GCDT7zfDTbYIAsWLEhtbW06d+5c+WrUqNEyx7Wqsxj/VUunU394Pw8++OBHvv7SCPi///u/6dixYzbaaKNUV1dnxx13zIABA/KrX/3qsxg2AABAEQRA4Auvuro6I0eOzIIFCzJgwICMGjUqDzzwQO69996cf/752XbbbfPqq69myJAhK9zGpptumrXXXjtnnXVWunfvnu7du1cu+8EPfpA5c+Zk2LBhmTRpUqZMmZJRo0Zlxx13zHPPPfcvj//666/PCSeckPHjx2fatGkZN25c7r///sp78+21116ZN29eTj/99Lz66qt5+eWXc9JJJ2W11VbLzjvv/In326dPn3Tv3j2nnHJKnnnmmUyfPj1jx47ND37wg9x8881JlkzbbdSoUcaPH5/JkyenpqbmXz7e5dl+++0zY8aMXHrppZk2bVrGjh2bRx555GNtY2kEnDBhQv7xj39UpiV/97vfzbRp01b4ASUAAABfdaYAA18K3bp1y+9///tcdtllue222/LLX/4yDRs2TMeOHbPvvvvmhz/8YZ0PrfhnVVVV+d73vperrroqxx13XJ3LOnTokNGjR2f48OHZa6+9Ur9+/XTr1i2XX355Ntlkk3957GeffXYuuOCCDBs2rDKtt3///hk8eHCSpGPHjvnlL3+Ziy++OPvuu2/q1auXnj175rLLLqvzAR8fV7169XLxxRdnxIgRGTZsWObOnZu11147Bx98cAYNGlRZ78ADD8xvfvObPProo7n99tv/5eNdnq222ipHHHFEbrjhhowZMya9evXKiSeemEGDBi33vQNXpH379jnllFNyxhlnZP78+dl9993z7LPPplmzZp/adG0AAIDSVC1YsOCznfcFfGamTp2adddd9/MeBqzS4sWLM3PmzDrvafiXv/wlhxxySG688cZ06dLlY23vnXfeyWWXXZZJkyZltdVWy+GHH/6pxFoAAIASCYDwJSYA8mXxzDPP5LDDDsvhhx+e73znO3n33Xdz3nnnpbq6OldffXVlOu/HNX/+/DRs2PATXx8AAOCrQACELzEBkC+Tu+++O9dee22mTp2a5s2bp1evXjn66KM/lQ9aAQAAYMUEQPgSEwAp2TPPPJNevXp97P8CAABQlwAIX2ICIAAAALAq1Z/3AAAAAACAz44ACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMHqf94DAAAA4PMzfPjwTJgwIUmyePHiJElVVVWSZLfddsuee+75sbf5+OOPp1evXmncuPGnN1AAPjEBEAAA4Cts2LBhle8vuOCCdOrUKXvssce/tM2bbropG2ywgQAI8AUhAAIAALBcCxcuzPXXX59nn302NTU1WX/99fOjH/0oDRs2zOTJk3PNNddk7ty5Wbx4cbbYYovstddeueCCC/LOO+/k9NNPzwEHHJCePXt+3ocB8JXnPQABAABYrjvvvDOvvvpqzj777IwcOTKLFi3KDTfckCS57rrrstNOO+WCCy7I2WefnTfeeCNvv/12hgwZkiQ59dRTxT+ALwgBEAAAgOV69NFHs/3226dRo0apqqrKjjvumCeffDJJ0rp16zz55JP529/+lkaNGmXo0KFZY401PucRA7A8pgADAACwXLNnz861115bOetv8eLFWbhwYWpra3PYYYfl7rvvzq9+9au8//772W677T7RB4YA8NkTAAEAAFiuNm3aZJ999lnuVN5mzZpl7733zt57751p06Zl+PDh6dy5s2m/AF9ApgADAACwXH369Ml9992XhQsXJkkef/zx3HbbbampqcnJJ5+cadOmJUnatWuXZs2aJUmqq5e8zJw9e/bnM2gAluEMQAAAAJZrl112yfXXX59hw4YlSVZfffUcdNBBqV+/fnbeeeeMGDEiCxYsSFVVVXr37p3evXunqqoqm222WU455ZQMGjQo22233ed8FABULViwYPHnPQjgk5k6dWrWXXfdz3sYAAAAwBeYKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwep/3gOAr5oZM2Zk8eLFadeuXerVq5fa2tq89dZbqa6uTvv27Ze7DgAAAMAn5QxA+DdbtGhRFi9enEWLFtX5uba2doXrAAAAAHxSAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFCw+p/3AOCrpkmTJkmS+vXrV/7bpEmTVFVVrXAdAAAAgE9KXYB/s9atW9f5uaqqapll//wzAAAAwCdlCjAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABQ9P+eYAAAgAElEQVRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrP7nPQAAAPgsPPfajPQ6+ZdZnOR7G38jdx1zQJJkQU1tzrnzkYx54rlMeefdNGvUMD07rZUTdtk622/YJUly5UPjcsOfJuT+E370mY/zlVdeyQknnJCbbrqpzvLnn38+55xzTq699tqcffbZee6555IkixYtSpJUVy/5t/zvf//76dWrV0444YTstNNOOfDAA+ts55FHHsmoUaMyePDgbLXVVvnd736X8ePH57TTTvtI4xs2bFjmzZuXESNGVPb5aZs4cWJGjRqVTTfdNIceeugK1/vjH/+YO+64I7Nmzco666yTww8/PGuuueYy69XW1uY3v/lNnnrqqSxatCg9evTIYYcdloYNG650HEvvi/r1l7xMat68eTp06JDvfOc72XzzzT/Ssbz44otp2rRp1llnnY+0/pfFv3JcRx55ZI466qhssMEGdZZfdNFF6dChQ/bYY49/eXx7jByTO555IbWLF+fp049I7693SJJc/6cJGXnvE/nfqW+muqoqXdq3yaHf/laO3H6zJMnLb87MeseNSM01Z/zLY/ioxo4dm2uvvTZHHnlk+vXrt8L1br/99tx7772ZN29eOnbsmIMOOijrrrvuctf9qI+hJLnvvvty55135oMPPsjaa6+dAw88MN26dVtme6effnp++tOfVu63l156Kb/+9a/z1ltvpVWrVtlvv/2y6aabrvJ4zzzzzDz//POpqqqqLPvJT36Srl275sgjj6yz7uLFi9OjR4+ceOKJmT9/fq677ro8/fTTmT9/fvr165eDDjoo9erVq3Odm266Kbfccssyz6Gftv333z81NTWpqqpK48aN0759+2y++eYZMGBA5Tnj07Ki+3PhwoW55ppr8tRTT2XhwoVZb731cuihh6ZVq1ar3ObK7veVPbdOmjQp11xzTWbMmJHmzZtnjz32yDbbbJMkeeaZZ3L99dfnnXfeSatWrbLnnnumf//+qxzL4sWLc/311+eBBx5ITU1N+vTpk0MOOSQNGjRYZt2V7X/ixIm57rrrMmPGjLRt2zaHHHJI1ltvveXuc2WPp4/6t2WpFf1dPOecc/Lcc8/lsssuS4sWLepcZ+jQoVm8eHEuvvjiVd4+nxUBEACAIm28zpqpueaMnHn7Q/nzK69Vln9/5OhMnflerjh4t/Tq3CHza2ry26efz24jrsvdxx6Qrdf7egZtsXH2+NYGK9n6v9cJJ5xQ+X748OHp3Llz9t5778qyV155Ja1atcoTTzyR/fbbr86L0YcffjitW7f+RPudPHlyWrVqlcaNG2f8+PHp3bv3Jz+IFXj44Yfzhz/8YYUv2pb661//mtGjR+enP/1pvva1r+WWW27JyJEjc/bZZy+z7tixY/PSSy/lvPPOS4MGDXLeeeflpptuyn777feRxjRmzJgkyXvvvZenn346l19+ed55553svPPOq7zuH//4x/Ts2bO4APhFP67fHv2DJEn9A06pLDv37kfzi7seycUH7JLv9OiaZo0a5tHJU3LYr+/IzFlzcspu387X12idaRcf/28b56WXXppFixZlrbXWWul6f/rTn3L//ffnjDPOSJs2bXLrrbfmwgsvXG48+KiPoSSZMGFCbrzxxvzsZz9Lhw4dcscdd+TCCy/Mr371q8o68+bNy1VXXVUnKi1YsCDnnXde9ttvv2y55ZaZMGFCLrzwwowcOTItW7Zc6T7nzJmTY445ZrnPH0sfa0v94he/SN++fZMkN998c15//fVccMEFqa2tzVlnnZU777wzu+22W2X9KVOm5PHHH1/lcX9aTj755GywwQaZO3duJk+enGuuuSYvvvhijj/+0/sdWtn9ecstt+TVV1/N+eefnwYNGmTkyJG57rrrMnjw4JVuc2X3+8qeWz/44IP84he/yOGHH56+fftm0qRJOfPMM9O9e/c0bNgwI0eOzLBhw7Lhhhtm4sSJ+fnPf55u3bqlXbt2Kx3P2LFjM3HixFxwwQWpX79+Ro0aleeee26Z35GV7b9JkyY599xzM2TIkPTq1SuPPvpozj333Pzyl79M48aN62xnZY+nj/O3JVn138WWLVvm0UcfzYABAyrLXnzxxcyfP3+V/wj1WRMAAQD4yvjj86/k/omv5OXzf5KObZa8aG3aqEEO3qZ3duzxjazVqnmSZPQTz+WGP03IsQO2zI+u+G1ev+j4VP+/s1dOueX+TJr2Vn579A/y2ORXc8yYe/Lu7LmpV12VkfvvnO/06Jq/vf1uNj35lzlrrx0ydsL/5eU3Z2aHDbtm5P4DVji2f1WTJk3SunXrjB8/Pn369EmSzJw5M1OnTv3E0eb+++9P//79s9pqq+W+++6r80JnxIgRadGiRd5+++3MmjUrixYtylFHHZW11157pZf9s06dOuW0007LjTfemNmzZ69wLE888UT69u2bTp06JVly5uPvfve7vPHGG8vElMceeywDBw7MaqutliTZY489cuGFF37kALhUy5Yts/3226dFixa56KKL8u1vfzvNmjXLuHHjcsMNN2TOnDlp0KBBBg0alD59+uS2227LE088kQkTJmTatGnZe++9c+utt+ahhx7KwoUL07Zt2xx++OHp2LHjMvt6+eWXc9lll2XevHnp2rVrGjVqlJYtW2bffffNwoULM3r06IwfPz41NTXZYIMNcsghh6Rhw4YZNWpUWrVqlZkzZ+Yf//hH3n///QwZMiSdO3eu3Id33XVXampq0qZNmwwePDjt2rXLAw88kHHjxqWmpia1tbU55ZRTPtZxrWi7S/d52223pWHDhunbt2+dM7/+2XvvvZef/exnmTp1alZfffUMHjw4rVu3zqGHHppzzjknX/va15IseQE9fPjwXH755R/pbKv3587Pabc+kN8ctkf27LNhZfkOG3bNn087PE0bLjnT6G9vv5v1jhuRmZeelPZHnZ2/nDU431x7jSRLni9+cMlNmXbR8Znx3gc56uo788L0t7OwtjZHbr9ZjhuwZZKk03+em2O+1z8PTPprpr37flo2aZRb/3NQWjRptMy4dthhh3Tp0iUnnnjiSsffvn37DB06NKuvvnqSpF+/frnppptSU1OzzPF/1MdQkrRo0SJHH3105Xewf//+GTNmTObNm1eJJtddd1369euXJ598snK9iRMnpmnTptlqq62SJBtvvHG6dOmSp59+Ottvv/0Kf3eSZPbs2WnatOlKx5UsiTRz5syp7GP8+PHZZ599KtcdOHBgbr311koArKmpySWXXJL99tsv55577gq3++abb+bKK6/Mm2++merq6vTu3Tv77LNP6tevnyOPPDI777xzJk6cmL///e9p2rRpjj322FWOt0mTJunZs2c6duyYn/zkJ3n22WfTs2fPzJw5M1dddVVef/311NbWZscdd8zAgQOTJDNmzMhll12W1157LS1atMi+++5buY0+bGX35ze/+c3069ev8ty22Wab5Z577lnlbbuy+31lz61NmjTJj3/840qUXX/99dOmTZu88cYb6dy5cwYPHpwNN1zy+Npwww3TvHnzzJgxY5UB8A9/+EN++MMfVs6SGzZsWOWyq666KrNnz87QoUNTW1u7wv0vWLAg7dq1q/xd2mqrrXLbbbdlwoQJ6dOnT53trOzx9HH+tiQr/7uYJJtuumkefPDBOgHw4Ycf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", - "argumentInfo": { - "argumentName": "base64image", - "formattedValue": "base64 data: iVBORw0KGg..." - } - } - ], - "status": "PASSED", - "durationInNanos": 493804, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 4516432, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 152463992, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 320519894, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "an element with a $ class exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "an element with a" - }, - { - "value": "jgiven-html-thumbnail", - "argumentInfo": { - "argumentName": "multiline", - "formattedValue": "jgiven-html-thumbnail" - } - }, - { - "value": "class exists" - } - ], - "status": "PASSED", - "durationInNanos": 15772713, - "depth": 0, - "parentFailed": false - }, - { - "name": "the image is loaded", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the image is loaded" - } - ], - "status": "PASSED", - "durationInNanos": 14447903, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 834530674 - } - ], - "casesAsTable": false, - "durationInNanos": 834530674, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#274", - "description": "Scenarios of Issue #274" - } - ], - "classTitle": "HTML App" - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5AppTest", - "testMethodName": "steps_can_have_multiple_attachments", - "description": "steps can have multiple attachments", - "tagIds": [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureAttachments" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 235801, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has a text attachment with content", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has a text attachment with content" - }, - { - "value": "Some Example Attachment\nwith some example content", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "Some Example Attachment\nwith some example content" - } - } - ], - "status": "PASSED", - "durationInNanos": 347903, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of scenario $ has another text attachment with content", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "has another text attachment with content" - }, - { - "value": "Another Example Attachment\nwith some example content", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "Another Example Attachment\nwith some example content" - } - } - ], - "status": "PASSED", - "durationInNanos": 407903, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2174316, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 49078352, - "depth": 0, - "parentFailed": false - }, - { - "name": "the page of scenario $ is opened", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the page of scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "scenarioNr", - "formattedValue": "1" - } - }, - { - "value": "is opened" - } - ], - "status": "PASSED", - "durationInNanos": 304784681, - "attachments": [ - { - "title": "Screenshot", - "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment24.png", - "mediaType": "image/png", - "binary": true - } - ], - "depth": 0, - "parentFailed": false - }, - { - "name": "$ attachment icons exist", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "nrIcons", - "formattedValue": "2" - } - }, - { - "value": "attachment icons exist" - } - ], - "status": "PASSED", - "durationInNanos": 13188994, - "depth": 0, - "parentFailed": false - }, - { - "name": "the content of the attachment referenced by icon $ is", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the content of the attachment referenced by icon" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "iconNr", - "formattedValue": "1" - } - }, - { - "value": "is" - }, - { - "value": "Some Example Attachment\nwith some example content", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "Some Example Attachment\nwith some example content" - } - } - ], - "status": "PASSED", - "durationInNanos": 38565476, - "depth": 0, - "parentFailed": false - }, - { - "name": "the content of the attachment referenced by icon $ is", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the content of the attachment referenced by icon" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "iconNr", - "formattedValue": "2" - } - }, - { - "value": "is" - }, - { - "value": "Another Example Attachment\nwith some example content", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "Another Example Attachment\nwith some example content" - } - } - ], - "status": "PASSED", - "durationInNanos": 36456861, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 607583749 - } - ], - "casesAsTable": false, - "durationInNanos": 607583749, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {} - ], - "classTitle": "HTML App", - "expanded": false, - "$$hashKey": "object:613" - } - ] - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "name": "Test Framework Execution", - "scenarios": [ - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "failing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_are_ignored", - "description": "failing tests annotated with Pending with failIfPassed set to true are ignored", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.Issue-#4", - "com.tngtech.jgiven.tags.FeaturePending" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test" - } - ], - "status": "PASSED", - "durationInNanos": 43300, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is annotated with Pending", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test is annotated with Pending" - } - ], - "status": "PASSED", - "durationInNanos": 22300, - "depth": 0, - "parentFailed": false - }, - { - "name": "failIfPassed set to true", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "failIfPassed set to true" - } - ], - "status": "PASSED", - "durationInNanos": 171001, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 9088565, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is ignored", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test is ignored" - } - ], - "status": "PASSED", - "durationInNanos": 181601, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 12428689 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 14912707 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 46271931 - } - ], - "casesAsTable": true, - "durationInNanos": 73613327, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {}, - { - "value": "#4", - "description": "Scenarios of Issue #4" - }, - {} - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:152" - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "description_annotations_on_test_classes_are_evaluated", - "description": "description annotations on test classes are evaluated", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test class", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test class" - } - ], - "status": "PASSED", - "durationInNanos": 51101, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class has a description annotation with value", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test class has a description annotation with value" - }, - { - "value": "Test Description", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "Test Description" - } - } - ], - "status": "PASSED", - "durationInNanos": 192702, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 5745541, - "depth": 0, - "parentFailed": false - }, - { - "name": "the description of the report model is", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the description of the report model is" - }, - { - "value": "Test Description", - "argumentInfo": { - "argumentName": "description", - "formattedValue": "Test Description" - } - } - ], - "status": "PASSED", - "durationInNanos": 202301, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 7640154 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 9046765 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 65127566 - } - ], - "casesAsTable": true, - "durationInNanos": 81814485, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {} - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:149" - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "passing_tests_annotated_with_Pending_are_ignored", - "description": "passing tests annotated with Pending are ignored", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.FeaturePending" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a passing test", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a passing test" - } - ], - "status": "PASSED", - "durationInNanos": 30700, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is annotated with Pending", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test is annotated with Pending" - } - ], - "status": "PASSED", - "durationInNanos": 12400, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 1651212, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is ignored", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test is ignored" - } - ], - "status": "PASSED", - "durationInNanos": 58001, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 3072422 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 10636676 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 62145845 - } - ], - "casesAsTable": true, - "durationInNanos": 75854943, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {}, - {} - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:154" - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "the_error_message_of_a_failing_step_is_reported", - "description": "the error message of a failing step is reported", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test" - } - ], - "status": "PASSED", - "durationInNanos": 72300, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 2224616, - "depth": 0, - "parentFailed": false - }, - { - "name": "the case is marked as failed", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the case is marked as failed" - } - ], - "status": "PASSED", - "durationInNanos": 90601, - "depth": 0, - "parentFailed": false - }, - { - "name": "an error message is stored in the report", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "an error message is stored in the report" - } - ], - "status": "PASSED", - "durationInNanos": 56300, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 8485261 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 11512682 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 82237489 - } - ], - "casesAsTable": true, - "durationInNanos": 102235432, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {} - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:157" - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "passing_steps_before_failing_steps_are_reported_as_passed", - "description": "passing steps before failing steps are reported as passed", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test with $ steps", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test with" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "steps" - } - ], - "status": "PASSED", - "durationInNanos": 180002, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ fails", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "fails" - } - ], - "status": "PASSED", - "durationInNanos": 5860342, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 2147815, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as passed", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "is reported as passed" - } - ], - "status": "PASSED", - "durationInNanos": 206901, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as failed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "is reported as failed" - } - ], - "status": "PASSED", - "durationInNanos": 191002, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 9748070 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 12073186 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 85057908 - } - ], - "casesAsTable": true, - "durationInNanos": 106879164, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {} - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:153" - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "failing_tests_annotated_with_Pending_are_ignored", - "description": "failing tests annotated with Pending are ignored", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.FeaturePending" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test" - } - ], - "status": "PASSED", - "durationInNanos": 26200, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is annotated with Pending", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test is annotated with Pending" - } - ], - "status": "PASSED", - "durationInNanos": 12000, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 1683113, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is ignored", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test is ignored" - } - ], - "status": "PASSED", - "durationInNanos": 102001, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 8930164 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 12805991 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 39764484 - } - ], - "casesAsTable": true, - "durationInNanos": 61500639, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {}, - {} - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:150" - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "passing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_fail", - "description": "passing tests annotated with Pending with failIfPassed set to true fail", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.Issue-#4", - "com.tngtech.jgiven.tags.FeaturePending" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a passing test", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a passing test" - } - ], - "status": "PASSED", - "durationInNanos": 25600, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is annotated with Pending", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test is annotated with Pending" - } - ], - "status": "PASSED", - "durationInNanos": 11800, - "depth": 0, - "parentFailed": false - }, - { - "name": "failIfPassed set to true", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "failIfPassed set to true" - } - ], - "status": "PASSED", - "durationInNanos": 9601, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 1708512, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails with message", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails with message" - }, - { - "value": "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation.", - "argumentInfo": { - "argumentName": "expectedMessage", - "formattedValue": "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation." - } - } - ], - "status": "PASSED", - "durationInNanos": 230101, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 8336259 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 11254380 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 49742656 - } - ], - "casesAsTable": true, - "durationInNanos": 69333295, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {}, - { - "value": "#4", - "description": "Scenarios of Issue #4" - }, - {} - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:155" - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "failing_tests_annotated_with_Pending_with_executeSteps_set_to_true_are_ignored", - "description": "failing tests annotated with Pending with executeSteps set to true are ignored", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.FeaturePending" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test" - } - ], - "status": "PASSED", - "durationInNanos": 23100, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is annotated with Pending", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test is annotated with Pending" - } - ], - "status": "PASSED", - "durationInNanos": 11001, - "depth": 0, - "parentFailed": false - }, - { - "name": "executeSteps set to true", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "executeSteps set to true" - } - ], - "status": "PASSED", - "durationInNanos": 20900, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 1684912, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is ignored", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test is ignored" - } - ], - "status": "PASSED", - "durationInNanos": 51200, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 3141722 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 11048279 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 46086930 - } - ], - "casesAsTable": true, - "durationInNanos": 60276931, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {}, - {} - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:151" - }, - { - "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - "testMethodName": "tag_annotations_appear_in_the_report_model", - "description": "tag annotations appear in the report model", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.FeatureTags-Tags" - ], - "explicitParameters": [ - "testFramework" - ], - "derivedParameters": [ - "testFramework" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test" - } - ], - "status": "PASSED", - "durationInNanos": 29800, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test has a tag annotation named", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test has a tag annotation named" - }, - { - "value": "TestTag", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "TestTag" - } - } - ], - "status": "PASSED", - "durationInNanos": 162402, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with" - }, - { - "value": "JUnit", - "argumentInfo": { - "parameterName": "testFramework", - "argumentName": "framework", - "formattedValue": "JUnit" - } - } - ], - "status": "PASSED", - "durationInNanos": 1513811, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report model contains a tag named", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report model contains a tag named" - }, - { - "value": "com.tngtech.jgiven.tests.TestTag", - "argumentInfo": { - "argumentName": "tagName", - "formattedValue": "com.tngtech.jgiven.tests.TestTag" - } - } - ], - "status": "PASSED", - "durationInNanos": 463803, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "JUnit" - ], - "derivedArguments": [ - "JUnit" - ], - "status": "SUCCESS", - "durationInNanos": 3787827 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "JUnit5" - ], - "derivedArguments": [ - "JUnit5" - ], - "status": "SUCCESS", - "durationInNanos": 11783785 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "TestNG" - ], - "derivedArguments": [ - "TestNG" - ], - "status": "SUCCESS", - "durationInNanos": 53718284 - } - ], - "casesAsTable": true, - "durationInNanos": 69289896, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - {}, - { - "value": "Tags" - } - ], - "classTitle": "Test Framework Execution", - "expanded": false, - "$$hashKey": "object:156" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - "name": "Difference Analyzer", - "scenarios": [ - { - "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - "testMethodName": "the_difference_analyzer_should_find_additional_steps_in_the_middle", - "description": "the difference analyzer should find additional steps in the middle", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureCaseDiffs" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 62900, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 287702, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - } - ], - "status": "PASSED", - "durationInNanos": 304002, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has step" - }, - { - "value": "extra step in the middle", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "extra step in the middle" - } - } - ], - "status": "PASSED", - "durationInNanos": 254902, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "another step" - } - } - ], - "status": "PASSED", - "durationInNanos": 224502, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - } - ], - "status": "PASSED", - "durationInNanos": 380503, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "another step" - } - } - ], - "status": "PASSED", - "durationInNanos": 272202, - "depth": 0, - "parentFailed": false - }, - { - "name": "the difference analyzer is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the difference analyzer is executed" - } - ], - "status": "PASSED", - "durationInNanos": 3865428, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 269302, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "2" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 291702, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "3" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 201301, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 195402, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "2" - } - }, - { - "value": "of case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 198801, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 8318459 - } - ], - "casesAsTable": false, - "durationInNanos": 8318459, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Difference Analyzer", - "expanded": false, - "$$hashKey": "object:606" - }, - { - "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - "testMethodName": "the_difference_analyzer_should_find_additional_steps_at_the_beginning", - "description": "the difference analyzer should find additional steps at the beginning", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureCaseDiffs" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 45900, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 259702, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has step" - }, - { - "value": "extra step at the beginning", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "extra step at the beginning" - } - } - ], - "status": "PASSED", - "durationInNanos": 260202, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - } - ], - "status": "PASSED", - "durationInNanos": 201402, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - } - ], - "status": "PASSED", - "durationInNanos": 288602, - "depth": 0, - "parentFailed": false - }, - { - "name": "the difference analyzer is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the difference analyzer is executed" - } - ], - "status": "PASSED", - "durationInNanos": 115301, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is marked as diff", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 353103, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "2" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 226401, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 216301, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 3032021 - } - ], - "casesAsTable": false, - "durationInNanos": 3032021, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Difference Analyzer", - "expanded": false, - "$$hashKey": "object:604" - }, - { - "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - "testMethodName": "the_difference_analyzer_should_find_differences_in_step_arguments", - "description": "the difference analyzer should find differences in step arguments", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureCaseDiffs" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 49300, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 327702, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has a step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - }, - { - "value": "with argument" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 259502, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "has a step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - }, - { - "value": "with argument" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 299702, - "depth": 0, - "parentFailed": false - }, - { - "name": "the difference analyzer is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the difference analyzer is executed" - } - ], - "status": "PASSED", - "durationInNanos": 562504, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 243802, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "3" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 14760806, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 277702, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "3" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "is marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 267701, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 17969330 - } - ], - "casesAsTable": false, - "durationInNanos": 17969330, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Difference Analyzer", - "expanded": false, - "$$hashKey": "object:607" - }, - { - "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - "testMethodName": "the_difference_analyzer_should_find_additional_steps_at_the_end", - "description": "the difference analyzer should find additional steps at the end", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureCaseDiffs" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 47901, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 190301, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - } - ], - "status": "PASSED", - "durationInNanos": 184502, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "another step" - } - } - ], - "status": "PASSED", - "durationInNanos": 187201, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has step $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - } - ], - "status": "PASSED", - "durationInNanos": 190201, - "depth": 0, - "parentFailed": false - }, - { - "name": "the difference analyzer is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the difference analyzer is executed" - } - ], - "status": "PASSED", - "durationInNanos": 61300, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 197501, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "2" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "is marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 201802, - "depth": 0, - "parentFailed": false - }, - { - "name": "word $ of step $ of case $ is not marked as diff", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "word" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "wordNr", - "formattedValue": "2" - } - }, - { - "value": "of step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "is not marked as diff" - } - ], - "status": "PASSED", - "durationInNanos": 212701, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 2341117 - } - ], - "casesAsTable": false, - "durationInNanos": 2341117, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Difference Analyzer", - "expanded": false, - "$$hashKey": "object:605" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", - "name": "Ascii Doc Report Generator", - "scenarios": [ - { - "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", - "testMethodName": "the_AsciiDoc_reporter_generates_an_index_file_a_test_file_and_multiple_other_asciidoc_files", - "description": "the AsciiDoc reporter generates an index file a test file and multiple other asciidoc files", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureAsciiDocReport" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 1695912, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 3116423, - "depth": 0, - "parentFailed": false - }, - { - "name": "the asciidoc reporter is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the asciidoc reporter is executed" - } - ], - "status": "PASSED", - "durationInNanos": 104707653, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file with name $ exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "a file with name" - }, - { - "value": "index.asciidoc", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"index.asciidoc\"" - } - }, - { - "value": "exists" - } - ], - "status": "PASSED", - "durationInNanos": 9958772, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file with name $ exists", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a file with name" - }, - { - "value": "totalStatistics.asciidoc", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"totalStatistics.asciidoc\"" - } - }, - { - "value": "exists" - } - ], - "status": "PASSED", - "durationInNanos": 1087808, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file with name $ exists", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a file with name" - }, - { - "value": "allScenarios.asciidoc", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"allScenarios.asciidoc\"" - } - }, - { - "value": "exists" - } - ], - "status": "PASSED", - "durationInNanos": 253502, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file with name $ exists", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a file with name" - }, - { - "value": "failedScenarios.asciidoc", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"failedScenarios.asciidoc\"" - } - }, - { - "value": "exists" - } - ], - "status": "PASSED", - "durationInNanos": 528704, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file with name $ exists", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a file with name" - }, - { - "value": "pendingScenarios.asciidoc", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"pendingScenarios.asciidoc\"" - } - }, - { - "value": "exists" - } - ], - "status": "PASSED", - "durationInNanos": 244502, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file with name $ exists", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a file with name" - }, - { - "value": "features/Test.asciidoc", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"features/Test.asciidoc\"" - } - }, - { - "value": "exists" - } - ], - "status": "PASSED", - "durationInNanos": 306902, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 126571010 - } - ], - "casesAsTable": false, - "durationInNanos": 126571010, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Ascii Doc Report Generator" - }, - { - "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", - "testMethodName": "the_multilines_values_are_rendered_as_literal_blocks", - "description": "the multilines values are rendered as literal blocks", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureAsciiDocReport" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 259301, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ of case $ has a formatted value $ as parameter", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "has a formatted value" - }, - { - "value": "Some \ntext \nwith \nnewlines", - "argumentInfo": { - "argumentName": "formattedValue", - "formattedValue": "Some \ntext \nwith \nnewlines" - } - }, - { - "value": "as parameter" - } - ], - "status": "PASSED", - "durationInNanos": 438003, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 3492725, - "depth": 0, - "parentFailed": false - }, - { - "name": "the asciidoc reporter is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the asciidoc reporter is executed" - } - ], - "status": "PASSED", - "durationInNanos": 36131260, - "depth": 0, - "parentFailed": false - }, - { - "name": "the asciidoc report $ exists", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the asciidoc report" - }, - { - "value": "features/Test.asciidoc", - "argumentInfo": { - "argumentName": "ascidocFile", - "formattedValue": "features/Test.asciidoc" - } - }, - { - "value": "exists" - } - ], - "status": "PASSED", - "durationInNanos": 482703, - "depth": 0, - "parentFailed": false - }, - { - "name": "the literal block is added $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the literal block is added" - }, - { - "value": "....\nSome \ntext \nwith \nnewlines\n....", - "argumentInfo": { - "argumentName": "expectedLiteral", - "formattedValue": "....\nSome \ntext \nwith \nnewlines\n...." - } - } - ], - "status": "PASSED", - "durationInNanos": 32621635, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 115058328 - } - ], - "casesAsTable": false, - "durationInNanos": 115058328, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Ascii Doc Report Generator" - } - ] - }, - { - "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", - "name": "Repeated Stage Use", - "scenarios": [ - { - "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", - "testMethodName": "before_stage_method_is_executed_multiple_times", - "description": "before stage method is executed multiple times", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a scenario step", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a scenario step" - } - ], - "status": "PASSED", - "durationInNanos": 90501, - "depth": 0, - "parentFailed": false - }, - { - "name": "a stage is completed", - "words": [ - { - "value": "a stage is completed" - } - ], - "status": "PASSED", - "durationInNanos": 84501, - "depth": 0, - "parentFailed": false - }, - { - "name": "non repeatable lifecycle method ran", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "non repeatable lifecycle method ran" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 4823835, - "depth": 0, - "parentFailed": false - }, - { - "name": "repeatable lifecycle method ran", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "repeatable lifecycle method ran" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 351103, - "depth": 0, - "parentFailed": false - }, - { - "name": "a scenario step", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a scenario step" - } - ], - "status": "PASSED", - "durationInNanos": 404403, - "depth": 0, - "parentFailed": false - }, - { - "name": "a stage is completed", - "words": [ - { - "value": "a stage is completed" - } - ], - "status": "PASSED", - "durationInNanos": 279502, - "depth": 0, - "parentFailed": false - }, - { - "name": "repeatable lifecycle method ran", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "repeatable lifecycle method ran" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 290903, - "depth": 0, - "parentFailed": false - }, - { - "name": "non repeatable lifecycle method ran", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "non repeatable lifecycle method ran" - }, - { - "value": "false", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "false" - } - } - ], - "status": "PASSED", - "durationInNanos": 213201, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 40164489 - } - ], - "casesAsTable": false, - "durationInNanos": 40164489, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Repeated Stage Use" - }, - { - "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", - "testMethodName": "after_stage_method_is_executed_multiple_times", - "description": "after stage method is executed multiple times", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a scenario step", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a scenario step" - } - ], - "status": "PASSED", - "durationInNanos": 47101, - "depth": 0, - "parentFailed": false - }, - { - "name": "a stage is completed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "a stage is completed" - } - ], - "status": "PASSED", - "durationInNanos": 101201, - "depth": 0, - "parentFailed": false - }, - { - "name": "non repeatable lifecycle method ran", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "non repeatable lifecycle method ran" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 257602, - "depth": 0, - "parentFailed": false - }, - { - "name": "repeatable lifecycle method ran", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "repeatable lifecycle method ran" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 434603, - "depth": 0, - "parentFailed": false - }, - { - "name": "a scenario step", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a scenario step" - } - ], - "status": "PASSED", - "durationInNanos": 44600, - "depth": 0, - "parentFailed": false - }, - { - "name": "a stage is completed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "a stage is completed" - } - ], - "status": "PASSED", - "durationInNanos": 57600, - "depth": 0, - "parentFailed": false - }, - { - "name": "repeatable lifecycle method ran", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "repeatable lifecycle method ran" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "true" - } - } - ], - "status": "PASSED", - "durationInNanos": 515604, - "depth": 0, - "parentFailed": false - }, - { - "name": "non repeatable lifecycle method ran", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "non repeatable lifecycle method ran" - }, - { - "value": "false", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "false" - } - } - ], - "status": "PASSED", - "durationInNanos": 194502, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 4888935 - } - ], - "casesAsTable": false, - "durationInNanos": 4888935, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Repeated Stage Use" - } - ] - }, - { - "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", - "name": "J Unit Executor", - "scenarios": [ - { - "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", - "testMethodName": "after_stage_methods_of_stages_following_failing_stages_are_ignored", - "description": "after stage methods of stages following failing stages are ignored", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test with $ steps", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test with" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "steps" - } - ], - "status": "PASSED", - "durationInNanos": 613505, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test has $ failing stages", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "failing stages" - } - ], - "status": "PASSED", - "durationInNanos": 2309517, - "depth": 0, - "parentFailed": false - }, - { - "name": "stage $ has a failing after stage method", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "stage" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "has a failing after stage method" - } - ], - "status": "PASSED", - "durationInNanos": 297602, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ fails", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "fails" - } - ], - "status": "PASSED", - "durationInNanos": 280602, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 126871012, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails" - } - ], - "status": "PASSED", - "durationInNanos": 194902, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as failed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "is reported as failed" - } - ], - "status": "PASSED", - "durationInNanos": 661205, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as skipped", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "is reported as skipped" - } - ], - "status": "PASSED", - "durationInNanos": 281102, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 135850177 - } - ], - "casesAsTable": false, - "durationInNanos": 135850177, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit Executor", - "expanded": false, - "$$hashKey": "object:1332" - }, - { - "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", - "testMethodName": "test_classes_with_only_ignored_test_result_in_a_valid_report", - "description": "test classes with only ignored test result in a valid report", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.Issue-#25" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test class with all tests ignored", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test class with all tests ignored" - } - ], - "status": "PASSED", - "durationInNanos": 2911521, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 4978835, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report model is either null or empty", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report model is either null or empty" - } - ], - "status": "PASSED", - "durationInNanos": 224602, - "extendedDescription": "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", - "depth": 0, - "parentFailed": false - }, - { - "name": "has a valid class name if it is not null", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "has a valid class name if it is not null" - } - ], - "status": "PASSED", - "durationInNanos": 141001, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 11680684 - } - ], - "casesAsTable": false, - "durationInNanos": 11680684, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "#25" - } - ], - "classTitle": "J Unit Executor", - "expanded": false, - "$$hashKey": "object:1336" - }, - { - "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", - "testMethodName": "the_JUnit_Parametrized_runner_creates_correct_cases", - "description": "the JUnit Parametrized runner creates correct cases", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a JUnit test class with the Parameterized Runner", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a JUnit test class with the Parameterized Runner" - } - ], - "status": "PASSED", - "durationInNanos": 97101, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class has $ parameters", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test class has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "nParameters", - "formattedValue": "2" - } - }, - { - "value": "parameters" - } - ], - "status": "PASSED", - "durationInNanos": 5710741, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 67272583, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report model contains one scenario for each test method", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report model contains one scenario for each test method" - } - ], - "status": "PASSED", - "durationInNanos": 571804, - "depth": 0, - "parentFailed": false - }, - { - "name": "each scenario contains $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "each scenario contains" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "nParameters", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 500904, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 81940189 - } - ], - "casesAsTable": false, - "durationInNanos": 81940189, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit Executor", - "expanded": false, - "$$hashKey": "object:1337" - }, - { - "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", - "testMethodName": "all_steps_of_stages_following_failing_stages_are_ignored", - "description": "all steps of stages following failing stages are ignored", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test with $ steps", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test with" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "steps" - } - ], - "status": "PASSED", - "durationInNanos": 334602, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test has $ failing stages", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the test has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" - } - }, - { - "value": "failing stages" - } - ], - "status": "PASSED", - "durationInNanos": 329002, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ fails", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "fails" - } - ], - "status": "PASSED", - "durationInNanos": 278602, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 2683919, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails" - } - ], - "status": "PASSED", - "durationInNanos": 78800, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as failed", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "is reported as failed" - } - ], - "status": "PASSED", - "durationInNanos": 348702, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as skipped", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "is reported as skipped" - } - ], - "status": "PASSED", - "durationInNanos": 238101, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 5513840 - } - ], - "casesAsTable": false, - "durationInNanos": 5513840, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit Executor", - "expanded": false, - "$$hashKey": "object:1333" - }, - { - "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", - "testMethodName": "steps_following_failing_steps_are_reported_as_skipped", - "description": "steps following failing steps are reported as skipped", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a failing test with $ steps", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a failing test with" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "3" - } - }, - { - "value": "steps" - } - ], - "status": "PASSED", - "durationInNanos": 363903, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ fails", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "fails" - } - ], - "status": "PASSED", - "durationInNanos": 290102, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 12578390, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as failed", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "is reported as failed" - } - ], - "status": "PASSED", - "durationInNanos": 420203, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as skipped", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "is reported as skipped" - } - ], - "status": "PASSED", - "durationInNanos": 247302, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is reported as skipped", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "3" - } - }, - { - "value": "is reported as skipped" - } - ], - "status": "PASSED", - "durationInNanos": 271202, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 15509911 - } - ], - "casesAsTable": false, - "durationInNanos": 15509911, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "J Unit Executor", - "expanded": false, - "$$hashKey": "object:1335" - }, - { - "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", - "testMethodName": "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", - "description": "exception in scenario is not hidden by exception in JUnit after method", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.Issue-#49" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test class with a failing scenario and a failing after stage", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test class with a failing scenario and a failing after stage" - } - ], - "status": "PASSED", - "durationInNanos": 3306623, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 8229560, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails with message", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails with message" - }, - { - "value": "assertion failed in test step", - "argumentInfo": { - "argumentName": "expectedMessage", - "formattedValue": "assertion failed in test step" - } - } - ], - "status": "PASSED", - "durationInNanos": 796406, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 14999308 - } - ], - "casesAsTable": false, - "durationInNanos": 14999308, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "#49", - "description": "Scenarios of Issue #49" - } - ], - "classTitle": "J Unit Executor", - "expanded": false, - "$$hashKey": "object:1334" - } - ] - }, - { - "className": "com.tngtech.jgiven.tests.LifecycleOrderingTest", - "name": "Lifecycle Ordering", - "scenarios": [ - { - "className": "com.tngtech.jgiven.tests.LifecycleOrderingTest", - "testMethodName": "ostensibly_empty_test", - "description": "ostensibly empty test", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "an emptySetup", - "words": [ - { - "value": "given", - "isIntroWord": true - }, - { - "value": "an emptySetup" - } - ], - "status": "PASSED", - "durationInNanos": 109400, - "depth": 0, - "parentFailed": false - }, - { - "name": "no action is performed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "no action is performed" - } - ], - "status": "PASSED", - "durationInNanos": 20700, - "depth": 0, - "parentFailed": false - }, - { - "name": "nothing happens", - "words": [ - { - "value": "then", - "isIntroWord": true - }, - { - "value": "nothing happens" - } - ], - "status": "PASSED", - "durationInNanos": 11900, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 4417131 - } - ], - "casesAsTable": false, - "durationInNanos": 4417131, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Lifecycle Ordering" - } - ] - }, - { - "className": "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", - "name": "Simple Stage Repetition Use", - "scenarios": [ - { - "className": "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", - "testMethodName": "non_repeatable_methods_are_called_exactly_once", - "description": "non repeatable methods are called exactly once", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a simple stage containing before and after methods", - "words": [ - { - "value": "given", - "isIntroWord": true - }, - { - "value": "a simple stage containing before and after methods" - } - ], - "status": "PASSED", - "durationInNanos": 123001, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed", - "words": [ - { - "value": "when", - "isIntroWord": true - }, - { - "value": "the test is executed" - } - ], - "status": "PASSED", - "durationInNanos": 60000, - "depth": 0, - "parentFailed": false - }, - { - "name": "the before stage was called $ times", - "words": [ - { - "value": "then", - "isIntroWord": true - }, - { - "value": "the before stage was called" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "numberOfCalls", - "formattedValue": "1" - } - }, - { - "value": "times" - } - ], - "status": "PASSED", - "durationInNanos": 6729049, - "depth": 0, - "parentFailed": false - }, - { - "name": "the after stage method was called $ times", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the after stage method was called" - }, - { - "value": "0", - "argumentInfo": { - "argumentName": "numberOfCalls", - "formattedValue": "0" - } - }, - { - "value": "times" - } - ], - "status": "PASSED", - "durationInNanos": 418803, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 9219067 - } - ], - "casesAsTable": false, - "durationInNanos": 9219067, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Simple Stage Repetition Use" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", - "name": "Argument Analyzer", - "scenarios": [ - { - "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", - "testMethodName": "multiple_formatted_arguments_lead_to_one_parameter", - "description": "multiple formatted arguments lead to one parameter", - "tagIds": [ - "com.tngtech.jgiven.tags.Issue-#163" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "an unanalyzed report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "an unanalyzed report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 268502, - "extendedDescription": "A report model where the analysers have not been executed on", - "depth": 0, - "parentFailed": false - }, - { - "name": "parameters", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "parameters" - }, - { - "value": "param1", - "argumentInfo": { - "argumentName": "params", - "formattedValue": "param1" - } - } - ], - "status": "PASSED", - "durationInNanos": 625405, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 249502, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has arguments" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 355003, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "'foo'", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"'foo'\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "arg1", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"arg1\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 4366532, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"another step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "'foo'", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"'foo'\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "arg2", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"arg2\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 492903, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has arguments" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 266102, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "'bar'", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"'bar'\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "arg1", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"arg1\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 649704, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"another step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "'bar'", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"'bar'\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "arg2", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"arg2\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 417703, - "depth": 0, - "parentFailed": false - }, - { - "name": "the argument analyzer is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the argument analyzer is executed" - } - ], - "status": "PASSED", - "durationInNanos": 247001, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has derived parameters", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the scenario has derived parameters" - }, - { - "value": "arg1", - "argumentInfo": { - "argumentName": "parameters", - "formattedValue": "arg1" - } - } - ], - "status": "PASSED", - "durationInNanos": 2632319, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has derived arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "has derived arguments" - }, - { - "value": "'foo'", - "argumentInfo": { - "argumentName": "arguments", - "formattedValue": "'foo'" - } - } - ], - "status": "PASSED", - "durationInNanos": 460503, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has derived arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "has derived arguments" - }, - { - "value": "'bar'", - "argumentInfo": { - "argumentName": "arguments", - "formattedValue": "'bar'" - } - } - ], - "status": "PASSED", - "durationInNanos": 399103, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 12902992 - } - ], - "casesAsTable": false, - "durationInNanos": 12902992, - "executionStatus": "SUCCESS", - "tags": [ - { - "value": "#163", - "description": "Scenarios of Issue #163" - } - ], - "classTitle": "Argument Analyzer" - }, - { - "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", - "testMethodName": "different_structure_prevent_data_table", - "description": "different structure prevent data table", - "tagIds": [ - "com.tngtech.jgiven.tags.Issue-#163" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "an unanalyzed report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "an unanalyzed report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 52500, - "extendedDescription": "A report model where the analysers have not been executed on", - "depth": 0, - "parentFailed": false - }, - { - "name": "parameters", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "parameters" - }, - { - "value": "param1", - "argumentInfo": { - "argumentName": "params", - "formattedValue": "param1" - } - } - ], - "status": "PASSED", - "durationInNanos": 245602, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 208602, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has arguments" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 234302, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has a step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - }, - { - "value": "with argument" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 325303, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has a step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "another step" - } - }, - { - "value": "with argument" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 289102, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has arguments" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 278702, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "has a step" - }, - { - "value": "some step different to the case before", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step different to the case before" - } - }, - { - "value": "with argument" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 255802, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "has a step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "another step" - } - }, - { - "value": "with argument" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 344803, - "depth": 0, - "parentFailed": false - }, - { - "name": "the argument analyzer is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the argument analyzer is executed" - } - ], - "status": "PASSED", - "durationInNanos": 41501, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has no derived parameters", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the scenario has no derived parameters" - } - ], - "status": "PASSED", - "durationInNanos": 66501, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 2952121 - } - ], - "casesAsTable": false, - "durationInNanos": 2952121, - "executionStatus": "SUCCESS", - "tags": [ - { - "value": "#163", - "description": "Scenarios of Issue #163" - } - ], - "classTitle": "Argument Analyzer" - }, - { - "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", - "testMethodName": "multiple_parameter_usages_lead_to_one_parameter", - "description": "multiple parameter usages lead to one parameter", - "tagIds": [ - "com.tngtech.jgiven.tags.Issue-#32" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "an unanalyzed report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "an unanalyzed report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 70401, - "extendedDescription": "A report model where the analysers have not been executed on", - "depth": 0, - "parentFailed": false - }, - { - "name": "parameters", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "parameters" - }, - { - "value": "param1", - "argumentInfo": { - "argumentName": "params", - "formattedValue": "param1" - } - } - ], - "status": "PASSED", - "durationInNanos": 366203, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 298802, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has arguments" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 419103, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has a step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - }, - { - "value": "with argument" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 395103, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has a step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "another step" - } - }, - { - "value": "with argument" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 302002, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has arguments" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 338002, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "has a step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - }, - { - "value": "with argument" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 292602, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - } - }, - { - "value": "has a step" - }, - { - "value": "another step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "another step" - } - }, - { - "value": "with argument" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 237702, - "depth": 0, - "parentFailed": false - }, - { - "name": "the argument analyzer is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the argument analyzer is executed" - } - ], - "status": "PASSED", - "durationInNanos": 129901, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has derived parameters", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the scenario has derived parameters" - }, - { - "value": "param1", - "argumentInfo": { - "argumentName": "parameters", - "formattedValue": "param1" - } - } - ], - "status": "PASSED", - "durationInNanos": 239802, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has derived arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - }, - { - "value": "has derived arguments" - }, - { - "value": "foo", - "argumentInfo": { - "argumentName": "arguments", - "formattedValue": "foo" - } - } - ], - "status": "PASSED", - "durationInNanos": 250302, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has derived arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "2" - } - }, - { - "value": "has derived arguments" - }, - { - "value": "bar", - "argumentInfo": { - "argumentName": "arguments", - "formattedValue": "bar" - } - } - ], - "status": "PASSED", - "durationInNanos": 266302, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 4819435 - } - ], - "casesAsTable": false, - "durationInNanos": 4819435, - "executionStatus": "SUCCESS", - "tags": [ - { - "value": "#32", - "description": "Scenarios of Issue #32" - } - ], - "classTitle": "Argument Analyzer" - } - ] - }, - { - "className": "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", - "name": "De Einfacher Szenario", - "scenarios": [ - { - "className": "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", - "testMethodName": "Szenarien_können_in_deutsch_geschrieben_werden", - "description": "Szenarien können in deutsch geschrieben werden", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureGerman" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "ein deutsches Projekt", - "words": [ - { - "value": "gegeben", - "isIntroWord": true - }, - { - "value": "ein deutsches Projekt" - } - ], - "status": "PASSED", - "durationInNanos": 157101, - "depth": 0, - "parentFailed": false - }, - { - "name": "JGiven verwendet wird", - "words": [ - { - "value": "wenn", - "isIntroWord": true - }, - { - "value": "JGiven verwendet wird" - } - ], - "status": "PASSED", - "durationInNanos": 193101, - "depth": 0, - "parentFailed": false - }, - { - "name": "die Szenarien in deutsch geschrieben werden", - "words": [ - { - "value": "und", - "isIntroWord": true - }, - { - "value": "die Szenarien in deutsch geschrieben werden" - } - ], - "status": "PASSED", - "durationInNanos": 43301, - "depth": 0, - "parentFailed": false - }, - { - "name": "generiert JGiven deutsche Berichte", - "words": [ - { - "value": "dann", - "isIntroWord": true - }, - { - "value": "generiert JGiven deutsche Berichte" - } - ], - "status": "PASSED", - "durationInNanos": 808805, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 4559333 - } - ], - "casesAsTable": false, - "durationInNanos": 4559333, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "De Einfacher Szenario", - "expanded": false, - "$$hashKey": "object:602" - } - ] - }, - { - "className": "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", - "name": "Test With Exceptions In After Method", - "scenarios": [ - { - "className": "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", - "testMethodName": "test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", - "description": "test that exception in scenario is not hidden by exception in JUnit after method", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "nothing", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "nothing" - } - ], - "status": "PASSED", - "durationInNanos": 105601, - "depth": 0, - "parentFailed": false - }, - { - "name": "a step fails", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "a step fails" - } - ], - "status": "FAILED", - "durationInNanos": 538304, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "FAILED", - "errorMessage": "java.lang.AssertionError: assertion failed in test step", - "stackTrace": [ - "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", - "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod.test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(TestWithExceptionsInAfterMethod.java:22)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", - "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", - "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", - "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", - "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", - "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", - "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", - "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", - "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", - "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", - "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", - "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", - "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", - "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(JUnit5ExecutorTest.java:43)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", - "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", - "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", - "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", - "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", - "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", - "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", - "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", - "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", - "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", - "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", - "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", - "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", - "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", - "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", - "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", - "org.junit.rules.RunRules.evaluate(RunRules.java:20)", - "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", - "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", - "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", - "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", - "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", - "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", - "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", - "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", - "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", - "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", - "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", - "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" - ], - "durationInNanos": 5174537 - } - ], - "casesAsTable": false, - "durationInNanos": 5174537, - "executionStatus": "FAILED", - "tags": [], - "classTitle": "Test With Exceptions In After Method" - } - ] - }, - { - "className": "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", - "name": "Parallelization Error Prevention", - "scenarios": [ - { - "className": "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", - "testMethodName": "attempting_to_run_testNG_in_parallel_with_injected_stages_is_prevented", - "description": "attempting to run testNG in parallel with injected stages is prevented", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.Issue-#829" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a testNG class with parallel tests and injected stages", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a testNG class with parallel tests and injected stages" - } - ], - "status": "PASSED", - "durationInNanos": 1732913, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed with TestNG", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed with TestNG" - } - ], - "status": "PASSED", - "durationInNanos": 51989872, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test fails with message", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the test fails with message" - }, - { - "value": "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information.", - "argumentInfo": { - "argumentName": "expectedMessage", - "formattedValue": "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information." - } - } - ], - "status": "PASSED", - "durationInNanos": 323302, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 55119094 - } - ], - "casesAsTable": false, - "durationInNanos": 55119094, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "#829", - "description": "Scenarios of Issue #829" - } - ], - "classTitle": "Parallelization Error Prevention", - "expanded": false, - "$$hashKey": "object:148" - } - ] - }, - { - "className": "com.tngtech.jgiven.testng.DataProviderTestNgTest", - "name": "Data Provider Test Ng", - "scenarios": [ - { - "className": "com.tngtech.jgiven.testng.DataProviderTestNgTest", - "testMethodName": "a_scenario_with_one_failing_case_still_executes_the_following_ones", - "description": "a scenario with one failing case still executes the following ones", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.Issue-#123" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a TestNG test with two cases and the first one fails", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a TestNG test with two cases and the first one fails", - "$$hashKey": "object:444" - } - ], - "status": "PASSED", - "durationInNanos": 483504, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:407" - }, - { - "name": "the test class is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with", - "$$hashKey": "object:449" - }, - { - "value": "TestNG", - "argumentInfo": { - "argumentName": "framework", - "formattedValue": "TestNG" - }, - "$$hashKey": "object:450" - } - ], - "status": "PASSED", - "durationInNanos": 68705692, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:408" - }, - { - "name": "$ tests fail", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "nFailedTests", - "formattedValue": "1" - }, - "$$hashKey": "object:456" - }, - { - "value": "tests fail", - "$$hashKey": "object:457" - } - ], - "status": "PASSED", - "durationInNanos": 905906, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:409" - }, - { - "name": "the report model contains one scenario with $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report model contains one scenario with", - "$$hashKey": "object:463" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "nCases", - "formattedValue": "2" - }, - "$$hashKey": "object:464" - }, - { - "value": "cases", - "$$hashKey": "object:465" - } - ], - "status": "PASSED", - "durationInNanos": 257701, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:410" - }, - { - "name": "the scenario has execution status", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has execution status", - "$$hashKey": "object:473" - }, - { - "value": "FAILED", - "argumentInfo": { - "argumentName": "status", - "formattedValue": "FAILED" - }, - "$$hashKey": "object:474" - } - ], - "status": "PASSED", - "durationInNanos": 120001, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:411" - }, - { - "name": "case $ has status", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case", - "$$hashKey": "object:480" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - }, - "$$hashKey": "object:481" - }, - { - "value": "has status", - "$$hashKey": "object:482" - }, - { - "value": "FAILED", - "argumentInfo": { - "argumentName": "status", - "formattedValue": "FAILED" - }, - "$$hashKey": "object:483" - } - ], - "status": "PASSED", - "durationInNanos": 192701, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:412" - }, - { - "name": "case $ has status", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case", - "$$hashKey": "object:493" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" - }, - "$$hashKey": "object:494" - }, - { - "value": "has status", - "$$hashKey": "object:495" - }, - { - "value": "SUCCESS", - "argumentInfo": { - "argumentName": "status", - "formattedValue": "SUCCESS" - }, - "$$hashKey": "object:496" - } - ], - "status": "PASSED", - "durationInNanos": 212502, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:413" - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 72215616, - "$$hashKey": "object:404" - } - ], - "casesAsTable": false, - "durationInNanos": 72215616, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "#123", - "description": "Scenarios of Issue #123" - } - ], - "classTitle": "Data Provider Test Ng", - "expanded": false, - "$$hashKey": "object:146" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "name": "Plain Text Scenario Writer", - "scenarios": [ - { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "data_tables_are_generated_correctly_in_text_reports", - "description": "data tables are generated correctly in text reports", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables", - "com.tngtech.jgiven.tags.Issue-#34" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 71801, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ default cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "3" - } - }, - { - "value": "default cases" - } - ], - "status": "PASSED", - "durationInNanos": 264302, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "43", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"43\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg1", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg1\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 332403, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "another arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"another arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "arg11", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"arg11\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg2", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg2\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 271302, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "4", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"4\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg1", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg1\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 261702, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "another arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"another arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "arg21", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"arg21\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg2", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg2\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 256502, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ fails with error message", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "fails with error message" - }, - { - "value": "Some Error", - "argumentInfo": { - "argumentName": "errorMessage", - "formattedValue": "Some Error" - } - } - ], - "status": "PASSED", - "durationInNanos": 218602, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "3" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "1234567", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"1234567\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg1", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg1\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 267002, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "3", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "3" - } - }, - { - "value": "has a when step" - }, - { - "value": "another arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"another arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "arg31", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"arg31\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg2", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg2\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 245302, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 12775591, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "" - } - } - ], - "status": "PASSED", - "durationInNanos": 400403, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "" - } - } - ], - "status": "PASSED", - "durationInNanos": 157202, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n" - } - } - ], - "status": "PASSED", - "durationInNanos": 122501, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + name: "Test Framework Execution", + scenarios: [ + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "failing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_are_ignored", + description: "failing tests annotated with Pending with failIfPassed set to true are ignored", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#4", + "com.tngtech.jgiven.tags.FeaturePending" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test" + } + ], + status: "PASSED", + durationInNanos: 43300, + depth: 0, + parentFailed: false + }, + { + name: "the test is annotated with Pending", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test is annotated with Pending" + } + ], + status: "PASSED", + durationInNanos: 22300, + depth: 0, + parentFailed: false + }, + { + name: "failIfPassed set to true", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "failIfPassed set to true" + } + ], + status: "PASSED", + durationInNanos: 171001, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 9088565, + depth: 0, + parentFailed: false + }, + { + name: "the test is ignored", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test is ignored" + } + ], + status: "PASSED", + durationInNanos: 181601, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 12428689 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 14912707 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 46271931 + } + ], + casesAsTable: true, + durationInNanos: 73613327, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + {}, + { + value: "#4", + description: "Scenarios of Issue #4" + }, + {} + ], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:152" + }, + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "description_annotations_on_test_classes_are_evaluated", + description: "description annotations on test classes are evaluated", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test class", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test class" + } + ], + status: "PASSED", + durationInNanos: 51101, + depth: 0, + parentFailed: false + }, + { + name: "the test class has a description annotation with value", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test class has a description annotation with value" + }, + { + value: "Test Description", + argumentInfo: { + argumentName: "value", + formattedValue: "Test Description" + } + } + ], + status: "PASSED", + durationInNanos: 192702, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 5745541, + depth: 0, + parentFailed: false + }, + { + name: "the description of the report model is", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the description of the report model is" + }, + { + value: "Test Description", + argumentInfo: { + argumentName: "description", + formattedValue: "Test Description" + } + } + ], + status: "PASSED", + durationInNanos: 202301, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 7640154 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 9046765 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 65127566 + } + ], + casesAsTable: true, + durationInNanos: 81814485, + executionStatus: "SUCCESS", + tags: [{}, {}, {}], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:149" + }, + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "passing_tests_annotated_with_Pending_are_ignored", + description: "passing tests annotated with Pending are ignored", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a passing test", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a passing test" + } + ], + status: "PASSED", + durationInNanos: 30700, + depth: 0, + parentFailed: false + }, + { + name: "the test is annotated with Pending", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test is annotated with Pending" + } + ], + status: "PASSED", + durationInNanos: 12400, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 1651212, + depth: 0, + parentFailed: false + }, + { + name: "the test is ignored", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test is ignored" + } + ], + status: "PASSED", + durationInNanos: 58001, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 3072422 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 10636676 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 62145845 + } + ], + casesAsTable: true, + durationInNanos: 75854943, + executionStatus: "SUCCESS", + tags: [{}, {}, {}, {}], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:154" + }, + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "the_error_message_of_a_failing_step_is_reported", + description: "the error message of a failing step is reported", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test" + } + ], + status: "PASSED", + durationInNanos: 72300, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 2224616, + depth: 0, + parentFailed: false + }, + { + name: "the case is marked as failed", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the case is marked as failed" + } + ], + status: "PASSED", + durationInNanos: 90601, + depth: 0, + parentFailed: false + }, + { + name: "an error message is stored in the report", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "an error message is stored in the report" + } + ], + status: "PASSED", + durationInNanos: 56300, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 8485261 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 11512682 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 82237489 + } + ], + casesAsTable: true, + durationInNanos: 102235432, + executionStatus: "SUCCESS", + tags: [{}, {}, {}], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:157" + }, + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "passing_steps_before_failing_steps_are_reported_as_passed", + description: "passing steps before failing steps are reported as passed", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test with $ steps", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test with" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "steps" + } + ], + status: "PASSED", + durationInNanos: 180002, + depth: 0, + parentFailed: false + }, + { + name: "step $ fails", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "fails" + } + ], + status: "PASSED", + durationInNanos: 5860342, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 2147815, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as passed", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "is reported as passed" + } + ], + status: "PASSED", + durationInNanos: 206901, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as failed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "is reported as failed" + } + ], + status: "PASSED", + durationInNanos: 191002, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 9748070 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 12073186 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 85057908 + } + ], + casesAsTable: true, + durationInNanos: 106879164, + executionStatus: "SUCCESS", + tags: [{}, {}, {}], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:153" + }, + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "failing_tests_annotated_with_Pending_are_ignored", + description: "failing tests annotated with Pending are ignored", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test" + } + ], + status: "PASSED", + durationInNanos: 26200, + depth: 0, + parentFailed: false + }, + { + name: "the test is annotated with Pending", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test is annotated with Pending" + } + ], + status: "PASSED", + durationInNanos: 12000, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 1683113, + depth: 0, + parentFailed: false + }, + { + name: "the test is ignored", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test is ignored" + } + ], + status: "PASSED", + durationInNanos: 102001, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 8930164 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 12805991 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 39764484 + } + ], + casesAsTable: true, + durationInNanos: 61500639, + executionStatus: "SUCCESS", + tags: [{}, {}, {}, {}], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:150" + }, + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "passing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_fail", + description: "passing tests annotated with Pending with failIfPassed set to true fail", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#4", + "com.tngtech.jgiven.tags.FeaturePending" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a passing test", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a passing test" + } + ], + status: "PASSED", + durationInNanos: 25600, + depth: 0, + parentFailed: false + }, + { + name: "the test is annotated with Pending", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test is annotated with Pending" + } + ], + status: "PASSED", + durationInNanos: 11800, + depth: 0, + parentFailed: false + }, + { + name: "failIfPassed set to true", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "failIfPassed set to true" + } + ], + status: "PASSED", + durationInNanos: 9601, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 1708512, + depth: 0, + parentFailed: false + }, + { + name: "the test fails with message", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails with message" + }, + { + value: "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation.", + argumentInfo: { + argumentName: "expectedMessage", + formattedValue: "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation." + } + } + ], + status: "PASSED", + durationInNanos: 230101, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 8336259 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 11254380 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 49742656 + } + ], + casesAsTable: true, + durationInNanos: 69333295, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + {}, + { + value: "#4", + description: "Scenarios of Issue #4" + }, + {} + ], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:155" + }, + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "failing_tests_annotated_with_Pending_with_executeSteps_set_to_true_are_ignored", + description: "failing tests annotated with Pending with executeSteps set to true are ignored", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test" + } + ], + status: "PASSED", + durationInNanos: 23100, + depth: 0, + parentFailed: false + }, + { + name: "the test is annotated with Pending", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test is annotated with Pending" + } + ], + status: "PASSED", + durationInNanos: 11001, + depth: 0, + parentFailed: false + }, + { + name: "executeSteps set to true", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "executeSteps set to true" + } + ], + status: "PASSED", + durationInNanos: 20900, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 1684912, + depth: 0, + parentFailed: false + }, + { + name: "the test is ignored", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test is ignored" + } + ], + status: "PASSED", + durationInNanos: 51200, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 3141722 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 11048279 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 46086930 + } + ], + casesAsTable: true, + durationInNanos: 60276931, + executionStatus: "SUCCESS", + tags: [{}, {}, {}, {}], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:151" + }, + { + className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + testMethodName: "tag_annotations_appear_in_the_report_model", + description: "tag annotations appear in the report model", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeatureTags-Tags" + ], + explicitParameters: ["testFramework"], + derivedParameters: ["testFramework"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test" + } + ], + status: "PASSED", + durationInNanos: 29800, + depth: 0, + parentFailed: false + }, + { + name: "the test has a tag annotation named", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test has a tag annotation named" + }, + { + value: "TestTag", + argumentInfo: { + argumentName: "name", + formattedValue: "TestTag" + } + } + ], + status: "PASSED", + durationInNanos: 162402, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with" + }, + { + value: "JUnit", + argumentInfo: { + parameterName: "testFramework", + argumentName: "framework", + formattedValue: "JUnit" + } + } + ], + status: "PASSED", + durationInNanos: 1513811, + depth: 0, + parentFailed: false + }, + { + name: "the report model contains a tag named", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report model contains a tag named" + }, + { + value: "com.tngtech.jgiven.tests.TestTag", + argumentInfo: { + argumentName: "tagName", + formattedValue: "com.tngtech.jgiven.tests.TestTag" + } + } + ], + status: "PASSED", + durationInNanos: 463803, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["JUnit"], + derivedArguments: ["JUnit"], + status: "SUCCESS", + durationInNanos: 3787827 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["JUnit5"], + derivedArguments: ["JUnit5"], + status: "SUCCESS", + durationInNanos: 11783785 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["TestNG"], + derivedArguments: ["TestNG"], + status: "SUCCESS", + durationInNanos: 53718284 + } + ], + casesAsTable: true, + durationInNanos: 69289896, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + {}, + { + value: "Tags" + } + ], + classTitle: "Test Framework Execution", + expanded: false, + $$hashKey: "object:156" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 17576626 - } - ], - "casesAsTable": false, - "durationInNanos": 17576626, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#34", - "description": "Scenarios of Issue #34" - } - ], - "classTitle": "Plain Text Scenario Writer", - "expanded": false, - "$$hashKey": "object:619" + ] }, { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "new_lines_in_data_tables_do_not_break_the_table_layout", - "description": "new lines in data tables do not break the table layout", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables", - "com.tngtech.jgiven.tags.Issue-#152" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 44401, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ default cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "default cases" - } - ], - "status": "PASSED", - "durationInNanos": 186101, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "1\n2", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"1\n2\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg1", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg1\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 431703, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "4", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"4\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg1", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg1\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 581705, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 8388660, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "" - } - } - ], - "status": "PASSED", - "durationInNanos": 176901, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n" - } - } - ], - "status": "PASSED", - "durationInNanos": 159601, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + name: "Difference Analyzer", + scenarios: [ + { + className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + testMethodName: "the_difference_analyzer_should_find_additional_steps_in_the_middle", + description: "the difference analyzer should find additional steps in the middle", + tagIds: ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 62900, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 287702, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + } + ], + status: "PASSED", + durationInNanos: 304002, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has step" + }, + { + value: "extra step in the middle", + argumentInfo: { + argumentName: "name", + formattedValue: "extra step in the middle" + } + } + ], + status: "PASSED", + durationInNanos: 254902, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: "another step" + } + } + ], + status: "PASSED", + durationInNanos: 224502, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + } + ], + status: "PASSED", + durationInNanos: 380503, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: "another step" + } + } + ], + status: "PASSED", + durationInNanos: 272202, + depth: 0, + parentFailed: false + }, + { + name: "the difference analyzer is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the difference analyzer is executed" + } + ], + status: "PASSED", + durationInNanos: 3865428, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 269302, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "2", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "2" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is marked as diff" + } + ], + status: "PASSED", + durationInNanos: 291702, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "3", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "3" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 201301, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 195402, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "2", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "2" + } + }, + { + value: "of case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 198801, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 8318459 + } + ], + casesAsTable: false, + durationInNanos: 8318459, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Difference Analyzer", + expanded: false, + $$hashKey: "object:606" + }, + { + className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + testMethodName: "the_difference_analyzer_should_find_additional_steps_at_the_beginning", + description: "the difference analyzer should find additional steps at the beginning", + tagIds: ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 45900, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 259702, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has step" + }, + { + value: "extra step at the beginning", + argumentInfo: { + argumentName: "name", + formattedValue: "extra step at the beginning" + } + } + ], + status: "PASSED", + durationInNanos: 260202, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + } + ], + status: "PASSED", + durationInNanos: 201402, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + } + ], + status: "PASSED", + durationInNanos: 288602, + depth: 0, + parentFailed: false + }, + { + name: "the difference analyzer is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the difference analyzer is executed" + } + ], + status: "PASSED", + durationInNanos: 115301, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is marked as diff", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is marked as diff" + } + ], + status: "PASSED", + durationInNanos: 353103, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "2", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "2" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 226401, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 216301, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 3032021 + } + ], + casesAsTable: false, + durationInNanos: 3032021, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Difference Analyzer", + expanded: false, + $$hashKey: "object:604" + }, + { + className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + testMethodName: "the_difference_analyzer_should_find_differences_in_step_arguments", + description: "the difference analyzer should find differences in step arguments", + tagIds: ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 49300, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 327702, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has a step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + }, + { + value: "with argument" + }, + { + value: "foo", + argumentInfo: { + argumentName: "arg", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 259502, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "has a step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + }, + { + value: "with argument" + }, + { + value: "bar", + argumentInfo: { + argumentName: "arg", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 299702, + depth: 0, + parentFailed: false + }, + { + name: "the difference analyzer is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the difference analyzer is executed" + } + ], + status: "PASSED", + durationInNanos: 562504, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 243802, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "3", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "3" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is marked as diff" + } + ], + status: "PASSED", + durationInNanos: 14760806, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 277702, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "3", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "3" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "is marked as diff" + } + ], + status: "PASSED", + durationInNanos: 267701, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 17969330 + } + ], + casesAsTable: false, + durationInNanos: 17969330, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Difference Analyzer", + expanded: false, + $$hashKey: "object:607" + }, + { + className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + testMethodName: "the_difference_analyzer_should_find_additional_steps_at_the_end", + description: "the difference analyzer should find additional steps at the end", + tagIds: ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 47901, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 190301, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + } + ], + status: "PASSED", + durationInNanos: 184502, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: "another step" + } + } + ], + status: "PASSED", + durationInNanos: 187201, + depth: 0, + parentFailed: false + }, + { + name: "case $ has step $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + } + ], + status: "PASSED", + durationInNanos: 190201, + depth: 0, + parentFailed: false + }, + { + name: "the difference analyzer is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the difference analyzer is executed" + } + ], + status: "PASSED", + durationInNanos: 61300, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 197501, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "2", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "2" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "is marked as diff" + } + ], + status: "PASSED", + durationInNanos: 201802, + depth: 0, + parentFailed: false + }, + { + name: "word $ of step $ of case $ is not marked as diff", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "word" + }, + { + value: "2", + argumentInfo: { + argumentName: "wordNr", + formattedValue: "2" + } + }, + { + value: "of step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "is not marked as diff" + } + ], + status: "PASSED", + durationInNanos: 212701, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 2341117 + } + ], + casesAsTable: false, + durationInNanos: 2341117, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Difference Analyzer", + expanded: false, + $$hashKey: "object:605" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 11461882 - } - ], - "casesAsTable": false, - "durationInNanos": 11461882, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#152", - "description": "Scenarios of Issue #152" - } - ], - "classTitle": "Plain Text Scenario Writer", - "expanded": false, - "$$hashKey": "object:621" + ] }, { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "data_tables_are_generated_for_empty_strings", - "description": "data tables are generated for empty strings", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 45101, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ default cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "default cases" - } - ], - "status": "PASSED", - "durationInNanos": 199201, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "non empty string", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"non empty string\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "arg", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"arg\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 300903, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "arg", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"arg\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 261002, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 399503, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "" - } - } - ], - "status": "PASSED", - "durationInNanos": 141801, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n" - } - } - ], - "status": "PASSED", - "durationInNanos": 115001, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + name: "Ascii Doc Report Generator", + scenarios: [ + { + className: "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + testMethodName: "the_AsciiDoc_reporter_generates_an_index_file_a_test_file_and_multiple_other_asciidoc_files", + description: "the AsciiDoc reporter generates an index file a test file and multiple other asciidoc files", + tagIds: ["com.tngtech.jgiven.tags.FeatureAsciiDocReport"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 1695912, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 3116423, + depth: 0, + parentFailed: false + }, + { + name: "the asciidoc reporter is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the asciidoc reporter is executed" + } + ], + status: "PASSED", + durationInNanos: 104707653, + depth: 0, + parentFailed: false + }, + { + name: "a file with name $ exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "a file with name" + }, + { + value: "index.asciidoc", + argumentInfo: { + argumentName: "name", + formattedValue: '"index.asciidoc"' + } + }, + { + value: "exists" + } + ], + status: "PASSED", + durationInNanos: 9958772, + depth: 0, + parentFailed: false + }, + { + name: "a file with name $ exists", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a file with name" + }, + { + value: "totalStatistics.asciidoc", + argumentInfo: { + argumentName: "name", + formattedValue: '"totalStatistics.asciidoc"' + } + }, + { + value: "exists" + } + ], + status: "PASSED", + durationInNanos: 1087808, + depth: 0, + parentFailed: false + }, + { + name: "a file with name $ exists", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a file with name" + }, + { + value: "allScenarios.asciidoc", + argumentInfo: { + argumentName: "name", + formattedValue: '"allScenarios.asciidoc"' + } + }, + { + value: "exists" + } + ], + status: "PASSED", + durationInNanos: 253502, + depth: 0, + parentFailed: false + }, + { + name: "a file with name $ exists", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a file with name" + }, + { + value: "failedScenarios.asciidoc", + argumentInfo: { + argumentName: "name", + formattedValue: '"failedScenarios.asciidoc"' + } + }, + { + value: "exists" + } + ], + status: "PASSED", + durationInNanos: 528704, + depth: 0, + parentFailed: false + }, + { + name: "a file with name $ exists", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a file with name" + }, + { + value: "pendingScenarios.asciidoc", + argumentInfo: { + argumentName: "name", + formattedValue: '"pendingScenarios.asciidoc"' + } + }, + { + value: "exists" + } + ], + status: "PASSED", + durationInNanos: 244502, + depth: 0, + parentFailed: false + }, + { + name: "a file with name $ exists", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a file with name" + }, + { + value: "features/Test.asciidoc", + argumentInfo: { + argumentName: "name", + formattedValue: '"features/Test.asciidoc"' + } + }, + { + value: "exists" + } + ], + status: "PASSED", + durationInNanos: 306902, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 126571010 + } + ], + casesAsTable: false, + durationInNanos: 126571010, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Ascii Doc Report Generator" + }, + { + className: "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + testMethodName: "the_multilines_values_are_rendered_as_literal_blocks", + description: "the multilines values are rendered as literal blocks", + tagIds: ["com.tngtech.jgiven.tags.FeatureAsciiDocReport"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 259301, + depth: 0, + parentFailed: false + }, + { + name: "step $ of case $ has a formatted value $ as parameter", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "has a formatted value" + }, + { + value: "Some \ntext \nwith \nnewlines", + argumentInfo: { + argumentName: "formattedValue", + formattedValue: "Some \ntext \nwith \nnewlines" + } + }, + { + value: "as parameter" + } + ], + status: "PASSED", + durationInNanos: 438003, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 3492725, + depth: 0, + parentFailed: false + }, + { + name: "the asciidoc reporter is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the asciidoc reporter is executed" + } + ], + status: "PASSED", + durationInNanos: 36131260, + depth: 0, + parentFailed: false + }, + { + name: "the asciidoc report $ exists", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the asciidoc report" + }, + { + value: "features/Test.asciidoc", + argumentInfo: { + argumentName: "ascidocFile", + formattedValue: "features/Test.asciidoc" + } + }, + { + value: "exists" + } + ], + status: "PASSED", + durationInNanos: 482703, + depth: 0, + parentFailed: false + }, + { + name: "the literal block is added $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the literal block is added" + }, + { + value: "....\nSome \ntext \nwith \nnewlines\n....", + argumentInfo: { + argumentName: "expectedLiteral", + formattedValue: "....\nSome \ntext \nwith \nnewlines\n...." + } + } + ], + status: "PASSED", + durationInNanos: 32621635, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 115058328 + } + ], + casesAsTable: false, + durationInNanos: 115058328, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Ascii Doc Report Generator" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 2541418 - } - ], - "casesAsTable": false, - "durationInNanos": 2541418, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {} - ], - "classTitle": "Plain Text Scenario Writer", - "expanded": false, - "$$hashKey": "object:620" + ] }, { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "ignored_steps_marked_in_text_reports", - "description": "ignored steps marked in text reports", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport" - ], - "explicitParameters": [ - "status", - "expectedText" - ], - "derivedParameters": [ - "status", - "expectedText" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 47800, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ is named", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "is named" - }, - { - "value": "something happens", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "something happens" - } - } - ], - "status": "PASSED", - "durationInNanos": 240202, - "depth": 0, - "parentFailed": false - }, - { - "name": "step $ has status", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "has status" - }, - { - "value": "PASSED", - "argumentInfo": { - "parameterName": "status", - "argumentName": "status", - "formattedValue": "PASSED" - } - } - ], - "status": "PASSED", - "durationInNanos": 187901, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 231501, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "something happens", - "argumentInfo": { - "parameterName": "expectedText", - "argumentName": "line", - "formattedValue": "something happens" - } - } - ], - "status": "PASSED", - "durationInNanos": 152501, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.impl.RepeatedStageUseTest", + name: "Repeated Stage Use", + scenarios: [ + { + className: "com.tngtech.jgiven.impl.RepeatedStageUseTest", + testMethodName: "before_stage_method_is_executed_multiple_times", + description: "before stage method is executed multiple times", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a scenario step", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a scenario step" + } + ], + status: "PASSED", + durationInNanos: 90501, + depth: 0, + parentFailed: false + }, + { + name: "a stage is completed", + words: [ + { + value: "a stage is completed" + } + ], + status: "PASSED", + durationInNanos: 84501, + depth: 0, + parentFailed: false + }, + { + name: "non repeatable lifecycle method ran", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "non repeatable lifecycle method ran" + }, + { + value: "true", + argumentInfo: { + argumentName: "value", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 4823835, + depth: 0, + parentFailed: false + }, + { + name: "repeatable lifecycle method ran", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "repeatable lifecycle method ran" + }, + { + value: "true", + argumentInfo: { + argumentName: "value", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 351103, + depth: 0, + parentFailed: false + }, + { + name: "a scenario step", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a scenario step" + } + ], + status: "PASSED", + durationInNanos: 404403, + depth: 0, + parentFailed: false + }, + { + name: "a stage is completed", + words: [ + { + value: "a stage is completed" + } + ], + status: "PASSED", + durationInNanos: 279502, + depth: 0, + parentFailed: false + }, + { + name: "repeatable lifecycle method ran", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "repeatable lifecycle method ran" + }, + { + value: "true", + argumentInfo: { + argumentName: "value", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 290903, + depth: 0, + parentFailed: false + }, + { + name: "non repeatable lifecycle method ran", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "non repeatable lifecycle method ran" + }, + { + value: "false", + argumentInfo: { + argumentName: "value", + formattedValue: "false" + } + } + ], + status: "PASSED", + durationInNanos: 213201, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 40164489 + } + ], + casesAsTable: false, + durationInNanos: 40164489, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Repeated Stage Use" + }, + { + className: "com.tngtech.jgiven.impl.RepeatedStageUseTest", + testMethodName: "after_stage_method_is_executed_multiple_times", + description: "after stage method is executed multiple times", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a scenario step", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a scenario step" + } + ], + status: "PASSED", + durationInNanos: 47101, + depth: 0, + parentFailed: false + }, + { + name: "a stage is completed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "a stage is completed" + } + ], + status: "PASSED", + durationInNanos: 101201, + depth: 0, + parentFailed: false + }, + { + name: "non repeatable lifecycle method ran", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "non repeatable lifecycle method ran" + }, + { + value: "true", + argumentInfo: { + argumentName: "value", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 257602, + depth: 0, + parentFailed: false + }, + { + name: "repeatable lifecycle method ran", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "repeatable lifecycle method ran" + }, + { + value: "true", + argumentInfo: { + argumentName: "value", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 434603, + depth: 0, + parentFailed: false + }, + { + name: "a scenario step", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a scenario step" + } + ], + status: "PASSED", + durationInNanos: 44600, + depth: 0, + parentFailed: false + }, + { + name: "a stage is completed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "a stage is completed" + } + ], + status: "PASSED", + durationInNanos: 57600, + depth: 0, + parentFailed: false + }, + { + name: "repeatable lifecycle method ran", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "repeatable lifecycle method ran" + }, + { + value: "true", + argumentInfo: { + argumentName: "value", + formattedValue: "true" + } + } + ], + status: "PASSED", + durationInNanos: 515604, + depth: 0, + parentFailed: false + }, + { + name: "non repeatable lifecycle method ran", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "non repeatable lifecycle method ran" + }, + { + value: "false", + argumentInfo: { + argumentName: "value", + formattedValue: "false" + } + } + ], + status: "PASSED", + durationInNanos: 194502, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 4888935 + } + ], + casesAsTable: false, + durationInNanos: 4888935, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Repeated Stage Use" } - ], - "explicitArguments": [ - "PASSED", - "something happens" - ], - "derivedArguments": [ - "PASSED", - "something happens" - ], - "status": "SUCCESS", - "durationInNanos": 1978214 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "FAILED", - "something happens (failed)" - ], - "derivedArguments": [ - "FAILED", - "something happens (failed)" - ], - "status": "SUCCESS", - "durationInNanos": 10393174 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "SKIPPED", - "something happens (skipped)" - ], - "derivedArguments": [ - "SKIPPED", - "something happens (skipped)" - ], - "status": "SUCCESS", - "durationInNanos": 2467018 - }, - { - "caseNr": 4, - "steps": [], - "explicitArguments": [ - "PENDING", - "something happens (pending)" - ], - "derivedArguments": [ - "PENDING", - "something happens (pending)" - ], - "status": "SUCCESS", - "durationInNanos": 12376589 - } - ], - "casesAsTable": true, - "durationInNanos": 27214995, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Plain Text Scenario Writer" + ] }, { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "table_annotations_at_parameters_lead_to_data_tables_in_the_report", - "description": "table annotations at parameters lead to data tables in the report", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.Issue-#52", - "com.tngtech.jgiven.tags.FeatureDataTables" - ], - "explicitParameters": [ - "headerType", - "hasHeaderLine" - ], - "derivedParameters": [ - "headerType", - "line" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 78601, - "depth": 0, - "parentFailed": false - }, - { - "name": "a step has a data table with following values", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a step has a data table with following values" - }, - { - "value": "[[foo, bar], [1, a], [2, b]]", - "argumentInfo": { - "argumentName": "dataTable", - "dataTable": { - "headerType": "HORIZONTAL", - "data": [ - [ - "foo", - "bar" + className: "com.tngtech.jgiven.junit.JUnitExecutorTest", + name: "J Unit Executor", + scenarios: [ + { + className: "com.tngtech.jgiven.junit.JUnitExecutorTest", + testMethodName: "after_stage_methods_of_stages_following_failing_stages_are_ignored", + description: "after stage methods of stages following failing stages are ignored", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test with $ steps", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test with" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "steps" + } + ], + status: "PASSED", + durationInNanos: 613505, + depth: 0, + parentFailed: false + }, + { + name: "the test has $ failing stages", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test has" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "failing stages" + } + ], + status: "PASSED", + durationInNanos: 2309517, + depth: 0, + parentFailed: false + }, + { + name: "stage $ has a failing after stage method", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "stage" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "has a failing after stage method" + } + ], + status: "PASSED", + durationInNanos: 297602, + depth: 0, + parentFailed: false + }, + { + name: "step $ fails", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "fails" + } + ], + status: "PASSED", + durationInNanos: 280602, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 126871012, + depth: 0, + parentFailed: false + }, + { + name: "the test fails", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails" + } + ], + status: "PASSED", + durationInNanos: 194902, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as failed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "is reported as failed" + } + ], + status: "PASSED", + durationInNanos: 661205, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as skipped", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "is reported as skipped" + } + ], + status: "PASSED", + durationInNanos: 281102, + depth: 0, + parentFailed: false + } ], - [ - "1", - "a" + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 135850177 + } + ], + casesAsTable: false, + durationInNanos: 135850177, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit Executor", + expanded: false, + $$hashKey: "object:1332" + }, + { + className: "com.tngtech.jgiven.junit.JUnitExecutorTest", + testMethodName: "test_classes_with_only_ignored_test_result_in_a_valid_report", + description: "test classes with only ignored test result in a valid report", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#25" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test class with all tests ignored", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test class with all tests ignored" + } + ], + status: "PASSED", + durationInNanos: 2911521, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 4978835, + depth: 0, + parentFailed: false + }, + { + name: "the report model is either null or empty", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report model is either null or empty" + } + ], + status: "PASSED", + durationInNanos: 224602, + extendedDescription: "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", + depth: 0, + parentFailed: false + }, + { + name: "has a valid class name if it is not null", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "has a valid class name if it is not null" + } + ], + status: "PASSED", + durationInNanos: 141001, + depth: 0, + parentFailed: false + } ], - [ - "2", - "b" - ] - ] + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 11680684 } - } - } - ], - "status": "PASSED", - "durationInNanos": 26546090, - "depth": 0, - "parentFailed": false - }, - { - "name": "header type set to", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "header type set to" - }, - { - "value": "VERTICAL", - "argumentInfo": { - "parameterName": "headerType", - "argumentName": "headerType", - "formattedValue": "VERTICAL" - } - } - ], - "status": "PASSED", - "durationInNanos": 211101, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 465404, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n", - "argumentInfo": { - "parameterName": "line", - "argumentName": "line", - "formattedValue": "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" - } - } - ], - "status": "PASSED", - "durationInNanos": 227502, - "depth": 0, - "parentFailed": false + ], + casesAsTable: false, + durationInNanos: 11680684, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "#25" + } + ], + classTitle: "J Unit Executor", + expanded: false, + $$hashKey: "object:1336" + }, + { + className: "com.tngtech.jgiven.junit.JUnitExecutorTest", + testMethodName: "the_JUnit_Parametrized_runner_creates_correct_cases", + description: "the JUnit Parametrized runner creates correct cases", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a JUnit test class with the Parameterized Runner", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a JUnit test class with the Parameterized Runner" + } + ], + status: "PASSED", + durationInNanos: 97101, + depth: 0, + parentFailed: false + }, + { + name: "the test class has $ parameters", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test class has" + }, + { + value: "2", + argumentInfo: { + argumentName: "nParameters", + formattedValue: "2" + } + }, + { + value: "parameters" + } + ], + status: "PASSED", + durationInNanos: 5710741, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 67272583, + depth: 0, + parentFailed: false + }, + { + name: "the report model contains one scenario for each test method", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report model contains one scenario for each test method" + } + ], + status: "PASSED", + durationInNanos: 571804, + depth: 0, + parentFailed: false + }, + { + name: "each scenario contains $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "each scenario contains" + }, + { + value: "2", + argumentInfo: { + argumentName: "nParameters", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 500904, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 81940189 + } + ], + casesAsTable: false, + durationInNanos: 81940189, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit Executor", + expanded: false, + $$hashKey: "object:1337" + }, + { + className: "com.tngtech.jgiven.junit.JUnitExecutorTest", + testMethodName: "all_steps_of_stages_following_failing_stages_are_ignored", + description: "all steps of stages following failing stages are ignored", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test with $ steps", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test with" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "steps" + } + ], + status: "PASSED", + durationInNanos: 334602, + depth: 0, + parentFailed: false + }, + { + name: "the test has $ failing stages", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the test has" + }, + { + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" + } + }, + { + value: "failing stages" + } + ], + status: "PASSED", + durationInNanos: 329002, + depth: 0, + parentFailed: false + }, + { + name: "step $ fails", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "fails" + } + ], + status: "PASSED", + durationInNanos: 278602, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 2683919, + depth: 0, + parentFailed: false + }, + { + name: "the test fails", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails" + } + ], + status: "PASSED", + durationInNanos: 78800, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as failed", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "is reported as failed" + } + ], + status: "PASSED", + durationInNanos: 348702, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as skipped", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "is reported as skipped" + } + ], + status: "PASSED", + durationInNanos: 238101, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 5513840 + } + ], + casesAsTable: false, + durationInNanos: 5513840, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit Executor", + expanded: false, + $$hashKey: "object:1333" + }, + { + className: "com.tngtech.jgiven.junit.JUnitExecutorTest", + testMethodName: "steps_following_failing_steps_are_reported_as_skipped", + description: "steps following failing steps are reported as skipped", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a failing test with $ steps", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a failing test with" + }, + { + value: "3", + argumentInfo: { + argumentName: "n", + formattedValue: "3" + } + }, + { + value: "steps" + } + ], + status: "PASSED", + durationInNanos: 363903, + depth: 0, + parentFailed: false + }, + { + name: "step $ fails", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "fails" + } + ], + status: "PASSED", + durationInNanos: 290102, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 12578390, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as failed", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "is reported as failed" + } + ], + status: "PASSED", + durationInNanos: 420203, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as skipped", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "is reported as skipped" + } + ], + status: "PASSED", + durationInNanos: 247302, + depth: 0, + parentFailed: false + }, + { + name: "step $ is reported as skipped", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "3", + argumentInfo: { + argumentName: "i", + formattedValue: "3" + } + }, + { + value: "is reported as skipped" + } + ], + status: "PASSED", + durationInNanos: 271202, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 15509911 + } + ], + casesAsTable: false, + durationInNanos: 15509911, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit Executor", + expanded: false, + $$hashKey: "object:1335" + }, + { + className: "com.tngtech.jgiven.junit.JUnitExecutorTest", + testMethodName: "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + description: "exception in scenario is not hidden by exception in JUnit after method", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#49" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test class with a failing scenario and a failing after stage", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test class with a failing scenario and a failing after stage" + } + ], + status: "PASSED", + durationInNanos: 3306623, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 8229560, + depth: 0, + parentFailed: false + }, + { + name: "the test fails with message", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails with message" + }, + { + value: "assertion failed in test step", + argumentInfo: { + argumentName: "expectedMessage", + formattedValue: "assertion failed in test step" + } + } + ], + status: "PASSED", + durationInNanos: 796406, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 14999308 + } + ], + casesAsTable: false, + durationInNanos: 14999308, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "#49", + description: "Scenarios of Issue #49" + } + ], + classTitle: "J Unit Executor", + expanded: false, + $$hashKey: "object:1334" } - ], - "explicitArguments": [ - "VERTICAL", - "false" - ], - "derivedArguments": [ - "VERTICAL", - "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" - ], - "status": "SUCCESS", - "durationInNanos": 28951607 - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "HORIZONTAL", - "true" - ], - "derivedArguments": [ - "HORIZONTAL", - "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" - ], - "status": "SUCCESS", - "durationInNanos": 1995914 - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "NONE", - "false" - ], - "derivedArguments": [ - "NONE", - "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" - ], - "status": "SUCCESS", - "durationInNanos": 1839113 - }, - { - "caseNr": 4, - "steps": [], - "explicitArguments": [ - "BOTH", - "true" - ], - "derivedArguments": [ - "BOTH", - "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" - ], - "status": "SUCCESS", - "durationInNanos": 1593212 - } - ], - "casesAsTable": true, - "durationInNanos": 34379846, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "#52", - "description": "Scenarios of Issue #52" - }, - {} - ], - "classTitle": "Plain Text Scenario Writer", - "expanded": false, - "$$hashKey": "object:623" + ] }, { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "arguments_are_correctly_printed_in_text_reports_for_data_tables", - "description": "arguments are correctly printed in text reports for data tables", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables", - "com.tngtech.jgiven.tags.Issue-#10" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 37100, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has parameters", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has parameters" - }, - { - "value": "param1", - "argumentInfo": { - "argumentName": "params", - "formattedValue": "param1" - } - } - ], - "status": "PASSED", - "durationInNanos": 297702, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ default cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "default cases" - } - ], - "status": "PASSED", - "durationInNanos": 179602, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has arguments" - }, - { - "value": "arg10", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "arg10" - } - } - ], - "status": "PASSED", - "durationInNanos": 147301, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "arg10", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"arg10\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 312002, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has arguments" - }, - { - "value": "arg20", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "arg20" - } - } - ], - "status": "PASSED", - "durationInNanos": 283702, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "arg20", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"arg20\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "aArg", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"aArg\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 334102, - "depth": 0, - "parentFailed": false - }, - { - "name": "all cases have a step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "all cases have a step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - }, - { - "value": "with argument" - }, - { - "value": "someArg", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "someArg" - } - } - ], - "status": "PASSED", - "durationInNanos": 206201, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 5862042, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "some step someArg", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "some step someArg" - } - } - ], - "status": "PASSED", - "durationInNanos": 162401, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "some arg step ", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "some arg step " - } - } - ], - "status": "PASSED", - "durationInNanos": 130101, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.tests.LifecycleOrderingTest", + name: "Lifecycle Ordering", + scenarios: [ + { + className: "com.tngtech.jgiven.tests.LifecycleOrderingTest", + testMethodName: "ostensibly_empty_test", + description: "ostensibly empty test", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "an emptySetup", + words: [ + { + value: "given", + isIntroWord: true + }, + { + value: "an emptySetup" + } + ], + status: "PASSED", + durationInNanos: 109400, + depth: 0, + parentFailed: false + }, + { + name: "no action is performed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "no action is performed" + } + ], + status: "PASSED", + durationInNanos: 20700, + depth: 0, + parentFailed: false + }, + { + name: "nothing happens", + words: [ + { + value: "then", + isIntroWord: true + }, + { + value: "nothing happens" + } + ], + status: "PASSED", + durationInNanos: 11900, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 4417131 + } + ], + casesAsTable: false, + durationInNanos: 4417131, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Lifecycle Ordering" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 9048065 - } - ], - "casesAsTable": false, - "durationInNanos": 9048065, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#10", - "description": "Scenarios of Issue #10" - } - ], - "classTitle": "Plain Text Scenario Writer", - "expanded": false, - "$$hashKey": "object:618" + ] }, { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "cases_are_generated_in_text_reports", - "description": "cases are generated in text reports", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 39201, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ default cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "default cases" - } - ], - "status": "PASSED", - "durationInNanos": 227401, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "some step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "some step" - } - }, - { - "value": "with argument" - }, - { - "value": "someArg", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "someArg" - } - } - ], - "status": "PASSED", - "durationInNanos": 152002, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 519504, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "Case 1:", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "Case 1:" - } - } - ], - "status": "PASSED", - "durationInNanos": 145001, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "Case 2:", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "Case 2:" - } - } - ], - "status": "PASSED", - "durationInNanos": 113801, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "When some step someArg", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "When some step someArg" - } - } - ], - "status": "PASSED", - "durationInNanos": 120201, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", + name: "Simple Stage Repetition Use", + scenarios: [ + { + className: "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", + testMethodName: "non_repeatable_methods_are_called_exactly_once", + description: "non repeatable methods are called exactly once", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a simple stage containing before and after methods", + words: [ + { + value: "given", + isIntroWord: true + }, + { + value: "a simple stage containing before and after methods" + } + ], + status: "PASSED", + durationInNanos: 123001, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed", + words: [ + { + value: "when", + isIntroWord: true + }, + { + value: "the test is executed" + } + ], + status: "PASSED", + durationInNanos: 60000, + depth: 0, + parentFailed: false + }, + { + name: "the before stage was called $ times", + words: [ + { + value: "then", + isIntroWord: true + }, + { + value: "the before stage was called" + }, + { + value: "1", + argumentInfo: { + argumentName: "numberOfCalls", + formattedValue: "1" + } + }, + { + value: "times" + } + ], + status: "PASSED", + durationInNanos: 6729049, + depth: 0, + parentFailed: false + }, + { + name: "the after stage method was called $ times", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the after stage method was called" + }, + { + value: "0", + argumentInfo: { + argumentName: "numberOfCalls", + formattedValue: "0" + } + }, + { + value: "times" + } + ], + status: "PASSED", + durationInNanos: 418803, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 9219067 + } + ], + casesAsTable: false, + durationInNanos: 9219067, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Simple Stage Repetition Use" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 1955114 - } - ], - "casesAsTable": false, - "durationInNanos": 1955114, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Plain Text Scenario Writer" + ] }, { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "a_description_column_is_generated_if_cases_have_a_description", - "description": "a description column is generated if cases have a description", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 38700, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ default cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "default cases" - } - ], - "status": "PASSED", - "durationInNanos": 177502, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has description" - }, - { - "value": "some test description", - "argumentInfo": { - "argumentName": "description", - "formattedValue": "some test description" - } - } - ], - "status": "PASSED", - "durationInNanos": 165301, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has description", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has description" - }, - { - "value": "another case", - "argumentInfo": { - "argumentName": "description", - "formattedValue": "another case" - } - } - ], - "status": "PASSED", - "durationInNanos": 146901, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 367002, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n" - } - } - ], - "status": "PASSED", - "durationInNanos": 161201, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + name: "Argument Analyzer", + scenarios: [ + { + className: "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + testMethodName: "multiple_formatted_arguments_lead_to_one_parameter", + description: "multiple formatted arguments lead to one parameter", + tagIds: ["com.tngtech.jgiven.tags.Issue-#163"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "an unanalyzed report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "an unanalyzed report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 268502, + extendedDescription: "A report model where the analysers have not been executed on", + depth: 0, + parentFailed: false + }, + { + name: "parameters", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "parameters" + }, + { + value: "param1", + argumentInfo: { + argumentName: "params", + formattedValue: "param1" + } + } + ], + status: "PASSED", + durationInNanos: 625405, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 249502, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has arguments" + }, + { + value: "foo", + argumentInfo: { + argumentName: "args", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 355003, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some step"' + } + }, + { + value: "with argument" + }, + { + value: "'foo'", + argumentInfo: { + argumentName: "arg", + formattedValue: "\"'foo'\"" + } + }, + { + value: "and argument name" + }, + { + value: "arg1", + argumentInfo: { + argumentName: "argName", + formattedValue: '"arg1"' + } + } + ], + status: "PASSED", + durationInNanos: 4366532, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: '"another step"' + } + }, + { + value: "with argument" + }, + { + value: "'foo'", + argumentInfo: { + argumentName: "arg", + formattedValue: "\"'foo'\"" + } + }, + { + value: "and argument name" + }, + { + value: "arg2", + argumentInfo: { + argumentName: "argName", + formattedValue: '"arg2"' + } + } + ], + status: "PASSED", + durationInNanos: 492903, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has arguments" + }, + { + value: "bar", + argumentInfo: { + argumentName: "args", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 266102, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some step"' + } + }, + { + value: "with argument" + }, + { + value: "'bar'", + argumentInfo: { + argumentName: "arg", + formattedValue: "\"'bar'\"" + } + }, + { + value: "and argument name" + }, + { + value: "arg1", + argumentInfo: { + argumentName: "argName", + formattedValue: '"arg1"' + } + } + ], + status: "PASSED", + durationInNanos: 649704, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: '"another step"' + } + }, + { + value: "with argument" + }, + { + value: "'bar'", + argumentInfo: { + argumentName: "arg", + formattedValue: "\"'bar'\"" + } + }, + { + value: "and argument name" + }, + { + value: "arg2", + argumentInfo: { + argumentName: "argName", + formattedValue: '"arg2"' + } + } + ], + status: "PASSED", + durationInNanos: 417703, + depth: 0, + parentFailed: false + }, + { + name: "the argument analyzer is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the argument analyzer is executed" + } + ], + status: "PASSED", + durationInNanos: 247001, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has derived parameters", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the scenario has derived parameters" + }, + { + value: "arg1", + argumentInfo: { + argumentName: "parameters", + formattedValue: "arg1" + } + } + ], + status: "PASSED", + durationInNanos: 2632319, + depth: 0, + parentFailed: false + }, + { + name: "case $ has derived arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "has derived arguments" + }, + { + value: "'foo'", + argumentInfo: { + argumentName: "arguments", + formattedValue: "'foo'" + } + } + ], + status: "PASSED", + durationInNanos: 460503, + depth: 0, + parentFailed: false + }, + { + name: "case $ has derived arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "has derived arguments" + }, + { + value: "'bar'", + argumentInfo: { + argumentName: "arguments", + formattedValue: "'bar'" + } + } + ], + status: "PASSED", + durationInNanos: 399103, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 12902992 + } + ], + casesAsTable: false, + durationInNanos: 12902992, + executionStatus: "SUCCESS", + tags: [ + { + value: "#163", + description: "Scenarios of Issue #163" + } + ], + classTitle: "Argument Analyzer" + }, + { + className: "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + testMethodName: "different_structure_prevent_data_table", + description: "different structure prevent data table", + tagIds: ["com.tngtech.jgiven.tags.Issue-#163"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "an unanalyzed report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "an unanalyzed report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 52500, + extendedDescription: "A report model where the analysers have not been executed on", + depth: 0, + parentFailed: false + }, + { + name: "parameters", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "parameters" + }, + { + value: "param1", + argumentInfo: { + argumentName: "params", + formattedValue: "param1" + } + } + ], + status: "PASSED", + durationInNanos: 245602, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 208602, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has arguments" + }, + { + value: "foo", + argumentInfo: { + argumentName: "args", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 234302, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has a step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + }, + { + value: "with argument" + }, + { + value: "foo", + argumentInfo: { + argumentName: "arg", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 325303, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has a step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: "another step" + } + }, + { + value: "with argument" + }, + { + value: "foo", + argumentInfo: { + argumentName: "arg", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 289102, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has arguments" + }, + { + value: "bar", + argumentInfo: { + argumentName: "args", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 278702, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "has a step" + }, + { + value: "some step different to the case before", + argumentInfo: { + argumentName: "name", + formattedValue: "some step different to the case before" + } + }, + { + value: "with argument" + }, + { + value: "bar", + argumentInfo: { + argumentName: "arg", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 255802, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "has a step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: "another step" + } + }, + { + value: "with argument" + }, + { + value: "bar", + argumentInfo: { + argumentName: "arg", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 344803, + depth: 0, + parentFailed: false + }, + { + name: "the argument analyzer is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the argument analyzer is executed" + } + ], + status: "PASSED", + durationInNanos: 41501, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has no derived parameters", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the scenario has no derived parameters" + } + ], + status: "PASSED", + durationInNanos: 66501, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 2952121 + } + ], + casesAsTable: false, + durationInNanos: 2952121, + executionStatus: "SUCCESS", + tags: [ + { + value: "#163", + description: "Scenarios of Issue #163" + } + ], + classTitle: "Argument Analyzer" + }, + { + className: "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + testMethodName: "multiple_parameter_usages_lead_to_one_parameter", + description: "multiple parameter usages lead to one parameter", + tagIds: ["com.tngtech.jgiven.tags.Issue-#32"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "an unanalyzed report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "an unanalyzed report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 70401, + extendedDescription: "A report model where the analysers have not been executed on", + depth: 0, + parentFailed: false + }, + { + name: "parameters", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "parameters" + }, + { + value: "param1", + argumentInfo: { + argumentName: "params", + formattedValue: "param1" + } + } + ], + status: "PASSED", + durationInNanos: 366203, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 298802, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has arguments" + }, + { + value: "foo", + argumentInfo: { + argumentName: "args", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 419103, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has a step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + }, + { + value: "with argument" + }, + { + value: "foo", + argumentInfo: { + argumentName: "arg", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 395103, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has a step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: "another step" + } + }, + { + value: "with argument" + }, + { + value: "foo", + argumentInfo: { + argumentName: "arg", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 302002, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has arguments" + }, + { + value: "bar", + argumentInfo: { + argumentName: "args", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 338002, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "has a step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + }, + { + value: "with argument" + }, + { + value: "bar", + argumentInfo: { + argumentName: "arg", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 292602, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + } + }, + { + value: "has a step" + }, + { + value: "another step", + argumentInfo: { + argumentName: "name", + formattedValue: "another step" + } + }, + { + value: "with argument" + }, + { + value: "bar", + argumentInfo: { + argumentName: "arg", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 237702, + depth: 0, + parentFailed: false + }, + { + name: "the argument analyzer is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the argument analyzer is executed" + } + ], + status: "PASSED", + durationInNanos: 129901, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has derived parameters", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the scenario has derived parameters" + }, + { + value: "param1", + argumentInfo: { + argumentName: "parameters", + formattedValue: "param1" + } + } + ], + status: "PASSED", + durationInNanos: 239802, + depth: 0, + parentFailed: false + }, + { + name: "case $ has derived arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + }, + { + value: "has derived arguments" + }, + { + value: "foo", + argumentInfo: { + argumentName: "arguments", + formattedValue: "foo" + } + } + ], + status: "PASSED", + durationInNanos: 250302, + depth: 0, + parentFailed: false + }, + { + name: "case $ has derived arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "2" + } + }, + { + value: "has derived arguments" + }, + { + value: "bar", + argumentInfo: { + argumentName: "arguments", + formattedValue: "bar" + } + } + ], + status: "PASSED", + durationInNanos: 266302, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 4819435 + } + ], + casesAsTable: false, + durationInNanos: 4819435, + executionStatus: "SUCCESS", + tags: [ + { + value: "#32", + description: "Scenarios of Issue #32" + } + ], + classTitle: "Argument Analyzer" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 1918714 - } - ], - "casesAsTable": false, - "durationInNanos": 1918714, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {} - ], - "classTitle": "Plain Text Scenario Writer", - "expanded": false, - "$$hashKey": "object:617" + ] }, { - "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - "testMethodName": "parameters_with_equal_values_but_different_formatting_result_in_different_placeholders", - "description": "parameters with equal values but different formatting result in different placeholders", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables", - "com.tngtech.jgiven.tags.Issue-#104" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model with one scenario", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model with one scenario" - } - ], - "status": "PASSED", - "durationInNanos": 49000, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has $ cases", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the scenario has" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncases", - "formattedValue": "2" - } - }, - { - "value": "cases" - } - ], - "status": "PASSED", - "durationInNanos": 194301, - "depth": 0, - "parentFailed": false - }, - { - "name": "parameters", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "parameters" - }, - { - "value": "aParam, anotherParam", - "argumentInfo": { - "argumentName": "params", - "formattedValue": "aParam, anotherParam" - } - } - ], - "status": "PASSED", - "durationInNanos": 220302, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "given", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has arguments" - }, - { - "value": "false, false", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "false, false" - } - } - ], - "status": "PASSED", - "durationInNanos": 172601, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "false", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"false\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "anArg", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"anArg\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 304402, - "depth": 0, - "parentFailed": false - }, - { - "name": "formatted value", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "formatted value" - }, - { - "value": "off", - "argumentInfo": { - "argumentName": "formattedValue", - "formattedValue": "\"off\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 193001, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "1" - } - }, - { - "value": "has a when step" - }, - { - "value": "another arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"another arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "false", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"false\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "anotherArg", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"anotherArg\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 288402, - "depth": 0, - "parentFailed": false - }, - { - "name": "formatted value", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "formatted value" - }, - { - "value": "is not", - "argumentInfo": { - "argumentName": "formattedValue", - "formattedValue": "\"is not\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 165201, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has arguments", - "words": [ - { - "value": "given", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has arguments" - }, - { - "value": "true, true", - "argumentInfo": { - "argumentName": "args", - "formattedValue": "true, true" - } - } - ], - "status": "PASSED", - "durationInNanos": 192601, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "some arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"some arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"true\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "anArg", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"anArg\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 283102, - "depth": 0, - "parentFailed": false - }, - { - "name": "formatted value", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "formatted value" - }, - { - "value": "on", - "argumentInfo": { - "argumentName": "formattedValue", - "formattedValue": "\"on\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 188502, - "depth": 0, - "parentFailed": false - }, - { - "name": "case $ has a when step $ with argument $ and argument name $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "case" - }, - { - "value": "2", - "argumentInfo": { - "argumentName": "ncase", - "formattedValue": "2" - } - }, - { - "value": "has a when step" - }, - { - "value": "another arg step", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"another arg step\"" - } - }, - { - "value": "with argument" - }, - { - "value": "true", - "argumentInfo": { - "argumentName": "arg", - "formattedValue": "\"true\"" - } - }, - { - "value": "and argument name" - }, - { - "value": "anotherArg", - "argumentInfo": { - "argumentName": "argName", - "formattedValue": "\"anotherArg\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 234001, - "depth": 0, - "parentFailed": false - }, - { - "name": "formatted value", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "formatted value" - }, - { - "value": "is", - "argumentInfo": { - "argumentName": "formattedValue", - "formattedValue": "\"is\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 7903256, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text report is generated", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text report is generated" - } - ], - "status": "PASSED", - "durationInNanos": 417403, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "" - } - } - ], - "status": "PASSED", - "durationInNanos": 183401, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "" - } - } - ], - "status": "PASSED", - "durationInNanos": 217201, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains text", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report contains text" - }, - { - "value": "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n", - "argumentInfo": { - "argumentName": "line", - "formattedValue": "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n" - } - } - ], - "status": "PASSED", - "durationInNanos": 114001, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", + name: "De Einfacher Szenario", + scenarios: [ + { + className: "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", + testMethodName: "Szenarien_können_in_deutsch_geschrieben_werden", + description: "Szenarien können in deutsch geschrieben werden", + tagIds: ["com.tngtech.jgiven.tags.FeatureGerman"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "ein deutsches Projekt", + words: [ + { + value: "gegeben", + isIntroWord: true + }, + { + value: "ein deutsches Projekt" + } + ], + status: "PASSED", + durationInNanos: 157101, + depth: 0, + parentFailed: false + }, + { + name: "JGiven verwendet wird", + words: [ + { + value: "wenn", + isIntroWord: true + }, + { + value: "JGiven verwendet wird" + } + ], + status: "PASSED", + durationInNanos: 193101, + depth: 0, + parentFailed: false + }, + { + name: "die Szenarien in deutsch geschrieben werden", + words: [ + { + value: "und", + isIntroWord: true + }, + { + value: "die Szenarien in deutsch geschrieben werden" + } + ], + status: "PASSED", + durationInNanos: 43301, + depth: 0, + parentFailed: false + }, + { + name: "generiert JGiven deutsche Berichte", + words: [ + { + value: "dann", + isIntroWord: true + }, + { + value: "generiert JGiven deutsche Berichte" + } + ], + status: "PASSED", + durationInNanos: 808805, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 4559333 + } + ], + casesAsTable: false, + durationInNanos: 4559333, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "De Einfacher Szenario", + expanded: false, + $$hashKey: "object:602" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 19413739 - } - ], - "casesAsTable": false, - "durationInNanos": 19413739, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {}, - { - "value": "#104", - "description": "Scenarios of Issue #104" - } - ], - "classTitle": "Plain Text Scenario Writer", - "expanded": false, - "$$hashKey": "object:622" - } - ] - }, - { - "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", - "name": "Scenario Executor", - "scenarios": [ + ] + }, { - "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", - "testMethodName": "step_methods_can_have_primitive_arrays_as_parameters", - "description": "step methods can have primitive arrays as parameters", - "tagIds": [ - "com.tngtech.jgiven.tags.Issue-#1", - "com.tngtech.jgiven.tags.FeatureStepParameters" - ], - "explicitParameters": [ - "type", - "array" - ], - "derivedParameters": [ - "type", - "array" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a step method with a primitive $ array $ as parameter", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a step method with a primitive", - "$$hashKey": "object:1282" - }, - { - "value": "byte", - "argumentInfo": { - "parameterName": "type", - "argumentName": "type", - "formattedValue": "byte" - }, - "$$hashKey": "object:1283" - }, - { - "value": "array", - "$$hashKey": "object:1284" - }, - { - "value": "1, 2, 3", - "argumentInfo": { - "parameterName": "array", - "argumentName": "array", - "formattedValue": "1, 2, 3" - }, - "$$hashKey": "object:1285" - }, - { - "value": "as parameter", - "$$hashKey": "object:1286" - } - ], - "status": "PASSED", - "durationInNanos": 1192009, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:1155" - }, - { - "name": "the scenario is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the scenario is executed", - "$$hashKey": "object:1305" - } - ], - "status": "PASSED", - "durationInNanos": 70301, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:1156" - }, - { - "name": "no exception is thrown", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "no exception is thrown", - "$$hashKey": "object:1316" - } - ], - "status": "PASSED", - "durationInNanos": 281602, - "depth": 0, - "parentFailed": false, - "$$hashKey": "object:1157" + className: "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", + name: "Test With Exceptions In After Method", + scenarios: [ + { + className: "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", + testMethodName: "test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + description: "test that exception in scenario is not hidden by exception in JUnit after method", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "nothing", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "nothing" + } + ], + status: "PASSED", + durationInNanos: 105601, + depth: 0, + parentFailed: false + }, + { + name: "a step fails", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "a step fails" + } + ], + status: "FAILED", + durationInNanos: 538304, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "FAILED", + errorMessage: "java.lang.AssertionError: assertion failed in test step", + stackTrace: [ + "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", + "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod.test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(TestWithExceptionsInAfterMethod.java:22)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", + "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", + "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", + "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", + "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", + "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", + "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(JUnit5ExecutorTest.java:43)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", + "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", + "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", + "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", + "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", + "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", + "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", + "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", + "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", + "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", + "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", + "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", + "org.junit.rules.RunRules.evaluate(RunRules.java:20)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", + "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", + "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", + "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", + "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", + "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" + ], + durationInNanos: 5174537 + } + ], + casesAsTable: false, + durationInNanos: 5174537, + executionStatus: "FAILED", + tags: [], + classTitle: "Test With Exceptions In After Method" } - ], - "explicitArguments": [ - "byte", - "1, 2, 3" - ], - "derivedArguments": [ - "byte", - "1, 2, 3" - ], - "status": "SUCCESS", - "durationInNanos": 45356626, - "$$hashKey": "object:1152" - }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "char", - "a, b, c" - ], - "derivedArguments": [ - "char", - "a, b, c" - ], - "status": "SUCCESS", - "durationInNanos": 2016415, - "$$hashKey": "object:1267" - }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "short", - "1, 2, 3" - ], - "derivedArguments": [ - "short", - "1, 2, 3" - ], - "status": "SUCCESS", - "durationInNanos": 1923614, - "$$hashKey": "object:1268" - }, - { - "caseNr": 4, - "steps": [], - "explicitArguments": [ - "int", - "1, 2, 3" - ], - "derivedArguments": [ - "int", - "1, 2, 3" - ], - "status": "SUCCESS", - "durationInNanos": 1477311, - "$$hashKey": "object:1269" - }, - { - "caseNr": 5, - "steps": [], - "explicitArguments": [ - "long", - "1, 2, 3" - ], - "derivedArguments": [ - "long", - "1, 2, 3" - ], - "status": "SUCCESS", - "durationInNanos": 2269416, - "$$hashKey": "object:1270" - }, - { - "caseNr": 6, - "steps": [], - "explicitArguments": [ - "double", - "1.0, 2.0, 3.0" - ], - "derivedArguments": [ - "double", - "1.0, 2.0, 3.0" - ], - "status": "SUCCESS", - "durationInNanos": 2017714, - "$$hashKey": "object:1271" - }, - { - "caseNr": 7, - "steps": [], - "explicitArguments": [ - "float", - "1.0, 2.0, 3.0" - ], - "derivedArguments": [ - "float", - "1.0, 2.0, 3.0" - ], - "status": "SUCCESS", - "durationInNanos": 1714512, - "$$hashKey": "object:1272" - }, - { - "caseNr": 8, - "steps": [], - "explicitArguments": [ - "boolean", - "true, false" - ], - "derivedArguments": [ - "boolean", - "true, false" - ], - "status": "SUCCESS", - "durationInNanos": 1732412, - "$$hashKey": "object:1273" - } - ], - "casesAsTable": true, - "durationInNanos": 58508020, - "executionStatus": "SUCCESS", - "tags": [ - { - "value": "#1", - "description": "Scenarios of Issue #1" - }, - {} - ], - "classTitle": "Scenario Executor", - "expanded": true, - "$$hashKey": "object:624" + ] }, { - "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", - "testMethodName": "methods_called_during_stage_construction_are_ignored_in_the_report", - "description": "methods called during stage construction are ignored in the report", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "some stage with method called during construction", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "some stage with method called during construction" - } - ], - "status": "PASSED", - "durationInNanos": 70601, - "depth": 0, - "parentFailed": false - }, - { - "name": "the method does not appear in the report", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the method does not appear in the report" - } - ], - "status": "PASSED", - "durationInNanos": 444003, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", + name: "Parallelization Error Prevention", + scenarios: [ + { + className: "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", + testMethodName: "attempting_to_run_testNG_in_parallel_with_injected_stages_is_prevented", + description: "attempting to run testNG in parallel with injected stages is prevented", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#829" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a testNG class with parallel tests and injected stages", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a testNG class with parallel tests and injected stages" + } + ], + status: "PASSED", + durationInNanos: 1732913, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed with TestNG", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed with TestNG" + } + ], + status: "PASSED", + durationInNanos: 51989872, + depth: 0, + parentFailed: false + }, + { + name: "the test fails with message", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the test fails with message" + }, + { + value: "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information.", + argumentInfo: { + argumentName: "expectedMessage", + formattedValue: "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information." + } + } + ], + status: "PASSED", + durationInNanos: 323302, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 55119094 + } + ], + casesAsTable: false, + durationInNanos: 55119094, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "#829", + description: "Scenarios of Issue #829" + } + ], + classTitle: "Parallelization Error Prevention", + expanded: false, + $$hashKey: "object:148" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 891706 - } - ], - "casesAsTable": false, - "durationInNanos": 891706, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Scenario Executor" - } - ] - }, - { - "className": "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", - "name": "Es Simple Escenario", - "scenarios": [ + ] + }, + { + className: "com.tngtech.jgiven.testng.DataProviderTestNgTest", + name: "Data Provider Test Ng", + scenarios: [ + { + className: "com.tngtech.jgiven.testng.DataProviderTestNgTest", + testMethodName: "a_scenario_with_one_failing_case_still_executes_the_following_ones", + description: "a scenario with one failing case still executes the following ones", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#123" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a TestNG test with two cases and the first one fails", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a TestNG test with two cases and the first one fails", + $$hashKey: "object:444" + } + ], + status: "PASSED", + durationInNanos: 483504, + depth: 0, + parentFailed: false, + $$hashKey: "object:407" + }, + { + name: "the test class is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with", + $$hashKey: "object:449" + }, + { + value: "TestNG", + argumentInfo: { + argumentName: "framework", + formattedValue: "TestNG" + }, + $$hashKey: "object:450" + } + ], + status: "PASSED", + durationInNanos: 68705692, + depth: 0, + parentFailed: false, + $$hashKey: "object:408" + }, + { + name: "$ tests fail", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "1", + argumentInfo: { + argumentName: "nFailedTests", + formattedValue: "1" + }, + $$hashKey: "object:456" + }, + { + value: "tests fail", + $$hashKey: "object:457" + } + ], + status: "PASSED", + durationInNanos: 905906, + depth: 0, + parentFailed: false, + $$hashKey: "object:409" + }, + { + name: "the report model contains one scenario with $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report model contains one scenario with", + $$hashKey: "object:463" + }, + { + value: "2", + argumentInfo: { + argumentName: "nCases", + formattedValue: "2" + }, + $$hashKey: "object:464" + }, + { + value: "cases", + $$hashKey: "object:465" + } + ], + status: "PASSED", + durationInNanos: 257701, + depth: 0, + parentFailed: false, + $$hashKey: "object:410" + }, + { + name: "the scenario has execution status", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has execution status", + $$hashKey: "object:473" + }, + { + value: "FAILED", + argumentInfo: { + argumentName: "status", + formattedValue: "FAILED" + }, + $$hashKey: "object:474" + } + ], + status: "PASSED", + durationInNanos: 120001, + depth: 0, + parentFailed: false, + $$hashKey: "object:411" + }, + { + name: "case $ has status", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case", + $$hashKey: "object:480" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + }, + $$hashKey: "object:481" + }, + { + value: "has status", + $$hashKey: "object:482" + }, + { + value: "FAILED", + argumentInfo: { + argumentName: "status", + formattedValue: "FAILED" + }, + $$hashKey: "object:483" + } + ], + status: "PASSED", + durationInNanos: 192701, + depth: 0, + parentFailed: false, + $$hashKey: "object:412" + }, + { + name: "case $ has status", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case", + $$hashKey: "object:493" + }, + { + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" + }, + $$hashKey: "object:494" + }, + { + value: "has status", + $$hashKey: "object:495" + }, + { + value: "SUCCESS", + argumentInfo: { + argumentName: "status", + formattedValue: "SUCCESS" + }, + $$hashKey: "object:496" + } + ], + status: "PASSED", + durationInNanos: 212502, + depth: 0, + parentFailed: false, + $$hashKey: "object:413" + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 72215616, + $$hashKey: "object:404" + } + ], + casesAsTable: false, + durationInNanos: 72215616, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "#123", + description: "Scenarios of Issue #123" + } + ], + classTitle: "Data Provider Test Ng", + expanded: false, + $$hashKey: "object:146" + } + ] + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + name: "Plain Text Scenario Writer", + scenarios: [ + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "data_tables_are_generated_correctly_in_text_reports", + description: "data tables are generated correctly in text reports", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#34" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 71801, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ default cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "3", + argumentInfo: { + argumentName: "ncases", + formattedValue: "3" + } + }, + { + value: "default cases" + } + ], + status: "PASSED", + durationInNanos: 264302, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "43", + argumentInfo: { + argumentName: "arg", + formattedValue: '"43"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg1", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg1"' + } + } + ], + status: "PASSED", + durationInNanos: 332403, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "another arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"another arg step"' + } + }, + { + value: "with argument" + }, + { + value: "arg11", + argumentInfo: { + argumentName: "arg", + formattedValue: '"arg11"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg2", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg2"' + } + } + ], + status: "PASSED", + durationInNanos: 271302, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "4", + argumentInfo: { + argumentName: "arg", + formattedValue: '"4"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg1", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg1"' + } + } + ], + status: "PASSED", + durationInNanos: 261702, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "another arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"another arg step"' + } + }, + { + value: "with argument" + }, + { + value: "arg21", + argumentInfo: { + argumentName: "arg", + formattedValue: '"arg21"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg2", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg2"' + } + } + ], + status: "PASSED", + durationInNanos: 256502, + depth: 0, + parentFailed: false + }, + { + name: "case $ fails with error message", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "fails with error message" + }, + { + value: "Some Error", + argumentInfo: { + argumentName: "errorMessage", + formattedValue: "Some Error" + } + } + ], + status: "PASSED", + durationInNanos: 218602, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "3", + argumentInfo: { + argumentName: "ncase", + formattedValue: "3" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "1234567", + argumentInfo: { + argumentName: "arg", + formattedValue: '"1234567"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg1", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg1"' + } + } + ], + status: "PASSED", + durationInNanos: 267002, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "3", + argumentInfo: { + argumentName: "ncase", + formattedValue: "3" + } + }, + { + value: "has a when step" + }, + { + value: "another arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"another arg step"' + } + }, + { + value: "with argument" + }, + { + value: "arg31", + argumentInfo: { + argumentName: "arg", + formattedValue: '"arg31"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg2", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg2"' + } + } + ], + status: "PASSED", + durationInNanos: 245302, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 12775591, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "", + argumentInfo: { + argumentName: "line", + formattedValue: "" + } + } + ], + status: "PASSED", + durationInNanos: 400403, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "", + argumentInfo: { + argumentName: "line", + formattedValue: "" + } + } + ], + status: "PASSED", + durationInNanos: 157202, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n", + argumentInfo: { + argumentName: "line", + formattedValue: "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n" + } + } + ], + status: "PASSED", + durationInNanos: 122501, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 17576626 + } + ], + casesAsTable: false, + durationInNanos: 17576626, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#34", + description: "Scenarios of Issue #34" + } + ], + classTitle: "Plain Text Scenario Writer", + expanded: false, + $$hashKey: "object:619" + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "new_lines_in_data_tables_do_not_break_the_table_layout", + description: "new lines in data tables do not break the table layout", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#152" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 44401, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ default cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "default cases" + } + ], + status: "PASSED", + durationInNanos: 186101, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "1\n2", + argumentInfo: { + argumentName: "arg", + formattedValue: '"1\n2"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg1", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg1"' + } + } + ], + status: "PASSED", + durationInNanos: 431703, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "4", + argumentInfo: { + argumentName: "arg", + formattedValue: '"4"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg1", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg1"' + } + } + ], + status: "PASSED", + durationInNanos: 581705, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 8388660, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "", + argumentInfo: { + argumentName: "line", + formattedValue: "" + } + } + ], + status: "PASSED", + durationInNanos: 176901, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n", + argumentInfo: { + argumentName: "line", + formattedValue: "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n" + } + } + ], + status: "PASSED", + durationInNanos: 159601, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 11461882 + } + ], + casesAsTable: false, + durationInNanos: 11461882, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#152", + description: "Scenarios of Issue #152" + } + ], + classTitle: "Plain Text Scenario Writer", + expanded: false, + $$hashKey: "object:621" + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "data_tables_are_generated_for_empty_strings", + description: "data tables are generated for empty strings", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 45101, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ default cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "default cases" + } + ], + status: "PASSED", + durationInNanos: 199201, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "non empty string", + argumentInfo: { + argumentName: "arg", + formattedValue: '"non empty string"' + } + }, + { + value: "and argument name" + }, + { + value: "arg", + argumentInfo: { + argumentName: "argName", + formattedValue: '"arg"' + } + } + ], + status: "PASSED", + durationInNanos: 300903, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "", + argumentInfo: { + argumentName: "arg", + formattedValue: '""' + } + }, + { + value: "and argument name" + }, + { + value: "arg", + argumentInfo: { + argumentName: "argName", + formattedValue: '"arg"' + } + } + ], + status: "PASSED", + durationInNanos: 261002, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 399503, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "", + argumentInfo: { + argumentName: "line", + formattedValue: "" + } + } + ], + status: "PASSED", + durationInNanos: 141801, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n", + argumentInfo: { + argumentName: "line", + formattedValue: "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n" + } + } + ], + status: "PASSED", + durationInNanos: 115001, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 2541418 + } + ], + casesAsTable: false, + durationInNanos: 2541418, + executionStatus: "SUCCESS", + tags: [{}, {}], + classTitle: "Plain Text Scenario Writer", + expanded: false, + $$hashKey: "object:620" + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "ignored_steps_marked_in_text_reports", + description: "ignored steps marked in text reports", + tagIds: ["com.tngtech.jgiven.tags.FeatureTextReport"], + explicitParameters: ["status", "expectedText"], + derivedParameters: ["status", "expectedText"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 47800, + depth: 0, + parentFailed: false + }, + { + name: "step $ is named", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "is named" + }, + { + value: "something happens", + argumentInfo: { + argumentName: "name", + formattedValue: "something happens" + } + } + ], + status: "PASSED", + durationInNanos: 240202, + depth: 0, + parentFailed: false + }, + { + name: "step $ has status", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "has status" + }, + { + value: "PASSED", + argumentInfo: { + parameterName: "status", + argumentName: "status", + formattedValue: "PASSED" + } + } + ], + status: "PASSED", + durationInNanos: 187901, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 231501, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "something happens", + argumentInfo: { + parameterName: "expectedText", + argumentName: "line", + formattedValue: "something happens" + } + } + ], + status: "PASSED", + durationInNanos: 152501, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["PASSED", "something happens"], + derivedArguments: ["PASSED", "something happens"], + status: "SUCCESS", + durationInNanos: 1978214 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["FAILED", "something happens (failed)"], + derivedArguments: ["FAILED", "something happens (failed)"], + status: "SUCCESS", + durationInNanos: 10393174 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["SKIPPED", "something happens (skipped)"], + derivedArguments: ["SKIPPED", "something happens (skipped)"], + status: "SUCCESS", + durationInNanos: 2467018 + }, + { + caseNr: 4, + steps: [], + explicitArguments: ["PENDING", "something happens (pending)"], + derivedArguments: ["PENDING", "something happens (pending)"], + status: "SUCCESS", + durationInNanos: 12376589 + } + ], + casesAsTable: true, + durationInNanos: 27214995, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Plain Text Scenario Writer" + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "table_annotations_at_parameters_lead_to_data_tables_in_the_report", + description: "table annotations at parameters lead to data tables in the report", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.Issue-#52", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + explicitParameters: ["headerType", "hasHeaderLine"], + derivedParameters: ["headerType", "line"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 78601, + depth: 0, + parentFailed: false + }, + { + name: "a step has a data table with following values", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a step has a data table with following values" + }, + { + value: "[[foo, bar], [1, a], [2, b]]", + argumentInfo: { + argumentName: "dataTable", + dataTable: { + headerType: "HORIZONTAL", + data: [ + ["foo", "bar"], + ["1", "a"], + ["2", "b"] + ] + } + } + } + ], + status: "PASSED", + durationInNanos: 26546090, + depth: 0, + parentFailed: false + }, + { + name: "header type set to", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "header type set to" + }, + { + value: "VERTICAL", + argumentInfo: { + parameterName: "headerType", + argumentName: "headerType", + formattedValue: "VERTICAL" + } + } + ], + status: "PASSED", + durationInNanos: 211101, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 465404, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n", + argumentInfo: { + parameterName: "line", + argumentName: "line", + formattedValue: "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + } + } + ], + status: "PASSED", + durationInNanos: 227502, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["VERTICAL", "false"], + derivedArguments: [ + "VERTICAL", + "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + ], + status: "SUCCESS", + durationInNanos: 28951607 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["HORIZONTAL", "true"], + derivedArguments: [ + "HORIZONTAL", + "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" + ], + status: "SUCCESS", + durationInNanos: 1995914 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["NONE", "false"], + derivedArguments: [ + "NONE", + "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + ], + status: "SUCCESS", + durationInNanos: 1839113 + }, + { + caseNr: 4, + steps: [], + explicitArguments: ["BOTH", "true"], + derivedArguments: [ + "BOTH", + "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" + ], + status: "SUCCESS", + durationInNanos: 1593212 + } + ], + casesAsTable: true, + durationInNanos: 34379846, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "#52", + description: "Scenarios of Issue #52" + }, + {} + ], + classTitle: "Plain Text Scenario Writer", + expanded: false, + $$hashKey: "object:623" + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "arguments_are_correctly_printed_in_text_reports_for_data_tables", + description: "arguments are correctly printed in text reports for data tables", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#10" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 37100, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has parameters", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has parameters" + }, + { + value: "param1", + argumentInfo: { + argumentName: "params", + formattedValue: "param1" + } + } + ], + status: "PASSED", + durationInNanos: 297702, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ default cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "default cases" + } + ], + status: "PASSED", + durationInNanos: 179602, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has arguments" + }, + { + value: "arg10", + argumentInfo: { + argumentName: "args", + formattedValue: "arg10" + } + } + ], + status: "PASSED", + durationInNanos: 147301, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "arg10", + argumentInfo: { + argumentName: "arg", + formattedValue: '"arg10"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg"' + } + } + ], + status: "PASSED", + durationInNanos: 312002, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has arguments" + }, + { + value: "arg20", + argumentInfo: { + argumentName: "args", + formattedValue: "arg20" + } + } + ], + status: "PASSED", + durationInNanos: 283702, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "arg20", + argumentInfo: { + argumentName: "arg", + formattedValue: '"arg20"' + } + }, + { + value: "and argument name" + }, + { + value: "aArg", + argumentInfo: { + argumentName: "argName", + formattedValue: '"aArg"' + } + } + ], + status: "PASSED", + durationInNanos: 334102, + depth: 0, + parentFailed: false + }, + { + name: "all cases have a step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "all cases have a step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + }, + { + value: "with argument" + }, + { + value: "someArg", + argumentInfo: { + argumentName: "arg", + formattedValue: "someArg" + } + } + ], + status: "PASSED", + durationInNanos: 206201, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 5862042, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "some step someArg", + argumentInfo: { + argumentName: "line", + formattedValue: "some step someArg" + } + } + ], + status: "PASSED", + durationInNanos: 162401, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "some arg step ", + argumentInfo: { + argumentName: "line", + formattedValue: "some arg step " + } + } + ], + status: "PASSED", + durationInNanos: 130101, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 9048065 + } + ], + casesAsTable: false, + durationInNanos: 9048065, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#10", + description: "Scenarios of Issue #10" + } + ], + classTitle: "Plain Text Scenario Writer", + expanded: false, + $$hashKey: "object:618" + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "cases_are_generated_in_text_reports", + description: "cases are generated in text reports", + tagIds: ["com.tngtech.jgiven.tags.FeatureTextReport"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 39201, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ default cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "default cases" + } + ], + status: "PASSED", + durationInNanos: 227401, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "some step", + argumentInfo: { + argumentName: "name", + formattedValue: "some step" + } + }, + { + value: "with argument" + }, + { + value: "someArg", + argumentInfo: { + argumentName: "arg", + formattedValue: "someArg" + } + } + ], + status: "PASSED", + durationInNanos: 152002, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 519504, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "Case 1:", + argumentInfo: { + argumentName: "line", + formattedValue: "Case 1:" + } + } + ], + status: "PASSED", + durationInNanos: 145001, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "Case 2:", + argumentInfo: { + argumentName: "line", + formattedValue: "Case 2:" + } + } + ], + status: "PASSED", + durationInNanos: 113801, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "When some step someArg", + argumentInfo: { + argumentName: "line", + formattedValue: "When some step someArg" + } + } + ], + status: "PASSED", + durationInNanos: 120201, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 1955114 + } + ], + casesAsTable: false, + durationInNanos: 1955114, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Plain Text Scenario Writer" + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "a_description_column_is_generated_if_cases_have_a_description", + description: "a description column is generated if cases have a description", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 38700, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ default cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "default cases" + } + ], + status: "PASSED", + durationInNanos: 177502, + depth: 0, + parentFailed: false + }, + { + name: "case $ has description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has description" + }, + { + value: "some test description", + argumentInfo: { + argumentName: "description", + formattedValue: "some test description" + } + } + ], + status: "PASSED", + durationInNanos: 165301, + depth: 0, + parentFailed: false + }, + { + name: "case $ has description", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has description" + }, + { + value: "another case", + argumentInfo: { + argumentName: "description", + formattedValue: "another case" + } + } + ], + status: "PASSED", + durationInNanos: 146901, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 367002, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n", + argumentInfo: { + argumentName: "line", + formattedValue: "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n" + } + } + ], + status: "PASSED", + durationInNanos: 161201, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 1918714 + } + ], + casesAsTable: false, + durationInNanos: 1918714, + executionStatus: "SUCCESS", + tags: [{}, {}], + classTitle: "Plain Text Scenario Writer", + expanded: false, + $$hashKey: "object:617" + }, + { + className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + testMethodName: "parameters_with_equal_values_but_different_formatting_result_in_different_placeholders", + description: "parameters with equal values but different formatting result in different placeholders", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#104" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model with one scenario", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model with one scenario" + } + ], + status: "PASSED", + durationInNanos: 49000, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has $ cases", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the scenario has" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncases", + formattedValue: "2" + } + }, + { + value: "cases" + } + ], + status: "PASSED", + durationInNanos: 194301, + depth: 0, + parentFailed: false + }, + { + name: "parameters", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "parameters" + }, + { + value: "aParam, anotherParam", + argumentInfo: { + argumentName: "params", + formattedValue: "aParam, anotherParam" + } + } + ], + status: "PASSED", + durationInNanos: 220302, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "given", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has arguments" + }, + { + value: "false, false", + argumentInfo: { + argumentName: "args", + formattedValue: "false, false" + } + } + ], + status: "PASSED", + durationInNanos: 172601, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "false", + argumentInfo: { + argumentName: "arg", + formattedValue: '"false"' + } + }, + { + value: "and argument name" + }, + { + value: "anArg", + argumentInfo: { + argumentName: "argName", + formattedValue: '"anArg"' + } + } + ], + status: "PASSED", + durationInNanos: 304402, + depth: 0, + parentFailed: false + }, + { + name: "formatted value", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "formatted value" + }, + { + value: "off", + argumentInfo: { + argumentName: "formattedValue", + formattedValue: '"off"' + } + } + ], + status: "PASSED", + durationInNanos: 193001, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "1", + argumentInfo: { + argumentName: "ncase", + formattedValue: "1" + } + }, + { + value: "has a when step" + }, + { + value: "another arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"another arg step"' + } + }, + { + value: "with argument" + }, + { + value: "false", + argumentInfo: { + argumentName: "arg", + formattedValue: '"false"' + } + }, + { + value: "and argument name" + }, + { + value: "anotherArg", + argumentInfo: { + argumentName: "argName", + formattedValue: '"anotherArg"' + } + } + ], + status: "PASSED", + durationInNanos: 288402, + depth: 0, + parentFailed: false + }, + { + name: "formatted value", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "formatted value" + }, + { + value: "is not", + argumentInfo: { + argumentName: "formattedValue", + formattedValue: '"is not"' + } + } + ], + status: "PASSED", + durationInNanos: 165201, + depth: 0, + parentFailed: false + }, + { + name: "case $ has arguments", + words: [ + { + value: "given", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has arguments" + }, + { + value: "true, true", + argumentInfo: { + argumentName: "args", + formattedValue: "true, true" + } + } + ], + status: "PASSED", + durationInNanos: 192601, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "some arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"some arg step"' + } + }, + { + value: "with argument" + }, + { + value: "true", + argumentInfo: { + argumentName: "arg", + formattedValue: '"true"' + } + }, + { + value: "and argument name" + }, + { + value: "anArg", + argumentInfo: { + argumentName: "argName", + formattedValue: '"anArg"' + } + } + ], + status: "PASSED", + durationInNanos: 283102, + depth: 0, + parentFailed: false + }, + { + name: "formatted value", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "formatted value" + }, + { + value: "on", + argumentInfo: { + argumentName: "formattedValue", + formattedValue: '"on"' + } + } + ], + status: "PASSED", + durationInNanos: 188502, + depth: 0, + parentFailed: false + }, + { + name: "case $ has a when step $ with argument $ and argument name $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "case" + }, + { + value: "2", + argumentInfo: { + argumentName: "ncase", + formattedValue: "2" + } + }, + { + value: "has a when step" + }, + { + value: "another arg step", + argumentInfo: { + argumentName: "name", + formattedValue: '"another arg step"' + } + }, + { + value: "with argument" + }, + { + value: "true", + argumentInfo: { + argumentName: "arg", + formattedValue: '"true"' + } + }, + { + value: "and argument name" + }, + { + value: "anotherArg", + argumentInfo: { + argumentName: "argName", + formattedValue: '"anotherArg"' + } + } + ], + status: "PASSED", + durationInNanos: 234001, + depth: 0, + parentFailed: false + }, + { + name: "formatted value", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "formatted value" + }, + { + value: "is", + argumentInfo: { + argumentName: "formattedValue", + formattedValue: '"is"' + } + } + ], + status: "PASSED", + durationInNanos: 7903256, + depth: 0, + parentFailed: false + }, + { + name: "the plain text report is generated", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text report is generated" + } + ], + status: "PASSED", + durationInNanos: 417403, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "", + argumentInfo: { + argumentName: "line", + formattedValue: "" + } + } + ], + status: "PASSED", + durationInNanos: 183401, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "", + argumentInfo: { + argumentName: "line", + formattedValue: "" + } + } + ], + status: "PASSED", + durationInNanos: 217201, + depth: 0, + parentFailed: false + }, + { + name: "the report contains text", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report contains text" + }, + { + value: "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n", + argumentInfo: { + argumentName: "line", + formattedValue: "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n" + } + } + ], + status: "PASSED", + durationInNanos: 114001, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 19413739 + } + ], + casesAsTable: false, + durationInNanos: 19413739, + executionStatus: "SUCCESS", + tags: [ + {}, + {}, + { + value: "#104", + description: "Scenarios of Issue #104" + } + ], + classTitle: "Plain Text Scenario Writer", + expanded: false, + $$hashKey: "object:622" + } + ] + }, { - "className": "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", - "testMethodName": "los_escenarios_se_pueden_escribir_en_espannol", - "description": "los escenarios se pueden escribir en espannol", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureSpanish" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "un proyecto en espannol", - "words": [ - { - "value": "dado", - "isIntroWord": true - }, - { - "value": "un proyecto en espannol" - } - ], - "status": "PASSED", - "durationInNanos": 72601, - "depth": 0, - "parentFailed": false - }, - { - "name": "se usa JGiven", - "words": [ - { - "value": "cuando", - "isIntroWord": true - }, - { - "value": "se usa JGiven" - } - ], - "status": "PASSED", - "durationInNanos": 69501, - "depth": 0, - "parentFailed": false - }, - { - "name": "los escenarios se escriben en espannol", - "words": [ - { - "value": "y", - "isIntroWord": true - }, - { - "value": "los escenarios se escriben en espannol" - } - ], - "status": "PASSED", - "durationInNanos": 31200, - "depth": 0, - "parentFailed": false - }, - { - "name": "JGiven genera los informes en espannol", - "words": [ - { - "value": "entonces", - "isIntroWord": true - }, - { - "value": "JGiven genera los informes en espannol" - } - ], - "status": "PASSED", - "durationInNanos": 29500, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.impl.ScenarioExecutorTest", + name: "Scenario Executor", + scenarios: [ + { + className: "com.tngtech.jgiven.impl.ScenarioExecutorTest", + testMethodName: "step_methods_can_have_primitive_arrays_as_parameters", + description: "step methods can have primitive arrays as parameters", + tagIds: [ + "com.tngtech.jgiven.tags.Issue-#1", + "com.tngtech.jgiven.tags.FeatureStepParameters" + ], + explicitParameters: ["type", "array"], + derivedParameters: ["type", "array"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a step method with a primitive $ array $ as parameter", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a step method with a primitive", + $$hashKey: "object:1282" + }, + { + value: "byte", + argumentInfo: { + parameterName: "type", + argumentName: "type", + formattedValue: "byte" + }, + $$hashKey: "object:1283" + }, + { + value: "array", + $$hashKey: "object:1284" + }, + { + value: "1, 2, 3", + argumentInfo: { + parameterName: "array", + argumentName: "array", + formattedValue: "1, 2, 3" + }, + $$hashKey: "object:1285" + }, + { + value: "as parameter", + $$hashKey: "object:1286" + } + ], + status: "PASSED", + durationInNanos: 1192009, + depth: 0, + parentFailed: false, + $$hashKey: "object:1155" + }, + { + name: "the scenario is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the scenario is executed", + $$hashKey: "object:1305" + } + ], + status: "PASSED", + durationInNanos: 70301, + depth: 0, + parentFailed: false, + $$hashKey: "object:1156" + }, + { + name: "no exception is thrown", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "no exception is thrown", + $$hashKey: "object:1316" + } + ], + status: "PASSED", + durationInNanos: 281602, + depth: 0, + parentFailed: false, + $$hashKey: "object:1157" + } + ], + explicitArguments: ["byte", "1, 2, 3"], + derivedArguments: ["byte", "1, 2, 3"], + status: "SUCCESS", + durationInNanos: 45356626, + $$hashKey: "object:1152" + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["char", "a, b, c"], + derivedArguments: ["char", "a, b, c"], + status: "SUCCESS", + durationInNanos: 2016415, + $$hashKey: "object:1267" + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["short", "1, 2, 3"], + derivedArguments: ["short", "1, 2, 3"], + status: "SUCCESS", + durationInNanos: 1923614, + $$hashKey: "object:1268" + }, + { + caseNr: 4, + steps: [], + explicitArguments: ["int", "1, 2, 3"], + derivedArguments: ["int", "1, 2, 3"], + status: "SUCCESS", + durationInNanos: 1477311, + $$hashKey: "object:1269" + }, + { + caseNr: 5, + steps: [], + explicitArguments: ["long", "1, 2, 3"], + derivedArguments: ["long", "1, 2, 3"], + status: "SUCCESS", + durationInNanos: 2269416, + $$hashKey: "object:1270" + }, + { + caseNr: 6, + steps: [], + explicitArguments: ["double", "1.0, 2.0, 3.0"], + derivedArguments: ["double", "1.0, 2.0, 3.0"], + status: "SUCCESS", + durationInNanos: 2017714, + $$hashKey: "object:1271" + }, + { + caseNr: 7, + steps: [], + explicitArguments: ["float", "1.0, 2.0, 3.0"], + derivedArguments: ["float", "1.0, 2.0, 3.0"], + status: "SUCCESS", + durationInNanos: 1714512, + $$hashKey: "object:1272" + }, + { + caseNr: 8, + steps: [], + explicitArguments: ["boolean", "true, false"], + derivedArguments: ["boolean", "true, false"], + status: "SUCCESS", + durationInNanos: 1732412, + $$hashKey: "object:1273" + } + ], + casesAsTable: true, + durationInNanos: 58508020, + executionStatus: "SUCCESS", + tags: [ + { + value: "#1", + description: "Scenarios of Issue #1" + }, + {} + ], + classTitle: "Scenario Executor", + expanded: true, + $$hashKey: "object:624" + }, + { + className: "com.tngtech.jgiven.impl.ScenarioExecutorTest", + testMethodName: "methods_called_during_stage_construction_are_ignored_in_the_report", + description: "methods called during stage construction are ignored in the report", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "some stage with method called during construction", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "some stage with method called during construction" + } + ], + status: "PASSED", + durationInNanos: 70601, + depth: 0, + parentFailed: false + }, + { + name: "the method does not appear in the report", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the method does not appear in the report" + } + ], + status: "PASSED", + durationInNanos: 444003, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 891706 + } + ], + casesAsTable: false, + durationInNanos: 891706, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Scenario Executor" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 1912414 - } - ], - "casesAsTable": false, - "durationInNanos": 1912414, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Es Simple Escenario", - "expanded": false, - "$$hashKey": "object:609" - } - ] - }, - { - "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", - "name": "Guaranteed State", - "scenarios": [ + ] + }, { - "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", - "testMethodName": "assure_before_method_of_second_test_is_executed_after_guaranteed_fields_validation", - "description": "assure before method of second test is executed after guaranteed fields validation", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a Jgiven test with a guaranteed null state", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a Jgiven test with a guaranteed null state" - } - ], - "status": "PASSED", - "durationInNanos": 11396282, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed" - } - ], - "status": "PASSED", - "durationInNanos": 436443939, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains $ exception", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains" - }, - { - "value": "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException", - "argumentInfo": { - "argumentName": "givenException", - "formattedValue": "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException" - } - }, - { - "value": "exception" - } - ], - "status": "PASSED", - "durationInNanos": 225002718, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", + name: "Es Simple Escenario", + scenarios: [ + { + className: "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", + testMethodName: "los_escenarios_se_pueden_escribir_en_espannol", + description: "los escenarios se pueden escribir en espannol", + tagIds: ["com.tngtech.jgiven.tags.FeatureSpanish"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "un proyecto en espannol", + words: [ + { + value: "dado", + isIntroWord: true + }, + { + value: "un proyecto en espannol" + } + ], + status: "PASSED", + durationInNanos: 72601, + depth: 0, + parentFailed: false + }, + { + name: "se usa JGiven", + words: [ + { + value: "cuando", + isIntroWord: true + }, + { + value: "se usa JGiven" + } + ], + status: "PASSED", + durationInNanos: 69501, + depth: 0, + parentFailed: false + }, + { + name: "los escenarios se escriben en espannol", + words: [ + { + value: "y", + isIntroWord: true + }, + { + value: "los escenarios se escriben en espannol" + } + ], + status: "PASSED", + durationInNanos: 31200, + depth: 0, + parentFailed: false + }, + { + name: "JGiven genera los informes en espannol", + words: [ + { + value: "entonces", + isIntroWord: true + }, + { + value: "JGiven genera los informes en espannol" + } + ], + status: "PASSED", + durationInNanos: 29500, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 1912414 + } + ], + casesAsTable: false, + durationInNanos: 1912414, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Es Simple Escenario", + expanded: false, + $$hashKey: "object:609" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 706130579 - } - ], - "casesAsTable": false, - "durationInNanos": 706130579, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Guaranteed State" + ] }, { - "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", - "testMethodName": "assure_before_method_of_second_test_is_executed_if_guaranteed_initialized", - "description": "assure before method of second test is executed if guaranteed initialized", - "tagIds": [], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a Jgiven test with a guaranteed state", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a Jgiven test with a guaranteed state" - } - ], - "status": "PASSED", - "durationInNanos": 145501, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed" - } - ], - "status": "PASSED", - "durationInNanos": 26399390, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report contains $ exception", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the report contains" - }, - { - "value": "class java.lang.ClassNotFoundException", - "argumentInfo": { - "argumentName": "givenException", - "formattedValue": "class java.lang.ClassNotFoundException" - } - }, - { - "value": "exception" - } - ], - "status": "PASSED", - "durationInNanos": 1562611, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.impl.GuaranteedStateTest", + name: "Guaranteed State", + scenarios: [ + { + className: "com.tngtech.jgiven.impl.GuaranteedStateTest", + testMethodName: "assure_before_method_of_second_test_is_executed_after_guaranteed_fields_validation", + description: "assure before method of second test is executed after guaranteed fields validation", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a Jgiven test with a guaranteed null state", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a Jgiven test with a guaranteed null state" + } + ], + status: "PASSED", + durationInNanos: 11396282, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed" + } + ], + status: "PASSED", + durationInNanos: 436443939, + depth: 0, + parentFailed: false + }, + { + name: "the report contains $ exception", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains" + }, + { + value: "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException", + argumentInfo: { + argumentName: "givenException", + formattedValue: "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException" + } + }, + { + value: "exception" + } + ], + status: "PASSED", + durationInNanos: 225002718, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 706130579 + } + ], + casesAsTable: false, + durationInNanos: 706130579, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Guaranteed State" + }, + { + className: "com.tngtech.jgiven.impl.GuaranteedStateTest", + testMethodName: "assure_before_method_of_second_test_is_executed_if_guaranteed_initialized", + description: "assure before method of second test is executed if guaranteed initialized", + tagIds: [], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a Jgiven test with a guaranteed state", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a Jgiven test with a guaranteed state" + } + ], + status: "PASSED", + durationInNanos: 145501, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed" + } + ], + status: "PASSED", + durationInNanos: 26399390, + depth: 0, + parentFailed: false + }, + { + name: "the report contains $ exception", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the report contains" + }, + { + value: "class java.lang.ClassNotFoundException", + argumentInfo: { + argumentName: "givenException", + formattedValue: "class java.lang.ClassNotFoundException" + } + }, + { + value: "exception" + } + ], + status: "PASSED", + durationInNanos: 1562611, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 28556606 + } + ], + casesAsTable: false, + durationInNanos: 28556606, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Guaranteed State" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 28556606 - } - ], - "casesAsTable": false, - "durationInNanos": 28556606, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Guaranteed State" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", - "name": "HTML Report Generator", - "description": "Test that only checks the generated files of the HTML report generator", - "scenarios": [ + ] + }, { - "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", - "testMethodName": "the_HTML_report_generator_creates_a_tags_file", - "description": "the HTML report generator creates a 'tags.js' file", - "extendedDescription": "To reduce duplicated storage of tag data, the HTML reporter generates a 'tags.js' file that contains all tags that appeared in all input files", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureTags-Tags" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 210402, - "depth": 0, - "parentFailed": false - }, - { - "name": "scenario $ has tag $ with value $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "scenario" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" - } - }, - { - "value": "has tag" - }, - { - "value": "TestTag", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "TestTag" - } - }, - { - "value": "with value" - }, - { - "value": "123", - "argumentInfo": { - "argumentName": "value", - "formattedValue": "123" - } - } - ], - "status": "PASSED", - "durationInNanos": 4294631, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 2268516, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 47162538, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file $ exists in folder $", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "a file" - }, - { - "value": "tags.js", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"tags.js\"" - } - }, - { - "value": "exists in folder" - }, - { - "value": "data", - "argumentInfo": { - "argumentName": "folder", - "formattedValue": "\"data\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 530004, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file $ exists in folder $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a file" - }, - { - "value": "metaData.js", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"metaData.js\"" - } - }, - { - "value": "exists in folder" - }, - { - "value": "data", - "argumentInfo": { - "argumentName": "folder", - "formattedValue": "\"data\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 244502, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + name: "HTML Report Generator", + description: "Test that only checks the generated files of the HTML report generator", + scenarios: [ + { + className: "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + testMethodName: "the_HTML_report_generator_creates_a_tags_file", + description: "the HTML report generator creates a 'tags.js' file", + extendedDescription: "To reduce duplicated storage of tag data, the HTML reporter generates a 'tags.js' file that contains all tags that appeared in all input files", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTags-Tags" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 210402, + depth: 0, + parentFailed: false + }, + { + name: "scenario $ has tag $ with value $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "scenario" + }, + { + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" + } + }, + { + value: "has tag" + }, + { + value: "TestTag", + argumentInfo: { + argumentName: "name", + formattedValue: "TestTag" + } + }, + { + value: "with value" + }, + { + value: "123", + argumentInfo: { + argumentName: "value", + formattedValue: "123" + } + } + ], + status: "PASSED", + durationInNanos: 4294631, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 2268516, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 47162538, + depth: 0, + parentFailed: false + }, + { + name: "a file $ exists in folder $", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "a file" + }, + { + value: "tags.js", + argumentInfo: { + argumentName: "name", + formattedValue: '"tags.js"' + } + }, + { + value: "exists in folder" + }, + { + value: "data", + argumentInfo: { + argumentName: "folder", + formattedValue: '"data"' + } + } + ], + status: "PASSED", + durationInNanos: 530004, + depth: 0, + parentFailed: false + }, + { + name: "a file $ exists in folder $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a file" + }, + { + value: "metaData.js", + argumentInfo: { + argumentName: "name", + formattedValue: '"metaData.js"' + } + }, + { + value: "exists in folder" + }, + { + value: "data", + argumentInfo: { + argumentName: "folder", + formattedValue: '"data"' + } + } + ], + status: "PASSED", + durationInNanos: 244502, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 59283824 + } + ], + casesAsTable: false, + durationInNanos: 59283824, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "Tags" + } + ], + classTitle: "HTML Report Generator", + expanded: false, + $$hashKey: "object:616" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + testMethodName: "the_title_of_the_HTML_report_can_be_configured", + description: "the title of the HTML report can be configured", + tagIds: ["com.tngtech.jgiven.tags.FeatureHtml5Report"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 123001, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 1325610, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed with title", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed with title" + }, + { + value: "Test Title", + argumentInfo: { + argumentName: "title", + formattedValue: "Test Title" + } + } + ], + status: "PASSED", + durationInNanos: 45265424, + depth: 0, + parentFailed: false + }, + { + name: "the metaData file has title set to", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the metaData file has title set to" + }, + { + value: "Test Title", + argumentInfo: { + argumentName: "title", + formattedValue: "Test Title" + } + } + ], + status: "PASSED", + durationInNanos: 3706527, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 52846878 + } + ], + casesAsTable: false, + durationInNanos: 52846878, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "HTML Report Generator" + }, + { + className: "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + testMethodName: "attachments_with_different_media_types_can_be_created", + description: "attachments with different media types can be created", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a report model", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a report model" + } + ], + status: "PASSED", + durationInNanos: 202201, + depth: 0, + parentFailed: false + }, + { + name: "an attachment with content $ and mediaType", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "an attachment with content" + }, + { + value: '{ "foo": "bar"}', + argumentInfo: { + argumentName: "content", + formattedValue: '"{ "foo": "bar"}"' + } + }, + { + value: "and mediaType" + }, + { + value: "application/json", + argumentInfo: { + argumentName: "mediaType", + formattedValue: '"application/json"' + } + } + ], + status: "PASSED", + durationInNanos: 1016608, + depth: 0, + parentFailed: false + }, + { + name: "file name", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "file name" + }, + { + value: "jsonfile", + argumentInfo: { + argumentName: "name", + formattedValue: "jsonfile" + } + } + ], + status: "PASSED", + durationInNanos: 577904, + depth: 0, + parentFailed: false + }, + { + name: "an attachment with binary content $ and mediaType", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "an attachment with binary content" + }, + { + value: "QkoCOIcDQKCoCg==", + argumentInfo: { + argumentName: "binaryContent", + formattedValue: '"QkoCOIcDQKCoCg=="' + } + }, + { + value: "and mediaType" + }, + { + value: "application/octet-stream", + argumentInfo: { + argumentName: "mediaType", + formattedValue: '"application/octet-stream"' + } + } + ], + status: "PASSED", + durationInNanos: 308502, + depth: 0, + parentFailed: false + }, + { + name: "file name", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "file name" + }, + { + value: "binary", + argumentInfo: { + argumentName: "name", + formattedValue: "binary" + } + } + ], + status: "PASSED", + durationInNanos: 175601, + depth: 0, + parentFailed: false + }, + { + name: "the attachments are added to step $ of case $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the attachments are added to step" + }, + { + value: "1", + argumentInfo: { + argumentName: "stepNr", + formattedValue: "1" + } + }, + { + value: "of case" + }, + { + value: "1", + argumentInfo: { + argumentName: "caseNr", + formattedValue: "1" + } + } + ], + status: "PASSED", + durationInNanos: 1931614, + depth: 0, + parentFailed: false + }, + { + name: "the report exist as JSON file", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the report exist as JSON file" + } + ], + status: "PASSED", + durationInNanos: 1631712, + depth: 0, + parentFailed: false + }, + { + name: "the HTML Report Generator is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the HTML Report Generator is executed" + } + ], + status: "PASSED", + durationInNanos: 45700727, + depth: 0, + parentFailed: false + }, + { + name: "a file $ exists in folder $", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "a file" + }, + { + value: "jsonfile.json", + argumentInfo: { + argumentName: "name", + formattedValue: '"jsonfile.json"' + } + }, + { + value: "exists in folder" + }, + { + value: "data/attachments/Test", + argumentInfo: { + argumentName: "folder", + formattedValue: '"data/attachments/Test"' + } + } + ], + status: "PASSED", + durationInNanos: 328803, + depth: 0, + parentFailed: false + }, + { + name: "content", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "content" + }, + { + value: '{ "foo": "bar"}', + argumentInfo: { + argumentName: "content", + formattedValue: '"{ "foo": "bar"}"' + } + } + ], + status: "PASSED", + durationInNanos: 12229187, + depth: 0, + parentFailed: false + }, + { + name: "a file $ exists in folder $", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "a file" + }, + { + value: "binary.octet-stream", + argumentInfo: { + argumentName: "name", + formattedValue: '"binary.octet-stream"' + } + }, + { + value: "exists in folder" + }, + { + value: "data/attachments/Test", + argumentInfo: { + argumentName: "folder", + formattedValue: '"data/attachments/Test"' + } + } + ], + status: "PASSED", + durationInNanos: 304602, + depth: 0, + parentFailed: false + }, + { + name: "binary content", + words: [ + { + value: "with", + isIntroWord: true + }, + { + value: "binary content" + }, + { + value: "QkoCOIcDQKCoCg==", + argumentInfo: { + argumentName: "base64content", + formattedValue: '"QkoCOIcDQKCoCg=="' + } + } + ], + status: "PASSED", + durationInNanos: 1267309, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 71729213 + } + ], + casesAsTable: false, + durationInNanos: 71729213, + executionStatus: "SUCCESS", + tags: [{}, {}], + classTitle: "HTML Report Generator", + expanded: false, + $$hashKey: "object:615" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 59283824 - } - ], - "casesAsTable": false, - "durationInNanos": 59283824, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "Tags" - } - ], - "classTitle": "HTML Report Generator", - "expanded": false, - "$$hashKey": "object:616" + ] }, { - "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", - "testMethodName": "the_title_of_the_HTML_report_can_be_configured", - "description": "the title of the HTML report can be configured", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureHtml5Report" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 123001, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 1325610, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed with title", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed with title" - }, - { - "value": "Test Title", - "argumentInfo": { - "argumentName": "title", - "formattedValue": "Test Title" - } - } - ], - "status": "PASSED", - "durationInNanos": 45265424, - "depth": 0, - "parentFailed": false - }, - { - "name": "the metaData file has title set to", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the metaData file has title set to" - }, - { - "value": "Test Title", - "argumentInfo": { - "argumentName": "title", - "formattedValue": "Test Title" - } - } - ], - "status": "PASSED", - "durationInNanos": 3706527, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", + name: "De Szenario", + scenarios: [ + { + className: "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", + testMethodName: "Szenarien_können_in_deutsch_geschrieben_werden", + description: "Szenarien können in deutsch geschrieben werden", + tagIds: ["com.tngtech.jgiven.tags.FeatureGerman"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "ein deutsches Projekt", + words: [ + { + value: "gegeben", + isIntroWord: true + }, + { + value: "ein deutsches Projekt" + } + ], + status: "PASSED", + durationInNanos: 222701, + depth: 0, + parentFailed: false + }, + { + name: "JGiven verwendet wird", + words: [ + { + value: "wenn", + isIntroWord: true + }, + { + value: "JGiven verwendet wird" + } + ], + status: "PASSED", + durationInNanos: 111601, + depth: 0, + parentFailed: false + }, + { + name: "die Szenarien in deutsch geschrieben werden", + words: [ + { + value: "und", + isIntroWord: true + }, + { + value: "die Szenarien in deutsch geschrieben werden" + } + ], + status: "PASSED", + durationInNanos: 45100, + depth: 0, + parentFailed: false + }, + { + name: "generiert JGiven deutsche Berichte", + words: [ + { + value: "dann", + isIntroWord: true + }, + { + value: "generiert JGiven deutsche Berichte" + } + ], + status: "PASSED", + durationInNanos: 32400, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 4196231 + } + ], + casesAsTable: false, + durationInNanos: 4196231, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "De Szenario", + expanded: false, + $$hashKey: "object:603" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 52846878 - } - ], - "casesAsTable": false, - "durationInNanos": 52846878, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "HTML Report Generator" + ] }, { - "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", - "testMethodName": "attachments_with_different_media_types_can_be_created", - "description": "attachments with different media types can be created", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureAttachments" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a report model", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a report model" - } - ], - "status": "PASSED", - "durationInNanos": 202201, - "depth": 0, - "parentFailed": false - }, - { - "name": "an attachment with content $ and mediaType", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "an attachment with content" - }, - { - "value": "{ \"foo\": \"bar\"}", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "\"{ \"foo\": \"bar\"}\"" - } - }, - { - "value": "and mediaType" - }, - { - "value": "application/json", - "argumentInfo": { - "argumentName": "mediaType", - "formattedValue": "\"application/json\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 1016608, - "depth": 0, - "parentFailed": false - }, - { - "name": "file name", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "file name" - }, - { - "value": "jsonfile", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "jsonfile" - } - } - ], - "status": "PASSED", - "durationInNanos": 577904, - "depth": 0, - "parentFailed": false - }, - { - "name": "an attachment with binary content $ and mediaType", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "an attachment with binary content" - }, - { - "value": "QkoCOIcDQKCoCg==", - "argumentInfo": { - "argumentName": "binaryContent", - "formattedValue": "\"QkoCOIcDQKCoCg==\"" - } - }, - { - "value": "and mediaType" - }, - { - "value": "application/octet-stream", - "argumentInfo": { - "argumentName": "mediaType", - "formattedValue": "\"application/octet-stream\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 308502, - "depth": 0, - "parentFailed": false - }, - { - "name": "file name", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "file name" - }, - { - "value": "binary", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "binary" - } - } - ], - "status": "PASSED", - "durationInNanos": 175601, - "depth": 0, - "parentFailed": false - }, - { - "name": "the attachments are added to step $ of case $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the attachments are added to step" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "stepNr", - "formattedValue": "1" - } - }, - { - "value": "of case" - }, - { - "value": "1", - "argumentInfo": { - "argumentName": "caseNr", - "formattedValue": "1" - } - } - ], - "status": "PASSED", - "durationInNanos": 1931614, - "depth": 0, - "parentFailed": false - }, - { - "name": "the report exist as JSON file", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the report exist as JSON file" - } - ], - "status": "PASSED", - "durationInNanos": 1631712, - "depth": 0, - "parentFailed": false - }, - { - "name": "the HTML Report Generator is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the HTML Report Generator is executed" - } - ], - "status": "PASSED", - "durationInNanos": 45700727, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file $ exists in folder $", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "a file" - }, - { - "value": "jsonfile.json", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"jsonfile.json\"" - } - }, - { - "value": "exists in folder" - }, - { - "value": "data/attachments/Test", - "argumentInfo": { - "argumentName": "folder", - "formattedValue": "\"data/attachments/Test\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 328803, - "depth": 0, - "parentFailed": false - }, - { - "name": "content", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "content" - }, - { - "value": "{ \"foo\": \"bar\"}", - "argumentInfo": { - "argumentName": "content", - "formattedValue": "\"{ \"foo\": \"bar\"}\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 12229187, - "depth": 0, - "parentFailed": false - }, - { - "name": "a file $ exists in folder $", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "a file" - }, - { - "value": "binary.octet-stream", - "argumentInfo": { - "argumentName": "name", - "formattedValue": "\"binary.octet-stream\"" - } - }, - { - "value": "exists in folder" - }, - { - "value": "data/attachments/Test", - "argumentInfo": { - "argumentName": "folder", - "formattedValue": "\"data/attachments/Test\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 304602, - "depth": 0, - "parentFailed": false - }, - { - "name": "binary content", - "words": [ - { - "value": "with", - "isIntroWord": true - }, - { - "value": "binary content" - }, - { - "value": "QkoCOIcDQKCoCg==", - "argumentInfo": { - "argumentName": "base64content", - "formattedValue": "\"QkoCOIcDQKCoCg==\"" - } - } - ], - "status": "PASSED", - "durationInNanos": 1267309, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.junit.DataProviderTest", + name: "Data Provider", + scenarios: [ + { + className: "com.tngtech.jgiven.junit.DataProviderTest", + testMethodName: "a_scenario_with_one_failing_case_leads_to_a_failed_scenario", + description: "a scenario with one failing case leads to a failed scenario", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test with two cases and the first one fails", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test with two cases and the first one fails" + } + ], + status: "PASSED", + durationInNanos: 14908507, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 156169623, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has execution status", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the scenario has execution status" + }, + { + value: "FAILED", + argumentInfo: { + argumentName: "status", + formattedValue: "FAILED" + } + } + ], + status: "PASSED", + durationInNanos: 615404, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 173757650 + } + ], + casesAsTable: false, + durationInNanos: 173757650, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Data Provider", + expanded: false, + $$hashKey: "object:1330" + }, + { + className: "com.tngtech.jgiven.junit.DataProviderTest", + testMethodName: "pending_works_correctly_with_data_provider", + description: "pending works correctly with data provider", + tagIds: [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#200" + ], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a pending scenario with a data provider", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a pending scenario with a data provider" + } + ], + status: "PASSED", + durationInNanos: 535103, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 13844400, + depth: 0, + parentFailed: false + }, + { + name: "the scenario has execution status", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the scenario has execution status" + }, + { + value: "SCENARIO_PENDING", + argumentInfo: { + argumentName: "status", + formattedValue: "SCENARIO_PENDING" + } + } + ], + status: "PASSED", + durationInNanos: 272502, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 15924414 + } + ], + casesAsTable: false, + durationInNanos: 15924414, + executionStatus: "SUCCESS", + tags: [ + {}, + { + value: "#200", + description: "Scenarios of Issue #200" + } + ], + classTitle: "Data Provider", + expanded: false, + $$hashKey: "object:1331" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 71729213 - } - ], - "casesAsTable": false, - "durationInNanos": 71729213, - "executionStatus": "SUCCESS", - "tags": [ - {}, - {} - ], - "classTitle": "HTML Report Generator", - "expanded": false, - "$$hashKey": "object:615" - } - ] - }, - { - "className": "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", - "name": "De Szenario", - "scenarios": [ + ] + }, { - "className": "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", - "testMethodName": "Szenarien_können_in_deutsch_geschrieben_werden", - "description": "Szenarien können in deutsch geschrieben werden", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureGerman" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "ein deutsches Projekt", - "words": [ - { - "value": "gegeben", - "isIntroWord": true - }, - { - "value": "ein deutsches Projekt" - } - ], - "status": "PASSED", - "durationInNanos": 222701, - "depth": 0, - "parentFailed": false - }, - { - "name": "JGiven verwendet wird", - "words": [ - { - "value": "wenn", - "isIntroWord": true - }, - { - "value": "JGiven verwendet wird" - } - ], - "status": "PASSED", - "durationInNanos": 111601, - "depth": 0, - "parentFailed": false - }, - { - "name": "die Szenarien in deutsch geschrieben werden", - "words": [ - { - "value": "und", - "isIntroWord": true - }, - { - "value": "die Szenarien in deutsch geschrieben werden" - } - ], - "status": "PASSED", - "durationInNanos": 45100, - "depth": 0, - "parentFailed": false - }, - { - "name": "generiert JGiven deutsche Berichte", - "words": [ - { - "value": "dann", - "isIntroWord": true - }, - { - "value": "generiert JGiven deutsche Berichte" - } - ], - "status": "PASSED", - "durationInNanos": 32400, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", + name: "Es Escenario", + scenarios: [ + { + className: "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", + testMethodName: "los_escenarios_se_pueden_escribir_en_espannol", + description: "los escenarios se pueden escribir en espannol", + tagIds: ["com.tngtech.jgiven.tags.FeatureSpanish"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "un proyecto en espannol", + words: [ + { + value: "dado", + isIntroWord: true + }, + { + value: "un proyecto en espannol" + } + ], + status: "PASSED", + durationInNanos: 111301, + depth: 0, + parentFailed: false + }, + { + name: "se usa JGiven", + words: [ + { + value: "cuando", + isIntroWord: true + }, + { + value: "se usa JGiven" + } + ], + status: "PASSED", + durationInNanos: 38800, + depth: 0, + parentFailed: false + }, + { + name: "los escenarios se escriben en espannol", + words: [ + { + value: "y", + isIntroWord: true + }, + { + value: "los escenarios se escriben en espannol" + } + ], + status: "PASSED", + durationInNanos: 79000, + depth: 0, + parentFailed: false + }, + { + name: "JGiven genera los informes en espannol", + words: [ + { + value: "entonces", + isIntroWord: true + }, + { + value: "JGiven genera los informes en espannol" + } + ], + status: "PASSED", + durationInNanos: 111101, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 2606119 + } + ], + casesAsTable: false, + durationInNanos: 2606119, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Es Escenario", + expanded: false, + $$hashKey: "object:608" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 4196231 - } - ], - "casesAsTable": false, - "durationInNanos": 4196231, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "De Szenario", - "expanded": false, - "$$hashKey": "object:603" - } - ] - }, - { - "className": "com.tngtech.jgiven.junit.DataProviderTest", - "name": "Data Provider", - "scenarios": [ + ] + }, { - "className": "com.tngtech.jgiven.junit.DataProviderTest", - "testMethodName": "a_scenario_with_one_failing_case_leads_to_a_failed_scenario", - "description": "a scenario with one failing case leads to a failed scenario", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test with two cases and the first one fails", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test with two cases and the first one fails" - } - ], - "status": "PASSED", - "durationInNanos": 14908507, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 156169623, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has execution status", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the scenario has execution status" - }, - { - "value": "FAILED", - "argumentInfo": { - "argumentName": "status", - "formattedValue": "FAILED" - } - } - ], - "status": "PASSED", - "durationInNanos": 615404, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.impl.TimingsTest", + name: "Timings", + scenarios: [ + { + className: "com.tngtech.jgiven.impl.TimingsTest", + testMethodName: "recorded_timing_is_correct_for", + description: "recorded timing is correct for", + tagIds: [], + explicitParameters: ["methodName"], + derivedParameters: ["methodName"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "the JGiven timings test class with method", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "the JGiven timings test class with method" + }, + { + value: "last_step_is_preceeded_by_step", + argumentInfo: { + parameterName: "methodName", + argumentName: "requestedMethod", + formattedValue: "last_step_is_preceeded_by_step" + } + } + ], + status: "PASSED", + durationInNanos: 26374690, + depth: 0, + parentFailed: false + }, + { + name: "the test is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test is executed" + } + ], + status: "PASSED", + durationInNanos: 73537029, + depth: 0, + parentFailed: false + }, + { + name: "the recorded timing is greater than ten millis", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the recorded timing is greater than ten millis" + } + ], + status: "PASSED", + durationInNanos: 5095837, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["last_step_is_preceeded_by_step"], + derivedArguments: ["last_step_is_preceeded_by_step"], + status: "SUCCESS", + durationInNanos: 105842061 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["last_step_is_preceeded_by_intro_word"], + derivedArguments: ["last_step_is_preceeded_by_intro_word"], + status: "SUCCESS", + durationInNanos: 24511576 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["last_step_is_preceeded_by_filler_word"], + derivedArguments: ["last_step_is_preceeded_by_filler_word"], + status: "SUCCESS", + durationInNanos: 20147745 + }, + { + caseNr: 4, + steps: [], + explicitArguments: ["last_step_is_succeeded_by_intro_word"], + derivedArguments: ["last_step_is_succeeded_by_intro_word"], + status: "SUCCESS", + durationInNanos: 24176973 + }, + { + caseNr: 5, + steps: [], + explicitArguments: ["last_step_is_succeeded_by_filler_word"], + derivedArguments: ["last_step_is_succeeded_by_filler_word"], + status: "SUCCESS", + durationInNanos: 20611849 + } + ], + casesAsTable: true, + durationInNanos: 195290204, + executionStatus: "SUCCESS", + tags: [], + classTitle: "Timings" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 173757650 - } - ], - "casesAsTable": false, - "durationInNanos": 173757650, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Data Provider", - "expanded": false, - "$$hashKey": "object:1330" + ] }, { - "className": "com.tngtech.jgiven.junit.DataProviderTest", - "testMethodName": "pending_works_correctly_with_data_provider", - "description": "pending works correctly with data provider", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.Issue-#200" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a pending scenario with a data provider", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a pending scenario with a data provider" - } - ], - "status": "PASSED", - "durationInNanos": 535103, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 13844400, - "depth": 0, - "parentFailed": false - }, - { - "name": "the scenario has execution status", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the scenario has execution status" - }, - { - "value": "SCENARIO_PENDING", - "argumentInfo": { - "argumentName": "status", - "formattedValue": "SCENARIO_PENDING" - } - } - ], - "status": "PASSED", - "durationInNanos": 272502, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", + name: "Plain Text Generator Scenario", + scenarios: [ + { + className: "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", + testMethodName: "the_plain_text_reporter_generates_one_file_for_each_test_class", + description: "the plain text reporter generates one file for each test class", + tagIds: ["com.tngtech.jgiven.tags.FeatureTextReport"], + explicitParameters: ["numberOfModels"], + derivedParameters: ["numberOfModels"], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "$ report models", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "0", + argumentInfo: { + parameterName: "numberOfModels", + argumentName: "n", + formattedValue: "0" + } + }, + { + value: "report models" + } + ], + status: "PASSED", + durationInNanos: 368703, + depth: 0, + parentFailed: false + }, + { + name: "the reports exist as JSON files", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the reports exist as JSON files" + } + ], + status: "PASSED", + durationInNanos: 101600, + depth: 0, + parentFailed: false + }, + { + name: "the plain text reporter is executed", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the plain text reporter is executed" + } + ], + status: "PASSED", + durationInNanos: 3764527, + depth: 0, + parentFailed: false + }, + { + name: "a text file exists for each test class", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "a text file exists for each test class" + } + ], + status: "PASSED", + durationInNanos: 157201, + depth: 0, + parentFailed: false + } + ], + explicitArguments: ["0"], + derivedArguments: ["0"], + status: "SUCCESS", + durationInNanos: 6371646 + }, + { + caseNr: 2, + steps: [], + explicitArguments: ["1"], + derivedArguments: ["1"], + status: "SUCCESS", + durationInNanos: 8060458 + }, + { + caseNr: 3, + steps: [], + explicitArguments: ["3"], + derivedArguments: ["3"], + status: "SUCCESS", + durationInNanos: 7354453 + } + ], + casesAsTable: true, + durationInNanos: 21786557, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Plain Text Generator Scenario" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 15924414 - } - ], - "casesAsTable": false, - "durationInNanos": 15924414, - "executionStatus": "SUCCESS", - "tags": [ - {}, - { - "value": "#200", - "description": "Scenarios of Issue #200" - } - ], - "classTitle": "Data Provider", - "expanded": false, - "$$hashKey": "object:1331" - } - ] - }, - { - "className": "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", - "name": "Es Escenario", - "scenarios": [ + ] + }, { - "className": "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", - "testMethodName": "los_escenarios_se_pueden_escribir_en_espannol", - "description": "los escenarios se pueden escribir en espannol", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureSpanish" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "un proyecto en espannol", - "words": [ - { - "value": "dado", - "isIntroWord": true - }, - { - "value": "un proyecto en espannol" - } - ], - "status": "PASSED", - "durationInNanos": 111301, - "depth": 0, - "parentFailed": false - }, - { - "name": "se usa JGiven", - "words": [ - { - "value": "cuando", - "isIntroWord": true - }, - { - "value": "se usa JGiven" - } - ], - "status": "PASSED", - "durationInNanos": 38800, - "depth": 0, - "parentFailed": false - }, - { - "name": "los escenarios se escriben en espannol", - "words": [ - { - "value": "y", - "isIntroWord": true - }, - { - "value": "los escenarios se escriben en espannol" - } - ], - "status": "PASSED", - "durationInNanos": 79000, - "depth": 0, - "parentFailed": false - }, - { - "name": "JGiven genera los informes en espannol", - "words": [ - { - "value": "entonces", - "isIntroWord": true - }, - { - "value": "JGiven genera los informes en espannol" - } - ], - "status": "PASSED", - "durationInNanos": 111101, - "depth": 0, - "parentFailed": false + className: "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + name: "Lifecycle Ordering", + scenarios: [ + { + className: "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + testMethodName: "junit5_beforeAfterEach_beforeAfterScenario_execution_order", + description: "Ordering of before/after Each methods vs. before/after Scenario methods", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test with framework and JGiven before and after methods", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test with framework and JGiven before and after methods" + } + ], + status: "PASSED", + durationInNanos: 1096908, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit5", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit5" + } + ], + status: "PASSED", + durationInNanos: 103331840, + depth: 0, + parentFailed: false + }, + { + name: "the framework before method was executed before jgivens", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the framework before method was executed before jgivens" + } + ], + status: "PASSED", + durationInNanos: 3060022, + depth: 0, + parentFailed: false + }, + { + name: "the framework after method was executed after jgivens", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the framework after method was executed after jgivens" + } + ], + status: "PASSED", + durationInNanos: 325102, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 109280482 + } + ], + casesAsTable: false, + durationInNanos: 109280482, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Lifecycle Ordering" + }, + { + className: "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + testMethodName: "junit_beforeAfter_beforeAfterScenario_execution_order", + description: "Ordering of before/after methods vs. before/after Scenario methods", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test with framework and JGiven before and after methods", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test with framework and JGiven before and after methods" + } + ], + status: "PASSED", + durationInNanos: 71000, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with JUnit", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with JUnit" + } + ], + status: "PASSED", + durationInNanos: 3442425, + depth: 0, + parentFailed: false + }, + { + name: "the framework before method was executed before jgivens", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the framework before method was executed before jgivens" + } + ], + status: "PASSED", + durationInNanos: 118301, + depth: 0, + parentFailed: false + }, + { + name: "the framework after method was executed before jgivens", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the framework after method was executed before jgivens" + } + ], + status: "PASSED", + durationInNanos: 466704, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 7053251 + } + ], + casesAsTable: false, + durationInNanos: 7053251, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Lifecycle Ordering", + expanded: false, + $$hashKey: "object:1338" + }, + { + className: "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + testMethodName: "testNg_beforeAfterTest_beforeAfterScenario_execution_order", + description: "Ordering of before/after Test methods vs. before/after Scenario methods", + tagIds: ["com.tngtech.jgiven.tags.FeatureTestNg"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ + { + caseNr: 1, + steps: [ + { + name: "a test with framework and JGiven before and after methods", + words: [ + { + value: "Given", + isIntroWord: true + }, + { + value: "a test with framework and JGiven before and after methods" + } + ], + status: "PASSED", + durationInNanos: 35600, + depth: 0, + parentFailed: false + }, + { + name: "the test class is executed with", + words: [ + { + value: "When", + isIntroWord: true + }, + { + value: "the test class is executed with" + }, + { + value: "TestNG", + argumentInfo: { + argumentName: "framework", + formattedValue: "TestNG" + } + } + ], + status: "PASSED", + durationInNanos: 636466256, + depth: 0, + parentFailed: false + }, + { + name: "the framework before method was executed before jgivens", + words: [ + { + value: "Then", + isIntroWord: true + }, + { + value: "the framework before method was executed before jgivens" + } + ], + status: "PASSED", + durationInNanos: 206401, + depth: 0, + parentFailed: false + }, + { + name: "the framework after method was executed after jgivens", + words: [ + { + value: "and", + isIntroWord: true + }, + { + value: "the framework after method was executed after jgivens" + } + ], + status: "PASSED", + durationInNanos: 125601, + depth: 0, + parentFailed: false + } + ], + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 639245876 + } + ], + casesAsTable: false, + durationInNanos: 639245876, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "Lifecycle Ordering", + expanded: false, + $$hashKey: "object:147" } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 2606119 - } - ], - "casesAsTable": false, - "durationInNanos": 2606119, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Es Escenario", - "expanded": false, - "$$hashKey": "object:608" + ] } - ] + ], + customNavigationLinks: [], + metaData: { + created: "Dec 12, 2023, 6:29:36 AM", + version: "1.3.1-240a5794", + title: "JGiven Report", + data: ["data0.js", "data1.js"], + showThumbnails: true }, - { - "className": "com.tngtech.jgiven.impl.TimingsTest", - "name": "Timings", - "scenarios": [ - { - "className": "com.tngtech.jgiven.impl.TimingsTest", - "testMethodName": "recorded_timing_is_correct_for", - "description": "recorded timing is correct for", - "tagIds": [], - "explicitParameters": [ - "methodName" - ], - "derivedParameters": [ - "methodName" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "the JGiven timings test class with method", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "the JGiven timings test class with method" - }, - { - "value": "last_step_is_preceeded_by_step", - "argumentInfo": { - "parameterName": "methodName", - "argumentName": "requestedMethod", - "formattedValue": "last_step_is_preceeded_by_step" - } - } - ], - "status": "PASSED", - "durationInNanos": 26374690, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test is executed" - } - ], - "status": "PASSED", - "durationInNanos": 73537029, - "depth": 0, - "parentFailed": false - }, - { - "name": "the recorded timing is greater than ten millis", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the recorded timing is greater than ten millis" - } - ], - "status": "PASSED", - "durationInNanos": 5095837, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "last_step_is_preceeded_by_step" - ], - "derivedArguments": [ - "last_step_is_preceeded_by_step" - ], - "status": "SUCCESS", - "durationInNanos": 105842061 + tagFile: { + tagTypeMap: { + "com.tngtech.jgiven.tags.FeatureJUnit5": { + fullType: "com.tngtech.jgiven.tags.FeatureJUnit5", + type: "FeatureJUnit5", + name: "JUnit5", + description: "Tests can be be executed with JUnit5", + tags: ["com.tngtech.jgiven.tags.FeatureTestFramework"], + href: "" }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "last_step_is_preceeded_by_intro_word" - ], - "derivedArguments": [ - "last_step_is_preceeded_by_intro_word" - ], - "status": "SUCCESS", - "durationInNanos": 24511576 + "com.tngtech.jgiven.tags.Feature": { + fullType: "com.tngtech.jgiven.tags.Feature", + type: "Feature", + name: "Features", + description: "", + href: "" }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "last_step_is_preceeded_by_filler_word" - ], - "derivedArguments": [ - "last_step_is_preceeded_by_filler_word" - ], - "status": "SUCCESS", - "durationInNanos": 20147745 + "com.tngtech.jgiven.tags.FeatureTestFramework": { + fullType: "com.tngtech.jgiven.tags.FeatureTestFramework", + type: "FeatureTestFramework", + name: "Supported Test Frameworks", + description: "JGiven can be used together with JUnit and TestNG", + tags: ["com.tngtech.jgiven.tags.Feature"], + href: "" }, - { - "caseNr": 4, - "steps": [], - "explicitArguments": [ - "last_step_is_succeeded_by_intro_word" - ], - "derivedArguments": [ - "last_step_is_succeeded_by_intro_word" - ], - "status": "SUCCESS", - "durationInNanos": 24176973 + "com.tngtech.jgiven.tags.Issue": { + fullType: "com.tngtech.jgiven.tags.Issue", + type: "Issue", + description: "Scenarios of Issue #25", + prependType: true, + color: "orange", + href: "" }, - { - "caseNr": 5, - "steps": [], - "explicitArguments": [ - "last_step_is_succeeded_by_filler_word" - ], - "derivedArguments": [ - "last_step_is_succeeded_by_filler_word" - ], - "status": "SUCCESS", - "durationInNanos": 20611849 - } - ], - "casesAsTable": true, - "durationInNanos": 195290204, - "executionStatus": "SUCCESS", - "tags": [], - "classTitle": "Timings" - } - ] - }, - { - "className": "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", - "name": "Plain Text Generator Scenario", - "scenarios": [ - { - "className": "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", - "testMethodName": "the_plain_text_reporter_generates_one_file_for_each_test_class", - "description": "the plain text reporter generates one file for each test class", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTextReport" - ], - "explicitParameters": [ - "numberOfModels" - ], - "derivedParameters": [ - "numberOfModels" - ], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "$ report models", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "0", - "argumentInfo": { - "parameterName": "numberOfModels", - "argumentName": "n", - "formattedValue": "0" - } - }, - { - "value": "report models" - } - ], - "status": "PASSED", - "durationInNanos": 368703, - "depth": 0, - "parentFailed": false - }, - { - "name": "the reports exist as JSON files", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the reports exist as JSON files" - } - ], - "status": "PASSED", - "durationInNanos": 101600, - "depth": 0, - "parentFailed": false - }, - { - "name": "the plain text reporter is executed", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the plain text reporter is executed" - } - ], - "status": "PASSED", - "durationInNanos": 3764527, - "depth": 0, - "parentFailed": false - }, - { - "name": "a text file exists for each test class", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "a text file exists for each test class" - } - ], - "status": "PASSED", - "durationInNanos": 157201, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [ - "0" - ], - "derivedArguments": [ - "0" - ], - "status": "SUCCESS", - "durationInNanos": 6371646 + "com.tngtech.jgiven.tests.TestTag": { + fullType: "com.tngtech.jgiven.tests.TestTag", + type: "TestTag", + description: "", + href: "" }, - { - "caseNr": 2, - "steps": [], - "explicitArguments": [ - "1" - ], - "derivedArguments": [ - "1" - ], - "status": "SUCCESS", - "durationInNanos": 8060458 + "com.tngtech.jgiven.tags.BrowserTest": { + fullType: "com.tngtech.jgiven.tags.BrowserTest", + type: "BrowserTest", + description: "Tests with this tag use a browser for testing", + color: "rgb(69, 158, 19)", + href: "" }, - { - "caseNr": 3, - "steps": [], - "explicitArguments": [ - "3" - ], - "derivedArguments": [ - "3" - ], - "status": "SUCCESS", - "durationInNanos": 7354453 - } - ], - "casesAsTable": true, - "durationInNanos": 21786557, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Plain Text Generator Scenario" - } - ] - }, - { - "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", - "name": "Lifecycle Ordering", - "scenarios": [ - { - "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", - "testMethodName": "junit5_beforeAfterEach_beforeAfterScenario_execution_order", - "description": "Ordering of before/after Each methods vs. before/after Scenario methods", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit5" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test with framework and JGiven before and after methods", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test with framework and JGiven before and after methods" - } - ], - "status": "PASSED", - "durationInNanos": 1096908, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit5", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit5" - } - ], - "status": "PASSED", - "durationInNanos": 103331840, - "depth": 0, - "parentFailed": false - }, - { - "name": "the framework before method was executed before jgivens", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the framework before method was executed before jgivens" - } - ], - "status": "PASSED", - "durationInNanos": 3060022, - "depth": 0, - "parentFailed": false - }, - { - "name": "the framework after method was executed after jgivens", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the framework after method was executed after jgivens" - } - ], - "status": "PASSED", - "durationInNanos": 325102, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 109280482 - } - ], - "casesAsTable": false, - "durationInNanos": 109280482, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Lifecycle Ordering" - }, - { - "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", - "testMethodName": "junit_beforeAfter_beforeAfterScenario_execution_order", - "description": "Ordering of before/after methods vs. before/after Scenario methods", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureJUnit" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test with framework and JGiven before and after methods", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test with framework and JGiven before and after methods" - } - ], - "status": "PASSED", - "durationInNanos": 71000, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with JUnit", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with JUnit" - } - ], - "status": "PASSED", - "durationInNanos": 3442425, - "depth": 0, - "parentFailed": false - }, - { - "name": "the framework before method was executed before jgivens", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the framework before method was executed before jgivens" - } - ], - "status": "PASSED", - "durationInNanos": 118301, - "depth": 0, - "parentFailed": false - }, - { - "name": "the framework after method was executed before jgivens", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the framework after method was executed before jgivens" - } - ], - "status": "PASSED", - "durationInNanos": 466704, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 7053251 + "com.tngtech.jgiven.tags.FeatureHtml5Report": { + fullType: "com.tngtech.jgiven.tags.FeatureHtml5Report", + type: "FeatureHtml5Report", + name: "HTML5 Report", + description: "In order to have an interactive JGiven report for non-developers
As a developer,
I want that JGiven generates HTML5 reports", + tags: ["com.tngtech.jgiven.tags.FeatureReport"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureReport": { + fullType: "com.tngtech.jgiven.tags.FeatureReport", + type: "FeatureReport", + name: "Reporting", + description: "JGiven can generate text and HTML reports. An AsciiDoc report is currently under development.", + tags: ["com.tngtech.jgiven.tags.Feature"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureAttachments": { + fullType: "com.tngtech.jgiven.tags.FeatureAttachments", + type: "FeatureAttachments", + name: "Attachments", + description: "In order to get additional information about a step, like screenshots, for example
As a JGiven user,
I want that steps can have attachments", + tags: ["com.tngtech.jgiven.tags.FeatureCore"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureCore": { + fullType: "com.tngtech.jgiven.tags.FeatureCore", + type: "FeatureCore", + name: "Core Features", + description: "", + tags: ["com.tngtech.jgiven.tags.Feature"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { + fullType: "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle", + type: "FeatureTagsWithCustomStyle", + name: "Tags with Custom Styles", + description: "Tags can be arbitrarily styled with the 'style' attribute of the '@IsTag' annotation. This tag shows how to apply such a custom style", + style: "background-color: darkgreen; color: white; font-weight: bold", + tags: ["com.tngtech.jgiven.tags.FeatureTags-Tags"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureTags": { + fullType: "com.tngtech.jgiven.tags.FeatureTags", + type: "FeatureTags", + description: "Scenarios can be tagged with annotations", + tags: ["com.tngtech.jgiven.tags.FeatureCore"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureJUnit": { + fullType: "com.tngtech.jgiven.tags.FeatureJUnit", + type: "FeatureJUnit", + name: "JUnit", + description: "Tests can be be executed with JUnit", + tags: ["com.tngtech.jgiven.tags.FeatureTestFramework"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureTestNg": { + fullType: "com.tngtech.jgiven.tags.FeatureTestNg", + type: "FeatureTestNg", + name: "TestNG", + description: "Tests can be be executed with TestNG", + tags: ["com.tngtech.jgiven.tags.FeatureTestFramework"], + href: "" + }, + "com.tngtech.jgiven.tags.FeaturePending": { + fullType: "com.tngtech.jgiven.tags.FeaturePending", + type: "FeaturePending", + name: "Pending Annotation", + description: "As a good BDD practitioner,
I want to write my scenarios before I start coding
In order to discuss them with business stakeholders", + tags: ["com.tngtech.jgiven.tags.FeatureCore"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureCaseDiffs": { + fullType: "com.tngtech.jgiven.tags.FeatureCaseDiffs", + type: "FeatureCaseDiffs", + name: "Case Diffs", + description: "In order to get a better overview over structurally different cases of a scenario
As a human,
I want the differences highlighted in the generated report", + tags: ["com.tngtech.jgiven.tags.FeatureCore"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { + fullType: "com.tngtech.jgiven.tags.FeatureAsciiDocReport", + type: "FeatureAsciiDocReport", + name: "AsciiDoc Report", + description: "In order to easily combine hand-written documentation with JGiven scenarios
As a developer,
I want that JGiven generates AsciiDoc reports", + tags: ["com.tngtech.jgiven.tags.FeatureReport"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureGerman": { + fullType: "com.tngtech.jgiven.tags.FeatureGerman", + type: "FeatureGerman", + name: "German Scenarios", + description: "Scenarios can be written in German", + tags: ["com.tngtech.jgiven.tags.FeatureCore"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureTextReport": { + fullType: "com.tngtech.jgiven.tags.FeatureTextReport", + type: "FeatureTextReport", + name: "Text Report", + description: "Plain text reports can be generated", + tags: ["com.tngtech.jgiven.tags.FeatureReport"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureDataTables": { + fullType: "com.tngtech.jgiven.tags.FeatureDataTables", + type: "FeatureDataTables", + name: "Data Tables", + description: "In order to get a better overview over the different cases of a scenario
As a human,
I want to have different cases represented as a data table", + tags: ["com.tngtech.jgiven.tags.FeatureCore"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureStepParameters": { + fullType: "com.tngtech.jgiven.tags.FeatureStepParameters", + type: "FeatureStepParameters", + name: "Step Parameters", + description: "Steps can have parameters", + tags: ["com.tngtech.jgiven.tags.FeatureCore"], + href: "" + }, + "com.tngtech.jgiven.tags.FeatureSpanish": { + fullType: "com.tngtech.jgiven.tags.FeatureSpanish", + type: "FeatureSpanish", + name: "Spanish Scenarios", + description: "Scenarios can be written in Spanish", + tags: ["com.tngtech.jgiven.tags.FeatureCore"], + href: "" } - ], - "casesAsTable": false, - "durationInNanos": 7053251, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Lifecycle Ordering", - "expanded": false, - "$$hashKey": "object:1338" }, - { - "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", - "testMethodName": "testNg_beforeAfterTest_beforeAfterScenario_execution_order", - "description": "Ordering of before/after Test methods vs. before/after Scenario methods", - "tagIds": [ - "com.tngtech.jgiven.tags.FeatureTestNg" - ], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ - { - "caseNr": 1, - "steps": [ - { - "name": "a test with framework and JGiven before and after methods", - "words": [ - { - "value": "Given", - "isIntroWord": true - }, - { - "value": "a test with framework and JGiven before and after methods" - } - ], - "status": "PASSED", - "durationInNanos": 35600, - "depth": 0, - "parentFailed": false - }, - { - "name": "the test class is executed with", - "words": [ - { - "value": "When", - "isIntroWord": true - }, - { - "value": "the test class is executed with" - }, - { - "value": "TestNG", - "argumentInfo": { - "argumentName": "framework", - "formattedValue": "TestNG" - } - } - ], - "status": "PASSED", - "durationInNanos": 636466256, - "depth": 0, - "parentFailed": false - }, - { - "name": "the framework before method was executed before jgivens", - "words": [ - { - "value": "Then", - "isIntroWord": true - }, - { - "value": "the framework before method was executed before jgivens" - } - ], - "status": "PASSED", - "durationInNanos": 206401, - "depth": 0, - "parentFailed": false - }, - { - "name": "the framework after method was executed after jgivens", - "words": [ - { - "value": "and", - "isIntroWord": true - }, - { - "value": "the framework after method was executed after jgivens" - } - ], - "status": "PASSED", - "durationInNanos": 125601, - "depth": 0, - "parentFailed": false - } - ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 639245876 + tags: { + "com.tngtech.jgiven.tags.FeatureJUnit5": { + tagType: "com.tngtech.jgiven.tags.FeatureJUnit5" + }, + "com.tngtech.jgiven.tags.Feature": { + tagType: "com.tngtech.jgiven.tags.Feature" + }, + "com.tngtech.jgiven.tags.FeatureTestFramework": { + tagType: "com.tngtech.jgiven.tags.FeatureTestFramework" + }, + "com.tngtech.jgiven.tags.Issue-#25": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#25" + }, + "com.tngtech.jgiven.tags.Issue-#49": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#49", + description: "Scenarios of Issue #49" + }, + "com.tngtech.jgiven.tests.TestTag-testValue": { + tagType: "com.tngtech.jgiven.tests.TestTag", + value: "testValue" + }, + "com.tngtech.jgiven.tags.BrowserTest": { + tagType: "com.tngtech.jgiven.tags.BrowserTest" + }, + "com.tngtech.jgiven.tags.FeatureHtml5Report": { + tagType: "com.tngtech.jgiven.tags.FeatureHtml5Report" + }, + "com.tngtech.jgiven.tags.FeatureReport": { + tagType: "com.tngtech.jgiven.tags.FeatureReport" + }, + "com.tngtech.jgiven.tags.Issue-#236": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#236", + description: "Scenarios of Issue #236" + }, + "com.tngtech.jgiven.tags.Issue-#755": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#755", + description: "Scenarios of Issue #755" + }, + "com.tngtech.jgiven.tags.Issue-#191": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#191", + description: "Scenarios of Issue #191" + }, + "com.tngtech.jgiven.tags.FeatureAttachments": { + tagType: "com.tngtech.jgiven.tags.FeatureAttachments" + }, + "com.tngtech.jgiven.tags.FeatureCore": { + tagType: "com.tngtech.jgiven.tags.FeatureCore" + }, + "com.tngtech.jgiven.tags.Issue-#226": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#226", + description: "Scenarios of Issue #226" + }, + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { + tagType: "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" + }, + "com.tngtech.jgiven.tags.FeatureTags-Tags": { + tagType: "com.tngtech.jgiven.tags.FeatureTags", + value: "Tags" + }, + "com.tngtech.jgiven.tags.Issue-#146": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#146", + description: "Scenarios of Issue #146" + }, + "com.tngtech.jgiven.tags.Issue-#47": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#47", + description: "Scenarios of Issue #47" + }, + "com.tngtech.jgiven.tags.Issue-#274": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#274", + description: "Scenarios of Issue #274" + }, + "com.tngtech.jgiven.tags.FeatureJUnit": { + tagType: "com.tngtech.jgiven.tags.FeatureJUnit" + }, + "com.tngtech.jgiven.tags.FeatureTestNg": { + tagType: "com.tngtech.jgiven.tags.FeatureTestNg" + }, + "com.tngtech.jgiven.tags.Issue-#4": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#4", + description: "Scenarios of Issue #4" + }, + "com.tngtech.jgiven.tags.FeaturePending": { + tagType: "com.tngtech.jgiven.tags.FeaturePending" + }, + "com.tngtech.jgiven.tags.FeatureCaseDiffs": { + tagType: "com.tngtech.jgiven.tags.FeatureCaseDiffs" + }, + "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { + tagType: "com.tngtech.jgiven.tags.FeatureAsciiDocReport" + }, + "com.tngtech.jgiven.tags.Issue-#163": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#163", + description: "Scenarios of Issue #163" + }, + "com.tngtech.jgiven.tags.Issue-#32": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#32", + description: "Scenarios of Issue #32" + }, + "com.tngtech.jgiven.tags.FeatureGerman": { + tagType: "com.tngtech.jgiven.tags.FeatureGerman" + }, + "com.tngtech.jgiven.tags.Issue-#829": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#829", + description: "Scenarios of Issue #829" + }, + "com.tngtech.jgiven.tags.Issue-#123": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#123", + description: "Scenarios of Issue #123" + }, + "com.tngtech.jgiven.tags.FeatureTextReport": { + tagType: "com.tngtech.jgiven.tags.FeatureTextReport" + }, + "com.tngtech.jgiven.tags.FeatureDataTables": { + tagType: "com.tngtech.jgiven.tags.FeatureDataTables" + }, + "com.tngtech.jgiven.tags.Issue-#34": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#34", + description: "Scenarios of Issue #34" + }, + "com.tngtech.jgiven.tags.Issue-#152": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#152", + description: "Scenarios of Issue #152" + }, + "com.tngtech.jgiven.tags.Issue-#52": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#52", + description: "Scenarios of Issue #52" + }, + "com.tngtech.jgiven.tags.Issue-#10": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#10", + description: "Scenarios of Issue #10" + }, + "com.tngtech.jgiven.tags.Issue-#104": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#104", + description: "Scenarios of Issue #104" + }, + "com.tngtech.jgiven.tags.Issue-#1": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#1", + description: "Scenarios of Issue #1" + }, + "com.tngtech.jgiven.tags.FeatureStepParameters": { + tagType: "com.tngtech.jgiven.tags.FeatureStepParameters" + }, + "com.tngtech.jgiven.tags.FeatureSpanish": { + tagType: "com.tngtech.jgiven.tags.FeatureSpanish" + }, + "com.tngtech.jgiven.tags.Issue-#200": { + tagType: "com.tngtech.jgiven.tags.Issue", + value: "#200", + description: "Scenarios of Issue #200" } - ], - "casesAsTable": false, - "durationInNanos": 639245876, - "executionStatus": "SUCCESS", - "tags": [ - {} - ], - "classTitle": "Lifecycle Ordering", - "expanded": false, - "$$hashKey": "object:147" } - ] - } - ], - "customNavigationLinks": [], - "metaData": { - "created": "Dec 12, 2023, 6:29:36 AM", - "version": "1.3.1-240a5794", - "title": "JGiven Report", - "data": [ - "data0.js", - "data1.js" - ], - "showThumbnails": true - }, - "tagFile": { - "tagTypeMap": { - "com.tngtech.jgiven.tags.FeatureJUnit5": { - "fullType": "com.tngtech.jgiven.tags.FeatureJUnit5", - "type": "FeatureJUnit5", - "name": "JUnit5", - "description": "Tests can be be executed with JUnit5", - "tags": [ - "com.tngtech.jgiven.tags.FeatureTestFramework" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.Feature": { - "fullType": "com.tngtech.jgiven.tags.Feature", - "type": "Feature", - "name": "Features", - "description": "", - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureTestFramework": { - "fullType": "com.tngtech.jgiven.tags.FeatureTestFramework", - "type": "FeatureTestFramework", - "name": "Supported Test Frameworks", - "description": "JGiven can be used together with JUnit and TestNG", - "tags": [ - "com.tngtech.jgiven.tags.Feature" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.Issue": { - "fullType": "com.tngtech.jgiven.tags.Issue", - "type": "Issue", - "description": "Scenarios of Issue #25", - "prependType": true, - "color": "orange", - "href": "" - }, - "com.tngtech.jgiven.tests.TestTag": { - "fullType": "com.tngtech.jgiven.tests.TestTag", - "type": "TestTag", - "description": "", - "href": "" - }, - "com.tngtech.jgiven.tags.BrowserTest": { - "fullType": "com.tngtech.jgiven.tags.BrowserTest", - "type": "BrowserTest", - "description": "Tests with this tag use a browser for testing", - "color": "rgb(69, 158, 19)", - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureHtml5Report": { - "fullType": "com.tngtech.jgiven.tags.FeatureHtml5Report", - "type": "FeatureHtml5Report", - "name": "HTML5 Report", - "description": "In order to have an interactive JGiven report for non-developers
As a developer,
I want that JGiven generates HTML5 reports", - "tags": [ - "com.tngtech.jgiven.tags.FeatureReport" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureReport": { - "fullType": "com.tngtech.jgiven.tags.FeatureReport", - "type": "FeatureReport", - "name": "Reporting", - "description": "JGiven can generate text and HTML reports. An AsciiDoc report is currently under development.", - "tags": [ - "com.tngtech.jgiven.tags.Feature" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureAttachments": { - "fullType": "com.tngtech.jgiven.tags.FeatureAttachments", - "type": "FeatureAttachments", - "name": "Attachments", - "description": "In order to get additional information about a step, like screenshots, for example
As a JGiven user,
I want that steps can have attachments", - "tags": [ - "com.tngtech.jgiven.tags.FeatureCore" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureCore": { - "fullType": "com.tngtech.jgiven.tags.FeatureCore", - "type": "FeatureCore", - "name": "Core Features", - "description": "", - "tags": [ - "com.tngtech.jgiven.tags.Feature" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { - "fullType": "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle", - "type": "FeatureTagsWithCustomStyle", - "name": "Tags with Custom Styles", - "description": "Tags can be arbitrarily styled with the 'style' attribute of the '@IsTag' annotation. This tag shows how to apply such a custom style", - "style": "background-color: darkgreen; color: white; font-weight: bold", - "tags": [ - "com.tngtech.jgiven.tags.FeatureTags-Tags" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureTags": { - "fullType": "com.tngtech.jgiven.tags.FeatureTags", - "type": "FeatureTags", - "description": "Scenarios can be tagged with annotations", - "tags": [ - "com.tngtech.jgiven.tags.FeatureCore" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureJUnit": { - "fullType": "com.tngtech.jgiven.tags.FeatureJUnit", - "type": "FeatureJUnit", - "name": "JUnit", - "description": "Tests can be be executed with JUnit", - "tags": [ - "com.tngtech.jgiven.tags.FeatureTestFramework" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureTestNg": { - "fullType": "com.tngtech.jgiven.tags.FeatureTestNg", - "type": "FeatureTestNg", - "name": "TestNG", - "description": "Tests can be be executed with TestNG", - "tags": [ - "com.tngtech.jgiven.tags.FeatureTestFramework" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeaturePending": { - "fullType": "com.tngtech.jgiven.tags.FeaturePending", - "type": "FeaturePending", - "name": "Pending Annotation", - "description": "As a good BDD practitioner,
I want to write my scenarios before I start coding
In order to discuss them with business stakeholders", - "tags": [ - "com.tngtech.jgiven.tags.FeatureCore" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureCaseDiffs": { - "fullType": "com.tngtech.jgiven.tags.FeatureCaseDiffs", - "type": "FeatureCaseDiffs", - "name": "Case Diffs", - "description": "In order to get a better overview over structurally different cases of a scenario
As a human,
I want the differences highlighted in the generated report", - "tags": [ - "com.tngtech.jgiven.tags.FeatureCore" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { - "fullType": "com.tngtech.jgiven.tags.FeatureAsciiDocReport", - "type": "FeatureAsciiDocReport", - "name": "AsciiDoc Report", - "description": "In order to easily combine hand-written documentation with JGiven scenarios
As a developer,
I want that JGiven generates AsciiDoc reports", - "tags": [ - "com.tngtech.jgiven.tags.FeatureReport" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureGerman": { - "fullType": "com.tngtech.jgiven.tags.FeatureGerman", - "type": "FeatureGerman", - "name": "German Scenarios", - "description": "Scenarios can be written in German", - "tags": [ - "com.tngtech.jgiven.tags.FeatureCore" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureTextReport": { - "fullType": "com.tngtech.jgiven.tags.FeatureTextReport", - "type": "FeatureTextReport", - "name": "Text Report", - "description": "Plain text reports can be generated", - "tags": [ - "com.tngtech.jgiven.tags.FeatureReport" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureDataTables": { - "fullType": "com.tngtech.jgiven.tags.FeatureDataTables", - "type": "FeatureDataTables", - "name": "Data Tables", - "description": "In order to get a better overview over the different cases of a scenario
As a human,
I want to have different cases represented as a data table", - "tags": [ - "com.tngtech.jgiven.tags.FeatureCore" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureStepParameters": { - "fullType": "com.tngtech.jgiven.tags.FeatureStepParameters", - "type": "FeatureStepParameters", - "name": "Step Parameters", - "description": "Steps can have parameters", - "tags": [ - "com.tngtech.jgiven.tags.FeatureCore" - ], - "href": "" - }, - "com.tngtech.jgiven.tags.FeatureSpanish": { - "fullType": "com.tngtech.jgiven.tags.FeatureSpanish", - "type": "FeatureSpanish", - "name": "Spanish Scenarios", - "description": "Scenarios can be written in Spanish", - "tags": [ - "com.tngtech.jgiven.tags.FeatureCore" - ], - "href": "" - } - }, - "tags": { - "com.tngtech.jgiven.tags.FeatureJUnit5": { - "tagType": "com.tngtech.jgiven.tags.FeatureJUnit5" - }, - "com.tngtech.jgiven.tags.Feature": { - "tagType": "com.tngtech.jgiven.tags.Feature" - }, - "com.tngtech.jgiven.tags.FeatureTestFramework": { - "tagType": "com.tngtech.jgiven.tags.FeatureTestFramework" - }, - "com.tngtech.jgiven.tags.Issue-#25": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#25" - }, - "com.tngtech.jgiven.tags.Issue-#49": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#49", - "description": "Scenarios of Issue #49" - }, - "com.tngtech.jgiven.tests.TestTag-testValue": { - "tagType": "com.tngtech.jgiven.tests.TestTag", - "value": "testValue" - }, - "com.tngtech.jgiven.tags.BrowserTest": { - "tagType": "com.tngtech.jgiven.tags.BrowserTest" - }, - "com.tngtech.jgiven.tags.FeatureHtml5Report": { - "tagType": "com.tngtech.jgiven.tags.FeatureHtml5Report" - }, - "com.tngtech.jgiven.tags.FeatureReport": { - "tagType": "com.tngtech.jgiven.tags.FeatureReport" - }, - "com.tngtech.jgiven.tags.Issue-#236": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#236", - "description": "Scenarios of Issue #236" - }, - "com.tngtech.jgiven.tags.Issue-#755": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#755", - "description": "Scenarios of Issue #755" - }, - "com.tngtech.jgiven.tags.Issue-#191": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#191", - "description": "Scenarios of Issue #191" - }, - "com.tngtech.jgiven.tags.FeatureAttachments": { - "tagType": "com.tngtech.jgiven.tags.FeatureAttachments" - }, - "com.tngtech.jgiven.tags.FeatureCore": { - "tagType": "com.tngtech.jgiven.tags.FeatureCore" - }, - "com.tngtech.jgiven.tags.Issue-#226": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#226", - "description": "Scenarios of Issue #226" - }, - "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { - "tagType": "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" - }, - "com.tngtech.jgiven.tags.FeatureTags-Tags": { - "tagType": "com.tngtech.jgiven.tags.FeatureTags", - "value": "Tags" - }, - "com.tngtech.jgiven.tags.Issue-#146": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#146", - "description": "Scenarios of Issue #146" - }, - "com.tngtech.jgiven.tags.Issue-#47": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#47", - "description": "Scenarios of Issue #47" - }, - "com.tngtech.jgiven.tags.Issue-#274": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#274", - "description": "Scenarios of Issue #274" - }, - "com.tngtech.jgiven.tags.FeatureJUnit": { - "tagType": "com.tngtech.jgiven.tags.FeatureJUnit" - }, - "com.tngtech.jgiven.tags.FeatureTestNg": { - "tagType": "com.tngtech.jgiven.tags.FeatureTestNg" - }, - "com.tngtech.jgiven.tags.Issue-#4": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#4", - "description": "Scenarios of Issue #4" - }, - "com.tngtech.jgiven.tags.FeaturePending": { - "tagType": "com.tngtech.jgiven.tags.FeaturePending" - }, - "com.tngtech.jgiven.tags.FeatureCaseDiffs": { - "tagType": "com.tngtech.jgiven.tags.FeatureCaseDiffs" - }, - "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { - "tagType": "com.tngtech.jgiven.tags.FeatureAsciiDocReport" - }, - "com.tngtech.jgiven.tags.Issue-#163": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#163", - "description": "Scenarios of Issue #163" - }, - "com.tngtech.jgiven.tags.Issue-#32": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#32", - "description": "Scenarios of Issue #32" - }, - "com.tngtech.jgiven.tags.FeatureGerman": { - "tagType": "com.tngtech.jgiven.tags.FeatureGerman" - }, - "com.tngtech.jgiven.tags.Issue-#829": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#829", - "description": "Scenarios of Issue #829" - }, - "com.tngtech.jgiven.tags.Issue-#123": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#123", - "description": "Scenarios of Issue #123" - }, - "com.tngtech.jgiven.tags.FeatureTextReport": { - "tagType": "com.tngtech.jgiven.tags.FeatureTextReport" - }, - "com.tngtech.jgiven.tags.FeatureDataTables": { - "tagType": "com.tngtech.jgiven.tags.FeatureDataTables" - }, - "com.tngtech.jgiven.tags.Issue-#34": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#34", - "description": "Scenarios of Issue #34" - }, - "com.tngtech.jgiven.tags.Issue-#152": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#152", - "description": "Scenarios of Issue #152" - }, - "com.tngtech.jgiven.tags.Issue-#52": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#52", - "description": "Scenarios of Issue #52" - }, - "com.tngtech.jgiven.tags.Issue-#10": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#10", - "description": "Scenarios of Issue #10" - }, - "com.tngtech.jgiven.tags.Issue-#104": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#104", - "description": "Scenarios of Issue #104" - }, - "com.tngtech.jgiven.tags.Issue-#1": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#1", - "description": "Scenarios of Issue #1" - }, - "com.tngtech.jgiven.tags.FeatureStepParameters": { - "tagType": "com.tngtech.jgiven.tags.FeatureStepParameters" - }, - "com.tngtech.jgiven.tags.FeatureSpanish": { - "tagType": "com.tngtech.jgiven.tags.FeatureSpanish" - }, - "com.tngtech.jgiven.tags.Issue-#200": { - "tagType": "com.tngtech.jgiven.tags.Issue", - "value": "#200", - "description": "Scenarios of Issue #200" - } } - } -} \ No newline at end of file +} diff --git a/new/src/App.tsx b/new/src/App.tsx index 957b69db..523e845d 100644 --- a/new/src/App.tsx +++ b/new/src/App.tsx @@ -1,8 +1,8 @@ import "./App.css"; -import ReportModel, {ReportStatistics} from "./reportModel"; +import ReportModel, { ReportStatistics } from "./reportModel"; import * as guaranteedStateScenario from "./sampleData/GuaranteedStateTestScenario.json"; -import {ScenarioOverview} from "./components/Scenarios/ScenarioOverview"; -import { useSearchParams} from "react-router-dom"; +import { ScenarioOverview } from "./components/Scenarios/ScenarioOverview"; +import { useSearchParams } from "react-router-dom"; export const statistics: ReportStatistics[] = [ { @@ -24,7 +24,7 @@ function App() { const [searchParams] = useSearchParams(); return (
- {searchParams.get('result')} + {searchParams.get("result")} - setUrlSearchParams({result: ScenarioStatusFilter.SUCCESS})}> + setUrlSearchParams({ result: ScenarioStatusFilter.SUCCESS })} + > {props.statistic.numSuccessfulScenarios} Successful, - setUrlSearchParams({result: ScenarioStatusFilter.FAILURE})}> + setUrlSearchParams({ result: ScenarioStatusFilter.FAILURE })} + > {props.statistic.numFailedScenarios} failed, - setUrlSearchParams({result: ScenarioStatusFilter.PENDING})}> + setUrlSearchParams({ result: ScenarioStatusFilter.PENDING })} + > {props.statistic.numPendingScenarios} pending, diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index 97d57b04..6c6e9c16 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -1,13 +1,13 @@ -import type {ScenarioCaseModel, ScenarioModel, StepModel} from "../../reportModel"; -import {Accordion, AccordionDetails, Box, Grid, Link, Typography} from "@mui/material"; -import {styled} from "@mui/material/styles"; +import type { ScenarioCaseModel, ScenarioModel, StepModel } from "../../reportModel"; +import { Accordion, AccordionDetails, Box, Grid, Link, Typography } from "@mui/material"; +import { styled } from "@mui/material/styles"; import ArrowForwardIosSharpIcon from "@mui/icons-material/ArrowForwardIosSharp"; -import MuiAccordionSummary, {AccordionSummaryProps} from "@mui/material/AccordionSummary"; -import {PropsWithChildren, useCallback, useEffect, useState} from "react"; -import {addRuntime} from "../utils"; -import {StatusIcon} from "../StatusIconSelector"; -import {processWords} from "../../wordProcessor"; -import {ExpansionState} from "./ScenarioOverview"; +import MuiAccordionSummary, { AccordionSummaryProps } from "@mui/material/AccordionSummary"; +import { PropsWithChildren, useCallback, useEffect, useState } from "react"; +import { addRuntime } from "../utils"; +import { StatusIcon } from "../StatusIconSelector"; +import { processWords } from "../../wordProcessor"; +import { ExpansionState } from "./ScenarioOverview"; export interface ScenarioProps { scenario: ScenarioModel; @@ -27,12 +27,15 @@ export function Scenario(props: ScenarioProps) { if (props.globalExpansionState === ExpansionState.EXPANDED) { setExpanded(true); } - }, [props.globalExpansionState]) + }, [props.globalExpansionState]); - const onExpansionChanged = useCallback((isExpansion: boolean) => { - setExpanded(isExpansion); - isExpansion ? props.onExpansionCallback() : props.onCollapsionCallback(); - }, [expanded]) + const onExpansionChanged = useCallback( + (isExpansion: boolean) => { + setExpanded(isExpansion); + isExpansion ? props.onExpansionCallback() : props.onCollapsionCallback(); + }, + [expanded] + ); return props.scenario.scenarioCases.length === 1 ? (
(ExpansionState.COLLAPSED); return ( <> -
- +
+
@@ -30,11 +29,11 @@ export function ScenarioOverview(props: { {/* Workshop: Extract to new component. */} -
+
- -
- {props.scenarios.map((scenario) => { +
+ {props.scenarios.map(scenario => { return ( {setAllExpanded(ExpansionState.INTERMEDIATE)}} - onExpansionCallback={() => {setAllExpanded(ExpansionState.INTERMEDIATE)}} + onCollapsionCallback={() => { + setAllExpanded(ExpansionState.INTERMEDIATE); + }} + onExpansionCallback={() => { + setAllExpanded(ExpansionState.INTERMEDIATE); + }} > ); })} -
@@ -84,9 +85,9 @@ function createStatistics(scenarios: ScenarioModel[]): ReportStatistics { return { numClasses: 1, numScenarios: 1, -// numFailedScenarios: Math.sign( -// findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED") -// ), + // numFailedScenarios: Math.sign( + // findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED") + // ), numFailedScenarios: 1, numCases: 1, //scenario.scenarioCases.length, numFailedCases: 1, //findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED"), @@ -96,7 +97,7 @@ function createStatistics(scenarios: ScenarioModel[]): ReportStatistics { //Math.sign( // findNumberOfCasesWithStatus(scenario.scenarioCases, "SCENARIO_PENDING") //), - numSuccessfulScenarios: 1, + numSuccessfulScenarios: 1 //Math.sign( // findNumberOfCasesWithStatus(scenario.scenarioCases, "SUCCESS") //) diff --git a/new/src/index.tsx b/new/src/index.tsx index b9ff47c4..5c58ce3c 100644 --- a/new/src/index.tsx +++ b/new/src/index.tsx @@ -5,8 +5,8 @@ import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import en from "./i18n/en.json"; import reportWebVitals from "./reportWebVitals"; -import {RouterProvider} from "react-router-dom"; -import {router} from "./router"; +import { RouterProvider } from "react-router-dom"; +import { router } from "./router"; const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement); @@ -23,7 +23,7 @@ i18n.use(initReactI18next).init({ root.render( - + ); diff --git a/new/src/router.tsx b/new/src/router.tsx index e672eeb0..b0698dfa 100644 --- a/new/src/router.tsx +++ b/new/src/router.tsx @@ -1,9 +1,9 @@ -import {createBrowserRouter} from "react-router-dom"; +import { createBrowserRouter } from "react-router-dom"; import App from "./App"; export const router = createBrowserRouter([ { path: "/", - element: , + element: } ]); From 2e63d6686535ed46d843ea2111abac962a2cf2dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 12:22:55 +0100 Subject: [PATCH 13/45] some statistics fixed --- .../components/Scenarios/ScenarioOverview.tsx | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 16ec6243..09567cd5 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -82,18 +82,21 @@ export function ScenarioOverview(props: { } function createStatistics(scenarios: ScenarioModel[]): ReportStatistics { + const allCases = scenarios.flatMap((scenario) => scenario.scenarioCases); + const allSteps = allCases.flatMap((scenarioCase) => {scenarioCase.steps}); + const failedCases = allCases.filter((scenarioCase) => scenarioCase.status === "FAILED" ); + + const failedScenarios = scenarios.filter((scenario) => scenario.scenarioCases.some((scenarioCase) => scenarioCase.status === "FAILED")); + const pendingScenarios = scenarios.filter((scenario) => scenario.scenarioCases.some((scenarioCase) => scenarioCase.status === "SOME_STEPS_PENDING" || scenarioCase.status === "SCENARIO_PENDING")); return { numClasses: 1, - numScenarios: 1, - // numFailedScenarios: Math.sign( - // findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED") - // ), - numFailedScenarios: 1, - numCases: 1, //scenario.scenarioCases.length, - numFailedCases: 1, //findNumberOfCasesWithStatus(scenario.scenarioCases, "FAILED"), - numSteps: 1, //scenario.scenarioCases.map(value => value.steps.length).reduce(sum), + numScenarios: scenarios.length, + numFailedScenarios: failedScenarios.length, + numCases: allCases.length, + numFailedCases: failedCases.length, + numSteps: allSteps.length, durationInNanos: 1, //scenario.durationInNanos, - numPendingScenarios: 1, + numPendingScenarios: pendingScenarios.length, //Math.sign( // findNumberOfCasesWithStatus(scenario.scenarioCases, "SCENARIO_PENDING") //), From 53708129dd2f4307c2932de03d3a01a5bea273a7 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:18:44 +0100 Subject: [PATCH 14/45] Extend gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..485dee64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea From 01142540b698dcef7551853c529414e37e10495d Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:24:12 +0100 Subject: [PATCH 15/45] Move styling to own file --- .../ScenarioOverview/ScenarioHead.css | 3 -- .../ScenarioOverview/ScenarioHead.styles.ts | 19 +++++++++++ .../ScenarioOverview/ScenarioHead.tsx | 33 +++++-------------- 3 files changed, 28 insertions(+), 27 deletions(-) delete mode 100644 new/src/components/ScenarioOverview/ScenarioHead.css create mode 100644 new/src/components/ScenarioOverview/ScenarioHead.styles.ts diff --git a/new/src/components/ScenarioOverview/ScenarioHead.css b/new/src/components/ScenarioOverview/ScenarioHead.css deleted file mode 100644 index b7013a51..00000000 --- a/new/src/components/ScenarioOverview/ScenarioHead.css +++ /dev/null @@ -1,3 +0,0 @@ -.pseudo-link { - cursor: pointer; -} diff --git a/new/src/components/ScenarioOverview/ScenarioHead.styles.ts b/new/src/components/ScenarioOverview/ScenarioHead.styles.ts new file mode 100644 index 00000000..e7145471 --- /dev/null +++ b/new/src/components/ScenarioOverview/ScenarioHead.styles.ts @@ -0,0 +1,19 @@ +import { styled } from "@mui/material/styles"; +import { Drawer, Link } from "@mui/material"; + +export const StyledDrawer = styled(Drawer)({ + // width: 240, + flexShrink: 0, + "& .MuiDrawer-paper": { + backgroundColor: "rgba(250,250,250,255)" + } +}); + +export const StyledContent = styled("div")(({ theme }) => ({ + flexGrow: 1, + padding: theme.spacing(3) +})); + +export const StyledLink = styled(Link)({ + cursor: "pointer" +}); diff --git a/new/src/components/ScenarioOverview/ScenarioHead.tsx b/new/src/components/ScenarioOverview/ScenarioHead.tsx index 0bd54270..754a0b8b 100644 --- a/new/src/components/ScenarioOverview/ScenarioHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioHead.tsx @@ -4,7 +4,6 @@ import { Breadcrumbs, Button, Divider, - Drawer, Grid, Link, List, @@ -23,9 +22,8 @@ import BookmarkOutlinedIcon from "@mui/icons-material/BookmarkOutlined"; import { createReportCircle } from "./DonutChart"; import React, { MouseEventHandler } from "react"; import { processWords } from "../../wordProcessor"; -import { styled } from "@mui/material/styles"; import { useSearchParams } from "react-router-dom"; -import "./ScenarioHead.css"; +import { StyledContent, StyledDrawer, StyledLink } from "./ScenarioHead.styles"; export interface ScenarioOverviewProps { statistic: ReportStatistics; @@ -46,23 +44,10 @@ interface Headers { belowHeader?: string; } -const StyledDrawer = styled(Drawer)({ - // width: 240, - flexShrink: 0, - "& .MuiDrawer-paper": { - backgroundColor: "rgba(250,250,250,255)" - } -}); - -const Content = styled("div")(({ theme }) => ({ - flexGrow: 1, - padding: theme.spacing(3) -})); - export function ScenarioHead(props: ScenarioOverviewProps) { return (
- + - +
); } @@ -242,7 +227,7 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { return ( - {props.statistic.numSuccessfulScenarios} Successful, - - + {props.statistic.numFailedScenarios} failed, - - + {props.statistic.numPendingScenarios} pending, - + {props.statistic.numScenarios} Total {addRuntime(props.statistic)} From 490afae39441709f89bdc98fe97712472da9e683 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:25:03 +0100 Subject: [PATCH 16/45] Remove accidentally pushed dummy data --- .../components/ScenarioOverview/ScenarioHead.tsx | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/new/src/components/ScenarioOverview/ScenarioHead.tsx b/new/src/components/ScenarioOverview/ScenarioHead.tsx index 754a0b8b..ecf84ce2 100644 --- a/new/src/components/ScenarioOverview/ScenarioHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioHead.tsx @@ -110,21 +110,6 @@ export function MenuBar() { {/* Workshop: Use forEach to implement missing subitems. */} TAGS} /> - - - - mytag - - } - /> - - CLASSES} /> From 612f20a305e0ef0fbd5dead7ceff7f9b25029d06 Mon Sep 17 00:00:00 2001 From: unknown <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:27:02 +0100 Subject: [PATCH 17/45] Fix jgiven report json Signed-off-by: unknown <30831153+l-1squared@users.noreply.github.com> --- new/resources/jgivenReport.json | 19933 +++++++++++++++++++++++++++++ new/resources/jgivenReport.json5 | 19933 ----------------------------- 2 files changed, 19933 insertions(+), 19933 deletions(-) create mode 100644 new/resources/jgivenReport.json delete mode 100644 new/resources/jgivenReport.json5 diff --git a/new/resources/jgivenReport.json b/new/resources/jgivenReport.json new file mode 100644 index 00000000..6fee87c6 --- /dev/null +++ b/new/resources/jgivenReport.json @@ -0,0 +1,19933 @@ +{ + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "name": "J Unit 5 Executor", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "after_stage_methods_of_stages_following_failing_stages_are_ignored", + "description": "after stage methods of stages following failing stages are ignored", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit5"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 429103, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 413003, + "depth": 0, + "parentFailed": false + }, + { + "name": "stage $ has a failing after stage method", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "stage" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a failing after stage method" + } + ], + "status": "PASSED", + "durationInNanos": 297902, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 1022008, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 518574231, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 1932714, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 1136408, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 287102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 525725382 + } + ], + "casesAsTable": false, + "durationInNanos": 525725382, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "tests_with_scenario_modifications_in_after_method", + "description": "tests with scenario modifications in after method", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit5"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "junit5 tests with scenario modifications in after method", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "junit5 tests with scenario modifications in after method" + } + ], + "status": "PASSED", + "durationInNanos": 653305, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 88779139, + "depth": 0, + "parentFailed": false + }, + { + "name": "each scenario contains $ cases", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "each scenario contains" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nParameters", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 451903, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 91778960 + } + ], + "casesAsTable": false, + "durationInNanos": 91778960, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "tests_with_a_per_class_lifecycle", + "description": "tests with a per class lifecycle", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit5"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "junit5 test class with a per class lifecycle", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "junit5 test class with a per class lifecycle" + } + ], + "status": "PASSED", + "durationInNanos": 532404, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 26956794, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "JGiven does not support keeping a test instance over multiple scenarios", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "JGiven does not support keeping a test instance over multiple scenarios" + } + } + ], + "status": "PASSED", + "durationInNanos": 1995814, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 30877622 + } + ], + "casesAsTable": false, + "durationInNanos": 30877622, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "all_steps_of_stages_following_failing_stages_are_ignored", + "description": "all steps of stages following failing stages are ignored", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit5"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 320702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 1719513, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 806406, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 7550454, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 84701, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 343802, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 268802, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 12169888 + } + ], + "casesAsTable": false, + "durationInNanos": 12169888, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "a_valid_report_is_generated_for_classes_that_are_disabled", + "description": "a valid report is generated for classes that are disabled", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.Issue-#25" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class with all tests ignored", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class with all tests ignored" + } + ], + "status": "PASSED", + "durationInNanos": 44600, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 16082716, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model is either null or empty", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model is either null or empty" + } + ], + "status": "PASSED", + "durationInNanos": 75400, + "extendedDescription": "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", + "depth": 0, + "parentFailed": false + }, + { + "name": "has a valid class name if it is not null", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "has a valid class name if it is not null" + } + ], + "status": "PASSED", + "durationInNanos": 49000, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 18005730 + } + ], + "casesAsTable": false, + "durationInNanos": 18005730, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#25" + } + ], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "steps_following_failing_steps_are_reported_as_skipped", + "description": "steps following failing steps are reported as skipped", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit5"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "3" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 2099415, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 266502, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 22164560, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 460003, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 269602, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "3" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 753505, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 27159096 + } + ], + "casesAsTable": false, + "durationInNanos": 27159096, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit 5 Executor" + }, + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + "description": "exception in scenario is not hidden by exception in JUnit after method", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.Issue-#49" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class with a failing scenario and a failing after stage", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class with a failing scenario and a failing after stage" + } + ], + "status": "PASSED", + "durationInNanos": 40400, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 62267448, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "assertion failed in test step", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "assertion failed in test step" + } + } + ], + "status": "PASSED", + "durationInNanos": 585004, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 65271169 + } + ], + "casesAsTable": false, + "durationInNanos": 65271169, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#49", + "description": "Scenarios of Issue #49" + } + ], + "classTitle": "J Unit 5 Executor" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.TestScenarios", + "name": "Test Scenarios", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.TestScenarios", + "testMethodName": "test_with_tag_annotation", + "description": "test with tag annotation", + "tagIds": ["com.tngtech.jgiven.tests.TestTag-testValue"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 22100, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 356203 + } + ], + "casesAsTable": false, + "durationInNanos": 356203, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "testValue" + } + ], + "classTitle": "Test Scenarios" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + "name": "J Unit 5 After Method", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + "testMethodName": "a_failing_JUnit_5_test", + "description": "a failing JUnit 5 test", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 447503, + "depth": 0, + "parentFailed": false + }, + { + "name": "a step fails", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "a step fails" + } + ], + "status": "FAILED", + "durationInNanos": 714006, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happened", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "something happened" + } + ], + "status": "SKIPPED", + "durationInNanos": 0, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "FAILED", + "errorMessage": "java.lang.AssertionError: assertion failed in test step", + "stackTrace": [ + "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", + "com.tngtech.jgiven.tests.JUnit5AfterMethodTests.a_failing_JUnit_5_test(JUnit5AfterMethodTests.java:24)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", + "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", + "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", + "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", + "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", + "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", + "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.tests_with_scenario_modifications_in_after_method(JUnit5ExecutorTest.java:19)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", + "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", + "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", + "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", + "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", + "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", + "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", + "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", + "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", + "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", + "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", + "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", + "org.junit.rules.RunRules.evaluate(RunRules.java:20)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", + "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", + "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", + "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", + "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", + "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" + ], + "durationInNanos": 7239852 + } + ], + "casesAsTable": false, + "durationInNanos": 7239852, + "executionStatus": "FAILED", + "tags": [], + "classTitle": "J Unit 5 After Method" + }, + { + "className": "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", + "testMethodName": "a_succeeding_JUnit5_test", + "description": "a succeeding JUnit5 test", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 78000, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happens", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "something happens" + } + ], + "status": "PASSED", + "durationInNanos": 92301, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happened", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "something happened" + } + ], + "status": "PASSED", + "durationInNanos": 1700312, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 8255559 + } + ], + "casesAsTable": false, + "durationInNanos": 8255559, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "J Unit 5 After Method" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", + "name": "Report Configuration", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", + "testMethodName": "jgiven_report_directory_is_set_via_a_system_property", + "description": "jgiven report directory is set via a system property", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a set system property", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a set system property" + }, + { + "value": "jgiven.report.dir", + "argumentInfo": { + "argumentName": "key", + "formattedValue": "jgiven.report.dir" + } + }, + { + "value": "/tmp/junit9611904619136189853/junit11940332615471196075", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "/tmp/junit9611904619136189853/junit11940332615471196075" + } + } + ], + "status": "PASSED", + "durationInNanos": 363103, + "depth": 0, + "parentFailed": false + }, + { + "name": "a set system property", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a set system property" + }, + { + "value": "jgiven.report.enabled", + "argumentInfo": { + "argumentName": "key", + "formattedValue": "jgiven.report.enabled" + } + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 164101, + "depth": 0, + "parentFailed": false + }, + { + "name": "a Test scenario", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a Test scenario" + } + ], + "status": "PASSED", + "durationInNanos": 36300, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with junit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with junit" + } + ], + "status": "PASSED", + "durationInNanos": 4571533, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report is written to", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report is written to" + }, + { + "value": "/tmp/junit9611904619136189853/junit11940332615471196075", + "argumentInfo": { + "argumentName": "file", + "formattedValue": "/tmp/junit9611904619136189853/junit11940332615471196075" + } + } + ], + "status": "PASSED", + "durationInNanos": 542004, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 7318053 + } + ], + "casesAsTable": false, + "durationInNanos": 7318053, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Report Configuration" + }, + { + "className": "com.tngtech.jgiven.report.json.ReportConfigurationTest", + "testMethodName": "jgiven_report_is_disabled_by_a_system_property", + "description": "jgiven report is disabled by a system property", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a set system property", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a set system property" + }, + { + "value": "jgiven.report.dir", + "argumentInfo": { + "argumentName": "key", + "formattedValue": "jgiven.report.dir" + } + }, + { + "value": "/tmp/junit10598170150625581602/junit5361371470546127836", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "/tmp/junit10598170150625581602/junit5361371470546127836" + } + } + ], + "status": "PASSED", + "durationInNanos": 391403, + "depth": 0, + "parentFailed": false + }, + { + "name": "a set system property", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a set system property" + }, + { + "value": "jgiven.report.enabled", + "argumentInfo": { + "argumentName": "key", + "formattedValue": "jgiven.report.enabled" + } + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 128201, + "depth": 0, + "parentFailed": false + }, + { + "name": "a Test scenario", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a Test scenario" + } + ], + "status": "PASSED", + "durationInNanos": 30000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with junit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with junit" + } + ], + "status": "PASSED", + "durationInNanos": 2136916, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report is not written to", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report is not written to" + }, + { + "value": "/tmp/junit10598170150625581602/junit5361371470546127836", + "argumentInfo": { + "argumentName": "file", + "formattedValue": "/tmp/junit10598170150625581602/junit5361371470546127836" + } + } + ], + "status": "PASSED", + "durationInNanos": 196901, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 3318923 + } + ], + "casesAsTable": false, + "durationInNanos": 3318923, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Report Configuration" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.ReportGeneratorTest", + "name": "Report Generator", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.ReportGeneratorTest", + "testMethodName": "the_exclude_empty_scenarios_option_is_evaluated", + "description": "the exclude empty scenarios option is evaluated", + "tagIds": [], + "explicitParameters": ["excludeEmptyScenarios", "expectedScenarios"], + "derivedParameters": ["excludeEmptyScenarios", "expectedScenarios"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 271902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report has $ scenarios", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report has" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "1" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 4891435, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "1" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 403303, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has no steps", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has no steps" + } + ], + "status": "PASSED", + "durationInNanos": 328503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2571118, + "depth": 0, + "parentFailed": false + }, + { + "name": "the exclude empty scenarios option is set to", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the exclude empty scenarios option is set to" + }, + { + "value": "true", + "argumentInfo": { + "parameterName": "excludeEmptyScenarios", + "argumentName": "excludeEmptyScenarios", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 4529432, + "depth": 0, + "parentFailed": false + }, + { + "name": "reading the report model", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "reading the report model" + } + ], + "status": "PASSED", + "durationInNanos": 32959237, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model contains $ scenarios", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model contains" + }, + { + "value": "0", + "argumentInfo": { + "parameterName": "expectedScenarios", + "argumentName": "nScenarios", + "formattedValue": "0" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 3557626, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["true", "0"], + "derivedArguments": ["true", "0"], + "status": "SUCCESS", + "durationInNanos": 62639251 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["false", "1"], + "derivedArguments": ["false", "1"], + "status": "SUCCESS", + "durationInNanos": 19401140 + } + ], + "casesAsTable": true, + "durationInNanos": 82040391, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Report Generator" + }, + { + "className": "com.tngtech.jgiven.report.ReportGeneratorTest", + "testMethodName": "empty_report_files_are_excluded_when_the_exclude_empty_scenarios_option_is_set", + "description": "empty report files are excluded when the exclude empty scenarios option is set", + "tagIds": [], + "explicitParameters": ["excludeEmptyScenarios", "expectedReports"], + "derivedParameters": ["excludeEmptyScenarios", "expectedReports"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with name", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a report model with name" + }, + { + "value": "non empty report model", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "non empty report model" + } + } + ], + "status": "PASSED", + "durationInNanos": 843506, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report has $ scenarios", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 2889021, + "depth": 0, + "parentFailed": false + }, + { + "name": "a report model with name", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a report model with name" + }, + { + "value": "empty report model", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "empty report model" + } + } + ], + "status": "PASSED", + "durationInNanos": 2228416, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report has $ scenarios", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report has" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "1" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 487604, + "depth": 0, + "parentFailed": false + }, + { + "name": "scenario $ has no steps", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has no steps" + } + ], + "status": "PASSED", + "durationInNanos": 377303, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3361524, + "depth": 0, + "parentFailed": false + }, + { + "name": "the exclude empty scenarios option is set to", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the exclude empty scenarios option is set to" + }, + { + "value": "true", + "argumentInfo": { + "parameterName": "excludeEmptyScenarios", + "argumentName": "excludeEmptyScenarios", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 206701, + "depth": 0, + "parentFailed": false + }, + { + "name": "reading the report model", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "reading the report model" + } + ], + "status": "PASSED", + "durationInNanos": 4373531, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model contains $ reports", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model contains" + }, + { + "value": "1", + "argumentInfo": { + "parameterName": "expectedReports", + "argumentName": "nReports", + "formattedValue": "1" + } + }, + { + "value": "reports" + } + ], + "status": "PASSED", + "durationInNanos": 376102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["true", "1"], + "derivedArguments": ["true", "1"], + "status": "SUCCESS", + "durationInNanos": 18750835 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["false", "2"], + "derivedArguments": ["false", "2"], + "status": "SUCCESS", + "durationInNanos": 10725677 + } + ], + "casesAsTable": true, + "durationInNanos": 29476512, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Report Generator" + } + ] + }, + { + "className": "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", + "name": "Lambda Generating Step", + "scenarios": [ + { + "className": "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", + "testMethodName": "lambda_steps_work", + "description": "lambda steps work", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "some lambda step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "some lambda step" + }, + { + "value": "5", + "argumentInfo": { + "argumentName": "a", + "formattedValue": "5" + } + }, + { + "value": "4", + "argumentInfo": { + "argumentName": "b", + "formattedValue": "4" + } + } + ], + "status": "PASSED", + "durationInNanos": 873706, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1258209 + } + ], + "casesAsTable": false, + "durationInNanos": 1258209, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Lambda Generating Step" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.TestClassWithDescription", + "name": "Test Class With Description", + "description": "Test Description", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.TestClassWithDescription", + "testMethodName": "some_test", + "description": "some test", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 22801, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happens", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "something happens" + } + ], + "status": "PASSED", + "durationInNanos": 33200, + "depth": 0, + "parentFailed": false + }, + { + "name": "something happened", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "something happened" + } + ], + "status": "PASSED", + "durationInNanos": 16400, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 408103 + } + ], + "casesAsTable": false, + "durationInNanos": 408103, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Test Class With Description" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "name": "HTML App", + "description": "Tests against the generated HTML5 App using WebDriver", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "the_statistics_on_the_welcome_page_of_the_HTML5_report_is_correct", + "description": "the statistics on the welcome page of the HTML5 report is correct", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 281402, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report has $ scenarios", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report has" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "3" + } + }, + { + "value": "scenarios" + } + ], + "status": "PASSED", + "durationInNanos": 480203, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has status" + }, + { + "value": "FAILED", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "FAILED" + } + } + ], + "status": "PASSED", + "durationInNanos": 424003, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2636719, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 123612487, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 449212023, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment27.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page statistics line contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page statistics line contains text" + }, + { + "value": "3 Total", + "argumentInfo": { + "argumentName": "text", + "formattedValue": "3 Total" + } + } + ], + "status": "PASSED", + "durationInNanos": 58590120, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page statistics line contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the page statistics line contains text" + }, + { + "value": "2 Successful", + "argumentInfo": { + "argumentName": "text", + "formattedValue": "2 Successful" + } + } + ], + "status": "PASSED", + "durationInNanos": 29216609, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page statistics line contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the page statistics line contains text" + }, + { + "value": "1 Failed", + "argumentInfo": { + "argumentName": "text", + "formattedValue": "1 Failed" + } + } + ], + "status": "PASSED", + "durationInNanos": 26861492, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page statistics line contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the page statistics line contains text" + }, + { + "value": "0 Pending", + "argumentInfo": { + "argumentName": "text", + "formattedValue": "0 Pending" + } + } + ], + "status": "PASSED", + "durationInNanos": 47881043, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 950393019 + } + ], + "casesAsTable": false, + "durationInNanos": 950393019, + "executionStatus": "SUCCESS", + "tags": [{}, {}], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "extended_description_should_handle_every_case_correctly", + "description": "extended description should handle every case correctly", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#236" + ], + "explicitParameters": [ + "description", + "value", + "parameterNames", + "parameterValues", + "expectedValue" + ], + "derivedParameters": ["value", "argumentMap", "expectedValue"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 316302, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$1", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$1" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 585104, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 4645033, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 61152438, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 317361077, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 767152104, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment6.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 22650262, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "1", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "1" + } + } + ], + "status": "PASSED", + "durationInNanos": 46105331, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder with index", + "$1", + "[a, b]", + "[1, 2]", + "1" + ], + "derivedArguments": ["$1", "{a=1, b=2}", "1"], + "status": "SUCCESS", + "durationInNanos": 1372439046, + "description": "Placeholder with index" + }, + { + "caseNr": 2, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 236302, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 460203, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2466618, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51597870, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 304909188, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 689726248, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment7.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 20214045, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "1", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "1" + } + } + ], + "status": "PASSED", + "durationInNanos": 22485061, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder without index", + "$", + "[a, b]", + "[1, 2]", + "1" + ], + "derivedArguments": ["$", "{a=1, b=2}", "1"], + "status": "SUCCESS", + "durationInNanos": 1276945562, + "description": "Placeholder without index" + }, + { + "caseNr": 3, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 161701, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$$", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$$" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 1202809, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2317717, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 58046417, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 326809645, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 673276331, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment8.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13930000, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "$", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "$" + } + } + ], + "status": "PASSED", + "durationInNanos": 15273210, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Escaped placeholder", + "$$", + "[a, b]", + "[1, 2]", + "$" + ], + "derivedArguments": ["$$", "{a=1, b=2}", "$"], + "status": "SUCCESS", + "durationInNanos": 1246449143, + "description": "Escaped placeholder" + }, + { + "caseNr": 4, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 182901, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$2 + $1", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$2 + $1" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 316503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2839020, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51293968, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 299313848, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 675541547, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment9.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 20374246, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "2 + 1", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "2 + 1" + } + } + ], + "status": "PASSED", + "durationInNanos": 16192616, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Multiple placeholders with switch order", + "$2 + $1", + "[a, b]", + "[1, 2]", + "2 + 1" + ], + "derivedArguments": ["$2 + $1", "{a=1, b=2}", "2 + 1"], + "status": "SUCCESS", + "durationInNanos": 1214738015, + "description": "Multiple placeholders with switch order" + }, + { + "caseNr": 5, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 424904, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "a = $1 and b = $2", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "a = $1 and b = $2" + } + }, + { + "value": "{a=1, b=2}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{a=1, b=2}" + } + } + ], + "status": "PASSED", + "durationInNanos": 332302, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2311316, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 60748735, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 298025938, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 670729512, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment10.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 12422390, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "a = 1 and b = 2", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "a = 1 and b = 2" + } + } + ], + "status": "PASSED", + "durationInNanos": 17558626, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders with additional text", + "a = $1 and b = $2", + "[a, b]", + "[1, 2]", + "a = 1 and b = 2" + ], + "derivedArguments": [ + "a = $1 and b = $2", + "{a=1, b=2}", + "a = 1 and b = 2" + ], + "status": "SUCCESS", + "durationInNanos": 1210780487, + "description": "Placeholders with additional text" + }, + { + "caseNr": 6, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 209902, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "int = $int and str = $str and bool = $bool", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "int = $int and str = $str and bool = $bool" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 335702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 4431232, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 55630399, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 305683493, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 675913309, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment11.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13307887, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "int = 1 and str = some string and bool = true", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "int = 1 and str = some string and bool = true" + } + } + ], + "status": "PASSED", + "durationInNanos": 15552702, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders references by argument names in order", + "int = $int and str = $str and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "int = 1 and str = some string and bool = true" + ], + "derivedArguments": [ + "int = $int and str = $str and bool = $bool", + "{int=1, str=some string, bool=true}", + "int = 1 and str = some string and bool = true" + ], + "status": "SUCCESS", + "durationInNanos": 1239772143, + "description": "Placeholders references by argument names in order" + }, + { + "caseNr": 7, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 165201, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "str = $str and int = $int and bool = $bool", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "str = $str and int = $int and bool = $bool" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 321902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2998819, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 45726401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 305293513, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 665369488, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment12.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13382888, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "str = some string and int = 1 and bool = true", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "str = some string and int = 1 and bool = true" + } + } + ], + "status": "PASSED", + "durationInNanos": 15024299, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders references by argument names in mixed order", + "str = $str and int = $int and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "str = some string and int = 1 and bool = true" + ], + "derivedArguments": [ + "str = $str and int = $int and bool = $bool", + "{int=1, str=some string, bool=true}", + "str = some string and int = 1 and bool = true" + ], + "status": "SUCCESS", + "durationInNanos": 1199404609, + "description": "Placeholders references by argument names in mixed order" + }, + { + "caseNr": 8, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 198301, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "str = $str and int = $1 and bool = $bool", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "str = $str and int = $1 and bool = $bool" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 426403, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2485617, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 42869483, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 308050531, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 681006890, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment13.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 15642303, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "str = some string and int = 1 and bool = true", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "str = some string and int = 1 and bool = true" + } + } + ], + "status": "PASSED", + "durationInNanos": 15591102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders references by argument names and enumeration", + "str = $str and int = $1 and bool = $bool", + "[int, str, bool]", + "[1, some string, true]", + "str = some string and int = 1 and bool = true" + ], + "derivedArguments": [ + "str = $str and int = $1 and bool = $bool", + "{int=1, str=some string, bool=true}", + "str = some string and int = 1 and bool = true" + ], + "status": "SUCCESS", + "durationInNanos": 1215565216, + "description": "Placeholders references by argument names and enumeration" + }, + { + "caseNr": 9, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 431703, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "bool = $3 and str = $2 and int = $int", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "bool = $3 and str = $2 and int = $int" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 402503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2770619, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51377239, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 305378814, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 675967358, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment14.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 17210813, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "bool = true and str = some string and int = 1", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "bool = true and str = some string and int = 1" + } + } + ], + "status": "PASSED", + "durationInNanos": 16482208, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholders references by argument names and enumerations ", + "bool = $3 and str = $2 and int = $int", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and str = some string and int = 1" + ], + "derivedArguments": [ + "bool = $3 and str = $2 and int = $int", + "{int=1, str=some string, bool=true}", + "bool = true and str = some string and int = 1" + ], + "status": "SUCCESS", + "durationInNanos": 1218626936, + "description": "Placeholders references by argument names and enumerations " + }, + { + "caseNr": 10, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 178601, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "bool = $bool and int = $ and str = $", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "bool = $bool and int = $ and str = $" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 284001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 4179927, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 46778508, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 314210972, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 677886570, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment15.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13622490, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "bool = true and int = 1 and str = some string", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "bool = true and int = 1 and str = some string" + } + } + ], + "status": "PASSED", + "durationInNanos": 18965425, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder without index mixed with names", + "bool = $bool and int = $ and str = $", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and int = 1 and str = some string" + ], + "derivedArguments": [ + "bool = $bool and int = $ and str = $", + "{int=1, str=some string, bool=true}", + "bool = true and int = 1 and str = some string" + ], + "status": "SUCCESS", + "durationInNanos": 1228791003, + "description": "Placeholder without index mixed with names" + }, + { + "caseNr": 11, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 188601, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "bool = $bool and str = $2 and int = $ and str = $ and bool = $3" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 355003, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2395016, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 48410520, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 311125651, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 686336981, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment16.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 14212602, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "bool = true and str = some string and int = 1 and str = some string and bool = true", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "bool = true and str = some string and int = 1 and str = some string and bool = true" + } + } + ], + "status": "PASSED", + "durationInNanos": 17461625, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder without index mixed with names and index", + "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and str = some string and int = 1 and str = some string and bool = true" + ], + "derivedArguments": [ + "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", + "{int=1, str=some string, bool=true}", + "bool = true and str = some string and int = 1 and str = some string and bool = true" + ], + "status": "SUCCESS", + "durationInNanos": 1241979954, + "description": "Placeholder without index mixed with names and index" + }, + { + "caseNr": 12, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 246002, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "bool = $bool and not known = $unknown and unknown = $10", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "bool = $bool and not known = $unknown and unknown = $10" + } + }, + { + "value": "{int=1, str=some string, bool=true}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1, str=some string, bool=true}" + } + } + ], + "status": "PASSED", + "durationInNanos": 365503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1920713, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 48820750, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 315670462, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 669488097, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment17.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 12621691, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "bool = true and not known = 1 and unknown = some string", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "bool = true and not known = 1 and unknown = some string" + } + } + ], + "status": "PASSED", + "durationInNanos": 15478511, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Placeholder with unknown argument names get erased", + "bool = $bool and not known = $unknown and unknown = $10", + "[int, str, bool]", + "[1, some string, true]", + "bool = true and not known = 1 and unknown = some string" + ], + "derivedArguments": [ + "bool = $bool and not known = $unknown and unknown = $10", + "{int=1, str=some string, bool=true}", + "bool = true and not known = 1 and unknown = some string" + ], + "status": "SUCCESS", + "durationInNanos": 1212468686, + "description": "Placeholder with unknown argument names get erased" + }, + { + "caseNr": 13, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 264802, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has extended description with arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has extended description with arguments" + }, + { + "value": "$]", + "argumentInfo": { + "parameterName": "value", + "argumentName": "description", + "formattedValue": "$]" + } + }, + { + "value": "{int=1}", + "argumentInfo": { + "parameterName": "argumentMap", + "argumentName": "argumentMap", + "formattedValue": "{int=1}" + } + } + ], + "status": "PASSED", + "durationInNanos": 297902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2719919, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51976472, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 327352144, + "depth": 0, + "parentFailed": false + }, + { + "name": "show tooltip of extended description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "show tooltip of extended description" + } + ], + "status": "PASSED", + "durationInNanos": 669318992, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment18.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "has-tip", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "has-tip" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 13244095, + "depth": 0, + "parentFailed": false + }, + { + "name": "attribute $ has value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "attribute" + }, + { + "value": "tooltip-html-unsafe", + "argumentInfo": { + "argumentName": "attribute", + "formattedValue": "tooltip-html-unsafe" + } + }, + { + "value": "has value" + }, + { + "value": "1 ]", + "argumentInfo": { + "parameterName": "expectedValue", + "argumentName": "content", + "formattedValue": "1 ]" + } + } + ], + "status": "PASSED", + "durationInNanos": 14695105, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [ + "Non-Java-Identifier char does trigger a space after a placeholder", + "$]", + "[int]", + "[1]", + "1 ]" + ], + "derivedArguments": ["$]", "{int=1}", "1 ]"], + "status": "SUCCESS", + "durationInNanos": 1228704298, + "description": "Non-Java-Identifier char does trigger a space after a placeholder" + } + ], + "casesAsTable": true, + "durationInNanos": 16106665098, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#236", + "description": "Scenarios of Issue #236" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "timings_greater_than_10_millis_are_displayed", + "description": "timings greater than 10 millis are displayed", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#755" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 166502, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario took $ nanos", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "0", + "argumentInfo": { + "argumentName": "step", + "formattedValue": "0" + } + }, + { + "value": "of scenario took" + }, + { + "value": "11000000", + "argumentInfo": { + "argumentName": "durationInNanos", + "formattedValue": "11000000" + } + }, + { + "value": "nanos" + } + ], + "status": "PASSED", + "durationInNanos": 407902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3631926, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 60227331, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 373285172, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment29.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the $ th element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "index", + "formattedValue": "2" + } + }, + { + "value": "th element with a" + }, + { + "value": "duration", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "duration" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 39887185, + "depth": 0, + "parentFailed": false + }, + { + "name": "has content", + "words": [ + { + "value": "has content" + }, + { + "value": "(11ms)", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "(11ms)" + } + } + ], + "status": "PASSED", + "durationInNanos": 14381103, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 661261734 + } + ], + "casesAsTable": false, + "durationInNanos": 661261734, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#755", + "description": "Scenarios of Issue #755" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "the_configured_title_appears_in_the_generated_HTML_report", + "description": "the configured title appears in the generated HTML report", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 164001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2092815, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed with title", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed with title" + }, + { + "value": "Test Title", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Test Title" + } + } + ], + "status": "PASSED", + "durationInNanos": 49715956, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 281061513, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment26.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the report title is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report title is" + }, + { + "value": "Test Title", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Test Title" + } + } + ], + "status": "PASSED", + "durationInNanos": 40468590, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 540024066 + } + ], + "casesAsTable": false, + "durationInNanos": 540024066, + "executionStatus": "SUCCESS", + "tags": [{}, {}], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "attachments_of_all_cases_appear_in_the_HTML5_report_when_having_a_data_table", + "description": "attachments of all cases appear in the HTML5 report when having a data table", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#191", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 1207509, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has one parameter", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has one parameter" + } + ], + "status": "PASSED", + "durationInNanos": 183301, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 3160522, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has a text attachment", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has a text attachment" + } + ], + "status": "PASSED", + "durationInNanos": 422403, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has a text attachment", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "has a text attachment" + } + ], + "status": "PASSED", + "durationInNanos": 290702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2415218, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 74045430, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 420960014, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment3.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "$ attachment icons exist", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nrIcons", + "formattedValue": "2" + } + }, + { + "value": "attachment icons exist" + } + ], + "status": "PASSED", + "durationInNanos": 19781842, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 700520815 + } + ], + "casesAsTable": false, + "durationInNanos": 700520815, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#191", + "description": "Scenarios of Issue #191" + }, + {} + ], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:611" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "attachments_appear_in_the_HTML5_report", + "description": "attachments appear in the HTML5 report", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 218202, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has a text attachment with content", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has a text attachment with content" + }, + { + "value": "Some Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 492203, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2025415, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 50000158, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 303408873, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment2.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an attachment icon exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an attachment icon exists" + } + ], + "status": "PASSED", + "durationInNanos": 50330961, + "depth": 0, + "parentFailed": false + }, + { + "name": "the content of the attachment referenced by the icon is", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the content of the attachment referenced by the icon is" + }, + { + "value": "Some Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 62382446, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 604436927 + } + ], + "casesAsTable": false, + "durationInNanos": 604436927, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:610" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "newlines_are_detected_in_formatted_values_and_shown_as_multiline_text", + "description": "newlines are detected in formatted values and shown as multiline text", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#226" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 713805, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has a formatted value $ as parameter", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has a formatted value" + }, + { + "value": "Some \n text \n with \n newlines", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "Some \n text \n with \n newlines" + } + }, + { + "value": "as parameter" + } + ], + "status": "PASSED", + "durationInNanos": 380702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2332317, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 52677477, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 314986155, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment21.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "multiline", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "multiline" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 21750056, + "depth": 0, + "parentFailed": false + }, + { + "name": "has content", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "has content" + }, + { + "value": "Some \n text \n with \n newlines", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some \n text \n with \n newlines" + } + } + ], + "status": "PASSED", + "durationInNanos": 25570883, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 550235739 + } + ], + "casesAsTable": false, + "durationInNanos": 550235739, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#226", + "description": "Scenarios of Issue #226" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "tags_with_custom_styles_are_shown_correctly", + "description": "tags with custom styles are shown correctly", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 221501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the first scenario has tag", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the first scenario has tag" + }, + { + "value": "TagWithCustomStyle", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "TagWithCustomStyle" + } + } + ], + "status": "PASSED", + "durationInNanos": 504004, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag has style", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag has style" + }, + { + "value": "background-color: black;", + "argumentInfo": { + "argumentName": "style", + "formattedValue": "background-color: black;" + } + } + ], + "status": "PASSED", + "durationInNanos": 255501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2015314, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 62243245, + "depth": 0, + "parentFailed": false + }, + { + "name": "the All Scenarios page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the All Scenarios page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 295224814, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment25.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page contains tag", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page contains tag" + }, + { + "value": "TagWithCustomStyle", + "argumentInfo": { + "argumentName": "tagName", + "formattedValue": "TagWithCustomStyle" + } + } + ], + "status": "PASSED", + "durationInNanos": 70239303, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag has style", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag has style" + }, + { + "value": "background-color: black;", + "argumentInfo": { + "argumentName": "style", + "formattedValue": "background-color: black;" + } + } + ], + "status": "PASSED", + "durationInNanos": 39512383, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 666160769 + } + ], + "casesAsTable": false, + "durationInNanos": 666160769, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:614" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "navigation_links_of_the_HTML_report_can_be_customized_using_a_custom_JS_file", + "description": "navigation links of the HTML report can be customized using a custom JS file", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#146" + ], + "explicitParameters": ["title", "href"], + "derivedParameters": ["content", "text", "href"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 396502, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1850313, + "depth": 0, + "parentFailed": false + }, + { + "name": "a custom JS file with content", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a custom JS file with content" + }, + { + "value": "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", + "argumentInfo": { + "parameterName": "content", + "argumentName": "content", + "formattedValue": "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});" + } + } + ], + "status": "PASSED", + "durationInNanos": 528704, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 47137237, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 261387171, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment19.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the navigation menu has a link with text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the navigation menu has a link with text" + }, + { + "value": "JGIVEN DOCUMENTATION", + "argumentInfo": { + "parameterName": "text", + "argumentName": "text", + "formattedValue": "JGIVEN DOCUMENTATION" + } + } + ], + "status": "PASSED", + "durationInNanos": 41256496, + "depth": 0, + "parentFailed": false + }, + { + "name": "href", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "href" + }, + { + "value": "http://jgiven.org/docs", + "argumentInfo": { + "parameterName": "href", + "argumentName": "href", + "formattedValue": "http://jgiven.org/docs" + } + } + ], + "status": "PASSED", + "durationInNanos": 16444717, + "depth": 0, + "parentFailed": false + }, + { + "name": "target", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "target" + }, + { + "value": "_blank", + "argumentInfo": { + "argumentName": "target", + "formattedValue": "_blank" + } + } + ], + "status": "PASSED", + "durationInNanos": 15038808, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JGiven Documentation", "http://jgiven.org/docs"], + "derivedArguments": [ + "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", + "JGIVEN DOCUMENTATION", + "http://jgiven.org/docs" + ], + "status": "SUCCESS", + "durationInNanos": 519931923 + }, + { + "caseNr": 2, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 193601, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1778213, + "depth": 0, + "parentFailed": false + }, + { + "name": "a custom JS file with content", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a custom JS file with content" + }, + { + "value": "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", + "argumentInfo": { + "parameterName": "content", + "argumentName": "content", + "formattedValue": "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});" + } + } + ], + "status": "PASSED", + "durationInNanos": 313802, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 53633484, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 306802197, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment20.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the navigation menu has a link with text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the navigation menu has a link with text" + }, + { + "value": "BACK", + "argumentInfo": { + "parameterName": "text", + "argumentName": "text", + "formattedValue": "BACK" + } + } + ], + "status": "PASSED", + "durationInNanos": 38658577, + "depth": 0, + "parentFailed": false + }, + { + "name": "href", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "href" + }, + { + "value": "javascript:window.history.back()", + "argumentInfo": { + "parameterName": "href", + "argumentName": "href", + "formattedValue": "javascript:window.history.back()" + } + } + ], + "status": "PASSED", + "durationInNanos": 13173894, + "depth": 0, + "parentFailed": false + }, + { + "name": "target", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "target" + }, + { + "value": "_blank", + "argumentInfo": { + "argumentName": "target", + "formattedValue": "_blank" + } + } + ], + "status": "PASSED", + "durationInNanos": 13057893, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["Back", "javascript:window.history.back()"], + "derivedArguments": [ + "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", + "BACK", + "javascript:window.history.back()" + ], + "status": "SUCCESS", + "durationInNanos": 555928380 + } + ], + "casesAsTable": true, + "durationInNanos": 1075860303, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#146", + "description": "Scenarios of Issue #146" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "the_welcome_page_of_the_HTML5_report_can_be_opened", + "description": "the welcome page of the HTML5 report can be opened", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 143201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3415424, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 45517525, + "depth": 0, + "parentFailed": false + }, + { + "name": "the index page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the index page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 257244742, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment28.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page title is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page title is" + }, + { + "value": "Welcome", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Welcome" + } + } + ], + "status": "PASSED", + "durationInNanos": 35213152, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 467277746 + } + ], + "casesAsTable": false, + "durationInNanos": 467277746, + "executionStatus": "SUCCESS", + "tags": [{}, {}], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "clicking_on_tag_labels_opens_the_tag_page", + "description": "clicking on tag labels opens the tag page", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTags-Tags", + "com.tngtech.jgiven.tags.Issue-#47" + ], + "explicitParameters": ["prependType", "tagName"], + "derivedParameters": ["prependType", "tagName"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 200202, + "depth": 0, + "parentFailed": false + }, + { + "name": "scenario $ has tag $ with value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has tag" + }, + { + "value": "testtag", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "testtag" + } + }, + { + "value": "with value" + }, + { + "value": "#42", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "#42" + } + } + ], + "status": "PASSED", + "durationInNanos": 293202, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag has prependType set to", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag has prependType set to" + }, + { + "value": "true", + "argumentInfo": { + "parameterName": "prependType", + "argumentName": "prependType", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 255602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 6502846, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 48201245, + "depth": 0, + "parentFailed": false + }, + { + "name": "the All Scenarios page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the All Scenarios page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 298958541, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag with name $ is clicked", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag with name" + }, + { + "value": "testtag-#42", + "argumentInfo": { + "parameterName": "tagName", + "argumentName": "tagName", + "formattedValue": "testtag-#42" + } + }, + { + "value": "is clicked" + } + ], + "status": "PASSED", + "durationInNanos": 138924495, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment4.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page title is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page title is" + }, + { + "value": "testtag-#42", + "argumentInfo": { + "parameterName": "tagName", + "argumentName": "title", + "formattedValue": "testtag-#42" + } + } + ], + "status": "PASSED", + "durationInNanos": 31012722, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["true", "testtag-#42"], + "derivedArguments": ["true", "testtag-#42"], + "status": "SUCCESS", + "durationInNanos": 700055312 + }, + { + "caseNr": 2, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 286602, + "depth": 0, + "parentFailed": false + }, + { + "name": "scenario $ has tag $ with value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has tag" + }, + { + "value": "testtag", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "testtag" + } + }, + { + "value": "with value" + }, + { + "value": "#42", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "#42" + } + } + ], + "status": "PASSED", + "durationInNanos": 382203, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag has prependType set to", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag has prependType set to" + }, + { + "value": "false", + "argumentInfo": { + "parameterName": "prependType", + "argumentName": "prependType", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 193101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2983921, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 51302168, + "depth": 0, + "parentFailed": false + }, + { + "name": "the All Scenarios page is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the All Scenarios page is opened" + } + ], + "status": "PASSED", + "durationInNanos": 298688338, + "depth": 0, + "parentFailed": false + }, + { + "name": "the tag with name $ is clicked", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the tag with name" + }, + { + "value": "#42", + "argumentInfo": { + "parameterName": "tagName", + "argumentName": "tagName", + "formattedValue": "#42" + } + }, + { + "value": "is clicked" + } + ], + "status": "PASSED", + "durationInNanos": 146037746, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment5.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "the page title is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the page title is" + }, + { + "value": "#42", + "argumentInfo": { + "parameterName": "tagName", + "argumentName": "title", + "formattedValue": "#42" + } + } + ], + "status": "PASSED", + "durationInNanos": 30359117, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["false", "#42"], + "derivedArguments": ["false", "#42"], + "status": "SUCCESS", + "durationInNanos": 693897168 + } + ], + "casesAsTable": true, + "durationInNanos": 1393952480, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "Tags" + }, + { + "value": "#47", + "description": "Scenarios of Issue #47" + } + ], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:612" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "showing_thumbnails_can_be_configured", + "description": "showing thumbnails can be configured", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#274" + ], + "explicitParameters": ["thumbOption"], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 306402, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has an image attachment $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has an image attachment" + }, + { + "value": "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lv+h3PtQACgiIiIiIiIiN9Uf6/2RRxo+QnXv6gT5BuHl5eX8ELkdZWVlOT+S05JJykxixuEZLDi+4Kb0pwBQRERERERERG46d6M74X7hdArpRNtqbanlWQuHwUGQOcjVpYlUqAu2C2CHhOwEdpzbwZakLRy0HiTPnnfT+lQAKCIiIiIiIiIiUokZXV2AiIiIiIiIiIiI3DwKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQSUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQMDofDYbVasVqt5Ofnu7oeERERERERERERuUEWiwU/Pz/8/PwwW61WMjIyCr8wm11dm4iIiIiIiIiIiNyggoICMjIyADCmpqbi4+Oj8E9ERERERERERKSSMJvN+Pj4YLVaMRYUFCj8ExERERERERERqWTMZjP5+fnaBERERERERERERKQyUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQUAIqIiIiIiIiIiFRiCgBFREREREREREQqMQWAIiIiIiIiIiIilZgCQBERERERERERkUrM7OoCSmvTpk1cuHABu91OVlYWPj4+ADRp0oSGDRuSnZ3Njz/+SEREBM2aNXPe53A4OHLkCIcPH3YeCwsLo1WrVphMJgB+/fVXTp48idFoJD8/n9q1a9OiRYsKfb7Dhw87a8zIyMDLywuj0UhwcDARERH88MMPVKlSpdg9NWvWpE2bNlitVnbu3El+fj52ux2z2UyHDh3w8/Nj8eLFAOTl5WG32/Hw8ACgRYsW7Nu3D4Ds7GxMJhNubm4YDAb69+8PwJIlS/D29qZnz57F+k1MTGTXrl3k5uZiNBrx9/enbdu2eHt739R3dCVTp05l9OjR5OXl8e233zJq1CjnuZ9++omJEyeybt06AE6dOsWHH35Ieno6RqOR559/vsL/X4uIiIiIiIiIVKQKDwAdDgcbN26kW7du13Vf586dAbBaraxbt47777+/2Pm4uDj8/PyIj48vFgDu27eP8+fPc8899+Dh4UFBQQFbt25l9+7dtG3blqSkJE6dOkWfPn2cAeC6desICwsjICCgTM+4c+dOGjVqVCKwu5rGjRvTuHFjABYsWECvXr2cIWd2djbu7u4lnrnI9u3bCQ8Pp2bNms53sX//fjp37uy858iRI1y4cIHIyEjnfXXr1gUgKiqK0NBQ6tev7zx3/vx57HY7ycnJZGVl4eXlBUBSUhLR0dHcdddd+Pv7OwPW9evX07dv31I/72+V5Z0Vyc/Px2KxsG/fPuc7BDh37hzLli0rFkxOmjSJvn37cs8997Br1y4++ugjZsyYUea6RURERERERERudRUeAFqt1jKFPNcSHx9Phw4d2LJlC+fPn6datWo4HA4OHjxIv379nCPfzGYzkZGRGAwGoHBknMPhwOFwAGCxWLjnnnvKXIfD4SAzM/OmPOOV5ObmOusHqF+/frEwryzi4uKoW7cu6enpxMfH07x5c6BwtGRERAT+/v4AGAwGGjdufEP9lfWd7dq1i1WrVnHo0CEmTZpEbGwsNWrUoFatWjRo0IDJkyfz7LPP8tprrznvGTdunLP24OBg0tPTy1y3iIiIiIiIiMjvQYUHgEXhXHlKSkrC4XAQEhJCvXr1iI+Pp1q1amRkZGCxWEpMTTUa/2/pw7CwMI4fP86PP/5IjRo1CAkJoWbNmri5uZWplosXL+Ln53dDz3O92rRpw+bNmzl48CAhISGEhYURGBhY5vYKCgo4efIkffv2JT09ne3btzsDQKvVetm2zeayfyuV9Z21bt0aT09PwsPDGTBgAJMmTeKVV14BYNGiRdSrV48mTZoUu+fS2mfNmsWAAQPKXLeIiIiIiIiIyO9BhQeAFy5coFWrVuXaZtFoNYB69erx008/0bZtWwwGA3a73XldSkoKGzZsAMBmszFo0CCMRiNdu3YlMzOTxMRETp8+TUxMDL179y5TKJWcnFzuAScUjlRcsmRJsWPt2rUjNDSU0NBQHnjgAc6fP09SUpJzSm+HDh3K1NeJEycICAjAx8cHHx8f7HY7586dIzg4uMQ7XbJkCTabDZvNRvfu3QkKCrru/m7kncXHxzv/3xc5e/YsP/30Ex9//PFl77HZbHz00UfYbDaGDx9epn5FRERERERERH4vKjQAzM/Pp6CgwDkdtzzk5eWRkJCAt7c3CQkJANjtdhISEqhTpw4OhwOr1Yqfnx8BAQEMHDgQgHnz5gGFYZDD4cDb29s5dTYmJobjx48TERFx3fUkJydTp06dcnu+Im5ubs7NOX4rJycHDw8PqlevTvXq1QkPD2fBggW0bdvWudHJ9YiLiyMrK4tly5YBhe8oPj6e4OBg/P39OX/+vHMabVFNv/zyS7Fg8HqU9Z39+OOPLF26lIYNG7JixQoOHz7MpEmTqFGjBllZWbzwwgtA4aYqo0eP5qOPPsLNzY1//vOf1KpViyeffNI5FVxEREREREREpLKq0ADwwoULZd5Y40qOHz9O9erVueuuu4odi42NpW7dujRv3pzo6Gi6du2Kl5enOOPyAAAgAElEQVQXDoeDhIQEZ/CzZ88e8vLy6NChA0ajEbvdjtVqpVatWtddS9F6gmWdPlwWOTk5LF26lF69ejlDudTUVDw8PMoU/lmtVtLT0xk4cKDz/szMTJYvX067du1o0aIF69evx9/f3zlqLyUlBavVisViue7+buSdPfDAA8THx/PKK6+wd+9eWrVqRZ8+fQAYNmyY87r777+fTz/9FIBvv/2WkJAQnnrqqevuT0RERERERETk96hCA8Dk5GSqV69erm3GxcWVGKl3xx13sHPnTjIyMmjSpAkWi4U1a9bgcDgwGAwEBgY6N/qIiIggJiaG5cuXYzQacTgc1KxZs0ybWly4cOGG1t67mstNAfb29qZnz5506dKFrVu3UlBQgNFoxGKxXPcuy0Xi4uKoV69esfDQ29ub4OBgTp48Sb169ejatSsxMTFkZWVhMpnw8vKiY8eOVK1a9br7u5F3ZrPZnOs5Hjp0iI4dO17znnnz5lGlShW2bt3qPPaf//ynxDqRIiIiIiIiIiKVhSE2NtYREhJSIZ1t2LCBzp07l2lk2u/B3r17b3gDjtuN3pmIiIiIiIiIyM2TmJhYsQGgiIiIiIiIiIiIVJzExESMri5CREREREREREREbh4FgCIiIiIiIiIiIpWYAkAREREREREREZFKTAGgiIiIiIiIiIhIJaYAUEREREREREREpBJTACgiIiIiIiIiIlKJKQAUERERERERERGpxIxms5mCggJX1yEiIiIiIiIiIiLlqKCgAIvFgtHPz4+MjAyFgCIiIiIiIiIiIpVEQUEBGRkZ+Pn5Yfb39wfAarWSn5/v4tJERERERERERETkRlksFnx9ffHz88OQl5fncHVBIlI2CQkJ1KtXz9VliIiIiIiIiMgtTJuAiIiIiIiIiIiIVGIKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQS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2rdvz6ZNm/jyyy9JTEzkiSeecNm7ExERERERqUxybDmM3TqWt3a+Ra4t19XlCC4aAdi0aVO6d+/O+vXree+99/Dw8KBevXpERETQo0ePYmv4lZbdbiciIoKoqCgOHDhAnTp1OHr0KAMHDrzsril2u52WLVuyceNGsrOz2b9/P/n5+URERPDLL78Uu/bIkSOcO3eOO++8Ezc3N9q1a8fy5cvZs2cPbdu2LXbt8ePHmTZtGlA4HfHw4cM4HI5iUyD79u3L+vXrWbx4MQUFBTRt2pSOHTte9zOL3EqqVavG66+/XuJ48+bNad68+VXvbdeuHe3atbvqNf369aNfv37Fjo0ePbrY1wEBAYwaNarEva1bt6Z169bOr00mEw8//DAPP/yw81h+fj65ubl4eHhctQ4REREREREpnUXHFrEneQ+TOk2idpXari7ntuaSEYAATz/9NBMnTmTYsGG0aNGCY8eOMXv2bMaOHYvVai1TmxEREZhMJmJiYtizZw8Oh6NEQHepNm3aUFBQwN69e51TC8PDw0tct3nzZgDaty/c1rpDhw7Fjl/q4sWLREdHEx0dzfbt20lLS2PkyJEMGzbMeY3FYmH48OEUFBRgMBh45JFHyvS8IlI2a9asYc6cOcWOxcbGAlCjRg1XlCQiIiIiIlIpHU8/zog1I9iWtM3VpdzWXLYLMBSuw1ezZuGikHl5eUyZMoU9e/awadMm+vbti8VSuGtMVlZWsc0xUlNTAUpMmS0K8H799VesViuBgYHUrVv3iv03b94cDw8P9u/fz+7du2nVqlWJzUfsdrtzc4Bp06Y5R/dB4RTjnJycYiOGWrduzV/+8hcApk6dytatW7l48WKJvoumGnt6elKrVq1rvCkRKU/u7u5ER0fjcDiIiIjAarWyYsUK/P39admypavLExERERERqVSybdk8H/U8EyMn0r1G92vfIOXOJSMAv/32W5588kk2bNjgPObm5uYceVO0W2fR15del5KS4pzSW6dOnRJtt2vXjjNnzrB3796rjv4r6rNly5Zs3ryZtLS0y16/b98+0tLSqF69OnfddZfzo1atWuTl5V12enGRoUOHYjabWbJkCefOnbtqLSJScbp27crgwYM5duwYM2bMYPHixdSpU4fnnntOa3GKiIiIiIjcBAWOAv665a+sOLnC1aXcllwyArB58+asXLmS6dOns2XLFgICAkhOTubXX3/FZDLRqlUrAAYPHsz+/ftZvnw5v/76K35+fhw9epTs7GyaNWt22XXF2rZty9dff01OTs41A8Ci67dt24bFYiEiIgKbzVbsfNE03379+tGzZ0/n8V27dvHhhx+yefNmOnfufNm2g4OD6dOnD8uWLWPmzJm8/PLLpX5HInJzdenShS5duri6DBERERERkduG3WFn/LbxZBdk82C9B11dzm3FJSMAW7duzauvvkqzZs04ceIEGzdu5MSJE0RERPD66687pwXXr1+fcePG0bJlSy5evMjhw4cJCgpi6NCh/OUvf8FgMJRou2jar5eXl3OX0WvVYjQandOBL5WXl8eOHTswm83Odf+KtGzZEl9fX/bu3UtaWtoV2x84cCBVqlRh586d7NmzpzSvR0RERERERESk0no35l3WnFrj6jJuK4a8vDyHq4sQkbJJSEigXr16ri5DREREREREbgHt5rdzdQmlZjaamdZlGu2D27u6lNuCy3YBFhERERERERGR21OBvYCXN73M4dTDri7ltqAAUEREREREREREKly2LZsxG8dwKuOUq0up9BQAioiIiIiIiIiIS6TmpvJ81PPk2nJdXUqlpgBQRERERERERERc5mTGSd7f/b6ry6jUzK4uQEREREREREREbtymBzaRmpdKam4q1jwrqbmFn6fkprDt3Db2Xtjr6hKvaNGxRXQM7sg9te5xdSmVknYBFvkd0y7AIiIiIiIiUlqpuamsO72OX878wvZz28mz57m6pGI8TB58f8/31PCu4epSKh0FgCK/YwoARUREREREpCyyC7KJOhvF4uOL2ZK0xdXlOIVXDWfm3TNdXUalowBQ5HdMAaCIiIiIiIjcqH0X9vHZgc+ITop2dSkAjG42mpFNRrq6jEpFAaDI75gCQBERERERESkv+y7s438H/ufyEYEeJg8W3ruQII8gl9ZRmWgXYBERERERERERoUVgC6Z1ncaHkR/i6+brsjpybDlM3jPZZf1XRhoBKALY7Xby8/MpKChwflzKbDY7PywWC0bjrZGdawSgiIiIiIiI3AzJOcn8bcvf2H1ht8tq+F/3/9GmWhuX9V+ZKACU215ubi6ZmZk4HKX7UTAYDPj4+ODm5naTK7s2BYAiIiIiIiJys9gddr4+/DWfHfiMAnvBtW8oZ/V86zG712xMRlOF913Z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atRA+/btcffuXRw8eBBNmzYVNvfQarV6UxJjYmKwatUqmJubY/HixcJmI3Xr1oWZmRl0Oh3y8vKEXYiJiIiIiIiIiIhMRZULAHU6HS5dugQA+OSTT1CrVi3hmFwux9GjR/Hnn3+ib9++eOONNxASEoIHDx5gzpw5qF+/PiwtLfHkyROkp6dDLpejdevWqFmzJmxsbPDgwQPMmDEDTZo0gUgkwt27d5GXl4e2bdsy/CMiIiIiIiIiIpNU5VKv+/fvIykpCQ0aNNAL/wCgS5cuAP7eIEQsFmPOnDn4z3/+A2dnZzx+/Bj37t2Dra0t3n33XaxYsQKNGzeGSCTCrFmz0K9fP0ilUoSFhSE0NBSWlpbo378/Pvnkk0p/nURERERERERERJVBpFardaWfRkRVUVRUFDfgICIiIiIiIqISVbkRgERERERERERERFRxGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMLGxCyAi05KQlYCxR8Yi6GEQcjQ5JZ4rl8jRt3FffN/3e9jL7CupQqooOp0OmZmZkEgksLS0NHY51Vp2djZCQ0Nx//59pKSkAAAcHR3RuHFjdOzYEVZWVkaukIiIiIiIqjORWq3WGbuI8lizZg3Gjx8PmUyGw4cPo169emjVqpXeOZcvX8aGDRswc+ZMtGjRAgCgUqmwZ88eXL16FSqVCvXq1cMHH3wADw8PY7wMogoRFRWFBg0aGLsMPQN2D8DBewfLdc3I1iPxa/9fiz2elpaGGTNm4MyZMzh8+DCaN29eapuhoaH44YcfcOvWLaSmpsLa2hrt27fH+PHj0aZNm3LVVx18//33+PHHH6HVanH9+vVSz4+MjMTbb7+N3bt3w9vbu1x9PXr0CKGhoXj06BHy8vIAADKZDC1btoSPjw8cHR1LbSM3NxcnT57E3bt3oVKp4O7ujjfffBPu7u7FXrNr1y5ERkYWe3zy5Mll6jshIQHfffcdPvzwQ9SpUwd79uyBUqnEyJEjS722JBs2bEC9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AAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABdbg894AAAD4W5g0Y1b2+sktqU7y9T3+JcMvODVJsrKiMtf+dlTuHzMpf567IJs1bpSu222dH33jgByya8ckyR3PT8ivx07OiB/9+998O99+++386Ec/ykMPPVTr8tdeey3XXntt7rnnnlxzzTWZNGlSkqSqqipJUlZW87f8Y445JnvttVd+9KMf5fDDD89pp51Waz2jRo3KkCFD0rdv3+y///558sknM3HixFx++eUbtX0XXXRRli9fnoEDB5bu869typQpGTJkSLp165YzzzxzvcuNHDkyTzzxRJYsWZJtt902Z511Vrbaaqu1lqusrMx//ud/Zty4camqqspuu+2W73//+2nUqFGd27H6WDRoUPMxqUWLFtlmm21y2GGHpWfPnhu1L2+88UaaNWuWbbfddqOW/7/if7Nfffr0yTnnnJMuXbrUunzw4MHZZpttcuyxx/6vt+/YQffniVdeT2V1dcZfcXa6f2mbJMkDYydn0O/H5L9nzk5ZvXrpuGXbnHnQl9PnkL2TJG/NnpfOFw5MxbAr/9fbsLGefvrp3HPPPenTp0969+693uUef/zx/P73v8/y5cvToUOHnH766dlhhx3WuezGvoaS5A9/+EN++9vfZvHixWnfvn1OO+207Ljjjmut74orrshll11WOm7Tp0/PXXfdlTlz5qR169Y5+eST061btw3u71VXXZXXXnst9erVK112/vnnp1OnTunTp0+tZaurq7PbbrvlkksuyYoVK3Lvvfdm/PjxWbFiRXr37p3TTz899evXr3Wbhx56KA8//PBa76F/baecckoqKipSr169NGnSJFtuuWV69uyZI444ovSe8deyvuO5atWqDBs2LOPGjcuqVavSuXPnnHnmmWnduvUG11nXca/rvXXq1KkZNmxYZs2alRYtWuTYY4/NgQcemCR55ZVX8sADD2Tu3Llp3bp1jjvuuOy7774b3Jbq6uo88MADefbZZ1NRUZEePXrkjDPOSMOGDddatq77nzJlSu69997MmjUrm2++ec4444x07tx5k/d/+PDhGTFiRJKkdevWOe2007L99tuvd/vX93vx2muvzaRJk3LbbbelZcuWtW7Tv3//VFdX5+abb97g4/O3IgACAFBIe2y7VSqGXZmrHn8+f3x7RunyYwbdl5nzFuaX3zs6e22/TVZUVOSR8a/l6IH35qkfnJoDOn8pJ/XaI8d+uUsda//7+tGPflT67+uvvz7bb799jj/++NJlb7/9dlq3bp0xY8bk5JNPrvVh9IUXXkibNm0+0/1OmzYtrVu3TpMmTTJx4sR07979s+/Eerzwwgt55pln1vuhbbV33nkn9913Xy677LJ88YtfzMMPP5xBgwblmmuuWWvZp59+OtOnT88NN9yQhg0b5oYbbshDDz2Uk08+eaO26f7770+SLFy4MOPHj8/tt9+euXPn5sgjj9zgbUeOHJmuXbsWLgD+o+/XI+eemCRpcOqlpcsGPDU61w0flZtP/UYO261TNmvcKKOn/Tnfv+uJzFtSnkuPPihf+kKbfHDzxX+37bz11ltTVVWVrbfeus7lxo4dmxEjRuTKK69M27Zt8+ijj+amm25aZzzY2NdQkkyePDkPPvhgfvrTn2abbbbJE088kZtuuim/+MUvSsssX748d955Z62otHLlytxwww05+eSTs99++2Xy5Mm56aabMmjQoLRq1arO+ywvL88FF1ywzveP1a+11a677rrss88+SZLf/OY3ef/993PjjTemsrIyV199dX7729/m6KOPLi3/5z//OS+99NIG9/uv5Sc/+Um6dOmSZcuWZdq0aRk2bFjeeOONXHzxX+85VNfxfPjhh/Pee+/l5z//eRo2bJhBgwbl3nvvTd++fetcZ13Hva731sWLF+e6667LWWedlX322SdTp07NVVddlZ122imNGjXKoEGDctFFF2XXXXfNlClT8rOf/Sw77rhj2rVrV+f2PP3005kyZUpuvPHGNGjQIEOGDMmkSZPWeo7Udf9NmzbNgAED0q9fv+y1114ZPXp0BgwYkFtuuSVNmjTZ6P2fPHlyhg8fngEDBqRFixZ57rnncv3112fo0KHr3PYN/V5s1apVRo8enSOOOKJ02RtvvJEVK1Zs8I9Qf2sCIAAA/zRGvvZ2Rkx5O2/9/Px0aFvzobVZ44b53oHd89Xd/iVbt26RJLlvzKT8euzk/OCI/fLvv3wk7w++OGX/M3rl0odHZOoHc/LIuSfmxWnv5YL7f5cFS5elflm9DDrlyBy2W6e8+/GCdPvJLbn63w7N05PfzFuz5+XQXTtl0ClHrHfb/reaNm2aNm3aZOLEienRo0eSZN68eZk5c+ZnjjYjRozIvvvum+bNm+cPf/hDrQ86AwcOTMuWLfPxxx9nyZIlqaqqyjnnnJP27dvXed2nbbfddrn88svz4IMPZunSpevdljFjxmSfffbJdtttl6Rm5OOTTz6Zjz76aK2Y8uKLL+aoo45K8+bNkyTHHntsbrrppo0OgKu1atUqhxxySFq2bJnBgwfnoIMOymabbZYJEybk17/+dcrLy9OwYcOcdNJJ6dGjRx577LGMGTMmkydPzgcffJDjjz8+jz76aJ5//vmsWrUqm2++ec4666x06NBhrft66623ctttt2X58uXp1KlTGjdunFatWuXb3/52Vq1alfvuuy8TJ05MRUVFunTpkjPOOCONGjXKkCFD0rp168ybNy+ffPJJFi1alH79+pVGr4wYMSLDhw9PRUVF2rZtm759+6Zdu3Z59tlnM2HChFRUVKSysjKXXnrpJu3X+ta7+j4fe+yxNGrUKPvss0+tkV+ftnDhwvz0pz/NzJkzs8UWW6Rv375p06ZNzjzzzFx77bX54he/mKTmA/T111+f22+/faNGWy1atiKXP/ps/vP7x+a4HruWLj9010754+VnpVmjmpFG7368IJ0vHJh5t/44W55zTV69um92bv+FJDXvFycOfSgfDL44sxYuzjl3/zavf/hxVlVWps8he+fCI/ZLkmx33oBc8PV98+zUd/LBgkVp1bRxHj3vpLRs2nit7Tr00EPTsWPHXHLJJXVu/5Zbbpn+/ftniy22SJL07t07Dz30UCoqKtba/419DSVJy5Ytc+6555aeg/vuu2/uv//+LF++vBRN7r333vTu3Tsvv/xy6XZTpkxJs2bNsv/++ydJ9thjj3Ts2DHjx4/PIYccst7nTpIsXbo0zZo1q3O7kproWV5eXrqPiRMn5oQTTijd9qijjsqjjz5aCoAVFRUZOnRoTj755AwYMGC96509e3buuOOOzJ49O2VlZenevXtOOOGENGjQIH369MmRRx6ZKVOmZP78+WnWrFl+8IMfbHB7mzZtmq5du6ZDhw45//zz86c//Sldu3bNvHnzcuedd+b9999PZWVlvvrVr+aoo45KksyaNSu33XZbZsyYkZYtW+bb3/526TFaU13Hc+edd07v3r1L72177713fve7323wsa3ruNf13tq0adN897vfLUXZXXbZJW3bts1HH32U7bffPn379s2uu9a8vnbddde0aNEis2bN2mAAfOaZZ/Kd73ynNEruoosuKl135513ZunSpenfv38qKyvXe/8rV65Mu3btSr+X9t9//zz22GOZPHlyevToUWs9de3/jBkz0rFjx7RoUfP7f/fdd88vfvGLLFu2LE2bNl1r2+v6vZgk3bp1y3PPPVcrAL7wwgvZbbfdMm3atA0eq78l5wAEAOCfxrNT38m+O25Xin9r+uLmrdKgfu3/PT6kS8dUVlXnpenvlS77zctTcsq+XTN/ybJ8c+B9+cnRB2b6Df+Rh/p9O8cNvj+zFy5Jg7KyLCxfnnr1kifPPzljL/t+fvnc+Ez7aO7fbN+qqqqy33775bnnnitdNmrUqPTq1avOALM+5eXlmTRpUnr27JmuXbtmxowZmT9/fun6srKyTJgwIf3798+VV16ZvfbaK3fccccGr/u07bfffqOCzgcffJBtttmm9HODBg3Srl27fPDBB+tcds3Y2L59+yxYsCDLli3b6P1fU48ePdK4ceNMmzYtK1asyMCBA3Paaadl6NChOemkk3LzzTensrIy3/zmN7Pddtvl1FNPzfHHH5+pU6dm+PDhueqqq/KLX/wiHTt2zN13373O+xg8eHAOPfTQ3HzzzTn00EPz4osvlqY6Pv7443n33Xdz/fXXZ8iQIamqqsp9992XJKlfv37GjRuXM888M5dddlm6d++exx9/PEnNNPIHHnggl1xySYYMGZL9998/119/fenxmzJlSo4++uhceumlm7Rfda137ty5ueuuu3LxxRfnpptuyuabb5558+at97H94x//mLPPPju//OUvs+OOO+auu+7KZpttlu7du+f5558vLTdmzJj07t17o6davvz2zFRUVuWYdYzkbddyszRvUnskTqtmTXL4Hjvl4XFTSpc99PJ/59v77J4G9ctyyq0PZ8ett8i0Aefl1av75u5RE/PYhKk1j2VZWf749sw8dt6JGX/F2Vm2qiIPjJ20zu3q2LHjRm3/DjvsUJqeWF5enqeeeip77rnnOvd/Y19Dq5fdfffdSz+/8sor6dSpUyn+TZ06NdOnT681yi5JPvzww1qvv6TmdfXhhx/W+dxJagLgU089lX79+qV///558MEHS9et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dtxxx+Xuu+/OD37wg7Rq1SoHHHBA3njjjVRVVWXo0KH53ve+lyZNmtQ57XnhwoWpX79+rcesRYsWWbRoUennNUd6rfn62VizZ89O586dS9ux5vTuysrKbLfddlm8eHHKyspq3ddnDUIVFRW57bbbMm/evPy///f/1vkeuD7rOu4b8976xhtvZNCgQTnllFPSq1evWssefPDBOfDAA/P6669n8ODBueCCC7LTTjutdxtWH4uvfe1radSoURo1apTDDjss48aNq/WcWNO67r9Vq1a54IILct999+VXv/pVevTokZ133jmbbbbZJu3/6NGj8/LLL+f2229Pq1at8qc//SlXXXVVBg4cuNZ718b8XkySAw88MJdccklOOeWUvPDCCznkkEPWu01/TwIgAACF8uqfP8r0WXPzrZ67JamJci2a1ISfr+7+L/nZky9k+qy52XGrmsCyZaua/8Ff8wP8mvbp9MXUL6uX8e98kN+8PCW/OvOYJMk2bVpmtw5bZtwVZ691m/fnb/ron09/i2Nd0aQuBx54YIYNG5a5c+d+5tF/06dPz8qVKzNs2LBal//whz/M5MmT07Vr1ySp9SF68eLFqV+/fukDbl3XfRYdOnSoNd135cqVmT179jrPp9ehQ4e8//77pfg5c+bMbL755p/5/keNGlUKUK+++mqeeOKJXHPNNWnbtm3Ky8vX+ubl1R5++OF89NFHueKKK9KoUaOMHz8+v/rVr9ZabrPNNktFRUVWrlxZGokzf/780rdwtm3bNieeeOJGfePqmtq2bZtDDjlknaOkRo0aVWtq+KbsV13rnTNnTik4JTWxYvHixevdxiVLlpT+e3UIXX2c9t9//7z00ktp0qTJekf/DXnmjzmm+y5p36ZlVlZUpqq6Oi2aNM4u7duleZNGufelSTl9/5rHrc1mNetd9anpp6s1adggR3ffOY+On5q3Zs/Lyb1rnufbtKkJNa9d1z+bNf77nMR/0qRJad68eTp27JgmTZrksMMOy0MPPZR33313rW9VmMSbAAAKw0lEQVRTrsvVV19dinKrg+/w4cMzevToXHXVVbXed8aNG5eysrKMGjUqSc3ouYEDB+bYY49Nhw4d8swzz9Ra98yZM3PAAQfU+dxZuXJl3nrrrVrTdFetWlVrhOGCBQvy7rvvZs8996y1/iZNmuSss84q/Txy5MjssMMOmTlzZubMmZNbb60Jsqv3r0+fPrngggtqTbNu3bp1Kisrs3Tp0lIYWrRo0UZ9a+7G+PDDDzNt2rSceOKJadu2bZLkxhtvXCvKLVy4MFVVVVmyZEnpvf2jjz5KmzZtNingVVVVZeDAgWnatGkuueSSTfr24fUd9w29t66Ob//xH/9RK8LPmDEjc+bMSffu3VO/fv3suuuu6dy5cyZNmlRnAGzQoEG22GKLWu8LVVVV6x0pvL77T2pGm67+Y8Hqc80ec8wxm7T/r776arp37176A0/Xrl1Tv379vPPOO7WmDW/s78Uk2WqrrdKhQ4eMHj067777brp161aaEvx5MgUYAIBCmb+0PGfe+Xgmz5iVOYuW5smJr2e/nWpCUK9/2TbH9eiSI24YlhFT3s6S5SuzaNmK/Hrs5Pz4N8+k2/Zrf0lFvXr1ckLP3TPgqdGprKoqjfD7SpeOeefj+Xn+9XeTJAuWLsspv/hN3pkzf611/D116dIl5eXlefnll7Pvvvt+pnWMGDFirVEeSc0U45EjR5Z+njhxYmk02ahRo9Kly1+mQdZ13caaPn16XnutZkrmvvvum7Fjx+add95JZWVlHn744XTq1ClbbrllkuTll18uTW094IAD8uSTT2bRokVZtmxZHnnkkRxwwAFJauLDyJEja0Wq9Vm6dGmee+65DBs2LKecckoaN26cBQsWpFWrVmndunWqqqry5JNPpqysrDTKsEGDBqWRQAsWLMjWW2+dRo0aZenSpXn22WezcuXKtaZCb7HFFmnbtm3p3GOvv/56rQ+Le++9d55++unS1LbRo0fnkUce2eD29+zZMy+99FLpHFUzZszIwIED1zr/2upt3dj9qmu9nTt3znvvvZf33qs5b+Yf/vCHOrdxwoQJtZ4na57P7MADD8yECRPqnP774B//O5c/+myWr6rIr0a9kq1bt0jHdm3TrHHDXHfCV3PuPcNz5/OvZM6ipVmxqiKjp/05Jw59KHtut+5v4T1xnz3y1J+m5cmJr+ekXjVhoW3zpjlo5y/lxt/VHJ+Kyqpc8tAf8ttX36hz3zbVms/3N998M7feemvpMR43blyWL1+eDh06bNJzePUxbd26dSlqPPXUU7n00kvXimC33nprhg4dWvqnQ4cOOe+88/K1r30tu+66a1asWJFnn302VVVVmTBhQmbMmJEePXrU+dypqqrK9ddfn5EjR6a6ujpz5szJ73//++y9996l+3333XfXGegfffTRDB06NCtWrMjHH3+cxx9/PAcffHC233773HXXXaXtXH26hKFDh651jsXWrVtnxx13LE0vLS8vz3PPPbfOL9/YFCtXrsyUKVNy3XXXpVevXtlxxx3TvHnzdOnSJcOHD09SM/rv/vvvz4QJE9KqVavSdqye/nrxxRdv1DFc0+9+97usXLlyndO0P/7447z44ovrvF1dx72u99bly5dn8ODBOe+889aKb0uWLMnNN9+c6dOnJ6mJoW+88Ubp9AXTp08vnRvx077yla/kkUceyfLly7No0aKMHDmyFIDfe++90vtfXfdfXl6ec845J2+99Vbpede0adPScmuup67933bbbTNp0qTSe91bb72VpUuXrvXHpY39vbjaQQcdlPvvvz/77LPPJoXav6V/jK0AAIC/koO7dMzF39g/h133q6ysqMzxe++WMw76y7f03Xv2v+XG372Uc+8ZnrfnzE/TRg3Tbfv2+fmJX8+/7b3uk6mf2GuP7H7Jzbn06L+MqGvdrEme+I+Tc/59v8u8JeUpq1cvp+3fLTu0a/uZRgD+taw+/9A777yz3lEuU6dOzQknnFDrsmuvvTbbb799ysvLM2bMmFx99dVr3W6fffbJr3/96yxcWLN/e+21V4YMGZKPPvoorVq1Sv/+/UvL1nXdmi677LK8+eabpWl3zz//fHbddddccsklGT16dJYuXZouXbpk2223zemnn56BAwdm8eLF2WGHHWqt88EHH8wRRxyR9u3b55BDDimdYL66ujrdunXLsccemyRZtmxZbrvttnTp0mW9UylPPPHEJDXTAVd/0+Xqb3rs2bNnXnzxxdI3Sx5//PHZa6+98rOf/SwDBgxIz549M2zYsLz55ps58sgjM3jw4Jx//vlp27ZtTjrppPz85z/P1VdfnZ/85Cel+ysrK8vZZ5+du+66K0888UR23nnn9OjRoxRM//Vf/zX3339/zj///CQ1wfB73/veOrd9TbvsskuOPfbYXHnllamsrEzjxo3zrW99q/TlImvalP0655xz1rverbbaKqeeemquueaaNGjQIPvuu2/at2+/zmmVVVVV6dWrV4YMGZJZs2alZcuW6devX+n6Dh06pH379qX1rsudZ3wz3/3lY9n8rKuzQ7s2+XXfb5W+zOf7X+mRrVq1yICnRufce2uizL9suXlO7LVH+h22zzrXd8iuHfOd22q+8GP7L7QpXT7srOPS5+7fptMFN6a6ujr77rRdDtp5h3WuY31WrVqV73znO0lqRkYOGTIkt9xyS44//vgcffTRtZ7vRx99dJYsWZJLLrkky5cvzxZbbJFzzz03rVq1yqJFi2o9h+t6DX3aiBEjMn/+/Jx55pm1Lr/iiivq/PKGBg0a5MILL8ydd96ZYcOG5Qtf+EIuuOCCNG/efIPPnR/+8Ie5++67c88996R58+Y56KCDak2JnDt3bmn03JoOO+yw3HzzzTnzzDPTuHHjHHHEEesMMBvSv3//3HHHHTnvvPOS1LyPfdbR0VdddVXpddmuXbscfPDBOfLII0vX9+3bN3fccUf69euX6urqdO7cuRS1zz333AwZMiRPP/10WrRokT59+qxzv+s6ns8880xmzZpVa/Rto0aNcvfdd+fdd9/NsGHD1vmHnw0d9/W9t77yyiuZO3dufvrTn9a63QknnJCjjjoqp556am655ZYsXLgwzZo1y9e+9rXSe+WYMWOycOHCdX5JyTe/+c0sXLgwffr0ScOGDdO7d+/S+RFHjBhR+vbeDd3/t771rdxwww0pLy/PDjvskIsuuqg0knDN9dS1/0cccUTmz5+fCy+8MPXq1Uvjxo1z7rnn1jo2m/J7cc3L77rrrs/8XPtbqLdy5crPfiZe4HM1c+bMWieIBgD4exk8eHC22WabUljb2OtYvzWnwd1www3p0qVLvv71r3/OW/X5uuGGG7Lnnnvm4IMP/rw3Bf7hDRgwIBdeeOHnvRlJas6N+PTTT5eiN58/U4ABAAA+Z1dccUUeffTRJDXn0ZsyZUqd59H6ZzB58uS88847m/Ttv/DPav78+TnssMM+780o+eSTT0qj+vjHYAowAADA5+z000/PrbfempEjR6ZBgwY54YQT/qlnelxxxRWZM2dO+vXrV/piFGD92rZtu84pxZ+Xf/Y/YPwjMgUY/g8zBRgAAADYEFOAAQAAAKDABEAAAAAAKDABEAAAAAAKzDkA4f+whg0bft6bAAAAAPyDMwIQAAAAAApMAAQAAACAAhMAAQAAAKDA/j89h62MWLJtcgAAAABJRU5ErkJggg==", + "argumentInfo": { + "argumentName": "base64image", + "formattedValue": "base64 data: iVBORw0KGg..." + } + } + ], + "status": "PASSED", + "durationInNanos": 2404217, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 5117437, + "depth": 0, + "parentFailed": false + }, + { + "name": "showing thumbnails is set to", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "showing thumbnails is set to" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "showThumbnails", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 384902, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 365693817, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 326922341, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment22.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "jgiven-html-thumbnail", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "jgiven-html-thumbnail" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 19955443, + "depth": 0, + "parentFailed": false + }, + { + "name": "the image is loaded", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the image is loaded" + } + ], + "status": "PASSED", + "durationInNanos": 17135023, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["true"], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1060658493 + }, + { + "caseNr": 2, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 190102, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has an image attachment $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has an image attachment" + }, + { + "value": "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OM2f1v/pto+hAFBERERERERE7qi/1PkLT9Z/kqrlq+Ln5YeHh4f9JXIvysjIsL/iUuKITY9l4W8LWR21+o6MpwBQRERERERERO64csZyNPJuRAf/DrSq3Iqa7jWxGWz4mf2cXZpIqYq3xIMVzmWeY9/lfeyM3cmvyb+SY825Y2MqABQRERERERERESnDjM4uQERERERERERERO4cBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhBpvNZktOTiY5OZnc3Fxn1yMiIiIiIiIiIiK3yMXFBW9vb7y9vTEnJyeTlpaW/8ZsdnZtIiIiIiIiIiIicovy8vJIS0sDwJiUlESFChUU/omIiIiIiIiIiJQRZrOZChUqkJycjDEvL0/hn4iIiIiIiIiISBljNpvJzc3VJiAiIiIiIiIiIiJlmQJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhZmcXcCPOnz/P0aNHAcjNzaVixYq0adMGFxcXAGJiYggPDycnJweDwYC/vz8tWrTA1dWV7777jry8PEwmk70/d3d3evbsSXR0NDt27KBPnz54e3sDkJaWRmhoKL1797a337t3L1FRUQwcONDeT2ZmJt988w2enp72dmazmZYtW1K1alUAvvrqKx599FFcXFzIycnh4MGDXLhwAYPBgIuLC0FBQdSqVevOfni/ExcXx44dO+z3YDKZcHV1xWAw0K9fv2t+XgBHjx7l7NmzGI1GcnNzCQwMpEmTJmzfvp34+HisVisZGRlUqFABgPvvv5/69euX6j0uXbqUX375BbPZTEZGBt27d+epp54C8r++n376KTt27MBkMuHh4cFf//pXevToAcDPP//MO++8w4IFCxzq/vzzz1m0aBE///wzW7du5YMPPsDX19dh3FGjRpGQkMDq1asBuHTpEpUrV8ZsNtO0aVNGjRrF8OHD+fbbbx2u69atG+vWrSMyMpI5c+Ywf/584uPjGThwIC+99BJ9+/a1tx0yZAiLFi3Cw8OD8+fPM3fuXCIjI3Fzc8Pb25unn36aFi1aXPPz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RERERERERERulYuLC15eXnh7e2PIycmxObsgEbk5586do06dOs4uQ0RERERERETuYtoEREREREREREREpAxTACgiIiIiIiIiIlKGKQAUEREREREREREpwxQAioiIiIiIiIiIlGEKAEVERERERERERMowBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIrcBWw2G/v37+fChQsAxMbGsmvXLidXJSIiIiIiIiJlgQJAESez2Wzs27ePK1eu4OXlxeXLl9m9ezeVKlVydmkiIiIiIiIiUgYoABRxooLwLz4+no4dO5KZmcmuXbto1KgRDRo0cHZ5IiIiIiIiIlIGKAAUcRKFfyIiIiIiIiJSGhQAijjJqVOnuHDhAq1bt8bNzY09e/bg7++v8E9EREREREREbisFgCJOUrt2bapUqcLBgwfJy8ujRYsWXLp0iejoaGeXJiIiIiIiIiJliAJAEScxmUy0bdsWDw8Ptm/fTqVKlWjdujUHDx5UCCgiIiIiIiIit40CQBEnUggoIiIiIiIiInea2dkFiNzrCkLAPXv2cPnyZQIDAwGIjIy0/1tERERERETkXmaz2UhISCAvL6/I80ajkUqVKmEyme5oHwWysrJITk4udNxgMODr61uiPn777TfOnDmDzWa7Zjt3d3c6duyIi4vLdfssjgJAkbuAyWSiffv29vcBAQEEBAQ4sSIRERERERGRu8P58+dZsGABSUlJ12zn7u7OsGHDCAoKuiN9XO29994jNTW12D4effRRWrZsec0+FixYQG5u7jXbXN1n27ZtS9S2KAoARURERERERETkrrV8+XJatGhB3759i51ZZ7Va2bFjB0uWLGHy5MmF2t2OPq6WmprKpEmT8PPzczgeGRnJ3Llz+eKLL8jKyqJDhw7F9lHS8A8gJyenxG2LomcAioiIiIiIiIjIXevChQu0b9/+moGc0WikQ4cOZGZmkpCQUKI+1qxZw5o1a0rcR0lUrFgRd3d3AFavXk1WVtZN9XO7aQagiNyy5cuXs2vXruu2e/LJJ687BVpERERERERuTutVralgroC72R03sxvuJnc8zB5U9ahKPe961PWuS12vugSU/2M9cspms2E0Xn8OW0Ebq9Vaoj6K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1u+P/HLVLZGhCM77+Xh4HPd1fa7P53Nd9x2n9zufcf78eZKTk9mzZw8XLlzAz8+PK1euMHToUI4dO0ZycjK3b9/m8uXLOQpknyX58uXLNkht3bo1U6dOZerUqXTt2jXLshYWFsY6lCIiIiIiIvL88i/uT7dy3fK6G/9zyruWz/PNWF50z/S8xfbt2xMfH89XX31FUlISJUqU4OOPP8be3j7L6bwAFSpUoGvXrvz888/ExcVRt25dfH19c7Shw4NatGjBlStXGDNmDC4uLnTp0oVz585lGiLZ2NgwfPhw1qxZw6xZs4iKisLa2poSJUrQt29fY3292rVrExUVxU8//UR8fDzly5enf//+AFSvXp0333yT+fPnExMTg4eHB926daNChQrZ9rVixYo0atSIcePGkS9fPvz9/enduzcTJkxg8uTJNG3aNMvrfXx8uHbtGjNmzCAmJoYiRYrw8ccfG1O1e/TowcKFC4mIiMDBwYHq1avTvv3ztTinhYUFjo6O3Llz57HU5+TkpPUJREREREREXhDvV32fo5FHORJ5JK+78j+hoF1BJtebjJWFZtY9SRYmkyn3idj/oISEBGOUV3JyMn379uWTTz6hbNmyedwzeVSxsbHGximPytbW1mxzlqctPDycMmXK5Fn7IiIiIiIiL6LI+Eje/u1tIuMj87orLzRHa0fm+8+nlHOpvO7KC++ZngL8rPjtt9/45JNPuHz5MgkJCaxevRpHR0dKliyZ112Tv8HR0fFvjdxLH0koIiIiIiIiL5YCdgWY6DcRa8tneuLkc83G0obv63+v8O8p0QjAHEhOTmbp0qXs2bOHhIQEihcvzttvv423t3ded00eg/j4eOLi4nI8PdzCwgIHB4eHrgP5NGkEoIiIiIiIyJMTeC2QIYFDMKX8vdljYs7SwpJv6n5DQ8+Ged2V/xkKAEWA1NRUkpKSSEpKwmQykZSUZHbe2toaW1tbrKyssLGxeWbW/FMAKCIiIiIi8mQdjjzMB7s+4E7i41lHXmBkzZG082qX1934n6IAUOQ5pgBQRERERETkybsYe5H+O/pz/d71vO7Kc83awprxfuNpVLRRXnflf47WABQRERERERERyUIp51LM959PaefSed2V55adlR3/bvhvhX95RAGgiIiIiIiIiEg2CtgVYG7TuVQrUC2vu/LcccvnxqzGs6hZsGZe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GTx4MPv372fLli3861//4qWXXsLS0jLb82+//TZxcXEMGzaMEydOEBoayg8//EDz5s05fPgwAHPmzGHQoEHs3buX8PBwgoKCWLdunRG6ZXc+M1WqVGHLli1ERUVhMpmYPn16hhF89zty5AgdOnR4aFjm6elJw4YNzY6lr032YIBjaWlJhw4djBFzD3JxceHll19mw4YNHDlyhPPnz7N06VIAatWq9dA+5kTx4sWJi4vj0KFD3Llzh3379nH58mUcHR25du1atqMgy5QpQ5EiRVi5ciUXL14kOjqaY8eO8eOPPxobu5QrVw5bW1vWr1/PlStXCAsLY926dWYjOpOTk+nQoQOLFi16aFuOjo60adPGeO3s7MzNmze5d+8eJpOJ0NBQ5syZw7Zt2wBo06bNQ9eBa9iwIfv372fXrl1cvHiRLVu2cObMmQzv2aPIly8fNWvWZNu2bRw/fpzo6GhCQ0OZP38+q1atynE9OXluueXm5oanpyc7d+7k0qVLREREsHLlygyjzBYtWkSHDh0yXasy3bFjx4x/b1JSUggNDTVeP8roWVdXVzp37sz06dPZsmULV65cYeXKlSxYsIBevXphbW1Nvnz5yJcvH8HBwZw4cQILCwsqVarEihUrCAsL488//6R37940btyY6Ohozp8/n+mGOw/y8fHh3LlzZj/zr7/+OiVKlKB///5s3bqVjRs3MnjwYPz8/P7Wz92OHTvo27cvGzduJCwsjBMnTjBv3jyKFStmtjzC/v37//bPt4iIiIg8Ov0aVkQeqwYlG/D7hd9zdU3DUpmHFImJiXTr1s3s2KefpgWJRYsWZefOnZle98knn1C2bFmWLl3K8OHDiY6OxtnZmapVqzJ37lxjN11bW1u++eYbxo4dy8svv4ynpydDhgzh6tWrxrTWokWLMnfuXL7++mu6d++Om5sbrVu3ZsiQITk6X6xYMX7++WcmTJhA586dsba2ply5cvz000/G7qlTp05l3LhxDBgwgNjYWAoWLEiTJk0YOnRojs5n5p///CeffPIJDRo0IH/+/Lz11lt07NiRHTt2ZFo+NjaWw4cPZzkaq0mTJgDs3LmT1NRUwsLCmDhxolkZe3t72rdvn+nmBvdr1aoVW7ZsYdOmTZhMJooXL05AQMDfXrutXLly1K1bly1btrBx40bKli1L+/bt2bNnD7t378bS0hIfH5+HXm9hYUH37t3ZvHkzS5YsITExEVdXVxo1akSdOnWMe+zSpQsbNmxg1qxZuLq60qxZM/bs2WOsi5aamsrhw4eNz9rDpO9KvHbtWi5evMiCBQsylLG1taVNmzZZ7mBcvXp1TCYTgYGBbNu2jQIFCtC5c+dMR5k9iubNm2NnZ8eWLVuIjY3FycmJ8uXL4+/vn+M6cvLcHkXHjh1Zu3Ytc+fOxdnZmYYNG3LlyhWzUYFXr17l8OHDWa4vOXr0aCOUB1i4cCELFy4E4I8//jB2N86NMWPG4OjoyOjRo4mMjMTT05OBAwcav4SAtA2LZsyYwdatW9m2bRvjx49n+PDhNG/enOLFi/Pxxx9TvXp19u/fT7t27Vi/fn227darVw9ra2u2b99ubEhka2vLvHnz+Oyzz3j//fextrbG39+f0aNH5/q+7te/f39MJhNfffUVN27cwNnZmRo1ajB79mzjecfGxrJ//36++OKLv9WWiIiIiDw6C5PJ9Oj/1S0ieSo8PNxst8ZnwYXoC3RZ3oW9l/fmqHyDkg34pdMvFHV++EYa8nT079+fDz74INN15u535coVgoODOXfuHHfv3sXS0hJXV1eqVKlCrVq1tMbX/zd//nxSU1MJCAjItmxcXBzBwcGcOnXKGLXl5uZG+fLl8fX1zdUOsP9rEhMTSU5ONlvHcP78+djb29O5c2fjmL+/P7//nrtfTjzPRo8eTUhICOvWrcsy+Hwapk6dyi+//MK2bdtyvVmOiIiIiDweGgEoIo+Vl6sXwb2DuZ1wm7jEuCzLOto64myb+U6x8nRFRkbmeA2+okWLGqOKkpKSsLKyyvOA4Vm0Zs2aDCMkH8bBwYEmTZoYoywl5xYtWsTdu3dp3bo1Tk5OnD59mgsXLvD2228bZbZt20a1atXysJdP38CBA2nZsiWrVq2iQ4cOedaPq1evMmvWLD7//HOFfyIiIiJ5SCMARZ5jz+IIQBGRp+nu3bts3LiR8+fPk5iYiLu7O35+flSvXj2vu5bndu3axYABA1i1alWe/H9FUlISb7/9NuXLl2fs2LFPvX0RERER+UueBYCpqals27aN7du3G+v0FCpUiIYNG/Laa68ZOw7+4x//IF++fMyePTvbOocPH054eDhubm5MmTIlwwL0wcHBbNq0icuXLxMXF4erqyt16tShU6dO5MuXD0jbDXTFihUcOnSI6OhorK2t8fLyom3btlStWhWAESNGEBYWlmkfypUrx5gxY3LcnsjfoQBQRERERERERLKTZ1OAZ82axbZt27C0tKREiRI4OTlx7tw5Fi5cSGhoKP369ctVfZcuXSI8PBw7OzuioqI4efKk2YLpISEhTJkyBUdHR2rVqoWtrS2HDh1i/fr1xMTE0L9/f1JTUxk/fjyhoaFUqFABHx8fbt26xd69ezlz5gxffvml2SLgVatWzbB7YfqOdzlpT0RERERERERE5EnLkwDw3LlzbNu2DRsbG0aMGGEsOH/79m3GjRvH3r17adeuHS4uLjmuc/fu3QC88cYbLFu2jMDAQLMA8ODBgwB07drVWGOpffv2/PTTT7i6ugIQFRVFaGgo7u7ujBw50ljTav369Vy4cIHY2FizNt98882Hjr7KSXsiIiIiIiIiIiJPWp4EgAcOHACgQYMGZrtNuri48Omnn+Lo6IiNjQ13797NcZ1BQUHY2dnRsmVL/vjjD/bt20evXr2wtk67RXd3dyAtKHzppZcoUaIELi4uDBkyxKjDyckJGxsboqOj2b59O35+fkaduZWT9kRERERERERERJ60PAkAb9y4AUCpUqUynHuU0XGnT5/mxo0b1KlTB1tbW3x8fFi/fj2HDx+mZs2aALz22mscOnSIkydPMnz4cPLnz0/ZsmWpVasWfn5+WFlZYWtrS48ePZg3bx4zZ85k9uzZlCpViooVK9K0aVM8PT3N2h01alSGvgwcOBA/P78ctSciIiIiIiIiIvKk5UkAmD61NiUl5bHUFxgYCECtWrUAqF27NuvXrycwMNAIAJ2dnfniiy/4888/OXbsGKdPn+bAgQOEhIQQGBjIsGHDAGjatCk1atTg4MGDnDp1ihMnTrB+/Xq2bNnC0KFDzaYVZ7YGoIeHR67aExEREREREREReZLyJAAsUqQIAKGhoRnOhYWFkZycjJeXV47qSklJITg4GICpU6cydepU49yBAweIj4/Hzs7OOFaxYkUqVqwIQGRkJJ999hmHDx/mwoULRpv58+enSZMmNGnShNTUVFauXMnKlSvZuHGjWQCY1RqAuWlPRERERERERETkSbHMi0bTR+rt3r2bkydPGsejo6P54YcfGDlyJMePH89RXUePHuX27dsULlyYxo0bG39KlCiByWRi//79pKSk8Nlnn9G7d2+uXLliXOvu7k7+/PmBtCAxMDCQAQMGMGPGDKOMhYUFpUuXNsrkRE7bExERERERERERedLyZARgiRIlaNOmDWvXruWrr76iRIkSODk5ce7cOeLj46lfvz6VK1c2NgFJTEw0G9mXLiAgwJj+27p1a5o2bWqcO3jwIN988w2BgYHUq1ePihUrcubMGUaNGkXVqlWxt7cnNDSUsLAwChYsSKlSpXB1dSU5OZmdO3cSHh5OyZIluXfvHkeOHAEwphOnW7p0aYYpwADvvfdejtoTERERERERERF50vIkAAR46623KF68OFu2bCE8PJzr168bo/j8/f3NyqakpBAUFJShjvbt2xMSEoK1tTW1a9c2O1etWjVcXFw4cuQIt2/f5s0338Td3Z0//viD48ePEx8fj6urKw0aNKBjx45YW1tToEABRo8ezZo1azh58iSBgYFYW1tTvHhxmjZtSuPGjc3aOHr0aKb31qdPnxy1JyIiIiIiIiIi8qRZmEym1LzuhIg8mvDw8GzXoRQRERERERGR/215sgagiIiIiIiIiIiIPB0KAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoAReSZEhcXx/z58+ncuTO+vr6UK1eOqlWr0qpVKyZNmkRsbGxed/GRnDp1Cm9vbyZNmpRt2R9//BFvb28OHjz4FHr2aGrWrMmbb76ZZ+1XqVKFd955J9tymzdvxtvbm+XLl2dZrn///nh7e5OUlPS4uvjCuHH3Bu2XtMfhSwcsPrfI8o/TV050Wd6F6PjovO62iIiIiMgzLTo6mvPnzxMaGkpcXNwTb8/6ibcgIpJD9+7d46233uLPP/+kZcuWvPXWWzg7OxMREcEff/zBtGnT2LFjB7/88gv29vZ53d2HunnzJnXq1OH333+ndOnSub6+WrVq9OzZk0KFCj2B3onkTt//9mX1n6tzVPZu4l2WHF9CPut8zGs37wn3TERERETk+XTz5k2uX79uvL579y6lSpXCycnpibWpAFBEnhnr1q3jxIkTDB48mIEDB5qd69atGxMmTGDGjBmsWbOGLl265FEvsxcUFPS3rq9bty5169Z9TL0R+Xs2n9uc62s2nt34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K6+8kg8//DC1atWq/MP4euutl3XXXfczrftLdwRgjx49cuutt+b222/PLrvsklmzZuWCCy7INttsk379+uXUU09N796907t37yTJyy+/XHkS6tWrl1mzZmX27NmpX79+6tatuyZ3BeALN3r06Nxzzz0599xza/wL0UfX0fv4qamwKr7R/Bt54tAn8v6H72fuwrkrnbdxvcZpUq/JSudJkgMPPDBXX311Bg4cWDml4fMwc+bMPPXUUznmmGM+t3UCAMAXpU6dOtl4440zffr0fPDBB6lbt27WW2+9ynWyP9O6P4fxfa6aNm2agQMHZvTo0bntttvSpEmTdO/ePd///vdTq1atDBgwICNHjsxtt92W2rVrp127djniiCOSJJ06dcpdd92Vn//85zn22GPTsWPHNbw3AF+s9dZbLw899FB+8pOf5Kc//WkaNWqU+++/P/fcc0/69etX4y5T8O9oWr9pmtZv+rmsa5111smxxx77uazr41q2bLla1gsAAF+U2rVr5+tf//rnvt41fgow8Ok5BZjleeCBB3LJJZfkxRdfzLx589K6dev84Ac/yJFHHvm5Hm3FypVyCjAAAPDVJwDCV5gACAAAAHySWmt6AAAAAADA6iMAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AABgeSZNmrSmh1CxxRZbrOkhAAAAfGoCIABfWp3+2Ckjvjcix4w9Jg3qNMj86vmrbVtLfrUkc+fOzYsvvpjOnTtXpn+ZQiQAAMCnIQACXxnTp0/PJZdckocffjhvvfVWGjVqlI022ii777579ttvv9SuXTtJMmXKlPTp0yejR49O165d1/Co+SxmHzs7jz/+eGYfOztvv/12WrVqtdq2NWfOnCTJJptsUvkaAACgBAIg8JXwzDPP5JBDDknTpk1z4IEHpn379vnggw/y6KOP5rTTTsujjz6aSy65JFVVVfna176W008/PW3atFnTw/5KOumkk/Lmm2/myiuvXOE8O+20U/bdd98ceuihq3Us9erVS69evZIkG264YWV63bp1V+t2k2TJkiWpqqpa7dsBAABY3QRA4Etv4cKFGThwYFq3bp0bbrghTZo0qTzWr1+/fOtb38qJJ56Yxx9/PN27d0+zZs2y//77r8ERf7Ucf/zx6dmzZ77//e+v8jI///nP0759+9U4qjXrO7d9Jw/84IE1PQwAAIDPhbsAA1969913X6ZPn54TTzyxRvz7yB577JGnn3463bt3T7L0FOB27dpl3LhxefTRR9OuXbs888wzNZaZMGFC2rVrl0ceeSTJ0uu8/fjHP06XLl2y5ZZb5qijjsq0adMq8w8YMCD9+/fPmDFjstNOO6VTp07p16/fMuv9Knr++ef/7WV23XXXbLrppqthNGtW1zFLTxkX/wAAgJIIgMCX3rhx41KrVq1069ZthfM0btx4udO7d++eli1b5p577qkx/a677krLli2z/fbbZ/r06dl///1Tu3btXH/99Rk5cmTee++9HHjggVmwYEGSpE6dOhk3blyeffbZ3H777Xnqqaey9tpr5/jjj//E8VdXV2f48OHp27dvunfvnj59+mTo0KFZuHBhZZ5nn302hx56aHr06JGePXvmyCOPzHPPPVd5fMyYMendu3fGjRuXffbZJz179sw+++yTF198MXfccUd++MMfplevXhk4cGDee++9ynLvvfdeTjnllPTt2zc9evTIwQcfnHHjxlUe79q1a6ZPn57TTjst3/72tyvTa9eunQceeCC77757tttuu/zoRz/K5MmTK4/vtNNOueKKK2qM7aOIuuOOO6Zfv3657bbbajwPN998c3bddddsv/32OeKII/Lqq6+ma9eu+ctf/vKJz+EXZdye49J1TNdKCAQAACiBAAh86b399tv52te+ljp1al61YN68eZkzZ07lv/nzl71DbO3atfO9731vmQA4duzY9OnTJ7Vr187IkSNTVVWV4cOHp2PHjunUqVOGDh2a119/PXfddVeN7Z100klp1KhRGjRokN122y0vv/xy5s2bt9LxX3311bnzzjtz8skn56abbsrgwYNzzz335NJLL02SvPbaazn66KPTqlWrXH311fn973+fRo0a5aijjspbb72VZGmAnD17dm6++eZcfvnlueuuu7Jw4cIcd9xxGTduXEaNGpUxY8Zk8uTJue6665IkixcvzoABAzJx4sSceuqpue6667LZZptl4MCBeemll5Ikf/7zn5Mkxx13XI1gN2PGjPzxj3/MKaecUrm24imnnLLc/ftobFdccUWGDBmSBx98MH379s3ZZ5+dt99+O0ny3HPP5de//nV23HHHXH/99enXr18GDx6cJJ/6Onv1zqhX+XrWrFmVr+fOnZtk6fvmww8//LfXO27PcRm357hPnhEAAOArQgAEvvRq1apV42i5j+y4447ZcsstK/8dcsghy12+b9++efXVV/Piiy8mWRqjpk6dmn79+iVZevTdlltumaZNm1aW2WCDDbLRRhvVOOqtTZs2adCgQeX7Zs2aJakZn5bnpZdeSvv27bPddttlww03TM+ePXPJJZdUrrk3ZsyYNGrUKKeffno22WSTbLLJJjnzzDNTXV2dO+64o7Ke6urqHHTQQWnSpEmaNGmSHj16ZNq0aTnmmGPSoEGDtGrVKl27ds2UKVOSJE888UReeOGFnHTSSdl2223zjW98I8cee2zWX3/93HDDDTX2oVGjRpWvk2TmzJk588wz07lz53Tu3Dn77LNPXn311cyePXu5+1hdXZ2DDz446623XqqqqvKDH/wg1dXVlef8jjvuSIsWLfKLX/wibdu2Td++ffPd7353pc/bR1YUWBecvCAXX3xxnnvuudx8880ZPXp03n777TRq1ChJ0qpVq9SvX/8T1z/y+RmrNA4AAICvKjcBAb701l9//bzzzjuZP39+jQB3+eWXV8LgRRddtMJQtO2222bdddfN3XffnQ4dOuSuu+5K69ats8022yRJZs+eneeeey7f/OY3ayy3YMGCyhFsSWps++OWLFmy0vH36tUrp5xySk444YTstNNO6datW9q2bVt5/Pnnn8+mm25a4wjHRo0apU2bNpWA9pGP39m4cePGadasWdZee+0a02bMWBq0Jk2alLp166ZLly6Vx2vVqpWtt966EglXpE2bNmnevHnl+xYtWiRZenTdWmuttdxlNtlkk8rXH8XUDz74IEny6quvZsstt0zt2rUr83znO9/JJZdcstJxJEnDhg1X+FjXrl1z+eWX56233sqoUaM+cV3Ls/83v/aplgMAAPiqEACBL73tttsul112WW6//fbstddelelbbbVV5euWLVvmjTfeWO7ytWrVSp8+fXLPPfdkwIABGTt2bI073jZp0iRdu3bNWWedtcyyK7q24L+jT58+ady4cW666aaccsopWbRoUXbcccf8n//zf9KiRYvMmTMn66yzznK3PWfOnBrT6tatW+P7evXqZUXmzJmThQsXZvvtt68xfdGiRWnZsuVKx/yv0e2j03RXFjuXd7TdR/PPmjUr6667bo3HPn7E4ae17bbbZtttt/3M6wEAACiZAAh86e2www7p0KFDzj///Oy4445p1apVjcfnzp2bl156aYVH6CVLTwP+wx/+kMceeyyvvPJK5fTfZGlI/OMf/5iNNtqoRmB75ZVXltnWp7Xjjjtmxx13zLx58/Loo4/mt7/9bc4444wMGzYsa6211nJPrZ09e/Zyw+CqWmuttVKvXr1cf/31yzxWq9YXewWIevXqLXONxvfff/8LHQMAAMB/KtcABL70atWqlREjRmTBggXp27dvLrzwwtx///25++6789vf/jbf/e5389prr2XAgAErXMc222yTDTbYIGeddVY6duyYjh07Vh7bb7/9Mnfu3AwaNCiTJ0/Oq6++mgsvvDC77LJLJkyY8JnH/+CDD2b69OlJlh5Zt/POO2e33Xar3Ihjs802y/PPP1/jOocffPBBXn311Wy++eaferubb755FixYkEWLFqVt27aV/+rXr79M2Pyk05g/q4+up/jx7TzwwAOrdZsAAAAsJQACXwkdOnTIn//85/zwhz/MLbfckp/97GcZNGhQ7r///uy77765//77lznV9eOqqqry3//933nhhRdqHP2XJK1bt87IkSPz7rvvZq+99soPfvCDPPTQQ7nsssuy9dZbf+axjxo1KieccELGjx+fadOmZdy4cbn33nsr1+bba6+9Mn/+/Jx++ul57bXX8tJLL+XEE0/MWmutlV133fVTb7dbt27p2LFjTj755Dz99NOZPn16xo4dm/322y833XRTkqWn7davXz/jx4/PlClTUl1d/Zn3d3l69+6dGTNm5JJLLsm0adMyduzYPPzww6tlWwAAANTkFGDgK6Nly5YZPHhwBg8evNL5OnbsmJdffnmZ6StbtlOnTrn22mtXuM5hw4YtM+273/3ucrfzr84+++wMHTo0gwYNqpzW27Nnz/Tv3z9JsuGGG+Z3v/tdLrjgguy7776pXbt2OnfunEsvvbTGDT7+XbVr184FF1yQ4cOHZ9CgQZk3b1422GCDHHroodl///0r8x188MH5wx/+kEceeSS33nrrp97eyvTq1StHHXVUbrjhhlx//fXp0qVLBg8enP3333+V7tQLAADAp1e1YMGC1XveF7DaTJ06NRtvvPGaHgZ8oiVLlmTmzJk1rmn4zDPP5LDDDsvo0aPTrl27ZZaZNGlSjVO1P+5fb4ayOk2aNClbbLHFF7Y9AACAz5tTgAFY7caPH5/vfe97ueKKK/L6669nwoQJGTp0aDbffHMRGwAAYDVzCjAAq12XLl1y2mmn5dprr83vf//7NGnSJF26dMkxxxyTqqqqNT08AACAogmAAHwh+vbtm759+67pYQAAAPzHcQowAAAAABRMAASgeGfc8kDefPPNJMkrr7yy3HnOO++8JMndd9+dBQsWZPHixZU7NQMAAHyVuQswfIW5CzAlmzRp0poeQoW7AAMAAF9lrgEIwJeS6AYAAPD5cAowAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AAAAAFhzhgwZkokTJyZJlixZkiSpqqpKkuy2227Zc889/+11/vWvf02XLl3SoEGDz2+gAHxqAiAAAMB/sEGDBlW+Hjp0aNq0aZM99tjjM63zxhtvzOabby4AAnxJCIAAAAAs18KFCzNq1Kg8++yzqa6uzmabbZaf/OQnqVevXqZMmZJrrrkm8+bNy5IlS7L99ttnr732ytChQ/Puu+/m9NNPz0EHHZTOnTuv6d0A+I/nGoAAAAAs1+23357XXnstZ599dkaMGJHFixfnhhtuSJJcd9116dOnT4YOHZqzzz47b775Zt55550MGDAgSXLKKaeIfwBfEgIgAAAAy/XII4+kd+/eqV+/fqqqqrLLLrvkiSeeSJKsvfbaeeKJJ/LKK6+kfv36GThwYNZdd901PGIAlscpwAAAACzXnDlzcu2111aO+luyZEkWLlyYRYsW5Ygjjsidd96Ziy++OO+//3522mmnT3XDEABWPwEQAACA5WrRokX22Wef5Z7K27hx4+y9997Ze++9M23atAwZMiRt27Z12i/Al5BTgAEAAFiubt265Z577snChQuTJH/9619zyy23pLq6OieddFKmTZuWJGnVqlUaN26cJKlVa+mfmXPmzFkzgwZgGY4ABAAAYLm+//3vZ9SoURk0aFCSZJ111skhhxySOnXqZNddd83w4cOzYMGCVFVVpWvXrunatWuqqqryrW99KyeffHL233//7LTTTmt4LwCoWrBgwZI1PQjg05k6dWo23njjNT0MAAAA4EvMKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrM6aHgD8p5kxY0aWLFmSVq1apXbt2lm0aFHefvvt1KpVK+utt95y5wEAAAD4tBwBCF+wxYsXZ8mSJVm8eHGN7xctWrTCeQAAAAA+LQEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAoWJ01PQD4T9OwYcMkSZ06dSr/27Bhw1RVVa1wHgAAAIBPS12AL9jaa69d4/uqqqplpv3r9wAAAACfllOAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAfJ4XGAAAgAElEQVQAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGB11vQAAABgdZjw+ox0Oel3WZLkv7faJHf88qAkyYLqRTnn9odz/WMT8uq776Vx/Xrp3Gb9nPD9HdN7i3ZJkiseHJcb/jYx957wk9U+zpdffjknnHBCbrzxxhrTn3vuuZxzzjm59tprc/bZZ2fChAlJksWLFydJatVa+m/5u+++e7p06ZITTjghffr0ycEHH1xjPQ8//HAuvPDC9O/fP7169cqf/vSnjB8/PqeeeuoqjW/QoEGZP39+hg8fXtnm523SpEm58MILs8022+Twww9f4Xz33XdfbrvttsyePTsbbbRRjjzyyHzta19bZr5FixblD3/4Q5588sksXrw4nTp1yhFHHJF69eqtdBwfvRZ16iz9M6lJkyZp3bp1/uu//ivbbbfdKu3LCy+8kEaNGmWjjTZapfm/Kj7Lfh199NH52c9+ls0337zG9PPPPz+tW7fOHnvs8ZnHt8eI63Pb089n0ZIleer0o9L1G62TJKP+NjEj7n4s/3fqW6lVVZV267XI4d/ZNkf3/laS5KW3ZmbT44an+pozPvMYVtXYsWNz7bXX5uijj06PHj1WON+tt96au+++O/Pnz8+GG26YQw45JBtvvPFy513Vn6Ekueeee3L77bfngw8+yAYbbJCDDz44HTp0WGZ9p59+en71q19VXrcXX3wxV111Vd5+++00b948BxxwQLbZZptP3N8zzzwzzz33XKqqqirTfvGLX6R9+/Y5+uija8y7ZMmSdOrUKYMHD86HH36Y6667Lk899VQ+/PDD9OjRI4ccckhq165dY5kbb7wxY8aMWeYz9PN24IEHprq6OlVVVWnQoEHWW2+9bLfddunbt2/lM+PzsqLXc+HChbnmmmvy5JNPZuHChdl0001z+OGHp3nz5p+4zpW97iv7bJ08eXKuueaazJgxI02aNMkee+yRb3/720mSp59+OqNGjcq7776b5s2bZ88990zPnj0/cSxLlizJqFGjcv/996e6ujrdunXLYYcdlrp16y4z78q2P2nSpFx33XWZMWNGWrZsmcMOOyybbrrpv73/Y8eOzZ///Oe8//772WSTTXL00Udn7bXXXuH4V/R78ZxzzsmECRNy6aWXpmnTpjWWGThwYJYsWZILLrjgE5+f1UUABACgSFtt9LVUX3NGzrz1wTz+8uuV6buPGJmpM2fl8kN3S5e2rfNhdXX++NRz2W34dbnz2IOy46bfyP7bb5U9tt18JWv/Yp1wwgmVr4cMGZK2bdtm7733rkx7+eWX07x58zz22GM54IADavwx+tBDD630D5mVmTJlSpo3b54GDRpk/Pjx6dq166ffiRV46KGH8pe//GWFf7R95O9//3tGjhyZX/3qV/n617+eMWPGZMSIETn77LOXmXfs2LF58cUXc95556Vu3bo577zzcuONN+aAAw5YpTFdf/31SZJZs2blqaeeymWXXZZ33303u+666ycue99996Vz587FBcAv+3798Zj9kiR1Djq5Mu3cOx/Jb+54OBcc9P38V6f2aVy/Xh6Z8mqOuOq2zJw9Nyfv9p18Y921M+2C47+wcV5yySVZvHhx1l9//ZXO97e//S333ntvzjjjjLRo0SI333xzhg0bttx4sKo/Q0kyceLEjB49Oqeddlpat26d2267LcOGDcvFF19cmWf+/Pm58sora0SlBQsW5LzzzssBBxyQHXbYIRMnTsywYcMyYsSINGvWbKXbnDt3bn75y18u9/Pjo5+1j/zmN79J9+7dkyQ33XRT3njjjQwdOjSLFi3KWWedldtvvz277bZbZf5XX301f/3rXz9xvz8vJ510UjbffPPMmzcvU6ZMyTXXXJMXXnghxx//+b2HVvZ6jhkzJq+99lp++9vfpm7duhkxYkSuu+669O/ff6XrXNnrvrLP1g8++CC/+c1vcuSRR6Z79+6ZPHlyzjzzzHTs2DH16tXLiBEjMmjQoGyxxRaZNGlSfv3rX6dDhw5p1arVSsczduzYTJo0KUOHDk2dOnVy4YUXZsKECcu8R1a2/YYNG+bcc8/NgAED0qVLlzzyyCM599xz87vf/S4NGjRY5f0fP358br755px66qlp1apVrrrqqlx88cUZPHjwcsf+Sb8XmzVrlkceeSR9+/atTHvhhRfy4YcffuI/Qq1uAiAAAP8x7nvu5dw76eW89NtfZMMWS/9obVS/bg79dtfs0mmTrN+8SZJk5GMTcsPfJubYvjvkJ5f/MW+cf3xq/X9Hr5w85t5MnvZ2/njMfnl0ymv55fV35b0581K7VlVGHLhr/qtT+7zyznvZ5qTf5ay9ds7Yif+bl96amZ23aJ8RB/Zd4dg+q4YNG2bttdfO+PHj061btyTJzJkzM3Xq1E8dbe6999707Nkza621Vu65554af+gMHz48TZs2zTvvvJPZs2dn8eLF+dnPfpYNNthgpY/9qzZt2uTUU0/N6NGjM2fOnBWO5bHHHkv37t3Tpk2bJEuPfPzTn/6UN998c5mY8uijj6Zfv35Za621kiR77LFHhg0btsoB8CPNmjVL796907Rp05x//vn5zne+k8aNG2fcuHG54YYbMnfu3NStWzf7779/unXrlltuuSWPPfZYJk6cmGnTpmXvvffOzTffnAcffDALFy5My5Ytc+SRR2bDDTdcZlsvvfRSLr300syfPz/t27dP/fr106xZs+y7775ZuHBhRo4cmfHjx6e6ujqbb755DjvssNSrVy8XXnhhmjdvnpkzZ+af//xn3n///QwYMCBt27atvIZ33HFHqqur06JFi/Tv3z+tWrXK/fffn3HjxqW6ujqLFi3KySef/G/t14rW+9E2b7nlltSrVy/du3evceTXv5o1a1ZOO+20TJ06Neuss0769++ftddeO4cffnjOOeecfP3rX0+y9A/oIUOG5LLLLlulo63en/dhTr35/vzhiD2yZ7ctKtN33qJ9Hj/1yDSqt/RIo1feeS+bHjc8My85Mev97Ow8c1b/fHODdZMs/bzY76IbM+384zNj1gf52dW35/np72ThokU5uve3clzfHZIkbf7n3Pzyv3vm/sl/z7T33k+zhvVz8//sn6YN6y8z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", + "argumentInfo": { + "argumentName": "base64image", + "formattedValue": "base64 data: iVBORw0KGg..." + } + } + ], + "status": "PASSED", + "durationInNanos": 732605, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3946628, + "depth": 0, + "parentFailed": false + }, + { + "name": "showing thumbnails is set to", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "showing thumbnails is set to" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "showThumbnails", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 171602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 167430198, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 307757704, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment23.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "$ attachment icons exist", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "nrIcons", + "formattedValue": "1" + } + }, + { + "value": "attachment icons exist" + } + ], + "status": "PASSED", + "durationInNanos": 12575790, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["false"], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 780051284 + } + ], + "casesAsTable": false, + "durationInNanos": 1840709777, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#274", + "description": "Scenarios of Issue #274" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "a_thumbnail_is_shown_for_image_attachments", + "description": "a thumbnail is shown for image attachments", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.Issue-#274" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 260602, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has an image attachment $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has an image attachment" + }, + { + "value": "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cybxDH9a/6fbPoYCQBERERERERG5o/5S7y882fBJqlesjp+XHx4eHvaXyL0oMzPT/opPjScuI46Fvy1kddTqOzKeAkARERERERERueMqGCvQxLsJnfw70aZqG2q718ZmsOFn9nN2aSJlKsGSAFY4n3WefZf3sTNuJ8dTjpNrzb1jYyoAFBERERERERERKceMzi5ARERERERERERE7hwFgCIiIiIiIiIiIuWYAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMGm81mS0lJISUlhby8PGfXIyIiIiIiIiIiIrfIxcUFb29vvL29MaekpJCenl7wxmx2dm0iIiIiIiIiIiJyi/Lz80lPTwfAmJycTKVKlRT+iYiIiIiIiIiIlBNms5lKlSqRkpKCMT8/X+GfiIiIiIiIiIhIOWM2m8nLy9MmICIiIiIiIiIiIuWZAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGNmZxdwI2JiYjh69CgAeXl5VK5cmXbt2uHi4gJAbGws4eHh5ObmYjAY8Pf3p1WrVri6uvL999+Tn5+PyWSy9+fu7k7v3r2Jjo5mx44d9OvXD29vbwDS09MJDQ2lb9++9vZ79+4lKiqKwYMH2/vJysri22+/xdPT097ObDbTunVrqlevDsDXX3/No48+iouLC7m5uRw8eJALFy5gMBhwcXEhKCiIOnXq3NkP73fi4+PZsWOH/R5MJhOurq4YDAb69+9/zc8L4OjRo5w7dw6j0UheXh6BgYE0a9aMX3/9lYSEBKxWK5mZmVSqVAmA+++/n4YNG5bpPS5dupRffvkFs9lMZmYmPXv25KmnngIKvr6ffvopO3bswGQy4eHhwV//+ld69eoFwM8//8zbb7/NggULHOr+4osvWLRoET///DPbtm3jgw8+wNfX12HcMWPGkJiYyOrVqwG4dOkSVatWxWw207x5c8aMGcPIkSP57rvvHK7r0aMH69atIzIykrlz5/LZZ5+RkJDA4MGDeemll3jkkUfsbYcNG8aiRYvw8PAgJiaGefPmERkZiZubG97e3jz99NO0atXq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ERERERERERERuVUuLi54eXnh7e2NITc31+bsgkTk5pw/f5569eo5uwwRERERERERuYtpExAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMKAEVERERERERERMoxBYAiIiIiIiIiIiLlmAJAERERERERERGRckwBoIiIiIiIiIiISDmmAFBERERERERERKQcUwAochew2Wzs37+fCxcuABAXF8euXbucXJWIiIiIiIiIlAcKAEWczGazsW/fPq5cuYKXlxeXL19m9+7dVKlSxdmliYiIiIiIiEg5oABQxIkKw7+EhAQ6d+5MVlYWu3btokmTJjRq1MjZ5YmIiIiIiIhIOaAAUMRJFP6JiIiIiIiISFlQACjiJKdPn+bChQu0bdsWNzc39uzZg7+/v8I/EREREREREbmtFACKOEndunWpVq0aBw8eJD8/n1atWnHp0iWio6OdXZqIiIiIiIiIlCMKAEWcxGQy0b59ezw8PPj111+pUqUKbdu25eDBgwoBRUREREREROS2UQAo4kQKAUVERERERETkTjM7uwCRe11hCLhnzx4uX75MYGAgAJGRkfZ/i4iIiIiIiNzLbDYbiYmJ5OfnF3veaDRSpUoVTCbTHe2jUHZ2NikpKUWOGwwGfH19S9XHb7/9xtmzZ7HZbNds5+7uTufOnXFxcblunyVRAChyFzCZTHTs2NH+PiAggICAACdWJCIiIiIiInJ3iImJYcGCBSQnJ1+znbu7OyNGjCAoKOiO9HG1d999l7S0tBL7ePTRR2nduvU1+1iwYAF5eXnXbHN1n+3bty9V2+IoABQRERERERERkbvW8uXLadWqFY888kiJM+usVis7duxgyZIlTJ06tUi729HH1dLS0pgyZQp+fn4OxyMjI5k3bx5ffvkl2dnZdOrUqcQ+Shv+AeTm5pa6bXH0DEAREREREREREblrXbhwgY4dO14zkDMajXTq1ImsrCwSExNL1ceaNWtYs2ZNqfsojcqVK+Pu7g7A6tWryc7Ovql+bjfNABSRW7Z8+XJ27dp13XZPPvnkdadAi4iIiIiIyM1pu6otlcyVcDe742Z2w93kjofZg+oe1Wng3YD63vWp71WfgIp/rEdO2Ww2jMbrz2ErbGO1WkvV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q1atQnp6Otq1a1fvfv79919YW1tj2LBhzHUjRoyAtrY29PX1met+++033L59G1wuFz179oS7uzvatGkDAPj9998RHh6O3NxcmJqa4vPPP8dHH30EAPDx8YGtrS1evHiBzMxM8Pl8zJgxA0OHVkWfCwsLERgYiLi4OAgEAnTv3h3u7u4wNTVFWVkZFi1ahPnz5+PcuXOYPHkysrKykJ+fDy8vLwBAfHw8Lly4gPT0dBgYGGDw4MGYNm0aVFRUkJubi9OnT+Ply6oXerdu3eDh4QETE5OGnXSiUPalt7c3kpKSEBMT02R9EkIIIYQQQgghrYG+uj78R/hjzumiBs0AACAASURBVO054FZwm2XM84nnsWnwpmYZqzVq0QzAiIgIDBs2DIaGhrC2tkZUVFSD+unQoQPi4uIQHx8vcf2gQYPQrVtVlZoHDx4gNDQUixcvxp49e6Cjo4PDhw8zt127dg2enp44cuQIpk+fDj8/P2RlZQEAVFVVERYWhlmzZmH79u0YP348Tp8+zWSRnT17FlwuFzt27MDevXuhoaGBwMBAAICaWlWM9c8//8TXX39da5kzh8OBr68vHBwccPDgQSxZsgR3797F77//DgA4f/489PT04Ofnh71798LIyAhBQUENOk+kilAov4S4trZ2k/dJCCGEEEIIIYS0Fp30OsHX1heqrObZDuuP1D8gEFHyTUO1WACwqKgIjx49wvDhVRVk7OzscO/evQYFUpydnfHxxx9j9+7dWLVqFY4cOYLIyEiJCq1RUVEYPnw4rKysoKurC1dXVzg5OUEkEuHOnTtwdHRE586doaKigoEDB6J37964f/8+c/+BAwfC1NQUANC7d29wuVwUFRUBADw8PLBs2TLo6upCW1sbQ4cORVJSksQc7ezsYGFhAQ0NDYnr79+/DwsLC4wcORJqamro2LEjHBwcmMyz0tJSaGpqQkNDA1paWvDw8GAyB0nDKCNYJxKJmrxPQpTp5MmTsLKygpWVFT799NNG98fj8Zj+rKysFM6eJYCnpydz3rZu3drS02k24q+XP//8s9H9LV68mOnPx8enUX0NGDCA6av6BzlCCCGEEFKbjZkNNgza0CxjlQhKEJne8O3jPnQttgT47t27MDc3R+fOnQFUBdhOnTqFR48eKbz3WjU1NTXMnj0bn332GeLi4vDixQv89ttvCAoKwtKl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T7PvSarjzpw5w82bN6lVqxb29vb4+fmxbt06Dh8+TLVq1QB48803OXToECdPnmTo0KHkyZOHUqVKUb16dfz9/bGxscHe3p7u3bszZ84cpk+fzsyZMylevDhly5alcePGeHl5WZx3xIgRacYyYMAA/P39s3Q+ERERERERERGRZy1HAsDUR2uTk5OfSn+BgYEAVK9eHYAaNWqwbt06AgMDjQDQxcWFr7/+mlOnTnHs2DHOnDnDgQMHCAkJITAwkCFDhgDQuHFjqlatysGDBzl9+jQnTpxg3bp1bN68mU8//dTiseL05gD09PTM1vlERERERERERESepRwJAAsWLAhAaGhomn1hYWEkJSXh7e2dpb6Sk5MJDg4GYPLkyUyePNnYd+DAAeLi4nBwcDC2lS1blrJlywIQERHBqFGjOHz4MBcvXjTOmSdPHho1akSjRo0wm82sWLGCFStWsGHDBosAMKM5ALNzPhERERERERERkWfFOidOmlqpt3v3bk6ePGlsj4qK4qeffmL48OEcP348S30dPXqUu3fvUqBAARo2bGj8KVq0KCaTif3795OcnMyoUaPo1asXV69eNY718PAgT548QEqQGBgYSP/+/Zk2bZrRxsrKihIlShhtsiKr5xMREREREREREXnWcqQCsGjRorRp04Y1a9bwz3/+k6JFi5I7d27Onz9PXFwcdevWpXz58sYiIAkJCRaVfakCAgKMx39bt25N48aNjX0HDx7ku+++IzAwkDp16lC2bFnOnj3LiBEjqFixIo6OjoSGhhIWFka+fPkoXrw4bm5uJCUlsXPnTsLDwylWrBgPHjzgyJEjAMbjxKmWLFmS5hFggPfffz9L5xMREREREREREXnWciQABHjnnXcoUqQImzdvJjw8nBs3bhhVfE2aNLFom5ycTFBQUJo+2rdvT0hICLa2ttSoUcNiX6VKlXB1deXIkSPcvXuXt99+Gw8PD37//XeOHz9OXFwcbm5u1KtXj44dO2Jra0vevHkZOXIkq1ev5uTJkwQGBmJra0uRIkVo3LgxDRs2tDjH0aNH07223r17Z+l8IiIiIiIiIiIiz5qVyWQy5/QgROTJhIeHZzoPpYiIiIiIiIj8teXIHIAiIiIiIiIiIiLyfCgAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUkRdKbGwsc+fOpXPnztSsWRNfX18qVqxIq1atmDBhAjExMTk9xCdy+vRpfHx8mDBhQqZtf/75Z3x8fDh48OBzGNmTqVatGm+//XaOnb9ChQq89957mbbbtGkTPj4+LFu2LMN2/fr1w8fHh8TExKc1xFfGzfs3ab+4PU7fOGH1lVWGf3L/MzddlnUhKi4qp4ctIiIiIvJCi4qK4sKFC4SGhhIbG/vMz2f7zM8gIpJFDx484J133uHUqVO0bNmSd955BxcXF27fvs3vv//OlClT2LFjB4sWLcLR0TGnh/tYt27dolatWvz222+UKFEi28dXqlSJHj16kD9//mcwOpHs6fO/Pqw6tSpLbe8n3Gfx8cXkss3FnHZznvHIREREREReTrdu3eLGjRvG6/v371O8eHFy5879zM6pAFBEXhhr167lxIkTDBo0iAEDBljse/fddxk3bhzTpk1j9erVdOnSJYdGmbmgoKA/dXzt2rWpXbv2UxqNyJ+z6fymbB+z4dyGZzASEREREZGXX1RUFDdu3MDa2hpvb29MJhPh4eFcunQJb29vnJycnsl59QiwiLwwbt26BaQ83pmegQMHEhQUlCb8W7VqFR06dKBChQqULVuWN954gx9//BGTyWS0OXr0KD4+PixevJgZM2bQoEEDypYtS5MmTVi9ejVxcXGMHj2aWrVqUaFCBTp37szJkyctzpOYmMi0adNo3rw5ZcuWpXLlynTp0oWtW7cabXr16sVHH30EQJMmTdI8Vmpra8vmzZtp3bo1ZcuWpVq1anz22Wfcv3/faPPoI8CpY1+yZAlLliyhRYsWlC1bljp16jBq1CgePHhgMc5ffvmFpk2bUrZsWRo0aMCMGTM4cOAAPj4+LFy4MMP3IDo6mjFjxtCoUSPKlStHlSpV6NSpE2vWrEnT1sbGhrNnzxIQEEDFihWpUKECAQEBXLhwwaLd9evXGTp0KLVr16Z06dJUrVqVXr16pXnEuWvXrlSpUiXNeX799Vd8fHz49ddfMxz7vHnzaNKkCWXKlKFu3bpMmDAh24/03r9/n6FDh+Ln50eZMmVo1aqVxfsLKffoX//6F/Xq1aN06dJUr16dbt26ERwcbNFu8uTJ+Pj4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AAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAF9oixcvzty5cz/vYQAAAHxpCYDAl8b06dNz6qmnZptttsk3v/nN9OrVK7vvvnuuvfba1NbWVtabPHlyunTpknHjxn2Oo/3yOvnkk/PjH/94petst912ufLKKz/TcSxatCg333xzfvzjH+fggw/OsGHD8sILL3ym+wQAAChRvVNOOeW0z3sQwCfz/vvvp3Xr1p/3MP4t/vKXv2TvvffOG2+8kf322y/7779/+vbtm9mzZ+fSSy/NCy+8kJ133jlVVVVp0KBBOnTokF69eqVZs2af99C/8I4//vjMmzcv3bt3T5I88MADmTVrVnbdddcVXqdt27bp2bNnVl999c9sXHfccUcef/zxHHPMMRk0aFAaN26cSy+9NGuuuWY6duz4me0XAACgNPU/7wEArMrChQszdOjQdOjQITfccEOaN29euWzgwIHZbLPNctJJJ+XPf/5z+vbtm5YtW2bQoEGf44i/XF544YX079//Y11n5513/oxG8/978MEHc+CBB6ZLly5Jkk033TQtW7bMJZdckkWLFqVv376f+RgAAABKYAow8IX3xz/+MdOnT89JJ51UJ/4ttccee+SZZ56pBKEPTwF+7LHH0qVLl/zlL3+pc53nnnsuXbp0yaOPPpokmThxYn74wx+mV69e2WijjXLEEUdk2rRplfWHDBmSwYMH55Zbbsl2222XHj16ZODAgctsd3lqamoyYsSIDBgwIH379s1OO+2UCy64IAsXLqys8+yzz+bggw9Ov3790r9//xx++OF5/vnnK5ffcsst2X777TNu3Ljss88+6d+/f/bZZ5+89NJLueuuu7L77rtnq622ytChQ/Puu+9Wrvfuu+/m1FNPzYABA9KvX78ceOCBdaZG9+7dO9OnT8/PfvazbLPNNpXl9erVy4MPPpjvf//72XzzzfMf//EfmTRpUuXyD08BXjq2pbfh1ltvnYEDB+aOO+6oczvceuut2XnnnbPFFlvksMMOy5QpU9K7d+/84Q9/WO7tNnfu3LRo0SJJMmbMmBx11FG56qqrsuuuu+aqq67KY489tsrbHgAAAAEQ+BIYN25cqqur06dPnxWus6Kpvn379k3btm1z33331Vl+zz33pG3bttliiy0yffr0DBo0KPXq1cuYMWMyevTovPvuu9l///2zYMGCJEn9+vUzbty4PPvss7nzzjvz9NNPp3Xr1jn++ONXOf6rr746d999d0455ZTcfPPNOfHEE3PfffflsssuS5K8+uqrOfLII9OuXbtcffXV+Z//+Z80bdo0RxxxRN58883K/mfNmpVbb701V1xxRe65554sXLgwxx13XMaNG5frr78+t9xySyZNmpTrrrsuyZL30BsyZEgmTJiQ0047Ldddd13WX3/9DB06NC+//HKS5Pe//32S5LjjjqsT7GbMmJHf/va3OfXUU3PppZemqqoqp5566nKPb+nYrrzyygwfPjwPPfRQBgwYkLPPPjtvvfVWkuT555/Pz3/+82y99dYZM2ZMBg4cmBNPPDFJUlVVtdztbrjhhrn33nuTJPfff3+OO+64fO9738vvfve77L777vnNb36Thx9+eJW3PwAAwFedAAh84b311ltZc801U79+3XctmDt3bmbPnl35mjdv3jLXrVevXr773e8uEwDHjh2bnXbaKfXq1cvo0aNTVVWVESNGpHv37unRo0cuuOCCvPbaa7nnnnvq7O/kk09O06ZN07hx4+y222555ZVXVvkJtS+//HK6du2azTffPB07dkz//v1z6aWXZpdddkmy5Ay6pk2b5vTTT883vvGNfOMb38iZZ56Zmpqa3HXXXZXt1NTU5IADDkjz5s3TvHnz9OvXL9OmTcvRRx+dxo0bp127dundu3cmT56cJHnyySfz4osv5uSTT863vvWtfP3rX8+xxx6btdZaKzfccEOSpGXLlkmSpk2bVr5PkpkzZ+bMM89Mz54907Nnz+yzzz6ZMmVKZs2atdxjrKmpyYEHHpj27dunqqoqu+66a2pqavLSSy8lSe666660adMmP/nJT9K5c+cMGDAg22677UpvtwMOOCAvvPBCJVyOHTs23/3ud7PHHnvktttuy5577pnRo0fngQceWOl2AAAAvuoEQOALr7q6us502aW23nrrbLTRRpWvgw46aLnXHzBgQKZMmVKJUc8//3ymTp2agQMHJlky/XajjTaqTDdNkrXXXjvrrLNOnWmvnTp1SuPGjSs/Lw1m77333krHv9VWW+Xpp5/OCSeckPvvvz/vv/9+OnfunE6dOiVZ8h586623Xp3A2bRp03Tq1Kky5g+PYalmzZqlZcuWdT4IplmzZpVIN3HixDRo0CC9evWqXF5dXZ1NNtmkEglXpFOnTmnVqlXl5zZt2iRJ5syZs8LrfOMb36h8v/S2/OCDD5IkU6ZMyUYbbZR69epV1vn2t7+90jG0atUqJ598cp588sm0aNEic+bMyfnnn5/tt98+e+65Z26++ebstddemTp16kq3AwAA8FXnQ0CAL7y11lorb7/9dubNm1cnwF1xxRWVMHjJJZes8Ey8b33rW1ljjTVy7733plu3brnnnnvSoUOHbLrppkmSWbNm5fnnn883v/nNOtdbsGBBZQprkjr7/rDFixevdPw77bRTmjVrlptvvjmnnnpqamtrs/XWW+e///u/06ZNm8yePXu5n6bbrFmzzJ49u86yBg0a1Pm5YcOGK9zv7Nmzs3DhwmyxxRZ1ltfW1qZt27YrHXOTJk3q/Lx0mu7KjrVRo0bLLFu6/nvvvZc11lijzmUfPuNwRdq3b5+TTz45Z555Znr06JHXX3895513Xo455phUVVXlxhtv/EjTsAEAAL7KBEDgC2/zzTfP5ZdfnjvvvDN77bVXZfnGG29c+b5t27Z5/fXXl3v96urq7LTTTrnvvvsyZMiQjB07tjL9NkmaN2+e3r1756yzzlrmuit6b8GPa+utt87WW2+duXPn5rHHHsv555+fM844IxdeeGFWW2215U6tnTVr1nLD4Ee12mqrpWHDhhkzZswyl1VX/3tPAG/YsOEyU7Tff//9j3Tdf46A06ZNy3nnnVcJf7/4xS9y0kkn5etf//qnPm4AAIASmAIMfOFtueWW6datWy666KI6Z+QtNWfOnMqHWqzIgAEDMmnSpDzxxBP529/+Vpn+mywJiVOmTMk666yTLl26VL6qq6vTrl27f3n8Dz30UKZPn55kyZl1O+ywQ3bbbbfKmNdff/288MILdaY5f/DBB5kyZUo22GCDT7zfDTbYIAsWLEhtbW06d+5c+WrUqNEyx7Wqsxj/VUunU394Pw8++OBHvv7SCPi///u/6dixYzbaaKNUV1dnxx13zIABA/KrX/3qsxg2AABAEQRA4Auvuro6I0eOzIIFCzJgwICMGjUqDzzwQO69996cf/752XbbbfPqq69myJAhK9zGpptumrXXXjtnnXVWunfvnu7du1cu+8EPfpA5c+Zk2LBhmTRpUqZMmZJRo0Zlxx13zHPPPfcvj//666/PCSeckPHjx2fatGkZN25c7r///sp78+21116ZN29eTj/99Lz66qt5+eWXc9JJJ2W11VbLzjvv/In326dPn3Tv3j2nnHJKnnnmmUyfPj1jx47ND37wg9x8881JlkzbbdSoUcaPH5/JkyenpqbmXz7e5dl+++0zY8aMXHrppZk2bVrGjh2bRx555GNtY2kEnDBhQv7xj39UpiV/97vfzbRp01b4ASUAAABfdaYAA18K3bp1y+9///tcdtllue222/LLX/4yDRs2TMeOHbPvvvvmhz/8YZ0PrfhnVVVV+d73vperrroqxx13XJ3LOnTokNGjR2f48OHZa6+9Ur9+/XTr1i2XX355Ntlkk3957GeffXYuuOCCDBs2rDKtt3///hk8eHCSpGPHjvnlL3+Ziy++OPvuu2/q1auXnj175rLLLqvzAR8fV7169XLxxRdnxIgRGTZsWObOnZu11147Bx98cAYNGlRZ78ADD8xvfvObPProo7n99tv/5eNdnq222ipHHHFEbrjhhowZMya9evXKiSeemEGDBi33vQNXpH379jnllFNyxhlnZP78+dl9993z7LPPplmzZp/adG0AAIDSVC1YsOCznfcFfGamTp2adddd9/MeBqzS4sWLM3PmzDrvafiXv/wlhxxySG688cZ06dLlY23vnXfeyWWXXZZJkyZltdVWy+GHH/6pxFoAAIASCYDwJSYA8mXxzDPP5LDDDsvhhx+e73znO3n33Xdz3nnnpbq6OldffXVlOu/HNX/+/DRs2PATXx8AAOCrQACELzEBkC+Tu+++O9dee22mTp2a5s2bp1evXjn66KM/lQ9aAQAAYMUEQPgSEwAp2TPPPJNevXp97P8CAABQlwAIX2ICIAAAALAq1Z/3AAAAAACAz44ACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMHqf94DAAAA4PMzfPjwTJgwIUmyePHiJElVVVWSZLfddsuee+75sbf5+OOPp1evXmncuPGnN1AAPjEBEAAA4Cts2LBhle8vuOCCdOrUKXvssce/tM2bbropG2ywgQAI8AUhAAIAALBcCxcuzPXXX59nn302NTU1WX/99fOjH/0oDRs2zOTJk3PNNddk7ty5Wbx4cbbYYovstddeueCCC/LOO+/k9NNPzwEHHJCePXt+3ocB8JXnPQABAABYrjvvvDOvvvpqzj777IwcOTKLFi3KDTfckCS57rrrstNOO+WCCy7I2WefnTfeeCNvv/12hgwZkiQ59dRTxT+ALwgBEAAAgOV69NFHs/3226dRo0apqqrKjjvumCeffDJJ0rp16zz55JP529/+lkaNGmXo0KFZY401PucRA7A8pgADAACwXLNnz861115bOetv8eLFWbhwYWpra3PYYYfl7rvvzq9+9au8//772W677T7RB4YA8NkTAAEAAFiuNm3aZJ999lnuVN5mzZpl7733zt57751p06Zl+PDh6dy5s2m/AF9ApgADAACwXH369Ml9992XhQsXJkkef/zx3HbbbampqcnJJ5+cadOmJUnatWuXZs2aJUmqq5e8zJw9e/bnM2gAluEMQAAAAJZrl112yfXXX59hw4YlSVZfffUcdNBBqV+/fnbeeeeMGDEiCxYsSFVVVXr37p3evXunqqoqm222WU455ZQMGjQo22233ed8FABULViwYPHnPQjgk5k6dWrWXXfdz3sYAAAAwBeYKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwep/3gOAr5oZM2Zk8eLFadeuXerVq5fa2tq89dZbqa6uTvv27Ze7DgAAAMAn5QxA+DdbtGhRFi9enEWLFtX5uba2doXrAAAAAHxSAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFCw+p/3AOCrpkmTJkmS+vXrV/7bpEmTVFVVrXAdAAAAgE9KXYB/s9atW9f5uaqqapll//wzAAAAwCdlCjAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABQ9P+eYAAAgAElEQVRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrP7nPQAAAPgsPPfajPQ6+ZdZnOR7G38jdx1zQJJkQU1tzrnzkYx54rlMeefdNGvUMD07rZUTdtk622/YJUly5UPjcsOfJuT+E370mY/zlVdeyQknnJCbbrqpzvLnn38+55xzTq699tqcffbZee6555IkixYtSpJUVy/5t/zvf//76dWrV0444YTstNNOOfDAA+ts55FHHsmoUaMyePDgbLXVVvnd736X8ePH57TTTvtI4xs2bFjmzZuXESNGVPb5aZs4cWJGjRqVTTfdNIceeugK1/vjH/+YO+64I7Nmzco666yTww8/PGuuueYy69XW1uY3v/lNnnrqqSxatCg9evTIYYcdloYNG650HEvvi/r1l7xMat68eTp06JDvfOc72XzzzT/Ssbz44otp2rRp1llnnY+0/pfFv3JcRx55ZI466qhssMEGdZZfdNFF6dChQ/bYY49/eXx7jByTO555IbWLF+fp049I7693SJJc/6cJGXnvE/nfqW+muqoqXdq3yaHf/laO3H6zJMnLb87MeseNSM01Z/zLY/ioxo4dm2uvvTZHHnlk+vXrt8L1br/99tx7772ZN29eOnbsmIMOOijrrrvuctf9qI+hJLnvvvty55135oMPPsjaa6+dAw88MN26dVtme6effnp++tOfVu63l156Kb/+9a/z1ltvpVWrVtlvv/2y6aabrvJ4zzzzzDz//POpqqqqLPvJT36Srl275sgjj6yz7uLFi9OjR4+ceOKJmT9/fq677ro8/fTTmT9/fvr165eDDjoo9erVq3Odm266Kbfccssyz6Gftv333z81NTWpqqpK48aN0759+2y++eYZMGBA5Tnj07Ki+3PhwoW55ppr8tRTT2XhwoVZb731cuihh6ZVq1ar3ObK7veVPbdOmjQp11xzTWbMmJHmzZtnjz32yDbbbJMkeeaZZ3L99dfnnXfeSatWrbLnnnumf//+qxzL4sWLc/311+eBBx5ITU1N+vTpk0MOOSQNGjRYZt2V7X/ixIm57rrrMmPGjLRt2zaHHHJI1ltvveXuc2WPp4/6t2WpFf1dPOecc/Lcc8/lsssuS4sWLepcZ+jQoVm8eHEuvvjiVd4+nxUBEACAIm28zpqpueaMnHn7Q/nzK69Vln9/5OhMnflerjh4t/Tq3CHza2ry26efz24jrsvdxx6Qrdf7egZtsXH2+NYGK9n6v9cJJ5xQ+X748OHp3Llz9t5778qyV155Ja1atcoTTzyR/fbbr86L0YcffjitW7f+RPudPHlyWrVqlcaNG2f8+PHp3bv3Jz+IFXj44Yfzhz/8YYUv2pb661//mtGjR+enP/1pvva1r+WWW27JyJEjc/bZZy+z7tixY/PSSy/lvPPOS4MGDXLeeeflpptuyn777feRxjRmzJgkyXvvvZenn346l19+ed55553svPPOq7zuH//4x/Ts2bO4APhFP67fHv2DJEn9A06pLDv37kfzi7seycUH7JLv9OiaZo0a5tHJU3LYr+/IzFlzcspu387X12idaRcf/28b56WXXppFixZlrbXWWul6f/rTn3L//ffnjDPOSJs2bXLrrbfmwgsvXG48+KiPoSSZMGFCbrzxxvzsZz9Lhw4dcscdd+TCCy/Mr371q8o68+bNy1VXXVUnKi1YsCDnnXde9ttvv2y55ZaZMGFCLrzwwowcOTItW7Zc6T7nzJmTY445ZrnPH0sfa0v94he/SN++fZMkN998c15//fVccMEFqa2tzVlnnZU777wzu+22W2X9KVOm5PHHH1/lcX9aTj755GywwQaZO3duJk+enGuuuSYvvvhijj/+0/sdWtn9ecstt+TVV1/N+eefnwYNGmTkyJG57rrrMnjw4JVuc2X3+8qeWz/44IP84he/yOGHH56+fftm0qRJOfPMM9O9e/c0bNgwI0eOzLBhw7Lhhhtm4sSJ+fnPf55u3bqlXbt2Kx3P2LFjM3HixFxwwQWpX79+Ro0aleeee26Z35GV7b9JkyY599xzM2TIkPTq1SuPPvpozj333Pzyl79M48aN62xnZY+nj/O3JVn138WWLVvm0UcfzYABAyrLXnzxxcyfP3+V/wj1WRMAAQD4yvjj86/k/omv5OXzf5KObZa8aG3aqEEO3qZ3duzxjazVqnmSZPQTz+WGP03IsQO2zI+u+G1ev+j4VP+/s1dOueX+TJr2Vn579A/y2ORXc8yYe/Lu7LmpV12VkfvvnO/06Jq/vf1uNj35lzlrrx0ydsL/5eU3Z2aHDbtm5P4DVji2f1WTJk3SunXrjB8/Pn369EmSzJw5M1OnTv3E0eb+++9P//79s9pqq+W+++6r80JnxIgRadGiRd5+++3MmjUrixYtylFHHZW11157pZf9s06dOuW0007LjTfemNmzZ69wLE888UT69u2bTp06JVly5uPvfve7vPHGG8vElMceeywDBw7MaqutliTZY489cuGFF37kALhUy5Yts/3226dFixa56KKL8u1vfzvNmjXLuHHjcsMNN2TOnDlp0KBBBg0alD59+uS2227LE088kQkTJmTatGnZe++9c+utt+ahhx7KwoUL07Zt2xx++OHp2LHjMvt6+eWXc9lll2XevHnp2rVrGjVqlJYtW2bffffNwoULM3r06IwfPz41NTXZYIMNcsghh6Rhw4YZNWpUWrVqlZkzZ+Yf//hH3n///QwZMiSdO3eu3Id33XVXampq0qZNmwwePDjt2rXLAw88kHHjxqWmpia1tbU55ZRTPtZxrWi7S/d52223pWHDhunbt2+dM7/+2XvvvZef/exnmTp1alZfffUMHjw4rVu3zqGHHppzzjknX/va15IseQE9fPjwXH755R/pbKv3587Pabc+kN8ctkf27LNhZfkOG3bNn087PE0bLjnT6G9vv5v1jhuRmZeelPZHnZ2/nDU431x7jSRLni9+cMlNmXbR8Znx3gc56uo788L0t7OwtjZHbr9ZjhuwZZKk03+em2O+1z8PTPprpr37flo2aZRb/3NQWjRptMy4dthhh3Tp0iUnnnjiSsffvn37DB06NKuvvnqSpF+/frnppptSU1OzzPF/1MdQkrRo0SJHH3105Xewf//+GTNmTObNm1eJJtddd1369euXJ598snK9iRMnpmnTptlqq62SJBtvvHG6dOmSp59+Ottvv/0Kf3eSZPbs2WnatOlKx5UsiTRz5syp7GP8+PHZZ599KtcdOHBgbr311koArKmpySWXXJL99tsv55577gq3++abb+bKK6/Mm2++merq6vTu3Tv77LNP6tevnyOPPDI777xzJk6cmL///e9p2rRpjj322FWOt0mTJunZs2c6duyYn/zkJ3n22WfTs2fPzJw5M1dddVVef/311NbWZscdd8zAgQOTJDNmzMhll12W1157LS1atMi+++5buY0+bGX35ze/+c3069ev8ty22Wab5Z577lnlbbuy+31lz61NmjTJj3/840qUXX/99dOmTZu88cYb6dy5cwYPHpwNN1zy+Npwww3TvHnzzJgxY5UB8A9/+EN++MMfVs6SGzZsWOWyq666KrNnz87QoUNTW1u7wv0vWLAg7dq1q/xd2mqrrXLbbbdlwoQJ6dOnT53trOzx9HH+tiQr/7uYJJtuumkefPDBOgHw4Ycf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", + "argumentInfo": { + "argumentName": "base64image", + "formattedValue": "base64 data: iVBORw0KGg..." + } + } + ], + "status": "PASSED", + "durationInNanos": 493804, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 4516432, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 152463992, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 320519894, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "an element with a $ class exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "an element with a" + }, + { + "value": "jgiven-html-thumbnail", + "argumentInfo": { + "argumentName": "multiline", + "formattedValue": "jgiven-html-thumbnail" + } + }, + { + "value": "class exists" + } + ], + "status": "PASSED", + "durationInNanos": 15772713, + "depth": 0, + "parentFailed": false + }, + { + "name": "the image is loaded", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the image is loaded" + } + ], + "status": "PASSED", + "durationInNanos": 14447903, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 834530674 + } + ], + "casesAsTable": false, + "durationInNanos": 834530674, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#274", + "description": "Scenarios of Issue #274" + } + ], + "classTitle": "HTML App" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5AppTest", + "testMethodName": "steps_can_have_multiple_attachments", + "description": "steps can have multiple attachments", + "tagIds": [ + "com.tngtech.jgiven.tags.BrowserTest", + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 235801, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has a text attachment with content", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has a text attachment with content" + }, + { + "value": "Some Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 347903, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of scenario $ has another text attachment with content", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "has another text attachment with content" + }, + { + "value": "Another Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Another Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 407903, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2174316, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 49078352, + "depth": 0, + "parentFailed": false + }, + { + "name": "the page of scenario $ is opened", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the page of scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "scenarioNr", + "formattedValue": "1" + } + }, + { + "value": "is opened" + } + ], + "status": "PASSED", + "durationInNanos": 304784681, + "attachments": [ + { + "title": "Screenshot", + "value": "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment24.png", + "mediaType": "image/png", + "binary": true + } + ], + "depth": 0, + "parentFailed": false + }, + { + "name": "$ attachment icons exist", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nrIcons", + "formattedValue": "2" + } + }, + { + "value": "attachment icons exist" + } + ], + "status": "PASSED", + "durationInNanos": 13188994, + "depth": 0, + "parentFailed": false + }, + { + "name": "the content of the attachment referenced by icon $ is", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the content of the attachment referenced by icon" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "iconNr", + "formattedValue": "1" + } + }, + { + "value": "is" + }, + { + "value": "Some Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Some Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 38565476, + "depth": 0, + "parentFailed": false + }, + { + "name": "the content of the attachment referenced by icon $ is", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the content of the attachment referenced by icon" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "iconNr", + "formattedValue": "2" + } + }, + { + "value": "is" + }, + { + "value": "Another Example Attachment\nwith some example content", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "Another Example Attachment\nwith some example content" + } + } + ], + "status": "PASSED", + "durationInNanos": 36456861, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 607583749 + } + ], + "casesAsTable": false, + "durationInNanos": 607583749, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}], + "classTitle": "HTML App", + "expanded": false, + "$$hashKey": "object:613" + } + ] + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "name": "Test Framework Execution", + "scenarios": [ + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "failing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_are_ignored", + "description": "failing tests annotated with Pending with failIfPassed set to true are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#4", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test" + } + ], + "status": "PASSED", + "durationInNanos": 43300, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 22300, + "depth": 0, + "parentFailed": false + }, + { + "name": "failIfPassed set to true", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "failIfPassed set to true" + } + ], + "status": "PASSED", + "durationInNanos": 171001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 9088565, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is ignored", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test is ignored" + } + ], + "status": "PASSED", + "durationInNanos": 181601, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 12428689 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 14912707 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 46271931 + } + ], + "casesAsTable": true, + "durationInNanos": 73613327, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + { + "value": "#4", + "description": "Scenarios of Issue #4" + }, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:152" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "description_annotations_on_test_classes_are_evaluated", + "description": "description annotations on test classes are evaluated", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class" + } + ], + "status": "PASSED", + "durationInNanos": 51101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class has a description annotation with value", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test class has a description annotation with value" + }, + { + "value": "Test Description", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "Test Description" + } + } + ], + "status": "PASSED", + "durationInNanos": 192702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 5745541, + "depth": 0, + "parentFailed": false + }, + { + "name": "the description of the report model is", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the description of the report model is" + }, + { + "value": "Test Description", + "argumentInfo": { + "argumentName": "description", + "formattedValue": "Test Description" + } + } + ], + "status": "PASSED", + "durationInNanos": 202301, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 7640154 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 9046765 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 65127566 + } + ], + "casesAsTable": true, + "durationInNanos": 81814485, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:149" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "passing_tests_annotated_with_Pending_are_ignored", + "description": "passing tests annotated with Pending are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a passing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a passing test" + } + ], + "status": "PASSED", + "durationInNanos": 30700, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 12400, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1651212, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is ignored", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test is ignored" + } + ], + "status": "PASSED", + "durationInNanos": 58001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 3072422 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 10636676 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 62145845 + } + ], + "casesAsTable": true, + "durationInNanos": 75854943, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}, {}], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:154" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "the_error_message_of_a_failing_step_is_reported", + "description": "the error message of a failing step is reported", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test" + } + ], + "status": "PASSED", + "durationInNanos": 72300, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 2224616, + "depth": 0, + "parentFailed": false + }, + { + "name": "the case is marked as failed", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the case is marked as failed" + } + ], + "status": "PASSED", + "durationInNanos": 90601, + "depth": 0, + "parentFailed": false + }, + { + "name": "an error message is stored in the report", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "an error message is stored in the report" + } + ], + "status": "PASSED", + "durationInNanos": 56300, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 8485261 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 11512682 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 82237489 + } + ], + "casesAsTable": true, + "durationInNanos": 102235432, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:157" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "passing_steps_before_failing_steps_are_reported_as_passed", + "description": "passing steps before failing steps are reported as passed", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 180002, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 5860342, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 2147815, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as passed", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as passed" + } + ], + "status": "PASSED", + "durationInNanos": 206901, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 191002, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 9748070 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 12073186 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 85057908 + } + ], + "casesAsTable": true, + "durationInNanos": 106879164, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:153" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "failing_tests_annotated_with_Pending_are_ignored", + "description": "failing tests annotated with Pending are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test" + } + ], + "status": "PASSED", + "durationInNanos": 26200, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 12000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1683113, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is ignored", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test is ignored" + } + ], + "status": "PASSED", + "durationInNanos": 102001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 8930164 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 12805991 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 39764484 + } + ], + "casesAsTable": true, + "durationInNanos": 61500639, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}, {}], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:150" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "passing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_fail", + "description": "passing tests annotated with Pending with failIfPassed set to true fail", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#4", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a passing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a passing test" + } + ], + "status": "PASSED", + "durationInNanos": 25600, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 11800, + "depth": 0, + "parentFailed": false + }, + { + "name": "failIfPassed set to true", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "failIfPassed set to true" + } + ], + "status": "PASSED", + "durationInNanos": 9601, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1708512, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation.", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation." + } + } + ], + "status": "PASSED", + "durationInNanos": 230101, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 8336259 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 11254380 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 49742656 + } + ], + "casesAsTable": true, + "durationInNanos": 69333295, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + { + "value": "#4", + "description": "Scenarios of Issue #4" + }, + {} + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:155" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "failing_tests_annotated_with_Pending_with_executeSteps_set_to_true_are_ignored", + "description": "failing tests annotated with Pending with executeSteps set to true are ignored", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeaturePending" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test" + } + ], + "status": "PASSED", + "durationInNanos": 23100, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is annotated with Pending", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test is annotated with Pending" + } + ], + "status": "PASSED", + "durationInNanos": 11001, + "depth": 0, + "parentFailed": false + }, + { + "name": "executeSteps set to true", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "executeSteps set to true" + } + ], + "status": "PASSED", + "durationInNanos": 20900, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1684912, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is ignored", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test is ignored" + } + ], + "status": "PASSED", + "durationInNanos": 51200, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 3141722 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 11048279 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 46086930 + } + ], + "casesAsTable": true, + "durationInNanos": 60276931, + "executionStatus": "SUCCESS", + "tags": [{}, {}, {}, {}], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:151" + }, + { + "className": "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", + "testMethodName": "tag_annotations_appear_in_the_report_model", + "description": "tag annotations appear in the report model", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit5", + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.FeatureTags-Tags" + ], + "explicitParameters": ["testFramework"], + "derivedParameters": ["testFramework"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test" + } + ], + "status": "PASSED", + "durationInNanos": 29800, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has a tag annotation named", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has a tag annotation named" + }, + { + "value": "TestTag", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "TestTag" + } + } + ], + "status": "PASSED", + "durationInNanos": 162402, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with" + }, + { + "value": "JUnit", + "argumentInfo": { + "parameterName": "testFramework", + "argumentName": "framework", + "formattedValue": "JUnit" + } + } + ], + "status": "PASSED", + "durationInNanos": 1513811, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model contains a tag named", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model contains a tag named" + }, + { + "value": "com.tngtech.jgiven.tests.TestTag", + "argumentInfo": { + "argumentName": "tagName", + "formattedValue": "com.tngtech.jgiven.tests.TestTag" + } + } + ], + "status": "PASSED", + "durationInNanos": 463803, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["JUnit"], + "derivedArguments": ["JUnit"], + "status": "SUCCESS", + "durationInNanos": 3787827 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["JUnit5"], + "derivedArguments": ["JUnit5"], + "status": "SUCCESS", + "durationInNanos": 11783785 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["TestNG"], + "derivedArguments": ["TestNG"], + "status": "SUCCESS", + "durationInNanos": 53718284 + } + ], + "casesAsTable": true, + "durationInNanos": 69289896, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + {}, + { + "value": "Tags" + } + ], + "classTitle": "Test Framework Execution", + "expanded": false, + "$$hashKey": "object:156" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "name": "Difference Analyzer", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "testMethodName": "the_difference_analyzer_should_find_additional_steps_in_the_middle", + "description": "the difference analyzer should find additional steps in the middle", + "tagIds": ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 62900, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 287702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 304002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "extra step in the middle", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "extra step in the middle" + } + } + ], + "status": "PASSED", + "durationInNanos": 254902, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + } + ], + "status": "PASSED", + "durationInNanos": 224502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 380503, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + } + ], + "status": "PASSED", + "durationInNanos": 272202, + "depth": 0, + "parentFailed": false + }, + { + "name": "the difference analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the difference analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 3865428, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 269302, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "2" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 291702, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "3" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 201301, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 195402, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "2" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 198801, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 8318459 + } + ], + "casesAsTable": false, + "durationInNanos": 8318459, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Difference Analyzer", + "expanded": false, + "$$hashKey": "object:606" + }, + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "testMethodName": "the_difference_analyzer_should_find_additional_steps_at_the_beginning", + "description": "the difference analyzer should find additional steps at the beginning", + "tagIds": ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 45900, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 259702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "extra step at the beginning", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "extra step at the beginning" + } + } + ], + "status": "PASSED", + "durationInNanos": 260202, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 201402, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 288602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the difference analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the difference analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 115301, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 353103, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "2" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 226401, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 216301, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 3032021 + } + ], + "casesAsTable": false, + "durationInNanos": 3032021, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Difference Analyzer", + "expanded": false, + "$$hashKey": "object:604" + }, + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "testMethodName": "the_difference_analyzer_should_find_differences_in_step_arguments", + "description": "the difference analyzer should find differences in step arguments", + "tagIds": ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 49300, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 327702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 259502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 299702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the difference analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the difference analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 562504, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 243802, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "3" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 14760806, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 277702, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "3" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 267701, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 17969330 + } + ], + "casesAsTable": false, + "durationInNanos": 17969330, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Difference Analyzer", + "expanded": false, + "$$hashKey": "object:607" + }, + { + "className": "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", + "testMethodName": "the_difference_analyzer_should_find_additional_steps_at_the_end", + "description": "the difference analyzer should find additional steps at the end", + "tagIds": ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 47901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 190301, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 184502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + } + ], + "status": "PASSED", + "durationInNanos": 187201, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has step $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + } + ], + "status": "PASSED", + "durationInNanos": 190201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the difference analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the difference analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 61300, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 197501, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "2" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "is marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 201802, + "depth": 0, + "parentFailed": false + }, + { + "name": "word $ of step $ of case $ is not marked as diff", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "word" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "wordNr", + "formattedValue": "2" + } + }, + { + "value": "of step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "is not marked as diff" + } + ], + "status": "PASSED", + "durationInNanos": 212701, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 2341117 + } + ], + "casesAsTable": false, + "durationInNanos": 2341117, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Difference Analyzer", + "expanded": false, + "$$hashKey": "object:605" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + "name": "Ascii Doc Report Generator", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + "testMethodName": "the_AsciiDoc_reporter_generates_an_index_file_a_test_file_and_multiple_other_asciidoc_files", + "description": "the AsciiDoc reporter generates an index file a test file and multiple other asciidoc files", + "tagIds": ["com.tngtech.jgiven.tags.FeatureAsciiDocReport"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 1695912, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3116423, + "depth": 0, + "parentFailed": false + }, + { + "name": "the asciidoc reporter is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the asciidoc reporter is executed" + } + ], + "status": "PASSED", + "durationInNanos": 104707653, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "index.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"index.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 9958772, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "totalStatistics.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"totalStatistics.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 1087808, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "allScenarios.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"allScenarios.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 253502, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "failedScenarios.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"failedScenarios.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 528704, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "pendingScenarios.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"pendingScenarios.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 244502, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file with name $ exists", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file with name" + }, + { + "value": "features/Test.asciidoc", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"features/Test.asciidoc\"" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 306902, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 126571010 + } + ], + "casesAsTable": false, + "durationInNanos": 126571010, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Ascii Doc Report Generator" + }, + { + "className": "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", + "testMethodName": "the_multilines_values_are_rendered_as_literal_blocks", + "description": "the multilines values are rendered as literal blocks", + "tagIds": ["com.tngtech.jgiven.tags.FeatureAsciiDocReport"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 259301, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ of case $ has a formatted value $ as parameter", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has a formatted value" + }, + { + "value": "Some \ntext \nwith \nnewlines", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "Some \ntext \nwith \nnewlines" + } + }, + { + "value": "as parameter" + } + ], + "status": "PASSED", + "durationInNanos": 438003, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 3492725, + "depth": 0, + "parentFailed": false + }, + { + "name": "the asciidoc reporter is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the asciidoc reporter is executed" + } + ], + "status": "PASSED", + "durationInNanos": 36131260, + "depth": 0, + "parentFailed": false + }, + { + "name": "the asciidoc report $ exists", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the asciidoc report" + }, + { + "value": "features/Test.asciidoc", + "argumentInfo": { + "argumentName": "ascidocFile", + "formattedValue": "features/Test.asciidoc" + } + }, + { + "value": "exists" + } + ], + "status": "PASSED", + "durationInNanos": 482703, + "depth": 0, + "parentFailed": false + }, + { + "name": "the literal block is added $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the literal block is added" + }, + { + "value": "....\nSome \ntext \nwith \nnewlines\n....", + "argumentInfo": { + "argumentName": "expectedLiteral", + "formattedValue": "....\nSome \ntext \nwith \nnewlines\n...." + } + } + ], + "status": "PASSED", + "durationInNanos": 32621635, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 115058328 + } + ], + "casesAsTable": false, + "durationInNanos": 115058328, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Ascii Doc Report Generator" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", + "name": "Repeated Stage Use", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", + "testMethodName": "before_stage_method_is_executed_multiple_times", + "description": "before stage method is executed multiple times", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a scenario step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a scenario step" + } + ], + "status": "PASSED", + "durationInNanos": 90501, + "depth": 0, + "parentFailed": false + }, + { + "name": "a stage is completed", + "words": [ + { + "value": "a stage is completed" + } + ], + "status": "PASSED", + "durationInNanos": 84501, + "depth": 0, + "parentFailed": false + }, + { + "name": "non repeatable lifecycle method ran", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "non repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 4823835, + "depth": 0, + "parentFailed": false + }, + { + "name": "repeatable lifecycle method ran", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 351103, + "depth": 0, + "parentFailed": false + }, + { + "name": "a scenario step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a scenario step" + } + ], + "status": "PASSED", + "durationInNanos": 404403, + "depth": 0, + "parentFailed": false + }, + { + "name": "a stage is completed", + "words": [ + { + "value": "a stage is completed" + } + ], + "status": "PASSED", + "durationInNanos": 279502, + "depth": 0, + "parentFailed": false + }, + { + "name": "repeatable lifecycle method ran", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 290903, + "depth": 0, + "parentFailed": false + }, + { + "name": "non repeatable lifecycle method ran", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "non repeatable lifecycle method ran" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 213201, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 40164489 + } + ], + "casesAsTable": false, + "durationInNanos": 40164489, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Repeated Stage Use" + }, + { + "className": "com.tngtech.jgiven.impl.RepeatedStageUseTest", + "testMethodName": "after_stage_method_is_executed_multiple_times", + "description": "after stage method is executed multiple times", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a scenario step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a scenario step" + } + ], + "status": "PASSED", + "durationInNanos": 47101, + "depth": 0, + "parentFailed": false + }, + { + "name": "a stage is completed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "a stage is completed" + } + ], + "status": "PASSED", + "durationInNanos": 101201, + "depth": 0, + "parentFailed": false + }, + { + "name": "non repeatable lifecycle method ran", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "non repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 257602, + "depth": 0, + "parentFailed": false + }, + { + "name": "repeatable lifecycle method ran", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 434603, + "depth": 0, + "parentFailed": false + }, + { + "name": "a scenario step", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a scenario step" + } + ], + "status": "PASSED", + "durationInNanos": 44600, + "depth": 0, + "parentFailed": false + }, + { + "name": "a stage is completed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "a stage is completed" + } + ], + "status": "PASSED", + "durationInNanos": 57600, + "depth": 0, + "parentFailed": false + }, + { + "name": "repeatable lifecycle method ran", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "repeatable lifecycle method ran" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "true" + } + } + ], + "status": "PASSED", + "durationInNanos": 515604, + "depth": 0, + "parentFailed": false + }, + { + "name": "non repeatable lifecycle method ran", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "non repeatable lifecycle method ran" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "false" + } + } + ], + "status": "PASSED", + "durationInNanos": 194502, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4888935 + } + ], + "casesAsTable": false, + "durationInNanos": 4888935, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Repeated Stage Use" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "name": "J Unit Executor", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "after_stage_methods_of_stages_following_failing_stages_are_ignored", + "description": "after stage methods of stages following failing stages are ignored", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 613505, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 2309517, + "depth": 0, + "parentFailed": false + }, + { + "name": "stage $ has a failing after stage method", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "stage" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a failing after stage method" + } + ], + "status": "PASSED", + "durationInNanos": 297602, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 280602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 126871012, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 194902, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 661205, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 281102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 135850177 + } + ], + "casesAsTable": false, + "durationInNanos": 135850177, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1332" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "test_classes_with_only_ignored_test_result_in_a_valid_report", + "description": "test classes with only ignored test result in a valid report", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#25" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class with all tests ignored", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class with all tests ignored" + } + ], + "status": "PASSED", + "durationInNanos": 2911521, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 4978835, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model is either null or empty", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model is either null or empty" + } + ], + "status": "PASSED", + "durationInNanos": 224602, + "extendedDescription": "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", + "depth": 0, + "parentFailed": false + }, + { + "name": "has a valid class name if it is not null", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "has a valid class name if it is not null" + } + ], + "status": "PASSED", + "durationInNanos": 141001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 11680684 + } + ], + "casesAsTable": false, + "durationInNanos": 11680684, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#25" + } + ], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1336" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "the_JUnit_Parametrized_runner_creates_correct_cases", + "description": "the JUnit Parametrized runner creates correct cases", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a JUnit test class with the Parameterized Runner", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a JUnit test class with the Parameterized Runner" + } + ], + "status": "PASSED", + "durationInNanos": 97101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class has $ parameters", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test class has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nParameters", + "formattedValue": "2" + } + }, + { + "value": "parameters" + } + ], + "status": "PASSED", + "durationInNanos": 5710741, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 67272583, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report model contains one scenario for each test method", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report model contains one scenario for each test method" + } + ], + "status": "PASSED", + "durationInNanos": 571804, + "depth": 0, + "parentFailed": false + }, + { + "name": "each scenario contains $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "each scenario contains" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nParameters", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 500904, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 81940189 + } + ], + "casesAsTable": false, + "durationInNanos": 81940189, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1337" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "all_steps_of_stages_following_failing_stages_are_ignored", + "description": "all steps of stages following failing stages are ignored", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 334602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 329002, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 278602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 2683919, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 78800, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 348702, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 238101, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 5513840 + } + ], + "casesAsTable": false, + "durationInNanos": 5513840, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1333" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "steps_following_failing_steps_are_reported_as_skipped", + "description": "steps following failing steps are reported as skipped", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "3" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 363903, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 290102, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 12578390, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 420203, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 247302, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "3" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 271202, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 15509911 + } + ], + "casesAsTable": false, + "durationInNanos": 15509911, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1335" + }, + { + "className": "com.tngtech.jgiven.junit.JUnitExecutorTest", + "testMethodName": "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + "description": "exception in scenario is not hidden by exception in JUnit after method", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#49" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test class with a failing scenario and a failing after stage", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test class with a failing scenario and a failing after stage" + } + ], + "status": "PASSED", + "durationInNanos": 3306623, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 8229560, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "assertion failed in test step", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "assertion failed in test step" + } + } + ], + "status": "PASSED", + "durationInNanos": 796406, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 14999308 + } + ], + "casesAsTable": false, + "durationInNanos": 14999308, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#49", + "description": "Scenarios of Issue #49" + } + ], + "classTitle": "J Unit Executor", + "expanded": false, + "$$hashKey": "object:1334" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.LifecycleOrderingTest", + "name": "Lifecycle Ordering", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.LifecycleOrderingTest", + "testMethodName": "ostensibly_empty_test", + "description": "ostensibly empty test", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "an emptySetup", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "an emptySetup" + } + ], + "status": "PASSED", + "durationInNanos": 109400, + "depth": 0, + "parentFailed": false + }, + { + "name": "no action is performed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "no action is performed" + } + ], + "status": "PASSED", + "durationInNanos": 20700, + "depth": 0, + "parentFailed": false + }, + { + "name": "nothing happens", + "words": [ + { + "value": "then", + "isIntroWord": true + }, + { + "value": "nothing happens" + } + ], + "status": "PASSED", + "durationInNanos": 11900, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4417131 + } + ], + "casesAsTable": false, + "durationInNanos": 4417131, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Lifecycle Ordering" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", + "name": "Simple Stage Repetition Use", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", + "testMethodName": "non_repeatable_methods_are_called_exactly_once", + "description": "non repeatable methods are called exactly once", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a simple stage containing before and after methods", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "a simple stage containing before and after methods" + } + ], + "status": "PASSED", + "durationInNanos": 123001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed", + "words": [ + { + "value": "when", + "isIntroWord": true + }, + { + "value": "the test is executed" + } + ], + "status": "PASSED", + "durationInNanos": 60000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the before stage was called $ times", + "words": [ + { + "value": "then", + "isIntroWord": true + }, + { + "value": "the before stage was called" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "numberOfCalls", + "formattedValue": "1" + } + }, + { + "value": "times" + } + ], + "status": "PASSED", + "durationInNanos": 6729049, + "depth": 0, + "parentFailed": false + }, + { + "name": "the after stage method was called $ times", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the after stage method was called" + }, + { + "value": "0", + "argumentInfo": { + "argumentName": "numberOfCalls", + "formattedValue": "0" + } + }, + { + "value": "times" + } + ], + "status": "PASSED", + "durationInNanos": 418803, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 9219067 + } + ], + "casesAsTable": false, + "durationInNanos": 9219067, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Simple Stage Repetition Use" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + "name": "Argument Analyzer", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + "testMethodName": "multiple_formatted_arguments_lead_to_one_parameter", + "description": "multiple formatted arguments lead to one parameter", + "tagIds": ["com.tngtech.jgiven.tags.Issue-#163"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "an unanalyzed report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "an unanalyzed report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 268502, + "extendedDescription": "A report model where the analysers have not been executed on", + "depth": 0, + "parentFailed": false + }, + { + "name": "parameters", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 625405, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 249502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 355003, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "'foo'", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"'foo'\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 4366532, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "'foo'", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"'foo'\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 492903, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 266102, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "'bar'", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"'bar'\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 649704, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "'bar'", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"'bar'\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 417703, + "depth": 0, + "parentFailed": false + }, + { + "name": "the argument analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the argument analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 247001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has derived parameters", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has derived parameters" + }, + { + "value": "arg1", + "argumentInfo": { + "argumentName": "parameters", + "formattedValue": "arg1" + } + } + ], + "status": "PASSED", + "durationInNanos": 2632319, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has derived arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has derived arguments" + }, + { + "value": "'foo'", + "argumentInfo": { + "argumentName": "arguments", + "formattedValue": "'foo'" + } + } + ], + "status": "PASSED", + "durationInNanos": 460503, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has derived arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "has derived arguments" + }, + { + "value": "'bar'", + "argumentInfo": { + "argumentName": "arguments", + "formattedValue": "'bar'" + } + } + ], + "status": "PASSED", + "durationInNanos": 399103, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 12902992 + } + ], + "casesAsTable": false, + "durationInNanos": 12902992, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "#163", + "description": "Scenarios of Issue #163" + } + ], + "classTitle": "Argument Analyzer" + }, + { + "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + "testMethodName": "different_structure_prevent_data_table", + "description": "different structure prevent data table", + "tagIds": ["com.tngtech.jgiven.tags.Issue-#163"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "an unanalyzed report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "an unanalyzed report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 52500, + "extendedDescription": "A report model where the analysers have not been executed on", + "depth": 0, + "parentFailed": false + }, + { + "name": "parameters", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 245602, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 208602, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 234302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 325303, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 289102, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 278702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "some step different to the case before", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step different to the case before" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 255802, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 344803, + "depth": 0, + "parentFailed": false + }, + { + "name": "the argument analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the argument analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 41501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has no derived parameters", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has no derived parameters" + } + ], + "status": "PASSED", + "durationInNanos": 66501, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 2952121 + } + ], + "casesAsTable": false, + "durationInNanos": 2952121, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "#163", + "description": "Scenarios of Issue #163" + } + ], + "classTitle": "Argument Analyzer" + }, + { + "className": "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", + "testMethodName": "multiple_parameter_usages_lead_to_one_parameter", + "description": "multiple parameter usages lead to one parameter", + "tagIds": ["com.tngtech.jgiven.tags.Issue-#32"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "an unanalyzed report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "an unanalyzed report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 70401, + "extendedDescription": "A report model where the analysers have not been executed on", + "depth": 0, + "parentFailed": false + }, + { + "name": "parameters", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 366203, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 298802, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 419103, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 395103, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has a step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + }, + { + "value": "with argument" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 302002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 338002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 292602, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a step" + }, + { + "value": "another step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "another step" + } + }, + { + "value": "with argument" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 237702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the argument analyzer is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the argument analyzer is executed" + } + ], + "status": "PASSED", + "durationInNanos": 129901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has derived parameters", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has derived parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "parameters", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 239802, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has derived arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + }, + { + "value": "has derived arguments" + }, + { + "value": "foo", + "argumentInfo": { + "argumentName": "arguments", + "formattedValue": "foo" + } + } + ], + "status": "PASSED", + "durationInNanos": 250302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has derived arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "2" + } + }, + { + "value": "has derived arguments" + }, + { + "value": "bar", + "argumentInfo": { + "argumentName": "arguments", + "formattedValue": "bar" + } + } + ], + "status": "PASSED", + "durationInNanos": 266302, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4819435 + } + ], + "casesAsTable": false, + "durationInNanos": 4819435, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "#32", + "description": "Scenarios of Issue #32" + } + ], + "classTitle": "Argument Analyzer" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", + "name": "De Einfacher Szenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", + "testMethodName": "Szenarien_können_in_deutsch_geschrieben_werden", + "description": "Szenarien können in deutsch geschrieben werden", + "tagIds": ["com.tngtech.jgiven.tags.FeatureGerman"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "ein deutsches Projekt", + "words": [ + { + "value": "gegeben", + "isIntroWord": true + }, + { + "value": "ein deutsches Projekt" + } + ], + "status": "PASSED", + "durationInNanos": 157101, + "depth": 0, + "parentFailed": false + }, + { + "name": "JGiven verwendet wird", + "words": [ + { + "value": "wenn", + "isIntroWord": true + }, + { + "value": "JGiven verwendet wird" + } + ], + "status": "PASSED", + "durationInNanos": 193101, + "depth": 0, + "parentFailed": false + }, + { + "name": "die Szenarien in deutsch geschrieben werden", + "words": [ + { + "value": "und", + "isIntroWord": true + }, + { + "value": "die Szenarien in deutsch geschrieben werden" + } + ], + "status": "PASSED", + "durationInNanos": 43301, + "depth": 0, + "parentFailed": false + }, + { + "name": "generiert JGiven deutsche Berichte", + "words": [ + { + "value": "dann", + "isIntroWord": true + }, + { + "value": "generiert JGiven deutsche Berichte" + } + ], + "status": "PASSED", + "durationInNanos": 808805, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4559333 + } + ], + "casesAsTable": false, + "durationInNanos": 4559333, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "De Einfacher Szenario", + "expanded": false, + "$$hashKey": "object:602" + } + ] + }, + { + "className": "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", + "name": "Test With Exceptions In After Method", + "scenarios": [ + { + "className": "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", + "testMethodName": "test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", + "description": "test that exception in scenario is not hidden by exception in JUnit after method", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "nothing", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "nothing" + } + ], + "status": "PASSED", + "durationInNanos": 105601, + "depth": 0, + "parentFailed": false + }, + { + "name": "a step fails", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "a step fails" + } + ], + "status": "FAILED", + "durationInNanos": 538304, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "FAILED", + "errorMessage": "java.lang.AssertionError: assertion failed in test step", + "stackTrace": [ + "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", + "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", + "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod.test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(TestWithExceptionsInAfterMethod.java:22)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", + "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", + "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", + "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", + "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", + "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", + "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", + "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", + "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", + "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", + "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", + "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", + "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", + "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", + "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", + "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", + "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", + "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", + "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(JUnit5ExecutorTest.java:43)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", + "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", + "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", + "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", + "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", + "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", + "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", + "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", + "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", + "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", + "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", + "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", + "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", + "org.junit.rules.RunRules.evaluate(RunRules.java:20)", + "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", + "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", + "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", + "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", + "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", + "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", + "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", + "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", + "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", + "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", + "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", + "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", + "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" + ], + "durationInNanos": 5174537 + } + ], + "casesAsTable": false, + "durationInNanos": 5174537, + "executionStatus": "FAILED", + "tags": [], + "classTitle": "Test With Exceptions In After Method" + } + ] + }, + { + "className": "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", + "name": "Parallelization Error Prevention", + "scenarios": [ + { + "className": "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", + "testMethodName": "attempting_to_run_testNG_in_parallel_with_injected_stages_is_prevented", + "description": "attempting to run testNG in parallel with injected stages is prevented", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#829" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a testNG class with parallel tests and injected stages", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a testNG class with parallel tests and injected stages" + } + ], + "status": "PASSED", + "durationInNanos": 1732913, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with TestNG", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with TestNG" + } + ], + "status": "PASSED", + "durationInNanos": 51989872, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails with message", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails with message" + }, + { + "value": "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information.", + "argumentInfo": { + "argumentName": "expectedMessage", + "formattedValue": "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information." + } + } + ], + "status": "PASSED", + "durationInNanos": 323302, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 55119094 + } + ], + "casesAsTable": false, + "durationInNanos": 55119094, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#829", + "description": "Scenarios of Issue #829" + } + ], + "classTitle": "Parallelization Error Prevention", + "expanded": false, + "$$hashKey": "object:148" + } + ] + }, + { + "className": "com.tngtech.jgiven.testng.DataProviderTestNgTest", + "name": "Data Provider Test Ng", + "scenarios": [ + { + "className": "com.tngtech.jgiven.testng.DataProviderTestNgTest", + "testMethodName": "a_scenario_with_one_failing_case_still_executes_the_following_ones", + "description": "a scenario with one failing case still executes the following ones", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTestNg", + "com.tngtech.jgiven.tags.Issue-#123" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a TestNG test with two cases and the first one fails", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a TestNG test with two cases and the first one fails", + "$$hashKey": "object:444" + } + ], + "status": "PASSED", + "durationInNanos": 483504, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:407" + }, + { + "name": "the test class is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with", + "$$hashKey": "object:449" + }, + { + "value": "TestNG", + "argumentInfo": { + "argumentName": "framework", + "formattedValue": "TestNG" + }, + "$$hashKey": "object:450" + } + ], + "status": "PASSED", + "durationInNanos": 68705692, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:408" + }, + { + "name": "$ tests fail", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "nFailedTests", + "formattedValue": "1" + }, + "$$hashKey": "object:456" + }, + { + "value": "tests fail", + "$$hashKey": "object:457" + } + ], + "status": "PASSED", + "durationInNanos": 905906, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:409" + }, + { + "name": "the report model contains one scenario with $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report model contains one scenario with", + "$$hashKey": "object:463" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "nCases", + "formattedValue": "2" + }, + "$$hashKey": "object:464" + }, + { + "value": "cases", + "$$hashKey": "object:465" + } + ], + "status": "PASSED", + "durationInNanos": 257701, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:410" + }, + { + "name": "the scenario has execution status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has execution status", + "$$hashKey": "object:473" + }, + { + "value": "FAILED", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "FAILED" + }, + "$$hashKey": "object:474" + } + ], + "status": "PASSED", + "durationInNanos": 120001, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:411" + }, + { + "name": "case $ has status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case", + "$$hashKey": "object:480" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + }, + "$$hashKey": "object:481" + }, + { + "value": "has status", + "$$hashKey": "object:482" + }, + { + "value": "FAILED", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "FAILED" + }, + "$$hashKey": "object:483" + } + ], + "status": "PASSED", + "durationInNanos": 192701, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:412" + }, + { + "name": "case $ has status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case", + "$$hashKey": "object:493" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + }, + "$$hashKey": "object:494" + }, + { + "value": "has status", + "$$hashKey": "object:495" + }, + { + "value": "SUCCESS", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "SUCCESS" + }, + "$$hashKey": "object:496" + } + ], + "status": "PASSED", + "durationInNanos": 212502, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:413" + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 72215616, + "$$hashKey": "object:404" + } + ], + "casesAsTable": false, + "durationInNanos": 72215616, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#123", + "description": "Scenarios of Issue #123" + } + ], + "classTitle": "Data Provider Test Ng", + "expanded": false, + "$$hashKey": "object:146" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "name": "Plain Text Scenario Writer", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "data_tables_are_generated_correctly_in_text_reports", + "description": "data tables are generated correctly in text reports", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#34" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 71801, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "3" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 264302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "43", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"43\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 332403, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg11", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg11\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 271302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "4", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"4\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 261702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg21", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg21\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 256502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ fails with error message", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "fails with error message" + }, + { + "value": "Some Error", + "argumentInfo": { + "argumentName": "errorMessage", + "formattedValue": "Some Error" + } + } + ], + "status": "PASSED", + "durationInNanos": 218602, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "3" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "1234567", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"1234567\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 267002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "3", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "3" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg31", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg31\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg2", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg2\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 245302, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 12775591, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 400403, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 157202, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 122501, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 17576626 + } + ], + "casesAsTable": false, + "durationInNanos": 17576626, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#34", + "description": "Scenarios of Issue #34" + } + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:619" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "new_lines_in_data_tables_do_not_break_the_table_layout", + "description": "new lines in data tables do not break the table layout", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#152" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 44401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 186101, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "1\n2", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"1\n2\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 431703, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "4", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"4\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg1", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg1\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 581705, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 8388660, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 176901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 159601, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 11461882 + } + ], + "casesAsTable": false, + "durationInNanos": 11461882, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#152", + "description": "Scenarios of Issue #152" + } + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:621" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "data_tables_are_generated_for_empty_strings", + "description": "data tables are generated for empty strings", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 45101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 199201, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "non empty string", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"non empty string\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 300903, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "arg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"arg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 261002, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 399503, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 141801, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 115001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 2541418 + } + ], + "casesAsTable": false, + "durationInNanos": 2541418, + "executionStatus": "SUCCESS", + "tags": [{}, {}], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:620" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "ignored_steps_marked_in_text_reports", + "description": "ignored steps marked in text reports", + "tagIds": ["com.tngtech.jgiven.tags.FeatureTextReport"], + "explicitParameters": ["status", "expectedText"], + "derivedParameters": ["status", "expectedText"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 47800, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is named", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is named" + }, + { + "value": "something happens", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "something happens" + } + } + ], + "status": "PASSED", + "durationInNanos": 240202, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ has status", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "has status" + }, + { + "value": "PASSED", + "argumentInfo": { + "parameterName": "status", + "argumentName": "status", + "formattedValue": "PASSED" + } + } + ], + "status": "PASSED", + "durationInNanos": 187901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 231501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "something happens", + "argumentInfo": { + "parameterName": "expectedText", + "argumentName": "line", + "formattedValue": "something happens" + } + } + ], + "status": "PASSED", + "durationInNanos": 152501, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["PASSED", "something happens"], + "derivedArguments": ["PASSED", "something happens"], + "status": "SUCCESS", + "durationInNanos": 1978214 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["FAILED", "something happens (failed)"], + "derivedArguments": ["FAILED", "something happens (failed)"], + "status": "SUCCESS", + "durationInNanos": 10393174 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["SKIPPED", "something happens (skipped)"], + "derivedArguments": ["SKIPPED", "something happens (skipped)"], + "status": "SUCCESS", + "durationInNanos": 2467018 + }, + { + "caseNr": 4, + "steps": [], + "explicitArguments": ["PENDING", "something happens (pending)"], + "derivedArguments": ["PENDING", "something happens (pending)"], + "status": "SUCCESS", + "durationInNanos": 12376589 + } + ], + "casesAsTable": true, + "durationInNanos": 27214995, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Plain Text Scenario Writer" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "table_annotations_at_parameters_lead_to_data_tables_in_the_report", + "description": "table annotations at parameters lead to data tables in the report", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.Issue-#52", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + "explicitParameters": ["headerType", "hasHeaderLine"], + "derivedParameters": ["headerType", "line"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 78601, + "depth": 0, + "parentFailed": false + }, + { + "name": "a step has a data table with following values", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a step has a data table with following values" + }, + { + "value": "[[foo, bar], [1, a], [2, b]]", + "argumentInfo": { + "argumentName": "dataTable", + "dataTable": { + "headerType": "HORIZONTAL", + "data": [ + ["foo", "bar"], + ["1", "a"], + ["2", "b"] + ] + } + } + } + ], + "status": "PASSED", + "durationInNanos": 26546090, + "depth": 0, + "parentFailed": false + }, + { + "name": "header type set to", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "header type set to" + }, + { + "value": "VERTICAL", + "argumentInfo": { + "parameterName": "headerType", + "argumentName": "headerType", + "formattedValue": "VERTICAL" + } + } + ], + "status": "PASSED", + "durationInNanos": 211101, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 465404, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n", + "argumentInfo": { + "parameterName": "line", + "argumentName": "line", + "formattedValue": "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 227502, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["VERTICAL", "false"], + "derivedArguments": [ + "VERTICAL", + "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + ], + "status": "SUCCESS", + "durationInNanos": 28951607 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["HORIZONTAL", "true"], + "derivedArguments": [ + "HORIZONTAL", + "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" + ], + "status": "SUCCESS", + "durationInNanos": 1995914 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["NONE", "false"], + "derivedArguments": [ + "NONE", + "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" + ], + "status": "SUCCESS", + "durationInNanos": 1839113 + }, + { + "caseNr": 4, + "steps": [], + "explicitArguments": ["BOTH", "true"], + "derivedArguments": [ + "BOTH", + "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" + ], + "status": "SUCCESS", + "durationInNanos": 1593212 + } + ], + "casesAsTable": true, + "durationInNanos": 34379846, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#52", + "description": "Scenarios of Issue #52" + }, + {} + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:623" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "arguments_are_correctly_printed_in_text_reports_for_data_tables", + "description": "arguments are correctly printed in text reports for data tables", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#10" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 37100, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has parameters", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has parameters" + }, + { + "value": "param1", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "param1" + } + } + ], + "status": "PASSED", + "durationInNanos": 297702, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 179602, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "arg10", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "arg10" + } + } + ], + "status": "PASSED", + "durationInNanos": 147301, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg10", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg10\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 312002, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "arg20", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "arg20" + } + } + ], + "status": "PASSED", + "durationInNanos": 283702, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "arg20", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"arg20\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "aArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"aArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 334102, + "depth": 0, + "parentFailed": false + }, + { + "name": "all cases have a step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "all cases have a step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "someArg", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "someArg" + } + } + ], + "status": "PASSED", + "durationInNanos": 206201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 5862042, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "some step someArg", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "some step someArg" + } + } + ], + "status": "PASSED", + "durationInNanos": 162401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "some arg step ", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "some arg step " + } + } + ], + "status": "PASSED", + "durationInNanos": 130101, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 9048065 + } + ], + "casesAsTable": false, + "durationInNanos": 9048065, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#10", + "description": "Scenarios of Issue #10" + } + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:618" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "cases_are_generated_in_text_reports", + "description": "cases are generated in text reports", + "tagIds": ["com.tngtech.jgiven.tags.FeatureTextReport"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 39201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 227401, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "some step" + } + }, + { + "value": "with argument" + }, + { + "value": "someArg", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "someArg" + } + } + ], + "status": "PASSED", + "durationInNanos": 152002, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 519504, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "Case 1:", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "Case 1:" + } + } + ], + "status": "PASSED", + "durationInNanos": 145001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "Case 2:", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "Case 2:" + } + } + ], + "status": "PASSED", + "durationInNanos": 113801, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "When some step someArg", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "When some step someArg" + } + } + ], + "status": "PASSED", + "durationInNanos": 120201, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1955114 + } + ], + "casesAsTable": false, + "durationInNanos": 1955114, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Plain Text Scenario Writer" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "a_description_column_is_generated_if_cases_have_a_description", + "description": "a description column is generated if cases have a description", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 38700, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ default cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "default cases" + } + ], + "status": "PASSED", + "durationInNanos": 177502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has description" + }, + { + "value": "some test description", + "argumentInfo": { + "argumentName": "description", + "formattedValue": "some test description" + } + } + ], + "status": "PASSED", + "durationInNanos": 165301, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has description", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has description" + }, + { + "value": "another case", + "argumentInfo": { + "argumentName": "description", + "formattedValue": "another case" + } + } + ], + "status": "PASSED", + "durationInNanos": 146901, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 367002, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 161201, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1918714 + } + ], + "casesAsTable": false, + "durationInNanos": 1918714, + "executionStatus": "SUCCESS", + "tags": [{}, {}], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:617" + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", + "testMethodName": "parameters_with_equal_values_but_different_formatting_result_in_different_placeholders", + "description": "parameters with equal values but different formatting result in different placeholders", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureTextReport", + "com.tngtech.jgiven.tags.FeatureDataTables", + "com.tngtech.jgiven.tags.Issue-#104" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model with one scenario", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model with one scenario" + } + ], + "status": "PASSED", + "durationInNanos": 49000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has $ cases", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the scenario has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncases", + "formattedValue": "2" + } + }, + { + "value": "cases" + } + ], + "status": "PASSED", + "durationInNanos": 194301, + "depth": 0, + "parentFailed": false + }, + { + "name": "parameters", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "parameters" + }, + { + "value": "aParam, anotherParam", + "argumentInfo": { + "argumentName": "params", + "formattedValue": "aParam, anotherParam" + } + } + ], + "status": "PASSED", + "durationInNanos": 220302, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has arguments" + }, + { + "value": "false, false", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "false, false" + } + } + ], + "status": "PASSED", + "durationInNanos": 172601, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"false\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "anArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"anArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 304402, + "depth": 0, + "parentFailed": false + }, + { + "name": "formatted value", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "formatted value" + }, + { + "value": "off", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "\"off\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 193001, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "1" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "false", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"false\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "anotherArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"anotherArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 288402, + "depth": 0, + "parentFailed": false + }, + { + "name": "formatted value", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "formatted value" + }, + { + "value": "is not", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "\"is not\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 165201, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has arguments", + "words": [ + { + "value": "given", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has arguments" + }, + { + "value": "true, true", + "argumentInfo": { + "argumentName": "args", + "formattedValue": "true, true" + } + } + ], + "status": "PASSED", + "durationInNanos": 192601, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "some arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"some arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"true\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "anArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"anArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 283102, + "depth": 0, + "parentFailed": false + }, + { + "name": "formatted value", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "formatted value" + }, + { + "value": "on", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "\"on\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 188502, + "depth": 0, + "parentFailed": false + }, + { + "name": "case $ has a when step $ with argument $ and argument name $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "case" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "ncase", + "formattedValue": "2" + } + }, + { + "value": "has a when step" + }, + { + "value": "another arg step", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"another arg step\"" + } + }, + { + "value": "with argument" + }, + { + "value": "true", + "argumentInfo": { + "argumentName": "arg", + "formattedValue": "\"true\"" + } + }, + { + "value": "and argument name" + }, + { + "value": "anotherArg", + "argumentInfo": { + "argumentName": "argName", + "formattedValue": "\"anotherArg\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 234001, + "depth": 0, + "parentFailed": false + }, + { + "name": "formatted value", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "formatted value" + }, + { + "value": "is", + "argumentInfo": { + "argumentName": "formattedValue", + "formattedValue": "\"is\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 7903256, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text report is generated", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text report is generated" + } + ], + "status": "PASSED", + "durationInNanos": 417403, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 183401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "" + } + } + ], + "status": "PASSED", + "durationInNanos": 217201, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains text", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report contains text" + }, + { + "value": "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n", + "argumentInfo": { + "argumentName": "line", + "formattedValue": "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n" + } + } + ], + "status": "PASSED", + "durationInNanos": 114001, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 19413739 + } + ], + "casesAsTable": false, + "durationInNanos": 19413739, + "executionStatus": "SUCCESS", + "tags": [ + {}, + {}, + { + "value": "#104", + "description": "Scenarios of Issue #104" + } + ], + "classTitle": "Plain Text Scenario Writer", + "expanded": false, + "$$hashKey": "object:622" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", + "name": "Scenario Executor", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", + "testMethodName": "step_methods_can_have_primitive_arrays_as_parameters", + "description": "step methods can have primitive arrays as parameters", + "tagIds": [ + "com.tngtech.jgiven.tags.Issue-#1", + "com.tngtech.jgiven.tags.FeatureStepParameters" + ], + "explicitParameters": ["type", "array"], + "derivedParameters": ["type", "array"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a step method with a primitive $ array $ as parameter", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a step method with a primitive", + "$$hashKey": "object:1282" + }, + { + "value": "byte", + "argumentInfo": { + "parameterName": "type", + "argumentName": "type", + "formattedValue": "byte" + }, + "$$hashKey": "object:1283" + }, + { + "value": "array", + "$$hashKey": "object:1284" + }, + { + "value": "1, 2, 3", + "argumentInfo": { + "parameterName": "array", + "argumentName": "array", + "formattedValue": "1, 2, 3" + }, + "$$hashKey": "object:1285" + }, + { + "value": "as parameter", + "$$hashKey": "object:1286" + } + ], + "status": "PASSED", + "durationInNanos": 1192009, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:1155" + }, + { + "name": "the scenario is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the scenario is executed", + "$$hashKey": "object:1305" + } + ], + "status": "PASSED", + "durationInNanos": 70301, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:1156" + }, + { + "name": "no exception is thrown", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "no exception is thrown", + "$$hashKey": "object:1316" + } + ], + "status": "PASSED", + "durationInNanos": 281602, + "depth": 0, + "parentFailed": false, + "$$hashKey": "object:1157" + } + ], + "explicitArguments": ["byte", "1, 2, 3"], + "derivedArguments": ["byte", "1, 2, 3"], + "status": "SUCCESS", + "durationInNanos": 45356626, + "$$hashKey": "object:1152" + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["char", "a, b, c"], + "derivedArguments": ["char", "a, b, c"], + "status": "SUCCESS", + "durationInNanos": 2016415, + "$$hashKey": "object:1267" + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["short", "1, 2, 3"], + "derivedArguments": ["short", "1, 2, 3"], + "status": "SUCCESS", + "durationInNanos": 1923614, + "$$hashKey": "object:1268" + }, + { + "caseNr": 4, + "steps": [], + "explicitArguments": ["int", "1, 2, 3"], + "derivedArguments": ["int", "1, 2, 3"], + "status": "SUCCESS", + "durationInNanos": 1477311, + "$$hashKey": "object:1269" + }, + { + "caseNr": 5, + "steps": [], + "explicitArguments": ["long", "1, 2, 3"], + "derivedArguments": ["long", "1, 2, 3"], + "status": "SUCCESS", + "durationInNanos": 2269416, + "$$hashKey": "object:1270" + }, + { + "caseNr": 6, + "steps": [], + "explicitArguments": ["double", "1.0, 2.0, 3.0"], + "derivedArguments": ["double", "1.0, 2.0, 3.0"], + "status": "SUCCESS", + "durationInNanos": 2017714, + "$$hashKey": "object:1271" + }, + { + "caseNr": 7, + "steps": [], + "explicitArguments": ["float", "1.0, 2.0, 3.0"], + "derivedArguments": ["float", "1.0, 2.0, 3.0"], + "status": "SUCCESS", + "durationInNanos": 1714512, + "$$hashKey": "object:1272" + }, + { + "caseNr": 8, + "steps": [], + "explicitArguments": ["boolean", "true, false"], + "derivedArguments": ["boolean", "true, false"], + "status": "SUCCESS", + "durationInNanos": 1732412, + "$$hashKey": "object:1273" + } + ], + "casesAsTable": true, + "durationInNanos": 58508020, + "executionStatus": "SUCCESS", + "tags": [ + { + "value": "#1", + "description": "Scenarios of Issue #1" + }, + {} + ], + "classTitle": "Scenario Executor", + "expanded": true, + "$$hashKey": "object:624" + }, + { + "className": "com.tngtech.jgiven.impl.ScenarioExecutorTest", + "testMethodName": "methods_called_during_stage_construction_are_ignored_in_the_report", + "description": "methods called during stage construction are ignored in the report", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "some stage with method called during construction", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "some stage with method called during construction" + } + ], + "status": "PASSED", + "durationInNanos": 70601, + "depth": 0, + "parentFailed": false + }, + { + "name": "the method does not appear in the report", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the method does not appear in the report" + } + ], + "status": "PASSED", + "durationInNanos": 444003, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 891706 + } + ], + "casesAsTable": false, + "durationInNanos": 891706, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Scenario Executor" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", + "name": "Es Simple Escenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", + "testMethodName": "los_escenarios_se_pueden_escribir_en_espannol", + "description": "los escenarios se pueden escribir en espannol", + "tagIds": ["com.tngtech.jgiven.tags.FeatureSpanish"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "un proyecto en espannol", + "words": [ + { + "value": "dado", + "isIntroWord": true + }, + { + "value": "un proyecto en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 72601, + "depth": 0, + "parentFailed": false + }, + { + "name": "se usa JGiven", + "words": [ + { + "value": "cuando", + "isIntroWord": true + }, + { + "value": "se usa JGiven" + } + ], + "status": "PASSED", + "durationInNanos": 69501, + "depth": 0, + "parentFailed": false + }, + { + "name": "los escenarios se escriben en espannol", + "words": [ + { + "value": "y", + "isIntroWord": true + }, + { + "value": "los escenarios se escriben en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 31200, + "depth": 0, + "parentFailed": false + }, + { + "name": "JGiven genera los informes en espannol", + "words": [ + { + "value": "entonces", + "isIntroWord": true + }, + { + "value": "JGiven genera los informes en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 29500, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 1912414 + } + ], + "casesAsTable": false, + "durationInNanos": 1912414, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Es Simple Escenario", + "expanded": false, + "$$hashKey": "object:609" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", + "name": "Guaranteed State", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", + "testMethodName": "assure_before_method_of_second_test_is_executed_after_guaranteed_fields_validation", + "description": "assure before method of second test is executed after guaranteed fields validation", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a Jgiven test with a guaranteed null state", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a Jgiven test with a guaranteed null state" + } + ], + "status": "PASSED", + "durationInNanos": 11396282, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed" + } + ], + "status": "PASSED", + "durationInNanos": 436443939, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains $ exception", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains" + }, + { + "value": "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException", + "argumentInfo": { + "argumentName": "givenException", + "formattedValue": "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException" + } + }, + { + "value": "exception" + } + ], + "status": "PASSED", + "durationInNanos": 225002718, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 706130579 + } + ], + "casesAsTable": false, + "durationInNanos": 706130579, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Guaranteed State" + }, + { + "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", + "testMethodName": "assure_before_method_of_second_test_is_executed_if_guaranteed_initialized", + "description": "assure before method of second test is executed if guaranteed initialized", + "tagIds": [], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a Jgiven test with a guaranteed state", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a Jgiven test with a guaranteed state" + } + ], + "status": "PASSED", + "durationInNanos": 145501, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed" + } + ], + "status": "PASSED", + "durationInNanos": 26399390, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report contains $ exception", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the report contains" + }, + { + "value": "class java.lang.ClassNotFoundException", + "argumentInfo": { + "argumentName": "givenException", + "formattedValue": "class java.lang.ClassNotFoundException" + } + }, + { + "value": "exception" + } + ], + "status": "PASSED", + "durationInNanos": 1562611, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 28556606 + } + ], + "casesAsTable": false, + "durationInNanos": 28556606, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Guaranteed State" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + "name": "HTML Report Generator", + "description": "Test that only checks the generated files of the HTML report generator", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + "testMethodName": "the_HTML_report_generator_creates_a_tags_file", + "description": "the HTML report generator creates a 'tags.js' file", + "extendedDescription": "To reduce duplicated storage of tag data, the HTML reporter generates a 'tags.js' file that contains all tags that appeared in all input files", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureTags-Tags" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 210402, + "depth": 0, + "parentFailed": false + }, + { + "name": "scenario $ has tag $ with value $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "scenario" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "has tag" + }, + { + "value": "TestTag", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "TestTag" + } + }, + { + "value": "with value" + }, + { + "value": "123", + "argumentInfo": { + "argumentName": "value", + "formattedValue": "123" + } + } + ], + "status": "PASSED", + "durationInNanos": 4294631, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 2268516, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 47162538, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file $ exists in folder $", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "a file" + }, + { + "value": "tags.js", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"tags.js\"" + } + }, + { + "value": "exists in folder" + }, + { + "value": "data", + "argumentInfo": { + "argumentName": "folder", + "formattedValue": "\"data\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 530004, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file $ exists in folder $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file" + }, + { + "value": "metaData.js", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"metaData.js\"" + } + }, + { + "value": "exists in folder" + }, + { + "value": "data", + "argumentInfo": { + "argumentName": "folder", + "formattedValue": "\"data\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 244502, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 59283824 + } + ], + "casesAsTable": false, + "durationInNanos": 59283824, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "Tags" + } + ], + "classTitle": "HTML Report Generator", + "expanded": false, + "$$hashKey": "object:616" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + "testMethodName": "the_title_of_the_HTML_report_can_be_configured", + "description": "the title of the HTML report can be configured", + "tagIds": ["com.tngtech.jgiven.tags.FeatureHtml5Report"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 123001, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1325610, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed with title", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed with title" + }, + { + "value": "Test Title", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Test Title" + } + } + ], + "status": "PASSED", + "durationInNanos": 45265424, + "depth": 0, + "parentFailed": false + }, + { + "name": "the metaData file has title set to", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the metaData file has title set to" + }, + { + "value": "Test Title", + "argumentInfo": { + "argumentName": "title", + "formattedValue": "Test Title" + } + } + ], + "status": "PASSED", + "durationInNanos": 3706527, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 52846878 + } + ], + "casesAsTable": false, + "durationInNanos": 52846878, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "HTML Report Generator" + }, + { + "className": "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", + "testMethodName": "attachments_with_different_media_types_can_be_created", + "description": "attachments with different media types can be created", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureHtml5Report", + "com.tngtech.jgiven.tags.FeatureAttachments" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a report model", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a report model" + } + ], + "status": "PASSED", + "durationInNanos": 202201, + "depth": 0, + "parentFailed": false + }, + { + "name": "an attachment with content $ and mediaType", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "an attachment with content" + }, + { + "value": "{ \"foo\": \"bar\"}", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "\"{ \"foo\": \"bar\"}\"" + } + }, + { + "value": "and mediaType" + }, + { + "value": "application/json", + "argumentInfo": { + "argumentName": "mediaType", + "formattedValue": "\"application/json\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 1016608, + "depth": 0, + "parentFailed": false + }, + { + "name": "file name", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "file name" + }, + { + "value": "jsonfile", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "jsonfile" + } + } + ], + "status": "PASSED", + "durationInNanos": 577904, + "depth": 0, + "parentFailed": false + }, + { + "name": "an attachment with binary content $ and mediaType", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "an attachment with binary content" + }, + { + "value": "QkoCOIcDQKCoCg==", + "argumentInfo": { + "argumentName": "binaryContent", + "formattedValue": "\"QkoCOIcDQKCoCg==\"" + } + }, + { + "value": "and mediaType" + }, + { + "value": "application/octet-stream", + "argumentInfo": { + "argumentName": "mediaType", + "formattedValue": "\"application/octet-stream\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 308502, + "depth": 0, + "parentFailed": false + }, + { + "name": "file name", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "file name" + }, + { + "value": "binary", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "binary" + } + } + ], + "status": "PASSED", + "durationInNanos": 175601, + "depth": 0, + "parentFailed": false + }, + { + "name": "the attachments are added to step $ of case $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the attachments are added to step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "stepNr", + "formattedValue": "1" + } + }, + { + "value": "of case" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "caseNr", + "formattedValue": "1" + } + } + ], + "status": "PASSED", + "durationInNanos": 1931614, + "depth": 0, + "parentFailed": false + }, + { + "name": "the report exist as JSON file", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the report exist as JSON file" + } + ], + "status": "PASSED", + "durationInNanos": 1631712, + "depth": 0, + "parentFailed": false + }, + { + "name": "the HTML Report Generator is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the HTML Report Generator is executed" + } + ], + "status": "PASSED", + "durationInNanos": 45700727, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file $ exists in folder $", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "a file" + }, + { + "value": "jsonfile.json", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"jsonfile.json\"" + } + }, + { + "value": "exists in folder" + }, + { + "value": "data/attachments/Test", + "argumentInfo": { + "argumentName": "folder", + "formattedValue": "\"data/attachments/Test\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 328803, + "depth": 0, + "parentFailed": false + }, + { + "name": "content", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "content" + }, + { + "value": "{ \"foo\": \"bar\"}", + "argumentInfo": { + "argumentName": "content", + "formattedValue": "\"{ \"foo\": \"bar\"}\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 12229187, + "depth": 0, + "parentFailed": false + }, + { + "name": "a file $ exists in folder $", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "a file" + }, + { + "value": "binary.octet-stream", + "argumentInfo": { + "argumentName": "name", + "formattedValue": "\"binary.octet-stream\"" + } + }, + { + "value": "exists in folder" + }, + { + "value": "data/attachments/Test", + "argumentInfo": { + "argumentName": "folder", + "formattedValue": "\"data/attachments/Test\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 304602, + "depth": 0, + "parentFailed": false + }, + { + "name": "binary content", + "words": [ + { + "value": "with", + "isIntroWord": true + }, + { + "value": "binary content" + }, + { + "value": "QkoCOIcDQKCoCg==", + "argumentInfo": { + "argumentName": "base64content", + "formattedValue": "\"QkoCOIcDQKCoCg==\"" + } + } + ], + "status": "PASSED", + "durationInNanos": 1267309, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 71729213 + } + ], + "casesAsTable": false, + "durationInNanos": 71729213, + "executionStatus": "SUCCESS", + "tags": [{}, {}], + "classTitle": "HTML Report Generator", + "expanded": false, + "$$hashKey": "object:615" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", + "name": "De Szenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", + "testMethodName": "Szenarien_können_in_deutsch_geschrieben_werden", + "description": "Szenarien können in deutsch geschrieben werden", + "tagIds": ["com.tngtech.jgiven.tags.FeatureGerman"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "ein deutsches Projekt", + "words": [ + { + "value": "gegeben", + "isIntroWord": true + }, + { + "value": "ein deutsches Projekt" + } + ], + "status": "PASSED", + "durationInNanos": 222701, + "depth": 0, + "parentFailed": false + }, + { + "name": "JGiven verwendet wird", + "words": [ + { + "value": "wenn", + "isIntroWord": true + }, + { + "value": "JGiven verwendet wird" + } + ], + "status": "PASSED", + "durationInNanos": 111601, + "depth": 0, + "parentFailed": false + }, + { + "name": "die Szenarien in deutsch geschrieben werden", + "words": [ + { + "value": "und", + "isIntroWord": true + }, + { + "value": "die Szenarien in deutsch geschrieben werden" + } + ], + "status": "PASSED", + "durationInNanos": 45100, + "depth": 0, + "parentFailed": false + }, + { + "name": "generiert JGiven deutsche Berichte", + "words": [ + { + "value": "dann", + "isIntroWord": true + }, + { + "value": "generiert JGiven deutsche Berichte" + } + ], + "status": "PASSED", + "durationInNanos": 32400, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 4196231 + } + ], + "casesAsTable": false, + "durationInNanos": 4196231, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "De Szenario", + "expanded": false, + "$$hashKey": "object:603" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.DataProviderTest", + "name": "Data Provider", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.DataProviderTest", + "testMethodName": "a_scenario_with_one_failing_case_leads_to_a_failed_scenario", + "description": "a scenario with one failing case leads to a failed scenario", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test with two cases and the first one fails", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test with two cases and the first one fails" + } + ], + "status": "PASSED", + "durationInNanos": 14908507, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 156169623, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has execution status", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has execution status" + }, + { + "value": "FAILED", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "FAILED" + } + } + ], + "status": "PASSED", + "durationInNanos": 615404, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 173757650 + } + ], + "casesAsTable": false, + "durationInNanos": 173757650, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Data Provider", + "expanded": false, + "$$hashKey": "object:1330" + }, + { + "className": "com.tngtech.jgiven.junit.DataProviderTest", + "testMethodName": "pending_works_correctly_with_data_provider", + "description": "pending works correctly with data provider", + "tagIds": [ + "com.tngtech.jgiven.tags.FeatureJUnit", + "com.tngtech.jgiven.tags.Issue-#200" + ], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a pending scenario with a data provider", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a pending scenario with a data provider" + } + ], + "status": "PASSED", + "durationInNanos": 535103, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 13844400, + "depth": 0, + "parentFailed": false + }, + { + "name": "the scenario has execution status", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the scenario has execution status" + }, + { + "value": "SCENARIO_PENDING", + "argumentInfo": { + "argumentName": "status", + "formattedValue": "SCENARIO_PENDING" + } + } + ], + "status": "PASSED", + "durationInNanos": 272502, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 15924414 + } + ], + "casesAsTable": false, + "durationInNanos": 15924414, + "executionStatus": "SUCCESS", + "tags": [ + {}, + { + "value": "#200", + "description": "Scenarios of Issue #200" + } + ], + "classTitle": "Data Provider", + "expanded": false, + "$$hashKey": "object:1331" + } + ] + }, + { + "className": "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", + "name": "Es Escenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", + "testMethodName": "los_escenarios_se_pueden_escribir_en_espannol", + "description": "los escenarios se pueden escribir en espannol", + "tagIds": ["com.tngtech.jgiven.tags.FeatureSpanish"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "un proyecto en espannol", + "words": [ + { + "value": "dado", + "isIntroWord": true + }, + { + "value": "un proyecto en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 111301, + "depth": 0, + "parentFailed": false + }, + { + "name": "se usa JGiven", + "words": [ + { + "value": "cuando", + "isIntroWord": true + }, + { + "value": "se usa JGiven" + } + ], + "status": "PASSED", + "durationInNanos": 38800, + "depth": 0, + "parentFailed": false + }, + { + "name": "los escenarios se escriben en espannol", + "words": [ + { + "value": "y", + "isIntroWord": true + }, + { + "value": "los escenarios se escriben en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 79000, + "depth": 0, + "parentFailed": false + }, + { + "name": "JGiven genera los informes en espannol", + "words": [ + { + "value": "entonces", + "isIntroWord": true + }, + { + "value": "JGiven genera los informes en espannol" + } + ], + "status": "PASSED", + "durationInNanos": 111101, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 2606119 + } + ], + "casesAsTable": false, + "durationInNanos": 2606119, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Es Escenario", + "expanded": false, + "$$hashKey": "object:608" + } + ] + }, + { + "className": "com.tngtech.jgiven.impl.TimingsTest", + "name": "Timings", + "scenarios": [ + { + "className": "com.tngtech.jgiven.impl.TimingsTest", + "testMethodName": "recorded_timing_is_correct_for", + "description": "recorded timing is correct for", + "tagIds": [], + "explicitParameters": ["methodName"], + "derivedParameters": ["methodName"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "the JGiven timings test class with method", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "the JGiven timings test class with method" + }, + { + "value": "last_step_is_preceeded_by_step", + "argumentInfo": { + "parameterName": "methodName", + "argumentName": "requestedMethod", + "formattedValue": "last_step_is_preceeded_by_step" + } + } + ], + "status": "PASSED", + "durationInNanos": 26374690, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed" + } + ], + "status": "PASSED", + "durationInNanos": 73537029, + "depth": 0, + "parentFailed": false + }, + { + "name": "the recorded timing is greater than ten millis", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the recorded timing is greater than ten millis" + } + ], + "status": "PASSED", + "durationInNanos": 5095837, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["last_step_is_preceeded_by_step"], + "derivedArguments": ["last_step_is_preceeded_by_step"], + "status": "SUCCESS", + "durationInNanos": 105842061 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["last_step_is_preceeded_by_intro_word"], + "derivedArguments": ["last_step_is_preceeded_by_intro_word"], + "status": "SUCCESS", + "durationInNanos": 24511576 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["last_step_is_preceeded_by_filler_word"], + "derivedArguments": ["last_step_is_preceeded_by_filler_word"], + "status": "SUCCESS", + "durationInNanos": 20147745 + }, + { + "caseNr": 4, + "steps": [], + "explicitArguments": ["last_step_is_succeeded_by_intro_word"], + "derivedArguments": ["last_step_is_succeeded_by_intro_word"], + "status": "SUCCESS", + "durationInNanos": 24176973 + }, + { + "caseNr": 5, + "steps": [], + "explicitArguments": ["last_step_is_succeeded_by_filler_word"], + "derivedArguments": ["last_step_is_succeeded_by_filler_word"], + "status": "SUCCESS", + "durationInNanos": 20611849 + } + ], + "casesAsTable": true, + "durationInNanos": 195290204, + "executionStatus": "SUCCESS", + "tags": [], + "classTitle": "Timings" + } + ] + }, + { + "className": "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", + "name": "Plain Text Generator Scenario", + "scenarios": [ + { + "className": "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", + "testMethodName": "the_plain_text_reporter_generates_one_file_for_each_test_class", + "description": "the plain text reporter generates one file for each test class", + "tagIds": ["com.tngtech.jgiven.tags.FeatureTextReport"], + "explicitParameters": ["numberOfModels"], + "derivedParameters": ["numberOfModels"], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "$ report models", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "0", + "argumentInfo": { + "parameterName": "numberOfModels", + "argumentName": "n", + "formattedValue": "0" + } + }, + { + "value": "report models" + } + ], + "status": "PASSED", + "durationInNanos": 368703, + "depth": 0, + "parentFailed": false + }, + { + "name": "the reports exist as JSON files", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the reports exist as JSON files" + } + ], + "status": "PASSED", + "durationInNanos": 101600, + "depth": 0, + "parentFailed": false + }, + { + "name": "the plain text reporter is executed", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the plain text reporter is executed" + } + ], + "status": "PASSED", + "durationInNanos": 3764527, + "depth": 0, + "parentFailed": false + }, + { + "name": "a text file exists for each test class", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "a text file exists for each test class" + } + ], + "status": "PASSED", + "durationInNanos": 157201, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": ["0"], + "derivedArguments": ["0"], + "status": "SUCCESS", + "durationInNanos": 6371646 + }, + { + "caseNr": 2, + "steps": [], + "explicitArguments": ["1"], + "derivedArguments": ["1"], + "status": "SUCCESS", + "durationInNanos": 8060458 + }, + { + "caseNr": 3, + "steps": [], + "explicitArguments": ["3"], + "derivedArguments": ["3"], + "status": "SUCCESS", + "durationInNanos": 7354453 + } + ], + "casesAsTable": true, + "durationInNanos": 21786557, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Plain Text Generator Scenario" + } + ] + }, + { + "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + "name": "Lifecycle Ordering", + "scenarios": [ + { + "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + "testMethodName": "junit5_beforeAfterEach_beforeAfterScenario_execution_order", + "description": "Ordering of before/after Each methods vs. before/after Scenario methods", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit5"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test with framework and JGiven before and after methods", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test with framework and JGiven before and after methods" + } + ], + "status": "PASSED", + "durationInNanos": 1096908, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 103331840, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework before method was executed before jgivens", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the framework before method was executed before jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 3060022, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework after method was executed after jgivens", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the framework after method was executed after jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 325102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 109280482 + } + ], + "casesAsTable": false, + "durationInNanos": 109280482, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Lifecycle Ordering" + }, + { + "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + "testMethodName": "junit_beforeAfter_beforeAfterScenario_execution_order", + "description": "Ordering of before/after methods vs. before/after Scenario methods", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test with framework and JGiven before and after methods", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test with framework and JGiven before and after methods" + } + ], + "status": "PASSED", + "durationInNanos": 71000, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with JUnit", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with JUnit" + } + ], + "status": "PASSED", + "durationInNanos": 3442425, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework before method was executed before jgivens", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the framework before method was executed before jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 118301, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework after method was executed before jgivens", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the framework after method was executed before jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 466704, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 7053251 + } + ], + "casesAsTable": false, + "durationInNanos": 7053251, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Lifecycle Ordering", + "expanded": false, + "$$hashKey": "object:1338" + }, + { + "className": "com.tngtech.jgiven.testframework.LifecycleOrderingTest", + "testMethodName": "testNg_beforeAfterTest_beforeAfterScenario_execution_order", + "description": "Ordering of before/after Test methods vs. before/after Scenario methods", + "tagIds": ["com.tngtech.jgiven.tags.FeatureTestNg"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a test with framework and JGiven before and after methods", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a test with framework and JGiven before and after methods" + } + ], + "status": "PASSED", + "durationInNanos": 35600, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test class is executed with", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test class is executed with" + }, + { + "value": "TestNG", + "argumentInfo": { + "argumentName": "framework", + "formattedValue": "TestNG" + } + } + ], + "status": "PASSED", + "durationInNanos": 636466256, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework before method was executed before jgivens", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the framework before method was executed before jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 206401, + "depth": 0, + "parentFailed": false + }, + { + "name": "the framework after method was executed after jgivens", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the framework after method was executed after jgivens" + } + ], + "status": "PASSED", + "durationInNanos": 125601, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 639245876 + } + ], + "casesAsTable": false, + "durationInNanos": 639245876, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "Lifecycle Ordering", + "expanded": false, + "$$hashKey": "object:147" + } + ] + } + ], + "customNavigationLinks": [], + "metaData": { + "created": "Dec 12, 2023, 6:29:36 AM", + "version": "1.3.1-240a5794", + "title": "JGiven Report", + "data": ["data0.js", "data1.js"], + "showThumbnails": true + }, + "tagFile": { + "tagTypeMap": { + "com.tngtech.jgiven.tags.FeatureJUnit5": { + "fullType": "com.tngtech.jgiven.tags.FeatureJUnit5", + "type": "FeatureJUnit5", + "name": "JUnit5", + "description": "Tests can be be executed with JUnit5", + "tags": ["com.tngtech.jgiven.tags.FeatureTestFramework"], + "href": "" + }, + "com.tngtech.jgiven.tags.Feature": { + "fullType": "com.tngtech.jgiven.tags.Feature", + "type": "Feature", + "name": "Features", + "description": "", + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTestFramework": { + "fullType": "com.tngtech.jgiven.tags.FeatureTestFramework", + "type": "FeatureTestFramework", + "name": "Supported Test Frameworks", + "description": "JGiven can be used together with JUnit and TestNG", + "tags": ["com.tngtech.jgiven.tags.Feature"], + "href": "" + }, + "com.tngtech.jgiven.tags.Issue": { + "fullType": "com.tngtech.jgiven.tags.Issue", + "type": "Issue", + "description": "Scenarios of Issue #25", + "prependType": true, + "color": "orange", + "href": "" + }, + "com.tngtech.jgiven.tests.TestTag": { + "fullType": "com.tngtech.jgiven.tests.TestTag", + "type": "TestTag", + "description": "", + "href": "" + }, + "com.tngtech.jgiven.tags.BrowserTest": { + "fullType": "com.tngtech.jgiven.tags.BrowserTest", + "type": "BrowserTest", + "description": "Tests with this tag use a browser for testing", + "color": "rgb(69, 158, 19)", + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureHtml5Report": { + "fullType": "com.tngtech.jgiven.tags.FeatureHtml5Report", + "type": "FeatureHtml5Report", + "name": "HTML5 Report", + "description": "In order to have an interactive JGiven report for non-developers
As a developer,
I want that JGiven generates HTML5 reports", + "tags": ["com.tngtech.jgiven.tags.FeatureReport"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureReport", + "type": "FeatureReport", + "name": "Reporting", + "description": "JGiven can generate text and HTML reports. An AsciiDoc report is currently under development.", + "tags": ["com.tngtech.jgiven.tags.Feature"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureAttachments": { + "fullType": "com.tngtech.jgiven.tags.FeatureAttachments", + "type": "FeatureAttachments", + "name": "Attachments", + "description": "In order to get additional information about a step, like screenshots, for example
As a JGiven user,
I want that steps can have attachments", + "tags": ["com.tngtech.jgiven.tags.FeatureCore"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureCore": { + "fullType": "com.tngtech.jgiven.tags.FeatureCore", + "type": "FeatureCore", + "name": "Core Features", + "description": "", + "tags": ["com.tngtech.jgiven.tags.Feature"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { + "fullType": "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle", + "type": "FeatureTagsWithCustomStyle", + "name": "Tags with Custom Styles", + "description": "Tags can be arbitrarily styled with the 'style' attribute of the '@IsTag' annotation. This tag shows how to apply such a custom style", + "style": "background-color: darkgreen; color: white; font-weight: bold", + "tags": ["com.tngtech.jgiven.tags.FeatureTags-Tags"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTags": { + "fullType": "com.tngtech.jgiven.tags.FeatureTags", + "type": "FeatureTags", + "description": "Scenarios can be tagged with annotations", + "tags": ["com.tngtech.jgiven.tags.FeatureCore"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureJUnit": { + "fullType": "com.tngtech.jgiven.tags.FeatureJUnit", + "type": "FeatureJUnit", + "name": "JUnit", + "description": "Tests can be be executed with JUnit", + "tags": ["com.tngtech.jgiven.tags.FeatureTestFramework"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTestNg": { + "fullType": "com.tngtech.jgiven.tags.FeatureTestNg", + "type": "FeatureTestNg", + "name": "TestNG", + "description": "Tests can be be executed with TestNG", + "tags": ["com.tngtech.jgiven.tags.FeatureTestFramework"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeaturePending": { + "fullType": "com.tngtech.jgiven.tags.FeaturePending", + "type": "FeaturePending", + "name": "Pending Annotation", + "description": "As a good BDD practitioner,
I want to write my scenarios before I start coding
In order to discuss them with business stakeholders", + "tags": ["com.tngtech.jgiven.tags.FeatureCore"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureCaseDiffs": { + "fullType": "com.tngtech.jgiven.tags.FeatureCaseDiffs", + "type": "FeatureCaseDiffs", + "name": "Case Diffs", + "description": "In order to get a better overview over structurally different cases of a scenario
As a human,
I want the differences highlighted in the generated report", + "tags": ["com.tngtech.jgiven.tags.FeatureCore"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureAsciiDocReport", + "type": "FeatureAsciiDocReport", + "name": "AsciiDoc Report", + "description": "In order to easily combine hand-written documentation with JGiven scenarios
As a developer,
I want that JGiven generates AsciiDoc reports", + "tags": ["com.tngtech.jgiven.tags.FeatureReport"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureGerman": { + "fullType": "com.tngtech.jgiven.tags.FeatureGerman", + "type": "FeatureGerman", + "name": "German Scenarios", + "description": "Scenarios can be written in German", + "tags": ["com.tngtech.jgiven.tags.FeatureCore"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTextReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureTextReport", + "type": "FeatureTextReport", + "name": "Text Report", + "description": "Plain text reports can be generated", + "tags": ["com.tngtech.jgiven.tags.FeatureReport"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureDataTables": { + "fullType": "com.tngtech.jgiven.tags.FeatureDataTables", + "type": "FeatureDataTables", + "name": "Data Tables", + "description": "In order to get a better overview over the different cases of a scenario
As a human,
I want to have different cases represented as a data table", + "tags": ["com.tngtech.jgiven.tags.FeatureCore"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureStepParameters": { + "fullType": "com.tngtech.jgiven.tags.FeatureStepParameters", + "type": "FeatureStepParameters", + "name": "Step Parameters", + "description": "Steps can have parameters", + "tags": ["com.tngtech.jgiven.tags.FeatureCore"], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureSpanish": { + "fullType": "com.tngtech.jgiven.tags.FeatureSpanish", + "type": "FeatureSpanish", + "name": "Spanish Scenarios", + "description": "Scenarios can be written in Spanish", + "tags": ["com.tngtech.jgiven.tags.FeatureCore"], + "href": "" + } + }, + "tags": { + "com.tngtech.jgiven.tags.FeatureJUnit5": { + "tagType": "com.tngtech.jgiven.tags.FeatureJUnit5" + }, + "com.tngtech.jgiven.tags.Feature": { + "tagType": "com.tngtech.jgiven.tags.Feature" + }, + "com.tngtech.jgiven.tags.FeatureTestFramework": { + "tagType": "com.tngtech.jgiven.tags.FeatureTestFramework" + }, + "com.tngtech.jgiven.tags.Issue-#25": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#25" + }, + "com.tngtech.jgiven.tags.Issue-#49": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#49", + "description": "Scenarios of Issue #49" + }, + "com.tngtech.jgiven.tests.TestTag-testValue": { + "tagType": "com.tngtech.jgiven.tests.TestTag", + "value": "testValue" + }, + "com.tngtech.jgiven.tags.BrowserTest": { + "tagType": "com.tngtech.jgiven.tags.BrowserTest" + }, + "com.tngtech.jgiven.tags.FeatureHtml5Report": { + "tagType": "com.tngtech.jgiven.tags.FeatureHtml5Report" + }, + "com.tngtech.jgiven.tags.FeatureReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureReport" + }, + "com.tngtech.jgiven.tags.Issue-#236": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#236", + "description": "Scenarios of Issue #236" + }, + "com.tngtech.jgiven.tags.Issue-#755": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#755", + "description": "Scenarios of Issue #755" + }, + "com.tngtech.jgiven.tags.Issue-#191": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#191", + "description": "Scenarios of Issue #191" + }, + "com.tngtech.jgiven.tags.FeatureAttachments": { + "tagType": "com.tngtech.jgiven.tags.FeatureAttachments" + }, + "com.tngtech.jgiven.tags.FeatureCore": { + "tagType": "com.tngtech.jgiven.tags.FeatureCore" + }, + "com.tngtech.jgiven.tags.Issue-#226": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#226", + "description": "Scenarios of Issue #226" + }, + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { + "tagType": "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" + }, + "com.tngtech.jgiven.tags.FeatureTags-Tags": { + "tagType": "com.tngtech.jgiven.tags.FeatureTags", + "value": "Tags" + }, + "com.tngtech.jgiven.tags.Issue-#146": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#146", + "description": "Scenarios of Issue #146" + }, + "com.tngtech.jgiven.tags.Issue-#47": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#47", + "description": "Scenarios of Issue #47" + }, + "com.tngtech.jgiven.tags.Issue-#274": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#274", + "description": "Scenarios of Issue #274" + }, + "com.tngtech.jgiven.tags.FeatureJUnit": { + "tagType": "com.tngtech.jgiven.tags.FeatureJUnit" + }, + "com.tngtech.jgiven.tags.FeatureTestNg": { + "tagType": "com.tngtech.jgiven.tags.FeatureTestNg" + }, + "com.tngtech.jgiven.tags.Issue-#4": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#4", + "description": "Scenarios of Issue #4" + }, + "com.tngtech.jgiven.tags.FeaturePending": { + "tagType": "com.tngtech.jgiven.tags.FeaturePending" + }, + "com.tngtech.jgiven.tags.FeatureCaseDiffs": { + "tagType": "com.tngtech.jgiven.tags.FeatureCaseDiffs" + }, + "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureAsciiDocReport" + }, + "com.tngtech.jgiven.tags.Issue-#163": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#163", + "description": "Scenarios of Issue #163" + }, + "com.tngtech.jgiven.tags.Issue-#32": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#32", + "description": "Scenarios of Issue #32" + }, + "com.tngtech.jgiven.tags.FeatureGerman": { + "tagType": "com.tngtech.jgiven.tags.FeatureGerman" + }, + "com.tngtech.jgiven.tags.Issue-#829": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#829", + "description": "Scenarios of Issue #829" + }, + "com.tngtech.jgiven.tags.Issue-#123": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#123", + "description": "Scenarios of Issue #123" + }, + "com.tngtech.jgiven.tags.FeatureTextReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureTextReport" + }, + "com.tngtech.jgiven.tags.FeatureDataTables": { + "tagType": "com.tngtech.jgiven.tags.FeatureDataTables" + }, + "com.tngtech.jgiven.tags.Issue-#34": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#34", + "description": "Scenarios of Issue #34" + }, + "com.tngtech.jgiven.tags.Issue-#152": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#152", + "description": "Scenarios of Issue #152" + }, + "com.tngtech.jgiven.tags.Issue-#52": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#52", + "description": "Scenarios of Issue #52" + }, + "com.tngtech.jgiven.tags.Issue-#10": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#10", + "description": "Scenarios of Issue #10" + }, + "com.tngtech.jgiven.tags.Issue-#104": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#104", + "description": "Scenarios of Issue #104" + }, + "com.tngtech.jgiven.tags.Issue-#1": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#1", + "description": "Scenarios of Issue #1" + }, + "com.tngtech.jgiven.tags.FeatureStepParameters": { + "tagType": "com.tngtech.jgiven.tags.FeatureStepParameters" + }, + "com.tngtech.jgiven.tags.FeatureSpanish": { + "tagType": "com.tngtech.jgiven.tags.FeatureSpanish" + }, + "com.tngtech.jgiven.tags.Issue-#200": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#200", + "description": "Scenarios of Issue #200" + } + } + } +} diff --git a/new/resources/jgivenReport.json5 b/new/resources/jgivenReport.json5 deleted file mode 100644 index b48e45d7..00000000 --- a/new/resources/jgivenReport.json5 +++ /dev/null @@ -1,19933 +0,0 @@ -{ - scenarios: [ - { - className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - name: "J Unit 5 Executor", - scenarios: [ - { - className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - testMethodName: "after_stage_methods_of_stages_following_failing_stages_are_ignored", - description: "after stage methods of stages following failing stages are ignored", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test with $ steps", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test with" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "steps" - } - ], - status: "PASSED", - durationInNanos: 429103, - depth: 0, - parentFailed: false - }, - { - name: "the test has $ failing stages", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test has" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "failing stages" - } - ], - status: "PASSED", - durationInNanos: 413003, - depth: 0, - parentFailed: false - }, - { - name: "stage $ has a failing after stage method", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "stage" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "has a failing after stage method" - } - ], - status: "PASSED", - durationInNanos: 297902, - depth: 0, - parentFailed: false - }, - { - name: "step $ fails", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "fails" - } - ], - status: "PASSED", - durationInNanos: 1022008, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with JUnit5", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with JUnit5" - } - ], - status: "PASSED", - durationInNanos: 518574231, - depth: 0, - parentFailed: false - }, - { - name: "the test fails", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails" - } - ], - status: "PASSED", - durationInNanos: 1932714, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as failed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "is reported as failed" - } - ], - status: "PASSED", - durationInNanos: 1136408, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as skipped", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "is reported as skipped" - } - ], - status: "PASSED", - durationInNanos: 287102, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 525725382 - } - ], - casesAsTable: false, - durationInNanos: 525725382, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit 5 Executor" - }, - { - className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - testMethodName: "tests_with_scenario_modifications_in_after_method", - description: "tests with scenario modifications in after method", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "junit5 tests with scenario modifications in after method", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "junit5 tests with scenario modifications in after method" - } - ], - status: "PASSED", - durationInNanos: 653305, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit5", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit5" - } - ], - status: "PASSED", - durationInNanos: 88779139, - depth: 0, - parentFailed: false - }, - { - name: "each scenario contains $ cases", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "each scenario contains" - }, - { - value: "2", - argumentInfo: { - argumentName: "nParameters", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 451903, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 91778960 - } - ], - casesAsTable: false, - durationInNanos: 91778960, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit 5 Executor" - }, - { - className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - testMethodName: "tests_with_a_per_class_lifecycle", - description: "tests with a per class lifecycle", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "junit5 test class with a per class lifecycle", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "junit5 test class with a per class lifecycle" - } - ], - status: "PASSED", - durationInNanos: 532404, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit5", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit5" - } - ], - status: "PASSED", - durationInNanos: 26956794, - depth: 0, - parentFailed: false - }, - { - name: "the test fails with message", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails with message" - }, - { - value: "JGiven does not support keeping a test instance over multiple scenarios", - argumentInfo: { - argumentName: "expectedMessage", - formattedValue: "JGiven does not support keeping a test instance over multiple scenarios" - } - } - ], - status: "PASSED", - durationInNanos: 1995814, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 30877622 - } - ], - casesAsTable: false, - durationInNanos: 30877622, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit 5 Executor" - }, - { - className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - testMethodName: "all_steps_of_stages_following_failing_stages_are_ignored", - description: "all steps of stages following failing stages are ignored", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test with $ steps", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test with" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "steps" - } - ], - status: "PASSED", - durationInNanos: 320702, - depth: 0, - parentFailed: false - }, - { - name: "the test has $ failing stages", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test has" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "failing stages" - } - ], - status: "PASSED", - durationInNanos: 1719513, - depth: 0, - parentFailed: false - }, - { - name: "step $ fails", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "fails" - } - ], - status: "PASSED", - durationInNanos: 806406, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 7550454, - depth: 0, - parentFailed: false - }, - { - name: "the test fails", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails" - } - ], - status: "PASSED", - durationInNanos: 84701, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as failed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "is reported as failed" - } - ], - status: "PASSED", - durationInNanos: 343802, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as skipped", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "is reported as skipped" - } - ], - status: "PASSED", - durationInNanos: 268802, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 12169888 - } - ], - casesAsTable: false, - durationInNanos: 12169888, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit 5 Executor" - }, - { - className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - testMethodName: "a_valid_report_is_generated_for_classes_that_are_disabled", - description: "a valid report is generated for classes that are disabled", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.Issue-#25" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test class with all tests ignored", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test class with all tests ignored" - } - ], - status: "PASSED", - durationInNanos: 44600, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit5", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit5" - } - ], - status: "PASSED", - durationInNanos: 16082716, - depth: 0, - parentFailed: false - }, - { - name: "the report model is either null or empty", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report model is either null or empty" - } - ], - status: "PASSED", - durationInNanos: 75400, - extendedDescription: "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", - depth: 0, - parentFailed: false - }, - { - name: "has a valid class name if it is not null", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "has a valid class name if it is not null" - } - ], - status: "PASSED", - durationInNanos: 49000, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 18005730 - } - ], - casesAsTable: false, - durationInNanos: 18005730, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "#25" - } - ], - classTitle: "J Unit 5 Executor" - }, - { - className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - testMethodName: "steps_following_failing_steps_are_reported_as_skipped", - description: "steps following failing steps are reported as skipped", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test with $ steps", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test with" - }, - { - value: "3", - argumentInfo: { - argumentName: "n", - formattedValue: "3" - } - }, - { - value: "steps" - } - ], - status: "PASSED", - durationInNanos: 2099415, - depth: 0, - parentFailed: false - }, - { - name: "step $ fails", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "fails" - } - ], - status: "PASSED", - durationInNanos: 266502, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with JUnit5", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with JUnit5" - } - ], - status: "PASSED", - durationInNanos: 22164560, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as failed", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "is reported as failed" - } - ], - status: "PASSED", - durationInNanos: 460003, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as skipped", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "is reported as skipped" - } - ], - status: "PASSED", - durationInNanos: 269602, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as skipped", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "3", - argumentInfo: { - argumentName: "i", - formattedValue: "3" - } - }, - { - value: "is reported as skipped" - } - ], - status: "PASSED", - durationInNanos: 753505, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 27159096 - } - ], - casesAsTable: false, - durationInNanos: 27159096, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit 5 Executor" - }, - { - className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - testMethodName: "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", - description: "exception in scenario is not hidden by exception in JUnit after method", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.Issue-#49" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test class with a failing scenario and a failing after stage", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test class with a failing scenario and a failing after stage" - } - ], - status: "PASSED", - durationInNanos: 40400, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit5", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit5" - } - ], - status: "PASSED", - durationInNanos: 62267448, - depth: 0, - parentFailed: false - }, - { - name: "the test fails with message", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails with message" - }, - { - value: "assertion failed in test step", - argumentInfo: { - argumentName: "expectedMessage", - formattedValue: "assertion failed in test step" - } - } - ], - status: "PASSED", - durationInNanos: 585004, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 65271169 - } - ], - casesAsTable: false, - durationInNanos: 65271169, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "#49", - description: "Scenarios of Issue #49" - } - ], - classTitle: "J Unit 5 Executor" - } - ] - }, - { - className: "com.tngtech.jgiven.tests.TestScenarios", - name: "Test Scenarios", - scenarios: [ - { - className: "com.tngtech.jgiven.tests.TestScenarios", - testMethodName: "test_with_tag_annotation", - description: "test with tag annotation", - tagIds: ["com.tngtech.jgiven.tests.TestTag-testValue"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "nothing", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "nothing" - } - ], - status: "PASSED", - durationInNanos: 22100, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 356203 - } - ], - casesAsTable: false, - durationInNanos: 356203, - executionStatus: "SUCCESS", - tags: [ - { - value: "testValue" - } - ], - classTitle: "Test Scenarios" - } - ] - }, - { - className: "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", - name: "J Unit 5 After Method", - scenarios: [ - { - className: "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", - testMethodName: "a_failing_JUnit_5_test", - description: "a failing JUnit 5 test", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "nothing", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "nothing" - } - ], - status: "PASSED", - durationInNanos: 447503, - depth: 0, - parentFailed: false - }, - { - name: "a step fails", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "a step fails" - } - ], - status: "FAILED", - durationInNanos: 714006, - depth: 0, - parentFailed: false - }, - { - name: "something happened", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "something happened" - } - ], - status: "SKIPPED", - durationInNanos: 0, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "FAILED", - errorMessage: "java.lang.AssertionError: assertion failed in test step", - stackTrace: [ - "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", - "com.tngtech.jgiven.tests.JUnit5AfterMethodTests.a_failing_JUnit_5_test(JUnit5AfterMethodTests.java:24)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", - "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", - "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", - "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", - "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", - "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", - "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", - "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", - "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", - "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", - "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", - "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", - "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", - "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.tests_with_scenario_modifications_in_after_method(JUnit5ExecutorTest.java:19)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", - "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", - "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", - "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", - "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", - "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", - "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", - "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", - "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", - "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", - "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", - "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", - "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", - "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", - "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", - "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", - "org.junit.rules.RunRules.evaluate(RunRules.java:20)", - "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", - "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", - "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", - "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", - "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", - "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", - "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", - "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", - "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", - "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", - "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", - "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" - ], - durationInNanos: 7239852 - } - ], - casesAsTable: false, - durationInNanos: 7239852, - executionStatus: "FAILED", - tags: [], - classTitle: "J Unit 5 After Method" - }, - { - className: "com.tngtech.jgiven.tests.JUnit5AfterMethodTests", - testMethodName: "a_succeeding_JUnit5_test", - description: "a succeeding JUnit5 test", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "nothing", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "nothing" - } - ], - status: "PASSED", - durationInNanos: 78000, - depth: 0, - parentFailed: false - }, - { - name: "something happens", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "something happens" - } - ], - status: "PASSED", - durationInNanos: 92301, - depth: 0, - parentFailed: false - }, - { - name: "something happened", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "something happened" - } - ], - status: "PASSED", - durationInNanos: 1700312, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 8255559 - } - ], - casesAsTable: false, - durationInNanos: 8255559, - executionStatus: "SUCCESS", - tags: [], - classTitle: "J Unit 5 After Method" - } - ] - }, - { - className: "com.tngtech.jgiven.report.json.ReportConfigurationTest", - name: "Report Configuration", - scenarios: [ - { - className: "com.tngtech.jgiven.report.json.ReportConfigurationTest", - testMethodName: "jgiven_report_directory_is_set_via_a_system_property", - description: "jgiven report directory is set via a system property", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a set system property", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a set system property" - }, - { - value: "jgiven.report.dir", - argumentInfo: { - argumentName: "key", - formattedValue: "jgiven.report.dir" - } - }, - { - value: "/tmp/junit9611904619136189853/junit11940332615471196075", - argumentInfo: { - argumentName: "value", - formattedValue: "/tmp/junit9611904619136189853/junit11940332615471196075" - } - } - ], - status: "PASSED", - durationInNanos: 363103, - depth: 0, - parentFailed: false - }, - { - name: "a set system property", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a set system property" - }, - { - value: "jgiven.report.enabled", - argumentInfo: { - argumentName: "key", - formattedValue: "jgiven.report.enabled" - } - }, - { - value: "true", - argumentInfo: { - argumentName: "value", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 164101, - depth: 0, - parentFailed: false - }, - { - name: "a Test scenario", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a Test scenario" - } - ], - status: "PASSED", - durationInNanos: 36300, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with junit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with junit" - } - ], - status: "PASSED", - durationInNanos: 4571533, - depth: 0, - parentFailed: false - }, - { - name: "the report is written to", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report is written to" - }, - { - value: "/tmp/junit9611904619136189853/junit11940332615471196075", - argumentInfo: { - argumentName: "file", - formattedValue: "/tmp/junit9611904619136189853/junit11940332615471196075" - } - } - ], - status: "PASSED", - durationInNanos: 542004, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 7318053 - } - ], - casesAsTable: false, - durationInNanos: 7318053, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Report Configuration" - }, - { - className: "com.tngtech.jgiven.report.json.ReportConfigurationTest", - testMethodName: "jgiven_report_is_disabled_by_a_system_property", - description: "jgiven report is disabled by a system property", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a set system property", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a set system property" - }, - { - value: "jgiven.report.dir", - argumentInfo: { - argumentName: "key", - formattedValue: "jgiven.report.dir" - } - }, - { - value: "/tmp/junit10598170150625581602/junit5361371470546127836", - argumentInfo: { - argumentName: "value", - formattedValue: "/tmp/junit10598170150625581602/junit5361371470546127836" - } - } - ], - status: "PASSED", - durationInNanos: 391403, - depth: 0, - parentFailed: false - }, - { - name: "a set system property", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a set system property" - }, - { - value: "jgiven.report.enabled", - argumentInfo: { - argumentName: "key", - formattedValue: "jgiven.report.enabled" - } - }, - { - value: "false", - argumentInfo: { - argumentName: "value", - formattedValue: "false" - } - } - ], - status: "PASSED", - durationInNanos: 128201, - depth: 0, - parentFailed: false - }, - { - name: "a Test scenario", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a Test scenario" - } - ], - status: "PASSED", - durationInNanos: 30000, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with junit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with junit" - } - ], - status: "PASSED", - durationInNanos: 2136916, - depth: 0, - parentFailed: false - }, - { - name: "the report is not written to", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report is not written to" - }, - { - value: "/tmp/junit10598170150625581602/junit5361371470546127836", - argumentInfo: { - argumentName: "file", - formattedValue: "/tmp/junit10598170150625581602/junit5361371470546127836" - } - } - ], - status: "PASSED", - durationInNanos: 196901, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 3318923 - } - ], - casesAsTable: false, - durationInNanos: 3318923, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Report Configuration" - } - ] - }, - { - className: "com.tngtech.jgiven.report.ReportGeneratorTest", - name: "Report Generator", - scenarios: [ - { - className: "com.tngtech.jgiven.report.ReportGeneratorTest", - testMethodName: "the_exclude_empty_scenarios_option_is_evaluated", - description: "the exclude empty scenarios option is evaluated", - tagIds: [], - explicitParameters: ["excludeEmptyScenarios", "expectedScenarios"], - derivedParameters: ["excludeEmptyScenarios", "expectedScenarios"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 271902, - depth: 0, - parentFailed: false - }, - { - name: "the report has $ scenarios", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report has" - }, - { - value: "1", - argumentInfo: { - argumentName: "n", - formattedValue: "1" - } - }, - { - value: "scenarios" - } - ], - status: "PASSED", - durationInNanos: 4891435, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncases", - formattedValue: "1" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 403303, - depth: 0, - parentFailed: false - }, - { - name: "case $ has no steps", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "has no steps" - } - ], - status: "PASSED", - durationInNanos: 328503, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2571118, - depth: 0, - parentFailed: false - }, - { - name: "the exclude empty scenarios option is set to", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the exclude empty scenarios option is set to" - }, - { - value: "true", - argumentInfo: { - parameterName: "excludeEmptyScenarios", - argumentName: "excludeEmptyScenarios", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 4529432, - depth: 0, - parentFailed: false - }, - { - name: "reading the report model", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "reading the report model" - } - ], - status: "PASSED", - durationInNanos: 32959237, - depth: 0, - parentFailed: false - }, - { - name: "the report model contains $ scenarios", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report model contains" - }, - { - value: "0", - argumentInfo: { - parameterName: "expectedScenarios", - argumentName: "nScenarios", - formattedValue: "0" - } - }, - { - value: "scenarios" - } - ], - status: "PASSED", - durationInNanos: 3557626, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["true", "0"], - derivedArguments: ["true", "0"], - status: "SUCCESS", - durationInNanos: 62639251 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["false", "1"], - derivedArguments: ["false", "1"], - status: "SUCCESS", - durationInNanos: 19401140 - } - ], - casesAsTable: true, - durationInNanos: 82040391, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Report Generator" - }, - { - className: "com.tngtech.jgiven.report.ReportGeneratorTest", - testMethodName: "empty_report_files_are_excluded_when_the_exclude_empty_scenarios_option_is_set", - description: "empty report files are excluded when the exclude empty scenarios option is set", - tagIds: [], - explicitParameters: ["excludeEmptyScenarios", "expectedReports"], - derivedParameters: ["excludeEmptyScenarios", "expectedReports"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with name", - words: [ - { - value: "given", - isIntroWord: true - }, - { - value: "a report model with name" - }, - { - value: "non empty report model", - argumentInfo: { - argumentName: "name", - formattedValue: "non empty report model" - } - } - ], - status: "PASSED", - durationInNanos: 843506, - depth: 0, - parentFailed: false - }, - { - name: "the report has $ scenarios", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report has" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "scenarios" - } - ], - status: "PASSED", - durationInNanos: 2889021, - depth: 0, - parentFailed: false - }, - { - name: "a report model with name", - words: [ - { - value: "given", - isIntroWord: true - }, - { - value: "a report model with name" - }, - { - value: "empty report model", - argumentInfo: { - argumentName: "name", - formattedValue: "empty report model" - } - } - ], - status: "PASSED", - durationInNanos: 2228416, - depth: 0, - parentFailed: false - }, - { - name: "the report has $ scenarios", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report has" - }, - { - value: "1", - argumentInfo: { - argumentName: "n", - formattedValue: "1" - } - }, - { - value: "scenarios" - } - ], - status: "PASSED", - durationInNanos: 487604, - depth: 0, - parentFailed: false - }, - { - name: "scenario $ has no steps", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has no steps" - } - ], - status: "PASSED", - durationInNanos: 377303, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 3361524, - depth: 0, - parentFailed: false - }, - { - name: "the exclude empty scenarios option is set to", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the exclude empty scenarios option is set to" - }, - { - value: "true", - argumentInfo: { - parameterName: "excludeEmptyScenarios", - argumentName: "excludeEmptyScenarios", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 206701, - depth: 0, - parentFailed: false - }, - { - name: "reading the report model", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "reading the report model" - } - ], - status: "PASSED", - durationInNanos: 4373531, - depth: 0, - parentFailed: false - }, - { - name: "the report model contains $ reports", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report model contains" - }, - { - value: "1", - argumentInfo: { - parameterName: "expectedReports", - argumentName: "nReports", - formattedValue: "1" - } - }, - { - value: "reports" - } - ], - status: "PASSED", - durationInNanos: 376102, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["true", "1"], - derivedArguments: ["true", "1"], - status: "SUCCESS", - durationInNanos: 18750835 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["false", "2"], - derivedArguments: ["false", "2"], - status: "SUCCESS", - durationInNanos: 10725677 - } - ], - casesAsTable: true, - durationInNanos: 29476512, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Report Generator" - } - ] - }, - { - className: "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", - name: "Lambda Generating Step", - scenarios: [ - { - className: "com.tngtech.jgiven.lambdas.LambdaGeneratingStepTest", - testMethodName: "lambda_steps_work", - description: "lambda steps work", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "some lambda step", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "some lambda step" - }, - { - value: "5", - argumentInfo: { - argumentName: "a", - formattedValue: "5" - } - }, - { - value: "4", - argumentInfo: { - argumentName: "b", - formattedValue: "4" - } - } - ], - status: "PASSED", - durationInNanos: 873706, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 1258209 - } - ], - casesAsTable: false, - durationInNanos: 1258209, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Lambda Generating Step" - } - ] - }, - { - className: "com.tngtech.jgiven.tests.TestClassWithDescription", - name: "Test Class With Description", - description: "Test Description", - scenarios: [ - { - className: "com.tngtech.jgiven.tests.TestClassWithDescription", - testMethodName: "some_test", - description: "some test", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "nothing", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "nothing" - } - ], - status: "PASSED", - durationInNanos: 22801, - depth: 0, - parentFailed: false - }, - { - name: "something happens", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "something happens" - } - ], - status: "PASSED", - durationInNanos: 33200, - depth: 0, - parentFailed: false - }, - { - name: "something happened", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "something happened" - } - ], - status: "PASSED", - durationInNanos: 16400, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 408103 - } - ], - casesAsTable: false, - durationInNanos: 408103, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Test Class With Description" - } - ] - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - name: "HTML App", - description: "Tests against the generated HTML5 App using WebDriver", - scenarios: [ - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "the_statistics_on_the_welcome_page_of_the_HTML5_report_is_correct", - description: "the statistics on the welcome page of the HTML5 report is correct", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 281402, - depth: 0, - parentFailed: false - }, - { - name: "the report has $ scenarios", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report has" - }, - { - value: "3", - argumentInfo: { - argumentName: "n", - formattedValue: "3" - } - }, - { - value: "scenarios" - } - ], - status: "PASSED", - durationInNanos: 480203, - depth: 0, - parentFailed: false - }, - { - name: "step $ of case $ has status", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "has status" - }, - { - value: "FAILED", - argumentInfo: { - argumentName: "status", - formattedValue: "FAILED" - } - } - ], - status: "PASSED", - durationInNanos: 424003, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2636719, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 123612487, - depth: 0, - parentFailed: false - }, - { - name: "the index page is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the index page is opened" - } - ], - status: "PASSED", - durationInNanos: 449212023, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment27.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the page statistics line contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the page statistics line contains text" - }, - { - value: "3 Total", - argumentInfo: { - argumentName: "text", - formattedValue: "3 Total" - } - } - ], - status: "PASSED", - durationInNanos: 58590120, - depth: 0, - parentFailed: false - }, - { - name: "the page statistics line contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the page statistics line contains text" - }, - { - value: "2 Successful", - argumentInfo: { - argumentName: "text", - formattedValue: "2 Successful" - } - } - ], - status: "PASSED", - durationInNanos: 29216609, - depth: 0, - parentFailed: false - }, - { - name: "the page statistics line contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the page statistics line contains text" - }, - { - value: "1 Failed", - argumentInfo: { - argumentName: "text", - formattedValue: "1 Failed" - } - } - ], - status: "PASSED", - durationInNanos: 26861492, - depth: 0, - parentFailed: false - }, - { - name: "the page statistics line contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the page statistics line contains text" - }, - { - value: "0 Pending", - argumentInfo: { - argumentName: "text", - formattedValue: "0 Pending" - } - } - ], - status: "PASSED", - durationInNanos: 47881043, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 950393019 - } - ], - casesAsTable: false, - durationInNanos: 950393019, - executionStatus: "SUCCESS", - tags: [{}, {}], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "extended_description_should_handle_every_case_correctly", - description: "extended description should handle every case correctly", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#236" - ], - explicitParameters: [ - "description", - "value", - "parameterNames", - "parameterValues", - "expectedValue" - ], - derivedParameters: ["value", "argumentMap", "expectedValue"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 316302, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "$1", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "$1" - } - }, - { - value: "{a=1, b=2}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{a=1, b=2}" - } - } - ], - status: "PASSED", - durationInNanos: 585104, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 4645033, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 61152438, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 317361077, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 767152104, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment6.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 22650262, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "1", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "1" - } - } - ], - status: "PASSED", - durationInNanos: 46105331, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholder with index", - "$1", - "[a, b]", - "[1, 2]", - "1" - ], - derivedArguments: ["$1", "{a=1, b=2}", "1"], - status: "SUCCESS", - durationInNanos: 1372439046, - description: "Placeholder with index" - }, - { - caseNr: 2, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 236302, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "$", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "$" - } - }, - { - value: "{a=1, b=2}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{a=1, b=2}" - } - } - ], - status: "PASSED", - durationInNanos: 460203, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2466618, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 51597870, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 304909188, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 689726248, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment7.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 20214045, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "1", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "1" - } - } - ], - status: "PASSED", - durationInNanos: 22485061, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholder without index", - "$", - "[a, b]", - "[1, 2]", - "1" - ], - derivedArguments: ["$", "{a=1, b=2}", "1"], - status: "SUCCESS", - durationInNanos: 1276945562, - description: "Placeholder without index" - }, - { - caseNr: 3, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 161701, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "$$", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "$$" - } - }, - { - value: "{a=1, b=2}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{a=1, b=2}" - } - } - ], - status: "PASSED", - durationInNanos: 1202809, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2317717, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 58046417, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 326809645, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 673276331, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment8.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 13930000, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "$", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "$" - } - } - ], - status: "PASSED", - durationInNanos: 15273210, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Escaped placeholder", - "$$", - "[a, b]", - "[1, 2]", - "$" - ], - derivedArguments: ["$$", "{a=1, b=2}", "$"], - status: "SUCCESS", - durationInNanos: 1246449143, - description: "Escaped placeholder" - }, - { - caseNr: 4, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 182901, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "$2 + $1", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "$2 + $1" - } - }, - { - value: "{a=1, b=2}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{a=1, b=2}" - } - } - ], - status: "PASSED", - durationInNanos: 316503, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2839020, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 51293968, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 299313848, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 675541547, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment9.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 20374246, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "2 + 1", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "2 + 1" - } - } - ], - status: "PASSED", - durationInNanos: 16192616, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Multiple placeholders with switch order", - "$2 + $1", - "[a, b]", - "[1, 2]", - "2 + 1" - ], - derivedArguments: ["$2 + $1", "{a=1, b=2}", "2 + 1"], - status: "SUCCESS", - durationInNanos: 1214738015, - description: "Multiple placeholders with switch order" - }, - { - caseNr: 5, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 424904, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "a = $1 and b = $2", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "a = $1 and b = $2" - } - }, - { - value: "{a=1, b=2}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{a=1, b=2}" - } - } - ], - status: "PASSED", - durationInNanos: 332302, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2311316, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 60748735, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 298025938, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 670729512, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment10.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 12422390, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "a = 1 and b = 2", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "a = 1 and b = 2" - } - } - ], - status: "PASSED", - durationInNanos: 17558626, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholders with additional text", - "a = $1 and b = $2", - "[a, b]", - "[1, 2]", - "a = 1 and b = 2" - ], - derivedArguments: [ - "a = $1 and b = $2", - "{a=1, b=2}", - "a = 1 and b = 2" - ], - status: "SUCCESS", - durationInNanos: 1210780487, - description: "Placeholders with additional text" - }, - { - caseNr: 6, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 209902, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "int = $int and str = $str and bool = $bool", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "int = $int and str = $str and bool = $bool" - } - }, - { - value: "{int=1, str=some string, bool=true}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{int=1, str=some string, bool=true}" - } - } - ], - status: "PASSED", - durationInNanos: 335702, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 4431232, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 55630399, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 305683493, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 675913309, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment11.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 13307887, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "int = 1 and str = some string and bool = true", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "int = 1 and str = some string and bool = true" - } - } - ], - status: "PASSED", - durationInNanos: 15552702, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholders references by argument names in order", - "int = $int and str = $str and bool = $bool", - "[int, str, bool]", - "[1, some string, true]", - "int = 1 and str = some string and bool = true" - ], - derivedArguments: [ - "int = $int and str = $str and bool = $bool", - "{int=1, str=some string, bool=true}", - "int = 1 and str = some string and bool = true" - ], - status: "SUCCESS", - durationInNanos: 1239772143, - description: "Placeholders references by argument names in order" - }, - { - caseNr: 7, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 165201, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "str = $str and int = $int and bool = $bool", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "str = $str and int = $int and bool = $bool" - } - }, - { - value: "{int=1, str=some string, bool=true}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{int=1, str=some string, bool=true}" - } - } - ], - status: "PASSED", - durationInNanos: 321902, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2998819, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 45726401, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 305293513, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 665369488, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment12.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 13382888, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "str = some string and int = 1 and bool = true", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "str = some string and int = 1 and bool = true" - } - } - ], - status: "PASSED", - durationInNanos: 15024299, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholders references by argument names in mixed order", - "str = $str and int = $int and bool = $bool", - "[int, str, bool]", - "[1, some string, true]", - "str = some string and int = 1 and bool = true" - ], - derivedArguments: [ - "str = $str and int = $int and bool = $bool", - "{int=1, str=some string, bool=true}", - "str = some string and int = 1 and bool = true" - ], - status: "SUCCESS", - durationInNanos: 1199404609, - description: "Placeholders references by argument names in mixed order" - }, - { - caseNr: 8, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 198301, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "str = $str and int = $1 and bool = $bool", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "str = $str and int = $1 and bool = $bool" - } - }, - { - value: "{int=1, str=some string, bool=true}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{int=1, str=some string, bool=true}" - } - } - ], - status: "PASSED", - durationInNanos: 426403, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2485617, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 42869483, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 308050531, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 681006890, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment13.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 15642303, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "str = some string and int = 1 and bool = true", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "str = some string and int = 1 and bool = true" - } - } - ], - status: "PASSED", - durationInNanos: 15591102, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholders references by argument names and enumeration", - "str = $str and int = $1 and bool = $bool", - "[int, str, bool]", - "[1, some string, true]", - "str = some string and int = 1 and bool = true" - ], - derivedArguments: [ - "str = $str and int = $1 and bool = $bool", - "{int=1, str=some string, bool=true}", - "str = some string and int = 1 and bool = true" - ], - status: "SUCCESS", - durationInNanos: 1215565216, - description: "Placeholders references by argument names and enumeration" - }, - { - caseNr: 9, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 431703, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "bool = $3 and str = $2 and int = $int", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "bool = $3 and str = $2 and int = $int" - } - }, - { - value: "{int=1, str=some string, bool=true}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{int=1, str=some string, bool=true}" - } - } - ], - status: "PASSED", - durationInNanos: 402503, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2770619, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 51377239, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 305378814, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 675967358, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment14.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 17210813, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "bool = true and str = some string and int = 1", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "bool = true and str = some string and int = 1" - } - } - ], - status: "PASSED", - durationInNanos: 16482208, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholders references by argument names and enumerations ", - "bool = $3 and str = $2 and int = $int", - "[int, str, bool]", - "[1, some string, true]", - "bool = true and str = some string and int = 1" - ], - derivedArguments: [ - "bool = $3 and str = $2 and int = $int", - "{int=1, str=some string, bool=true}", - "bool = true and str = some string and int = 1" - ], - status: "SUCCESS", - durationInNanos: 1218626936, - description: "Placeholders references by argument names and enumerations " - }, - { - caseNr: 10, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 178601, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "bool = $bool and int = $ and str = $", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "bool = $bool and int = $ and str = $" - } - }, - { - value: "{int=1, str=some string, bool=true}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{int=1, str=some string, bool=true}" - } - } - ], - status: "PASSED", - durationInNanos: 284001, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 4179927, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 46778508, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 314210972, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 677886570, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment15.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 13622490, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "bool = true and int = 1 and str = some string", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "bool = true and int = 1 and str = some string" - } - } - ], - status: "PASSED", - durationInNanos: 18965425, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholder without index mixed with names", - "bool = $bool and int = $ and str = $", - "[int, str, bool]", - "[1, some string, true]", - "bool = true and int = 1 and str = some string" - ], - derivedArguments: [ - "bool = $bool and int = $ and str = $", - "{int=1, str=some string, bool=true}", - "bool = true and int = 1 and str = some string" - ], - status: "SUCCESS", - durationInNanos: 1228791003, - description: "Placeholder without index mixed with names" - }, - { - caseNr: 11, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 188601, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "bool = $bool and str = $2 and int = $ and str = $ and bool = $3" - } - }, - { - value: "{int=1, str=some string, bool=true}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{int=1, str=some string, bool=true}" - } - } - ], - status: "PASSED", - durationInNanos: 355003, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2395016, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 48410520, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 311125651, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 686336981, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment16.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 14212602, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "bool = true and str = some string and int = 1 and str = some string and bool = true", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "bool = true and str = some string and int = 1 and str = some string and bool = true" - } - } - ], - status: "PASSED", - durationInNanos: 17461625, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholder without index mixed with names and index", - "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", - "[int, str, bool]", - "[1, some string, true]", - "bool = true and str = some string and int = 1 and str = some string and bool = true" - ], - derivedArguments: [ - "bool = $bool and str = $2 and int = $ and str = $ and bool = $3", - "{int=1, str=some string, bool=true}", - "bool = true and str = some string and int = 1 and str = some string and bool = true" - ], - status: "SUCCESS", - durationInNanos: 1241979954, - description: "Placeholder without index mixed with names and index" - }, - { - caseNr: 12, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 246002, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "bool = $bool and not known = $unknown and unknown = $10", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "bool = $bool and not known = $unknown and unknown = $10" - } - }, - { - value: "{int=1, str=some string, bool=true}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{int=1, str=some string, bool=true}" - } - } - ], - status: "PASSED", - durationInNanos: 365503, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 1920713, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 48820750, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 315670462, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 669488097, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment17.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 12621691, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "bool = true and not known = 1 and unknown = some string", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "bool = true and not known = 1 and unknown = some string" - } - } - ], - status: "PASSED", - durationInNanos: 15478511, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Placeholder with unknown argument names get erased", - "bool = $bool and not known = $unknown and unknown = $10", - "[int, str, bool]", - "[1, some string, true]", - "bool = true and not known = 1 and unknown = some string" - ], - derivedArguments: [ - "bool = $bool and not known = $unknown and unknown = $10", - "{int=1, str=some string, bool=true}", - "bool = true and not known = 1 and unknown = some string" - ], - status: "SUCCESS", - durationInNanos: 1212468686, - description: "Placeholder with unknown argument names get erased" - }, - { - caseNr: 13, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 264802, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has extended description with arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has extended description with arguments" - }, - { - value: "$]", - argumentInfo: { - parameterName: "value", - argumentName: "description", - formattedValue: "$]" - } - }, - { - value: "{int=1}", - argumentInfo: { - parameterName: "argumentMap", - argumentName: "argumentMap", - formattedValue: "{int=1}" - } - } - ], - status: "PASSED", - durationInNanos: 297902, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2719919, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 51976472, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 327352144, - depth: 0, - parentFailed: false - }, - { - name: "show tooltip of extended description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "show tooltip of extended description" - } - ], - status: "PASSED", - durationInNanos: 669318992, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment18.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "has-tip", - argumentInfo: { - argumentName: "multiline", - formattedValue: "has-tip" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 13244095, - depth: 0, - parentFailed: false - }, - { - name: "attribute $ has value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "attribute" - }, - { - value: "tooltip-html-unsafe", - argumentInfo: { - argumentName: "attribute", - formattedValue: "tooltip-html-unsafe" - } - }, - { - value: "has value" - }, - { - value: "1 ]", - argumentInfo: { - parameterName: "expectedValue", - argumentName: "content", - formattedValue: "1 ]" - } - } - ], - status: "PASSED", - durationInNanos: 14695105, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [ - "Non-Java-Identifier char does trigger a space after a placeholder", - "$]", - "[int]", - "[1]", - "1 ]" - ], - derivedArguments: ["$]", "{int=1}", "1 ]"], - status: "SUCCESS", - durationInNanos: 1228704298, - description: "Non-Java-Identifier char does trigger a space after a placeholder" - } - ], - casesAsTable: true, - durationInNanos: 16106665098, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#236", - description: "Scenarios of Issue #236" - } - ], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "timings_greater_than_10_millis_are_displayed", - description: "timings greater than 10 millis are displayed", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#755" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 166502, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario took $ nanos", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "0", - argumentInfo: { - argumentName: "step", - formattedValue: "0" - } - }, - { - value: "of scenario took" - }, - { - value: "11000000", - argumentInfo: { - argumentName: "durationInNanos", - formattedValue: "11000000" - } - }, - { - value: "nanos" - } - ], - status: "PASSED", - durationInNanos: 407902, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 3631926, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 60227331, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 373285172, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment29.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the $ th element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the" - }, - { - value: "2", - argumentInfo: { - argumentName: "index", - formattedValue: "2" - } - }, - { - value: "th element with a" - }, - { - value: "duration", - argumentInfo: { - argumentName: "multiline", - formattedValue: "duration" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 39887185, - depth: 0, - parentFailed: false - }, - { - name: "has content", - words: [ - { - value: "has content" - }, - { - value: "(11ms)", - argumentInfo: { - argumentName: "content", - formattedValue: "(11ms)" - } - } - ], - status: "PASSED", - durationInNanos: 14381103, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 661261734 - } - ], - casesAsTable: false, - durationInNanos: 661261734, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#755", - description: "Scenarios of Issue #755" - } - ], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "the_configured_title_appears_in_the_generated_HTML_report", - description: "the configured title appears in the generated HTML report", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 164001, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2092815, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed with title", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed with title" - }, - { - value: "Test Title", - argumentInfo: { - argumentName: "title", - formattedValue: "Test Title" - } - } - ], - status: "PASSED", - durationInNanos: 49715956, - depth: 0, - parentFailed: false - }, - { - name: "the index page is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the index page is opened" - } - ], - status: "PASSED", - durationInNanos: 281061513, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment26.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the report title is", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report title is" - }, - { - value: "Test Title", - argumentInfo: { - argumentName: "title", - formattedValue: "Test Title" - } - } - ], - status: "PASSED", - durationInNanos: 40468590, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 540024066 - } - ], - casesAsTable: false, - durationInNanos: 540024066, - executionStatus: "SUCCESS", - tags: [{}, {}], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "attachments_of_all_cases_appear_in_the_HTML5_report_when_having_a_data_table", - description: "attachments of all cases appear in the HTML5 report when having a data table", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#191", - "com.tngtech.jgiven.tags.FeatureAttachments" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 1207509, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has one parameter", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has one parameter" - } - ], - status: "PASSED", - durationInNanos: 183301, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ default cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "default cases" - } - ], - status: "PASSED", - durationInNanos: 3160522, - depth: 0, - parentFailed: false - }, - { - name: "step $ of case $ has a text attachment", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "has a text attachment" - } - ], - status: "PASSED", - durationInNanos: 422403, - depth: 0, - parentFailed: false - }, - { - name: "step $ of case $ has a text attachment", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "has a text attachment" - } - ], - status: "PASSED", - durationInNanos: 290702, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2415218, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 74045430, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 420960014, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment3.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "$ attachment icons exist", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "2", - argumentInfo: { - argumentName: "nrIcons", - formattedValue: "2" - } - }, - { - value: "attachment icons exist" - } - ], - status: "PASSED", - durationInNanos: 19781842, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 700520815 - } - ], - casesAsTable: false, - durationInNanos: 700520815, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#191", - description: "Scenarios of Issue #191" - }, - {} - ], - classTitle: "HTML App", - expanded: false, - $$hashKey: "object:611" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "attachments_appear_in_the_HTML5_report", - description: "attachments appear in the HTML5 report", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureAttachments" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 218202, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has a text attachment with content", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has a text attachment with content" - }, - { - value: "Some Example Attachment\nwith some example content", - argumentInfo: { - argumentName: "content", - formattedValue: "Some Example Attachment\nwith some example content" - } - } - ], - status: "PASSED", - durationInNanos: 492203, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2025415, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 50000158, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 303408873, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment2.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an attachment icon exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an attachment icon exists" - } - ], - status: "PASSED", - durationInNanos: 50330961, - depth: 0, - parentFailed: false - }, - { - name: "the content of the attachment referenced by the icon is", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the content of the attachment referenced by the icon is" - }, - { - value: "Some Example Attachment\nwith some example content", - argumentInfo: { - argumentName: "content", - formattedValue: "Some Example Attachment\nwith some example content" - } - } - ], - status: "PASSED", - durationInNanos: 62382446, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 604436927 - } - ], - casesAsTable: false, - durationInNanos: 604436927, - executionStatus: "SUCCESS", - tags: [{}, {}, {}], - classTitle: "HTML App", - expanded: false, - $$hashKey: "object:610" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "newlines_are_detected_in_formatted_values_and_shown_as_multiline_text", - description: "newlines are detected in formatted values and shown as multiline text", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#226" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 713805, - depth: 0, - parentFailed: false - }, - { - name: "step $ of case $ has a formatted value $ as parameter", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "has a formatted value" - }, - { - value: "Some \n text \n with \n newlines", - argumentInfo: { - argumentName: "formattedValue", - formattedValue: "Some \n text \n with \n newlines" - } - }, - { - value: "as parameter" - } - ], - status: "PASSED", - durationInNanos: 380702, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2332317, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 52677477, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 314986155, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment21.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "multiline", - argumentInfo: { - argumentName: "multiline", - formattedValue: "multiline" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 21750056, - depth: 0, - parentFailed: false - }, - { - name: "has content", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "has content" - }, - { - value: "Some \n text \n with \n newlines", - argumentInfo: { - argumentName: "content", - formattedValue: "Some \n text \n with \n newlines" - } - } - ], - status: "PASSED", - durationInNanos: 25570883, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 550235739 - } - ], - casesAsTable: false, - durationInNanos: 550235739, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#226", - description: "Scenarios of Issue #226" - } - ], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "tags_with_custom_styles_are_shown_correctly", - description: "tags with custom styles are shown correctly", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 221501, - depth: 0, - parentFailed: false - }, - { - name: "the first scenario has tag", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the first scenario has tag" - }, - { - value: "TagWithCustomStyle", - argumentInfo: { - argumentName: "name", - formattedValue: "TagWithCustomStyle" - } - } - ], - status: "PASSED", - durationInNanos: 504004, - depth: 0, - parentFailed: false - }, - { - name: "the tag has style", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the tag has style" - }, - { - value: "background-color: black;", - argumentInfo: { - argumentName: "style", - formattedValue: "background-color: black;" - } - } - ], - status: "PASSED", - durationInNanos: 255501, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2015314, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 62243245, - depth: 0, - parentFailed: false - }, - { - name: "the All Scenarios page is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the All Scenarios page is opened" - } - ], - status: "PASSED", - durationInNanos: 295224814, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment25.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the page contains tag", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the page contains tag" - }, - { - value: "TagWithCustomStyle", - argumentInfo: { - argumentName: "tagName", - formattedValue: "TagWithCustomStyle" - } - } - ], - status: "PASSED", - durationInNanos: 70239303, - depth: 0, - parentFailed: false - }, - { - name: "the tag has style", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the tag has style" - }, - { - value: "background-color: black;", - argumentInfo: { - argumentName: "style", - formattedValue: "background-color: black;" - } - } - ], - status: "PASSED", - durationInNanos: 39512383, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 666160769 - } - ], - casesAsTable: false, - durationInNanos: 666160769, - executionStatus: "SUCCESS", - tags: [{}, {}, {}], - classTitle: "HTML App", - expanded: false, - $$hashKey: "object:614" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "navigation_links_of_the_HTML_report_can_be_customized_using_a_custom_JS_file", - description: "navigation links of the HTML report can be customized using a custom JS file", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#146" - ], - explicitParameters: ["title", "href"], - derivedParameters: ["content", "text", "href"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 396502, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 1850313, - depth: 0, - parentFailed: false - }, - { - name: "a custom JS file with content", - words: [ - { - value: "given", - isIntroWord: true - }, - { - value: "a custom JS file with content" - }, - { - value: "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", - argumentInfo: { - parameterName: "content", - argumentName: "content", - formattedValue: "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});" - } - } - ], - status: "PASSED", - durationInNanos: 528704, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 47137237, - depth: 0, - parentFailed: false - }, - { - name: "the index page is opened", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the index page is opened" - } - ], - status: "PASSED", - durationInNanos: 261387171, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment19.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the navigation menu has a link with text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the navigation menu has a link with text" - }, - { - value: "JGIVEN DOCUMENTATION", - argumentInfo: { - parameterName: "text", - argumentName: "text", - formattedValue: "JGIVEN DOCUMENTATION" - } - } - ], - status: "PASSED", - durationInNanos: 41256496, - depth: 0, - parentFailed: false - }, - { - name: "href", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "href" - }, - { - value: "http://jgiven.org/docs", - argumentInfo: { - parameterName: "href", - argumentName: "href", - formattedValue: "http://jgiven.org/docs" - } - } - ], - status: "PASSED", - durationInNanos: 16444717, - depth: 0, - parentFailed: false - }, - { - name: "target", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "target" - }, - { - value: "_blank", - argumentInfo: { - argumentName: "target", - formattedValue: "_blank" - } - } - ], - status: "PASSED", - durationInNanos: 15038808, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JGiven Documentation", "http://jgiven.org/docs"], - derivedArguments: [ - "jgivenReport.addNavigationLink( { \n href: 'http://jgiven.org/docs', \n text: 'JGiven Documentation', \n target: '_blank' \n});", - "JGIVEN DOCUMENTATION", - "http://jgiven.org/docs" - ], - status: "SUCCESS", - durationInNanos: 519931923 - }, - { - caseNr: 2, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 193601, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 1778213, - depth: 0, - parentFailed: false - }, - { - name: "a custom JS file with content", - words: [ - { - value: "given", - isIntroWord: true - }, - { - value: "a custom JS file with content" - }, - { - value: "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", - argumentInfo: { - parameterName: "content", - argumentName: "content", - formattedValue: "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});" - } - } - ], - status: "PASSED", - durationInNanos: 313802, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 53633484, - depth: 0, - parentFailed: false - }, - { - name: "the index page is opened", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the index page is opened" - } - ], - status: "PASSED", - durationInNanos: 306802197, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment20.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the navigation menu has a link with text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the navigation menu has a link with text" - }, - { - value: "BACK", - argumentInfo: { - parameterName: "text", - argumentName: "text", - formattedValue: "BACK" - } - } - ], - status: "PASSED", - durationInNanos: 38658577, - depth: 0, - parentFailed: false - }, - { - name: "href", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "href" - }, - { - value: "javascript:window.history.back()", - argumentInfo: { - parameterName: "href", - argumentName: "href", - formattedValue: "javascript:window.history.back()" - } - } - ], - status: "PASSED", - durationInNanos: 13173894, - depth: 0, - parentFailed: false - }, - { - name: "target", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "target" - }, - { - value: "_blank", - argumentInfo: { - argumentName: "target", - formattedValue: "_blank" - } - } - ], - status: "PASSED", - durationInNanos: 13057893, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["Back", "javascript:window.history.back()"], - derivedArguments: [ - "jgivenReport.addNavigationLink( { \n href: 'javascript:window.history.back()', \n text: 'Back', \n target: '_blank' \n});", - "BACK", - "javascript:window.history.back()" - ], - status: "SUCCESS", - durationInNanos: 555928380 - } - ], - casesAsTable: true, - durationInNanos: 1075860303, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#146", - description: "Scenarios of Issue #146" - } - ], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "the_welcome_page_of_the_HTML5_report_can_be_opened", - description: "the welcome page of the HTML5 report can be opened", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 143201, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 3415424, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 45517525, - depth: 0, - parentFailed: false - }, - { - name: "the index page is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the index page is opened" - } - ], - status: "PASSED", - durationInNanos: 257244742, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment28.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the page title is", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the page title is" - }, - { - value: "Welcome", - argumentInfo: { - argumentName: "title", - formattedValue: "Welcome" - } - } - ], - status: "PASSED", - durationInNanos: 35213152, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 467277746 - } - ], - casesAsTable: false, - durationInNanos: 467277746, - executionStatus: "SUCCESS", - tags: [{}, {}], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "clicking_on_tag_labels_opens_the_tag_page", - description: "clicking on tag labels opens the tag page", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureTags-Tags", - "com.tngtech.jgiven.tags.Issue-#47" - ], - explicitParameters: ["prependType", "tagName"], - derivedParameters: ["prependType", "tagName"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 200202, - depth: 0, - parentFailed: false - }, - { - name: "scenario $ has tag $ with value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has tag" - }, - { - value: "testtag", - argumentInfo: { - argumentName: "name", - formattedValue: "testtag" - } - }, - { - value: "with value" - }, - { - value: "#42", - argumentInfo: { - argumentName: "value", - formattedValue: "#42" - } - } - ], - status: "PASSED", - durationInNanos: 293202, - depth: 0, - parentFailed: false - }, - { - name: "the tag has prependType set to", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the tag has prependType set to" - }, - { - value: "true", - argumentInfo: { - parameterName: "prependType", - argumentName: "prependType", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 255602, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 6502846, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 48201245, - depth: 0, - parentFailed: false - }, - { - name: "the All Scenarios page is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the All Scenarios page is opened" - } - ], - status: "PASSED", - durationInNanos: 298958541, - depth: 0, - parentFailed: false - }, - { - name: "the tag with name $ is clicked", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the tag with name" - }, - { - value: "testtag-#42", - argumentInfo: { - parameterName: "tagName", - argumentName: "tagName", - formattedValue: "testtag-#42" - } - }, - { - value: "is clicked" - } - ], - status: "PASSED", - durationInNanos: 138924495, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment4.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the page title is", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the page title is" - }, - { - value: "testtag-#42", - argumentInfo: { - parameterName: "tagName", - argumentName: "title", - formattedValue: "testtag-#42" - } - } - ], - status: "PASSED", - durationInNanos: 31012722, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["true", "testtag-#42"], - derivedArguments: ["true", "testtag-#42"], - status: "SUCCESS", - durationInNanos: 700055312 - }, - { - caseNr: 2, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 286602, - depth: 0, - parentFailed: false - }, - { - name: "scenario $ has tag $ with value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has tag" - }, - { - value: "testtag", - argumentInfo: { - argumentName: "name", - formattedValue: "testtag" - } - }, - { - value: "with value" - }, - { - value: "#42", - argumentInfo: { - argumentName: "value", - formattedValue: "#42" - } - } - ], - status: "PASSED", - durationInNanos: 382203, - depth: 0, - parentFailed: false - }, - { - name: "the tag has prependType set to", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the tag has prependType set to" - }, - { - value: "false", - argumentInfo: { - parameterName: "prependType", - argumentName: "prependType", - formattedValue: "false" - } - } - ], - status: "PASSED", - durationInNanos: 193101, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2983921, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 51302168, - depth: 0, - parentFailed: false - }, - { - name: "the All Scenarios page is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the All Scenarios page is opened" - } - ], - status: "PASSED", - durationInNanos: 298688338, - depth: 0, - parentFailed: false - }, - { - name: "the tag with name $ is clicked", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the tag with name" - }, - { - value: "#42", - argumentInfo: { - parameterName: "tagName", - argumentName: "tagName", - formattedValue: "#42" - } - }, - { - value: "is clicked" - } - ], - status: "PASSED", - durationInNanos: 146037746, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment5.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "the page title is", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the page title is" - }, - { - value: "#42", - argumentInfo: { - parameterName: "tagName", - argumentName: "title", - formattedValue: "#42" - } - } - ], - status: "PASSED", - durationInNanos: 30359117, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["false", "#42"], - derivedArguments: ["false", "#42"], - status: "SUCCESS", - durationInNanos: 693897168 - } - ], - casesAsTable: true, - durationInNanos: 1393952480, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "Tags" - }, - { - value: "#47", - description: "Scenarios of Issue #47" - } - ], - classTitle: "HTML App", - expanded: false, - $$hashKey: "object:612" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "showing_thumbnails_can_be_configured", - description: "showing thumbnails can be configured", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#274" - ], - explicitParameters: ["thumbOption"], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 306402, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has an image attachment $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has an image attachment" - }, - { - value: "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lv+h3PtQACgiIiIiIiIiN9Uf6/2RRxo+QnXv6gT5BuHl5eX8ELkdZWVlOT+S05JJykxixuEZLDi+4Kb0pwBQRERERERERG46d6M74X7hdArpRNtqbanlWQuHwUGQOcjVpYlUqAu2C2CHhOwEdpzbwZakLRy0HiTPnnfT+lQAKCIiIiIiIiIiUokZXV2AiIiIiIiIiIiI3DwKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQSUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQMDofDYbVasVqt5Ofnu7oeERERERERERERuUEWiwU/Pz/8/PwwW61WMjIyCr8wm11dm4iIiIiIiIiIiNyggoICMjIyADCmpqbi4+Oj8E9ERERERERERKSSMJvN+Pj4YLVaMRYUFCj8ExERERERERERqWTMZjP5+fnaBERERERERERERKQyUwAoIiIiIiIiIiJSiSkAFBERERERERERqcQUAIqIiIiIiIiIiFRiCgBFREREREREREQqMQWAIiIiIiIiIiIilZgCQBERERERERERkUrM7OoCSmvTpk1cuHABu91OVlYWPj4+ADRp0oSGDRuSnZ3Njz/+SEREBM2aNXPe53A4OHLkCIcPH3YeCwsLo1WrVphMJgB+/fVXTp48idFoJD8/n9q1a9OiRYsKfb7Dhw87a8zIyMDLywuj0UhwcDARERH88MMPVKlSpdg9NWvWpE2bNlitVnbu3El+fj52ux2z2UyHDh3w8/Nj8eLFAOTl5WG32/Hw8ACgRYsW7Nu3D4Ds7GxMJhNubm4YDAb69+8PwJIlS/D29qZnz57F+k1MTGTXrl3k5uZiNBrx9/enbdu2eHt739R3dCVTp05l9OjR5OXl8e233zJq1CjnuZ9++omJEyeybt06AE6dOsWHH35Ieno6RqOR559/vsL/X4uIiIiIiIiIVKQKDwAdDgcbN26kW7du13Vf586dAbBaraxbt47777+/2Pm4uDj8/PyIj48vFgDu27eP8+fPc8899+Dh4UFBQQFbt25l9+7dtG3blqSkJE6dOkWfPn2cAeC6desICwsjICCgTM+4c+dOGjVqVCKwu5rGjRvTuHFjABYsWECvXr2cIWd2djbu7u4lnrnI9u3bCQ8Pp2bNms53sX//fjp37uy858iRI1y4cIHIyEjnfXXr1gUgKiqK0NBQ6tev7zx3/vx57HY7ycnJZGVl4eXlBUBSUhLR0dHcdddd+Pv7OwPW9evX07dv31I/72+V5Z0Vyc/Px2KxsG/fPuc7BDh37hzLli0rFkxOmjSJvn37cs8997Br1y4++ugjZsyYUea6RURERERERERudRUeAFqt1jKFPNcSHx9Phw4d2LJlC+fPn6datWo4HA4OHjxIv379nCPfzGYzkZGRGAwGoHBknMPhwOFwAGCxWLjnnnvKXIfD4SAzM/OmPOOV5ObmOusHqF+/frEwryzi4uKoW7cu6enpxMfH07x5c6BwtGRERAT+/v4AGAwGGjdufEP9lfWd7dq1i1WrVnHo0CEmTZpEbGwsNWrUoFatWjRo0IDJkyfz7LPP8tprrznvGTdunLP24OBg0tPTy1y3iIiIiIiIiMjvQYUHgEXhXHlKSkrC4XAQEhJCvXr1iI+Pp1q1amRkZGCxWEpMTTUa/2/pw7CwMI4fP86PP/5IjRo1CAkJoWbNmri5uZWplosXL+Ln53dDz3O92rRpw+bNmzl48CAhISGEhYURGBhY5vYKCgo4efIkffv2JT09ne3btzsDQKvVetm2zeayfyuV9Z21bt0aT09PwsPDGTBgAJMmTeKVV14BYNGiRdSrV48mTZoUu+fS2mfNmsWAAQPKXLeIiIiIiIiIyO9BhQeAFy5coFWrVuXaZtFoNYB69erx008/0bZtWwwGA3a73XldSkoKGzZsAMBmszFo0CCMRiNdu3YlMzOTxMRETp8+TUxMDL179y5TKJWcnFzuAScUjlRcsmRJsWPt2rUjNDSU0NBQHnjgAc6fP09SUpJzSm+HDh3K1NeJEycICAjAx8cHHx8f7HY7586dIzg4uMQ7XbJkCTabDZvNRvfu3QkKCrru/m7kncXHxzv/3xc5e/YsP/30Ex9//PFl77HZbHz00UfYbDaGDx9epn5FRERERERERH4vKjQAzM/Pp6CgwDkdtzzk5eWRkJCAt7c3CQkJANjtdhISEqhTpw4OhwOr1Yqfnx8BAQEMHDgQgHnz5gGFYZDD4cDb29s5dTYmJobjx48TERFx3fUkJydTp06dcnu+Im5ubs7NOX4rJycHDw8PqlevTvXq1QkPD2fBggW0bdvWudHJ9YiLiyMrK4tly5YBhe8oPj6e4OBg/P39OX/+vHMabVFNv/zyS7Fg8HqU9Z39+OOPLF26lIYNG7JixQoOHz7MpEmTqFGjBllZWbzwwgtA4aYqo0eP5qOPPsLNzY1//vOf1KpViyeffNI5FVxEREREREREpLKq0ADwwoULZd5Y40qOHz9O9erVueuuu4odi42NpW7dujRv3pzo6Gi6du2Kl5enOOPyAAAgAElEQVQXDoeDhIQEZ/CzZ88e8vLy6NChA0ajEbvdjtVqpVatWtddS9F6gmWdPlwWOTk5LF26lF69ejlDudTUVDw8PMoU/lmtVtLT0xk4cKDz/szMTJYvX067du1o0aIF69evx9/f3zlqLyUlBavVisViue7+buSdPfDAA8THx/PKK6+wd+9eWrVqRZ8+fQAYNmyY87r777+fTz/9FIBvv/2WkJAQnnrqqevuT0RERERERETk96hCA8Dk5GSqV69erm3GxcWVGKl3xx13sHPnTjIyMmjSpAkWi4U1a9bgcDgwGAwEBgY6N/qIiIggJiaG5cuXYzQacTgc1KxZs0ybWly4cOGG1t67mstNAfb29qZnz5506dKFrVu3UlBQgNFoxGKxXPcuy0Xi4uKoV69esfDQ29ub4OBgTp48Sb169ejatSsxMTFkZWVhMpnw8vKiY8eOVK1a9br7u5F3ZrPZnOs5Hjp0iI4dO17znnnz5lGlShW2bt3qPPaf//ynxDqRIiIiIiIiIiKVhSE2NtYREhJSIZ1t2LCBzp07l2lk2u/B3r17b3gDjtuN3pmIiIiIiIiIyM2TmJhYsQGgiIiIiIiIiIiIVJzExESMri5CREREREREREREbh4FgCIiIiIiIiIiIpWYAkAREREREREREZFKTAGgiIiIiIiIiIhIJaYAUEREREREREREpBJTACgiIiIiIiIiIlKJKQAUERERERERERGpxIxms5mCggJX1yEiIiIiIiIiIiLlqKCgAIvFgtHPz4+MjAyFgCIiIiIiIiIiIpVEQUEBGRkZ+Pn5Yfb39wfAarWSn5/v4tJERERERERERETkRlksFnx9ffHz88OQl5fncHVBIlI2CQkJ1KtXz9VliIiIiIiIiMgtTJuAiIiIiIiIiIiIVGIKAEVERERERERERCoxBYAiIiIiIiIiIiKVmAJAERERERERERGRSkwBoIiIiIiIiIiISCWmAFBERERERERERKQS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2rdvz6ZNm/jyyy9JTEzkiSeecNm7ExERERERqUxybDmM3TqWt3a+Ra4t19XlCC4aAdi0aVO6d+/O+vXree+99/Dw8KBevXpERETQo0ePYmv4lZbdbiciIoKoqCgOHDhAnTp1OHr0KAMHDrzsril2u52WLVuyceNGsrOz2b9/P/n5+URERPDLL78Uu/bIkSOcO3eOO++8Ezc3N9q1a8fy5cvZs2cPbdu2LXbt8ePHmTZtGlA4HfHw4cM4HI5iUyD79u3L+vXrWbx4MQUFBTRt2pSOHTte9zOL3EqqVavG66+/XuJ48+bNad68+VXvbdeuHe3atbvqNf369aNfv37Fjo0ePbrY1wEBAYwaNarEva1bt6Z169bOr00mEw8//DAPP/yw81h+fj65ubl4eHhctQ4REREREREpnUXHFrEneQ+TOk2idpXari7ntuaSEYAATz/9NBMnTmTYsGG0aNGCY8eOMXv2bMaOHYvVai1TmxEREZhMJmJiYtizZw8Oh6NEQHepNm3aUFBQwN69e51TC8PDw0tct3nzZgDaty/c1rpDhw7Fjl/q4sWLREdHEx0dzfbt20lLS2PkyJEMGzbMeY3FYmH48OEUFBRgMBh45JFHyvS8IlI2a9asYc6cOcWOxcbGAlCjRg1XlCQiIiIiIlIpHU8/zog1I9iWtM3VpdzWXLYLMBSuw1ezZuGikHl5eUyZMoU9e/awadMm+vbti8VSuGtMVlZWsc0xUlNTAUpMmS0K8H799VesViuBgYHUrVv3iv03b94cDw8P9u/fz+7du2nVqlWJzUfsdrtzc4Bp06Y5R/dB4RTjnJycYiOGWrduzV/+8hcApk6dytatW7l48WKJvoumGnt6elKrVq1rvCkRKU/u7u5ER0fjcDiIiIjAarWyYsUK/P39admypavLExERERERqVSybdk8H/U8EyMn0r1G92vfIOXOJSMAv/32W5588kk2bNjgPObm5uYceVO0W2fR15del5KS4pzSW6dOnRJtt2vXjjNnzrB3796rjv4r6rNly5Zs3ryZtLS0y16/b98+0tLSqF69OnfddZfzo1atWuTl5V12enGRoUOHYjabWbJkCefOnbtqLSJScbp27crgwYM5duwYM2bMYPHixdSpU4fnnntOa3GKiIiIiIjcBAWOAv665a+sOLnC1aXcllwyArB58+asXLmS6dOns2XLFgICAkhOTubXX3/FZDLRqlUrAAYPHsz+/ftZvnw5v/76K35+fhw9epTs7GyaNWt22XXF2rZty9dff01OTs41A8Ci67dt24bFYiEiIgKbzVbsfNE03379+tGzZ0/n8V27dvHhhx+yefNmOnfufNm2g4OD6dOnD8uWLWPmzJm8/PLLpX5HInJzdenShS5duri6DBERERERkduG3WFn/LbxZBdk82C9B11dzm3FJSMAW7duzauvvkqzZs04ceIEGzdu5MSJE0RERPD66687pwXXr1+fcePG0bJlSy5evMjhw4cJCgpi6NCh/OUvf8FgMJRou2jar5eXl3OX0WvVYjQandOBL5WXl8eOHTswm83Odf+KtGzZEl9fX/bu3UtaWtoV2x84cCBVqlRh586d7NmzpzSvR0RERERERESk0no35l3WnFrj6jJuK4a8vDyHq4sQkbJJSEigXr16ri5DREREREREbgHt5rdzdQmlZjaamdZlGu2D27u6lNuCy3YBFhERERERERGR21OBvYCXN73M4dTDri7ltqAAUEREREREREREKly2LZsxG8dwKuOUq0up9BQAioiIiIiIiIiIS6TmpvJ81PPk2nJdXUqlpgBQRERERERERERc5mTGSd7f/b6ry6jUzK4uQEREREREREREbtymBzaRmpdKam4q1jwrqbmFn6fkprDt3Db2Xtjr6hKvaNGxRXQM7sg9te5xdSmVknYBFvkd0y7AIiIiIiIiUlqpuamsO72OX878wvZz28mz57m6pGI8TB58f8/31PCu4epSKh0FgCK/YwoARUREREREpCyyC7KJOhvF4uOL2ZK0xdXlOIVXDWfm3TNdXUalowBQ5HdMAaCIiIiIiIjcqH0X9vHZgc+ITop2dSkAjG42mpFNRrq6jEpFAaDI75gCQBERERERESkv+y7s438H/ufyEYEeJg8W3ruQII8gl9ZRmWgXYBERERERERERoUVgC6Z1ncaHkR/i6+brsjpybDlM3jPZZf1XRhoBKALY7Xby8/MpKChwflzKbDY7PywWC0bjrZGdawSgiIiIiIiI3AzJOcn8bcvf2H1ht8tq+F/3/9GmWhuX9V+ZKACU215ubi6ZmZk4HKX7UTAYDPj4+ODm5naTK7s2BYAiIiIiIiJys9gddr4+/DWfHfiMAnvBtW8oZ/V86zG712xMRlOF913Z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atRA+/btcffuXRw8eBBNmzYVNvfQarV6UxJjYmKwatUqmJubY/HixcJmI3Xr1oWZmRl0Oh3y8vKEXYiJiIiIiIiIiIhMRZULAHU6HS5dugQA+OSTT1CrVi3hmFwux9GjR/Hnn3+ib9++eOONNxASEoIHDx5gzpw5qF+/PiwtLfHkyROkp6dDLpejdevWqFmzJmxsbPDgwQPMmDEDTZo0gUgkwt27d5GXl4e2bdsy/CMiIiIiIiIiIpNU5VKv+/fvIykpCQ0aNNAL/wCgS5cuAP7eIEQsFmPOnDn4z3/+A2dnZzx+/Bj37t2Dra0t3n33XaxYsQKNGzeGSCTCrFmz0K9fP0ilUoSFhSE0NBSWlpbo378/Pvnkk0p/nURERERERERERJVBpFardaWfRkRVUVRUFDfgICIiIiIiIqISVbkRgERERERERERERFRxGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMAaAREREREREREREJowBIBERERERERERkQljAEhERERERERERGTCGAASERERERERERGZMLGxCyAi05KQlYCxR8Yi6GEQcjQ5JZ4rl8jRt3FffN/3e9jL7CupQqooOp0OmZmZkEgksLS0NHY51Vp2djZCQ0Nx//59pKSkAAAcHR3RuHFjdOzYEVZWVkaukIiIiIiIqjORWq3WGbuI8lizZg3Gjx8PmUyGw4cPo169emjVqpXeOZcvX8aGDRswc+ZMtGjRAgCgUqmwZ88eXL16FSqVCvXq1cMHH3wADw8PY7wMogoRFRWFBg0aGLsMPQN2D8DBewfLdc3I1iPxa/9fiz2elpaGGTNm4MyZMzh8+DCaN29eapuhoaH44YcfcOvWLaSmpsLa2hrt27fH+PHj0aZNm3LVVx18//33+PHHH6HVanH9+vVSz4+MjMTbb7+N3bt3w9vbu1x9PXr0CKGhoXj06BHy8vIAADKZDC1btoSPjw8cHR1LbSM3NxcnT57E3bt3oVKp4O7ujjfffBPu7u7FXrNr1y5ERkYWe3zy5Mll6jshIQHfffcdPvzwQ9SpUwd79uyBUqnEyJEjS722JBs2bEC9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AAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABdbg894AAAD4W5g0Y1b2+sktqU7y9T3+JcMvODVJsrKiMtf+dlTuHzMpf567IJs1bpSu222dH33jgByya8ckyR3PT8ivx07OiB/9+998O99+++386Ec/ykMPPVTr8tdeey3XXntt7rnnnlxzzTWZNGlSkqSqqipJUlZW87f8Y445JnvttVd+9KMf5fDDD89pp51Waz2jRo3KkCFD0rdv3+y///558sknM3HixFx++eUbtX0XXXRRli9fnoEDB5bu869typQpGTJkSLp165YzzzxzvcuNHDkyTzzxRJYsWZJtt902Z511Vrbaaqu1lqusrMx//ud/Zty4camqqspuu+2W73//+2nUqFGd27H6WDRoUPMxqUWLFtlmm21y2GGHpWfPnhu1L2+88UaaNWuWbbfddqOW/7/if7Nfffr0yTnnnJMuXbrUunzw4MHZZpttcuyxx/6vt+/YQffniVdeT2V1dcZfcXa6f2mbJMkDYydn0O/H5L9nzk5ZvXrpuGXbnHnQl9PnkL2TJG/NnpfOFw5MxbAr/9fbsLGefvrp3HPPPenTp0969+693uUef/zx/P73v8/y5cvToUOHnH766dlhhx3WuezGvoaS5A9/+EN++9vfZvHixWnfvn1OO+207Ljjjmut74orrshll11WOm7Tp0/PXXfdlTlz5qR169Y5+eST061btw3u71VXXZXXXnst9erVK112/vnnp1OnTunTp0+tZaurq7PbbrvlkksuyYoVK3Lvvfdm/PjxWbFiRXr37p3TTz899evXr3Wbhx56KA8//PBa76F/baecckoqKipSr169NGnSJFtuuWV69uyZI444ovSe8deyvuO5atWqDBs2LOPGjcuqVavSuXPnnHnmmWnduvUG11nXca/rvXXq1KkZNmxYZs2alRYtWuTYY4/NgQcemCR55ZVX8sADD2Tu3Llp3bp1jjvuuOy7774b3Jbq6uo88MADefbZZ1NRUZEePXrkjDPOSMOGDddatq77nzJlSu69997MmjUrm2++ec4444x07tx5k/d/+PDhGTFiRJKkdevWOe2007L99tuvd/vX93vx2muvzaRJk3LbbbelZcuWtW7Tv3//VFdX5+abb97g4/O3IgACAFBIe2y7VSqGXZmrHn8+f3x7RunyYwbdl5nzFuaX3zs6e22/TVZUVOSR8a/l6IH35qkfnJoDOn8pJ/XaI8d+uUsda//7+tGPflT67+uvvz7bb799jj/++NJlb7/9dlq3bp0xY8bk5JNPrvVh9IUXXkibNm0+0/1OmzYtrVu3TpMmTTJx4sR07979s+/Eerzwwgt55pln1vuhbbV33nkn9913Xy677LJ88YtfzMMPP5xBgwblmmuuWWvZp59+OtOnT88NN9yQhg0b5oYbbshDDz2Uk08+eaO26f7770+SLFy4MOPHj8/tt9+euXPn5sgjj9zgbUeOHJmuXbsWLgD+o+/XI+eemCRpcOqlpcsGPDU61w0flZtP/UYO261TNmvcKKOn/Tnfv+uJzFtSnkuPPihf+kKbfHDzxX+37bz11ltTVVWVrbfeus7lxo4dmxEjRuTKK69M27Zt8+ijj+amm25aZzzY2NdQkkyePDkPPvhgfvrTn2abbbbJE088kZtuuim/+MUvSsssX748d955Z62otHLlytxwww05+eSTs99++2Xy5Mm56aabMmjQoLRq1arO+ywvL88FF1ywzveP1a+11a677rrss88+SZLf/OY3ef/993PjjTemsrIyV199dX7729/m6KOPLi3/5z//OS+99NIG9/uv5Sc/+Um6dOmSZcuWZdq0aRk2bFjeeOONXHzxX+85VNfxfPjhh/Pee+/l5z//eRo2bJhBgwbl3nvvTd++fetcZ13Hva731sWLF+e6667LWWedlX322SdTp07NVVddlZ122imNGjXKoEGDctFFF2XXXXfNlClT8rOf/Sw77rhj2rVrV+f2PP3005kyZUpuvPHGNGjQIEOGDMmkSZPWeo7Udf9NmzbNgAED0q9fv+y1114ZPXp0BgwYkFtuuSVNmjTZ6P2fPHlyhg8fngEDBqRFixZ57rnncv3112fo0KHr3PYN/V5s1apVRo8enSOOOKJ02RtvvJEVK1Zs8I9Qf2sCIAAA/zRGvvZ2Rkx5O2/9/Px0aFvzobVZ44b53oHd89Xd/iVbt26RJLlvzKT8euzk/OCI/fLvv3wk7w++OGX/M3rl0odHZOoHc/LIuSfmxWnv5YL7f5cFS5elflm9DDrlyBy2W6e8+/GCdPvJLbn63w7N05PfzFuz5+XQXTtl0ClHrHfb/reaNm2aNm3aZOLEienRo0eSZN68eZk5c+ZnjjYjRozIvvvum+bNm+cPf/hDrQ86AwcOTMuWLfPxxx9nyZIlqaqqyjnnnJP27dvXed2nbbfddrn88svz4IMPZunSpevdljFjxmSfffbJdtttl6Rm5OOTTz6Zjz76aK2Y8uKLL+aoo45K8+bNkyTHHntsbrrppo0OgKu1atUqhxxySFq2bJnBgwfnoIMOymabbZYJEybk17/+dcrLy9OwYcOcdNJJ6dGjRx577LGMGTMmkydPzgcffJDjjz8+jz76aJ5//vmsWrUqm2++ec4666x06NBhrft66623ctttt2X58uXp1KlTGjdunFatWuXb3/52Vq1alfvuuy8TJ05MRUVFunTpkjPOOCONGjXKkCFD0rp168ybNy+ffPJJFi1alH79+pVGr4wYMSLDhw9PRUVF2rZtm759+6Zdu3Z59tlnM2HChFRUVKSysjKXXnrpJu3X+ta7+j4fe+yxNGrUKPvss0+tkV+ftnDhwvz0pz/NzJkzs8UWW6Rv375p06ZNzjzzzFx77bX54he/mKTmA/T111+f22+/faNGWy1atiKXP/ps/vP7x+a4HruWLj9010754+VnpVmjmpFG7368IJ0vHJh5t/44W55zTV69um92bv+FJDXvFycOfSgfDL44sxYuzjl3/zavf/hxVlVWps8he+fCI/ZLkmx33oBc8PV98+zUd/LBgkVp1bRxHj3vpLRs2nit7Tr00EPTsWPHXHLJJXVu/5Zbbpn+/ftniy22SJL07t07Dz30UCoqKtba/419DSVJy5Ytc+6555aeg/vuu2/uv//+LF++vBRN7r333vTu3Tsvv/xy6XZTpkxJs2bNsv/++ydJ9thjj3Ts2DHjx4/PIYccst7nTpIsXbo0zZo1q3O7kproWV5eXrqPiRMn5oQTTijd9qijjsqjjz5aCoAVFRUZOnRoTj755AwYMGC96509e3buuOOOzJ49O2VlZenevXtOOOGENGjQIH369MmRRx6ZKVOmZP78+WnWrFl+8IMfbHB7mzZtmq5du6ZDhw45//zz86c//Sldu3bNvHnzcuedd+b9999PZWVlvvrVr+aoo45KksyaNSu33XZbZsyYkZYtW+bb3/526TFaU13Hc+edd07v3r1L72177713fve7323wsa3ruNf13tq0adN897vfLUXZXXbZJW3bts1HH32U7bffPn379s2uu9a8vnbddde0aNEis2bN2mAAfOaZZ/Kd73ynNEruoosuKl135513ZunSpenfv38qKyvXe/8rV65Mu3btSr+X9t9//zz22GOZPHlyevToUWs9de3/jBkz0rFjx7RoUfP7f/fdd88vfvGLLFu2LE2bNl1r2+v6vZgk3bp1y3PPPVcrAL7wwgvZbbfdMm3atA0eq78l5wAEAOCfxrNT38m+O25Xin9r+uLmrdKgfu3/PT6kS8dUVlXnpenvlS77zctTcsq+XTN/ybJ8c+B9+cnRB2b6Df+Rh/p9O8cNvj+zFy5Jg7KyLCxfnnr1kifPPzljL/t+fvnc+Ez7aO7fbN+qqqqy33775bnnnitdNmrUqPTq1avOALM+5eXlmTRpUnr27JmuXbtmxowZmT9/fun6srKyTJgwIf3798+VV16ZvfbaK3fccccGr/u07bfffqOCzgcffJBtttmm9HODBg3Srl27fPDBB+tcds3Y2L59+yxYsCDLli3b6P1fU48ePdK4ceNMmzYtK1asyMCBA3Paaadl6NChOemkk3LzzTensrIy3/zmN7Pddtvl1FNPzfHHH5+pU6dm+PDhueqqq/KLX/wiHTt2zN13373O+xg8eHAOPfTQ3HzzzTn00EPz4osvlqY6Pv7443n33Xdz/fXXZ8iQIamqqsp9992XJKlfv37GjRuXM888M5dddlm6d++exx9/PEnNNPIHHnggl1xySYYMGZL9998/119/fenxmzJlSo4++uhceumlm7Rfda137ty5ueuuu3LxxRfnpptuyuabb5558+at97H94x//mLPPPju//OUvs+OOO+auu+7KZpttlu7du+f5558vLTdmzJj07t17o6davvz2zFRUVuWYdYzkbddyszRvUnskTqtmTXL4Hjvl4XFTSpc99PJ/59v77J4G9ctyyq0PZ8ett8i0Aefl1av75u5RE/PYhKk1j2VZWf749sw8dt6JGX/F2Vm2qiIPjJ20zu3q2LHjRm3/DjvsUJqeWF5enqeeeip77rnnOvd/Y19Dq5fdfffdSz+/8sor6dSpUyn+TZ06NdOnT681yi5JPvzww1qvv6TmdfXhhx/W+dxJagLgU089lX79+qV///558MEHS9et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dtxxx+Xuu+/OD37wg7Rq1SoHHHBA3njjjVRVVWXo0KH53ve+lyZNmtQ57XnhwoWpX79+rcesRYsWWbRoUennNUd6rfn62VizZ89O586dS9ux5vTuysrKbLfddlm8eHHKyspq3ddnDUIVFRW57bbbMm/evPy///f/1vkeuD7rOu4b8976xhtvZNCgQTnllFPSq1evWssefPDBOfDAA/P6669n8ODBueCCC7LTTjutdxtWH4uvfe1radSoURo1apTDDjss48aNq/WcWNO67r9Vq1a54IILct999+VXv/pVevTokZ133jmbbbbZJu3/6NGj8/LLL+f2229Pq1at8qc//SlXXXVVBg4cuNZ718b8XkySAw88MJdccklOOeWUvPDCCznkkEPWu01/TwIgAACF8uqfP8r0WXPzrZ67JamJci2a1ISfr+7+L/nZky9k+qy52XGrmsCyZaua/8Ff8wP8mvbp9MXUL6uX8e98kN+8PCW/OvOYJMk2bVpmtw5bZtwVZ691m/fnb/ron09/i2Nd0aQuBx54YIYNG5a5c+d+5tF/06dPz8qVKzNs2LBal//whz/M5MmT07Vr1ySp9SF68eLFqV+/fukDbl3XfRYdOnSoNd135cqVmT179jrPp9ehQ4e8//77pfg5c+bMbL755p/5/keNGlUKUK+++mqeeOKJXHPNNWnbtm3Ky8vX+ubl1R5++OF89NFHueKKK9KoUaOMHz8+v/rVr9ZabrPNNktFRUVWrlxZGokzf/780rdwtm3bNieeeOJGfePqmtq2bZtDDjlknaOkRo0aVWtq+KbsV13rnTNnTik4JTWxYvHixevdxiVLlpT+e3UIXX2c9t9//7z00ktp0qTJekf/DXnmjzmm+y5p36ZlVlZUpqq6Oi2aNM4u7duleZNGufelSTl9/5rHrc1mNetd9anpp6s1adggR3ffOY+On5q3Zs/Lyb1rnufbtKkJNa9d1z+bNf77nMR/0qRJad68eTp27JgmTZrksMMOy0MPPZR33313rW9VmMSbAAAKw0lEQVRTrsvVV19dinKrg+/w4cMzevToXHXVVbXed8aNG5eysrKMGjUqSc3ouYEDB+bYY49Nhw4d8swzz9Ra98yZM3PAAQfU+dxZuXJl3nrrrVrTdFetWlVrhOGCBQvy7rvvZs8996y1/iZNmuSss84q/Txy5MjssMMOmTlzZubMmZNbb60Jsqv3r0+fPrngggtqTbNu3bp1Kisrs3Tp0lIYWrRo0UZ9a+7G+PDDDzNt2rSceOKJadu2bZLkxhtvXCvKLVy4MFVVVVmyZEnpvf2jjz5KmzZtNingVVVVZeDAgWnatGkuueSSTfr24fUd9w29t66Ob//xH/9RK8LPmDEjc+bMSffu3VO/fv3suuuu6dy5cyZNmlRnAGzQoEG22GKLWu8LVVVV6x0pvL77T2pGm67+Y8Hqc80ec8wxm7T/r776arp37176A0/Xrl1Tv379vPPOO7WmDW/s78Uk2WqrrdKhQ4eMHj067777brp161aaEvx5MgUYAIBCmb+0PGfe+Xgmz5iVOYuW5smJr2e/nWpCUK9/2TbH9eiSI24YlhFT3s6S5SuzaNmK/Hrs5Pz4N8+k2/Zrf0lFvXr1ckLP3TPgqdGprKoqjfD7SpeOeefj+Xn+9XeTJAuWLsspv/hN3pkzf611/D116dIl5eXlefnll7Pvvvt+pnWMGDFirVEeSc0U45EjR5Z+njhxYmk02ahRo9Kly1+mQdZ13caaPn16XnutZkrmvvvum7Fjx+add95JZWVlHn744XTq1ClbbrllkuTll18uTW094IAD8uSTT2bRokVZtmxZHnnkkRxwwAFJauLDyJEja0Wq9Vm6dGmee+65DBs2LKecckoaN26cBQsWpFWrVmndunWqqqry5JNPpqysrDTKsEGDBqWRQAsWLMjWW2+dRo0aZenSpXn22WezcuXKtaZCb7HFFmnbtm3p3GOvv/56rQ+Le++9d55++unS1LbRo0fnkUce2eD29+zZMy+99FLpHFUzZszIwIED1zr/2upt3dj9qmu9nTt3znvvvZf33qs5b+Yf/vCHOrdxwoQJtZ4na57P7MADD8yECRPqnP774B//O5c/+myWr6rIr0a9kq1bt0jHdm3TrHHDXHfCV3PuPcNz5/OvZM6ipVmxqiKjp/05Jw59KHtut+5v4T1xnz3y1J+m5cmJr+ekXjVhoW3zpjlo5y/lxt/VHJ+Kyqpc8tAf8ttX36hz3zbVms/3N998M7feemvpMR43blyWL1+eDh06bNJzePUxbd26dSlqPPXUU7n00kvXimC33nprhg4dWvqnQ4cOOe+88/K1r30tu+66a1asWJFnn302VVVVmTBhQmbMmJEePXrU+dypqqrK9ddfn5EjR6a6ujpz5szJ73//++y9996l+3333XfXGegfffTRDB06NCtWrMjHH3+cxx9/PAcffHC233773HXXXaXtXH26hKFDh651jsXWrVtnxx13LE0vLS8vz3PPPbfOL9/YFCtXrsyUKVNy3XXXpVevXtlxxx3TvHnzdOnSJcOHD09SM/rv/vvvz4QJE9KqVavSdqye/nrxxRdv1DFc0+9+97usXLlyndO0P/7447z44ovrvF1dx72u99bly5dn8ODBOe+889aKb0uWLMnNN9+c6dOnJ6mJoW+88Ubp9AXTp08vnRvx077yla/kkUceyfLly7No0aKMHDmyFIDfe++90vtfXfdfXl6ec845J2+99Vbpede0adPScmuup67933bbbTNp0qTSe91bb72VpUuXrvXHpY39vbjaQQcdlPvvvz/77LPPJoXav6V/jK0AAIC/koO7dMzF39g/h133q6ysqMzxe++WMw76y7f03Xv2v+XG372Uc+8ZnrfnzE/TRg3Tbfv2+fmJX8+/7b3uk6mf2GuP7H7Jzbn06L+MqGvdrEme+I+Tc/59v8u8JeUpq1cvp+3fLTu0a/uZRgD+taw+/9A777yz3lEuU6dOzQknnFDrsmuvvTbbb799ysvLM2bMmFx99dVr3W6fffbJr3/96yxcWLN/e+21V4YMGZKPPvoorVq1Sv/+/UvL1nXdmi677LK8+eabpWl3zz//fHbddddccsklGT16dJYuXZouXbpk2223zemnn56BAwdm8eLF2WGHHWqt88EHH8wRRxyR9u3b55BDDimdYL66ujrdunXLsccemyRZtmxZbrvttnTp0mW9UylPPPHEJDXTAVd/0+Xqb3rs2bNnXnzxxdI3Sx5//PHZa6+98rOf/SwDBgxIz549M2zYsLz55ps58sgjM3jw4Jx//vlp27ZtTjrppPz85z/P1VdfnZ/85Cel+ysrK8vZZ5+du+66K0888UR23nnn9OjRoxRM//Vf/zX3339/zj///CQ1wfB73/veOrd9TbvsskuOPfbYXHnllamsrEzjxo3zrW99q/TlImvalP0655xz1rverbbaKqeeemquueaaNGjQIPvuu2/at2+/zmmVVVVV6dWrV4YMGZJZs2alZcuW6devX+n6Dh06pH379qX1rsudZ3wz3/3lY9n8rKuzQ7s2+XXfb5W+zOf7X+mRrVq1yICnRufce2uizL9suXlO7LVH+h22zzrXd8iuHfOd22q+8GP7L7QpXT7srOPS5+7fptMFN6a6ujr77rRdDtp5h3WuY31WrVqV73znO0lqRkYOGTIkt9xyS44//vgcffTRtZ7vRx99dJYsWZJLLrkky5cvzxZbbJFzzz03rVq1yqJFi2o9h+t6DX3aiBEjMn/+/Jx55pm1Lr/iiivq/PKGBg0a5MILL8ydd96ZYcOG5Qtf+EIuuOCCNG/efIPPnR/+8Ie5++67c88996R58+Y56KCDak2JnDt3bmn03JoOO+yw3HzzzTnzzDPTuHHjHHHEEesMMBvSv3//3HHHHTnvvPOS1LyPfdbR0VdddVXpddmuXbscfPDBOfLII0vX9+3bN3fccUf69euX6urqdO7cuRS1zz333AwZMiRPP/10WrRokT59+qxzv+s6ns8880xmzZpVa/Rto0aNcvfdd+fdd9/NsGHD1vmHnw0d9/W9t77yyiuZO3dufvrTn9a63QknnJCjjjoqp556am655ZYsXLgwzZo1y9e+9rXSe+WYMWOycOHCdX5JyTe/+c0sXLgwffr0ScOGDdO7d+/S+RFHjBhR+vbeDd3/t771rdxwww0pLy/PDjvskIsuuqg0knDN9dS1/0cccUTmz5+fCy+8MPXq1Uvjxo1z7rnn1jo2m/J7cc3L77rrrs/8XPtbqLdy5crPfiZe4HM1c+bMWieIBgD4exk8eHC22WabUljb2OtYvzWnwd1www3p0qVLvv71r3/OW/X5uuGGG7Lnnnvm4IMP/rw3Bf7hDRgwIBdeeOHnvRlJas6N+PTTT5eiN58/U4ABAAA+Z1dccUUeffTRJDXn0ZsyZUqd59H6ZzB58uS88847m/Ttv/DPav78+TnssMM+780o+eSTT0qj+vjHYAowAADA5+z000/PrbfempEjR6ZBgwY54YQT/qlnelxxxRWZM2dO+vXrV/piFGD92rZtu84pxZ+Xf/Y/YPwjMgUY/g8zBRgAAADYEFOAAQAAAKDABEAAAAAAKDABEAAAAAAKzDkA4f+whg0bft6bAAAAAPyDMwIQAAAAAApMAAQAAACAAhMAAQAAAKDA/j89h62MWLJtcgAAAABJRU5ErkJggg==", - argumentInfo: { - argumentName: "base64image", - formattedValue: "base64 data: iVBORw0KGg..." - } - } - ], - status: "PASSED", - durationInNanos: 2404217, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 5117437, - depth: 0, - parentFailed: false - }, - { - name: "showing thumbnails is set to", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "showing thumbnails is set to" - }, - { - value: "true", - argumentInfo: { - argumentName: "showThumbnails", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 384902, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 365693817, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 326922341, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment22.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "jgiven-html-thumbnail", - argumentInfo: { - argumentName: "multiline", - formattedValue: "jgiven-html-thumbnail" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 19955443, - depth: 0, - parentFailed: false - }, - { - name: "the image is loaded", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the image is loaded" - } - ], - status: "PASSED", - durationInNanos: 17135023, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["true"], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 1060658493 - }, - { - caseNr: 2, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 190102, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has an image attachment $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has an image attachment" - }, - { - value: "iVBORw0KGgoAAAANSUhEUgAABQAAAAMACAYAAAB7NMrNAAAAAXNSR0IArs4c6QAAIABJREFUeJzs3Xl4zWf+//HnWRJJyEKCEBo7ldjFrpZSQ1GDGu1oOyilpq2aaTta3bVoy9iqM6VKS1FMaYtqlZLYCbFVCRJrQvZ9O+f8/sgv5+s0CbHlaLwe13WuOp/P/bnv9+dkua6+ct+f28Bb2BAREREREREREZEyyejsAkREREREREREROTOUQAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhCgBFRERERERERETKMAWAIiIiIiIiIiIiZZgCQBERERERERERkTJMAaCIiIiIiIiIiEgZZnZ2ASIiIiIiIiJS9nmYPWjk1Yh2/u1o5deKGu41wAi+Jl9nlyZSquLy4jDYDJzPPM++K/vYHbubX5N/JdOSecfGNPAWtjvWu4iIiIiIiIjc8wYFDuJvjf6Gv4c/FctXxMXFBVdXV1xcXJxdmohT5ObmkpOTQ25uLonpicRmxPLZ8c/4JvqbOzKeAkARERERERERuSPMRjNfdf2Khn4NqelfE6PRiMlkwmQyYTAYMBgMAPb/ipR1NpvN/l+bzYbFYsFisWC1WjkXc45f437l8S2PY7VZb+u4CgBFRERERERE5LZrV7kdc9rOoZp/Nby8vDCbzZjNZoxGo4I/ueddHQRarVby8vLIzc0lNTWVSzGXGLd7HHuu7Llt4ykAFBEREREREZHbakCdAbzZ8k1q16iNi4sLLi4uhWb9iUi+q2cD5ubmkpuby+lzp3nnwDusOb3mtoyhAFBEREREREREbptypnKE9Q6jQf0G9mf9XT3r72o2m434+HgsFgu+vr6YzdqrVO5dBbMBC54NeOLkCdp83wbbbYju9JMlIiIiIiIiIrfNigdXEFA9wB7+mUymQm2SkpJYtGgR69atIzExEYDy5cvz4IMPMnr0aPz9/Uu7bBGnMxgMmEwmXF1dAQioHsDKHisZvGnwLfdtvOUebtB/+v4H25s2+6vTfZ0cznuV8+L1B15n/+j9pExMIff1XC7+4yJLBi4hpHqIQ9saXjWwvWnjb83/Vpq3cE2Rz0c63J/tTRuWNyxEjY9izdA1tAlo4+wSRURERERERO6Ix+o+RiO/Rnh5eeHi4oLRWDh2OHXqFH/9619ZsmSJPfwDSE9P59tvv2Xo0KGEh4eXZtl3xNSpU/nxxx9L1DYjI4NnnnmGCxcu3OGqnOfgwYNMmDDB2WX8IRiNRlxcXPDy8qKRXyMGBg689T5vQ103ZPbu2fRe2pupYVMLnavtU5sDzxzg5Y4vszV6KyPXjmToqqHM2T2HtgFt2TFyB39t8ld7+8TMRMauG8vOcztL8xauK/xSON0Wd7O/ei3pxZTQKTSu3JjNT22mfqX6zi6xkD83+jP7Ru9zdhkiIiIiIiLyB+Vh9uDxuo8TUC3APvPv98t+MzIyGD9+PLGxsfj5+fHuu++yZcsWwsLCmDVrFnXr1iUtLY1//OMfxMbGOulOSl+5cuWYMGECfn5+zi7ljqlXrx7PPvuss8v4Q7h6JmBgQCAjGo2gnLHcLfVZ6kuAj105xrErx/Bx8yl0bsWjK/Bx8yFkfgjH4447nJu9ezYbn9jIO93e4X+//o/MvEzSc9P5z77/lFbpJZaYlcgvUb84HNvEJr4/8T1nxp/h1c6vMnztcCdVV7S2Ndo6uwQRERERERH5A2vk1Qj/8v6YTKYiwz+A5cuXc+nSJXx8fPj888+pVq2a/VzHjh1p3rw5I0aM4NSpU8yfP59JkyaV5i04jclkomHDhs4u446qUKEC9erVc3YZfxgFIaDJZKKqR1UaeTciIjHipvu7a54B2K1WN0Kqh/DixhcLhX8A6bnp9PqyFxm5GfaHH9bwqsG5F88xfO1wziaf5ecnf2bQ14P436//c7g2YkwECZkJdFvcDQMG/t7m74xoMYL6vvXJzM1k/cn1vPzTy8Sm5/914bHgx/hq0Fe0/G9LJnefTJuANhgNRn46/RPPrnuWhMyEm7rHC6kXiE6KpnbF2vZjJaln8YDFtKreikmbJzG5+2Rq+dQiOSuZT/Z9wuRtk+19+bj5MLXHVPo37E9lj8pcybjCuhPrmPjzROIy4gCY328+IQEhTAubxqzes1h7fC31fevTJbALALY3bbz000t8tOOjm7pHERERERERuTd1rt4ZX8/8jTyK2+l306ZNAIwYMcIh/CtQvnx5nn/+eV544QU2bdrExIkTi3yG4LX88ssv/PjjjyQnJ+Pt7U3Pnj3p1q0bAHFxcSxfvpzTp09jtVpp2bIlQ4cOtT9zbdeuXWzYsIH4+Hg8PT3p2bMn3bt3B+Drr78mIyODjIwMTp8+zUcffUR2djYrVqzgwIEDGI1GWrVqxZAhQ+ybmeTl5TF//nwOHTpEuXLleOyxx2jVqlWhmjMyMnjxxRd544038PX15YUXXmDMmDFs2rSJ5ORk3NzcGDFiBNWrVy90rcViYfny5Rw4cICsrCyqVavG4MGD7YHi4cOH+eabb7h8+XKhc7/++itr167l4sWLuLm50bNnT3r27AnAypUrSU9Pp3z58hw/fpzU1FTat2/Pn//8ZwBSUlJYtmwZJ06cIDc3l7p16zJs2DB8fX3JzMxk/PjxPPXUU6xevZp+/frh4+PDF198wYwZMwA4ceIEq1ev5tKlS3h5edGiRQv+/Oc/YzQaSUhIYMmSJZw+fRqbzWbvu1KlSjf0vfBHZzAYMJvNVKpQiQeqP3BLAWCpLwEuTtdaXQH4IfKHYtuk56YXu/PJL1G/cD7lPH8J+ovD8fv97qdp1aYsjlgMwKudX2V279msOraK4HnBDPp6EK2qt+KnJ3/CxegCQK41F4BP+33K5G2TqfJhFbot7kb/hv15/YHXb/oevcp5EeAVwJnEM/ZjJa2nlk8tRrcazYOLH6Ti1Iq89ctbvNvtXfuSaAMG1v91Pf0a9GPM92OoN7seY78fS98GfVn3+DoM5P/yzbHkUMm9EmNDxvLE/55gStgUHln2CD+e+pGI2Agqf1iZj/d8fNP3KCIiIiIiIvemFn4tcHNzK3bHX4CzZ88C0LJly2L7KQjI0tLSiI+Pv6EaLl68yMqVKxkzZgxz5sxh1KhRrF27lgsXLmCz2Zg7dy5+fn5MnTqVyZMnk5SUxFdffQVATEwMn3/+OYMGDWLmzJkMHz6cVatWERUVBYDZbObIkSM0atSIN998E8gPyWJiYpg0aRITJ04kMjKS7777zl5PWFgYHTp04MMPP6RTp0589dVX2GzX3tG1IPAMDQ3lhRdeYPLkyVSrVo21a9cW2T40NJRTp07x+uuvM2vWLB544AEWLFiAxWIhLi6O//73v/Tq1YsPP/yQjh078vHHH5OWlkZcXBzz5s2jW7duzJw5kxdffJHNmzezc+dOex379++nYcOGvP7667z44ots3LiR8+fPA7BixQrS09N5++23mTZtGuXKlWPZsmX2zwpg7969vPTSS7Rv396h5qSkJGbNmkWnTp2YMWMGY8aMYefOnfz8888ArFq1Ci8vL6ZNm8bUqVPx8fHh66+/LuF3QdlhMBgwGo24ubnRyq9wcHwj7poAMMArABs2opKiHI67md3wcfNxeJUzFV73bLVZWXp4KQ83eBgPFw/78cebPE5Gbgarjq3CzezGvzr9i6+Pfs17oe8RlRTFtuhtjFg7giZVmjCo8SCHPueHz2fn+Z3YsHEo9hCh0aElWiprwIDZaLa/ypnKEVQ5iBWDV+BidOHjvR/b762k9ZR3Kc+EjROITY8l15rL/PD5HLl8hOEt8pcSd6nVhfY12jP+h/F8+9u3RCdHs/a3tbyy6RXaBLSx123DRk2vmrz808tsPLWR04mnSc5OJteaS541j7iMODLzMkv4VRMRERERERHJV61cNdzc3IoN/wD7piB5eXnFtsnNzbX/22q13lANmZmZGAwGKlSogNFopHbt2syYMYOAgAAiIyO5fPkyAwcOxNXVlQoVKtCvXz/27NlDXl4eVapU4YMPPqBp06aYzWYaNGhAlSpViI6Otvfv5uZG9+7d8fT0xGKxsGfPHnr37o2vry9+fn4MHz7cYSlvUFAQQUFBuLm50b59e9LS0khJSSnRvTzwwAP2mYkNGzYkJiam2Hs2mUy4u7tjMpno3Lkz06ZNw2QysXfvXqpXr07btm1xd3ena9euPP7441gsFnbv3k3NmjVp27YtRqORatWq0aVLF7Zv327vu0qVKjRt2hSAatWq4e3tba9j2LBhjB07lgoVKuDu7k5ISIg9LC3Qrl07/P39KVfOMcfZtWsX/v7+dO7cGbPZTI0aNejYsaN985eMjAzKlStHuXLlcHd3Z9iwYYwZM6ZEn1tZYzAYcHd3p5pb4RmzN+KuWQJsteX/UOdYchyO/6vTv3izy5sOx4pbovplxJe80vEVHq7/MCuPrQRgaPBQVv+6mrScNEKqh1DBtQLrTq5zuG7PhT0kZyfTunprlh9Zbj9+4NIBh3aJWYnc533fde+le+3u5L6eW+h4RGwE/Zb1Y9/F/M02mlRpUuJ60nLSCi2NPhR7iC618pfuFuyQHHY2zKFNwQYpLau1ZNf5XQDkWfPYc2HPde9DREREREREpKRsBhvu7u7XbFOvXj0OHTpEWFgYwcHBRbYJC8v//9oKFSpQpUqVG6qhdu3atGjRgkmTJtGgQQOaNGlC+/bt8fDw4MqVK1gsFp577rlC1yUlJeHn58fu3bvZvn07aWlpGAwG0tPTHcLKypUr2/+dkpJCdna2w7GaNWs69Hv1uYIw71rh59V8fP5v7wQXFxdycnKKbNexY0f27dvHK6+8QuPGjWnWrJl9FuWVK1ccaoD8UK7g3KlTp3jmmWcczl+9zPbqGn5fR1JSEv/73/+Ijo7GarUWeV+/H7tAXFxcoSXg/v7+9tmHffv25ZNPPuHw4cMEBQUREhJCgwYNiuzrXuDu7o7NcO2Zo9dz1wSA0UnRGDBQr1I9TsSfsB9fdHCRw4YaW57aUmwfR68c5UDMAYYEDWHlsZWEVA+hXqV6jPk+PyX2dvMGYEH/BXza71OHa11NrgR4BjgcK2om3LX+klFgz4U9jFs/zv6+b4O+vNHlDZ5b/xyhZ0Ptx2+kntSc1ELjpOWkUdGtokNfydnJDm1SsvP/suDp6mk/lpydbA9cRURERERERG4Hg81AdnZ2odleV+vTpw+HDh1iyZIldOrUqVAIeOnSJWbNmgVAz5497TMGS8poNDJy5Ej7OAXP9Js4cSKurq54eHjw73//u8hrQ0ND2bBhA8899xx16tQB4N1333Voc/XzCAvygest6b1ZJckfALy8vJg0aRKRkZEcOnSI1atXs2XLFl566SUMBkOx9bm4uNC8eXPGjh17wzVYLBZmz55NcHAwI0eOxM3NjYMHD7Jo0SKHdjf6/MaCELFevXpMmTKFo0ePcujQIebOnUuXLl0YNGjQdXooewwGA1lZWRhsJft+KE6pBIDVPatTt2Jdh/DL1ZSffGfkZgDw0+mfmNx9MmNbj+XFjS/a20UlRRVaFnwtX0Z8yeTukynvUp7HmjzGuZRzbInKDw0TMxMBmLhpYqFZd5AfqN0OqTmp9ll+kD+T8OH6D7PwkYU0+08z+z3fSD1e5bwKnfdx8yE+M/95CElZSQB4l/O293/1dQXnRURERERERO6E85nnaZbVDC+vwv//WmDAgAGsWbOG48ePM2bMGIYNG0anTp0wm82Eh4ezcOFCkpLy//+1YKbajbBYLGRmZlKtWjWqVavGQw89xOTJkzlw4AD169cnIyODhIQE+yy37OxscnJy8PT05NSpUzRu3Nge/mVkZHD58uVix/L29sbV1ZVLly7ZZ7NFRUVx/vx5OnXqdMO136zs7GwA6tevT/369enVqxf//Oc/OX/+PJUrV2b37t0O7X/66SeaNWtGlSpV+PXXXx3OpaSk4O7ujouLyzXHTEpKIiEhgQcffBA3NzcAzpw5c81rrlZUXTExMfYZnykpKXh6etKiRQtatGhB06ZNWbRo0T0ZANpsNrKysjifef6W+imVZwBOaD+BLX/b4jCjrVnVZtiwcTL+JJA/a+6n0z8xNmQs7WoU/UPesWbH64617MgyypnL0ateL4YEDeHLiC/ts92OXD5Cak4qNb1rcjzuuMPLgIELKRduw90WZrFZGPXdKGr51OL9B9+3H7+Resq7lKdtgOPzB9sEtOHYlWMA7D6f/4PT6T7HXzId78v/zEqy5LdgoxARERERERGRG7U/bj+ZmZnXnBFnNpuZOXMm999/P1lZWSxYsIC//e1vDBs2jBkzZtjDP4C33nrL/ky4kgoLC+PDDz8kJiYGm83GpUuXSE5Oxs/Pj8DAQAIDA1mxYgVpaWlkZmaybNky5s+fD4Cvry8XLlwgMzOTpKQklixZQsWKFR1quprBYKB9+/asW7eOmJgYrly5wtKlS68ZGt4JX3zxBYsXLyY1NRWr1crJkycxGo1UrFiRtm3bEhsby+bNm0lLS2Pbtm189913uLu7065dO5KTk9mwYQM5OTnEx8cze/ZsNm7ceN0xPT09MZvNREZGYrFYOHDgACdPniQ7O5vMzOvvK1BQV1hYGBaLhejoaMLCwmjfvj1Wq5X33nuPH3/8kZycHHJycjh9+jR+fn634+P6Q8rKymLflX3Xb3gNpTIDcP7++YxtPZa1j61lSugUavnUYmzIWBYdXOSwtPXJb57kxyd+ZOvftvL5wc/ZfGYzaTlpBHgG8HCDh+nfsD9hZ8P4MuLLYseKSYvhp1M/8Vrn1wjwDOCLiC/s57It2UwLm8brXV4nKimK9SfX42pyZXSr0YxpPYb2C9qz/9L+O/IZHIw5yMxdM/lHh3+w+thqQs+G3lA9ydnJzOg1g3/++E+uZFxhTOsx1PKpxSubXgEg9GwooWdDmdFrBmk5aRy5fISQgBCm9pjKD5E/cCDmwLXKIyEzgY41O9I2oC2x6bE3NOtSREREREREZFfMLhJSE6hpq3nNdn5+fnz++ed8++23rF+/3h4c1axZk27dutGvXz9eeeUVTpw4wfPPP8/MmTNp3bp1iWro3LkzcXFxTJ8+nfT0dHx8fOjRowfNmzcHYPTo0SxbtoyJEyfi4uJCo0aNGDlyJADdunUjMjKSl19+GR8fH4YMGUJycjIrVqzA09OzyPEeffRRli1bxvvvv4+LiwstW7akX79+N/Cp3bqhQ4eyZMkSXn/9dfLy8vD392fMmDH2mp9//nmWLVvG6tWrqVatGuPGjbOfGzduHKtWreL777+nQoUKtGnTht69e193TFdXV/7617/yzTffsGrVKpo0acKzzz7LjBkzmDRpEpMnT77m9T4+PjzzzDN89913fP3113h7e/Pwww/zwAMPYDAYGDNmDCtWrOD777/HZDJRu3Ztnn766Vv/sP6AbDYbCakJ7IjZcUv9GHiLO7NY/XceCHyA9x98n+b+zUnITGD1sdW8+vOrhZ6z5252Z2zIWIYEDaGRXyPcze5cybjC3gt7WXp4KauPrcb2/0uu4VWDcy+eY/ja4Sw6+H/rzB9v8jhLBy5l1/ldtP/McatpgGdDnmVcyDjqVapHak4qETERTN422b5UeHDjwax8dCVNPmnCkctH7NctH7yc5v7NaTS3UbH3Gfl8JFFJUfT4okehcx4uHhx59ggWq8VhKfD16lnQfwE96/Rk5Lcj+aDnBwRVDiIuI465e+YyJWyKvX/vct5M6zmNRxo+gp+HHzFpMaw6topJmyeRnpsOwNw+cxkaPBS/DxyT87YBbVk5ZCVVy1flox0f8drm14q9RxEREREREZHfcze5s7z7cnqH9MZsNpf4GXZFSUpKYsyYMURGRuLm5sbChQvv6U0g5N5ks9nIy8vjh30/MHjTYHKsRW8EUxKlFgDKzVvQfwF/qvcnasyo4exSRERERERERIo14L4BTO4wmfvr33/DG3j83tUh4AcffED37t1vU5UifwxWq5VfT/7KxO0T+e7cd7fU112zC7CIiIiIiIiI/LGtObuGpxo+hb+fP5UqVbqlWYA+Pj4sXLiQM2fOEBQUdBurFLn72Ww2EhISOBF/4pbDPyilTUBERERERERE5N4w5OchnIk6g9VqveaGICXh4eGh8E/uOTabDYvFQlR0FEN+HnJb+tQSYBERERERERG5rTpV7cScznNo0qgJRqPxlmYCitxLCsK/Q8cPMXbbWPZc2XNb+jXRlbduS08iIiIiIiIiIsDZ9LMcSzhGM2Mz3N3ccXNzUwgoch02m43ExER+Pf4rz+549raFf6AZgCIiIiIiIiJyB23ss5H6fvUJDAzEYDAoCBT5HZvNhs1m49SZU5xOOM2f1v/pto+hAFBERERERERE7qi/1PkLT9Z/kqrlq+Ln5YeHh4f9JXIvysjIsL/iUuKITY9l4W8LWR21+o6MpwBQRERERERERO64csZyNPJuRAf/DrSq3Iqa7jWxGWz4mf2cXZpIqYq3xIMVzmWeY9/lfeyM3cmvyb+SY825Y2MqABQRERERERERESnDjM4uQERERERERERERO4cBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhBpvNZktOTiY5OZnc3Fxn1yMiIiIiIiIiIiK3yMXFBW9vb7y9vTEnJyeTlpaW/8ZsdnZtIiIiIiIiIiIicovy8vJIS0sDwJiUlESFChUU/omIiIiIiIiIiJQRZrOZChUqkJycjDEvL0/hn4iIiIiIiIiISBljNpvJzc3VJiAiIiIiIiIiIiJlmQJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIqIiIiIiIiIiJRhZmcXcCPOnz/P0aNHAcjNzaVixYq0adMGFxcXAGJiYggPDycnJweDwYC/vz8tWrTA1dWV7777jry8PEwmk70/d3d3evbsSXR0NDt27KBPnz54e3sDkJaWRmhoKL1797a337t3L1FRUQwcONDeT2ZmJt988w2enp72dmazmZYtW1K1alUAvvrqKx599FFcXFzIycnh4MGDXLhwAYPBgIuLC0FBQdSqVevOfni/ExcXx44dO+z3YDKZcHV1xWAw0K9fv2t+XgBHjx7l7NmzGI1GcnNzCQwMpEmTJmzfvp34+HisVisZGRlUqFABgPvvv5/69euX6j0uXbqUX375BbPZTEZGBt27d+epp54C8r++n376KTt27MBkMuHh4cFf//pXevToAcDPP//MO++8w4IFCxzq/vzzz1m0aBE///wzW7du5YMPPsDX19dh3FGjRpGQkMDq1asBuHTpEpUrV8ZsNtO0aVNGjRrF8OHD+fbbbx2u69atG+vWrSMyMpI5c+Ywf/584uPjGThwIC+99BJ9+/a1tx0yZAiLFi3Cw8OD8+fPM3fuXCIjI3Fzc8Pb25unn36aFi1aXPPz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RERERERERERulYuLC15eXnh7e2PIycmxObsgEbk5586do06dOs4uQ0RERERERETuYtoEREREREREREREpAxTACgiIiIiIiIiIlKGKQAUEREREREREREpwxQAioiIiIiIiIiIlGEKAEVERERERERERMowBYAiIiIiIiIiIiJlmAJAERERERERERGRMkwBoIiIiIiIiIiISBmmAFBERERERERERKQMUwAoIiIiIiIiIiJShikAFBERERERERERKcMUAIrcBWw2G/v37+fChQsAxMbGsmvXLidXJSIiIiIiIiJlgQJAESez2Wzs27ePK1eu4OXlxeXLl9m9ezeVKlVydmkiIiIiIiIiUgYoABRxooLwLz4+no4dO5KZmcmuXbto1KgRDRo0cHZ5IiIiIiIiIlIGKAAUcRKFfyIiIiIiIiJSGhQAijjJqVOnuHDhAq1bt8bNzY09e/bg7++v8E9EREREREREbisFgCJOUrt2bapUqcLBgwfJy8ujRYsWXLp0iejoaGeXJiIiIiIiIiJliAJAEScxmUy0bdsWDw8Ptm/fTqVKlWjdujUHDx5UCCgiIiIiIiIit40CQBEnUggoIiIiIiIiInea2dkFiNzrCkLAPXv2cPnyZQIDAwGIjIy0/1tERERERETkXmaz2UhISCAvL6/I80ajkUqVKmEyme5oHwWysrJITk4udNxgMODr61uiPn777TfOnDmDzWa7Zjt3d3c6duyIi4vLdfssjgJAkbuAyWSiffv29vcBAQEEBAQ4sSIRERERERGRu8P58+dZsGABSUlJ12zn7u7OsGHDCAoKuiN9XO29994jNTW12D4effRRWrZsec0+FixYQG5u7jXbXN1n27ZtS9S2KAoARURERERERETkrrV8+XJatGhB3759i51ZZ7Va2bFjB0uWLGHy5MmF2t2OPq6WmprKpEmT8PPzczgeGRnJ3Llz+eKLL8jKyqJDhw7F9lHS8A8gJyenxG2LomcAioiIiIiIiIjIXevChQu0b9/+moGc0WikQ4cOZGZmkpCQUKI+1qxZw5o1a0rcR0lUrFgRd3d3AFavXk1WVtZN9XO7aQagiNyy5cuXs2vXruu2e/LJJ687BVpERERERERuTutVralgroC72R03sxvuJnc8zB5U9ahKPe961PWuS12vugSU/2M9cspms2E0Xn8OW0Ebq9Vaoj6K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1u+P/HLVLZGhCM77+Xh4HPd1fa7P53Nd9x2n9zufcf78eZKTk9mzZw8XLlzAz8+PK1euMHToUI4dO0ZycjK3b9/m8uXLOQpknyX58uXLNkht3bo1U6dOZerUqXTt2jXLshYWFsY6lCIiIiIiIvL88i/uT7dy3fK6G/9zyruWz/PNWF50z/S8xfbt2xMfH89XX31FUlISJUqU4OOPP8be3j7L6bwAFSpUoGvXrvz888/ExcVRt25dfH19c7Shw4NatGjBlStXGDNmDC4uLnTp0oVz585lGiLZ2NgwfPhw1qxZw6xZs4iKisLa2poSJUrQt29fY3292rVrExUVxU8//UR8fDzly5enf//+AFSvXp0333yT+fPnExMTg4eHB926daNChQrZ9rVixYo0atSIcePGkS9fPvz9/enduzcTJkxg8uTJNG3aNMvrfXx8uHbtGjNmzCAmJoYiRYrw8ccfG1O1e/TowcKFC4mIiMDBwYHq1avTvv3ztTinhYUFjo6O3Llz57HU5+TkpPUJREREREREXhDvV32fo5FHORJ5JK+78j+hoF1BJtebjJWFZtY9SRYmkyn3idj/oISEBGOUV3JyMn379uWTTz6hbNmyedwzeVSxsbHGximPytbW1mxzlqctPDycMmXK5Fn7IiIiIiIiL6LI+Eje/u1tIuMj87orLzRHa0fm+8+nlHOpvO7KC++ZngL8rPjtt9/45JNPuHz5MgkJCaxevRpHR0dKliyZ112Tv8HR0fFvjdxLH0koIiIiIiIiL5YCdgWY6DcRa8tneuLkc83G0obv63+v8O8p0QjAHEhOTmbp0qXs2bOHhIQEihcvzttvv423t3ded00eg/j4eOLi4nI8PdzCwgIHB4eHrgP5NGkEoIiIiIiIyJMTeC2QIYFDMKX8vdljYs7SwpJv6n5DQ8+Ged2V/xkKAEWA1NRUkpKSSEpKwmQykZSUZHbe2toaW1tbrKyssLGxeWbW/FMAKCIiIiIi8mQdjjzMB7s+4E7i41lHXmBkzZG082qX1934n6IAUOQ5pgBQRERERETkybsYe5H+O/pz/d71vO7Kc83awprxfuNpVLRRXnflf47WABQRERERERERyUIp51LM959PaefSed2V55adlR3/bvhvhX95RAGgiIiIiIiIiEg2CtgVYG7TuVQrUC2vu/LcccvnxqzGs6hZsGZe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GTx4MPv372fLli3861//4qWXXsLS0jLb82+//TZxcXEMGzaMEydOEBoayg8//EDz5s05fPgwAHPmzGHQoEHs3buX8PBwgoKCWLdunRG6ZXc+M1WqVGHLli1ERUVhMpmYPn16hhF89zty5AgdOnR4aFjm6elJw4YNzY6lr032YIBjaWlJhw4djBFzD3JxceHll19mw4YNHDlyhPPnz7N06VIAatWq9dA+5kTx4sWJi4vj0KFD3Llzh3379nH58mUcHR25du1atqMgy5QpQ5EiRVi5ciUXL14kOjqaY8eO8eOPPxobu5QrVw5bW1vWr1/PlStXCAsLY926dWYjOpOTk+nQoQOLFi16aFuOjo60adPGeO3s7MzNmze5d+8eJpOJ0NBQ5syZw7Zt2wBo06bNQ9eBa9iwIfv372fXrl1cvHiRLVu2cObMmQzv2aPIly8fNWvWZNu2bRw/fpzo6GhCQ0OZP38+q1atynE9OXluueXm5oanpyc7d+7k0qVLREREsHLlygyjzBYtWkSHDh0yXasy3bFjx4x/b1JSUggNDTVeP8roWVdXVzp37sz06dPZsmULV65cYeXKlSxYsIBevXphbW1Nvnz5yJcvH8HBwZw4cQILCwsqVarEihUrCAsL488//6R37940btyY6Ohozp8/n+mGOw/y8fHh3LlzZj/zr7/+OiVKlKB///5s3bqVjRs3MnjwYPz8/P7Wz92OHTvo27cvGzduJCwsjBMnTjBv3jyKFStmtjzC/v37//bPt4iIiIg8Ov0aVkQeqwYlG/D7hd9zdU3DUpmHFImJiXTr1s3s2KefpgWJRYsWZefOnZle98knn1C2bFmWLl3K8OHDiY6OxtnZmapVqzJ37lxjN11bW1u++eYbxo4dy8svv4ynpydDhgzh6tWrxrTWokWLMnfuXL7++mu6d++Om5sbrVu3ZsiQITk6X6xYMX7++WcmTJhA586dsba2ply5cvz000/G7qlTp05l3LhxDBgwgNjYWAoWLEiTJk0YOnRojs5n5p///CeffPIJDRo0IH/+/Lz11lt07NiRHTt2ZFo+NjaWw4cPZzkaq0mTJgDs3LmT1NRUwsLCmDhxolkZe3t72rdvn+nmBvdr1aoVW7ZsYdOmTZhMJooXL05AQMDfXrutXLly1K1bly1btrBx40bKli1L+/bt2bNnD7t378bS0hIfH5+HXm9hYUH37t3ZvHkzS5YsITExEVdXVxo1akSdOnWMe+zSpQsbNmxg1qxZuLq60qxZM/bs2WOsi5aamsrhw4eNz9rDpO9KvHbtWi5evMiCBQsylLG1taVNmzZZ7mBcvXp1TCYTgYGBbNu2jQIFCtC5c+dMR5k9iubNm2NnZ8eWLVuIjY3FycmJ8uXL4+/vn+M6cvLcHkXHjh1Zu3Ytc+fOxdnZmYYNG3LlyhWzUYFXr17l8OHDWa4vOXr0aCOUB1i4cCELFy4E4I8//jB2N86NMWPG4OjoyOjRo4mMjMTT05OBAwcav4SAtA2LZsyYwdatW9m2bRvjx49n+PDhNG/enOLFi/Pxxx9TvXp19u/fT7t27Vi/fn227darVw9ra2u2b99ubEhka2vLvHnz+Oyzz3j//fextrbG39+f0aNH5/q+7te/f39MJhNfffUVN27cwNnZmRo1ajB79mzjecfGxrJ//36++OKLv9WWiIiIiDw6C5PJ9Oj/1S0ieSo8PNxst8ZnwYXoC3RZ3oW9l/fmqHyDkg34pdMvFHV++EYa8nT079+fDz74INN15u535coVgoODOXfuHHfv3sXS0hJXV1eqVKlCrVq1tMbX/zd//nxSU1MJCAjItmxcXBzBwcGcOnXKGLXl5uZG+fLl8fX1zdUOsP9rEhMTSU5ONlvHcP78+djb29O5c2fjmL+/P7//nrtfTjzPRo8eTUhICOvWrcsy+Hwapk6dyi+//MK2bdtyvVmOiIiIiDweGgEoIo+Vl6sXwb2DuZ1wm7jEuCzLOto64myb+U6x8nRFRkbmeA2+okWLGqOKkpKSsLKyyvOA4Vm0Zs2aDCMkH8bBwYEmTZoYoywl5xYtWsTdu3dp3bo1Tk5OnD59mgsXLvD2228bZbZt20a1atXysJdP38CBA2nZsiWrVq2iQ4cOedaPq1evMmvWLD7//HOFfyIiIiJ5SCMARZ5jz+IIQBGRp+nu3bts3LiR8+fPk5iYiLu7O35+flSvXj2vu5bndu3axYABA1i1alWe/H9FUlISb7/9NuXLl2fs2LFPvX0RERER+UueBYCpqals27aN7du3G+v0FCpUiIYNG/Laa68ZOw7+4x//IF++fMyePTvbOocPH054eDhubm5MmTIlwwL0wcHBbNq0icuXLxMXF4erqyt16tShU6dO5MuXD0jbDXTFihUcOnSI6OhorK2t8fLyom3btlStWhWAESNGEBYWlmkfypUrx5gxY3LcnsjfoQBQRERERERERLKTZ1OAZ82axbZt27C0tKREiRI4OTlx7tw5Fi5cSGhoKP369ctVfZcuXSI8PBw7OzuioqI4efKk2YLpISEhTJkyBUdHR2rVqoWtrS2HDh1i/fr1xMTE0L9/f1JTUxk/fjyhoaFUqFABHx8fbt26xd69ezlz5gxffvml2SLgVatWzbB7YfqOdzlpT0RERERERERE5EnLkwDw3LlzbNu2DRsbG0aMGGEsOH/79m3GjRvH3r17adeuHS4uLjmuc/fu3QC88cYbLFu2jMDAQLMA8ODBgwB07drVWGOpffv2/PTTT7i6ugIQFRVFaGgo7u7ujBw50ljTav369Vy4cIHY2FizNt98882Hjr7KSXsiIiIiIiIiIiJPWp4EgAcOHACgQYMGZrtNuri48Omnn+Lo6IiNjQ13797NcZ1BQUHY2dnRsmVL/vjjD/bt20evXr2wtk67RXd3dyAtKHzppZcoUaIELi4uDBkyxKjDyckJGxsboqOj2b59O35+fkaduZWT9kRERERERERERJ60PAkAb9y4AUCpUqUynHuU0XGnT5/mxo0b1KlTB1tbW3x8fFi/fj2HDx+mZs2aALz22mscOnSIkydPMnz4cPLnz0/ZsmWpVasWfn5+WFlZYWtrS48ePZg3bx4zZ85k9uzZlCpViooVK9K0aVM8PT3N2h01alSGvgwcOBA/P78ctSciIiIiIiIiIvKk5UkAmD61NiUl5bHUFxgYCECtWrUAqF27NuvXrycwMNAIAJ2dnfniiy/4888/OXbsGKdPn+bAgQOEhIQQGBjIsGHDAGjatCk1atTg4MGDnDp1ihMnTrB+/Xq2bNnC0KFDzaYVZ7YGoIeHR67aExEREREREREReZLyJAAsUqQIAKGhoRnOhYWFkZycjJeXV47qSklJITg4GICpU6cydepU49yBAweIj4/Hzs7OOFaxYkUqVqwIQGRkJJ999hmHDx/mwoULRpv58+enSZMmNGnShNTUVFauXMnKlSvZuHGjWQCY1RqAuWlPRERERERERETkSbHMi0bTR+rt3r2bkydPGsejo6P54YcfGDlyJMePH89RXUePHuX27dsULlyYxo0bG39KlCiByWRi//79pKSk8Nlnn9G7d2+uXLliXOvu7k7+/PmBtCAxMDCQAQMGMGPGDKOMhYUFpUuXNsrkRE7bExERERERERERedLyZARgiRIlaNOmDWvXruWrr76iRIkSODk5ce7cOeLj46lfvz6VK1c2NgFJTEw0G9mXLiAgwJj+27p1a5o2bWqcO3jwIN988w2BgYHUq1ePihUrcubMGUaNGkXVqlWxt7cnNDSUsLAwChYsSKlSpXB1dSU5OZmdO3cSHh5OyZIluXfvHkeOHAEwphOnW7p0aYYpwADvvfdejtoTERERERERERF50vIkAAR46623KF68OFu2bCE8PJzr168bo/j8/f3NyqakpBAUFJShjvbt2xMSEoK1tTW1a9c2O1etWjVcXFw4cuQIt2/f5s0338Td3Z0//viD48ePEx8fj6urKw0aNKBjx45YW1tToEABRo8ezZo1azh58iSBgYFYW1tTvHhxmjZtSuPGjc3aOHr0aKb31qdPnxy1JyIiIiIiIiIi8qRZmEym1LzuhIg8mvDw8GzXoRQRERERERGR/215sgagiIiIiIiIiIiIPB0KAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoARUREREREREREXmAKAEVERERERERERF5gCgBFREREREREREReYAoAReSZEhcXx/z58+ncuTO+vr6UK1eOqlWr0qpVKyZNmkRsbGxed/GRnDp1Cm9vbyZNmpRt2R9//BFvb28OHjz4FHr2aGrWrMmbb76ZZ+1XqVKFd955J9tymzdvxtvbm+XLl2dZrn///nh7e5OUlPS4uvjCuHH3Bu2XtMfhSwcsPrfI8o/TV050Wd6F6PjovO62iIiIiMgzLTo6mvPnzxMaGkpcXNwTb8/6ibcgIpJD9+7d46233uLPP/+kZcuWvPXWWzg7OxMREcEff/zBtGnT2LFjB7/88gv29vZ53d2HunnzJnXq1OH333+ndOnSub6+WrVq9OzZk0KFCj2B3onkTt//9mX1n6tzVPZu4l2WHF9CPut8zGs37wn3TERERETk+XTz5k2uX79uvL579y6lSpXCycnpibWpAFBEnhnr1q3jxIkTDB48mIEDB5qd69atGxMmTGDGjBmsWbOGLl265FEvsxcUFPS3rq9bty5169Z9TL0R+Xs2n9uc62s2nt34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K6+8kg8//DC1atWq/MP4euutl3XXXfczrftLdwRgjx49cuutt+b222/PLrvsklmzZuWCCy7INttsk379+uXUU09N796907t37yTJyy+/XHkS6tWrl1mzZmX27NmpX79+6tatuyZ3BeALN3r06Nxzzz0599xza/wL0UfX0fv4qamwKr7R/Bt54tAn8v6H72fuwrkrnbdxvcZpUq/JSudJkgMPPDBXX311Bg4cWDml4fMwc+bMPPXUUznmmGM+t3UCAMAXpU6dOtl4440zffr0fPDBB6lbt27WW2+9ynWyP9O6P4fxfa6aNm2agQMHZvTo0bntttvSpEmTdO/ePd///vdTq1atDBgwICNHjsxtt92W2rVrp127djniiCOSJJ06dcpdd92Vn//85zn22GPTsWPHNbw3AF+s9dZbLw899FB+8pOf5Kc//WkaNWqU+++/P/fcc0/69etX4y5T8O9oWr9pmtZv+rmsa5111smxxx77uazr41q2bLla1gsAAF+U2rVr5+tf//rnvt41fgow8Ok5BZjleeCBB3LJJZfkxRdfzLx589K6dev84Ac/yJFHHvm5Hm3FypVyCjAAAPDVJwDCV5gACAAAAHySWmt6AAAAAADA6iMAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AABgeSZNmrSmh1CxxRZbrOkhAAAAfGoCIABfWp3+2Ckjvjcix4w9Jg3qNMj86vmrbVtLfrUkc+fOzYsvvpjOnTtXpn+ZQiQAAMCnIQACXxnTp0/PJZdckocffjhvvfVWGjVqlI022ii777579ttvv9SuXTtJMmXKlPTp0yejR49O165d1/Co+SxmHzs7jz/+eGYfOztvv/12WrVqtdq2NWfOnCTJJptsUvkaAACgBAIg8JXwzDPP5JBDDknTpk1z4IEHpn379vnggw/y6KOP5rTTTsujjz6aSy65JFVVVfna176W008/PW3atFnTw/5KOumkk/Lmm2/myiuvXOE8O+20U/bdd98ceuihq3Us9erVS69evZIkG264YWV63bp1V+t2k2TJkiWpqqpa7dsBAABY3QRA4Etv4cKFGThwYFq3bp0bbrghTZo0qTzWr1+/fOtb38qJJ56Yxx9/PN27d0+zZs2y//77r8ERf7Ucf/zx6dmzZ77//e+v8jI///nP0759+9U4qjXrO7d9Jw/84IE1PQwAAIDPhbsAA1969913X6ZPn54TTzyxRvz7yB577JGnn3463bt3T7L0FOB27dpl3LhxefTRR9OuXbs888wzNZaZMGFC2rVrl0ceeSTJ0uu8/fjHP06XLl2y5ZZb5qijjsq0adMq8w8YMCD9+/fPmDFjstNOO6VTp07p16/fMuv9Knr++ef/7WV23XXXbLrppqthNGtW1zFLTxkX/wAAgJIIgMCX3rhx41KrVq1069ZthfM0btx4udO7d++eli1b5p577qkx/a677krLli2z/fbbZ/r06dl///1Tu3btXH/99Rk5cmTee++9HHjggVmwYEGSpE6dOhk3blyeffbZ3H777Xnqqaey9tpr5/jjj//E8VdXV2f48OHp27dvunfvnj59+mTo0KFZuHBhZZ5nn302hx56aHr06JGePXvmyCOPzHPPPVd5fMyYMendu3fGjRuXffbZJz179sw+++yTF198MXfccUd++MMfplevXhk4cGDee++9ynLvvfdeTjnllPTt2zc9evTIwQcfnHHjxlUe79q1a6ZPn57TTjst3/72tyvTa9eunQceeCC77757tttuu/zoRz/K5MmTK4/vtNNOueKKK2qM7aOIuuOOO6Zfv3657bbbajwPN998c3bddddsv/32OeKII/Lqq6+ma9eu+ctf/vKJz+EXZdye49J1TNdKCAQAACiBAAh86b399tv52te+ljp1al61YN68eZkzZ07lv/nzl71DbO3atfO9731vmQA4duzY9OnTJ7Vr187IkSNTVVWV4cOHp2PHjunUqVOGDh2a119/PXfddVeN7Z100klp1KhRGjRokN122y0vv/xy5s2bt9LxX3311bnzzjtz8skn56abbsrgwYNzzz335NJLL02SvPbaazn66KPTqlWrXH311fn973+fRo0a5aijjspbb72VZGmAnD17dm6++eZcfvnlueuuu7Jw4cIcd9xxGTduXEaNGpUxY8Zk8uTJue6665IkixcvzoABAzJx4sSceuqpue6667LZZptl4MCBeemll5Ikf/7zn5Mkxx13XI1gN2PGjPzxj3/MKaecUrm24imnnLLc/ftobFdccUWGDBmSBx98MH379s3ZZ5+dt99+O0ny3HPP5de//nV23HHHXH/99enXr18GDx6cJJ/6Onv1zqhX+XrWrFmVr+fOnZtk6fvmww8//LfXO27PcRm357hPnhEAAOArQgAEvvRq1apV42i5j+y4447ZcsstK/8dcsghy12+b9++efXVV/Piiy8mWRqjpk6dmn79+iVZevTdlltumaZNm1aW2WCDDbLRRhvVOOqtTZs2adCgQeX7Zs2aJakZn5bnpZdeSvv27bPddttlww03TM+ePXPJJZdUrrk3ZsyYNGrUKKeffno22WSTbLLJJjnzzDNTXV2dO+64o7Ke6urqHHTQQWnSpEmaNGmSHj16ZNq0aTnmmGPSoEGDtGrVKl27ds2UKVOSJE888UReeOGFnHTSSdl2223zjW98I8cee2zWX3/93HDDDTX2oVGjRpWvk2TmzJk588wz07lz53Tu3Dn77LNPXn311cyePXu5+1hdXZ2DDz446623XqqqqvKDH/wg1dXVlef8jjvuSIsWLfKLX/wibdu2Td++ffPd7353pc/bR1YUWBecvCAXX3xxnnvuudx8880ZPXp03n777TRq1ChJ0qpVq9SvX/8T1z/y+RmrNA4AAICvKjcBAb701l9//bzzzjuZP39+jQB3+eWXV8LgRRddtMJQtO2222bdddfN3XffnQ4dOuSuu+5K69ats8022yRJZs+eneeeey7f/OY3ayy3YMGCyhFsSWps++OWLFmy0vH36tUrp5xySk444YTstNNO6datW9q2bVt5/Pnnn8+mm25a4wjHRo0apU2bNpWA9pGP39m4cePGadasWdZee+0a02bMWBq0Jk2alLp166ZLly6Vx2vVqpWtt966EglXpE2bNmnevHnl+xYtWiRZenTdWmuttdxlNtlkk8rXH8XUDz74IEny6quvZsstt0zt2rUr83znO9/JJZdcstJxJEnDhg1X+FjXrl1z+eWX56233sqoUaM+cV3Ls/83v/aplgMAAPiqEACBL73tttsul112WW6//fbstddelelbbbVV5euWLVvmjTfeWO7ytWrVSp8+fXLPPfdkwIABGTt2bI073jZp0iRdu3bNWWedtcyyK7q24L+jT58+ady4cW666aaccsopWbRoUXbcccf8n//zf9KiRYvMmTMn66yzznK3PWfOnBrT6tatW+P7evXqZUXmzJmThQsXZvvtt68xfdGiRWnZsuVKx/yv0e2j03RXFjuXd7TdR/PPmjUr6667bo3HPn7E4ae17bbbZtttt/3M6wEAACiZAAh86e2www7p0KFDzj///Oy4445p1apVjcfnzp2bl156aYVH6CVLTwP+wx/+kMceeyyvvPJK5fTfZGlI/OMf/5iNNtqoRmB75ZVXltnWp7Xjjjtmxx13zLx58/Loo4/mt7/9bc4444wMGzYsa6211nJPrZ09e/Zyw+CqWmuttVKvXr1cf/31yzxWq9YXewWIevXqLXONxvfff/8LHQMAAMB/KtcABL70atWqlREjRmTBggXp27dvLrzwwtx///25++6789vf/jbf/e5389prr2XAgAErXMc222yTDTbYIGeddVY6duyYjh07Vh7bb7/9Mnfu3AwaNCiTJ0/Oq6++mgsvvDC77LJLJkyY8JnH/+CDD2b69OlJlh5Zt/POO2e33Xar3Ihjs802y/PPP1/jOocffPBBXn311Wy++eaferubb755FixYkEWLFqVt27aV/+rXr79M2Pyk05g/q4+up/jx7TzwwAOrdZsAAAAsJQACXwkdOnTIn//85/zwhz/MLbfckp/97GcZNGhQ7r///uy77765//77lznV9eOqqqry3//933nhhRdqHP2XJK1bt87IkSPz7rvvZq+99soPfvCDPPTQQ7nsssuy9dZbf+axjxo1KieccELGjx+fadOmZdy4cbn33nsr1+bba6+9Mn/+/Jx++ul57bXX8tJLL+XEE0/MWmutlV133fVTb7dbt27p2LFjTj755Dz99NOZPn16xo4dm/322y833XRTkqWn7davXz/jx4/PlClTUl1d/Zn3d3l69+6dGTNm5JJLLsm0adMyduzYPPzww6tlWwAAANTkFGDgK6Nly5YZPHhwBg8evNL5OnbsmJdffnmZ6StbtlOnTrn22mtXuM5hw4YtM+273/3ucrfzr84+++wMHTo0gwYNqpzW27Nnz/Tv3z9JsuGGG+Z3v/tdLrjgguy7776pXbt2OnfunEsvvbTGDT7+XbVr184FF1yQ4cOHZ9CgQZk3b1422GCDHHroodl///0r8x188MH5wx/+kEceeSS33nrrp97eyvTq1StHHXVUbrjhhlx//fXp0qVLBg8enP3333+V7tQLAADAp1e1YMGC1XveF7DaTJ06NRtvvPGaHgZ8oiVLlmTmzJk1rmn4zDPP5LDDDsvo0aPTrl27ZZaZNGlSjVO1P+5fb4ayOk2aNClbbLHFF7Y9AACAz5tTgAFY7caPH5/vfe97ueKKK/L6669nwoQJGTp0aDbffHMRGwAAYDVzCjAAq12XLl1y2mmn5dprr83vf//7NGnSJF26dMkxxxyTqqqqNT08AACAogmAAHwh+vbtm759+67pYQAAAPzHcQowAAAAABRMAASgeGfc8kDefPPNJMkrr7yy3HnOO++8JMndd9+dBQsWZPHixZU7NQMAAHyVuQswfIW5CzAlmzRp0poeQoW7AAMAAF9lrgEIwJeS6AYAAPD5cAowAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgddb0AAAAAFhzhgwZkokTJyZJlixZkiSpqqpKkuy2227Zc889/+11/vWvf02XLl3SoEGDz2+gAHxqAiAAAMB/sEGDBlW+Hjp0aNq0aZM99tjjM63zxhtvzOabby4AAnxJCIAAAAAs18KFCzNq1Kg8++yzqa6uzmabbZaf/OQnqVevXqZMmZJrrrkm8+bNy5IlS7L99ttnr732ytChQ/Puu+/m9NNPz0EHHZTOnTuv6d0A+I/nGoAAAAAs1+23357XXnstZ599dkaMGJHFixfnhhtuSJJcd9116dOnT4YOHZqzzz47b775Zt55550MGDAgSXLKKaeIfwBfEgIgAAAAy/XII4+kd+/eqV+/fqqqqrLLLrvkiSeeSJKsvfbaeeKJJ/LKK6+kfv36GThwYNZdd901PGIAlscpwAAAACzXnDlzcu2111aO+luyZEkWLlyYRYsW5Ygjjsidd96Ziy++OO+//3522mmnT3XDEABWPwEQAACA5WrRokX22Wef5Z7K27hx4+y9997Ze++9M23atAwZMiRt27Z12i/Al5BTgAEAAFiubt265Z577snChQuTJH/9619zyy23pLq6OieddFKmTZuWJGnVqlUaN26cJKlVa+mfmXPmzFkzgwZgGY4ABAAAYLm+//3vZ9SoURk0aFCSZJ111skhhxySOnXqZNddd83w4cOzYMGCVFVVpWvXrunatWuqqqryrW99KyeffHL233//7LTTTmt4LwCoWrBgwZI1PQjg05k6dWo23njjNT0MAAAA4EvMKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrM6aHgD8p5kxY0aWLFmSVq1apXbt2lm0aFHefvvt1KpVK+utt95y5wEAAAD4tBwBCF+wxYsXZ8mSJVm8eHGN7xctWrTCeQAAAAA+LQEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAoWJ01PQD4T9OwYcMkSZ06dSr/27Bhw1RVVa1wHgAAAIBPS12AL9jaa69d4/uqqqplpv3r9wAAAACfllOAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAfJ4XGAAAgAElEQVQAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGB11vQAAABgdZjw+ox0Oel3WZLkv7faJHf88qAkyYLqRTnn9odz/WMT8uq776Vx/Xrp3Gb9nPD9HdN7i3ZJkiseHJcb/jYx957wk9U+zpdffjknnHBCbrzxxhrTn3vuuZxzzjm59tprc/bZZ2fChAlJksWLFydJatVa+m/5u+++e7p06ZITTjghffr0ycEHH1xjPQ8//HAuvPDC9O/fP7169cqf/vSnjB8/PqeeeuoqjW/QoEGZP39+hg8fXtnm523SpEm58MILs8022+Twww9f4Xz33XdfbrvttsyePTsbbbRRjjzyyHzta19bZr5FixblD3/4Q5588sksXrw4nTp1yhFHHJF69eqtdBwfvRZ16iz9M6lJkyZp3bp1/uu//ivbbbfdKu3LCy+8kEaNGmWjjTZapfm/Kj7Lfh199NH52c9+ls0337zG9PPPPz+tW7fOHnvs8ZnHt8eI63Pb089n0ZIleer0o9L1G62TJKP+NjEj7n4s/3fqW6lVVZV267XI4d/ZNkf3/laS5KW3ZmbT44an+pozPvMYVtXYsWNz7bXX5uijj06PHj1WON+tt96au+++O/Pnz8+GG26YQw45JBtvvPFy513Vn6Ekueeee3L77bfngw8+yAYbbJCDDz44HTp0WGZ9p59+en71q19VXrcXX3wxV111Vd5+++00b948BxxwQLbZZptP3N8zzzwzzz33XKqqqirTfvGLX6R9+/Y5+uija8y7ZMmSdOrUKYMHD86HH36Y6667Lk899VQ+/PDD9OjRI4ccckhq165dY5kbb7wxY8aMWeYz9PN24IEHprq6OlVVVWnQoEHWW2+9bLfddunbt2/lM+PzsqLXc+HChbnmmmvy5JNPZuHChdl0001z+OGHp3nz5p+4zpW97iv7bJ08eXKuueaazJgxI02aNMkee+yRb3/720mSp59+OqNGjcq7776b5s2bZ88990zPnj0/cSxLlizJqFGjcv/996e6ujrdunXLYYcdlrp16y4z78q2P2nSpFx33XWZMWNGWrZsmcMOOyybbrrpv73/Y8eOzZ///Oe8//772WSTTXL00Udn7bXXXuH4V/R78ZxzzsmECRNy6aWXpmnTpjWWGThwYJYsWZILLrjgE5+f1UUABACgSFtt9LVUX3NGzrz1wTz+8uuV6buPGJmpM2fl8kN3S5e2rfNhdXX++NRz2W34dbnz2IOy46bfyP7bb5U9tt18JWv/Yp1wwgmVr4cMGZK2bdtm7733rkx7+eWX07x58zz22GM54IADavwx+tBDD630D5mVmTJlSpo3b54GDRpk/Pjx6dq166ffiRV46KGH8pe//GWFf7R95O9//3tGjhyZX/3qV/n617+eMWPGZMSIETn77LOXmXfs2LF58cUXc95556Vu3bo577zzcuONN+aAAw5YpTFdf/31SZJZs2blqaeeymWXXZZ33303u+666ycue99996Vz587FBcAv+3798Zj9kiR1Djq5Mu3cOx/Jb+54OBcc9P38V6f2aVy/Xh6Z8mqOuOq2zJw9Nyfv9p18Y921M+2C47+wcV5yySVZvHhx1l9//ZXO97e//S333ntvzjjjjLRo0SI333xzhg0bttx4sKo/Q0kyceLEjB49Oqeddlpat26d2267LcOGDcvFF19cmWf+/Pm58sora0SlBQsW5LzzzssBBxyQHXbYIRMnTsywYcMyYsSINGvWbKXbnDt3bn75y18u9/Pjo5+1j/zmN79J9+7dkyQ33XRT3njjjQwdOjSLFi3KWWedldtvvz277bZbZf5XX301f/3rXz9xvz8vJ510UjbffPPMmzcvU6ZMyTXXXJMXXnghxx//+b2HVvZ6jhkzJq+99lp++9vfpm7duhkxYkSuu+669O/ff6XrXNnrvrLP1g8++CC/+c1vcuSRR6Z79+6ZPHlyzjzzzHTs2DH16tXLiBEjMmjQoGyxxRaZNGlSfv3rX6dDhw5p1arVSsczduzYTJo0KUOHDk2dOnVy4YUXZsKECcu8R1a2/YYNG+bcc8/NgAED0qVLlzzyyCM599xz87vf/S4NGjRY5f0fP358br755px66qlp1apVrrrqqlx88cUZPHjwcsf+Sb8XmzVrlkceeSR9+/atTHvhhRfy4YcffuI/Qq1uAiAAAP8x7nvu5dw76eW89NtfZMMWS/9obVS/bg79dtfs0mmTrN+8SZJk5GMTcsPfJubYvjvkJ5f/MW+cf3xq/X9Hr5w85t5MnvZ2/njMfnl0ymv55fV35b0581K7VlVGHLhr/qtT+7zyznvZ5qTf5ay9ds7Yif+bl96amZ23aJ8RB/Zd4dg+q4YNG2bttdfO+PHj061btyTJzJkzM3Xq1E8dbe6999707Nkza621Vu65554af+gMHz48TZs2zTvvvJPZs2dn8eLF+dnPfpYNNthgpY/9qzZt2uTUU0/N6NGjM2fOnBWO5bHHHkv37t3Tpk2bJEuPfPzTn/6UN998c5mY8uijj6Zfv35Za621kiR77LFHhg0btsoB8CPNmjVL796907Rp05x//vn5zne+k8aNG2fcuHG54YYbMnfu3NStWzf7779/unXrlltuuSWPPfZYJk6cmGnTpmXvvffOzTffnAcffDALFy5My5Ytc+SRR2bDDTdcZlsvvfRSLr300syfPz/t27dP/fr106xZs+y7775ZuHBhRo4cmfHjx6e6ujqbb755DjvssNSrVy8XXnhhmjdvnpkzZ+af//xn3n///QwYMCBt27atvIZ33HFHqqur06JFi/Tv3z+tWrXK/fffn3HjxqW6ujqLFi3KySef/G/t14rW+9E2b7nlltSrVy/du3evceTXv5o1a1ZOO+20TJ06Neuss0769++ftddeO4cffnjOOeecfP3rX0+y9A/oIUOG5LLLLlulo63en/dhTr35/vzhiD2yZ7ctKtN33qJ9Hj/1yDSqt/RIo1feeS+bHjc8My85Mev97Ow8c1b/fHODdZMs/bzY76IbM+384zNj1gf52dW35/np72ThokU5uve3clzfHZIkbf7n3Pzyv3vm/sl/z7T33k+zhvVz8//sn6YN6y8z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", - argumentInfo: { - argumentName: "base64image", - formattedValue: "base64 data: iVBORw0KGg..." - } - } - ], - status: "PASSED", - durationInNanos: 732605, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 3946628, - depth: 0, - parentFailed: false - }, - { - name: "showing thumbnails is set to", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "showing thumbnails is set to" - }, - { - value: "false", - argumentInfo: { - argumentName: "showThumbnails", - formattedValue: "false" - } - } - ], - status: "PASSED", - durationInNanos: 171602, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 167430198, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 307757704, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment23.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "$ attachment icons exist", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "1", - argumentInfo: { - argumentName: "nrIcons", - formattedValue: "1" - } - }, - { - value: "attachment icons exist" - } - ], - status: "PASSED", - durationInNanos: 12575790, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["false"], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 780051284 - } - ], - casesAsTable: false, - durationInNanos: 1840709777, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#274", - description: "Scenarios of Issue #274" - } - ], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "a_thumbnail_is_shown_for_image_attachments", - description: "a thumbnail is shown for image attachments", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.Issue-#274" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 260602, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has an image attachment $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has an image attachment" - }, - { - value: "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cybxDH9a/6fbPoYCQBERERERERG5o/5S7y882fBJqlesjp+XHx4eHvaXyL0oMzPT/opPjScuI46Fvy1kddTqOzKeAkARERERERERueMqGCvQxLsJnfw70aZqG2q718ZmsOFn9nN2aSJlKsGSAFY4n3WefZf3sTNuJ8dTjpNrzb1jYyoAFBERERERERERKceMzi5ARERERERERERE7hwFgCIiIiIiIiIiIuWYAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMGm81mS0lJISUlhby8PGfXIyIiIiIiIiIiIrfIxcUFb29vvL29MaekpJCenl7wxmx2dm0iIiIiIiIiIiJyi/Lz80lPTwfAmJycTKVKlRT+iYiIiIiIiIiIlBNms5lKlSqRkpKCMT8/X+GfiIiIiIiIiIhIOWM2m8nLy9MmICIiIiIiIiIiIuWZAkAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGNmZxdwI2JiYjh69CgAeXl5VK5cmXbt2uHi4gJAbGws4eHh5ObmYjAY8Pf3p1WrVri6uvL999+Tn5+PyWSy9+fu7k7v3r2Jjo5mx44d9OvXD29vbwDS09MJDQ2lb9++9vZ79+4lKiqKwYMH2/vJysri22+/xdPT097ObDbTunVrqlevDsDXX3/No48+iouLC7m5uRw8eJALFy5gMBhwcXEhKCiIOnXq3NkP73fi4+PZsWOH/R5MJhOurq4YDAb69+9/zc8L4OjRo5w7dw6j0UheXh6BgYE0a9aMX3/9lYSEBKxWK5mZmVSqVAmA+++/n4YNG5bpPS5dupRffvkFs9lMZmYmPXv25KmnngIKvr6ffvopO3bswGQy4eHhwV//+ld69eoFwM8//8zbb7/NggULHOr+4osvWLRoET///DPbtm3jgw8+wNfX12HcMWPGkJiYyOrVqwG4dOkSVatWxWw207x5c8aMGcPIkSP57rvvHK7r0aMH69atIzIykrlz5/LZZ5+RkJDA4MGDeemll3jkkUfsbYcNG8aiRYvw8PAgJiaGefPmERkZiZubG97e3jz99NO0atXq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ERERERERERERuVUuLi54eXnh7e2NITc31+bsgkTk5pw/f5569eo5uwwRERERERERuYtpExAREREREREREZFyTAGgiIiIiIiIiIhIOaYAUEREREREREREpBxTACgiIiIiIiIiIlKOKQAUEREREREREREpxxQAioiIiIiIiIiIlGMKAEVERERERERERMoxBYAiIiIiIiIiIiLlmAJAERERERERERGRckwBoIiIiIiIiIiISDmmAFBERERERERERKQcUwAochew2Wzs37+fCxcuABAXF8euXbucXJWIiIiIiIiIlAcKAEWczGazsW/fPq5cuYKXlxeXL19m9+7dVKlSxdmliYiIiIiIiEg5oABQxIkKw7+EhAQ6d+5MVlYWu3btokmTJjRq1MjZ5YmIiIiIiIhIOaAAUMRJFP6JiIiIiIiISFlQACjiJKdPn+bChQu0bdsWNzc39uzZg7+/v8I/EREREREREbmtFACKOEndunWpVq0aBw8eJD8/n1atWnHp0iWio6OdXZqIiIiIiIiIlCMKAEWcxGQy0b59ezw8PPj111+pUqUKbdu25eDBgwoBRUREREREROS2UQAo4kQKAUVERERERETkTjM7uwCRe11hCLhnzx4uX75MYGAgAJGRkfZ/i4iIiIiIiNzLbDYbiYmJ5OfnF3veaDRSpUoVTCbTHe2jUHZ2NikpKUWOGwwGfH19S9XHb7/9xtmzZ7HZbNds5+7uTufOnXFxcblunyVRAChyFzCZTHTs2NH+PiAggICAACdWJCIiIiIiInJ3iImJYcGCBSQnJ1+znbu7OyNGjCAoKOiO9HG1d999l7S0tBL7ePTRR2nduvU1+1iwYAF5eXnXbHN1n+3bty9V2+IoABQRERERERERkbvW8uXLadWqFY888kiJM+usVis7duxgyZIlTJ06tUi729HH1dLS0pgyZQp+fn4OxyMjI5k3bx5ffvkl2dnZdOrUqcQ+Shv+AeTm5pa6bXH0DEAREREREREREblrXbhwgY4dO14zkDMajXTq1ImsrCwSExNL1ceaNWtYs2ZNqfsojcqVK+Pu7g7A6tWryc7Ovql+bjfNABSRW7Z8+XJ27dp13XZPPvnkdadAi4iIiIiIyM1pu6otlcyVcDe742Z2w93kjofZg+oe1Wng3YD63vWp71WfgIp/rEdO2Ww2jMbrz2ErbGO1WkvVR3HPArxWH6Xh6+vLtGnTAJg4cSIpKSm4ubndVF+3kwJAEbllbdu2pXbt2vb3J0+eJCIigt69e+Pj42M/ft999922MefMmUNISIjDsxNFRERERETuden56aTnpzseTICN5zfa37qZ3Gjo3ZCmlZsS7BtMsyrNqFWpVhlXKmVJAaCI3LIGDRrQoEED+/ucnBwiIiJo2bLlHdnMxGq1cv78eUJCQm573yIiIiIiIuVdtiWbw4mHOZx4mBWnVwBQuUJlgqsE09qvNf0C++Hr5uvkKov6xz/+gcViKfacyWRixowZ1+1jzZo19pl/p0+fBmDVqlUAmM1mBg0aVOK1NpuNpUuXEh4eXuqap02bRpUqVRgyZMh1Nxa5kxQAikiZsdlsbN26lZ07d5KYmIi7uztNmzalf//+eHp62tvt3LmT0NBQ4uPjMRqN1KxZkz59+tC4cWPOnDnDnDlzAFixYgUrVqzgrbfecphpKCIiIiIiIjcmKSeJ0EuhhF4KZe6RubSp2oa+tfvSq3YvPMwezi4PgNdee63EpbmlWSJ8q6Kjo9m3b5/9/bx58675XEKAAQMGYDKZ+Prrr3n33XfvdIklUgAoImVmzZo1bN++nd69e9O4cWMSEhJYt24d0dHRvPTSS5jNZiIiIlixYgXdu3dn4MCB5ObmsmvXLv773//yyiuvUKtWLUaPHs3nn39Onz59aN68uUN4KCIiIiIiIrfGarOy9/Je9l7ey9v736ZP7T4MrjeYNlXbOLWuKlWq3HIfV8/wK5z5N3To0FJdm5WV5fA+OTn5utecPXsWg8FARkbGDVR5+ykAFJEykZKSQmhoKD179qRfv34A1K9fH19fX+bOnUt4eDjt2rXj5MmTVKxY0eGXctOmTfn555+xWCy4urpSrVo1AHx8fO7IEmMRERERERH5fzae38jG8xtp7tuckU1G0rVGV2eX9Idx+PBhZ5cAwJ2fHykiQsHGIFarlWbNmpGXl2d/3Xfffbi5uREVFQWAt7c3GRkZbNmyhZycHKDgWQ4PPfQQNWvWdOYtiIiIiIiI3NMOJRzixV9fZPim4Ww4twGLtfjn8d1uRqOx2B17f6/w+YBmc9H5bsX1YTabi7S9Vh+/5+Pjg6+vb4mvG1WxYkUmTZpEixYtbvja69EMQBEpEykpKQDMmjXrmud79uxJbGws3333HevWraNu3boEBwfToUOHu2LrdBERERERkXtdZEokr+95nc+Pf84rrV4hpNqd3aCxfv36bNy4kT59+pQYzFmtVnbu3ImPj0+xS4WL66NLly4AxMfHl6qP34/997//HT8/vxLrnjhxov3f13tWoKenJxMmTMDf35+nnnqKpUuXsn///mtecyMUAIpImXryySeL/UXq7u4OFPxCffLJJ+nXrx+HDx/m6NGjrF27lq1bt/Liiy9qsw8REREREZG7RFRaFOO3j6d3rd5MajGJqu5V78g4jz/+OF9//TUffPBBiZuAGAwGAgICePrppzEYDHekj4YNG9ontUycOBGr1VpiX4UmT55M9erVr9nG29ubCRMm2B93ZTQaGTFiBK6uruzcufOa15aW0wLAqKgo1qxZw6lTp0hNTcXDw4Pg4GAeffRR/P39AXj22WdJSUlhzpw5DlMnV65cyZo1axg8eDBDhgxh8uTJnDt3DpPJxCeffELFihXtbf/xj38QGxuL2Wxm8eLFZGRkMHbsWADq1avHO++8Y2+bmJjIc889B0Dz5s155ZVXHGr+v//7P86fP0/lypWZM2eOww4ze/fuLTKzyWg04ufnR8uWLRkyZAgXL17kX//6F/7+/rz//vv25Dg1NZVJkyZhsVj46KOPbmqaqMjdrjC4q1ixInXq1Lluez8/P3r06EGPHj2IiYlhxowZbN++nQEDBtzpUkVEREREROQGbIrZRNilMMY0HcNjDR/DxehyW/uvXLkyEyZMcHofV/P29ua99967Zhuz2UylSpVKPF+/fn3S0tJ45plnimRBBoOBYcOG4ebmxo4dO7jvvvtuqV6nBIDx8fG8++67ZGdn07ZtW3x9fYmMjGTXrl2cPn2aGTNmXHdqZHEsFgsRERF06tQJgJiYGGJjY0tsf+bMGRITE+2zkcLDw0tsGxMTw/nz53FzcyMpKYnjx48TFBRUpJ2Pjw+NGjUCIC8vj1OnTvHTTz8RFxfHyy+/TKdOndixYwdbtmzhoYceAmD16tVkZWUxdOhQhX9SbjVs2BCDwcDevXtp3Lix/XhWVhbffvst3bt3p2bNmnz//fdUrVqVDh062NvUqlULDw8P8vLyAOx/ibHZbGV7EyIiIiIiIlKsLEsWcw7PYV30OmZ0mkGtSrWcXdId9dprr5Genn7NNu7u7vbVbsUpnIRWEoPBwMCBAxk4cOBN1Xg1pwSAv/32G5mZmXTq1MmevtpsNhYsWAAUPAvsRrd29vDwwNXVlf3799sDwAMHDgDg7+9vX89dKCAggAsXLhAeHk6vXr2AggCwZs2aXLx4sUj/v/76KwD9+/dn5cqV7Nixo9gAsG7durzwwgv290lJSTz33HMcPnyY3NxcHnvsMcLDw/n222/p2rUrSUlJbNmyhapVq/Lwww/f0D2L/JF4e3vzwAMPsG3bNlxdXQkODiY7O5stW7aQlJRk//7Pyclh5cqVJCcnExgYiNVq5cCBA2RmZtK8eXMA+19QwsPD7TMKvb29nXZvIiIiIiIiUuB06mmGbxrOm23fpHft3s4u545xdXW94ezKmZyyC3DlypUBOHHiBIcPH8ZqtWIwGBgzZgxjxoy5qQ8wNzeX4OBgIiIi7Lu6hIeHU7duXSpUqFCkfZUqVfD19bXP+svOzubYsWP22Xu/t2vXLtzc3OjXrx/VqlVj7969pdqBpnCGktFoxGQyUaVKFQYMGEBqairr169n+fLlWK1WHnvsMVxdXW/4vkX+SAYNGsSAAQOIjIxkwYIFrFy5El9fX1544QV7gDd48GB69erFvn37+Pzzz1myZAkJCQmMHj2ahg0bAgWBf69evTh37hzLly8nOTnZmbclIiIiIiIiV8m2ZDN592Te2f8OOZYcZ5cjOGkGYNOmTenWrRvbtm1j+vTpuLm5Ua9ePVq0aEGPHj0cnuFXWlarlRYtWhAWFsaxY8eoU6cOp06dYtCgQcXummK1WmnevDmhoaFkZWVx5MgR8vLyaNGiBb/88otD25MnT3L58mU6dOiAq6srbdu2Zf369URERNCmTRuHtlFRUcydOxcoWJL822+/YbPZ+NOf/mRf1tyvXz+2bdvGd999R35+Pk2bNqV9+/Y3fM8id6uePXvSs2fPIscNBkOJ5woZjUb69u1L3759rznGI488wiOPPHLLtYqIiIiIiMidsfbsWiLiI5jRaQaBnoHOLuee5pQZgABjx47l/fff57HHHqNZs2acPXuWZcuWMXnyZFJSUm6qzxYtWmAymQgPDyciIgKbzVYkoLta69atyc/P59ChQ/alhE2aNCnSbseOHQCEhBRsa92uXTuH41dLSkpi165d7Nq1i71795Kamsro0aN57LHH7G1cXFx4/PHHyc/Px2Aw8OSTT97U/YqIiIiIiIiI3M2i0qIYsXkEe+L2OLuUe5rTdgGGgufw1apV8FDI3NxcZs2aRUREBL/++iv9+vXDxaVg15jMzEyHzTEKl/v9fslsYYB39OhRUlJS8PX1pW7duiWOHxwcjJubG0eOHOHgwYO0bNmyyOYjVquV3bt3AzB37lz77D4oWGKcnZ2Nm5ub/VirVq345z//CcCcOXPYvXs3SUlJRcYuXGrs7u5O7dq1r/NJiYiIiIiIiIj8MWVZsng+7Hne7/g+3Wp2c3Y59ySnzAD86quvePrpp9m+fbv9mKurKzVr1gQKQjfA/v7qdomJifYlvXXq1CnSd9u2bbl48SKHDh265uy/wjGbN2/Ojh07SE1NLbb94cOHSU1NpXr16nTv3t3+ql27Nrm5ucUuLy40fPhwzGYz33//PZcvX75mLSIiIiIiIiIi5VW+LZ+Xdr7EhnMbnF3KPckpMwCDg4PZuHEjCxYsYOfOnVSpUoX4+HiOHj2KyWSiZcuWAAwdOpQjR46wfv16jh49ire3N6dOnSIrK4ugoCCCg4OL9N2mTRsWL15Mdnb2dQPAwvZ79uzBxcWFFi1aYLFYHM4XLvN95JFHHJ5bduDAAT766CN27NhB586di+27WrVq9OnTh3Xr1rFkyRImTZpU6s9IRERERERERKQ8sdqsvL7ndbLysxhcb7Czy7mnOGUGYKtWrXj55ZcJCgoiOjqa0NBQoqOjadGiBa+++qp9WXD9+vWZMmUKzZs3Jykpid9++w0/Pz+GDx/OP//5TwwGQ5G+C5f9enh4cP/995eqFqPRaF8OfLXc3Fz27duH2Wy2P/evUPPmzfHy8uLQoUOkpqaW2P+gQYPw9PRk//79RERElObjEREREREREREpt6aFT2NzzGZnl3FPMeTm5tqcXYSI3Jzz589Tr149Z5chIiIiIiIid4G2q9o6u4RSMxvNzO0yl5BqIc4u5Z7gtF2ARURERERERETk3pRvzWfSr5P4Lfk3Z5dyT1AAKCIiIiIiIiIiZS7LksWE0AnEpMc4u5RyTwGgiIiIiIiIiIg4RXJOMs+HPU+OJcfZpZRrCgBFRERERERERMRpzqWf44ODHzi7jHLN7OwCRERERERERETk1m0ftJ24zDiuZF3hcvZlLmde5nLWZa5kX+Fs6lnOpZ9zdoklWnt2Le2rteeh2g85u5RySbsAi/yBaRdgERERERERKa3YzFh2xu5k9+Xd7Luyj+ScZGeX5MDN5MY3D31DzYo1nV1KuaMAUOQPTAGgiIiIiIiI3KzjScfZEbuDr099TUpuirPLAaBJ5SYseXCJs8sod/QMQBERERERERGRe9D9le9n9P2j+a7vdzx9/9O4m9ydXRInkk7w+fHPnV1GuaMZgCJ/YJoBKCIiIiIiIrdLQnYCnx77lLVRa8m35jutDjeTG2v6rsHPzc9pNZQ3mgEoIiIiIiIiIiL4uvkyufVkVj20igcDHnRaHdmWbGZGzHTa+OWRZgCKAFarlby8PPLz8+2vq5nNZvvLxcUFo/HuyM41A1BERERERETulG0Xt/Hq7lfJseQ4ZfxPu31K66qtnTJ2eXN3pBgiTpSTk0NycjLp6elkZ2cXCf8A8vPzyc7OJj09neTkZHJzc51QqYiIiIiIiEjZ6VazGwt7LKRKhSpOGX/6gelYrBanjF3eKACUe5bFYiE1NZX09HRsttJPhLXZbKSlpZGamorVar2DFYqIiIiIiIg4V2OfxizttZQG3g3KfOwzqWfYFLOpzMctjxQAyj0rIyODvLy8m74+Ly+PjIyM21iRiIiIiIiIyN2nqntVFvVcRGf/zmU+9uLfFpf5mOXRXR0Avv7662zevLnIv//oli5dyrx585xdxj0tOzv7lsK/Qrm5uWRnZ9+GikRERERERETuXm4mN2Z3mc3AugPLdNxTKafYc3lPmY5ZHpmdXcCaNWtYs2YNo0ePpmvXrjfdz7Zt29i6dStxcXHk5uZSvXp1evXqRc+ePW9jtbdHr169in3OnJQNi8VCZmbmNdskJiYyY8YMAN59991rts3MzMTFxQWTyXTbahQRERERERG5G73a6lWi06I5GH+wzMZc/Nti2lVrV2bjlUdOnQFos9kICwsjJCSE7du333Q/v/76K8uWLaNv3768997/x959hzV5vX0A/wYIeyMgKi7cFidqQQEH/NDWXRUtFtHqiwNX3Vak1WodqIhWK85aFAe2olalRRFQrJbiqgUUBUE2hBVGQhLeP7h4mkBIwggo3p/r8mqe5OSckyej5M59zr0de/bswSeffIKgoCBER0c34Yybhrm5Odq3b9/S0/hg8fl8uXv+7d69GzY2Ngr1V1lZSUVBCCGEEEIIIYR8EFRVVLHXbi/a6zRfXONB1gO8LHzZbOO1Ri2aAfjPP/+Az+fDzc0Nq1atQnp6Otq1a1fvfv79919YW1tj2LBhzHUjRoyAtrY29PX1met+++033L59G1wuFz179oS7uzvatGkDAPj9998RHh6O3NxcmJqa4vPPP8dHH30EAPDx8YGtrS1evHiBzMxM8Pl8zJgxA0OHVkWfCwsLERgYiLi4OAgEAnTv3h3u7u4wNTVFWVkZFi1ahPnz5+PcuXOYPHkysrKykJ+fDy8vLwBAfHw8Lly4gPT0dBgYGGDw4MGYNm0aVFRUkJubi9OnT+Ply6oXerdu3eDh4QETE5OGnXSiUPalt7c3kpKSEBMT02R9EkIIIYQQQgghrYG+uj78R/hjzumiBs0AACAASURBVO054FZwm2XM84nnsWnwpmYZqzVq0QzAiIgIDBs2DIaGhrC2tkZUVFSD+unQoQPi4uIQHx8vcf2gQYPQrVtVlZoHDx4gNDQUixcvxp49e6Cjo4PDhw8zt127dg2enp44cuQIpk+fDj8/P2RlZQEAVFVVERYWhlmzZmH79u0YP348Tp8+zWSRnT17FlwuFzt27MDevXuhoaGBwMBAAICaWlWM9c8//8TXX39da5kzh8OBr68vHBwccPDgQSxZsgR3797F77//DgA4f/489PT04Ofnh71798LIyAhBQUENOk+kilAov4S4trZ2k/dJCCGEEEIIIYS0Fp30OsHX1heqrObZDuuP1D8gEFHyTUO1WACwqKgIjx49wvDhVRVk7OzscO/evQYFUpydnfHxxx9j9+7dWLVqFY4cOYLIyEiJCq1RUVEYPnw4rKysoKurC1dXVzg5OUEkEuHOnTtwdHRE586doaKigoEDB6J37964f/8+c/+BAwfC1NQUANC7d29wuVwUFRUBADw8PLBs2TLo6upCW1sbQ4cORVJSksQc7ezsYGFhAQ0NDYnr79+/DwsLC4wcORJqamro2LEjHBwcmMyz0tJSaGpqQkNDA1paWvDw8GAyB0nDKCNYJxKJmrxPQpTp5MmTsLKygpWVFT799NNG98fj8Zj+rKysFM6eJYCnpydz3rZu3drS02k24q+XP//8s9H9LV68mOnPx8enUX0NGDCA6av6BzlCCCGEEFKbjZkNNgza0CxjlQhKEJne8O3jPnQttgT47t27MDc3R+fOnQFUBdhOnTqFR48eKbz3WjU1NTXMnj0bn332GeLi4vDixQv89ttvCAoKwtKl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T7PvSarjzpw5w82bN6lVqxb29vb4+fmxbt06Dh8+TLVq1QB48803OXToECdPnmTo0KHkyZOHUqVKUb16dfz9/bGxscHe3p7u3bszZ84cpk+fzsyZMylevDhly5alcePGeHl5WZx3xIgRacYyYMAA/P39s3Q+ERERERERERGRZy1HAsDUR2uTk5OfSn+BgYEAVK9eHYAaNWqwbt06AgMDjQDQxcWFr7/+mlOnTnHs2DHOnDnDgQMHCAkJITAwkCFDhgDQuHFjqlatysGDBzl9+jQnTpxg3bp1bN68mU8//dTiseL05gD09PTM1vlERERERERERESepRwJAAsWLAhAaGhomn1hYWEkJSXh7e2dpb6Sk5MJDg4GYPLkyUyePNnYd+DAAeLi4nBwcDC2lS1blrJlywIQERHBqFGjOHz4MBcvXjTOmSdPHho1akSjRo0wm82sWLGCFStWsGHDBosAMKM5ALNzPhERERERERERkWfFOidOmlqpt3v3bk6ePGlsj4qK4qeffmL48OEcP348S30dPXqUu3fvUqBAARo2bGj8KVq0KCaTif3795OcnMyoUaPo1asXV69eNY718PAgT548QEqQGBgYSP/+/Zk2bZrRxsrKihIlShhtsiKr5xMREREREREREXnWcqQCsGjRorRp04Y1a9bwz3/+k6JFi5I7d27Onz9PXFwcdevWpXz58sYiIAkJCRaVfakCAgKMx39bt25N48aNjX0HDx7ku+++IzAwkDp16lC2bFnOnj3LiBEjqFixIo6OjoSGhhIWFka+fPkoXrw4bm5uJCUlsXPnTsLDwylWrBgPHjzgyJEjAMbjxKmWLFmS5hFggPfffz9L5xMREREREREREXnWciQABHjnnXcoUqQImzdvJjw8nBs3bhhVfE2aNLFom5ycTFBQUJo+2rdvT0hICLa2ttSoUcNiX6VKlXB1deXIkSPcvXuXt99+Gw8PD37//XeOHz9OXFwcbm5u1KtXj44dO2Jra0vevHkZOXIkq1ev5uTJkwQGBmJra0uRIkVo3LgxDRs2tDjH0aNH07223r17Z+l8IiIiIiIiIiIiz5qVyWQy5/QgROTJhIeHZzoPpYiIiIiIiIj8teXIHIAiIiIiIiIiIiLyfCgAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUERERERERERF5hSkAFBEREREREREReYUpABQREREREREREXmFKQAUkRdKbGwsc+fOpXPnztSsWRNfX18qVqxIq1atmDBhAjExMTk9xCdy+vRpfHx8mDBhQqZtf/75Z3x8fDh48OBzGNmTqVatGm+//XaOnb9ChQq89957mbbbtGkTPj4+LFu2LMN2/fr1w8fHh8TExKc1xFfGzfs3ab+4PU7fOGH1lVWGf3L/MzddlnUhKi4qp4ctIiIiIvJCi4qK4sKFC4SGhhIbG/vMz2f7zM8gIpJFDx484J133uHUqVO0bNmSd955BxcXF27fvs3vv//OlClT2LFjB4sWLcLR0TGnh/tYt27dolatWvz222+UKFEi28dXqlSJHj16kD9//mcwOpHs6fO/Pqw6tSpLbe8n3Gfx8cXkss3FnHZznvHIREREREReTrdu3eLGjRvG6/v371O8eHFy5879zM6pAFBEXhhr167lxIkTDBo0iAEDBljse/fddxk3bhzTpk1j9erVdOnSJYdGmbmgoKA/dXzt2rWpXbv2UxqNyJ+z6fymbB+z4dyGZzASEREREZGXX1RUFDdu3MDa2hpvb29MJhPh4eFcunQJb29vnJycnsl59QiwiLwwbt26BaQ83pmegQMHEhQUlCb8W7VqFR06dKBChQqULVuWN954gx9//BGTyWS0OXr0KD4+PixevJgZM2bQoEEDypYtS5MmTVi9ejVxcXGMHj2aWrVqUaFCBTp37szJkyctzpOYmMi0adNo3rw5ZcuWpXLlynTp0oWtW7cabXr16sVHH30EQJMmTdI8Vmpra8vmzZtp3bo1ZcuWpVq1anz22Wfcv3/faPPoI8CpY1+yZAlLliyhRYsWlC1bljp16jBq1CgePHhgMc5ffvmFpk2bUrZsWRo0aMCMGTM4cOAAPj4+LFy4MMP3IDo6mjFjxtCoUSPKlStHlSpV6NSpE2vWrEnT1sbGhrNnzxIQEEDFihWpUKECAQEBXLhwwaLd9evXGTp0KLVr16Z06dJUrVqVXr16pXnEuWvXrlSpUiXNeX799Vd8fHz49ddfMxz7vHnzaNKkCWXKlKFu3bpMmDAh24/03r9/n6FDh+Ln50eZMmVo1aqVxfsLKffoX//6F/Xq1aN06dJUr16dbt26ERwcbNFu8uTJ+Pj4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AAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAF9oixcvzty5cz/vYQAAAHxpCYDAl8b06dNz6qmnZptttsk3v/nN9OrVK7vvvnuuvfba1NbWVtabPHlyunTpknHjxn2Oo/3yOvnkk/PjH/94petst912ufLKKz/TcSxatCg333xzfvzjH+fggw/OsGHD8sILL3ym+wQAAChRvVNOOeW0z3sQwCfz/vvvp3Xr1p/3MP4t/vKXv2TvvffOG2+8kf322y/7779/+vbtm9mzZ+fSSy/NCy+8kJ133jlVVVVp0KBBOnTokF69eqVZs2af99C/8I4//vjMmzcv3bt3T5I88MADmTVrVnbdddcVXqdt27bp2bNnVl999c9sXHfccUcef/zxHHPMMRk0aFAaN26cSy+9NGuuuWY6duz4me0XAACgNPU/7wEArMrChQszdOjQdOjQITfccEOaN29euWzgwIHZbLPNctJJJ+XPf/5z+vbtm5YtW2bQoEGf44i/XF544YX079//Y11n5513/oxG8/978MEHc+CBB6ZLly5Jkk033TQtW7bMJZdckkWLFqVv376f+RgAAABKYAow8IX3xz/+MdOnT89JJ51UJ/4ttccee+SZZ56pBKEPTwF+7LHH0qVLl/zlL3+pc53nnnsuXbp0yaOPPpokmThxYn74wx+mV69e2WijjXLEEUdk2rRplfWHDBmSwYMH55Zbbsl2222XHj16ZODAgctsd3lqamoyYsSIDBgwIH379s1OO+2UCy64IAsXLqys8+yzz+bggw9Ov3790r9//xx++OF5/vnnK5ffcsst2X777TNu3Ljss88+6d+/f/bZZ5+89NJLueuuu7L77rtnq622ytChQ/Puu+9Wrvfuu+/m1FNPzYABA9KvX78ceOCBdaZG9+7dO9OnT8/PfvazbLPNNpXl9erVy4MPPpjvf//72XzzzfMf//EfmTRpUuXyD08BXjq2pbfh1ltvnYEDB+aOO+6oczvceuut2XnnnbPFFlvksMMOy5QpU9K7d+/84Q9/WO7tNnfu3LRo0SJJMmbMmBx11FG56qqrsuuuu+aqq67KY489tsrbHgAAAAEQ+BIYN25cqqur06dPnxWus6Kpvn379k3btm1z33331Vl+zz33pG3bttliiy0yffr0DBo0KPXq1cuYMWMyevTovPvuu9l///2zYMGCJEn9+vUzbty4PPvss7nzzjvz9NNPp3Xr1jn++ONXOf6rr746d999d0455ZTcfPPNOfHEE3PfffflsssuS5K8+uqrOfLII9OuXbtcffXV+Z//+Z80bdo0RxxxRN58883K/mfNmpVbb701V1xxRe65554sXLgwxx13XMaNG5frr78+t9xySyZNmpTrrrsuyZL30BsyZEgmTJiQ0047Ldddd13WX3/9DB06NC+//HKS5Pe//32S5LjjjqsT7GbMmJHf/va3OfXUU3PppZemqqoqp5566nKPb+nYrrzyygwfPjwPPfRQBgwYkLPPPjtvvfVWkuT555/Pz3/+82y99dYZM2ZMBg4cmBNPPDFJUlVVtdztbrjhhrn33nuTJPfff3+OO+64fO9738vvfve77L777vnNb36Thx9+eJW3PwAAwFedAAh84b311ltZc801U79+3XctmDt3bmbPnl35mjdv3jLXrVevXr773e8uEwDHjh2bnXbaKfXq1cvo0aNTVVWVESNGpHv37unRo0cuuOCCvPbaa7nnnnvq7O/kk09O06ZN07hx4+y222555ZVXVvkJtS+//HK6du2azTffPB07dkz//v1z6aWXZpdddkmy5Ay6pk2b5vTTT883vvGNfOMb38iZZ56Zmpqa3HXXXZXt1NTU5IADDkjz5s3TvHnz9OvXL9OmTcvRRx+dxo0bp127dundu3cmT56cJHnyySfz4osv5uSTT863vvWtfP3rX8+xxx6btdZaKzfccEOSpGXLlkmSpk2bVr5PkpkzZ+bMM89Mz54907Nnz+yzzz6ZMmVKZs2atdxjrKmpyYEHHpj27dunqqoqu+66a2pqavLSSy8lSe666660adMmP/nJT9K5c+cMGDAg22677UpvtwMOOCAvvPBCJVyOHTs23/3ud7PHHnvktttuy5577pnRo0fngQceWOl2AAAAvuoEQOALr7q6us502aW23nrrbLTRRpWvgw46aLnXHzBgQKZMmVKJUc8//3ymTp2agQMHJlky/XajjTaqTDdNkrXXXjvrrLNOnWmvnTp1SuPGjSs/Lw1m77333krHv9VWW+Xpp5/OCSeckPvvvz/vv/9+OnfunE6dOiVZ8h586623Xp3A2bRp03Tq1Kky5g+PYalmzZqlZcuWdT4IplmzZpVIN3HixDRo0CC9evWqXF5dXZ1NNtmkEglXpFOnTmnVqlXl5zZt2iRJ5syZs8LrfOMb36h8v/S2/OCDD5IkU6ZMyUYbbZR69epV1vn2t7+90jG0atUqJ598cp588sm0aNEic+bMyfnnn5/tt98+e+65Z26++ebstddemTp16kq3AwAA8FXnQ0CAL7y11lorb7/9dubNm1cnwF1xxRWVMHjJJZes8Ey8b33rW1ljjTVy7733plu3brnnnnvSoUOHbLrppkmSWbNm5fnnn883v/nNOtdbsGBBZQprkjr7/rDFixevdPw77bRTmjVrlptvvjmnnnpqamtrs/XWW+e///u/06ZNm8yePXu5n6bbrFmzzJ49u86yBg0a1Pm5YcOGK9zv7Nmzs3DhwmyxxRZ1ltfW1qZt27YrHXOTJk3q/Lx0mu7KjrVRo0bLLFu6/nvvvZc11lijzmUfPuNwRdq3b5+TTz45Z555Znr06JHXX3895513Xo455phUVVXlxhtv/EjTsAEAAL7KBEDgC2/zzTfP5ZdfnjvvvDN77bVXZfnGG29c+b5t27Z5/fXXl3v96urq7LTTTrnvvvsyZMiQjB07tjL9NkmaN2+e3r1756yzzlrmuit6b8GPa+utt87WW2+duXPn5rHHHsv555+fM844IxdeeGFWW2215U6tnTVr1nLD4Ee12mqrpWHDhhkzZswyl1VX/3tPAG/YsOEyU7Tff//9j3Tdf46A06ZNy3nnnVcJf7/4xS9y0kkn5etf//qnPm4AAIASmAIMfOFtueWW6datWy666KI6Z+QtNWfOnMqHWqzIgAEDMmnSpDzxxBP529/+Vpn+mywJiVOmTMk666yTLl26VL6qq6vTrl27f3n8Dz30UKZPn55kyZl1O+ywQ3bbbbfKmNdff/288MILdaY5f/DBB5kyZUo22GCDT7zfDTbYIAsWLEhtbW06d+5c+WrUqNEyx7Wqsxj/VUunU394Pw8++OBHvv7SCPi///u/6dixYzbaaKNUV1dnxx13zIABA/KrX/3qsxg2AABAEQRA4Auvuro6I0eOzIIFCzJgwICMGjUqDzzwQO69996cf/752XbbbfPqq69myJAhK9zGpptumrXXXjtnnXVWunfvnu7du1cu+8EPfpA5c+Zk2LBhmTRpUqZMmZJRo0Zlxx13zHPPPfcvj//666/PCSeckPHjx2fatGkZN25c7r///sp78+21116ZN29eTj/99Lz66qt5+eWXc9JJJ2W11VbLzjvv/In326dPn3Tv3j2nnHJKnnnmmUyfPj1jx47ND37wg9x8881JlkzbbdSoUcaPH5/JkyenpqbmXz7e5dl+++0zY8aMXHrppZk2bVrGjh2bRx555GNtY2kEnDBhQv7xj39UpiV/97vfzbRp01b4ASUAAABfdaYAA18K3bp1y+9///tcdtllue222/LLX/4yDRs2TMeOHbPvvvvmhz/8YZ0PrfhnVVVV+d73vperrroqxx13XJ3LOnTokNGjR2f48OHZa6+9Ur9+/XTr1i2XX355Ntlkk3957GeffXYuuOCCDBs2rDKtt3///hk8eHCSpGPHjvnlL3+Ziy++OPvuu2/q1auXnj175rLLLqvzAR8fV7169XLxxRdnxIgRGTZsWObOnZu11147Bx98cAYNGlRZ78ADD8xvfvObPProo7n99tv/5eNdnq222ipHHHFEbrjhhowZMya9evXKiSeemEGDBi33vQNXpH379jnllFNyxhlnZP78+dl9993z7LPPplmzZp/adG0AAIDSVC1YsOCznfcFfGamTp2adddd9/MeBqzS4sWLM3PmzDrvafiXv/wlhxxySG688cZ06dLlY23vnXfeyWWXXZZJkyZltdVWy+GHH/6pxFoAAIASCYDwJSYA8mXxzDPP5LDDDsvhhx+e73znO3n33Xdz3nnnpbq6OldffXVlOu/HNX/+/DRs2PATXx8AAOCrQACELzEBkC+Tu+++O9dee22mTp2a5s2bp1evXjn66KM/lQ9aAQAAYMUEQPgSEwAp2TPPPJNevXp97P8CAABQlwAIX2ICIAAAALAq1Z/3AAAAAACAz44ACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMHqf94DAAAA4PMzfPjwTJgwIUmyePHiJElVVVWSZLfddsuee+75sbf5+OOPp1evXmncuPGnN1AAPjEBEAAA4Cts2LBhle8vuOCCdOrUKXvssce/tM2bbropG2ywgQAI8AUhAAIAALBcCxcuzPXXX59nn302NTU1WX/99fOjH/0oDRs2zOTJk3PNNddk7ty5Wbx4cbbYYovstddeueCCC/LOO+/k9NNPzwEHHJCePXt+3ocB8JXnPQABAABYrjvvvDOvvvpqzj777IwcOTKLFi3KDTfckCS57rrrstNOO+WCCy7I2WefnTfeeCNvv/12hgwZkiQ59dRTxT+ALwgBEAAAgOV69NFHs/3226dRo0apqqrKjjvumCeffDJJ0rp16zz55JP529/+lkaNGmXo0KFZY401PucRA7A8pgADAACwXLNnz861115bOetv8eLFWbhwYWpra3PYYYfl7rvvzq9+9au8//772W677T7RB4YA8NkTAAEAAFiuNm3aZJ999lnuVN5mzZpl7733zt57751p06Zl+PDh6dy5s2m/AF9ApgADAACwXH369Ml9992XhQsXJkkef/zx3HbbbampqcnJJ5+cadOmJUnatWuXZs2aJUmqq5e8zJw9e/bnM2gAluEMQAAAAJZrl112yfXXX59hw4YlSVZfffUcdNBBqV+/fnbeeeeMGDEiCxYsSFVVVXr37p3evXunqqoqm222WU455ZQMGjQo22233ed8FABULViwYPHnPQjgk5k6dWrWXXfdz3sYAAAAwBeYKcAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwep/3gOAr5oZM2Zk8eLFadeuXerVq5fa2tq89dZbqa6uTvv27Ze7DgAAAMAn5QxA+DdbtGhRFi9enEWLFtX5uba2doXrAAAAAHxSAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFCw+p/3AOCrpkmTJkmS+vXrV/7bpEmTVFVVrXAdAAAAgE9KXYB/s9atW9f5uaqqapll//wzAAAAwCdlCjAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABQ9P+eYAAAgAElEQVRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUTAAEAAAAgIIJgAAAAABQMAEQAAAAAAomAAIAAABAwQRAAAAAACiYAAgAAAAABRMAAQAAAKBgAiAAAAAAFEwABAAAAICCCYAAAAAAUDABEAAAAAAKJgACAAAAQMEEQAAAAAAomAAIAAAAAAUTAAEAAACgYAIgAAAAABRMAAQAAACAggmAAAAAAFAwARAAAAAACiYAAgAAAEDBBEAAAAAAKJgACAAAAAAFEwABAAAAoGACIAAAAAAUrP7nPQAAAPgsPPfajPQ6+ZdZnOR7G38jdx1zQJJkQU1tzrnzkYx54rlMeefdNGvUMD07rZUTdtk622/YJUly5UPjcsOfJuT+E370mY/zlVdeyQknnJCbbrqpzvLnn38+55xzTq699tqcffbZee6555IkixYtSpJUVy/5t/zvf//76dWrV0444YTstNNOOfDAA+ts55FHHsmoUaMyePDgbLXVVvnd736X8ePH57TTTvtI4xs2bFjmzZuXESNGVPb5aZs4cWJGjRqVTTfdNIceeugK1/vjH/+YO+64I7Nmzco666yTww8/PGuuueYy69XW1uY3v/lNnnrqqSxatCg9evTIYYcdloYNG650HEvvi/r1l7xMat68eTp06JDvfOc72XzzzT/Ssbz44otp2rRp1llnnY+0/pfFv3JcRx55ZI466qhssMEGdZZfdNFF6dChQ/bYY49/eXx7jByTO555IbWLF+fp049I7693SJJc/6cJGXnvE/nfqW+muqoqXdq3yaHf/laO3H6zJMnLb87MeseNSM01Z/zLY/ioxo4dm2uvvTZHHnlk+vXrt8L1br/99tx7772ZN29eOnbsmIMOOijrrrvuctf9qI+hJLnvvvty55135oMPPsjaa6+dAw88MN26dVtme6effnp++tOfVu63l156Kb/+9a/z1ltvpVWrVtlvv/2y6aabrvJ4zzzzzDz//POpqqqqLPvJT36Srl275sgjj6yz7uLFi9OjR4+ceOKJmT9/fq677ro8/fTTmT9/fvr165eDDjoo9erVq3Odm266Kbfccssyz6Gftv333z81NTWpqqpK48aN0759+2y++eYZMGBA5Tnj07Ki+3PhwoW55ppr8tRTT2XhwoVZb731cuihh6ZVq1ar3ObK7veVPbdOmjQp11xzTWbMmJHmzZtnjz32yDbbbJMkeeaZZ3L99dfnnXfeSatWrbLnnnumf//+qxzL4sWLc/311+eBBx5ITU1N+vTpk0MOOSQNGjRYZt2V7X/ixIm57rrrMmPGjLRt2zaHHHJI1ltvveXuc2WPp4/6t2WpFf1dPOecc/Lcc8/lsssuS4sWLepcZ+jQoVm8eHEuvvjiVd4+nxUBEACAIm28zpqpueaMnHn7Q/nzK69Vln9/5OhMnflerjh4t/Tq3CHza2ry26efz24jrsvdxx6Qrdf7egZtsXH2+NYGK9n6v9cJJ5xQ+X748OHp3Llz9t5778qyV155Ja1atcoTTzyR/fbbr86L0YcffjitW7f+RPudPHlyWrVqlcaNG2f8+PHp3bv3Jz+IFXj44Yfzhz/8YYUv2pb661//mtGjR+enP/1pvva1r+WWW27JyJEjc/bZZy+z7tixY/PSSy/lvPPOS4MGDXLeeeflpptuyn777feRxjRmzJgkyXvvvZenn346l19+ed55553svPPOq7zuH//4x/Ts2bO4APhFP67fHv2DJEn9A06pLDv37kfzi7seycUH7JLv9OiaZo0a5tHJU3LYr+/IzFlzcspu387X12idaRcf/28b56WXXppFixZlrbXWWul6f/rTn3L//ffnjDPOSJs2bXLrrbfmwgsvXG48+KiPoSSZMGFCbrzxxvzsZz9Lhw4dcscdd+TCCy/Mr371q8o68+bNy1VXXVUnKi1YsCDnnXde9ttvv2y55ZaZMGFCLrzwwowcOTItW7Zc6T7nzJmTY445ZrnPH0sfa0v94he/SN++fZMkN998c15//fVccMEFqa2tzVlnnZU777wzu+22W2X9KVOm5PHHH1/lcX9aTj755GywwQaZO3duJk+enGuuuSYvvvhijj/+0/sdWtn9ecstt+TVV1/N+eefnwYNGmTkyJG57rrrMnjw4JVuc2X3+8qeWz/44IP84he/yOGHH56+fftm0qRJOfPMM9O9e/c0bNgwI0eOzLBhw7Lhhhtm4sSJ+fnPf55u3bqlXbt2Kx3P2LFjM3HixFxwwQWpX79+Ro0aleeee26Z35GV7b9JkyY599xzM2TIkPTq1SuPPvpozj333Pzyl79M48aN62xnZY+nj/O3JVn138WWLVvm0UcfzYABAyrLXnzxxcyfP3+V/wj1WRMAAQD4yvjj86/k/omv5OXzf5KObZa8aG3aqEEO3qZ3duzxjazVqnmSZPQTz+WGP03IsQO2zI+u+G1ev+j4VP+/s1dOueX+TJr2Vn579A/y2ORXc8yYe/Lu7LmpV12VkfvvnO/06Jq/vf1uNj35lzlrrx0ydsL/5eU3Z2aHDbtm5P4DVji2f1WTJk3SunXrjB8/Pn369EmSzJw5M1OnTv3E0eb+++9P//79s9pqq+W+++6r80JnxIgRadGiRd5+++3MmjUrixYtylFHHZW11157pZf9s06dOuW0007LjTfemNmzZ69wLE888UT69u2bTp06JVly5uPvfve7vPHGG8vElMceeywDBw7MaqutliTZY489cuGFF37kALhUy5Yts/3226dFixa56KKL8u1vfzvNmjXLuHHjcsMNN2TOnDlp0KBBBg0alD59+uS2227LE088kQkTJmTatGnZe++9c+utt+ahhx7KwoUL07Zt2xx++OHp2LHjMvt6+eWXc9lll2XevHnp2rVrGjVqlJYtW2bffffNwoULM3r06IwfPz41NTXZYIMNcsghh6Rhw4YZNWpUWrVqlZkzZ+Yf//hH3n///QwZMiSdO3eu3Id33XVXampq0qZNmwwePDjt2rXLAw88kHHjxqWmpia1tbU55ZRTPtZxrWi7S/d52223pWHDhunbt2+dM7/+2XvvvZef/exnmTp1alZfffUMHjw4rVu3zqGHHppzzjknX/va15IseQE9fPjwXH755R/pbKv3587Pabc+kN8ctkf27LNhZfkOG3bNn087PE0bLjnT6G9vv5v1jhuRmZeelPZHnZ2/nDU431x7jSRLni9+cMlNmXbR8Znx3gc56uo788L0t7OwtjZHbr9ZjhuwZZKk03+em2O+1z8PTPprpr37flo2aZRb/3NQWjRptMy4dthhh3Tp0iUnnnjiSsffvn37DB06NKuvvnqSpF+/frnppptSU1OzzPF/1MdQkrRo0SJHH3105Xewf//+GTNmTObNm1eJJtddd1369euXJ598snK9iRMnpmnTptlqq62SJBtvvHG6dOmSp59+Ottvv/0Kf3eSZPbs2WnatOlKx5UsiTRz5syp7GP8+PHZZ599KtcdOHBgbr311koArKmpySWXXJL99tsv55577gq3++abb+bKK6/Mm2++merq6vTu3Tv77LNP6tevnyOPPDI777xzJk6cmL///e9p2rRpjj322FWOt0mTJunZs2c6duyYn/zkJ3n22WfTs2fPzJw5M1dddVVef/311NbWZscdd8zAgQOTJDNmzMhll12W1157LS1atMi+++5buY0+bGX35ze/+c3069ev8ty22Wab5Z577lnlbbuy+31lz61NmjTJj3/840qUXX/99dOmTZu88cYb6dy5cwYPHpwNN1zy+Npwww3TvHnzzJgxY5UB8A9/+EN++MMfVs6SGzZsWOWyq666KrNnz87QoUNTW1u7wv0vWLAg7dq1q/xd2mqrrXLbbbdlwoQJ6dOnT53trOzx9HH+tiQr/7uYJJtuumkefPDBOgHw4Ycf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", - argumentInfo: { - argumentName: "base64image", - formattedValue: "base64 data: iVBORw0KGg..." - } - } - ], - status: "PASSED", - durationInNanos: 493804, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 4516432, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 152463992, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 320519894, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "an element with a $ class exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "an element with a" - }, - { - value: "jgiven-html-thumbnail", - argumentInfo: { - argumentName: "multiline", - formattedValue: "jgiven-html-thumbnail" - } - }, - { - value: "class exists" - } - ], - status: "PASSED", - durationInNanos: 15772713, - depth: 0, - parentFailed: false - }, - { - name: "the image is loaded", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the image is loaded" - } - ], - status: "PASSED", - durationInNanos: 14447903, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 834530674 - } - ], - casesAsTable: false, - durationInNanos: 834530674, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#274", - description: "Scenarios of Issue #274" - } - ], - classTitle: "HTML App" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5AppTest", - testMethodName: "steps_can_have_multiple_attachments", - description: "steps can have multiple attachments", - tagIds: [ - "com.tngtech.jgiven.tags.BrowserTest", - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureAttachments" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 235801, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has a text attachment with content", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has a text attachment with content" - }, - { - value: "Some Example Attachment\nwith some example content", - argumentInfo: { - argumentName: "content", - formattedValue: "Some Example Attachment\nwith some example content" - } - } - ], - status: "PASSED", - durationInNanos: 347903, - depth: 0, - parentFailed: false - }, - { - name: "step $ of scenario $ has another text attachment with content", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "has another text attachment with content" - }, - { - value: "Another Example Attachment\nwith some example content", - argumentInfo: { - argumentName: "content", - formattedValue: "Another Example Attachment\nwith some example content" - } - } - ], - status: "PASSED", - durationInNanos: 407903, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2174316, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 49078352, - depth: 0, - parentFailed: false - }, - { - name: "the page of scenario $ is opened", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the page of scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "scenarioNr", - formattedValue: "1" - } - }, - { - value: "is opened" - } - ], - status: "PASSED", - durationInNanos: 304784681, - attachments: [ - { - title: "Screenshot", - value: "attachments/com/tngtech/jgiven/report/html5/Html5AppTest/attachment24.png", - mediaType: "image/png", - binary: true - } - ], - depth: 0, - parentFailed: false - }, - { - name: "$ attachment icons exist", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "2", - argumentInfo: { - argumentName: "nrIcons", - formattedValue: "2" - } - }, - { - value: "attachment icons exist" - } - ], - status: "PASSED", - durationInNanos: 13188994, - depth: 0, - parentFailed: false - }, - { - name: "the content of the attachment referenced by icon $ is", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the content of the attachment referenced by icon" - }, - { - value: "1", - argumentInfo: { - argumentName: "iconNr", - formattedValue: "1" - } - }, - { - value: "is" - }, - { - value: "Some Example Attachment\nwith some example content", - argumentInfo: { - argumentName: "content", - formattedValue: "Some Example Attachment\nwith some example content" - } - } - ], - status: "PASSED", - durationInNanos: 38565476, - depth: 0, - parentFailed: false - }, - { - name: "the content of the attachment referenced by icon $ is", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the content of the attachment referenced by icon" - }, - { - value: "2", - argumentInfo: { - argumentName: "iconNr", - formattedValue: "2" - } - }, - { - value: "is" - }, - { - value: "Another Example Attachment\nwith some example content", - argumentInfo: { - argumentName: "content", - formattedValue: "Another Example Attachment\nwith some example content" - } - } - ], - status: "PASSED", - durationInNanos: 36456861, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 607583749 - } - ], - casesAsTable: false, - durationInNanos: 607583749, - executionStatus: "SUCCESS", - tags: [{}, {}, {}], - classTitle: "HTML App", - expanded: false, - $$hashKey: "object:613" - } - ] - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - name: "Test Framework Execution", - scenarios: [ - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "failing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_are_ignored", - description: "failing tests annotated with Pending with failIfPassed set to true are ignored", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.Issue-#4", - "com.tngtech.jgiven.tags.FeaturePending" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test" - } - ], - status: "PASSED", - durationInNanos: 43300, - depth: 0, - parentFailed: false - }, - { - name: "the test is annotated with Pending", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test is annotated with Pending" - } - ], - status: "PASSED", - durationInNanos: 22300, - depth: 0, - parentFailed: false - }, - { - name: "failIfPassed set to true", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "failIfPassed set to true" - } - ], - status: "PASSED", - durationInNanos: 171001, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 9088565, - depth: 0, - parentFailed: false - }, - { - name: "the test is ignored", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test is ignored" - } - ], - status: "PASSED", - durationInNanos: 181601, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 12428689 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 14912707 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 46271931 - } - ], - casesAsTable: true, - durationInNanos: 73613327, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - {}, - { - value: "#4", - description: "Scenarios of Issue #4" - }, - {} - ], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:152" - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "description_annotations_on_test_classes_are_evaluated", - description: "description annotations on test classes are evaluated", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test class", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test class" - } - ], - status: "PASSED", - durationInNanos: 51101, - depth: 0, - parentFailed: false - }, - { - name: "the test class has a description annotation with value", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test class has a description annotation with value" - }, - { - value: "Test Description", - argumentInfo: { - argumentName: "value", - formattedValue: "Test Description" - } - } - ], - status: "PASSED", - durationInNanos: 192702, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 5745541, - depth: 0, - parentFailed: false - }, - { - name: "the description of the report model is", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the description of the report model is" - }, - { - value: "Test Description", - argumentInfo: { - argumentName: "description", - formattedValue: "Test Description" - } - } - ], - status: "PASSED", - durationInNanos: 202301, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 7640154 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 9046765 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 65127566 - } - ], - casesAsTable: true, - durationInNanos: 81814485, - executionStatus: "SUCCESS", - tags: [{}, {}, {}], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:149" - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "passing_tests_annotated_with_Pending_are_ignored", - description: "passing tests annotated with Pending are ignored", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.FeaturePending" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a passing test", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a passing test" - } - ], - status: "PASSED", - durationInNanos: 30700, - depth: 0, - parentFailed: false - }, - { - name: "the test is annotated with Pending", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test is annotated with Pending" - } - ], - status: "PASSED", - durationInNanos: 12400, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 1651212, - depth: 0, - parentFailed: false - }, - { - name: "the test is ignored", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test is ignored" - } - ], - status: "PASSED", - durationInNanos: 58001, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 3072422 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 10636676 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 62145845 - } - ], - casesAsTable: true, - durationInNanos: 75854943, - executionStatus: "SUCCESS", - tags: [{}, {}, {}, {}], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:154" - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "the_error_message_of_a_failing_step_is_reported", - description: "the error message of a failing step is reported", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test" - } - ], - status: "PASSED", - durationInNanos: 72300, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 2224616, - depth: 0, - parentFailed: false - }, - { - name: "the case is marked as failed", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the case is marked as failed" - } - ], - status: "PASSED", - durationInNanos: 90601, - depth: 0, - parentFailed: false - }, - { - name: "an error message is stored in the report", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "an error message is stored in the report" - } - ], - status: "PASSED", - durationInNanos: 56300, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 8485261 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 11512682 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 82237489 - } - ], - casesAsTable: true, - durationInNanos: 102235432, - executionStatus: "SUCCESS", - tags: [{}, {}, {}], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:157" - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "passing_steps_before_failing_steps_are_reported_as_passed", - description: "passing steps before failing steps are reported as passed", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test with $ steps", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test with" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "steps" - } - ], - status: "PASSED", - durationInNanos: 180002, - depth: 0, - parentFailed: false - }, - { - name: "step $ fails", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "fails" - } - ], - status: "PASSED", - durationInNanos: 5860342, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 2147815, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as passed", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "is reported as passed" - } - ], - status: "PASSED", - durationInNanos: 206901, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as failed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "is reported as failed" - } - ], - status: "PASSED", - durationInNanos: 191002, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 9748070 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 12073186 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 85057908 - } - ], - casesAsTable: true, - durationInNanos: 106879164, - executionStatus: "SUCCESS", - tags: [{}, {}, {}], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:153" - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "failing_tests_annotated_with_Pending_are_ignored", - description: "failing tests annotated with Pending are ignored", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.FeaturePending" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test" - } - ], - status: "PASSED", - durationInNanos: 26200, - depth: 0, - parentFailed: false - }, - { - name: "the test is annotated with Pending", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test is annotated with Pending" - } - ], - status: "PASSED", - durationInNanos: 12000, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 1683113, - depth: 0, - parentFailed: false - }, - { - name: "the test is ignored", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test is ignored" - } - ], - status: "PASSED", - durationInNanos: 102001, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 8930164 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 12805991 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 39764484 - } - ], - casesAsTable: true, - durationInNanos: 61500639, - executionStatus: "SUCCESS", - tags: [{}, {}, {}, {}], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:150" - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "passing_tests_annotated_with_Pending_with_failIfPassed_set_to_true_fail", - description: "passing tests annotated with Pending with failIfPassed set to true fail", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.Issue-#4", - "com.tngtech.jgiven.tags.FeaturePending" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a passing test", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a passing test" - } - ], - status: "PASSED", - durationInNanos: 25600, - depth: 0, - parentFailed: false - }, - { - name: "the test is annotated with Pending", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test is annotated with Pending" - } - ], - status: "PASSED", - durationInNanos: 11800, - depth: 0, - parentFailed: false - }, - { - name: "failIfPassed set to true", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "failIfPassed set to true" - } - ], - status: "PASSED", - durationInNanos: 9601, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 1708512, - depth: 0, - parentFailed: false - }, - { - name: "the test fails with message", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails with message" - }, - { - value: "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation.", - argumentInfo: { - argumentName: "expectedMessage", - formattedValue: "Test succeeded, but failIfPassed set to true. Now might be the right time to remove the @Pending annotation." - } - } - ], - status: "PASSED", - durationInNanos: 230101, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 8336259 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 11254380 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 49742656 - } - ], - casesAsTable: true, - durationInNanos: 69333295, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - {}, - { - value: "#4", - description: "Scenarios of Issue #4" - }, - {} - ], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:155" - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "failing_tests_annotated_with_Pending_with_executeSteps_set_to_true_are_ignored", - description: "failing tests annotated with Pending with executeSteps set to true are ignored", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.FeaturePending" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test" - } - ], - status: "PASSED", - durationInNanos: 23100, - depth: 0, - parentFailed: false - }, - { - name: "the test is annotated with Pending", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test is annotated with Pending" - } - ], - status: "PASSED", - durationInNanos: 11001, - depth: 0, - parentFailed: false - }, - { - name: "executeSteps set to true", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "executeSteps set to true" - } - ], - status: "PASSED", - durationInNanos: 20900, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 1684912, - depth: 0, - parentFailed: false - }, - { - name: "the test is ignored", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test is ignored" - } - ], - status: "PASSED", - durationInNanos: 51200, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 3141722 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 11048279 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 46086930 - } - ], - casesAsTable: true, - durationInNanos: 60276931, - executionStatus: "SUCCESS", - tags: [{}, {}, {}, {}], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:151" - }, - { - className: "com.tngtech.jgiven.testframework.TestFrameworkExecutionTest", - testMethodName: "tag_annotations_appear_in_the_report_model", - description: "tag annotations appear in the report model", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit5", - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.FeatureTags-Tags" - ], - explicitParameters: ["testFramework"], - derivedParameters: ["testFramework"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test" - } - ], - status: "PASSED", - durationInNanos: 29800, - depth: 0, - parentFailed: false - }, - { - name: "the test has a tag annotation named", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test has a tag annotation named" - }, - { - value: "TestTag", - argumentInfo: { - argumentName: "name", - formattedValue: "TestTag" - } - } - ], - status: "PASSED", - durationInNanos: 162402, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with" - }, - { - value: "JUnit", - argumentInfo: { - parameterName: "testFramework", - argumentName: "framework", - formattedValue: "JUnit" - } - } - ], - status: "PASSED", - durationInNanos: 1513811, - depth: 0, - parentFailed: false - }, - { - name: "the report model contains a tag named", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report model contains a tag named" - }, - { - value: "com.tngtech.jgiven.tests.TestTag", - argumentInfo: { - argumentName: "tagName", - formattedValue: "com.tngtech.jgiven.tests.TestTag" - } - } - ], - status: "PASSED", - durationInNanos: 463803, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["JUnit"], - derivedArguments: ["JUnit"], - status: "SUCCESS", - durationInNanos: 3787827 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["JUnit5"], - derivedArguments: ["JUnit5"], - status: "SUCCESS", - durationInNanos: 11783785 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["TestNG"], - derivedArguments: ["TestNG"], - status: "SUCCESS", - durationInNanos: 53718284 - } - ], - casesAsTable: true, - durationInNanos: 69289896, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - {}, - { - value: "Tags" - } - ], - classTitle: "Test Framework Execution", - expanded: false, - $$hashKey: "object:156" - } - ] - }, - { - className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - name: "Difference Analyzer", - scenarios: [ - { - className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - testMethodName: "the_difference_analyzer_should_find_additional_steps_in_the_middle", - description: "the difference analyzer should find additional steps in the middle", - tagIds: ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 62900, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 287702, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - } - ], - status: "PASSED", - durationInNanos: 304002, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has step" - }, - { - value: "extra step in the middle", - argumentInfo: { - argumentName: "name", - formattedValue: "extra step in the middle" - } - } - ], - status: "PASSED", - durationInNanos: 254902, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: "another step" - } - } - ], - status: "PASSED", - durationInNanos: 224502, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - } - ], - status: "PASSED", - durationInNanos: 380503, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: "another step" - } - } - ], - status: "PASSED", - durationInNanos: 272202, - depth: 0, - parentFailed: false - }, - { - name: "the difference analyzer is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the difference analyzer is executed" - } - ], - status: "PASSED", - durationInNanos: 3865428, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 269302, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "2", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "2" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is marked as diff" - } - ], - status: "PASSED", - durationInNanos: 291702, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "3", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "3" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 201301, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 195402, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "2", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "2" - } - }, - { - value: "of case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 198801, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 8318459 - } - ], - casesAsTable: false, - durationInNanos: 8318459, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Difference Analyzer", - expanded: false, - $$hashKey: "object:606" - }, - { - className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - testMethodName: "the_difference_analyzer_should_find_additional_steps_at_the_beginning", - description: "the difference analyzer should find additional steps at the beginning", - tagIds: ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 45900, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 259702, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has step" - }, - { - value: "extra step at the beginning", - argumentInfo: { - argumentName: "name", - formattedValue: "extra step at the beginning" - } - } - ], - status: "PASSED", - durationInNanos: 260202, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - } - ], - status: "PASSED", - durationInNanos: 201402, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - } - ], - status: "PASSED", - durationInNanos: 288602, - depth: 0, - parentFailed: false - }, - { - name: "the difference analyzer is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the difference analyzer is executed" - } - ], - status: "PASSED", - durationInNanos: 115301, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is marked as diff", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is marked as diff" - } - ], - status: "PASSED", - durationInNanos: 353103, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "2", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "2" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 226401, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 216301, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 3032021 - } - ], - casesAsTable: false, - durationInNanos: 3032021, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Difference Analyzer", - expanded: false, - $$hashKey: "object:604" - }, - { - className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - testMethodName: "the_difference_analyzer_should_find_differences_in_step_arguments", - description: "the difference analyzer should find differences in step arguments", - tagIds: ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 49300, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 327702, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has a step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - }, - { - value: "with argument" - }, - { - value: "foo", - argumentInfo: { - argumentName: "arg", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 259502, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "has a step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - }, - { - value: "with argument" - }, - { - value: "bar", - argumentInfo: { - argumentName: "arg", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 299702, - depth: 0, - parentFailed: false - }, - { - name: "the difference analyzer is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the difference analyzer is executed" - } - ], - status: "PASSED", - durationInNanos: 562504, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 243802, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "3", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "3" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is marked as diff" - } - ], - status: "PASSED", - durationInNanos: 14760806, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 277702, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "3", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "3" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "is marked as diff" - } - ], - status: "PASSED", - durationInNanos: 267701, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 17969330 - } - ], - casesAsTable: false, - durationInNanos: 17969330, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Difference Analyzer", - expanded: false, - $$hashKey: "object:607" - }, - { - className: "com.tngtech.jgiven.report.analysis.DifferenceAnalyzerTest", - testMethodName: "the_difference_analyzer_should_find_additional_steps_at_the_end", - description: "the difference analyzer should find additional steps at the end", - tagIds: ["com.tngtech.jgiven.tags.FeatureCaseDiffs"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 47901, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 190301, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - } - ], - status: "PASSED", - durationInNanos: 184502, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: "another step" - } - } - ], - status: "PASSED", - durationInNanos: 187201, - depth: 0, - parentFailed: false - }, - { - name: "case $ has step $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - } - ], - status: "PASSED", - durationInNanos: 190201, - depth: 0, - parentFailed: false - }, - { - name: "the difference analyzer is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the difference analyzer is executed" - } - ], - status: "PASSED", - durationInNanos: 61300, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 197501, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "2", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "2" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "is marked as diff" - } - ], - status: "PASSED", - durationInNanos: 201802, - depth: 0, - parentFailed: false - }, - { - name: "word $ of step $ of case $ is not marked as diff", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "word" - }, - { - value: "2", - argumentInfo: { - argumentName: "wordNr", - formattedValue: "2" - } - }, - { - value: "of step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "is not marked as diff" - } - ], - status: "PASSED", - durationInNanos: 212701, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 2341117 - } - ], - casesAsTable: false, - durationInNanos: 2341117, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Difference Analyzer", - expanded: false, - $$hashKey: "object:605" - } - ] - }, - { - className: "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", - name: "Ascii Doc Report Generator", - scenarios: [ - { - className: "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", - testMethodName: "the_AsciiDoc_reporter_generates_an_index_file_a_test_file_and_multiple_other_asciidoc_files", - description: "the AsciiDoc reporter generates an index file a test file and multiple other asciidoc files", - tagIds: ["com.tngtech.jgiven.tags.FeatureAsciiDocReport"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 1695912, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 3116423, - depth: 0, - parentFailed: false - }, - { - name: "the asciidoc reporter is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the asciidoc reporter is executed" - } - ], - status: "PASSED", - durationInNanos: 104707653, - depth: 0, - parentFailed: false - }, - { - name: "a file with name $ exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "a file with name" - }, - { - value: "index.asciidoc", - argumentInfo: { - argumentName: "name", - formattedValue: '"index.asciidoc"' - } - }, - { - value: "exists" - } - ], - status: "PASSED", - durationInNanos: 9958772, - depth: 0, - parentFailed: false - }, - { - name: "a file with name $ exists", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a file with name" - }, - { - value: "totalStatistics.asciidoc", - argumentInfo: { - argumentName: "name", - formattedValue: '"totalStatistics.asciidoc"' - } - }, - { - value: "exists" - } - ], - status: "PASSED", - durationInNanos: 1087808, - depth: 0, - parentFailed: false - }, - { - name: "a file with name $ exists", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a file with name" - }, - { - value: "allScenarios.asciidoc", - argumentInfo: { - argumentName: "name", - formattedValue: '"allScenarios.asciidoc"' - } - }, - { - value: "exists" - } - ], - status: "PASSED", - durationInNanos: 253502, - depth: 0, - parentFailed: false - }, - { - name: "a file with name $ exists", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a file with name" - }, - { - value: "failedScenarios.asciidoc", - argumentInfo: { - argumentName: "name", - formattedValue: '"failedScenarios.asciidoc"' - } - }, - { - value: "exists" - } - ], - status: "PASSED", - durationInNanos: 528704, - depth: 0, - parentFailed: false - }, - { - name: "a file with name $ exists", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a file with name" - }, - { - value: "pendingScenarios.asciidoc", - argumentInfo: { - argumentName: "name", - formattedValue: '"pendingScenarios.asciidoc"' - } - }, - { - value: "exists" - } - ], - status: "PASSED", - durationInNanos: 244502, - depth: 0, - parentFailed: false - }, - { - name: "a file with name $ exists", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a file with name" - }, - { - value: "features/Test.asciidoc", - argumentInfo: { - argumentName: "name", - formattedValue: '"features/Test.asciidoc"' - } - }, - { - value: "exists" - } - ], - status: "PASSED", - durationInNanos: 306902, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 126571010 - } - ], - casesAsTable: false, - durationInNanos: 126571010, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Ascii Doc Report Generator" - }, - { - className: "com.tngtech.jgiven.report.asciidoc.AsciiDocReportGeneratorTest", - testMethodName: "the_multilines_values_are_rendered_as_literal_blocks", - description: "the multilines values are rendered as literal blocks", - tagIds: ["com.tngtech.jgiven.tags.FeatureAsciiDocReport"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 259301, - depth: 0, - parentFailed: false - }, - { - name: "step $ of case $ has a formatted value $ as parameter", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "has a formatted value" - }, - { - value: "Some \ntext \nwith \nnewlines", - argumentInfo: { - argumentName: "formattedValue", - formattedValue: "Some \ntext \nwith \nnewlines" - } - }, - { - value: "as parameter" - } - ], - status: "PASSED", - durationInNanos: 438003, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 3492725, - depth: 0, - parentFailed: false - }, - { - name: "the asciidoc reporter is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the asciidoc reporter is executed" - } - ], - status: "PASSED", - durationInNanos: 36131260, - depth: 0, - parentFailed: false - }, - { - name: "the asciidoc report $ exists", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the asciidoc report" - }, - { - value: "features/Test.asciidoc", - argumentInfo: { - argumentName: "ascidocFile", - formattedValue: "features/Test.asciidoc" - } - }, - { - value: "exists" - } - ], - status: "PASSED", - durationInNanos: 482703, - depth: 0, - parentFailed: false - }, - { - name: "the literal block is added $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the literal block is added" - }, - { - value: "....\nSome \ntext \nwith \nnewlines\n....", - argumentInfo: { - argumentName: "expectedLiteral", - formattedValue: "....\nSome \ntext \nwith \nnewlines\n...." - } - } - ], - status: "PASSED", - durationInNanos: 32621635, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 115058328 - } - ], - casesAsTable: false, - durationInNanos: 115058328, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Ascii Doc Report Generator" - } - ] - }, - { - className: "com.tngtech.jgiven.impl.RepeatedStageUseTest", - name: "Repeated Stage Use", - scenarios: [ - { - className: "com.tngtech.jgiven.impl.RepeatedStageUseTest", - testMethodName: "before_stage_method_is_executed_multiple_times", - description: "before stage method is executed multiple times", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a scenario step", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a scenario step" - } - ], - status: "PASSED", - durationInNanos: 90501, - depth: 0, - parentFailed: false - }, - { - name: "a stage is completed", - words: [ - { - value: "a stage is completed" - } - ], - status: "PASSED", - durationInNanos: 84501, - depth: 0, - parentFailed: false - }, - { - name: "non repeatable lifecycle method ran", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "non repeatable lifecycle method ran" - }, - { - value: "true", - argumentInfo: { - argumentName: "value", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 4823835, - depth: 0, - parentFailed: false - }, - { - name: "repeatable lifecycle method ran", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "repeatable lifecycle method ran" - }, - { - value: "true", - argumentInfo: { - argumentName: "value", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 351103, - depth: 0, - parentFailed: false - }, - { - name: "a scenario step", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a scenario step" - } - ], - status: "PASSED", - durationInNanos: 404403, - depth: 0, - parentFailed: false - }, - { - name: "a stage is completed", - words: [ - { - value: "a stage is completed" - } - ], - status: "PASSED", - durationInNanos: 279502, - depth: 0, - parentFailed: false - }, - { - name: "repeatable lifecycle method ran", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "repeatable lifecycle method ran" - }, - { - value: "true", - argumentInfo: { - argumentName: "value", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 290903, - depth: 0, - parentFailed: false - }, - { - name: "non repeatable lifecycle method ran", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "non repeatable lifecycle method ran" - }, - { - value: "false", - argumentInfo: { - argumentName: "value", - formattedValue: "false" - } - } - ], - status: "PASSED", - durationInNanos: 213201, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 40164489 - } - ], - casesAsTable: false, - durationInNanos: 40164489, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Repeated Stage Use" - }, - { - className: "com.tngtech.jgiven.impl.RepeatedStageUseTest", - testMethodName: "after_stage_method_is_executed_multiple_times", - description: "after stage method is executed multiple times", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a scenario step", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a scenario step" - } - ], - status: "PASSED", - durationInNanos: 47101, - depth: 0, - parentFailed: false - }, - { - name: "a stage is completed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "a stage is completed" - } - ], - status: "PASSED", - durationInNanos: 101201, - depth: 0, - parentFailed: false - }, - { - name: "non repeatable lifecycle method ran", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "non repeatable lifecycle method ran" - }, - { - value: "true", - argumentInfo: { - argumentName: "value", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 257602, - depth: 0, - parentFailed: false - }, - { - name: "repeatable lifecycle method ran", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "repeatable lifecycle method ran" - }, - { - value: "true", - argumentInfo: { - argumentName: "value", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 434603, - depth: 0, - parentFailed: false - }, - { - name: "a scenario step", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a scenario step" - } - ], - status: "PASSED", - durationInNanos: 44600, - depth: 0, - parentFailed: false - }, - { - name: "a stage is completed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "a stage is completed" - } - ], - status: "PASSED", - durationInNanos: 57600, - depth: 0, - parentFailed: false - }, - { - name: "repeatable lifecycle method ran", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "repeatable lifecycle method ran" - }, - { - value: "true", - argumentInfo: { - argumentName: "value", - formattedValue: "true" - } - } - ], - status: "PASSED", - durationInNanos: 515604, - depth: 0, - parentFailed: false - }, - { - name: "non repeatable lifecycle method ran", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "non repeatable lifecycle method ran" - }, - { - value: "false", - argumentInfo: { - argumentName: "value", - formattedValue: "false" - } - } - ], - status: "PASSED", - durationInNanos: 194502, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 4888935 - } - ], - casesAsTable: false, - durationInNanos: 4888935, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Repeated Stage Use" - } - ] - }, - { - className: "com.tngtech.jgiven.junit.JUnitExecutorTest", - name: "J Unit Executor", - scenarios: [ - { - className: "com.tngtech.jgiven.junit.JUnitExecutorTest", - testMethodName: "after_stage_methods_of_stages_following_failing_stages_are_ignored", - description: "after stage methods of stages following failing stages are ignored", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test with $ steps", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test with" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "steps" - } - ], - status: "PASSED", - durationInNanos: 613505, - depth: 0, - parentFailed: false - }, - { - name: "the test has $ failing stages", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test has" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "failing stages" - } - ], - status: "PASSED", - durationInNanos: 2309517, - depth: 0, - parentFailed: false - }, - { - name: "stage $ has a failing after stage method", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "stage" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "has a failing after stage method" - } - ], - status: "PASSED", - durationInNanos: 297602, - depth: 0, - parentFailed: false - }, - { - name: "step $ fails", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "fails" - } - ], - status: "PASSED", - durationInNanos: 280602, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 126871012, - depth: 0, - parentFailed: false - }, - { - name: "the test fails", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails" - } - ], - status: "PASSED", - durationInNanos: 194902, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as failed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "is reported as failed" - } - ], - status: "PASSED", - durationInNanos: 661205, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as skipped", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "is reported as skipped" - } - ], - status: "PASSED", - durationInNanos: 281102, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 135850177 - } - ], - casesAsTable: false, - durationInNanos: 135850177, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit Executor", - expanded: false, - $$hashKey: "object:1332" - }, - { - className: "com.tngtech.jgiven.junit.JUnitExecutorTest", - testMethodName: "test_classes_with_only_ignored_test_result_in_a_valid_report", - description: "test classes with only ignored test result in a valid report", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.Issue-#25" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test class with all tests ignored", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test class with all tests ignored" - } - ], - status: "PASSED", - durationInNanos: 2911521, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 4978835, - depth: 0, - parentFailed: false - }, - { - name: "the report model is either null or empty", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report model is either null or empty" - } - ], - status: "PASSED", - durationInNanos: 224602, - extendedDescription: "With version 4.12 JUnit changed its behavior regarding test classes where all tests are @Ignored. Instead of executing class-level test rules, no rules are executed at all. In that case no report model will be generated at all by JGiven. For earlier JUnit versions JGiven will generate empty report models", - depth: 0, - parentFailed: false - }, - { - name: "has a valid class name if it is not null", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "has a valid class name if it is not null" - } - ], - status: "PASSED", - durationInNanos: 141001, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 11680684 - } - ], - casesAsTable: false, - durationInNanos: 11680684, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "#25" - } - ], - classTitle: "J Unit Executor", - expanded: false, - $$hashKey: "object:1336" - }, - { - className: "com.tngtech.jgiven.junit.JUnitExecutorTest", - testMethodName: "the_JUnit_Parametrized_runner_creates_correct_cases", - description: "the JUnit Parametrized runner creates correct cases", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a JUnit test class with the Parameterized Runner", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a JUnit test class with the Parameterized Runner" - } - ], - status: "PASSED", - durationInNanos: 97101, - depth: 0, - parentFailed: false - }, - { - name: "the test class has $ parameters", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test class has" - }, - { - value: "2", - argumentInfo: { - argumentName: "nParameters", - formattedValue: "2" - } - }, - { - value: "parameters" - } - ], - status: "PASSED", - durationInNanos: 5710741, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 67272583, - depth: 0, - parentFailed: false - }, - { - name: "the report model contains one scenario for each test method", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report model contains one scenario for each test method" - } - ], - status: "PASSED", - durationInNanos: 571804, - depth: 0, - parentFailed: false - }, - { - name: "each scenario contains $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "each scenario contains" - }, - { - value: "2", - argumentInfo: { - argumentName: "nParameters", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 500904, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 81940189 - } - ], - casesAsTable: false, - durationInNanos: 81940189, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit Executor", - expanded: false, - $$hashKey: "object:1337" - }, - { - className: "com.tngtech.jgiven.junit.JUnitExecutorTest", - testMethodName: "all_steps_of_stages_following_failing_stages_are_ignored", - description: "all steps of stages following failing stages are ignored", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test with $ steps", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test with" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "steps" - } - ], - status: "PASSED", - durationInNanos: 334602, - depth: 0, - parentFailed: false - }, - { - name: "the test has $ failing stages", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the test has" - }, - { - value: "2", - argumentInfo: { - argumentName: "n", - formattedValue: "2" - } - }, - { - value: "failing stages" - } - ], - status: "PASSED", - durationInNanos: 329002, - depth: 0, - parentFailed: false - }, - { - name: "step $ fails", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "fails" - } - ], - status: "PASSED", - durationInNanos: 278602, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 2683919, - depth: 0, - parentFailed: false - }, - { - name: "the test fails", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails" - } - ], - status: "PASSED", - durationInNanos: 78800, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as failed", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "is reported as failed" - } - ], - status: "PASSED", - durationInNanos: 348702, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as skipped", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "is reported as skipped" - } - ], - status: "PASSED", - durationInNanos: 238101, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 5513840 - } - ], - casesAsTable: false, - durationInNanos: 5513840, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit Executor", - expanded: false, - $$hashKey: "object:1333" - }, - { - className: "com.tngtech.jgiven.junit.JUnitExecutorTest", - testMethodName: "steps_following_failing_steps_are_reported_as_skipped", - description: "steps following failing steps are reported as skipped", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a failing test with $ steps", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a failing test with" - }, - { - value: "3", - argumentInfo: { - argumentName: "n", - formattedValue: "3" - } - }, - { - value: "steps" - } - ], - status: "PASSED", - durationInNanos: 363903, - depth: 0, - parentFailed: false - }, - { - name: "step $ fails", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "fails" - } - ], - status: "PASSED", - durationInNanos: 290102, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 12578390, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as failed", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "is reported as failed" - } - ], - status: "PASSED", - durationInNanos: 420203, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as skipped", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "is reported as skipped" - } - ], - status: "PASSED", - durationInNanos: 247302, - depth: 0, - parentFailed: false - }, - { - name: "step $ is reported as skipped", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "3", - argumentInfo: { - argumentName: "i", - formattedValue: "3" - } - }, - { - value: "is reported as skipped" - } - ], - status: "PASSED", - durationInNanos: 271202, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 15509911 - } - ], - casesAsTable: false, - durationInNanos: 15509911, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "J Unit Executor", - expanded: false, - $$hashKey: "object:1335" - }, - { - className: "com.tngtech.jgiven.junit.JUnitExecutorTest", - testMethodName: "exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", - description: "exception in scenario is not hidden by exception in JUnit after method", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.Issue-#49" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test class with a failing scenario and a failing after stage", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test class with a failing scenario and a failing after stage" - } - ], - status: "PASSED", - durationInNanos: 3306623, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 8229560, - depth: 0, - parentFailed: false - }, - { - name: "the test fails with message", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails with message" - }, - { - value: "assertion failed in test step", - argumentInfo: { - argumentName: "expectedMessage", - formattedValue: "assertion failed in test step" - } - } - ], - status: "PASSED", - durationInNanos: 796406, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 14999308 - } - ], - casesAsTable: false, - durationInNanos: 14999308, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "#49", - description: "Scenarios of Issue #49" - } - ], - classTitle: "J Unit Executor", - expanded: false, - $$hashKey: "object:1334" - } - ] - }, - { - className: "com.tngtech.jgiven.tests.LifecycleOrderingTest", - name: "Lifecycle Ordering", - scenarios: [ - { - className: "com.tngtech.jgiven.tests.LifecycleOrderingTest", - testMethodName: "ostensibly_empty_test", - description: "ostensibly empty test", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "an emptySetup", - words: [ - { - value: "given", - isIntroWord: true - }, - { - value: "an emptySetup" - } - ], - status: "PASSED", - durationInNanos: 109400, - depth: 0, - parentFailed: false - }, - { - name: "no action is performed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "no action is performed" - } - ], - status: "PASSED", - durationInNanos: 20700, - depth: 0, - parentFailed: false - }, - { - name: "nothing happens", - words: [ - { - value: "then", - isIntroWord: true - }, - { - value: "nothing happens" - } - ], - status: "PASSED", - durationInNanos: 11900, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 4417131 - } - ], - casesAsTable: false, - durationInNanos: 4417131, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Lifecycle Ordering" - } - ] - }, - { - className: "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", - name: "Simple Stage Repetition Use", - scenarios: [ - { - className: "com.tngtech.jgiven.impl.SimpleStageRepetitionUseTest", - testMethodName: "non_repeatable_methods_are_called_exactly_once", - description: "non repeatable methods are called exactly once", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a simple stage containing before and after methods", - words: [ - { - value: "given", - isIntroWord: true - }, - { - value: "a simple stage containing before and after methods" - } - ], - status: "PASSED", - durationInNanos: 123001, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed", - words: [ - { - value: "when", - isIntroWord: true - }, - { - value: "the test is executed" - } - ], - status: "PASSED", - durationInNanos: 60000, - depth: 0, - parentFailed: false - }, - { - name: "the before stage was called $ times", - words: [ - { - value: "then", - isIntroWord: true - }, - { - value: "the before stage was called" - }, - { - value: "1", - argumentInfo: { - argumentName: "numberOfCalls", - formattedValue: "1" - } - }, - { - value: "times" - } - ], - status: "PASSED", - durationInNanos: 6729049, - depth: 0, - parentFailed: false - }, - { - name: "the after stage method was called $ times", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the after stage method was called" - }, - { - value: "0", - argumentInfo: { - argumentName: "numberOfCalls", - formattedValue: "0" - } - }, - { - value: "times" - } - ], - status: "PASSED", - durationInNanos: 418803, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 9219067 - } - ], - casesAsTable: false, - durationInNanos: 9219067, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Simple Stage Repetition Use" - } - ] - }, - { - className: "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", - name: "Argument Analyzer", - scenarios: [ - { - className: "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", - testMethodName: "multiple_formatted_arguments_lead_to_one_parameter", - description: "multiple formatted arguments lead to one parameter", - tagIds: ["com.tngtech.jgiven.tags.Issue-#163"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "an unanalyzed report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "an unanalyzed report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 268502, - extendedDescription: "A report model where the analysers have not been executed on", - depth: 0, - parentFailed: false - }, - { - name: "parameters", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "parameters" - }, - { - value: "param1", - argumentInfo: { - argumentName: "params", - formattedValue: "param1" - } - } - ], - status: "PASSED", - durationInNanos: 625405, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 249502, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has arguments" - }, - { - value: "foo", - argumentInfo: { - argumentName: "args", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 355003, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some step"' - } - }, - { - value: "with argument" - }, - { - value: "'foo'", - argumentInfo: { - argumentName: "arg", - formattedValue: "\"'foo'\"" - } - }, - { - value: "and argument name" - }, - { - value: "arg1", - argumentInfo: { - argumentName: "argName", - formattedValue: '"arg1"' - } - } - ], - status: "PASSED", - durationInNanos: 4366532, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: '"another step"' - } - }, - { - value: "with argument" - }, - { - value: "'foo'", - argumentInfo: { - argumentName: "arg", - formattedValue: "\"'foo'\"" - } - }, - { - value: "and argument name" - }, - { - value: "arg2", - argumentInfo: { - argumentName: "argName", - formattedValue: '"arg2"' - } - } - ], - status: "PASSED", - durationInNanos: 492903, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has arguments" - }, - { - value: "bar", - argumentInfo: { - argumentName: "args", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 266102, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some step"' - } - }, - { - value: "with argument" - }, - { - value: "'bar'", - argumentInfo: { - argumentName: "arg", - formattedValue: "\"'bar'\"" - } - }, - { - value: "and argument name" - }, - { - value: "arg1", - argumentInfo: { - argumentName: "argName", - formattedValue: '"arg1"' - } - } - ], - status: "PASSED", - durationInNanos: 649704, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: '"another step"' - } - }, - { - value: "with argument" - }, - { - value: "'bar'", - argumentInfo: { - argumentName: "arg", - formattedValue: "\"'bar'\"" - } - }, - { - value: "and argument name" - }, - { - value: "arg2", - argumentInfo: { - argumentName: "argName", - formattedValue: '"arg2"' - } - } - ], - status: "PASSED", - durationInNanos: 417703, - depth: 0, - parentFailed: false - }, - { - name: "the argument analyzer is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the argument analyzer is executed" - } - ], - status: "PASSED", - durationInNanos: 247001, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has derived parameters", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the scenario has derived parameters" - }, - { - value: "arg1", - argumentInfo: { - argumentName: "parameters", - formattedValue: "arg1" - } - } - ], - status: "PASSED", - durationInNanos: 2632319, - depth: 0, - parentFailed: false - }, - { - name: "case $ has derived arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "has derived arguments" - }, - { - value: "'foo'", - argumentInfo: { - argumentName: "arguments", - formattedValue: "'foo'" - } - } - ], - status: "PASSED", - durationInNanos: 460503, - depth: 0, - parentFailed: false - }, - { - name: "case $ has derived arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "has derived arguments" - }, - { - value: "'bar'", - argumentInfo: { - argumentName: "arguments", - formattedValue: "'bar'" - } - } - ], - status: "PASSED", - durationInNanos: 399103, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 12902992 - } - ], - casesAsTable: false, - durationInNanos: 12902992, - executionStatus: "SUCCESS", - tags: [ - { - value: "#163", - description: "Scenarios of Issue #163" - } - ], - classTitle: "Argument Analyzer" - }, - { - className: "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", - testMethodName: "different_structure_prevent_data_table", - description: "different structure prevent data table", - tagIds: ["com.tngtech.jgiven.tags.Issue-#163"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "an unanalyzed report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "an unanalyzed report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 52500, - extendedDescription: "A report model where the analysers have not been executed on", - depth: 0, - parentFailed: false - }, - { - name: "parameters", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "parameters" - }, - { - value: "param1", - argumentInfo: { - argumentName: "params", - formattedValue: "param1" - } - } - ], - status: "PASSED", - durationInNanos: 245602, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 208602, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has arguments" - }, - { - value: "foo", - argumentInfo: { - argumentName: "args", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 234302, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has a step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - }, - { - value: "with argument" - }, - { - value: "foo", - argumentInfo: { - argumentName: "arg", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 325303, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has a step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: "another step" - } - }, - { - value: "with argument" - }, - { - value: "foo", - argumentInfo: { - argumentName: "arg", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 289102, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has arguments" - }, - { - value: "bar", - argumentInfo: { - argumentName: "args", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 278702, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "has a step" - }, - { - value: "some step different to the case before", - argumentInfo: { - argumentName: "name", - formattedValue: "some step different to the case before" - } - }, - { - value: "with argument" - }, - { - value: "bar", - argumentInfo: { - argumentName: "arg", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 255802, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "has a step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: "another step" - } - }, - { - value: "with argument" - }, - { - value: "bar", - argumentInfo: { - argumentName: "arg", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 344803, - depth: 0, - parentFailed: false - }, - { - name: "the argument analyzer is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the argument analyzer is executed" - } - ], - status: "PASSED", - durationInNanos: 41501, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has no derived parameters", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the scenario has no derived parameters" - } - ], - status: "PASSED", - durationInNanos: 66501, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 2952121 - } - ], - casesAsTable: false, - durationInNanos: 2952121, - executionStatus: "SUCCESS", - tags: [ - { - value: "#163", - description: "Scenarios of Issue #163" - } - ], - classTitle: "Argument Analyzer" - }, - { - className: "com.tngtech.jgiven.report.analysis.ArgumentAnalyzerTest", - testMethodName: "multiple_parameter_usages_lead_to_one_parameter", - description: "multiple parameter usages lead to one parameter", - tagIds: ["com.tngtech.jgiven.tags.Issue-#32"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "an unanalyzed report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "an unanalyzed report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 70401, - extendedDescription: "A report model where the analysers have not been executed on", - depth: 0, - parentFailed: false - }, - { - name: "parameters", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "parameters" - }, - { - value: "param1", - argumentInfo: { - argumentName: "params", - formattedValue: "param1" - } - } - ], - status: "PASSED", - durationInNanos: 366203, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 298802, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has arguments" - }, - { - value: "foo", - argumentInfo: { - argumentName: "args", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 419103, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has a step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - }, - { - value: "with argument" - }, - { - value: "foo", - argumentInfo: { - argumentName: "arg", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 395103, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has a step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: "another step" - } - }, - { - value: "with argument" - }, - { - value: "foo", - argumentInfo: { - argumentName: "arg", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 302002, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has arguments" - }, - { - value: "bar", - argumentInfo: { - argumentName: "args", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 338002, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "has a step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - }, - { - value: "with argument" - }, - { - value: "bar", - argumentInfo: { - argumentName: "arg", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 292602, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - } - }, - { - value: "has a step" - }, - { - value: "another step", - argumentInfo: { - argumentName: "name", - formattedValue: "another step" - } - }, - { - value: "with argument" - }, - { - value: "bar", - argumentInfo: { - argumentName: "arg", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 237702, - depth: 0, - parentFailed: false - }, - { - name: "the argument analyzer is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the argument analyzer is executed" - } - ], - status: "PASSED", - durationInNanos: 129901, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has derived parameters", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the scenario has derived parameters" - }, - { - value: "param1", - argumentInfo: { - argumentName: "parameters", - formattedValue: "param1" - } - } - ], - status: "PASSED", - durationInNanos: 239802, - depth: 0, - parentFailed: false - }, - { - name: "case $ has derived arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - }, - { - value: "has derived arguments" - }, - { - value: "foo", - argumentInfo: { - argumentName: "arguments", - formattedValue: "foo" - } - } - ], - status: "PASSED", - durationInNanos: 250302, - depth: 0, - parentFailed: false - }, - { - name: "case $ has derived arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "2" - } - }, - { - value: "has derived arguments" - }, - { - value: "bar", - argumentInfo: { - argumentName: "arguments", - formattedValue: "bar" - } - } - ], - status: "PASSED", - durationInNanos: 266302, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 4819435 - } - ], - casesAsTable: false, - durationInNanos: 4819435, - executionStatus: "SUCCESS", - tags: [ - { - value: "#32", - description: "Scenarios of Issue #32" - } - ], - classTitle: "Argument Analyzer" - } - ] - }, - { - className: "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", - name: "De Einfacher Szenario", - scenarios: [ - { - className: "com.tngtech.jgiven.junit.lang.de.DeEinfacherSzenarioTest", - testMethodName: "Szenarien_können_in_deutsch_geschrieben_werden", - description: "Szenarien können in deutsch geschrieben werden", - tagIds: ["com.tngtech.jgiven.tags.FeatureGerman"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "ein deutsches Projekt", - words: [ - { - value: "gegeben", - isIntroWord: true - }, - { - value: "ein deutsches Projekt" - } - ], - status: "PASSED", - durationInNanos: 157101, - depth: 0, - parentFailed: false - }, - { - name: "JGiven verwendet wird", - words: [ - { - value: "wenn", - isIntroWord: true - }, - { - value: "JGiven verwendet wird" - } - ], - status: "PASSED", - durationInNanos: 193101, - depth: 0, - parentFailed: false - }, - { - name: "die Szenarien in deutsch geschrieben werden", - words: [ - { - value: "und", - isIntroWord: true - }, - { - value: "die Szenarien in deutsch geschrieben werden" - } - ], - status: "PASSED", - durationInNanos: 43301, - depth: 0, - parentFailed: false - }, - { - name: "generiert JGiven deutsche Berichte", - words: [ - { - value: "dann", - isIntroWord: true - }, - { - value: "generiert JGiven deutsche Berichte" - } - ], - status: "PASSED", - durationInNanos: 808805, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 4559333 - } - ], - casesAsTable: false, - durationInNanos: 4559333, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "De Einfacher Szenario", - expanded: false, - $$hashKey: "object:602" - } - ] - }, - { - className: "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", - name: "Test With Exceptions In After Method", - scenarios: [ - { - className: "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod", - testMethodName: "test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method", - description: "test that exception in scenario is not hidden by exception in JUnit after method", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "nothing", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "nothing" - } - ], - status: "PASSED", - durationInNanos: 105601, - depth: 0, - parentFailed: false - }, - { - name: "a step fails", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "a step fails" - } - ], - status: "FAILED", - durationInNanos: 538304, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "FAILED", - errorMessage: "java.lang.AssertionError: assertion failed in test step", - stackTrace: [ - "com.tngtech.jgiven.tests.WhenTestStage.a_step_fails(WhenTestStage.java:12)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails$accessor$1jM72YVK(Unknown Source)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R$auxiliary$vDZEneT2.call(Unknown Source)", - "com.tngtech.jgiven.tests.WhenTestStage$ByteBuddy$OfW5Gt3R.a_step_fails(Unknown Source)", - "com.tngtech.jgiven.tests.TestWithExceptionsInAfterMethod.test_that_exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(TestWithExceptionsInAfterMethod.java:22)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)", - "org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)", - "org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)", - "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)", - "org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)", - "org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)", - "org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)", - "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "java.base/java.util.ArrayList.forEach(ArrayList.java:1541)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)", - "org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)", - "org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)", - "org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)", - "org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)", - "org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)", - "org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)", - "org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)", - "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)", - "org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)", - "org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)", - "com.tngtech.jgiven.junit5.JUnit5Executor.run(JUnit5Executor.java:35)", - "com.tngtech.jgiven.junit5.JUnit5Executor.execute(JUnit5Executor.java:26)", - "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with(WhenTestFramework.java:38)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with$accessor$abQPR6ej(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$S9cYez73.call(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework.the_test_class_is_executed_with_JUnit5(WhenTestFramework.java:60)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5$accessor$abQPR6ej(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy$auxiliary$jkepiHtG.call(Unknown Source)", - "com.tngtech.jgiven.testframework.WhenTestFramework$ByteBuddy$wdz0rmMy.the_test_class_is_executed_with_JUnit5(Unknown Source)", - "com.tngtech.jgiven.junit5.JUnit5ExecutorTest.exception_in_scenario_is_not_hidden_by_exception_in_JUnit_after_method(JUnit5ExecutorTest.java:43)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)", - "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)", - "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)", - "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)", - "com.tngtech.jgiven.junit.JGivenMethodRule$1.evaluate(JGivenMethodRule.java:73)", - "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", - "org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)", - "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)", - "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)", - "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)", - "org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)", - "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)", - "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)", - "org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)", - "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)", - "org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)", - "org.junit.rules.RunRules.evaluate(RunRules.java:20)", - "org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)", - "org.junit.runners.ParentRunner.run(ParentRunner.java:413)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)", - "org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)", - "org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)", - "org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", - "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", - "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", - "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)", - "org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)", - "org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)", - "org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)", - "org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)", - "org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)", - "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)", - "org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)", - "worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)", - "worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)" - ], - durationInNanos: 5174537 - } - ], - casesAsTable: false, - durationInNanos: 5174537, - executionStatus: "FAILED", - tags: [], - classTitle: "Test With Exceptions In After Method" - } - ] - }, - { - className: "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", - name: "Parallelization Error Prevention", - scenarios: [ - { - className: "com.tngtech.jgiven.testng.ParallelizationErrorPreventionTest", - testMethodName: "attempting_to_run_testNG_in_parallel_with_injected_stages_is_prevented", - description: "attempting to run testNG in parallel with injected stages is prevented", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.Issue-#829" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a testNG class with parallel tests and injected stages", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a testNG class with parallel tests and injected stages" - } - ], - status: "PASSED", - durationInNanos: 1732913, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed with TestNG", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed with TestNG" - } - ], - status: "PASSED", - durationInNanos: 51989872, - depth: 0, - parentFailed: false - }, - { - name: "the test fails with message", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the test fails with message" - }, - { - value: "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information.", - argumentInfo: { - argumentName: "expectedMessage", - formattedValue: "JGiven does not support using multi-threading and stage injection in TestNG at the same time due to their different lifecycle models. Please switch to single threaded execution or provide stages via inheriting from ScenarioTest. This exception indicates that you used JGiven in a wrong way. Please consult the JGiven documentation at http://jgiven.org/docs and the JGiven API documentation at http://jgiven.org/javadoc/ for further information." - } - } - ], - status: "PASSED", - durationInNanos: 323302, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 55119094 - } - ], - casesAsTable: false, - durationInNanos: 55119094, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "#829", - description: "Scenarios of Issue #829" - } - ], - classTitle: "Parallelization Error Prevention", - expanded: false, - $$hashKey: "object:148" - } - ] - }, - { - className: "com.tngtech.jgiven.testng.DataProviderTestNgTest", - name: "Data Provider Test Ng", - scenarios: [ - { - className: "com.tngtech.jgiven.testng.DataProviderTestNgTest", - testMethodName: "a_scenario_with_one_failing_case_still_executes_the_following_ones", - description: "a scenario with one failing case still executes the following ones", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTestNg", - "com.tngtech.jgiven.tags.Issue-#123" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a TestNG test with two cases and the first one fails", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a TestNG test with two cases and the first one fails", - $$hashKey: "object:444" - } - ], - status: "PASSED", - durationInNanos: 483504, - depth: 0, - parentFailed: false, - $$hashKey: "object:407" - }, - { - name: "the test class is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with", - $$hashKey: "object:449" - }, - { - value: "TestNG", - argumentInfo: { - argumentName: "framework", - formattedValue: "TestNG" - }, - $$hashKey: "object:450" - } - ], - status: "PASSED", - durationInNanos: 68705692, - depth: 0, - parentFailed: false, - $$hashKey: "object:408" - }, - { - name: "$ tests fail", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "1", - argumentInfo: { - argumentName: "nFailedTests", - formattedValue: "1" - }, - $$hashKey: "object:456" - }, - { - value: "tests fail", - $$hashKey: "object:457" - } - ], - status: "PASSED", - durationInNanos: 905906, - depth: 0, - parentFailed: false, - $$hashKey: "object:409" - }, - { - name: "the report model contains one scenario with $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report model contains one scenario with", - $$hashKey: "object:463" - }, - { - value: "2", - argumentInfo: { - argumentName: "nCases", - formattedValue: "2" - }, - $$hashKey: "object:464" - }, - { - value: "cases", - $$hashKey: "object:465" - } - ], - status: "PASSED", - durationInNanos: 257701, - depth: 0, - parentFailed: false, - $$hashKey: "object:410" - }, - { - name: "the scenario has execution status", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has execution status", - $$hashKey: "object:473" - }, - { - value: "FAILED", - argumentInfo: { - argumentName: "status", - formattedValue: "FAILED" - }, - $$hashKey: "object:474" - } - ], - status: "PASSED", - durationInNanos: 120001, - depth: 0, - parentFailed: false, - $$hashKey: "object:411" - }, - { - name: "case $ has status", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case", - $$hashKey: "object:480" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - }, - $$hashKey: "object:481" - }, - { - value: "has status", - $$hashKey: "object:482" - }, - { - value: "FAILED", - argumentInfo: { - argumentName: "status", - formattedValue: "FAILED" - }, - $$hashKey: "object:483" - } - ], - status: "PASSED", - durationInNanos: 192701, - depth: 0, - parentFailed: false, - $$hashKey: "object:412" - }, - { - name: "case $ has status", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case", - $$hashKey: "object:493" - }, - { - value: "2", - argumentInfo: { - argumentName: "i", - formattedValue: "2" - }, - $$hashKey: "object:494" - }, - { - value: "has status", - $$hashKey: "object:495" - }, - { - value: "SUCCESS", - argumentInfo: { - argumentName: "status", - formattedValue: "SUCCESS" - }, - $$hashKey: "object:496" - } - ], - status: "PASSED", - durationInNanos: 212502, - depth: 0, - parentFailed: false, - $$hashKey: "object:413" - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 72215616, - $$hashKey: "object:404" - } - ], - casesAsTable: false, - durationInNanos: 72215616, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "#123", - description: "Scenarios of Issue #123" - } - ], - classTitle: "Data Provider Test Ng", - expanded: false, - $$hashKey: "object:146" - } - ] - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - name: "Plain Text Scenario Writer", - scenarios: [ - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "data_tables_are_generated_correctly_in_text_reports", - description: "data tables are generated correctly in text reports", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables", - "com.tngtech.jgiven.tags.Issue-#34" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 71801, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ default cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "3", - argumentInfo: { - argumentName: "ncases", - formattedValue: "3" - } - }, - { - value: "default cases" - } - ], - status: "PASSED", - durationInNanos: 264302, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "43", - argumentInfo: { - argumentName: "arg", - formattedValue: '"43"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg1", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg1"' - } - } - ], - status: "PASSED", - durationInNanos: 332403, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "another arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"another arg step"' - } - }, - { - value: "with argument" - }, - { - value: "arg11", - argumentInfo: { - argumentName: "arg", - formattedValue: '"arg11"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg2", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg2"' - } - } - ], - status: "PASSED", - durationInNanos: 271302, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "4", - argumentInfo: { - argumentName: "arg", - formattedValue: '"4"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg1", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg1"' - } - } - ], - status: "PASSED", - durationInNanos: 261702, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "another arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"another arg step"' - } - }, - { - value: "with argument" - }, - { - value: "arg21", - argumentInfo: { - argumentName: "arg", - formattedValue: '"arg21"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg2", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg2"' - } - } - ], - status: "PASSED", - durationInNanos: 256502, - depth: 0, - parentFailed: false - }, - { - name: "case $ fails with error message", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "fails with error message" - }, - { - value: "Some Error", - argumentInfo: { - argumentName: "errorMessage", - formattedValue: "Some Error" - } - } - ], - status: "PASSED", - durationInNanos: 218602, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "3", - argumentInfo: { - argumentName: "ncase", - formattedValue: "3" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "1234567", - argumentInfo: { - argumentName: "arg", - formattedValue: '"1234567"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg1", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg1"' - } - } - ], - status: "PASSED", - durationInNanos: 267002, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "3", - argumentInfo: { - argumentName: "ncase", - formattedValue: "3" - } - }, - { - value: "has a when step" - }, - { - value: "another arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"another arg step"' - } - }, - { - value: "with argument" - }, - { - value: "arg31", - argumentInfo: { - argumentName: "arg", - formattedValue: '"arg31"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg2", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg2"' - } - } - ], - status: "PASSED", - durationInNanos: 245302, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 12775591, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "", - argumentInfo: { - argumentName: "line", - formattedValue: "" - } - } - ], - status: "PASSED", - durationInNanos: 400403, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "", - argumentInfo: { - argumentName: "line", - formattedValue: "" - } - } - ], - status: "PASSED", - durationInNanos: 157202, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n", - argumentInfo: { - argumentName: "line", - formattedValue: "\n | # | aArg1 | aArg2 | Status |\n +---+---------+-------+--------------------+\n | 1 | 43 | arg11 | Success |\n | 2 | 4 | arg21 | Failed: Some Error |\n | 3 | 1234567 | arg31 | Success |\n" - } - } - ], - status: "PASSED", - durationInNanos: 122501, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 17576626 - } - ], - casesAsTable: false, - durationInNanos: 17576626, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#34", - description: "Scenarios of Issue #34" - } - ], - classTitle: "Plain Text Scenario Writer", - expanded: false, - $$hashKey: "object:619" - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "new_lines_in_data_tables_do_not_break_the_table_layout", - description: "new lines in data tables do not break the table layout", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables", - "com.tngtech.jgiven.tags.Issue-#152" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 44401, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ default cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "default cases" - } - ], - status: "PASSED", - durationInNanos: 186101, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "1\n2", - argumentInfo: { - argumentName: "arg", - formattedValue: '"1\n2"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg1", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg1"' - } - } - ], - status: "PASSED", - durationInNanos: 431703, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "4", - argumentInfo: { - argumentName: "arg", - formattedValue: '"4"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg1", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg1"' - } - } - ], - status: "PASSED", - durationInNanos: 581705, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 8388660, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "", - argumentInfo: { - argumentName: "line", - formattedValue: "" - } - } - ], - status: "PASSED", - durationInNanos: 176901, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n", - argumentInfo: { - argumentName: "line", - formattedValue: "\n | # | aArg1 | Status |\n +---+-------+---------+\n | 1 | 1 | Success |\n | | 2 | |\n | 2 | 4 | Success |\n" - } - } - ], - status: "PASSED", - durationInNanos: 159601, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 11461882 - } - ], - casesAsTable: false, - durationInNanos: 11461882, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#152", - description: "Scenarios of Issue #152" - } - ], - classTitle: "Plain Text Scenario Writer", - expanded: false, - $$hashKey: "object:621" - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "data_tables_are_generated_for_empty_strings", - description: "data tables are generated for empty strings", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 45101, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ default cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "default cases" - } - ], - status: "PASSED", - durationInNanos: 199201, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "non empty string", - argumentInfo: { - argumentName: "arg", - formattedValue: '"non empty string"' - } - }, - { - value: "and argument name" - }, - { - value: "arg", - argumentInfo: { - argumentName: "argName", - formattedValue: '"arg"' - } - } - ], - status: "PASSED", - durationInNanos: 300903, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "", - argumentInfo: { - argumentName: "arg", - formattedValue: '""' - } - }, - { - value: "and argument name" - }, - { - value: "arg", - argumentInfo: { - argumentName: "argName", - formattedValue: '"arg"' - } - } - ], - status: "PASSED", - durationInNanos: 261002, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 399503, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "", - argumentInfo: { - argumentName: "line", - formattedValue: "" - } - } - ], - status: "PASSED", - durationInNanos: 141801, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n", - argumentInfo: { - argumentName: "line", - formattedValue: "\n | # | arg | Status |\n +---+------------------+---------+\n | 1 | non empty string | Success |\n | 2 | | Success |\n" - } - } - ], - status: "PASSED", - durationInNanos: 115001, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 2541418 - } - ], - casesAsTable: false, - durationInNanos: 2541418, - executionStatus: "SUCCESS", - tags: [{}, {}], - classTitle: "Plain Text Scenario Writer", - expanded: false, - $$hashKey: "object:620" - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "ignored_steps_marked_in_text_reports", - description: "ignored steps marked in text reports", - tagIds: ["com.tngtech.jgiven.tags.FeatureTextReport"], - explicitParameters: ["status", "expectedText"], - derivedParameters: ["status", "expectedText"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 47800, - depth: 0, - parentFailed: false - }, - { - name: "step $ is named", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "is named" - }, - { - value: "something happens", - argumentInfo: { - argumentName: "name", - formattedValue: "something happens" - } - } - ], - status: "PASSED", - durationInNanos: 240202, - depth: 0, - parentFailed: false - }, - { - name: "step $ has status", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "has status" - }, - { - value: "PASSED", - argumentInfo: { - parameterName: "status", - argumentName: "status", - formattedValue: "PASSED" - } - } - ], - status: "PASSED", - durationInNanos: 187901, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 231501, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "something happens", - argumentInfo: { - parameterName: "expectedText", - argumentName: "line", - formattedValue: "something happens" - } - } - ], - status: "PASSED", - durationInNanos: 152501, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["PASSED", "something happens"], - derivedArguments: ["PASSED", "something happens"], - status: "SUCCESS", - durationInNanos: 1978214 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["FAILED", "something happens (failed)"], - derivedArguments: ["FAILED", "something happens (failed)"], - status: "SUCCESS", - durationInNanos: 10393174 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["SKIPPED", "something happens (skipped)"], - derivedArguments: ["SKIPPED", "something happens (skipped)"], - status: "SUCCESS", - durationInNanos: 2467018 - }, - { - caseNr: 4, - steps: [], - explicitArguments: ["PENDING", "something happens (pending)"], - derivedArguments: ["PENDING", "something happens (pending)"], - status: "SUCCESS", - durationInNanos: 12376589 - } - ], - casesAsTable: true, - durationInNanos: 27214995, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Plain Text Scenario Writer" - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "table_annotations_at_parameters_lead_to_data_tables_in_the_report", - description: "table annotations at parameters lead to data tables in the report", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.Issue-#52", - "com.tngtech.jgiven.tags.FeatureDataTables" - ], - explicitParameters: ["headerType", "hasHeaderLine"], - derivedParameters: ["headerType", "line"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 78601, - depth: 0, - parentFailed: false - }, - { - name: "a step has a data table with following values", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a step has a data table with following values" - }, - { - value: "[[foo, bar], [1, a], [2, b]]", - argumentInfo: { - argumentName: "dataTable", - dataTable: { - headerType: "HORIZONTAL", - data: [ - ["foo", "bar"], - ["1", "a"], - ["2", "b"] - ] - } - } - } - ], - status: "PASSED", - durationInNanos: 26546090, - depth: 0, - parentFailed: false - }, - { - name: "header type set to", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "header type set to" - }, - { - value: "VERTICAL", - argumentInfo: { - parameterName: "headerType", - argumentName: "headerType", - formattedValue: "VERTICAL" - } - } - ], - status: "PASSED", - durationInNanos: 211101, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 465404, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n", - argumentInfo: { - parameterName: "line", - argumentName: "line", - formattedValue: "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" - } - } - ], - status: "PASSED", - durationInNanos: 227502, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["VERTICAL", "false"], - derivedArguments: [ - "VERTICAL", - "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" - ], - status: "SUCCESS", - durationInNanos: 28951607 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["HORIZONTAL", "true"], - derivedArguments: [ - "HORIZONTAL", - "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" - ], - status: "SUCCESS", - durationInNanos: 1995914 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["NONE", "false"], - derivedArguments: [ - "NONE", - "\n | foo | bar |\n | 1 | a |\n | 2 | b |\n" - ], - status: "SUCCESS", - durationInNanos: 1839113 - }, - { - caseNr: 4, - steps: [], - explicitArguments: ["BOTH", "true"], - derivedArguments: [ - "BOTH", - "\n | foo | bar |\n +-----+-----+\n | 1 | a |\n | 2 | b |\n" - ], - status: "SUCCESS", - durationInNanos: 1593212 - } - ], - casesAsTable: true, - durationInNanos: 34379846, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "#52", - description: "Scenarios of Issue #52" - }, - {} - ], - classTitle: "Plain Text Scenario Writer", - expanded: false, - $$hashKey: "object:623" - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "arguments_are_correctly_printed_in_text_reports_for_data_tables", - description: "arguments are correctly printed in text reports for data tables", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables", - "com.tngtech.jgiven.tags.Issue-#10" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 37100, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has parameters", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has parameters" - }, - { - value: "param1", - argumentInfo: { - argumentName: "params", - formattedValue: "param1" - } - } - ], - status: "PASSED", - durationInNanos: 297702, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ default cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "default cases" - } - ], - status: "PASSED", - durationInNanos: 179602, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has arguments" - }, - { - value: "arg10", - argumentInfo: { - argumentName: "args", - formattedValue: "arg10" - } - } - ], - status: "PASSED", - durationInNanos: 147301, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "arg10", - argumentInfo: { - argumentName: "arg", - formattedValue: '"arg10"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg"' - } - } - ], - status: "PASSED", - durationInNanos: 312002, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has arguments" - }, - { - value: "arg20", - argumentInfo: { - argumentName: "args", - formattedValue: "arg20" - } - } - ], - status: "PASSED", - durationInNanos: 283702, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "arg20", - argumentInfo: { - argumentName: "arg", - formattedValue: '"arg20"' - } - }, - { - value: "and argument name" - }, - { - value: "aArg", - argumentInfo: { - argumentName: "argName", - formattedValue: '"aArg"' - } - } - ], - status: "PASSED", - durationInNanos: 334102, - depth: 0, - parentFailed: false - }, - { - name: "all cases have a step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "all cases have a step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - }, - { - value: "with argument" - }, - { - value: "someArg", - argumentInfo: { - argumentName: "arg", - formattedValue: "someArg" - } - } - ], - status: "PASSED", - durationInNanos: 206201, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 5862042, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "some step someArg", - argumentInfo: { - argumentName: "line", - formattedValue: "some step someArg" - } - } - ], - status: "PASSED", - durationInNanos: 162401, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "some arg step ", - argumentInfo: { - argumentName: "line", - formattedValue: "some arg step " - } - } - ], - status: "PASSED", - durationInNanos: 130101, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 9048065 - } - ], - casesAsTable: false, - durationInNanos: 9048065, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#10", - description: "Scenarios of Issue #10" - } - ], - classTitle: "Plain Text Scenario Writer", - expanded: false, - $$hashKey: "object:618" - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "cases_are_generated_in_text_reports", - description: "cases are generated in text reports", - tagIds: ["com.tngtech.jgiven.tags.FeatureTextReport"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 39201, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ default cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "default cases" - } - ], - status: "PASSED", - durationInNanos: 227401, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "some step", - argumentInfo: { - argumentName: "name", - formattedValue: "some step" - } - }, - { - value: "with argument" - }, - { - value: "someArg", - argumentInfo: { - argumentName: "arg", - formattedValue: "someArg" - } - } - ], - status: "PASSED", - durationInNanos: 152002, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 519504, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "Case 1:", - argumentInfo: { - argumentName: "line", - formattedValue: "Case 1:" - } - } - ], - status: "PASSED", - durationInNanos: 145001, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "Case 2:", - argumentInfo: { - argumentName: "line", - formattedValue: "Case 2:" - } - } - ], - status: "PASSED", - durationInNanos: 113801, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "When some step someArg", - argumentInfo: { - argumentName: "line", - formattedValue: "When some step someArg" - } - } - ], - status: "PASSED", - durationInNanos: 120201, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 1955114 - } - ], - casesAsTable: false, - durationInNanos: 1955114, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Plain Text Scenario Writer" - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "a_description_column_is_generated_if_cases_have_a_description", - description: "a description column is generated if cases have a description", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 38700, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ default cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "default cases" - } - ], - status: "PASSED", - durationInNanos: 177502, - depth: 0, - parentFailed: false - }, - { - name: "case $ has description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has description" - }, - { - value: "some test description", - argumentInfo: { - argumentName: "description", - formattedValue: "some test description" - } - } - ], - status: "PASSED", - durationInNanos: 165301, - depth: 0, - parentFailed: false - }, - { - name: "case $ has description", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has description" - }, - { - value: "another case", - argumentInfo: { - argumentName: "description", - formattedValue: "another case" - } - } - ], - status: "PASSED", - durationInNanos: 146901, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 367002, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n", - argumentInfo: { - argumentName: "line", - formattedValue: "\n | # | Description | Status |\n +---+-----------------------+---------+\n | 1 | some test description | Success |\n | 2 | another case | Success |\n" - } - } - ], - status: "PASSED", - durationInNanos: 161201, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 1918714 - } - ], - casesAsTable: false, - durationInNanos: 1918714, - executionStatus: "SUCCESS", - tags: [{}, {}], - classTitle: "Plain Text Scenario Writer", - expanded: false, - $$hashKey: "object:617" - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextScenarioWriterTest", - testMethodName: "parameters_with_equal_values_but_different_formatting_result_in_different_placeholders", - description: "parameters with equal values but different formatting result in different placeholders", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureTextReport", - "com.tngtech.jgiven.tags.FeatureDataTables", - "com.tngtech.jgiven.tags.Issue-#104" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model with one scenario", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model with one scenario" - } - ], - status: "PASSED", - durationInNanos: 49000, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has $ cases", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the scenario has" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncases", - formattedValue: "2" - } - }, - { - value: "cases" - } - ], - status: "PASSED", - durationInNanos: 194301, - depth: 0, - parentFailed: false - }, - { - name: "parameters", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "parameters" - }, - { - value: "aParam, anotherParam", - argumentInfo: { - argumentName: "params", - formattedValue: "aParam, anotherParam" - } - } - ], - status: "PASSED", - durationInNanos: 220302, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "given", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has arguments" - }, - { - value: "false, false", - argumentInfo: { - argumentName: "args", - formattedValue: "false, false" - } - } - ], - status: "PASSED", - durationInNanos: 172601, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "false", - argumentInfo: { - argumentName: "arg", - formattedValue: '"false"' - } - }, - { - value: "and argument name" - }, - { - value: "anArg", - argumentInfo: { - argumentName: "argName", - formattedValue: '"anArg"' - } - } - ], - status: "PASSED", - durationInNanos: 304402, - depth: 0, - parentFailed: false - }, - { - name: "formatted value", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "formatted value" - }, - { - value: "off", - argumentInfo: { - argumentName: "formattedValue", - formattedValue: '"off"' - } - } - ], - status: "PASSED", - durationInNanos: 193001, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "1", - argumentInfo: { - argumentName: "ncase", - formattedValue: "1" - } - }, - { - value: "has a when step" - }, - { - value: "another arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"another arg step"' - } - }, - { - value: "with argument" - }, - { - value: "false", - argumentInfo: { - argumentName: "arg", - formattedValue: '"false"' - } - }, - { - value: "and argument name" - }, - { - value: "anotherArg", - argumentInfo: { - argumentName: "argName", - formattedValue: '"anotherArg"' - } - } - ], - status: "PASSED", - durationInNanos: 288402, - depth: 0, - parentFailed: false - }, - { - name: "formatted value", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "formatted value" - }, - { - value: "is not", - argumentInfo: { - argumentName: "formattedValue", - formattedValue: '"is not"' - } - } - ], - status: "PASSED", - durationInNanos: 165201, - depth: 0, - parentFailed: false - }, - { - name: "case $ has arguments", - words: [ - { - value: "given", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has arguments" - }, - { - value: "true, true", - argumentInfo: { - argumentName: "args", - formattedValue: "true, true" - } - } - ], - status: "PASSED", - durationInNanos: 192601, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "some arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"some arg step"' - } - }, - { - value: "with argument" - }, - { - value: "true", - argumentInfo: { - argumentName: "arg", - formattedValue: '"true"' - } - }, - { - value: "and argument name" - }, - { - value: "anArg", - argumentInfo: { - argumentName: "argName", - formattedValue: '"anArg"' - } - } - ], - status: "PASSED", - durationInNanos: 283102, - depth: 0, - parentFailed: false - }, - { - name: "formatted value", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "formatted value" - }, - { - value: "on", - argumentInfo: { - argumentName: "formattedValue", - formattedValue: '"on"' - } - } - ], - status: "PASSED", - durationInNanos: 188502, - depth: 0, - parentFailed: false - }, - { - name: "case $ has a when step $ with argument $ and argument name $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "case" - }, - { - value: "2", - argumentInfo: { - argumentName: "ncase", - formattedValue: "2" - } - }, - { - value: "has a when step" - }, - { - value: "another arg step", - argumentInfo: { - argumentName: "name", - formattedValue: '"another arg step"' - } - }, - { - value: "with argument" - }, - { - value: "true", - argumentInfo: { - argumentName: "arg", - formattedValue: '"true"' - } - }, - { - value: "and argument name" - }, - { - value: "anotherArg", - argumentInfo: { - argumentName: "argName", - formattedValue: '"anotherArg"' - } - } - ], - status: "PASSED", - durationInNanos: 234001, - depth: 0, - parentFailed: false - }, - { - name: "formatted value", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "formatted value" - }, - { - value: "is", - argumentInfo: { - argumentName: "formattedValue", - formattedValue: '"is"' - } - } - ], - status: "PASSED", - durationInNanos: 7903256, - depth: 0, - parentFailed: false - }, - { - name: "the plain text report is generated", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text report is generated" - } - ], - status: "PASSED", - durationInNanos: 417403, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "", - argumentInfo: { - argumentName: "line", - formattedValue: "" - } - } - ], - status: "PASSED", - durationInNanos: 183401, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "", - argumentInfo: { - argumentName: "line", - formattedValue: "" - } - } - ], - status: "PASSED", - durationInNanos: 217201, - depth: 0, - parentFailed: false - }, - { - name: "the report contains text", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report contains text" - }, - { - value: "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n", - argumentInfo: { - argumentName: "line", - formattedValue: "\n | # | anArg | anotherArg | Status |\n +---+-------+------------+---------+\n | 1 | off | is not | Success |\n | 2 | on | is | Success |\n" - } - } - ], - status: "PASSED", - durationInNanos: 114001, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 19413739 - } - ], - casesAsTable: false, - durationInNanos: 19413739, - executionStatus: "SUCCESS", - tags: [ - {}, - {}, - { - value: "#104", - description: "Scenarios of Issue #104" - } - ], - classTitle: "Plain Text Scenario Writer", - expanded: false, - $$hashKey: "object:622" - } - ] - }, - { - className: "com.tngtech.jgiven.impl.ScenarioExecutorTest", - name: "Scenario Executor", - scenarios: [ - { - className: "com.tngtech.jgiven.impl.ScenarioExecutorTest", - testMethodName: "step_methods_can_have_primitive_arrays_as_parameters", - description: "step methods can have primitive arrays as parameters", - tagIds: [ - "com.tngtech.jgiven.tags.Issue-#1", - "com.tngtech.jgiven.tags.FeatureStepParameters" - ], - explicitParameters: ["type", "array"], - derivedParameters: ["type", "array"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a step method with a primitive $ array $ as parameter", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a step method with a primitive", - $$hashKey: "object:1282" - }, - { - value: "byte", - argumentInfo: { - parameterName: "type", - argumentName: "type", - formattedValue: "byte" - }, - $$hashKey: "object:1283" - }, - { - value: "array", - $$hashKey: "object:1284" - }, - { - value: "1, 2, 3", - argumentInfo: { - parameterName: "array", - argumentName: "array", - formattedValue: "1, 2, 3" - }, - $$hashKey: "object:1285" - }, - { - value: "as parameter", - $$hashKey: "object:1286" - } - ], - status: "PASSED", - durationInNanos: 1192009, - depth: 0, - parentFailed: false, - $$hashKey: "object:1155" - }, - { - name: "the scenario is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the scenario is executed", - $$hashKey: "object:1305" - } - ], - status: "PASSED", - durationInNanos: 70301, - depth: 0, - parentFailed: false, - $$hashKey: "object:1156" - }, - { - name: "no exception is thrown", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "no exception is thrown", - $$hashKey: "object:1316" - } - ], - status: "PASSED", - durationInNanos: 281602, - depth: 0, - parentFailed: false, - $$hashKey: "object:1157" - } - ], - explicitArguments: ["byte", "1, 2, 3"], - derivedArguments: ["byte", "1, 2, 3"], - status: "SUCCESS", - durationInNanos: 45356626, - $$hashKey: "object:1152" - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["char", "a, b, c"], - derivedArguments: ["char", "a, b, c"], - status: "SUCCESS", - durationInNanos: 2016415, - $$hashKey: "object:1267" - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["short", "1, 2, 3"], - derivedArguments: ["short", "1, 2, 3"], - status: "SUCCESS", - durationInNanos: 1923614, - $$hashKey: "object:1268" - }, - { - caseNr: 4, - steps: [], - explicitArguments: ["int", "1, 2, 3"], - derivedArguments: ["int", "1, 2, 3"], - status: "SUCCESS", - durationInNanos: 1477311, - $$hashKey: "object:1269" - }, - { - caseNr: 5, - steps: [], - explicitArguments: ["long", "1, 2, 3"], - derivedArguments: ["long", "1, 2, 3"], - status: "SUCCESS", - durationInNanos: 2269416, - $$hashKey: "object:1270" - }, - { - caseNr: 6, - steps: [], - explicitArguments: ["double", "1.0, 2.0, 3.0"], - derivedArguments: ["double", "1.0, 2.0, 3.0"], - status: "SUCCESS", - durationInNanos: 2017714, - $$hashKey: "object:1271" - }, - { - caseNr: 7, - steps: [], - explicitArguments: ["float", "1.0, 2.0, 3.0"], - derivedArguments: ["float", "1.0, 2.0, 3.0"], - status: "SUCCESS", - durationInNanos: 1714512, - $$hashKey: "object:1272" - }, - { - caseNr: 8, - steps: [], - explicitArguments: ["boolean", "true, false"], - derivedArguments: ["boolean", "true, false"], - status: "SUCCESS", - durationInNanos: 1732412, - $$hashKey: "object:1273" - } - ], - casesAsTable: true, - durationInNanos: 58508020, - executionStatus: "SUCCESS", - tags: [ - { - value: "#1", - description: "Scenarios of Issue #1" - }, - {} - ], - classTitle: "Scenario Executor", - expanded: true, - $$hashKey: "object:624" - }, - { - className: "com.tngtech.jgiven.impl.ScenarioExecutorTest", - testMethodName: "methods_called_during_stage_construction_are_ignored_in_the_report", - description: "methods called during stage construction are ignored in the report", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "some stage with method called during construction", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "some stage with method called during construction" - } - ], - status: "PASSED", - durationInNanos: 70601, - depth: 0, - parentFailed: false - }, - { - name: "the method does not appear in the report", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the method does not appear in the report" - } - ], - status: "PASSED", - durationInNanos: 444003, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 891706 - } - ], - casesAsTable: false, - durationInNanos: 891706, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Scenario Executor" - } - ] - }, - { - className: "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", - name: "Es Simple Escenario", - scenarios: [ - { - className: "com.tngtech.jgiven.junit.lang.es.EsSimpleEscenarioTest", - testMethodName: "los_escenarios_se_pueden_escribir_en_espannol", - description: "los escenarios se pueden escribir en espannol", - tagIds: ["com.tngtech.jgiven.tags.FeatureSpanish"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "un proyecto en espannol", - words: [ - { - value: "dado", - isIntroWord: true - }, - { - value: "un proyecto en espannol" - } - ], - status: "PASSED", - durationInNanos: 72601, - depth: 0, - parentFailed: false - }, - { - name: "se usa JGiven", - words: [ - { - value: "cuando", - isIntroWord: true - }, - { - value: "se usa JGiven" - } - ], - status: "PASSED", - durationInNanos: 69501, - depth: 0, - parentFailed: false - }, - { - name: "los escenarios se escriben en espannol", - words: [ - { - value: "y", - isIntroWord: true - }, - { - value: "los escenarios se escriben en espannol" - } - ], - status: "PASSED", - durationInNanos: 31200, - depth: 0, - parentFailed: false - }, - { - name: "JGiven genera los informes en espannol", - words: [ - { - value: "entonces", - isIntroWord: true - }, - { - value: "JGiven genera los informes en espannol" - } - ], - status: "PASSED", - durationInNanos: 29500, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 1912414 - } - ], - casesAsTable: false, - durationInNanos: 1912414, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Es Simple Escenario", - expanded: false, - $$hashKey: "object:609" - } - ] - }, - { - className: "com.tngtech.jgiven.impl.GuaranteedStateTest", - name: "Guaranteed State", - scenarios: [ - { - className: "com.tngtech.jgiven.impl.GuaranteedStateTest", - testMethodName: "assure_before_method_of_second_test_is_executed_after_guaranteed_fields_validation", - description: "assure before method of second test is executed after guaranteed fields validation", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a Jgiven test with a guaranteed null state", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a Jgiven test with a guaranteed null state" - } - ], - status: "PASSED", - durationInNanos: 11396282, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed" - } - ], - status: "PASSED", - durationInNanos: 436443939, - depth: 0, - parentFailed: false - }, - { - name: "the report contains $ exception", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains" - }, - { - value: "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException", - argumentInfo: { - argumentName: "givenException", - formattedValue: "class com.tngtech.jgiven.exception.JGivenMissingGuaranteedScenarioStateException" - } - }, - { - value: "exception" - } - ], - status: "PASSED", - durationInNanos: 225002718, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 706130579 - } - ], - casesAsTable: false, - durationInNanos: 706130579, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Guaranteed State" - }, - { - className: "com.tngtech.jgiven.impl.GuaranteedStateTest", - testMethodName: "assure_before_method_of_second_test_is_executed_if_guaranteed_initialized", - description: "assure before method of second test is executed if guaranteed initialized", - tagIds: [], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a Jgiven test with a guaranteed state", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a Jgiven test with a guaranteed state" - } - ], - status: "PASSED", - durationInNanos: 145501, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed" - } - ], - status: "PASSED", - durationInNanos: 26399390, - depth: 0, - parentFailed: false - }, - { - name: "the report contains $ exception", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the report contains" - }, - { - value: "class java.lang.ClassNotFoundException", - argumentInfo: { - argumentName: "givenException", - formattedValue: "class java.lang.ClassNotFoundException" - } - }, - { - value: "exception" - } - ], - status: "PASSED", - durationInNanos: 1562611, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 28556606 - } - ], - casesAsTable: false, - durationInNanos: 28556606, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Guaranteed State" - } - ] - }, - { - className: "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", - name: "HTML Report Generator", - description: "Test that only checks the generated files of the HTML report generator", - scenarios: [ - { - className: "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", - testMethodName: "the_HTML_report_generator_creates_a_tags_file", - description: "the HTML report generator creates a 'tags.js' file", - extendedDescription: "To reduce duplicated storage of tag data, the HTML reporter generates a 'tags.js' file that contains all tags that appeared in all input files", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureTags-Tags" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 210402, - depth: 0, - parentFailed: false - }, - { - name: "scenario $ has tag $ with value $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "scenario" - }, - { - value: "1", - argumentInfo: { - argumentName: "i", - formattedValue: "1" - } - }, - { - value: "has tag" - }, - { - value: "TestTag", - argumentInfo: { - argumentName: "name", - formattedValue: "TestTag" - } - }, - { - value: "with value" - }, - { - value: "123", - argumentInfo: { - argumentName: "value", - formattedValue: "123" - } - } - ], - status: "PASSED", - durationInNanos: 4294631, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 2268516, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 47162538, - depth: 0, - parentFailed: false - }, - { - name: "a file $ exists in folder $", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "a file" - }, - { - value: "tags.js", - argumentInfo: { - argumentName: "name", - formattedValue: '"tags.js"' - } - }, - { - value: "exists in folder" - }, - { - value: "data", - argumentInfo: { - argumentName: "folder", - formattedValue: '"data"' - } - } - ], - status: "PASSED", - durationInNanos: 530004, - depth: 0, - parentFailed: false - }, - { - name: "a file $ exists in folder $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a file" - }, - { - value: "metaData.js", - argumentInfo: { - argumentName: "name", - formattedValue: '"metaData.js"' - } - }, - { - value: "exists in folder" - }, - { - value: "data", - argumentInfo: { - argumentName: "folder", - formattedValue: '"data"' - } - } - ], - status: "PASSED", - durationInNanos: 244502, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 59283824 - } - ], - casesAsTable: false, - durationInNanos: 59283824, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "Tags" - } - ], - classTitle: "HTML Report Generator", - expanded: false, - $$hashKey: "object:616" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", - testMethodName: "the_title_of_the_HTML_report_can_be_configured", - description: "the title of the HTML report can be configured", - tagIds: ["com.tngtech.jgiven.tags.FeatureHtml5Report"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 123001, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 1325610, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed with title", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed with title" - }, - { - value: "Test Title", - argumentInfo: { - argumentName: "title", - formattedValue: "Test Title" - } - } - ], - status: "PASSED", - durationInNanos: 45265424, - depth: 0, - parentFailed: false - }, - { - name: "the metaData file has title set to", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the metaData file has title set to" - }, - { - value: "Test Title", - argumentInfo: { - argumentName: "title", - formattedValue: "Test Title" - } - } - ], - status: "PASSED", - durationInNanos: 3706527, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 52846878 - } - ], - casesAsTable: false, - durationInNanos: 52846878, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "HTML Report Generator" - }, - { - className: "com.tngtech.jgiven.report.html5.Html5ReportGeneratorTest", - testMethodName: "attachments_with_different_media_types_can_be_created", - description: "attachments with different media types can be created", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureHtml5Report", - "com.tngtech.jgiven.tags.FeatureAttachments" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a report model", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a report model" - } - ], - status: "PASSED", - durationInNanos: 202201, - depth: 0, - parentFailed: false - }, - { - name: "an attachment with content $ and mediaType", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "an attachment with content" - }, - { - value: '{ "foo": "bar"}', - argumentInfo: { - argumentName: "content", - formattedValue: '"{ "foo": "bar"}"' - } - }, - { - value: "and mediaType" - }, - { - value: "application/json", - argumentInfo: { - argumentName: "mediaType", - formattedValue: '"application/json"' - } - } - ], - status: "PASSED", - durationInNanos: 1016608, - depth: 0, - parentFailed: false - }, - { - name: "file name", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "file name" - }, - { - value: "jsonfile", - argumentInfo: { - argumentName: "name", - formattedValue: "jsonfile" - } - } - ], - status: "PASSED", - durationInNanos: 577904, - depth: 0, - parentFailed: false - }, - { - name: "an attachment with binary content $ and mediaType", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "an attachment with binary content" - }, - { - value: "QkoCOIcDQKCoCg==", - argumentInfo: { - argumentName: "binaryContent", - formattedValue: '"QkoCOIcDQKCoCg=="' - } - }, - { - value: "and mediaType" - }, - { - value: "application/octet-stream", - argumentInfo: { - argumentName: "mediaType", - formattedValue: '"application/octet-stream"' - } - } - ], - status: "PASSED", - durationInNanos: 308502, - depth: 0, - parentFailed: false - }, - { - name: "file name", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "file name" - }, - { - value: "binary", - argumentInfo: { - argumentName: "name", - formattedValue: "binary" - } - } - ], - status: "PASSED", - durationInNanos: 175601, - depth: 0, - parentFailed: false - }, - { - name: "the attachments are added to step $ of case $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the attachments are added to step" - }, - { - value: "1", - argumentInfo: { - argumentName: "stepNr", - formattedValue: "1" - } - }, - { - value: "of case" - }, - { - value: "1", - argumentInfo: { - argumentName: "caseNr", - formattedValue: "1" - } - } - ], - status: "PASSED", - durationInNanos: 1931614, - depth: 0, - parentFailed: false - }, - { - name: "the report exist as JSON file", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the report exist as JSON file" - } - ], - status: "PASSED", - durationInNanos: 1631712, - depth: 0, - parentFailed: false - }, - { - name: "the HTML Report Generator is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the HTML Report Generator is executed" - } - ], - status: "PASSED", - durationInNanos: 45700727, - depth: 0, - parentFailed: false - }, - { - name: "a file $ exists in folder $", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "a file" - }, - { - value: "jsonfile.json", - argumentInfo: { - argumentName: "name", - formattedValue: '"jsonfile.json"' - } - }, - { - value: "exists in folder" - }, - { - value: "data/attachments/Test", - argumentInfo: { - argumentName: "folder", - formattedValue: '"data/attachments/Test"' - } - } - ], - status: "PASSED", - durationInNanos: 328803, - depth: 0, - parentFailed: false - }, - { - name: "content", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "content" - }, - { - value: '{ "foo": "bar"}', - argumentInfo: { - argumentName: "content", - formattedValue: '"{ "foo": "bar"}"' - } - } - ], - status: "PASSED", - durationInNanos: 12229187, - depth: 0, - parentFailed: false - }, - { - name: "a file $ exists in folder $", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "a file" - }, - { - value: "binary.octet-stream", - argumentInfo: { - argumentName: "name", - formattedValue: '"binary.octet-stream"' - } - }, - { - value: "exists in folder" - }, - { - value: "data/attachments/Test", - argumentInfo: { - argumentName: "folder", - formattedValue: '"data/attachments/Test"' - } - } - ], - status: "PASSED", - durationInNanos: 304602, - depth: 0, - parentFailed: false - }, - { - name: "binary content", - words: [ - { - value: "with", - isIntroWord: true - }, - { - value: "binary content" - }, - { - value: "QkoCOIcDQKCoCg==", - argumentInfo: { - argumentName: "base64content", - formattedValue: '"QkoCOIcDQKCoCg=="' - } - } - ], - status: "PASSED", - durationInNanos: 1267309, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 71729213 - } - ], - casesAsTable: false, - durationInNanos: 71729213, - executionStatus: "SUCCESS", - tags: [{}, {}], - classTitle: "HTML Report Generator", - expanded: false, - $$hashKey: "object:615" - } - ] - }, - { - className: "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", - name: "De Szenario", - scenarios: [ - { - className: "com.tngtech.jgiven.junit.lang.de.DeSzenarioTest", - testMethodName: "Szenarien_können_in_deutsch_geschrieben_werden", - description: "Szenarien können in deutsch geschrieben werden", - tagIds: ["com.tngtech.jgiven.tags.FeatureGerman"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "ein deutsches Projekt", - words: [ - { - value: "gegeben", - isIntroWord: true - }, - { - value: "ein deutsches Projekt" - } - ], - status: "PASSED", - durationInNanos: 222701, - depth: 0, - parentFailed: false - }, - { - name: "JGiven verwendet wird", - words: [ - { - value: "wenn", - isIntroWord: true - }, - { - value: "JGiven verwendet wird" - } - ], - status: "PASSED", - durationInNanos: 111601, - depth: 0, - parentFailed: false - }, - { - name: "die Szenarien in deutsch geschrieben werden", - words: [ - { - value: "und", - isIntroWord: true - }, - { - value: "die Szenarien in deutsch geschrieben werden" - } - ], - status: "PASSED", - durationInNanos: 45100, - depth: 0, - parentFailed: false - }, - { - name: "generiert JGiven deutsche Berichte", - words: [ - { - value: "dann", - isIntroWord: true - }, - { - value: "generiert JGiven deutsche Berichte" - } - ], - status: "PASSED", - durationInNanos: 32400, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 4196231 - } - ], - casesAsTable: false, - durationInNanos: 4196231, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "De Szenario", - expanded: false, - $$hashKey: "object:603" - } - ] - }, - { - className: "com.tngtech.jgiven.junit.DataProviderTest", - name: "Data Provider", - scenarios: [ - { - className: "com.tngtech.jgiven.junit.DataProviderTest", - testMethodName: "a_scenario_with_one_failing_case_leads_to_a_failed_scenario", - description: "a scenario with one failing case leads to a failed scenario", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test with two cases and the first one fails", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test with two cases and the first one fails" - } - ], - status: "PASSED", - durationInNanos: 14908507, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 156169623, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has execution status", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the scenario has execution status" - }, - { - value: "FAILED", - argumentInfo: { - argumentName: "status", - formattedValue: "FAILED" - } - } - ], - status: "PASSED", - durationInNanos: 615404, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 173757650 - } - ], - casesAsTable: false, - durationInNanos: 173757650, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Data Provider", - expanded: false, - $$hashKey: "object:1330" - }, - { - className: "com.tngtech.jgiven.junit.DataProviderTest", - testMethodName: "pending_works_correctly_with_data_provider", - description: "pending works correctly with data provider", - tagIds: [ - "com.tngtech.jgiven.tags.FeatureJUnit", - "com.tngtech.jgiven.tags.Issue-#200" - ], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a pending scenario with a data provider", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a pending scenario with a data provider" - } - ], - status: "PASSED", - durationInNanos: 535103, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 13844400, - depth: 0, - parentFailed: false - }, - { - name: "the scenario has execution status", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the scenario has execution status" - }, - { - value: "SCENARIO_PENDING", - argumentInfo: { - argumentName: "status", - formattedValue: "SCENARIO_PENDING" - } - } - ], - status: "PASSED", - durationInNanos: 272502, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 15924414 - } - ], - casesAsTable: false, - durationInNanos: 15924414, - executionStatus: "SUCCESS", - tags: [ - {}, - { - value: "#200", - description: "Scenarios of Issue #200" - } - ], - classTitle: "Data Provider", - expanded: false, - $$hashKey: "object:1331" - } - ] - }, - { - className: "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", - name: "Es Escenario", - scenarios: [ - { - className: "com.tngtech.jgiven.junit.lang.es.EsEscenarioTest", - testMethodName: "los_escenarios_se_pueden_escribir_en_espannol", - description: "los escenarios se pueden escribir en espannol", - tagIds: ["com.tngtech.jgiven.tags.FeatureSpanish"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "un proyecto en espannol", - words: [ - { - value: "dado", - isIntroWord: true - }, - { - value: "un proyecto en espannol" - } - ], - status: "PASSED", - durationInNanos: 111301, - depth: 0, - parentFailed: false - }, - { - name: "se usa JGiven", - words: [ - { - value: "cuando", - isIntroWord: true - }, - { - value: "se usa JGiven" - } - ], - status: "PASSED", - durationInNanos: 38800, - depth: 0, - parentFailed: false - }, - { - name: "los escenarios se escriben en espannol", - words: [ - { - value: "y", - isIntroWord: true - }, - { - value: "los escenarios se escriben en espannol" - } - ], - status: "PASSED", - durationInNanos: 79000, - depth: 0, - parentFailed: false - }, - { - name: "JGiven genera los informes en espannol", - words: [ - { - value: "entonces", - isIntroWord: true - }, - { - value: "JGiven genera los informes en espannol" - } - ], - status: "PASSED", - durationInNanos: 111101, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 2606119 - } - ], - casesAsTable: false, - durationInNanos: 2606119, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Es Escenario", - expanded: false, - $$hashKey: "object:608" - } - ] - }, - { - className: "com.tngtech.jgiven.impl.TimingsTest", - name: "Timings", - scenarios: [ - { - className: "com.tngtech.jgiven.impl.TimingsTest", - testMethodName: "recorded_timing_is_correct_for", - description: "recorded timing is correct for", - tagIds: [], - explicitParameters: ["methodName"], - derivedParameters: ["methodName"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "the JGiven timings test class with method", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "the JGiven timings test class with method" - }, - { - value: "last_step_is_preceeded_by_step", - argumentInfo: { - parameterName: "methodName", - argumentName: "requestedMethod", - formattedValue: "last_step_is_preceeded_by_step" - } - } - ], - status: "PASSED", - durationInNanos: 26374690, - depth: 0, - parentFailed: false - }, - { - name: "the test is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test is executed" - } - ], - status: "PASSED", - durationInNanos: 73537029, - depth: 0, - parentFailed: false - }, - { - name: "the recorded timing is greater than ten millis", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the recorded timing is greater than ten millis" - } - ], - status: "PASSED", - durationInNanos: 5095837, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["last_step_is_preceeded_by_step"], - derivedArguments: ["last_step_is_preceeded_by_step"], - status: "SUCCESS", - durationInNanos: 105842061 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["last_step_is_preceeded_by_intro_word"], - derivedArguments: ["last_step_is_preceeded_by_intro_word"], - status: "SUCCESS", - durationInNanos: 24511576 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["last_step_is_preceeded_by_filler_word"], - derivedArguments: ["last_step_is_preceeded_by_filler_word"], - status: "SUCCESS", - durationInNanos: 20147745 - }, - { - caseNr: 4, - steps: [], - explicitArguments: ["last_step_is_succeeded_by_intro_word"], - derivedArguments: ["last_step_is_succeeded_by_intro_word"], - status: "SUCCESS", - durationInNanos: 24176973 - }, - { - caseNr: 5, - steps: [], - explicitArguments: ["last_step_is_succeeded_by_filler_word"], - derivedArguments: ["last_step_is_succeeded_by_filler_word"], - status: "SUCCESS", - durationInNanos: 20611849 - } - ], - casesAsTable: true, - durationInNanos: 195290204, - executionStatus: "SUCCESS", - tags: [], - classTitle: "Timings" - } - ] - }, - { - className: "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", - name: "Plain Text Generator Scenario", - scenarios: [ - { - className: "com.tngtech.jgiven.report.text.PlainTextGeneratorScenarioTest", - testMethodName: "the_plain_text_reporter_generates_one_file_for_each_test_class", - description: "the plain text reporter generates one file for each test class", - tagIds: ["com.tngtech.jgiven.tags.FeatureTextReport"], - explicitParameters: ["numberOfModels"], - derivedParameters: ["numberOfModels"], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "$ report models", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "0", - argumentInfo: { - parameterName: "numberOfModels", - argumentName: "n", - formattedValue: "0" - } - }, - { - value: "report models" - } - ], - status: "PASSED", - durationInNanos: 368703, - depth: 0, - parentFailed: false - }, - { - name: "the reports exist as JSON files", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the reports exist as JSON files" - } - ], - status: "PASSED", - durationInNanos: 101600, - depth: 0, - parentFailed: false - }, - { - name: "the plain text reporter is executed", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the plain text reporter is executed" - } - ], - status: "PASSED", - durationInNanos: 3764527, - depth: 0, - parentFailed: false - }, - { - name: "a text file exists for each test class", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "a text file exists for each test class" - } - ], - status: "PASSED", - durationInNanos: 157201, - depth: 0, - parentFailed: false - } - ], - explicitArguments: ["0"], - derivedArguments: ["0"], - status: "SUCCESS", - durationInNanos: 6371646 - }, - { - caseNr: 2, - steps: [], - explicitArguments: ["1"], - derivedArguments: ["1"], - status: "SUCCESS", - durationInNanos: 8060458 - }, - { - caseNr: 3, - steps: [], - explicitArguments: ["3"], - derivedArguments: ["3"], - status: "SUCCESS", - durationInNanos: 7354453 - } - ], - casesAsTable: true, - durationInNanos: 21786557, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Plain Text Generator Scenario" - } - ] - }, - { - className: "com.tngtech.jgiven.testframework.LifecycleOrderingTest", - name: "Lifecycle Ordering", - scenarios: [ - { - className: "com.tngtech.jgiven.testframework.LifecycleOrderingTest", - testMethodName: "junit5_beforeAfterEach_beforeAfterScenario_execution_order", - description: "Ordering of before/after Each methods vs. before/after Scenario methods", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test with framework and JGiven before and after methods", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test with framework and JGiven before and after methods" - } - ], - status: "PASSED", - durationInNanos: 1096908, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit5", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit5" - } - ], - status: "PASSED", - durationInNanos: 103331840, - depth: 0, - parentFailed: false - }, - { - name: "the framework before method was executed before jgivens", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the framework before method was executed before jgivens" - } - ], - status: "PASSED", - durationInNanos: 3060022, - depth: 0, - parentFailed: false - }, - { - name: "the framework after method was executed after jgivens", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the framework after method was executed after jgivens" - } - ], - status: "PASSED", - durationInNanos: 325102, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 109280482 - } - ], - casesAsTable: false, - durationInNanos: 109280482, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Lifecycle Ordering" - }, - { - className: "com.tngtech.jgiven.testframework.LifecycleOrderingTest", - testMethodName: "junit_beforeAfter_beforeAfterScenario_execution_order", - description: "Ordering of before/after methods vs. before/after Scenario methods", - tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test with framework and JGiven before and after methods", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test with framework and JGiven before and after methods" - } - ], - status: "PASSED", - durationInNanos: 71000, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with JUnit", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with JUnit" - } - ], - status: "PASSED", - durationInNanos: 3442425, - depth: 0, - parentFailed: false - }, - { - name: "the framework before method was executed before jgivens", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the framework before method was executed before jgivens" - } - ], - status: "PASSED", - durationInNanos: 118301, - depth: 0, - parentFailed: false - }, - { - name: "the framework after method was executed before jgivens", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the framework after method was executed before jgivens" - } - ], - status: "PASSED", - durationInNanos: 466704, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 7053251 - } - ], - casesAsTable: false, - durationInNanos: 7053251, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Lifecycle Ordering", - expanded: false, - $$hashKey: "object:1338" - }, - { - className: "com.tngtech.jgiven.testframework.LifecycleOrderingTest", - testMethodName: "testNg_beforeAfterTest_beforeAfterScenario_execution_order", - description: "Ordering of before/after Test methods vs. before/after Scenario methods", - tagIds: ["com.tngtech.jgiven.tags.FeatureTestNg"], - explicitParameters: [], - derivedParameters: [], - scenarioCases: [ - { - caseNr: 1, - steps: [ - { - name: "a test with framework and JGiven before and after methods", - words: [ - { - value: "Given", - isIntroWord: true - }, - { - value: "a test with framework and JGiven before and after methods" - } - ], - status: "PASSED", - durationInNanos: 35600, - depth: 0, - parentFailed: false - }, - { - name: "the test class is executed with", - words: [ - { - value: "When", - isIntroWord: true - }, - { - value: "the test class is executed with" - }, - { - value: "TestNG", - argumentInfo: { - argumentName: "framework", - formattedValue: "TestNG" - } - } - ], - status: "PASSED", - durationInNanos: 636466256, - depth: 0, - parentFailed: false - }, - { - name: "the framework before method was executed before jgivens", - words: [ - { - value: "Then", - isIntroWord: true - }, - { - value: "the framework before method was executed before jgivens" - } - ], - status: "PASSED", - durationInNanos: 206401, - depth: 0, - parentFailed: false - }, - { - name: "the framework after method was executed after jgivens", - words: [ - { - value: "and", - isIntroWord: true - }, - { - value: "the framework after method was executed after jgivens" - } - ], - status: "PASSED", - durationInNanos: 125601, - depth: 0, - parentFailed: false - } - ], - explicitArguments: [], - derivedArguments: [], - status: "SUCCESS", - durationInNanos: 639245876 - } - ], - casesAsTable: false, - durationInNanos: 639245876, - executionStatus: "SUCCESS", - tags: [{}], - classTitle: "Lifecycle Ordering", - expanded: false, - $$hashKey: "object:147" - } - ] - } - ], - customNavigationLinks: [], - metaData: { - created: "Dec 12, 2023, 6:29:36 AM", - version: "1.3.1-240a5794", - title: "JGiven Report", - data: ["data0.js", "data1.js"], - showThumbnails: true - }, - tagFile: { - tagTypeMap: { - "com.tngtech.jgiven.tags.FeatureJUnit5": { - fullType: "com.tngtech.jgiven.tags.FeatureJUnit5", - type: "FeatureJUnit5", - name: "JUnit5", - description: "Tests can be be executed with JUnit5", - tags: ["com.tngtech.jgiven.tags.FeatureTestFramework"], - href: "" - }, - "com.tngtech.jgiven.tags.Feature": { - fullType: "com.tngtech.jgiven.tags.Feature", - type: "Feature", - name: "Features", - description: "", - href: "" - }, - "com.tngtech.jgiven.tags.FeatureTestFramework": { - fullType: "com.tngtech.jgiven.tags.FeatureTestFramework", - type: "FeatureTestFramework", - name: "Supported Test Frameworks", - description: "JGiven can be used together with JUnit and TestNG", - tags: ["com.tngtech.jgiven.tags.Feature"], - href: "" - }, - "com.tngtech.jgiven.tags.Issue": { - fullType: "com.tngtech.jgiven.tags.Issue", - type: "Issue", - description: "Scenarios of Issue #25", - prependType: true, - color: "orange", - href: "" - }, - "com.tngtech.jgiven.tests.TestTag": { - fullType: "com.tngtech.jgiven.tests.TestTag", - type: "TestTag", - description: "", - href: "" - }, - "com.tngtech.jgiven.tags.BrowserTest": { - fullType: "com.tngtech.jgiven.tags.BrowserTest", - type: "BrowserTest", - description: "Tests with this tag use a browser for testing", - color: "rgb(69, 158, 19)", - href: "" - }, - "com.tngtech.jgiven.tags.FeatureHtml5Report": { - fullType: "com.tngtech.jgiven.tags.FeatureHtml5Report", - type: "FeatureHtml5Report", - name: "HTML5 Report", - description: "In order to have an interactive JGiven report for non-developers
As a developer,
I want that JGiven generates HTML5 reports", - tags: ["com.tngtech.jgiven.tags.FeatureReport"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureReport": { - fullType: "com.tngtech.jgiven.tags.FeatureReport", - type: "FeatureReport", - name: "Reporting", - description: "JGiven can generate text and HTML reports. An AsciiDoc report is currently under development.", - tags: ["com.tngtech.jgiven.tags.Feature"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureAttachments": { - fullType: "com.tngtech.jgiven.tags.FeatureAttachments", - type: "FeatureAttachments", - name: "Attachments", - description: "In order to get additional information about a step, like screenshots, for example
As a JGiven user,
I want that steps can have attachments", - tags: ["com.tngtech.jgiven.tags.FeatureCore"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureCore": { - fullType: "com.tngtech.jgiven.tags.FeatureCore", - type: "FeatureCore", - name: "Core Features", - description: "", - tags: ["com.tngtech.jgiven.tags.Feature"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { - fullType: "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle", - type: "FeatureTagsWithCustomStyle", - name: "Tags with Custom Styles", - description: "Tags can be arbitrarily styled with the 'style' attribute of the '@IsTag' annotation. This tag shows how to apply such a custom style", - style: "background-color: darkgreen; color: white; font-weight: bold", - tags: ["com.tngtech.jgiven.tags.FeatureTags-Tags"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureTags": { - fullType: "com.tngtech.jgiven.tags.FeatureTags", - type: "FeatureTags", - description: "Scenarios can be tagged with annotations", - tags: ["com.tngtech.jgiven.tags.FeatureCore"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureJUnit": { - fullType: "com.tngtech.jgiven.tags.FeatureJUnit", - type: "FeatureJUnit", - name: "JUnit", - description: "Tests can be be executed with JUnit", - tags: ["com.tngtech.jgiven.tags.FeatureTestFramework"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureTestNg": { - fullType: "com.tngtech.jgiven.tags.FeatureTestNg", - type: "FeatureTestNg", - name: "TestNG", - description: "Tests can be be executed with TestNG", - tags: ["com.tngtech.jgiven.tags.FeatureTestFramework"], - href: "" - }, - "com.tngtech.jgiven.tags.FeaturePending": { - fullType: "com.tngtech.jgiven.tags.FeaturePending", - type: "FeaturePending", - name: "Pending Annotation", - description: "As a good BDD practitioner,
I want to write my scenarios before I start coding
In order to discuss them with business stakeholders", - tags: ["com.tngtech.jgiven.tags.FeatureCore"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureCaseDiffs": { - fullType: "com.tngtech.jgiven.tags.FeatureCaseDiffs", - type: "FeatureCaseDiffs", - name: "Case Diffs", - description: "In order to get a better overview over structurally different cases of a scenario
As a human,
I want the differences highlighted in the generated report", - tags: ["com.tngtech.jgiven.tags.FeatureCore"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { - fullType: "com.tngtech.jgiven.tags.FeatureAsciiDocReport", - type: "FeatureAsciiDocReport", - name: "AsciiDoc Report", - description: "In order to easily combine hand-written documentation with JGiven scenarios
As a developer,
I want that JGiven generates AsciiDoc reports", - tags: ["com.tngtech.jgiven.tags.FeatureReport"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureGerman": { - fullType: "com.tngtech.jgiven.tags.FeatureGerman", - type: "FeatureGerman", - name: "German Scenarios", - description: "Scenarios can be written in German", - tags: ["com.tngtech.jgiven.tags.FeatureCore"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureTextReport": { - fullType: "com.tngtech.jgiven.tags.FeatureTextReport", - type: "FeatureTextReport", - name: "Text Report", - description: "Plain text reports can be generated", - tags: ["com.tngtech.jgiven.tags.FeatureReport"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureDataTables": { - fullType: "com.tngtech.jgiven.tags.FeatureDataTables", - type: "FeatureDataTables", - name: "Data Tables", - description: "In order to get a better overview over the different cases of a scenario
As a human,
I want to have different cases represented as a data table", - tags: ["com.tngtech.jgiven.tags.FeatureCore"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureStepParameters": { - fullType: "com.tngtech.jgiven.tags.FeatureStepParameters", - type: "FeatureStepParameters", - name: "Step Parameters", - description: "Steps can have parameters", - tags: ["com.tngtech.jgiven.tags.FeatureCore"], - href: "" - }, - "com.tngtech.jgiven.tags.FeatureSpanish": { - fullType: "com.tngtech.jgiven.tags.FeatureSpanish", - type: "FeatureSpanish", - name: "Spanish Scenarios", - description: "Scenarios can be written in Spanish", - tags: ["com.tngtech.jgiven.tags.FeatureCore"], - href: "" - } - }, - tags: { - "com.tngtech.jgiven.tags.FeatureJUnit5": { - tagType: "com.tngtech.jgiven.tags.FeatureJUnit5" - }, - "com.tngtech.jgiven.tags.Feature": { - tagType: "com.tngtech.jgiven.tags.Feature" - }, - "com.tngtech.jgiven.tags.FeatureTestFramework": { - tagType: "com.tngtech.jgiven.tags.FeatureTestFramework" - }, - "com.tngtech.jgiven.tags.Issue-#25": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#25" - }, - "com.tngtech.jgiven.tags.Issue-#49": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#49", - description: "Scenarios of Issue #49" - }, - "com.tngtech.jgiven.tests.TestTag-testValue": { - tagType: "com.tngtech.jgiven.tests.TestTag", - value: "testValue" - }, - "com.tngtech.jgiven.tags.BrowserTest": { - tagType: "com.tngtech.jgiven.tags.BrowserTest" - }, - "com.tngtech.jgiven.tags.FeatureHtml5Report": { - tagType: "com.tngtech.jgiven.tags.FeatureHtml5Report" - }, - "com.tngtech.jgiven.tags.FeatureReport": { - tagType: "com.tngtech.jgiven.tags.FeatureReport" - }, - "com.tngtech.jgiven.tags.Issue-#236": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#236", - description: "Scenarios of Issue #236" - }, - "com.tngtech.jgiven.tags.Issue-#755": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#755", - description: "Scenarios of Issue #755" - }, - "com.tngtech.jgiven.tags.Issue-#191": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#191", - description: "Scenarios of Issue #191" - }, - "com.tngtech.jgiven.tags.FeatureAttachments": { - tagType: "com.tngtech.jgiven.tags.FeatureAttachments" - }, - "com.tngtech.jgiven.tags.FeatureCore": { - tagType: "com.tngtech.jgiven.tags.FeatureCore" - }, - "com.tngtech.jgiven.tags.Issue-#226": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#226", - description: "Scenarios of Issue #226" - }, - "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { - tagType: "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" - }, - "com.tngtech.jgiven.tags.FeatureTags-Tags": { - tagType: "com.tngtech.jgiven.tags.FeatureTags", - value: "Tags" - }, - "com.tngtech.jgiven.tags.Issue-#146": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#146", - description: "Scenarios of Issue #146" - }, - "com.tngtech.jgiven.tags.Issue-#47": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#47", - description: "Scenarios of Issue #47" - }, - "com.tngtech.jgiven.tags.Issue-#274": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#274", - description: "Scenarios of Issue #274" - }, - "com.tngtech.jgiven.tags.FeatureJUnit": { - tagType: "com.tngtech.jgiven.tags.FeatureJUnit" - }, - "com.tngtech.jgiven.tags.FeatureTestNg": { - tagType: "com.tngtech.jgiven.tags.FeatureTestNg" - }, - "com.tngtech.jgiven.tags.Issue-#4": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#4", - description: "Scenarios of Issue #4" - }, - "com.tngtech.jgiven.tags.FeaturePending": { - tagType: "com.tngtech.jgiven.tags.FeaturePending" - }, - "com.tngtech.jgiven.tags.FeatureCaseDiffs": { - tagType: "com.tngtech.jgiven.tags.FeatureCaseDiffs" - }, - "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { - tagType: "com.tngtech.jgiven.tags.FeatureAsciiDocReport" - }, - "com.tngtech.jgiven.tags.Issue-#163": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#163", - description: "Scenarios of Issue #163" - }, - "com.tngtech.jgiven.tags.Issue-#32": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#32", - description: "Scenarios of Issue #32" - }, - "com.tngtech.jgiven.tags.FeatureGerman": { - tagType: "com.tngtech.jgiven.tags.FeatureGerman" - }, - "com.tngtech.jgiven.tags.Issue-#829": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#829", - description: "Scenarios of Issue #829" - }, - "com.tngtech.jgiven.tags.Issue-#123": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#123", - description: "Scenarios of Issue #123" - }, - "com.tngtech.jgiven.tags.FeatureTextReport": { - tagType: "com.tngtech.jgiven.tags.FeatureTextReport" - }, - "com.tngtech.jgiven.tags.FeatureDataTables": { - tagType: "com.tngtech.jgiven.tags.FeatureDataTables" - }, - "com.tngtech.jgiven.tags.Issue-#34": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#34", - description: "Scenarios of Issue #34" - }, - "com.tngtech.jgiven.tags.Issue-#152": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#152", - description: "Scenarios of Issue #152" - }, - "com.tngtech.jgiven.tags.Issue-#52": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#52", - description: "Scenarios of Issue #52" - }, - "com.tngtech.jgiven.tags.Issue-#10": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#10", - description: "Scenarios of Issue #10" - }, - "com.tngtech.jgiven.tags.Issue-#104": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#104", - description: "Scenarios of Issue #104" - }, - "com.tngtech.jgiven.tags.Issue-#1": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#1", - description: "Scenarios of Issue #1" - }, - "com.tngtech.jgiven.tags.FeatureStepParameters": { - tagType: "com.tngtech.jgiven.tags.FeatureStepParameters" - }, - "com.tngtech.jgiven.tags.FeatureSpanish": { - tagType: "com.tngtech.jgiven.tags.FeatureSpanish" - }, - "com.tngtech.jgiven.tags.Issue-#200": { - tagType: "com.tngtech.jgiven.tags.Issue", - value: "#200", - description: "Scenarios of Issue #200" - } - } - } -} From d1606bb0ce680dac3cb0d5d5fc34d8d619cb0919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 12:35:19 +0100 Subject: [PATCH 18/45] overhaueld new report model --- new/src/reportModel.d.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/new/src/reportModel.d.ts b/new/src/reportModel.d.ts index dd3a4a56..c77f6d6c 100644 --- a/new/src/reportModel.d.ts +++ b/new/src/reportModel.d.ts @@ -3,7 +3,7 @@ export default interface ReportModel { name: string; description?: string; scenarios: ScenarioModel[]; - tagMap: Map; + tagMap?: Map; } interface ArgumentInfo { parameterName?: string; @@ -71,15 +71,18 @@ interface ScenarioCaseModel { } interface ScenarioModel { className: string; + classTitle: string; testMethodName: string; description: string; - extendedDescription: string; + extendedDescription?: string; tagIds: string[]; explicitParameters: string[]; derivedParameters: string[]; scenarioCases: ScenarioCaseModel[]; casesAsTable: boolean; durationInNanos: number; + executionStatus: "SUCCESS" | "PENDING" | "FAILED" + tags: TagModel[]; } interface StepFormatter { @@ -90,15 +93,15 @@ interface StepFormatter { interface StepModel { name: string; words: Word[]; - nestedSteps?: StepModel[]; status: StepStatus; durationInNanos: number; + depth: number; + parentFailed: boolean; + nestedSteps?: StepModel[]; extendedDescription?: string; attachments?: AttachmentModel[]; isSectionTitle?: boolean; comment?: string; - depth: number; - parentFailed: boolean; } interface Tag { fullType: string; From 104bb84b94579e84bc7d1fde553ebae917486a89 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:36:31 +0100 Subject: [PATCH 19/45] introduce filter Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/ReportFilter.ts | 16 ++++++++++++++++ new/src/repository.ts | 7 +++++++ 2 files changed, 23 insertions(+) create mode 100644 new/src/ReportFilter.ts create mode 100644 new/src/repository.ts diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts new file mode 100644 index 00000000..7703d2cb --- /dev/null +++ b/new/src/ReportFilter.ts @@ -0,0 +1,16 @@ +import {repository} from "./repository"; + +type Report = ReturnType; + +export function filterByStatus(status: string) { + const fullReport = repository.getReport(); + return { + ...fullReport, + scenarios: filterScenarios(fullReport, status) + } + +} + +function filterScenarios(report: Report, status: string) { + //return report.scenarios.filter(scenario => scenario.scenarios.filter(sc => sc.executionStatus === status)) +} \ No newline at end of file diff --git a/new/src/repository.ts b/new/src/repository.ts new file mode 100644 index 00000000..8c84af1a --- /dev/null +++ b/new/src/repository.ts @@ -0,0 +1,7 @@ +import JGivenReport from '../resources/jgivenReport.json'; + +export const repository = { + getReport() { + return JGivenReport; + } +} From 4ae554ffaec00f47d2a25d11558a080eab2f2676 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:08:39 +0100 Subject: [PATCH 20/45] Fix tests --- .../components/Scenarios/Scenario.test.tsx | 105 ++++++++++++------ 1 file changed, 72 insertions(+), 33 deletions(-) diff --git a/new/src/components/Scenarios/Scenario.test.tsx b/new/src/components/Scenarios/Scenario.test.tsx index cf4662a6..38338fcf 100644 --- a/new/src/components/Scenarios/Scenario.test.tsx +++ b/new/src/components/Scenarios/Scenario.test.tsx @@ -2,59 +2,98 @@ import { render, screen } from "@testing-library/react"; import { ScenarioModel } from "../../reportModel"; import { Scenario } from "./Scenario"; import { processWords } from "../../wordProcessor"; +import { ExpansionState } from "./ScenarioOverview"; +import userEvent from "@testing-library/user-event"; + +afterEach(() => { + jest.resetAllMocks(); +}); + +const onExpansionCallback = jest.fn(); +const onCollapsionCallback = jest.fn(); describe("Scenario accordion behavior", () => { - test("accordeon details are not visible when expanded is set to false", async () => { - let expanded = false; - const setExpanded = (value: boolean) => { - expanded = value; - }; - render(); + test("accordion details are not visible when globalExpansionState is COLLAPSED", async () => { + render( + + ); const accordion = await screen.findByLabelText("Scenario Overview"); expect(accordion.attributes.getNamedItem("aria-expanded")?.value).toBe("false"); }); - test("accordion details are visible when expanded is set to true", async () => { - let expanded = true; - const setExpanded = (value: boolean) => { - expanded = value; - }; - render(); + test("accordion details are visible when globalExpansionState is EXPANDED", async () => { + render( + + ); const accordion = await screen.findByLabelText("Scenario Overview"); expect(accordion.attributes.getNamedItem("aria-expanded")?.value).toBe("true"); }); - test("accordion details get visible when clicking on the header", async () => { - let expanded = false; - const setExpanded = (value: boolean) => { - expanded = value; - }; - render(); - await screen.findByLabelText("Scenario Overview").then(element => element.click()); - expect(expanded).toBeTruthy(); + test("onExpansionCallback is invoked when clicking on the header of a collapsed scenario", async () => { + render( + + ); + const scenarioOverview = await screen.findByLabelText("Scenario Overview"); + userEvent.click(scenarioOverview); + expect(onExpansionCallback).toHaveBeenCalled(); + }); + + test("onCollapsionCallback is invoked when clicking on the header of an expanded scenario", async () => { + render( + + ); + const scenarioOverview = await screen.findByLabelText("Scenario Overview"); + userEvent.click(scenarioOverview); + expect(onCollapsionCallback).toHaveBeenCalled(); }); }); test("Scenario displays steps", async () => { - let expanded = true; - const setExpanded = (value: boolean) => { - expanded = value; - }; - render(); + render( + + ); const textElement = await screen.findByText( model.scenarioCases[0].steps[0].words.flatMap(word => word.value).join(" ") ); - expect(textElement).toBeTruthy(); + expect(textElement).toBeInTheDocument(); }); test("Scenario capitalizes title", async () => { - let expanded = true; - const setExpanded = (value: boolean) => { - expanded = value; - }; - render(); - const textElement = await screen.findByText(tekst => processWords(model.description) === tekst); - expect(textElement).toBeTruthy(); + render( + + ); + const textElement = await screen.findByText(processWords(model.description)); + expect(textElement).toBeInTheDocument(); }); const model: ScenarioModel = { From 3bfb910bc8321a486ee1b4a50ff10bc526907513 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:13:41 +0100 Subject: [PATCH 21/45] Make test compile --- new/src/components/Scenarios/Scenario.test.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/new/src/components/Scenarios/Scenario.test.tsx b/new/src/components/Scenarios/Scenario.test.tsx index 38338fcf..a801519a 100644 --- a/new/src/components/Scenarios/Scenario.test.tsx +++ b/new/src/components/Scenarios/Scenario.test.tsx @@ -97,6 +97,9 @@ test("Scenario capitalizes title", async () => { }); const model: ScenarioModel = { + classTitle: "classTitle", + executionStatus: "SUCCESS", + tags: [], className: "testClass", testMethodName: "testMethod", description: "this is a description", From afedd68c0a9ff4dde4f7ad46699664b4c15c406f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 14:27:43 +0100 Subject: [PATCH 22/45] fixed statistics --- new/src/App.tsx | 20 ++----------- .../components/Scenarios/ScenarioOverview.tsx | 28 ++++++------------- new/src/reportModel.d.ts | 4 --- .../GuaranteedStateTestScenario.json | 2 ++ 4 files changed, 14 insertions(+), 40 deletions(-) diff --git a/new/src/App.tsx b/new/src/App.tsx index 523e845d..86efc4b5 100644 --- a/new/src/App.tsx +++ b/new/src/App.tsx @@ -1,22 +1,8 @@ import "./App.css"; -import ReportModel, { ReportStatistics } from "./reportModel"; +import ReportModel from "./reportModel"; import * as guaranteedStateScenario from "./sampleData/GuaranteedStateTestScenario.json"; -import { ScenarioOverview } from "./components/Scenarios/ScenarioOverview"; -import { useSearchParams } from "react-router-dom"; - -export const statistics: ReportStatistics[] = [ - { - numClasses: 3, - numScenarios: 5, - numFailedScenarios: 2, - numCases: 3, - numFailedCases: 3, - numSteps: 10, - durationInNanos: 12345678910, - numPendingScenarios: 0, - numSuccessfulScenarios: 3 - } -]; +import {ScenarioOverview} from "./components/Scenarios/ScenarioOverview"; +import {useSearchParams} from "react-router-dom"; const guaranteedStateReport: ReportModel = guaranteedStateScenario as unknown as ReportModel; diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 09567cd5..623a26f3 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -83,26 +83,16 @@ export function ScenarioOverview(props: { function createStatistics(scenarios: ScenarioModel[]): ReportStatistics { const allCases = scenarios.flatMap((scenario) => scenario.scenarioCases); - const allSteps = allCases.flatMap((scenarioCase) => {scenarioCase.steps}); - const failedCases = allCases.filter((scenarioCase) => scenarioCase.status === "FAILED" ); - - const failedScenarios = scenarios.filter((scenario) => scenario.scenarioCases.some((scenarioCase) => scenarioCase.status === "FAILED")); - const pendingScenarios = scenarios.filter((scenario) => scenario.scenarioCases.some((scenarioCase) => scenarioCase.status === "SOME_STEPS_PENDING" || scenarioCase.status === "SCENARIO_PENDING")); + const failedScenarios = scenarios.filter((scenario) => scenario.executionStatus === "FAILED"); + const pendingScenarios = scenarios.filter((scenario) => scenario.executionStatus === "PENDING"); + const successfulScenarios = scenarios.filter((scenario) => scenario.executionStatus === "SUCCESS"); return { - numClasses: 1, numScenarios: scenarios.length, - numFailedScenarios: failedScenarios.length, - numCases: allCases.length, - numFailedCases: failedCases.length, - numSteps: allSteps.length, - durationInNanos: 1, //scenario.durationInNanos, + numFailedScenarios: failedScenarios.length, + durationInNanos: allCases + .map((scenarioCase) => scenarioCase.durationInNanos) + .reduce((totalDuration, current) => totalDuration + current), numPendingScenarios: pendingScenarios.length, - //Math.sign( - // findNumberOfCasesWithStatus(scenario.scenarioCases, "SCENARIO_PENDING") - //), - numSuccessfulScenarios: 1 - //Math.sign( - // findNumberOfCasesWithStatus(scenario.scenarioCases, "SUCCESS") - //) + numSuccessfulScenarios: successfulScenarios.length, }; -} +} \ No newline at end of file diff --git a/new/src/reportModel.d.ts b/new/src/reportModel.d.ts index c77f6d6c..312a0580 100644 --- a/new/src/reportModel.d.ts +++ b/new/src/reportModel.d.ts @@ -48,12 +48,8 @@ interface ReportModelFile { file: File; } interface ReportStatistics { - numClasses: number; numScenarios: number; numFailedScenarios: number; - numCases: number; - numFailedCases: number; - numSteps: number; durationInNanos: number; numPendingScenarios: number; numSuccessfulScenarios: number; diff --git a/new/src/sampleData/GuaranteedStateTestScenario.json b/new/src/sampleData/GuaranteedStateTestScenario.json index 49d22e19..0d2a41a6 100644 --- a/new/src/sampleData/GuaranteedStateTestScenario.json +++ b/new/src/sampleData/GuaranteedStateTestScenario.json @@ -3,6 +3,7 @@ "name": "Guaranteed State", "scenarios": [ { + "executionStatus": "SUCCESS", "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", "testMethodName": "assure_before_method_of_first_test_is_executed_after_guaranteed_fields_validation", "description": "assure before method of first test is executed after guaranteed fields validation", @@ -84,6 +85,7 @@ { "className": "com.tngtech.jgiven.impl.GuaranteedStateTest", "testMethodName": "assure_before_method_of_second_test_is_executed_if_guaranteed_initialized", + "executionStatus": "PENDING", "description": "assure before method of second test is executed if guaranteed initialized", "tagIds": [], "explicitParameters": [], From ae503a7ec1fbf5aeed103e031d37eed89c9a4e38 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:27:23 +0100 Subject: [PATCH 23/45] Moved icon button styling to separate file and increased button size --- .../ScenarioOverview/ScenarioHead.styles.ts | 22 ++++++- .../ScenarioOverview/ScenarioHead.tsx | 59 +++++++------------ 2 files changed, 42 insertions(+), 39 deletions(-) diff --git a/new/src/components/ScenarioOverview/ScenarioHead.styles.ts b/new/src/components/ScenarioOverview/ScenarioHead.styles.ts index e7145471..64509e4c 100644 --- a/new/src/components/ScenarioOverview/ScenarioHead.styles.ts +++ b/new/src/components/ScenarioOverview/ScenarioHead.styles.ts @@ -1,5 +1,5 @@ import { styled } from "@mui/material/styles"; -import { Drawer, Link } from "@mui/material"; +import { Box, Button, Drawer, Link } from "@mui/material"; export const StyledDrawer = styled(Drawer)({ // width: 240, @@ -17,3 +17,23 @@ export const StyledContent = styled("div")(({ theme }) => ({ export const StyledLink = styled(Link)({ cursor: "pointer" }); + +export const StyledIconContainer = styled(Box)({ + width: "30px", + height: "30px", + p: 0.01, + display: "flex", + alignItems: "center", + justifyContent: "center", + border: "1px solid grey", + borderRadius: 1, + marginRight: "5px" +}); + +export const StyledIconButton = styled(Button)({ + "&:hover": { textDecoration: "none", color: "inherit" }, + "min-width": "1px", + "min-height": "1px", + height: "30px", + color: "black" +}); diff --git a/new/src/components/ScenarioOverview/ScenarioHead.tsx b/new/src/components/ScenarioOverview/ScenarioHead.tsx index ecf84ce2..0e7c0ce7 100644 --- a/new/src/components/ScenarioOverview/ScenarioHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioHead.tsx @@ -1,8 +1,6 @@ import type { ReportStatistics } from "../../reportModel"; import { - Box, Breadcrumbs, - Button, Divider, Grid, Link, @@ -23,7 +21,13 @@ import { createReportCircle } from "./DonutChart"; import React, { MouseEventHandler } from "react"; import { processWords } from "../../wordProcessor"; import { useSearchParams } from "react-router-dom"; -import { StyledContent, StyledDrawer, StyledLink } from "./ScenarioHead.styles"; +import { + StyledContent, + StyledDrawer, + StyledIconButton, + StyledIconContainer, + StyledLink +} from "./ScenarioHead.styles"; export interface ScenarioOverviewProps { statistic: ReportStatistics; @@ -147,57 +151,36 @@ function ScenarioActionButtons(props: { targets: ActionButtonTargets }) { return ( - + - + - - - + + + - + - + - + - + ); } -function ScenarioOverviewItem(props: { children: React.ReactNode; action: MouseEventHandler }) { - const sx = { - width: "12px", // or some other value - height: "12px", // same as width - p: 0.01, - display: "flex", - alignItems: "center", - justifyContent: "center", - border: "1px solid grey", - borderRadius: 1, - marginRight: "5px" - }; +function ScenarioHeaderIcon(props: { children: React.ReactNode; action: MouseEventHandler }) { return ( - - - + + ); } From d9d8834eae8ec6a65a81e2bb89935470aa5326dd Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:32:11 +0100 Subject: [PATCH 24/45] Ran npm audit fix --- new/package-lock.json | 1154 +++++++++++++++++++++-------------------- 1 file changed, 583 insertions(+), 571 deletions(-) diff --git a/new/package-lock.json b/new/package-lock.json index 091313aa..050cc2dd 100644 --- a/new/package-lock.json +++ b/new/package-lock.json @@ -35,9 +35,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==" }, "node_modules/@ampproject/remapping": { "version": "2.2.0", @@ -52,11 +52,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" @@ -100,9 +101,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -133,20 +134,21 @@ } }, "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dependencies": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -207,9 +209,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -266,17 +268,17 @@ } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } @@ -293,23 +295,23 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -429,28 +431,28 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -491,12 +493,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -504,9 +506,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1535,9 +1537,9 @@ } }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1747,9 +1749,9 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1833,32 +1835,32 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1866,12 +1868,12 @@ } }, "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3118,30 +3120,30 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -3153,12 +3155,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.24.tgz", + "integrity": "sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@kurkle/color": { @@ -4218,9 +4220,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "node_modules/@types/express": { "version": "4.17.14", @@ -4675,133 +4677,133 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -4833,9 +4835,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -4864,9 +4866,9 @@ } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peerDependencies": { "acorn": "^8" } @@ -5443,9 +5445,9 @@ } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -5680,9 +5682,9 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -5691,13 +5693,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -5798,9 +5804,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001583", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz", - "integrity": "sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==", + "version": "1.0.30001591", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", + "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", "funding": [ { "type": "opencollective", @@ -7013,9 +7019,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.689", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz", + "integrity": "sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ==" }, "node_modules/emittery": { "version": "0.8.1", @@ -7050,9 +7056,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", + "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -7151,9 +7157,9 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" }, "node_modules/es-shim-unscopables": { "version": "1.0.0", @@ -7517,9 +7523,9 @@ } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -7591,9 +7597,9 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -8304,9 +8310,9 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "funding": [ { "type": "individual", @@ -9700,9 +9706,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -11833,9 +11839,9 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "bin": { "json5": "lib/cli.js" }, @@ -12070,9 +12076,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -12313,9 +12319,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12369,9 +12381,9 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -12956,9 +12968,9 @@ } }, "node_modules/postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "funding": [ { "type": "opencollective", @@ -12967,10 +12979,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -15221,9 +15237,9 @@ } }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -15254,9 +15270,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -15309,9 +15325,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dependencies": { "randombytes": "^2.1.0" } @@ -16047,12 +16063,12 @@ } }, "node_modules/terser": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz", - "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==", + "version": "5.28.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", + "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -16064,15 +16080,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -16162,9 +16178,9 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -16211,9 +16227,9 @@ } }, "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dependencies": { "minimist": "^1.2.0" }, @@ -16407,9 +16423,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "funding": [ { "type": "opencollective", @@ -16418,6 +16434,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -16425,7 +16445,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -16579,21 +16599,21 @@ } }, "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -16602,9 +16622,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -16861,11 +16881,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -17012,9 +17027,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "engines": { "node": ">=0.10.0" } @@ -17473,9 +17488,9 @@ }, "dependencies": { "@adobe/css-tools": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==" }, "@ampproject/remapping": { "version": "2.2.0", @@ -17487,11 +17502,12 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" } }, "@babel/compat-data": { @@ -17522,9 +17538,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -17544,19 +17560,20 @@ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "requires": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -17601,9 +17618,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -17644,16 +17661,16 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", @@ -17664,20 +17681,20 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { @@ -17764,22 +17781,22 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.18.6", @@ -17808,19 +17825,19 @@ } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -18456,9 +18473,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -18613,9 +18630,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -18679,39 +18696,39 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" } }, "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -19569,27 +19586,27 @@ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } } } @@ -19600,12 +19617,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.24.tgz", + "integrity": "sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==", "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@kurkle/color": { @@ -20270,9 +20287,9 @@ } }, "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "@types/express": { "version": "4.17.14", @@ -20624,133 +20641,133 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "requires": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -20779,9 +20796,9 @@ } }, "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" }, "acorn-globals": { "version": "6.0.0", @@ -20800,9 +20817,9 @@ } }, "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "requires": {} }, "acorn-jsx": { @@ -21209,9 +21226,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -21410,14 +21427,14 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" } }, "bser": { @@ -21488,9 +21505,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001583", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz", - "integrity": "sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==" + "version": "1.0.30001591", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", + "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==" }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -22368,9 +22385,9 @@ } }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.689", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz", + "integrity": "sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ==" }, "emittery": { "version": "0.8.1", @@ -22393,9 +22410,9 @@ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", + "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -22481,9 +22498,9 @@ } }, "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" }, "es-shim-unscopables": { "version": "1.0.0", @@ -22834,9 +22851,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -22881,9 +22898,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -23338,9 +23355,9 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" }, "for-each": { "version": "0.3.3", @@ -24292,9 +24309,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -25855,9 +25872,9 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonfile": { "version": "6.1.0", @@ -26033,9 +26050,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -26208,9 +26225,9 @@ } }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "natural-compare": { "version": "1.4.0", @@ -26252,9 +26269,9 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "normalize-path": { "version": "3.0.0", @@ -26663,11 +26680,11 @@ } }, "postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -28080,9 +28097,9 @@ } }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -28103,9 +28120,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "requires": { "lru-cache": "^6.0.0" } @@ -28153,9 +28170,9 @@ } }, "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "requires": { "randombytes": "^2.1.0" } @@ -28728,12 +28745,12 @@ } }, "terser": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz", - "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==", + "version": "5.28.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", + "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -28746,15 +28763,15 @@ } }, "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "requires": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" } }, "test-exclude": { @@ -28806,9 +28823,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -28848,9 +28865,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "requires": { "minimist": "^1.2.0" } @@ -28986,9 +29003,9 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -29114,21 +29131,21 @@ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" }, "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "requires": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -29137,18 +29154,13 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -29421,9 +29433,9 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" }, "workbox-background-sync": { "version": "6.5.4", From 1cc0fb66d06da6648662dd47cf807a0663e0b9d7 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:34:55 +0100 Subject: [PATCH 25/45] force Json to be JsonReport Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/resources/tagFile.json | 383 +++++++++++++++++++++++++++++++++++++ new/src/ReportFilter.ts | 13 +- new/src/reportModel.d.ts | 5 +- new/src/repository.ts | 11 +- 4 files changed, 405 insertions(+), 7 deletions(-) create mode 100644 new/resources/tagFile.json diff --git a/new/resources/tagFile.json b/new/resources/tagFile.json new file mode 100644 index 00000000..d7e7a352 --- /dev/null +++ b/new/resources/tagFile.json @@ -0,0 +1,383 @@ +{ + "tagTypeMap": { + "com.tngtech.jgiven.tags.Issue": { + "fullType": "com.tngtech.jgiven.tags.Issue", + "type": "Issue", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/1\u0027\u003eIssue #1\u003c/a\u003e", + "prependType": true, + "color": "orange", + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureStepParameters": { + "fullType": "com.tngtech.jgiven.tags.FeatureStepParameters", + "type": "FeatureStepParameters", + "name": "Step Parameters", + "description": "Steps can have parameters", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.Feature": { + "fullType": "com.tngtech.jgiven.tags.Feature", + "type": "Feature", + "name": "Features", + "description": "", + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureCore": { + "fullType": "com.tngtech.jgiven.tags.FeatureCore", + "type": "FeatureCore", + "name": "Core Features", + "description": "", + "tags": [ + "com.tngtech.jgiven.tags.Feature" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureJUnit": { + "fullType": "com.tngtech.jgiven.tags.FeatureJUnit", + "type": "FeatureJUnit", + "name": "JUnit", + "description": "Tests can be be executed with JUnit", + "tags": [ + "com.tngtech.jgiven.tags.FeatureTestFramework" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTestFramework": { + "fullType": "com.tngtech.jgiven.tags.FeatureTestFramework", + "type": "FeatureTestFramework", + "name": "Supported Test Frameworks", + "description": "JGiven can be used together with JUnit and TestNG", + "tags": [ + "com.tngtech.jgiven.tags.Feature" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureGerman": { + "fullType": "com.tngtech.jgiven.tags.FeatureGerman", + "type": "FeatureGerman", + "name": "German Scenarios", + "description": "Scenarios can be written in German", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureSpanish": { + "fullType": "com.tngtech.jgiven.tags.FeatureSpanish", + "type": "FeatureSpanish", + "name": "Spanish Scenarios", + "description": "Scenarios can be written in Spanish", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureJUnit5": { + "fullType": "com.tngtech.jgiven.tags.FeatureJUnit5", + "type": "FeatureJUnit5", + "name": "JUnit5", + "description": "Tests can be be executed with JUnit5", + "tags": [ + "com.tngtech.jgiven.tags.FeatureTestFramework" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureCaseDiffs": { + "fullType": "com.tngtech.jgiven.tags.FeatureCaseDiffs", + "type": "FeatureCaseDiffs", + "name": "Case Diffs", + "description": "In order to get a better overview over structurally different cases of a scenario\u003cbr\u003eAs a human,\u003cbr\u003eI want the differences highlighted in the generated report", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureAsciiDocReport", + "type": "FeatureAsciiDocReport", + "name": "AsciiDoc Report", + "description": "In order to easily combine hand-written documentation with JGiven scenarios\u003cbr\u003eAs a developer,\u003cbr\u003eI want that JGiven generates AsciiDoc reports", + "tags": [ + "com.tngtech.jgiven.tags.FeatureReport" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureReport", + "type": "FeatureReport", + "name": "Reporting", + "description": "JGiven can generate text and HTML reports. An AsciiDoc report is currently under development.", + "tags": [ + "com.tngtech.jgiven.tags.Feature" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.BrowserTest": { + "fullType": "com.tngtech.jgiven.tags.BrowserTest", + "type": "BrowserTest", + "description": "Tests with this tag use a browser for testing", + "color": "rgb(69, 158, 19)", + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureHtml5Report": { + "fullType": "com.tngtech.jgiven.tags.FeatureHtml5Report", + "type": "FeatureHtml5Report", + "name": "HTML5 Report", + "description": "In order to have an interactive JGiven report for non-developers\u003cbr\u003eAs a developer,\u003cbr\u003eI want that JGiven generates HTML5 reports", + "tags": [ + "com.tngtech.jgiven.tags.FeatureReport" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureAttachments": { + "fullType": "com.tngtech.jgiven.tags.FeatureAttachments", + "type": "FeatureAttachments", + "name": "Attachments", + "description": "In order to get additional information about a step, like screenshots, for example\u003cbr\u003eAs a JGiven user,\u003cbr\u003eI want that steps can have attachments", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { + "fullType": "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle", + "type": "FeatureTagsWithCustomStyle", + "name": "Tags with Custom Styles", + "description": "Tags can be arbitrarily styled with the \u0027style\u0027 attribute of the \u0027@IsTag\u0027 annotation. This tag shows how to apply such a custom style", + "style": "background-color: darkgreen; color: white; font-weight: bold", + "tags": [ + "com.tngtech.jgiven.tags.FeatureTags-Tags" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTags": { + "fullType": "com.tngtech.jgiven.tags.FeatureTags", + "type": "FeatureTags", + "description": "Scenarios can be tagged with annotations", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTextReport": { + "fullType": "com.tngtech.jgiven.tags.FeatureTextReport", + "type": "FeatureTextReport", + "name": "Text Report", + "description": "Plain text reports can be generated", + "tags": [ + "com.tngtech.jgiven.tags.FeatureReport" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureDataTables": { + "fullType": "com.tngtech.jgiven.tags.FeatureDataTables", + "type": "FeatureDataTables", + "name": "Data Tables", + "description": "In order to get a better overview over the different cases of a scenario\u003cbr\u003eAs a human,\u003cbr\u003eI want to have different cases represented as a data table", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeatureTestNg": { + "fullType": "com.tngtech.jgiven.tags.FeatureTestNg", + "type": "FeatureTestNg", + "name": "TestNG", + "description": "Tests can be be executed with TestNG", + "tags": [ + "com.tngtech.jgiven.tags.FeatureTestFramework" + ], + "href": "" + }, + "com.tngtech.jgiven.tags.FeaturePending": { + "fullType": "com.tngtech.jgiven.tags.FeaturePending", + "type": "FeaturePending", + "name": "Pending Annotation", + "description": "As a good BDD practitioner,\u003cbr\u003eI want to write my scenarios before I start coding\u003cbr\u003eIn order to discuss them with business stakeholders", + "tags": [ + "com.tngtech.jgiven.tags.FeatureCore" + ], + "href": "" + }, + "com.tngtech.jgiven.tests.TestTag": { + "fullType": "com.tngtech.jgiven.tests.TestTag", + "type": "TestTag", + "description": "", + "href": "" + } + }, + "tags": { + "com.tngtech.jgiven.tags.Issue-#1": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#1" + }, + "com.tngtech.jgiven.tags.FeatureStepParameters": { + "tagType": "com.tngtech.jgiven.tags.FeatureStepParameters" + }, + "com.tngtech.jgiven.tags.Feature": { + "tagType": "com.tngtech.jgiven.tags.Feature" + }, + "com.tngtech.jgiven.tags.FeatureCore": { + "tagType": "com.tngtech.jgiven.tags.FeatureCore" + }, + "com.tngtech.jgiven.tags.FeatureJUnit": { + "tagType": "com.tngtech.jgiven.tags.FeatureJUnit" + }, + "com.tngtech.jgiven.tags.FeatureTestFramework": { + "tagType": "com.tngtech.jgiven.tags.FeatureTestFramework" + }, + "com.tngtech.jgiven.tags.Issue-#200": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#200", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/200\u0027\u003eIssue #200\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#25": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#25", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/25\u0027\u003eIssue #25\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#49": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#49", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/49\u0027\u003eIssue #49\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.FeatureGerman": { + "tagType": "com.tngtech.jgiven.tags.FeatureGerman" + }, + "com.tngtech.jgiven.tags.FeatureSpanish": { + "tagType": "com.tngtech.jgiven.tags.FeatureSpanish" + }, + "com.tngtech.jgiven.tags.FeatureJUnit5": { + "tagType": "com.tngtech.jgiven.tags.FeatureJUnit5" + }, + "com.tngtech.jgiven.tags.Issue-#163": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#163", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/163\u0027\u003eIssue #163\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#32": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#32", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/32\u0027\u003eIssue #32\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.FeatureCaseDiffs": { + "tagType": "com.tngtech.jgiven.tags.FeatureCaseDiffs" + }, + "com.tngtech.jgiven.tags.FeatureAsciiDocReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureAsciiDocReport" + }, + "com.tngtech.jgiven.tags.FeatureReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureReport" + }, + "com.tngtech.jgiven.tags.BrowserTest": { + "tagType": "com.tngtech.jgiven.tags.BrowserTest" + }, + "com.tngtech.jgiven.tags.FeatureHtml5Report": { + "tagType": "com.tngtech.jgiven.tags.FeatureHtml5Report" + }, + "com.tngtech.jgiven.tags.Issue-#236": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#236", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/236\u0027\u003eIssue #236\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#755": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#755", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/755\u0027\u003eIssue #755\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#191": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#191", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/191\u0027\u003eIssue #191\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.FeatureAttachments": { + "tagType": "com.tngtech.jgiven.tags.FeatureAttachments" + }, + "com.tngtech.jgiven.tags.Issue-#226": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#226", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/226\u0027\u003eIssue #226\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle": { + "tagType": "com.tngtech.jgiven.tags.FeatureTagsWithCustomStyle" + }, + "com.tngtech.jgiven.tags.FeatureTags-Tags": { + "tagType": "com.tngtech.jgiven.tags.FeatureTags", + "value": "Tags" + }, + "com.tngtech.jgiven.tags.Issue-#146": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#146", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/146\u0027\u003eIssue #146\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#47": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#47", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/47\u0027\u003eIssue #47\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#274": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#274", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/274\u0027\u003eIssue #274\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.FeatureTextReport": { + "tagType": "com.tngtech.jgiven.tags.FeatureTextReport" + }, + "com.tngtech.jgiven.tags.FeatureDataTables": { + "tagType": "com.tngtech.jgiven.tags.FeatureDataTables" + }, + "com.tngtech.jgiven.tags.Issue-#34": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#34", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/34\u0027\u003eIssue #34\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#152": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#152", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/152\u0027\u003eIssue #152\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#52": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#52", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/52\u0027\u003eIssue #52\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#10": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#10", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/10\u0027\u003eIssue #10\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#104": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#104", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/104\u0027\u003eIssue #104\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.FeatureTestNg": { + "tagType": "com.tngtech.jgiven.tags.FeatureTestNg" + }, + "com.tngtech.jgiven.tags.Issue-#4": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#4", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/4\u0027\u003eIssue #4\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.FeaturePending": { + "tagType": "com.tngtech.jgiven.tags.FeaturePending" + }, + "com.tngtech.jgiven.tags.Issue-#123": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#123", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/123\u0027\u003eIssue #123\u003c/a\u003e" + }, + "com.tngtech.jgiven.tags.Issue-#829": { + "tagType": "com.tngtech.jgiven.tags.Issue", + "value": "#829", + "description": "Scenarios of \u003ca href\u003d\u0027https://github.com/TNG/JGiven/issues/829\u0027\u003eIssue #829\u003c/a\u003e" + }, + "com.tngtech.jgiven.tests.TestTag-testValue": { + "tagType": "com.tngtech.jgiven.tests.TestTag", + "value": "testValue" + } + } +} \ No newline at end of file diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts index 7703d2cb..c47efb73 100644 --- a/new/src/ReportFilter.ts +++ b/new/src/ReportFilter.ts @@ -1,6 +1,13 @@ import {repository} from "./repository"; +import ReportModel from "./reportModel"; + +interface JsonReport { + scenarios: ReportModel[], + tagFile: TagFile +}; + +type TagFile = { tagTypeMap: unknown, tags: unknown[] } -type Report = ReturnType; export function filterByStatus(status: string) { const fullReport = repository.getReport(); @@ -11,6 +18,6 @@ export function filterByStatus(status: string) { } -function filterScenarios(report: Report, status: string) { - //return report.scenarios.filter(scenario => scenario.scenarios.filter(sc => sc.executionStatus === status)) +function filterScenarios(report: JsonReport, status: string) { + return report.scenarios.filter(scenario => scenario.scenarios.filter(sc => sc.executionStatus === status)) } \ No newline at end of file diff --git a/new/src/reportModel.d.ts b/new/src/reportModel.d.ts index c77f6d6c..ef1c84e3 100644 --- a/new/src/reportModel.d.ts +++ b/new/src/reportModel.d.ts @@ -103,7 +103,8 @@ interface StepModel { isSectionTitle?: boolean; comment?: string; } -interface Tag { + +export interface Tag { fullType: string; type: string; name: string; @@ -125,4 +126,4 @@ interface Word { type ExecutionStatus = "SCENARIO_PENDING" | "SUCCESS" | "FAILED" | "SOME_STEPS_PENDING"; type HeaderType = "NONE" | "HORIZONTAL" | "VERTICAL" | "BOTH"; type InvocationMode = "NORMAL" | "NESTED" | "FAILED" | "SKIPPED" | "PENDING"; -type StepStatus = "PASSED" | "FAILED" | "SKIPPED" | "PENDING"; +export type StepStatus = "PASSED" | "FAILED" | "SKIPPED" | "PENDING" |/*shows up in json file*/"SUCCESS"; diff --git a/new/src/repository.ts b/new/src/repository.ts index 8c84af1a..dc5ca2ae 100644 --- a/new/src/repository.ts +++ b/new/src/repository.ts @@ -1,7 +1,14 @@ import JGivenReport from '../resources/jgivenReport.json'; +import ReportModel, {Tag} from "./reportModel"; export const repository = { - getReport() { - return JGivenReport; + getReport(): JsonReport { + return JGivenReport as unknown as JsonReport; } } + +interface JsonReport { + scenarios: ReportModel[], + tagFile: TagFile +}; +type TagFile = { tagTypeMap: Record, tags: Record[] } From b0b3012f58db63e48c92bfb0da382a492b29bdcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 14:35:59 +0100 Subject: [PATCH 26/45] number format change --- new/src/components/utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/new/src/components/utils.ts b/new/src/components/utils.ts index 0009142d..3a2ee647 100644 --- a/new/src/components/utils.ts +++ b/new/src/components/utils.ts @@ -1,4 +1,3 @@ export function addRuntime(input: { durationInNanos: number }): string { - return input.durationInNanos > 1e9 ? `(${(input.durationInNanos / 1e9).toFixed(3)}s)` : ""; - //`(${Math.round(input.durationInNanos/1e6)}ms)` : ""; + return input.durationInNanos > 1e7 ? `(${(input.durationInNanos / 1e9).toFixed(3)}s)` : ""; } From b7039c30f9be8404763f5258d31d3cfd35f0d16b Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:44:59 +0100 Subject: [PATCH 27/45] make as sample tag file available in a repository Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/repository.ts | 27 +++++++++++++++++++++++---- new/src/test.test.ts | 23 +++++++++++++++++++++++ 2 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 new/src/test.test.ts diff --git a/new/src/repository.ts b/new/src/repository.ts index dc5ca2ae..f50ded2d 100644 --- a/new/src/repository.ts +++ b/new/src/repository.ts @@ -1,9 +1,14 @@ -import JGivenReport from '../resources/jgivenReport.json'; -import ReportModel, {Tag} from "./reportModel"; +import jGivenReport from '../resources/jgivenReport.json'; +import tagFile from '../resources/tagFile.json'; +import ReportModel from "./reportModel"; export const repository = { getReport(): JsonReport { - return JGivenReport as unknown as JsonReport; + return jGivenReport as unknown as JsonReport; + }, + + getTags(): TagFile { + return tagFile; } } @@ -11,4 +16,18 @@ interface JsonReport { scenarios: ReportModel[], tagFile: TagFile }; -type TagFile = { tagTypeMap: Record, tags: Record[] } +type TagFile = { tagTypeMap: Record, tags: Record } + +interface JsonTagType { + fullType: string, + type: string, + description: string, + prependType?: boolean, + color?: string, + href: string +} + +interface JsonTag { + tagType: string, + value?: string, +} \ No newline at end of file diff --git a/new/src/test.test.ts b/new/src/test.test.ts new file mode 100644 index 00000000..e638732e --- /dev/null +++ b/new/src/test.test.ts @@ -0,0 +1,23 @@ +import JGivenReport from '../resources/jgivenReport.json'; +import {StepStatus} from "./reportModel"; + +test('Test', () => { + + const allStepsStatus: StepStatus[] = []; + for (const scenario of JGivenReport.scenarios) { + for (const scenarioCase of scenario.scenarios) { + for (const step of scenarioCase.scenarioCases) { + if (isStepStatus(step.status)) { + allStepsStatus.push(step.status); + } else { + console.log('Invalid step status: ', step.status, ' in scenario: ', scenarioCase.testMethodName, ' in class: ', scenario.className); + } + } + + } + } +}); + +function isStepStatus(status: string): status is StepStatus { + return ['FAILED', 'PENDING', 'PASSED', 'SKIPPED', 'SUCCESS'].includes(status); +} \ No newline at end of file From 03cd18cc6f2a7de82d1a01f12b6f65595bd2eb16 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:49:21 +0100 Subject: [PATCH 28/45] Use onClick-properties to pass callbacks and avoid usage of built-in MouseEventHandlers --- .../ScenarioOverview/ScenarioHead.tsx | 52 ++++++++++++------- .../components/Scenarios/ScenarioOverview.tsx | 42 +++++++-------- 2 files changed, 53 insertions(+), 41 deletions(-) diff --git a/new/src/components/ScenarioOverview/ScenarioHead.tsx b/new/src/components/ScenarioOverview/ScenarioHead.tsx index 0e7c0ce7..548af463 100644 --- a/new/src/components/ScenarioOverview/ScenarioHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioHead.tsx @@ -18,7 +18,7 @@ import AddIcon from "@mui/icons-material/Add"; import PrintOutlinedIcon from "@mui/icons-material/PrintOutlined"; import BookmarkOutlinedIcon from "@mui/icons-material/BookmarkOutlined"; import { createReportCircle } from "./DonutChart"; -import React, { MouseEventHandler } from "react"; +import { PropsWithChildren } from "react"; import { processWords } from "../../wordProcessor"; import { useSearchParams } from "react-router-dom"; import { @@ -29,19 +29,17 @@ import { StyledLink } from "./ScenarioHead.styles"; +export enum HeaderIconType {} + export interface ScenarioOverviewProps { statistic: ReportStatistics; - targets: ActionButtonTargets; + onCollapseButtonClick: () => void; + onExpandButtonClick: () => void; + onPrintButtonClick: () => void; + onBookmarkButtonClick: () => void; headers: Headers; } -interface ActionButtonTargets { - minusButtonTarget: MouseEventHandler; - plusButtonTarget: MouseEventHandler; - printButtonTarget: MouseEventHandler; - bookmarkButtonTarget: MouseEventHandler; -} - interface Headers { aboveHeader?: string; header: string; @@ -49,6 +47,8 @@ interface Headers { } export function ScenarioHead(props: ScenarioOverviewProps) { + const { statistic, headers, ...iconClickHandlers } = props; + return (
@@ -61,12 +61,12 @@ export function ScenarioHead(props: ScenarioOverviewProps) { alignItems="flex-start" > - + {createReportCircle(props)} - + @@ -147,26 +147,38 @@ function ScenarioTitles(props: { headers: Headers }) { ); } -function ScenarioActionButtons(props: { targets: ActionButtonTargets }) { +interface ScenarioActionButtonsProps { + onCollapseButtonClick: () => void; + onExpandButtonClick: () => void; + onPrintButtonClick: () => void; + onBookmarkButtonClick: () => void; +} + +function ScenarioActionButtons({ + onCollapseButtonClick, + onExpandButtonClick, + onPrintButtonClick, + onBookmarkButtonClick +}: ScenarioActionButtonsProps) { return ( - + - + - + - + @@ -174,11 +186,13 @@ function ScenarioActionButtons(props: { targets: ActionButtonTargets }) { ); } -function ScenarioHeaderIcon(props: { children: React.ReactNode; action: MouseEventHandler }) { +type ScenarioHeaderIconProps = PropsWithChildren<{ onClick: () => void }>; + +function ScenarioHeaderIcon({ children, onClick }: ScenarioHeaderIconProps) { return ( - - {props.children} + + {children} ); diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 623a26f3..826d291c 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -36,21 +36,17 @@ export function ScenarioOverview(props: { header: props.title }} statistic={createStatistics(props.scenarios)} - targets={{ - minusButtonTarget: () => { - console.log("Collapsing stuff"); - setAllExpanded(ExpansionState.COLLAPSED); - }, - plusButtonTarget: () => { - console.log("Expanding stuff"); - setAllExpanded(ExpansionState.EXPANDED); - }, - printButtonTarget: () => { - console.error("print not implemented"); - }, - bookmarkButtonTarget: () => { - console.error("bookmark not implemented"); - } + onCollapseButtonClick={() => { + setAllExpanded(ExpansionState.COLLAPSED); + }} + onExpandButtonClick={() => { + setAllExpanded(ExpansionState.EXPANDED); + }} + onBookmarkButtonClick={() => { + /* not implemented yet */ + }} + onPrintButtonClick={() => { + /* not implemented yet */ }} />
@@ -82,17 +78,19 @@ export function ScenarioOverview(props: { } function createStatistics(scenarios: ScenarioModel[]): ReportStatistics { - const allCases = scenarios.flatMap((scenario) => scenario.scenarioCases); - const failedScenarios = scenarios.filter((scenario) => scenario.executionStatus === "FAILED"); - const pendingScenarios = scenarios.filter((scenario) => scenario.executionStatus === "PENDING"); - const successfulScenarios = scenarios.filter((scenario) => scenario.executionStatus === "SUCCESS"); + const allCases = scenarios.flatMap(scenario => scenario.scenarioCases); + const failedScenarios = scenarios.filter(scenario => scenario.executionStatus === "FAILED"); + const pendingScenarios = scenarios.filter(scenario => scenario.executionStatus === "PENDING"); + const successfulScenarios = scenarios.filter( + scenario => scenario.executionStatus === "SUCCESS" + ); return { numScenarios: scenarios.length, numFailedScenarios: failedScenarios.length, durationInNanos: allCases - .map((scenarioCase) => scenarioCase.durationInNanos) + .map(scenarioCase => scenarioCase.durationInNanos) .reduce((totalDuration, current) => totalDuration + current), numPendingScenarios: pendingScenarios.length, - numSuccessfulScenarios: successfulScenarios.length, + numSuccessfulScenarios: successfulScenarios.length }; -} \ No newline at end of file +} From fc9301362c187e34a6ea99c4b7e9b813559955c5 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 15:05:54 +0100 Subject: [PATCH 29/45] better status filter Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/ReportFilter.ts | 20 +++++++--- .../ScenarioOverview/ScenarioHead.tsx | 39 ++++++------------- new/src/reportModel.d.ts | 10 +++-- 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts index c47efb73..c78eb770 100644 --- a/new/src/ReportFilter.ts +++ b/new/src/ReportFilter.ts @@ -1,5 +1,6 @@ import {repository} from "./repository"; import ReportModel from "./reportModel"; +import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioHead"; interface JsonReport { scenarios: ReportModel[], @@ -11,13 +12,20 @@ type TagFile = { tagTypeMap: unknown, tags: unknown[] } export function filterByStatus(status: string) { const fullReport = repository.getReport(); - return { - ...fullReport, - scenarios: filterScenarios(fullReport, status) - } + return filterScenarios(fullReport.scenarios, status) } -function filterScenarios(report: JsonReport, status: string) { - return report.scenarios.filter(scenario => scenario.scenarios.filter(sc => sc.executionStatus === status)) +function filterScenarios(reports: ReportModel[], status: ScenarioStatusFilter) { + const filteredReports = []; + for (const report of reports) { + const filteredScenarios = report.scenarios.filter(scenario => scenario.executionStatus === status) + if (filteredScenarios.length > 0) { + filteredReports.push({ + ...report, + scenarios: filteredScenarios + }) + } + } + return filteredReports; } \ No newline at end of file diff --git a/new/src/components/ScenarioOverview/ScenarioHead.tsx b/new/src/components/ScenarioOverview/ScenarioHead.tsx index 548af463..bd0a0638 100644 --- a/new/src/components/ScenarioOverview/ScenarioHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioHead.tsx @@ -1,33 +1,18 @@ -import type { ReportStatistics } from "../../reportModel"; -import { - Breadcrumbs, - Divider, - Grid, - Link, - List, - ListItem, - ListItemText, - Typography -} from "@mui/material"; +import type {ReportStatistics} from "../../reportModel"; +import {Breadcrumbs, Divider, Grid, Link, List, ListItem, ListItemText, Typography} from "@mui/material"; import CheckIcon from "@mui/icons-material/CheckBox"; import ErrorIcon from "@mui/icons-material/Error"; import DoNotDisturbAltIcon from "@mui/icons-material/DoNotDisturbAlt"; -import { addRuntime } from "../utils"; +import {addRuntime} from "../utils"; import RemoveIcon from "@mui/icons-material/Remove"; import AddIcon from "@mui/icons-material/Add"; import PrintOutlinedIcon from "@mui/icons-material/PrintOutlined"; import BookmarkOutlinedIcon from "@mui/icons-material/BookmarkOutlined"; -import { createReportCircle } from "./DonutChart"; -import { PropsWithChildren } from "react"; -import { processWords } from "../../wordProcessor"; -import { useSearchParams } from "react-router-dom"; -import { - StyledContent, - StyledDrawer, - StyledIconButton, - StyledIconContainer, - StyledLink -} from "./ScenarioHead.styles"; +import {createReportCircle} from "./DonutChart"; +import {PropsWithChildren} from "react"; +import {processWords} from "../../wordProcessor"; +import {useSearchParams} from "react-router-dom"; +import {StyledContent, StyledDrawer, StyledIconButton, StyledIconContainer, StyledLink} from "./ScenarioHead.styles"; export enum HeaderIconType {} @@ -199,9 +184,9 @@ function ScenarioHeaderIcon({ children, onClick }: ScenarioHeaderIconProps) { } export enum ScenarioStatusFilter { - SUCCESS = "success", - FAILURE = "failure", - PENDING = "pending" + SUCCESS = "SUCCESS", + FAILED = "FAILED", + PENDING = "PENDING" } function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { @@ -222,7 +207,7 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { underline="hover" className="pseudo-link" color={"red"} - onClick={() => setUrlSearchParams({ result: ScenarioStatusFilter.FAILURE })} + onClick={() => setUrlSearchParams({result: ScenarioStatusFilter.FAILED})} > {props.statistic.numFailedScenarios} failed, diff --git a/new/src/reportModel.d.ts b/new/src/reportModel.d.ts index d2b960f6..f8c97278 100644 --- a/new/src/reportModel.d.ts +++ b/new/src/reportModel.d.ts @@ -114,12 +114,14 @@ export interface Tag { href?: string; hideInNav?: boolean; } -interface Word { + +export interface Word { value: string; isIntroWord?: boolean; argumentInfo?: ArgumentInfo; } -type ExecutionStatus = "SCENARIO_PENDING" | "SUCCESS" | "FAILED" | "SOME_STEPS_PENDING"; -type HeaderType = "NONE" | "HORIZONTAL" | "VERTICAL" | "BOTH"; -type InvocationMode = "NORMAL" | "NESTED" | "FAILED" | "SKIPPED" | "PENDING"; + +export type ExecutionStatus = "SCENARIO_PENDING" | "SUCCESS" | "FAILED" | "SOME_STEPS_PENDING"; +export type HeaderType = "NONE" | "HORIZONTAL" | "VERTICAL" | "BOTH"; +export type InvocationMode = "NORMAL" | "NESTED" | "FAILED" | "SKIPPED" | "PENDING"; export type StepStatus = "PASSED" | "FAILED" | "SKIPPED" | "PENDING" |/*shows up in json file*/"SUCCESS"; From 9535559b97ceb1458b9af316bd3c2f0f5f170058 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 15:06:54 +0100 Subject: [PATCH 30/45] fix compile errors Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/ReportFilter.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts index c78eb770..f4425452 100644 --- a/new/src/ReportFilter.ts +++ b/new/src/ReportFilter.ts @@ -2,15 +2,7 @@ import {repository} from "./repository"; import ReportModel from "./reportModel"; import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioHead"; -interface JsonReport { - scenarios: ReportModel[], - tagFile: TagFile -}; - -type TagFile = { tagTypeMap: unknown, tags: unknown[] } - - -export function filterByStatus(status: string) { +export function filterByStatus(status: ScenarioStatusFilter) { const fullReport = repository.getReport(); return filterScenarios(fullReport.scenarios, status) From 5fd63b82d6e2b8ddff5a1569b5a380c29df0f572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 15:13:17 +0100 Subject: [PATCH 31/45] Restructured Scenario Accordion --- ...rioHead.tsx => ScenarioCollectionHead.tsx} | 2 +- new/src/components/Scenarios/Scenario.tsx | 127 +++++++----------- .../components/Scenarios/ScenarioCaption.tsx | 10 ++ new/src/components/Scenarios/ScenarioHead.tsx | 57 ++++++++ .../components/Scenarios/ScenarioOverview.tsx | 4 +- new/src/components/StatusIconSelector.tsx | 11 +- new/src/reportModel.d.ts | 9 +- 7 files changed, 124 insertions(+), 96 deletions(-) rename new/src/components/ScenarioOverview/{ScenarioHead.tsx => ScenarioCollectionHead.tsx} (99%) create mode 100644 new/src/components/Scenarios/ScenarioCaption.tsx create mode 100644 new/src/components/Scenarios/ScenarioHead.tsx diff --git a/new/src/components/ScenarioOverview/ScenarioHead.tsx b/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx similarity index 99% rename from new/src/components/ScenarioOverview/ScenarioHead.tsx rename to new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx index bd0a0638..4ea078dd 100644 --- a/new/src/components/ScenarioOverview/ScenarioHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx @@ -31,7 +31,7 @@ interface Headers { belowHeader?: string; } -export function ScenarioHead(props: ScenarioOverviewProps) { +export function ScenarioCollectionHead(props: ScenarioOverviewProps) { const { statistic, headers, ...iconClickHandlers } = props; return ( diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index 6c6e9c16..6d91ca5f 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -1,13 +1,11 @@ -import type { ScenarioCaseModel, ScenarioModel, StepModel } from "../../reportModel"; -import { Accordion, AccordionDetails, Box, Grid, Link, Typography } from "@mui/material"; -import { styled } from "@mui/material/styles"; -import ArrowForwardIosSharpIcon from "@mui/icons-material/ArrowForwardIosSharp"; -import MuiAccordionSummary, { AccordionSummaryProps } from "@mui/material/AccordionSummary"; -import { PropsWithChildren, useCallback, useEffect, useState } from "react"; -import { addRuntime } from "../utils"; -import { StatusIcon } from "../StatusIconSelector"; -import { processWords } from "../../wordProcessor"; -import { ExpansionState } from "./ScenarioOverview"; +import type {ScenarioCaseModel, ScenarioModel, StepModel} from "../../reportModel"; +import {Accordion, AccordionDetails, Box, Link, Typography} from "@mui/material"; +import {useCallback, useEffect, useState} from "react"; +import {addRuntime} from "../utils"; +import {processWords} from "../../wordProcessor"; +import {ExpansionState} from "./ScenarioOverview"; +import {ScenarioHead} from "./ScenarioHead"; +import {ScenarioCaption} from "./ScenarioCaption"; export interface ScenarioProps { scenario: ScenarioModel; @@ -42,14 +40,23 @@ export function Scenario(props: ScenarioProps) { id={`${props.scenario.className}#${props.scenario.testMethodName}`} aria-label={`Scenario ${props.scenario.description}`} > - + + + +
) : (
@@ -64,64 +71,26 @@ function SingleCaseScenario(props: { summary: string; className: string; }) { - const AccordionSummary = styled((props: AccordionSummaryProps) => ( - } - {...props} - /> - ))(({ theme }) => ({ - backgroundColor: - theme.palette.mode === "dark" ? "rgba(255, 255, 255, .05)" : "rgba(0, 0, 0, .03)", - flexDirection: "row-reverse", - "& .MuiAccordionSummary-expandIconWrapper.Mui-expanded": { - transform: "rotate(90deg)" - }, - "& .MuiAccordionSummary-content": { - marginLeft: theme.spacing(1) - } - })); + return ( - - { - props.setExpanded(!props.expanded); - }} - > - - - {props.reportName} - - - {processWords(props.summary)} - - - - - - {addRuntime(props.scenarioCase)} - - - - - - {props.scenarioCase.steps.map((step: StepModel, index) => ( - - ))} - - - {props.className} - - - - - + + + {props.scenarioCase.steps.map((step: StepModel, index) => ( + + ))} + + + {props.className} + + + + ); } @@ -129,15 +98,9 @@ function ScenarioStep(props: { step: StepModel }) { const stepDescription = processWords(props.step.words); return ( - {stepDescription} {addRuntime(props.step)} + {stepDescription} {addRuntime(props.step)} ); } -function Caption(props: PropsWithChildren) { - return ( - - {props.children} - - ); -} + diff --git a/new/src/components/Scenarios/ScenarioCaption.tsx b/new/src/components/Scenarios/ScenarioCaption.tsx new file mode 100644 index 00000000..52bca99c --- /dev/null +++ b/new/src/components/Scenarios/ScenarioCaption.tsx @@ -0,0 +1,10 @@ +import {PropsWithChildren} from "react"; +import {Typography} from "@mui/material"; + +export function ScenarioCaption(props: PropsWithChildren) { + return ( + + {props.children} + + ); +} \ No newline at end of file diff --git a/new/src/components/Scenarios/ScenarioHead.tsx b/new/src/components/Scenarios/ScenarioHead.tsx new file mode 100644 index 00000000..d4f95edf --- /dev/null +++ b/new/src/components/Scenarios/ScenarioHead.tsx @@ -0,0 +1,57 @@ +import { Grid, Typography} from "@mui/material"; +import { ScenarioModel} from "../../reportModel"; +import {processWords} from "../../wordProcessor"; +import {StatusIcon} from "../StatusIconSelector"; +import {addRuntime} from "../utils"; +import {styled} from "@mui/material/styles"; +import MuiAccordionSummary, {AccordionSummaryProps} from "@mui/material/AccordionSummary"; +import ArrowForwardIosSharpIcon from "@mui/icons-material/ArrowForwardIosSharp"; +import {ScenarioCaption} from "./ScenarioCaption"; + +export function ScenarioHead(props: { + scenario: ScenarioModel; + expanded: boolean; + setExpanded: (expanded: boolean) => void; + reportName?: string; + summary: string; + className: string; +}) { + const AccordionSummary = styled((props: AccordionSummaryProps) => ( + } + {...props} + /> + ))(({ theme }) => ({ + backgroundColor: + theme.palette.mode === "dark" ? "rgba(255, 255, 255, .05)" : "rgba(0, 0, 0, .03)", + flexDirection: "row-reverse", + "& .MuiAccordionSummary-expandIconWrapper.Mui-expanded": { + transform: "rotate(90deg)" + }, + "& .MuiAccordionSummary-content": { + marginLeft: theme.spacing(1) + } + })); + + return { + props.setExpanded(!props.expanded); + }} + > + + + {props.reportName} + + + {processWords(props.summary)} + + + + + + {addRuntime(props.scenario.scenarioCases[0])} + + + +} \ No newline at end of file diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 826d291c..45248f7f 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -1,5 +1,5 @@ import { ReportStatistics, ScenarioModel } from "../../reportModel"; -import { MenuBar, ScenarioHead } from "../ScenarioOverview/ScenarioHead"; +import { MenuBar, ScenarioCollectionHead } from "../ScenarioOverview/ScenarioCollectionHead"; import { Scenario } from "./Scenario"; import { useState } from "react"; import { Grid } from "@mui/material"; @@ -30,7 +30,7 @@ export function ScenarioOverview(props: {
- ; fontSize?: FontSizes; }) { - switch (props.model.status) { + switch (props.executionStatus) { case "SUCCESS": - case "PASSED": return ( ); - case "SCENARIO_PENDING": - case "SOME_STEPS_PENDING": case "PENDING": return ( ); - case "SKIPPED": + default: return null; } } diff --git a/new/src/reportModel.d.ts b/new/src/reportModel.d.ts index f8c97278..9bf48779 100644 --- a/new/src/reportModel.d.ts +++ b/new/src/reportModel.d.ts @@ -37,7 +37,7 @@ interface ExecutionStatusCalculator { failedCount: number; pendingCount: number; totalCount: number; - status: ExecutionStatus; + status: CaseStatus; } interface NamedArgument { name: string; @@ -59,7 +59,7 @@ interface ScenarioCaseModel { steps: StepModel[]; explicitArguments: string[]; derivedArguments: string[]; - status: ExecutionStatus; + status: CaseStatus; errorMessage?: string; stackTrace?: string[]; durationInNanos: number; @@ -77,7 +77,7 @@ interface ScenarioModel { scenarioCases: ScenarioCaseModel[]; casesAsTable: boolean; durationInNanos: number; - executionStatus: "SUCCESS" | "PENDING" | "FAILED" + executionStatus: ExecutionStatus; tags: TagModel[]; } @@ -121,7 +121,8 @@ export interface Word { argumentInfo?: ArgumentInfo; } -export type ExecutionStatus = "SCENARIO_PENDING" | "SUCCESS" | "FAILED" | "SOME_STEPS_PENDING"; +export type ExecutionStatus = "SUCCESS" | "FAILED" | "PENDING"; +type CaseStatus = "SCENARIO_PENDING" | "SUCCESS" | "FAILED" | "SOME_STEPS_PENDING"; export type HeaderType = "NONE" | "HORIZONTAL" | "VERTICAL" | "BOTH"; export type InvocationMode = "NORMAL" | "NESTED" | "FAILED" | "SKIPPED" | "PENDING"; export type StepStatus = "PASSED" | "FAILED" | "SKIPPED" | "PENDING" |/*shows up in json file*/"SUCCESS"; From eb9c1d2b25b33158f8fab154faf4bc93685f02d2 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 15:23:48 +0100 Subject: [PATCH 32/45] move sample reports into sample data Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/ReportFilter.ts | 2 +- new/src/repository.ts | 4 ++-- new/{resources => src/sampleData}/jgivenReport.json | 0 new/{resources => src/sampleData}/tagFile.json | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename new/{resources => src/sampleData}/jgivenReport.json (100%) rename new/{resources => src/sampleData}/tagFile.json (100%) diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts index f4425452..4439ffee 100644 --- a/new/src/ReportFilter.ts +++ b/new/src/ReportFilter.ts @@ -1,6 +1,6 @@ import {repository} from "./repository"; import ReportModel from "./reportModel"; -import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioHead"; +import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioCollectionHead"; export function filterByStatus(status: ScenarioStatusFilter) { const fullReport = repository.getReport(); diff --git a/new/src/repository.ts b/new/src/repository.ts index f50ded2d..64a015c0 100644 --- a/new/src/repository.ts +++ b/new/src/repository.ts @@ -1,5 +1,5 @@ -import jGivenReport from '../resources/jgivenReport.json'; -import tagFile from '../resources/tagFile.json'; +import jGivenReport from './sampleData/jgivenReport.json'; +import tagFile from './sampleData/tagFile.json'; import ReportModel from "./reportModel"; export const repository = { diff --git a/new/resources/jgivenReport.json b/new/src/sampleData/jgivenReport.json similarity index 100% rename from new/resources/jgivenReport.json rename to new/src/sampleData/jgivenReport.json diff --git a/new/resources/tagFile.json b/new/src/sampleData/tagFile.json similarity index 100% rename from new/resources/tagFile.json rename to new/src/sampleData/tagFile.json From e334e287be94877c77b06f91c306a7702cd2b131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 15:26:47 +0100 Subject: [PATCH 33/45] Added Iteration over Scenarios --- new/src/components/Scenarios/Scenario.tsx | 26 ++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index 6d91ca5f..1b23f53a 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -48,14 +48,22 @@ export function Scenario(props: ScenarioProps) { summary={"Summary"} className={"className"} /> - + + + { + props.scenario.scenarioCases.map((scenarioCase) => { + return + } + ) + } +
) : ( @@ -74,7 +82,6 @@ function SingleCaseScenario(props: { return ( - {props.scenarioCase.steps.map((step: StepModel, index) => ( @@ -90,7 +97,6 @@ function SingleCaseScenario(props: { - ); } From 2b26cb1c569d259813e77e9d249247512f9b1923 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 15:31:40 +0100 Subject: [PATCH 34/45] Test status filter Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/ReportFilter.test.ts | 251 +++++++++++++++++++++++++++++++++++ new/src/reportModel.d.ts | 3 +- 2 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 new/src/ReportFilter.test.ts diff --git a/new/src/ReportFilter.test.ts b/new/src/ReportFilter.test.ts new file mode 100644 index 00000000..d5f56cda --- /dev/null +++ b/new/src/ReportFilter.test.ts @@ -0,0 +1,251 @@ +import {repository} from "./repository"; +import {ScenarioModel} from "./reportModel"; +import {filterByStatus} from "./ReportFilter"; +import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioCollectionHead"; + +describe("Report filter status filter", () => { + const fullReport = { + tagFile: {tagTypeMap: {}, tags: {}}, + "scenarios": [ + { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "name": "J Unit 5 Executor", + "scenarios": [ + createSampleScenario({executionStatus: "SUCCESS"}), + createSampleScenario({executionStatus: "FAILED"}), + ] + }, + { + "className": "com.tngtech.jgiven.tests.TestScenarios", + "name": "Test Scenarios", + "scenarios": [ + createSampleScenario({executionStatus: "FAILED"}), + ] + }, + ] + } + test("should filter by status", () => { + jest.spyOn(repository, "getReport").mockReturnValue(fullReport); + + expect(filterByStatus(ScenarioStatusFilter.SUCCESS) + .flatMap(rep => rep.scenarios)) + .toEqual([fullReport.scenarios[0].scenarios[0]]); + }); + +}); + +function createSampleScenario(scenario: Partial): ScenarioModel { + return { + "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + "testMethodName": "after_stage_methods_of_stages_following_failing_stages_are_ignored", + "description": "after stage methods of stages following failing stages are ignored", + "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit5"], + "explicitParameters": [], + "derivedParameters": [], + "scenarioCases": [ + { + "caseNr": 1, + "steps": [ + { + "name": "a failing test with $ steps", + "words": [ + { + "value": "Given", + "isIntroWord": true + }, + { + "value": "a failing test with" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "steps" + } + ], + "status": "PASSED", + "durationInNanos": 429103, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test has $ failing stages", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "the test has" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "n", + "formattedValue": "2" + } + }, + { + "value": "failing stages" + } + ], + "status": "PASSED", + "durationInNanos": 413003, + "depth": 0, + "parentFailed": false + }, + { + "name": "stage $ has a failing after stage method", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "stage" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "has a failing after stage method" + } + ], + "status": "PASSED", + "durationInNanos": 297902, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ fails", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "fails" + } + ], + "status": "PASSED", + "durationInNanos": 1022008, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test is executed with JUnit5", + "words": [ + { + "value": "When", + "isIntroWord": true + }, + { + "value": "the test is executed with JUnit5" + } + ], + "status": "PASSED", + "durationInNanos": 518574231, + "depth": 0, + "parentFailed": false + }, + { + "name": "the test fails", + "words": [ + { + "value": "Then", + "isIntroWord": true + }, + { + "value": "the test fails" + } + ], + "status": "PASSED", + "durationInNanos": 1932714, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as failed", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "1", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "1" + } + }, + { + "value": "is reported as failed" + } + ], + "status": "PASSED", + "durationInNanos": 1136408, + "depth": 0, + "parentFailed": false + }, + { + "name": "step $ is reported as skipped", + "words": [ + { + "value": "and", + "isIntroWord": true + }, + { + "value": "step" + }, + { + "value": "2", + "argumentInfo": { + "argumentName": "i", + "formattedValue": "2" + } + }, + { + "value": "is reported as skipped" + } + ], + "status": "PASSED", + "durationInNanos": 287102, + "depth": 0, + "parentFailed": false + } + ], + "explicitArguments": [], + "derivedArguments": [], + "status": "SUCCESS", + "durationInNanos": 525725382 + } + ], + "casesAsTable": false, + "durationInNanos": 525725382, + "executionStatus": "SUCCESS", + "tags": [{}], + "classTitle": "J Unit 5 Executor", + ...scenario + }; +} \ No newline at end of file diff --git a/new/src/reportModel.d.ts b/new/src/reportModel.d.ts index 9bf48779..af53bd74 100644 --- a/new/src/reportModel.d.ts +++ b/new/src/reportModel.d.ts @@ -65,7 +65,8 @@ interface ScenarioCaseModel { durationInNanos: number; description?: string; } -interface ScenarioModel { + +export interface ScenarioModel { className: string; classTitle: string; testMethodName: string; From 1d3dde61e6b2702913274399cb8e82613745c6c9 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 16:05:20 +0100 Subject: [PATCH 35/45] Try to use filter function - Filtering does not work properly yet. --- new/src/App.tsx | 5 +---- new/src/ReportFilter.ts | 20 ++++++++++++------- .../components/Scenarios/ScenarioOverview.tsx | 20 ++++++++++++++----- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/new/src/App.tsx b/new/src/App.tsx index 86efc4b5..ad530ca8 100644 --- a/new/src/App.tsx +++ b/new/src/App.tsx @@ -1,16 +1,13 @@ import "./App.css"; import ReportModel from "./reportModel"; import * as guaranteedStateScenario from "./sampleData/GuaranteedStateTestScenario.json"; -import {ScenarioOverview} from "./components/Scenarios/ScenarioOverview"; -import {useSearchParams} from "react-router-dom"; +import { ScenarioOverview } from "./components/Scenarios/ScenarioOverview"; const guaranteedStateReport: ReportModel = guaranteedStateScenario as unknown as ReportModel; function App() { - const [searchParams] = useSearchParams(); return (
- {searchParams.get("result")} scenario.executionStatus === status) + const filteredScenarios = report.scenarios.filter( + scenario => scenario.executionStatus === status + ); if (filteredScenarios.length > 0) { filteredReports.push({ ...report, scenarios: filteredScenarios - }) + }); } } return filteredReports; -} \ No newline at end of file +} diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 45248f7f..b79d4e36 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -1,8 +1,14 @@ import { ReportStatistics, ScenarioModel } from "../../reportModel"; -import { MenuBar, ScenarioCollectionHead } from "../ScenarioOverview/ScenarioCollectionHead"; +import { + MenuBar, + ScenarioCollectionHead, + ScenarioStatusFilter +} from "../ScenarioOverview/ScenarioCollectionHead"; import { Scenario } from "./Scenario"; import { useState } from "react"; import { Grid } from "@mui/material"; +import { filterByStatus } from "../../ReportFilter"; +import { useSearchParams } from "react-router-dom"; export enum ExpansionState { COLLAPSED, @@ -16,6 +22,8 @@ export function ScenarioOverview(props: { scenarios: ScenarioModel[]; }) { const [allExpanded, setAllExpanded] = useState(ExpansionState.COLLAPSED); + const [searchParams] = useSearchParams(); + return ( <> @@ -54,8 +62,10 @@ export function ScenarioOverview(props: {
- {props.scenarios.map(scenario => { - return ( + {filterByStatus( + searchParams.get("result") as ScenarioStatusFilter | null + ).flatMap(reportModel => { + return reportModel.scenarios.map(scenario => ( { setAllExpanded(ExpansionState.INTERMEDIATE); }} - > - ); + /> + )); })}
From 47d5088764f5a7d78c5138b7d59cdc36d86375ab Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 16:21:16 +0100 Subject: [PATCH 36/45] expand report filter to accept several values Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/ReportFilter.test.ts | 20 ++++++++++++++++++++ new/src/ReportFilter.ts | 17 ++++++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/new/src/ReportFilter.test.ts b/new/src/ReportFilter.test.ts index d5f56cda..0f462cd9 100644 --- a/new/src/ReportFilter.test.ts +++ b/new/src/ReportFilter.test.ts @@ -32,6 +32,26 @@ describe("Report filter status filter", () => { .toEqual([fullReport.scenarios[0].scenarios[0]]); }); + test("should ignore null status", () => { + jest.spyOn(repository, "getReport").mockReturnValue(fullReport); + + expect(filterByStatus(ScenarioStatusFilter.SUCCESS, null) + .flatMap(rep => rep.scenarios)) + .toEqual([fullReport.scenarios[0].scenarios[0]]); + }); + + test('should return the full report if no status is provided', () => { + jest.spyOn(repository, "getReport").mockReturnValue(fullReport); + + expect(filterByStatus()).toEqual(fullReport.scenarios); + }); + + test('should return the full report if null is provided', () => { + jest.spyOn(repository, "getReport").mockReturnValue(fullReport); + + expect(filterByStatus(null)).toEqual(fullReport.scenarios); + + }); }); function createSampleScenario(scenario: Partial): ScenarioModel { diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts index c2cc2a2d..ac48ba5e 100644 --- a/new/src/ReportFilter.ts +++ b/new/src/ReportFilter.ts @@ -1,22 +1,25 @@ -import { repository } from "./repository"; +import {repository} from "./repository"; import ReportModel from "./reportModel"; -import { ScenarioStatusFilter } from "./components/ScenarioOverview/ScenarioCollectionHead"; +import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioCollectionHead"; -export function filterByStatus(status: ScenarioStatusFilter | null): ReportModel[] { +export function filterByStatus(...statusParameter: (ScenarioStatusFilter | null)[]): ReportModel[] { const fullReport = repository.getReport(); + const status = statusParameter + .filter(status => status !== null) + .map(s => s as ScenarioStatusFilter); - if (status === null) { + if (status.length === 0) { return fullReport.scenarios; } - return filterScenarios(fullReport.scenarios, status); + return filterScenarios(fullReport.scenarios, ...status); } -function filterScenarios(reports: ReportModel[], status: ScenarioStatusFilter) { +function filterScenarios(reports: ReportModel[], ...status: ScenarioStatusFilter[]) { const filteredReports = []; for (const report of reports) { const filteredScenarios = report.scenarios.filter( - scenario => scenario.executionStatus === status + scenario => (status as string[]).includes(scenario.executionStatus) ); if (filteredScenarios.length > 0) { filteredReports.push({ From aeb747df5f7757314ecea1d6bac84388887f15a9 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 16:29:57 +0100 Subject: [PATCH 37/45] filter returns scenario model array Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/ReportFilter.test.ts | 10 +++---- new/src/ReportFilter.ts | 12 ++++----- .../components/Scenarios/ScenarioOverview.tsx | 26 ++++++++----------- new/src/test.test.ts | 23 ---------------- 4 files changed, 20 insertions(+), 51 deletions(-) delete mode 100644 new/src/test.test.ts diff --git a/new/src/ReportFilter.test.ts b/new/src/ReportFilter.test.ts index 0f462cd9..a8d8db8f 100644 --- a/new/src/ReportFilter.test.ts +++ b/new/src/ReportFilter.test.ts @@ -27,29 +27,27 @@ describe("Report filter status filter", () => { test("should filter by status", () => { jest.spyOn(repository, "getReport").mockReturnValue(fullReport); - expect(filterByStatus(ScenarioStatusFilter.SUCCESS) - .flatMap(rep => rep.scenarios)) + expect(filterByStatus(ScenarioStatusFilter.SUCCESS)) .toEqual([fullReport.scenarios[0].scenarios[0]]); }); test("should ignore null status", () => { jest.spyOn(repository, "getReport").mockReturnValue(fullReport); - expect(filterByStatus(ScenarioStatusFilter.SUCCESS, null) - .flatMap(rep => rep.scenarios)) + expect(filterByStatus(ScenarioStatusFilter.SUCCESS, null)) .toEqual([fullReport.scenarios[0].scenarios[0]]); }); test('should return the full report if no status is provided', () => { jest.spyOn(repository, "getReport").mockReturnValue(fullReport); - expect(filterByStatus()).toEqual(fullReport.scenarios); + expect(filterByStatus()).toEqual(fullReport.scenarios.flatMap(s => s.scenarios)); }); test('should return the full report if null is provided', () => { jest.spyOn(repository, "getReport").mockReturnValue(fullReport); - expect(filterByStatus(null)).toEqual(fullReport.scenarios); + expect(filterByStatus(null)).toEqual(fullReport.scenarios.flatMap(s => s.scenarios)); }); }); diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts index ac48ba5e..c8f57323 100644 --- a/new/src/ReportFilter.ts +++ b/new/src/ReportFilter.ts @@ -1,21 +1,19 @@ import {repository} from "./repository"; -import ReportModel from "./reportModel"; +import ReportModel, {ScenarioModel} from "./reportModel"; import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioCollectionHead"; -export function filterByStatus(...statusParameter: (ScenarioStatusFilter | null)[]): ReportModel[] { +export function filterByStatus(...statusParameter: (ScenarioStatusFilter | null)[]): ScenarioModel[] { const fullReport = repository.getReport(); const status = statusParameter .filter(status => status !== null) .map(s => s as ScenarioStatusFilter); - if (status.length === 0) { - return fullReport.scenarios; - } + const filteredReports = status.length === 0 ? fullReport.scenarios : filterReportByScenarioStatus(fullReport.scenarios, ...status); - return filterScenarios(fullReport.scenarios, ...status); + return filteredReports.flatMap(report => report.scenarios); } -function filterScenarios(reports: ReportModel[], ...status: ScenarioStatusFilter[]) { +function filterReportByScenarioStatus(reports: ReportModel[], ...status: ScenarioStatusFilter[]) { const filteredReports = []; for (const report of reports) { const filteredScenarios = report.scenarios.filter( diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index b79d4e36..798b8779 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -1,14 +1,10 @@ -import { ReportStatistics, ScenarioModel } from "../../reportModel"; -import { - MenuBar, - ScenarioCollectionHead, - ScenarioStatusFilter -} from "../ScenarioOverview/ScenarioCollectionHead"; -import { Scenario } from "./Scenario"; -import { useState } from "react"; -import { Grid } from "@mui/material"; -import { filterByStatus } from "../../ReportFilter"; -import { useSearchParams } from "react-router-dom"; +import {ReportStatistics, ScenarioModel} from "../../reportModel"; +import {MenuBar, ScenarioCollectionHead, ScenarioStatusFilter} from "../ScenarioOverview/ScenarioCollectionHead"; +import {Scenario} from "./Scenario"; +import {useState} from "react"; +import {Grid} from "@mui/material"; +import {filterByStatus} from "../../ReportFilter"; +import {useSearchParams} from "react-router-dom"; export enum ExpansionState { COLLAPSED, @@ -64,8 +60,8 @@ export function ScenarioOverview(props: {
{filterByStatus( searchParams.get("result") as ScenarioStatusFilter | null - ).flatMap(reportModel => { - return reportModel.scenarios.map(scenario => ( + ).flatMap(scenario => + ( - )); - })} + ) + )}
diff --git a/new/src/test.test.ts b/new/src/test.test.ts deleted file mode 100644 index e638732e..00000000 --- a/new/src/test.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import JGivenReport from '../resources/jgivenReport.json'; -import {StepStatus} from "./reportModel"; - -test('Test', () => { - - const allStepsStatus: StepStatus[] = []; - for (const scenario of JGivenReport.scenarios) { - for (const scenarioCase of scenario.scenarios) { - for (const step of scenarioCase.scenarioCases) { - if (isStepStatus(step.status)) { - allStepsStatus.push(step.status); - } else { - console.log('Invalid step status: ', step.status, ' in scenario: ', scenarioCase.testMethodName, ' in class: ', scenario.className); - } - } - - } - } -}); - -function isStepStatus(status: string): status is StepStatus { - return ['FAILED', 'PENDING', 'PASSED', 'SKIPPED', 'SUCCESS'].includes(status); -} \ No newline at end of file From d8b6adf114bd3c6b7e0be97d50b021d2e6558920 Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 16:37:06 +0100 Subject: [PATCH 38/45] Introduce type-safe hook for filters --- new/src/ReportFilter.test.ts | 295 +++++++++--------- new/src/ReportFilter.ts | 21 +- .../ScenarioCollectionHead.tsx | 39 ++- .../components/Scenarios/ScenarioOverview.tsx | 46 ++- new/src/hooks/useFilters.ts | 26 ++ 5 files changed, 234 insertions(+), 193 deletions(-) create mode 100644 new/src/hooks/useFilters.ts diff --git a/new/src/ReportFilter.test.ts b/new/src/ReportFilter.test.ts index a8d8db8f..637914b2 100644 --- a/new/src/ReportFilter.test.ts +++ b/new/src/ReportFilter.test.ts @@ -1,269 +1,268 @@ -import {repository} from "./repository"; -import {ScenarioModel} from "./reportModel"; -import {filterByStatus} from "./ReportFilter"; -import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioCollectionHead"; +import { repository } from "./repository"; +import { ScenarioModel } from "./reportModel"; +import { filterByStatus } from "./ReportFilter"; +import { ScenarioStatusFilter } from "./components/ScenarioOverview/ScenarioCollectionHead"; describe("Report filter status filter", () => { const fullReport = { - tagFile: {tagTypeMap: {}, tags: {}}, - "scenarios": [ + tagFile: { tagTypeMap: {}, tags: {} }, + scenarios: [ { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "name": "J Unit 5 Executor", - "scenarios": [ - createSampleScenario({executionStatus: "SUCCESS"}), - createSampleScenario({executionStatus: "FAILED"}), + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + name: "J Unit 5 Executor", + scenarios: [ + createSampleScenario({ executionStatus: "SUCCESS" }), + createSampleScenario({ executionStatus: "FAILED" }) ] }, { - "className": "com.tngtech.jgiven.tests.TestScenarios", - "name": "Test Scenarios", - "scenarios": [ - createSampleScenario({executionStatus: "FAILED"}), - ] - }, + className: "com.tngtech.jgiven.tests.TestScenarios", + name: "Test Scenarios", + scenarios: [createSampleScenario({ executionStatus: "FAILED" })] + } ] - } + }; test("should filter by status", () => { jest.spyOn(repository, "getReport").mockReturnValue(fullReport); - expect(filterByStatus(ScenarioStatusFilter.SUCCESS)) - .toEqual([fullReport.scenarios[0].scenarios[0]]); + expect(filterByStatus(ScenarioStatusFilter.SUCCESS)).toEqual([ + fullReport.scenarios[0].scenarios[0] + ]); }); - test("should ignore null status", () => { + test("should ignore undefined status", () => { jest.spyOn(repository, "getReport").mockReturnValue(fullReport); - expect(filterByStatus(ScenarioStatusFilter.SUCCESS, null)) - .toEqual([fullReport.scenarios[0].scenarios[0]]); + expect(filterByStatus(ScenarioStatusFilter.SUCCESS, undefined)).toEqual([ + fullReport.scenarios[0].scenarios[0] + ]); }); - test('should return the full report if no status is provided', () => { + test("should return the full report if no status is provided", () => { jest.spyOn(repository, "getReport").mockReturnValue(fullReport); expect(filterByStatus()).toEqual(fullReport.scenarios.flatMap(s => s.scenarios)); }); - test('should return the full report if null is provided', () => { + test("should return the full report if null is provided", () => { jest.spyOn(repository, "getReport").mockReturnValue(fullReport); - expect(filterByStatus(null)).toEqual(fullReport.scenarios.flatMap(s => s.scenarios)); - + expect(filterByStatus(undefined)).toEqual(fullReport.scenarios.flatMap(s => s.scenarios)); }); }); function createSampleScenario(scenario: Partial): ScenarioModel { return { - "className": "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", - "testMethodName": "after_stage_methods_of_stages_following_failing_stages_are_ignored", - "description": "after stage methods of stages following failing stages are ignored", - "tagIds": ["com.tngtech.jgiven.tags.FeatureJUnit5"], - "explicitParameters": [], - "derivedParameters": [], - "scenarioCases": [ + className: "com.tngtech.jgiven.junit5.JUnit5ExecutorTest", + testMethodName: "after_stage_methods_of_stages_following_failing_stages_are_ignored", + description: "after stage methods of stages following failing stages are ignored", + tagIds: ["com.tngtech.jgiven.tags.FeatureJUnit5"], + explicitParameters: [], + derivedParameters: [], + scenarioCases: [ { - "caseNr": 1, - "steps": [ + caseNr: 1, + steps: [ { - "name": "a failing test with $ steps", - "words": [ + name: "a failing test with $ steps", + words: [ { - "value": "Given", - "isIntroWord": true + value: "Given", + isIntroWord: true }, { - "value": "a failing test with" + value: "a failing test with" }, { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" } }, { - "value": "steps" + value: "steps" } ], - "status": "PASSED", - "durationInNanos": 429103, - "depth": 0, - "parentFailed": false + status: "PASSED", + durationInNanos: 429103, + depth: 0, + parentFailed: false }, { - "name": "the test has $ failing stages", - "words": [ + name: "the test has $ failing stages", + words: [ { - "value": "and", - "isIntroWord": true + value: "and", + isIntroWord: true }, { - "value": "the test has" + value: "the test has" }, { - "value": "2", - "argumentInfo": { - "argumentName": "n", - "formattedValue": "2" + value: "2", + argumentInfo: { + argumentName: "n", + formattedValue: "2" } }, { - "value": "failing stages" + value: "failing stages" } ], - "status": "PASSED", - "durationInNanos": 413003, - "depth": 0, - "parentFailed": false + status: "PASSED", + durationInNanos: 413003, + depth: 0, + parentFailed: false }, { - "name": "stage $ has a failing after stage method", - "words": [ + name: "stage $ has a failing after stage method", + words: [ { - "value": "and", - "isIntroWord": true + value: "and", + isIntroWord: true }, { - "value": "stage" + value: "stage" }, { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" } }, { - "value": "has a failing after stage method" + value: "has a failing after stage method" } ], - "status": "PASSED", - "durationInNanos": 297902, - "depth": 0, - "parentFailed": false + status: "PASSED", + durationInNanos: 297902, + depth: 0, + parentFailed: false }, { - "name": "step $ fails", - "words": [ + name: "step $ fails", + words: [ { - "value": "and", - "isIntroWord": true + value: "and", + isIntroWord: true }, { - "value": "step" + value: "step" }, { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" } }, { - "value": "fails" + value: "fails" } ], - "status": "PASSED", - "durationInNanos": 1022008, - "depth": 0, - "parentFailed": false + status: "PASSED", + durationInNanos: 1022008, + depth: 0, + parentFailed: false }, { - "name": "the test is executed with JUnit5", - "words": [ + name: "the test is executed with JUnit5", + words: [ { - "value": "When", - "isIntroWord": true + value: "When", + isIntroWord: true }, { - "value": "the test is executed with JUnit5" + value: "the test is executed with JUnit5" } ], - "status": "PASSED", - "durationInNanos": 518574231, - "depth": 0, - "parentFailed": false + status: "PASSED", + durationInNanos: 518574231, + depth: 0, + parentFailed: false }, { - "name": "the test fails", - "words": [ + name: "the test fails", + words: [ { - "value": "Then", - "isIntroWord": true + value: "Then", + isIntroWord: true }, { - "value": "the test fails" + value: "the test fails" } ], - "status": "PASSED", - "durationInNanos": 1932714, - "depth": 0, - "parentFailed": false + status: "PASSED", + durationInNanos: 1932714, + depth: 0, + parentFailed: false }, { - "name": "step $ is reported as failed", - "words": [ + name: "step $ is reported as failed", + words: [ { - "value": "and", - "isIntroWord": true + value: "and", + isIntroWord: true }, { - "value": "step" + value: "step" }, { - "value": "1", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "1" + value: "1", + argumentInfo: { + argumentName: "i", + formattedValue: "1" } }, { - "value": "is reported as failed" + value: "is reported as failed" } ], - "status": "PASSED", - "durationInNanos": 1136408, - "depth": 0, - "parentFailed": false + status: "PASSED", + durationInNanos: 1136408, + depth: 0, + parentFailed: false }, { - "name": "step $ is reported as skipped", - "words": [ + name: "step $ is reported as skipped", + words: [ { - "value": "and", - "isIntroWord": true + value: "and", + isIntroWord: true }, { - "value": "step" + value: "step" }, { - "value": "2", - "argumentInfo": { - "argumentName": "i", - "formattedValue": "2" + value: "2", + argumentInfo: { + argumentName: "i", + formattedValue: "2" } }, { - "value": "is reported as skipped" + value: "is reported as skipped" } ], - "status": "PASSED", - "durationInNanos": 287102, - "depth": 0, - "parentFailed": false + status: "PASSED", + durationInNanos: 287102, + depth: 0, + parentFailed: false } ], - "explicitArguments": [], - "derivedArguments": [], - "status": "SUCCESS", - "durationInNanos": 525725382 + explicitArguments: [], + derivedArguments: [], + status: "SUCCESS", + durationInNanos: 525725382 } ], - "casesAsTable": false, - "durationInNanos": 525725382, - "executionStatus": "SUCCESS", - "tags": [{}], - "classTitle": "J Unit 5 Executor", + casesAsTable: false, + durationInNanos: 525725382, + executionStatus: "SUCCESS", + tags: [{}], + classTitle: "J Unit 5 Executor", ...scenario }; -} \ No newline at end of file +} diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts index c8f57323..0cd67999 100644 --- a/new/src/ReportFilter.ts +++ b/new/src/ReportFilter.ts @@ -1,14 +1,19 @@ -import {repository} from "./repository"; -import ReportModel, {ScenarioModel} from "./reportModel"; -import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioCollectionHead"; +import { repository } from "./repository"; +import ReportModel, { ScenarioModel } from "./reportModel"; +import { ScenarioStatusFilter } from "./components/ScenarioOverview/ScenarioCollectionHead"; -export function filterByStatus(...statusParameter: (ScenarioStatusFilter | null)[]): ScenarioModel[] { +export function filterByStatus( + ...statusParameter: (ScenarioStatusFilter | undefined)[] +): ScenarioModel[] { const fullReport = repository.getReport(); const status = statusParameter - .filter(status => status !== null) + .filter(status => status !== undefined) .map(s => s as ScenarioStatusFilter); - const filteredReports = status.length === 0 ? fullReport.scenarios : filterReportByScenarioStatus(fullReport.scenarios, ...status); + const filteredReports = + status.length === 0 + ? fullReport.scenarios + : filterReportByScenarioStatus(fullReport.scenarios, ...status); return filteredReports.flatMap(report => report.scenarios); } @@ -16,8 +21,8 @@ export function filterByStatus(...statusParameter: (ScenarioStatusFilter | null) function filterReportByScenarioStatus(reports: ReportModel[], ...status: ScenarioStatusFilter[]) { const filteredReports = []; for (const report of reports) { - const filteredScenarios = report.scenarios.filter( - scenario => (status as string[]).includes(scenario.executionStatus) + const filteredScenarios = report.scenarios.filter(scenario => + (status as string[]).includes(scenario.executionStatus) ); if (filteredScenarios.length > 0) { filteredReports.push({ diff --git a/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx b/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx index 4ea078dd..7f4e9605 100644 --- a/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx @@ -1,18 +1,33 @@ -import type {ReportStatistics} from "../../reportModel"; -import {Breadcrumbs, Divider, Grid, Link, List, ListItem, ListItemText, Typography} from "@mui/material"; +import type { ReportStatistics } from "../../reportModel"; +import { + Breadcrumbs, + Divider, + Grid, + Link, + List, + ListItem, + ListItemText, + Typography +} from "@mui/material"; import CheckIcon from "@mui/icons-material/CheckBox"; import ErrorIcon from "@mui/icons-material/Error"; import DoNotDisturbAltIcon from "@mui/icons-material/DoNotDisturbAlt"; -import {addRuntime} from "../utils"; +import { addRuntime } from "../utils"; import RemoveIcon from "@mui/icons-material/Remove"; import AddIcon from "@mui/icons-material/Add"; import PrintOutlinedIcon from "@mui/icons-material/PrintOutlined"; import BookmarkOutlinedIcon from "@mui/icons-material/BookmarkOutlined"; -import {createReportCircle} from "./DonutChart"; -import {PropsWithChildren} from "react"; -import {processWords} from "../../wordProcessor"; -import {useSearchParams} from "react-router-dom"; -import {StyledContent, StyledDrawer, StyledIconButton, StyledIconContainer, StyledLink} from "./ScenarioHead.styles"; +import { createReportCircle } from "./DonutChart"; +import { PropsWithChildren } from "react"; +import { processWords } from "../../wordProcessor"; +import { + StyledContent, + StyledDrawer, + StyledIconButton, + StyledIconContainer, + StyledLink +} from "./ScenarioHead.styles"; +import { useFilters } from "../../hooks/useFilters"; export enum HeaderIconType {} @@ -190,7 +205,7 @@ export enum ScenarioStatusFilter { } function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { - const [_urlSearchParams, setUrlSearchParams] = useSearchParams(); + const [_, setUrlSearchParams] = useFilters(); return ( @@ -198,7 +213,7 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { underline="hover" className="pseudo-link" color={"black"} - onClick={() => setUrlSearchParams({ result: ScenarioStatusFilter.SUCCESS })} + onClick={() => setUrlSearchParams({ status: ScenarioStatusFilter.SUCCESS })} > {props.statistic.numSuccessfulScenarios} Successful, @@ -207,7 +222,7 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { underline="hover" className="pseudo-link" color={"red"} - onClick={() => setUrlSearchParams({result: ScenarioStatusFilter.FAILED})} + onClick={() => setUrlSearchParams({ status: ScenarioStatusFilter.FAILED })} > {props.statistic.numFailedScenarios} failed, @@ -216,7 +231,7 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { underline="hover" className="pseudo-link" color={"grey"} - onClick={() => setUrlSearchParams({ result: ScenarioStatusFilter.PENDING })} + onClick={() => setUrlSearchParams({ status: ScenarioStatusFilter.PENDING })} > {props.statistic.numPendingScenarios} pending, diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 798b8779..5de04bd5 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -1,10 +1,10 @@ -import {ReportStatistics, ScenarioModel} from "../../reportModel"; -import {MenuBar, ScenarioCollectionHead, ScenarioStatusFilter} from "../ScenarioOverview/ScenarioCollectionHead"; -import {Scenario} from "./Scenario"; -import {useState} from "react"; -import {Grid} from "@mui/material"; -import {filterByStatus} from "../../ReportFilter"; -import {useSearchParams} from "react-router-dom"; +import { ReportStatistics, ScenarioModel } from "../../reportModel"; +import { MenuBar, ScenarioCollectionHead } from "../ScenarioOverview/ScenarioCollectionHead"; +import { Scenario } from "./Scenario"; +import { useState } from "react"; +import { Grid } from "@mui/material"; +import { filterByStatus } from "../../ReportFilter"; +import { useFilters } from "../../hooks/useFilters"; export enum ExpansionState { COLLAPSED, @@ -18,7 +18,7 @@ export function ScenarioOverview(props: { scenarios: ScenarioModel[]; }) { const [allExpanded, setAllExpanded] = useState(ExpansionState.COLLAPSED); - const [searchParams] = useSearchParams(); + const [filters] = useFilters(); return ( <> @@ -58,23 +58,19 @@ export function ScenarioOverview(props: {
- {filterByStatus( - searchParams.get("result") as ScenarioStatusFilter | null - ).flatMap(scenario => - ( - { - setAllExpanded(ExpansionState.INTERMEDIATE); - }} - onExpansionCallback={() => { - setAllExpanded(ExpansionState.INTERMEDIATE); - }} - /> - ) - )} + {filterByStatus(filters.status).flatMap(scenario => ( + { + setAllExpanded(ExpansionState.INTERMEDIATE); + }} + onExpansionCallback={() => { + setAllExpanded(ExpansionState.INTERMEDIATE); + }} + /> + ))}
diff --git a/new/src/hooks/useFilters.ts b/new/src/hooks/useFilters.ts new file mode 100644 index 00000000..b0325a29 --- /dev/null +++ b/new/src/hooks/useFilters.ts @@ -0,0 +1,26 @@ +import { SetURLSearchParams, useSearchParams } from "react-router-dom"; +import { ScenarioStatusFilter } from "../components/ScenarioOverview/ScenarioCollectionHead"; + +export interface Filters { + status: ScenarioStatusFilter | undefined; +} + +export function useFilters(): [Filters, SetURLSearchParams] { + const [searchParams, setSearchParams] = useSearchParams(); + const status = searchParams.get("status"); + + return [{ status: parseScenarioStatus(status) }, setSearchParams]; +} + +function parseScenarioStatus(status: string | null): ScenarioStatusFilter | undefined { + switch (status) { + case ScenarioStatusFilter.FAILED: + return ScenarioStatusFilter.FAILED; + case ScenarioStatusFilter.PENDING: + return ScenarioStatusFilter.PENDING; + case ScenarioStatusFilter.SUCCESS: + return ScenarioStatusFilter.SUCCESS; + default: + return undefined; + } +} From 991b023a33d90315e2c66fd6b1a2bd70c795e962 Mon Sep 17 00:00:00 2001 From: l-1squared <30831153+l-1squared@users.noreply.github.com> Date: Fri, 1 Mar 2024 16:38:19 +0100 Subject: [PATCH 39/45] repository now has a get all scenarios method Signed-off-by: l-1squared <30831153+l-1squared@users.noreply.github.com> --- new/src/ReportFilter.ts | 19 ++++++++++++------- new/src/repository.ts | 41 ++++++++++++++++++++++++----------------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/new/src/ReportFilter.ts b/new/src/ReportFilter.ts index c8f57323..a4370887 100644 --- a/new/src/ReportFilter.ts +++ b/new/src/ReportFilter.ts @@ -1,14 +1,19 @@ -import {repository} from "./repository"; -import ReportModel, {ScenarioModel} from "./reportModel"; -import {ScenarioStatusFilter} from "./components/ScenarioOverview/ScenarioCollectionHead"; +import { repository } from "./repository"; +import ReportModel, { ScenarioModel } from "./reportModel"; +import { ScenarioStatusFilter } from "./components/ScenarioOverview/ScenarioCollectionHead"; -export function filterByStatus(...statusParameter: (ScenarioStatusFilter | null)[]): ScenarioModel[] { +export function filterByStatus( + ...statusParameter: (ScenarioStatusFilter | null)[] +): ScenarioModel[] { const fullReport = repository.getReport(); const status = statusParameter .filter(status => status !== null) .map(s => s as ScenarioStatusFilter); - const filteredReports = status.length === 0 ? fullReport.scenarios : filterReportByScenarioStatus(fullReport.scenarios, ...status); + const filteredReports = + status.length === 0 + ? fullReport.scenarios + : filterReportByScenarioStatus(fullReport.scenarios, ...status); return filteredReports.flatMap(report => report.scenarios); } @@ -16,8 +21,8 @@ export function filterByStatus(...statusParameter: (ScenarioStatusFilter | null) function filterReportByScenarioStatus(reports: ReportModel[], ...status: ScenarioStatusFilter[]) { const filteredReports = []; for (const report of reports) { - const filteredScenarios = report.scenarios.filter( - scenario => (status as string[]).includes(scenario.executionStatus) + const filteredScenarios = report.scenarios.filter(scenario => + (status as string[]).includes(scenario.executionStatus) ); if (filteredScenarios.length > 0) { filteredReports.push({ diff --git a/new/src/repository.ts b/new/src/repository.ts index 64a015c0..e60b2eee 100644 --- a/new/src/repository.ts +++ b/new/src/repository.ts @@ -1,33 +1,40 @@ -import jGivenReport from './sampleData/jgivenReport.json'; -import tagFile from './sampleData/tagFile.json'; -import ReportModel from "./reportModel"; +import jGivenReport from "./sampleData/jgivenReport.json"; +import tagFile from "./sampleData/tagFile.json"; +import ReportModel, { ScenarioModel } from "./reportModel"; export const repository = { getReport(): JsonReport { return jGivenReport as unknown as JsonReport; }, + getAllScenarios(): ScenarioModel[] { + return jGivenReport.scenarios + .map(r => r as ReportModel) + .flatMap((report: ReportModel) => report.scenarios); + }, + getTags(): TagFile { return tagFile; } -} +}; interface JsonReport { - scenarios: ReportModel[], - tagFile: TagFile -}; -type TagFile = { tagTypeMap: Record, tags: Record } + scenarios: ReportModel[]; + tagFile: TagFile; +} + +type TagFile = { tagTypeMap: Record; tags: Record }; interface JsonTagType { - fullType: string, - type: string, - description: string, - prependType?: boolean, - color?: string, - href: string + fullType: string; + type: string; + description: string; + prependType?: boolean; + color?: string; + href: string; } interface JsonTag { - tagType: string, - value?: string, -} \ No newline at end of file + tagType: string; + value?: string; +} From 5dfb48cad8e52b0c44706c50e08c5e9f6785d416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 16:43:20 +0100 Subject: [PATCH 40/45] fixed scenarios --- new/src/App.tsx | 1 - new/src/components/Scenarios/Scenario.tsx | 2 +- new/src/components/Scenarios/ScenarioOverview.tsx | 7 ++++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/new/src/App.tsx b/new/src/App.tsx index ad530ca8..069d8a5b 100644 --- a/new/src/App.tsx +++ b/new/src/App.tsx @@ -12,7 +12,6 @@ function App() { title={"Mein Titel"} description={"Meine Description"} reportName={guaranteedStateReport.name} - scenarios={guaranteedStateReport.scenarios} />
); diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index 1b23f53a..0f34ce57 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -45,7 +45,7 @@ export function Scenario(props: ScenarioProps) { scenario={props.scenario} expanded={expanded} setExpanded={onExpansionChanged} - summary={"Summary"} + summary={props.scenario.classTitle} className={"className"} /> diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 5de04bd5..1f506c28 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -5,6 +5,7 @@ import { useState } from "react"; import { Grid } from "@mui/material"; import { filterByStatus } from "../../ReportFilter"; import { useFilters } from "../../hooks/useFilters"; +import {repository} from "../../repository"; export enum ExpansionState { COLLAPSED, @@ -15,10 +16,10 @@ export function ScenarioOverview(props: { reportName: string; title: string; description: string; - scenarios: ScenarioModel[]; }) { const [allExpanded, setAllExpanded] = useState(ExpansionState.COLLAPSED); const [filters] = useFilters(); + const scenarios = repository.getAllScenarios(); return ( <> @@ -39,7 +40,7 @@ export function ScenarioOverview(props: { aboveHeader: props.description, header: props.title }} - statistic={createStatistics(props.scenarios)} + statistic={createStatistics(scenarios)} onCollapseButtonClick={() => { setAllExpanded(ExpansionState.COLLAPSED); }} @@ -58,7 +59,7 @@ export function ScenarioOverview(props: {
- {filterByStatus(filters.status).flatMap(scenario => ( + {filterByStatus(filters.status).map(scenario => ( Date: Fri, 1 Mar 2024 16:53:01 +0100 Subject: [PATCH 41/45] imroved scenarios fixed labels added sorting --- new/src/components/Scenarios/Scenario.tsx | 2 -- new/src/components/Scenarios/ScenarioHead.tsx | 6 ++---- new/src/components/Scenarios/ScenarioOverview.tsx | 12 +++++++++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index 0f34ce57..0e835b45 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -45,8 +45,6 @@ export function Scenario(props: ScenarioProps) { scenario={props.scenario} expanded={expanded} setExpanded={onExpansionChanged} - summary={props.scenario.classTitle} - className={"className"} /> diff --git a/new/src/components/Scenarios/ScenarioHead.tsx b/new/src/components/Scenarios/ScenarioHead.tsx index d4f95edf..a55355ab 100644 --- a/new/src/components/Scenarios/ScenarioHead.tsx +++ b/new/src/components/Scenarios/ScenarioHead.tsx @@ -13,8 +13,6 @@ export function ScenarioHead(props: { expanded: boolean; setExpanded: (expanded: boolean) => void; reportName?: string; - summary: string; - className: string; }) { const AccordionSummary = styled((props: AccordionSummaryProps) => ( - {props.reportName} + {props.scenario.classTitle} - {processWords(props.summary)} + {processWords(props.scenario.description)} diff --git a/new/src/components/Scenarios/ScenarioOverview.tsx b/new/src/components/Scenarios/ScenarioOverview.tsx index 1f506c28..27321a40 100644 --- a/new/src/components/Scenarios/ScenarioOverview.tsx +++ b/new/src/components/Scenarios/ScenarioOverview.tsx @@ -59,7 +59,9 @@ export function ScenarioOverview(props: {
- {filterByStatus(filters.status).map(scenario => ( + {filterByStatus(filters.status) + .sort(compareByClassTitleAndDescriptionFn) + .map(scenario => ( { + const sortValueByClassTitle = a.classTitle.localeCompare(b.classTitle); + if (sortValueByClassTitle === 0) { + return a.description.localeCompare(b.description); + } + return sortValueByClassTitle; +} From 4836fc77ca4fa0cddf5d992b004419792c38c80e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 17:04:26 +0100 Subject: [PATCH 42/45] improved time display --- .../ScenarioCollectionHead.tsx | 33 +++++-------------- new/src/components/Scenarios/Scenario.tsx | 4 +-- new/src/components/Scenarios/ScenarioHead.tsx | 8 ++--- new/src/components/utils.ts | 13 ++++++-- 4 files changed, 26 insertions(+), 32 deletions(-) diff --git a/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx b/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx index 7f4e9605..18ae2e97 100644 --- a/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx @@ -1,33 +1,18 @@ -import type { ReportStatistics } from "../../reportModel"; -import { - Breadcrumbs, - Divider, - Grid, - Link, - List, - ListItem, - ListItemText, - Typography -} from "@mui/material"; +import type {ReportStatistics} from "../../reportModel"; +import {Breadcrumbs, Divider, Grid, Link, List, ListItem, ListItemText, Typography} from "@mui/material"; import CheckIcon from "@mui/icons-material/CheckBox"; import ErrorIcon from "@mui/icons-material/Error"; import DoNotDisturbAltIcon from "@mui/icons-material/DoNotDisturbAlt"; -import { addRuntime } from "../utils"; import RemoveIcon from "@mui/icons-material/Remove"; import AddIcon from "@mui/icons-material/Add"; import PrintOutlinedIcon from "@mui/icons-material/PrintOutlined"; import BookmarkOutlinedIcon from "@mui/icons-material/BookmarkOutlined"; -import { createReportCircle } from "./DonutChart"; -import { PropsWithChildren } from "react"; -import { processWords } from "../../wordProcessor"; -import { - StyledContent, - StyledDrawer, - StyledIconButton, - StyledIconContainer, - StyledLink -} from "./ScenarioHead.styles"; -import { useFilters } from "../../hooks/useFilters"; +import {createReportCircle} from "./DonutChart"; +import {PropsWithChildren} from "react"; +import {processWords} from "../../wordProcessor"; +import {StyledContent, StyledDrawer, StyledIconButton, StyledIconContainer, StyledLink} from "./ScenarioHead.styles"; +import {useFilters} from "../../hooks/useFilters"; +import {addRuntimeInSeconds} from "../utils"; export enum HeaderIconType {} @@ -237,7 +222,7 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { {props.statistic.numPendingScenarios} pending, {props.statistic.numScenarios} Total - {addRuntime(props.statistic)} + {addRuntimeInSeconds(props.statistic.durationInNanos)} ); } diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index 0e835b45..28edffad 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -1,11 +1,11 @@ import type {ScenarioCaseModel, ScenarioModel, StepModel} from "../../reportModel"; import {Accordion, AccordionDetails, Box, Link, Typography} from "@mui/material"; import {useCallback, useEffect, useState} from "react"; -import {addRuntime} from "../utils"; import {processWords} from "../../wordProcessor"; import {ExpansionState} from "./ScenarioOverview"; import {ScenarioHead} from "./ScenarioHead"; import {ScenarioCaption} from "./ScenarioCaption"; +import {addRuntimeInSeconds} from "../utils"; export interface ScenarioProps { scenario: ScenarioModel; @@ -102,7 +102,7 @@ function ScenarioStep(props: { step: StepModel }) { const stepDescription = processWords(props.step.words); return ( - {stepDescription} {addRuntime(props.step)} + {stepDescription} {addRuntimeInSeconds(props.step.durationInNanos)} ); } diff --git a/new/src/components/Scenarios/ScenarioHead.tsx b/new/src/components/Scenarios/ScenarioHead.tsx index a55355ab..cc942d5a 100644 --- a/new/src/components/Scenarios/ScenarioHead.tsx +++ b/new/src/components/Scenarios/ScenarioHead.tsx @@ -1,12 +1,12 @@ -import { Grid, Typography} from "@mui/material"; -import { ScenarioModel} from "../../reportModel"; +import {Grid, Typography} from "@mui/material"; +import {ScenarioModel} from "../../reportModel"; import {processWords} from "../../wordProcessor"; import {StatusIcon} from "../StatusIconSelector"; -import {addRuntime} from "../utils"; import {styled} from "@mui/material/styles"; import MuiAccordionSummary, {AccordionSummaryProps} from "@mui/material/AccordionSummary"; import ArrowForwardIosSharpIcon from "@mui/icons-material/ArrowForwardIosSharp"; import {ScenarioCaption} from "./ScenarioCaption"; +import {addRuntimeInMiliseconds} from "../utils"; export function ScenarioHead(props: { scenario: ScenarioModel; @@ -48,7 +48,7 @@ export function ScenarioHead(props: { - {addRuntime(props.scenario.scenarioCases[0])} + {addRuntimeInMiliseconds(props.scenario.scenarioCases[0].durationInNanos)} diff --git a/new/src/components/utils.ts b/new/src/components/utils.ts index 3a2ee647..e031cbe6 100644 --- a/new/src/components/utils.ts +++ b/new/src/components/utils.ts @@ -1,3 +1,12 @@ -export function addRuntime(input: { durationInNanos: number }): string { - return input.durationInNanos > 1e7 ? `(${(input.durationInNanos / 1e9).toFixed(3)}s)` : ""; +export function addRuntimeInSeconds(durationInNanos: number ): string { + return addRuntime(durationInNanos, 1e7, 1e9, "s"); } + +export function addRuntimeInMiliseconds(durationInNanos: number): string { + return addRuntime(durationInNanos, 1e4, 1e6, "ms"); +} + +function addRuntime(durationInNanos: number, treshhold: number, divisor: number, unitOfMeasure: string): string { + return durationInNanos > treshhold ? `(${(durationInNanos / divisor).toFixed(3)}${unitOfMeasure})` : ""; +} + From e861015f41caf35ce71ad81ad487c1b2c16bcd54 Mon Sep 17 00:00:00 2001 From: Christian Oertel Date: Fri, 1 Mar 2024 17:08:35 +0100 Subject: [PATCH 43/45] Fix typo Signed-off-by: Christian Oertel --- new/src/components/Scenarios/ScenarioHead.tsx | 4 ++-- new/src/components/utils.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/new/src/components/Scenarios/ScenarioHead.tsx b/new/src/components/Scenarios/ScenarioHead.tsx index cc942d5a..3d50f64c 100644 --- a/new/src/components/Scenarios/ScenarioHead.tsx +++ b/new/src/components/Scenarios/ScenarioHead.tsx @@ -6,7 +6,7 @@ import {styled} from "@mui/material/styles"; import MuiAccordionSummary, {AccordionSummaryProps} from "@mui/material/AccordionSummary"; import ArrowForwardIosSharpIcon from "@mui/icons-material/ArrowForwardIosSharp"; import {ScenarioCaption} from "./ScenarioCaption"; -import {addRuntimeInMiliseconds} from "../utils"; +import {addRuntimeInMilliseconds} from "../utils"; export function ScenarioHead(props: { scenario: ScenarioModel; @@ -48,7 +48,7 @@ export function ScenarioHead(props: { - {addRuntimeInMiliseconds(props.scenario.scenarioCases[0].durationInNanos)} + {addRuntimeInMilliseconds(props.scenario.scenarioCases[0].durationInNanos)} diff --git a/new/src/components/utils.ts b/new/src/components/utils.ts index e031cbe6..bfbe4e46 100644 --- a/new/src/components/utils.ts +++ b/new/src/components/utils.ts @@ -2,7 +2,7 @@ export function addRuntimeInSeconds(durationInNanos: number ): string { return addRuntime(durationInNanos, 1e7, 1e9, "s"); } -export function addRuntimeInMiliseconds(durationInNanos: number): string { +export function addRuntimeInMilliseconds(durationInNanos: number): string { return addRuntime(durationInNanos, 1e4, 1e6, "ms"); } From 45f3e24e72e3524b8db0d62cf44576a9ad6f0dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCler?= Date: Fri, 1 Mar 2024 17:16:42 +0100 Subject: [PATCH 44/45] removed unnecessary condition --- new/src/components/Scenarios/Scenario.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/new/src/components/Scenarios/Scenario.tsx b/new/src/components/Scenarios/Scenario.tsx index 28edffad..030a9c74 100644 --- a/new/src/components/Scenarios/Scenario.tsx +++ b/new/src/components/Scenarios/Scenario.tsx @@ -35,7 +35,7 @@ export function Scenario(props: ScenarioProps) { [expanded] ); - return props.scenario.scenarioCases.length === 1 ? ( + return (
- ) : ( -
); } @@ -77,8 +75,6 @@ function SingleCaseScenario(props: { summary: string; className: string; }) { - - return ( {props.scenarioCase.steps.map((step: StepModel, index) => ( From e6e87fde193f63fc7abdc416193488adf6019e9d Mon Sep 17 00:00:00 2001 From: Bastian Jungnitsch <20986347+marcus-aemilius@users.noreply.github.com> Date: Fri, 1 Mar 2024 17:25:05 +0100 Subject: [PATCH 45/45] Add basic test for ScenarioOverview Test is green wrongly currently :( --- .../ScenarioCollectionHead.tsx | 6 ++-- .../ScenarioOverview.integration.test.tsx | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 new/src/components/ScenarioOverview/ScenarioOverview.integration.test.tsx diff --git a/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx b/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx index 18ae2e97..6e238b63 100644 --- a/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx +++ b/new/src/components/ScenarioOverview/ScenarioCollectionHead.tsx @@ -195,8 +195,8 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { return ( setUrlSearchParams({ status: ScenarioStatusFilter.SUCCESS })} > @@ -204,8 +204,8 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { {props.statistic.numSuccessfulScenarios} Successful, setUrlSearchParams({ status: ScenarioStatusFilter.FAILED })} > @@ -213,8 +213,8 @@ function StatisticBreadcrumbs(props: { statistic: ReportStatistics }) { {props.statistic.numFailedScenarios} failed, setUrlSearchParams({ status: ScenarioStatusFilter.PENDING })} > diff --git a/new/src/components/ScenarioOverview/ScenarioOverview.integration.test.tsx b/new/src/components/ScenarioOverview/ScenarioOverview.integration.test.tsx new file mode 100644 index 00000000..eb053194 --- /dev/null +++ b/new/src/components/ScenarioOverview/ScenarioOverview.integration.test.tsx @@ -0,0 +1,32 @@ +import { render, screen } from "@testing-library/react"; +import { ScenarioOverview } from "../Scenarios/ScenarioOverview"; +import userEvent from "@testing-library/user-event"; +import { MemoryRouter } from "react-router-dom"; + +jest.mock("./DonutChart", () => ({ + createReportCircle: () => null +})); + +describe("", () => { + const reportName = "My report"; + const description = "My description"; + const title = "My title"; + + it("should only show failed scenarios after clicking the link to filter for failed scenarios", () => { + render( + + + + ); + + const failingTest = screen.getByText("A failing JUnit 5 test"); + expect(failingTest).toBeInTheDocument(); + + const link = screen.getByLabelText("filter-for-successful-tests"); + userEvent.click(link); + + // Test seems to be a green mistakenly, because clicking on + // screen.getByLabelText("filter-for-failed-tests") also leaves it green :( + expect(failingTest).not.toBeInTheDocument(); + }); +});