@autometa/runner 0.4.16 → 0.4.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-lint$colon$fix.log +4 -0
- package/.turbo/turbo-prettify.log +0 -0
- package/.turbo/turbo-test.log +0 -0
- package/CHANGELOG.md +12 -0
- package/README.md +2 -3
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +18 -18
- package/tsup.config.ts +1 -1
|
File without changes
|
|
File without changes
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @autometa/runner
|
|
2
2
|
|
|
3
|
+
## 0.4.17
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [51ad241]
|
|
8
|
+
- @autometa/gherkin@0.6.10
|
|
9
|
+
- @autometa/coordinator@0.3.15
|
|
10
|
+
- @autometa/events@0.2.22
|
|
11
|
+
- @autometa/jest-executor@0.4.15
|
|
12
|
+
- @autometa/scopes@0.5.12
|
|
13
|
+
- @autometa/test-builder@0.2.13
|
|
14
|
+
|
|
3
15
|
## 0.4.16
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ The following libraries may be considered relatively stable, but may contain bug
|
|
|
13
13
|
- [Overloaded](libraries/overloaded/) - Function and method overloads that are as pleasant to make as they are to use
|
|
14
14
|
- [Bind Decorator](libraries/bind-decorator/) - Binds the `this` keyword on a class method. Respectfully a fork of [bind-decorator](https://www.npmjs.com/package/autobind-decorator)
|
|
15
15
|
- [Status Codes](libraries/status-codes/) - Object containing HTTP status
|
|
16
|
-
codes and status messages, visible in the editor via `as const`
|
|
16
|
+
codes and status messages, visible in the editor via `as const`
|
|
17
17
|
|
|
18
18
|
# Autometa
|
|
19
19
|
|
|
@@ -22,7 +22,6 @@ help bootstrap your node automation framework, for API or E2E testing.
|
|
|
22
22
|
|
|
23
23
|
[Full Docs](https://bendat.github.io/autometa/docs/cucumber/test_runner/intro/)
|
|
24
24
|
|
|
25
|
-
|
|
26
25
|
## Cucumber Runner
|
|
27
26
|
|
|
28
27
|
The Cucumber Runner lets you build and execute Cucumber style tests with alternative test runners. Currently supported are `jest` and `vitest`. Mocha
|
|
@@ -109,7 +108,7 @@ export class UserDto {
|
|
|
109
108
|
@DTO.date()
|
|
110
109
|
createdAt: Date
|
|
111
110
|
}
|
|
112
|
-
// or
|
|
111
|
+
// or
|
|
113
112
|
// avoid duplicating interface properties
|
|
114
113
|
export class UserDto extends DTO<IUser> {}
|
|
115
114
|
|
package/dist/esm/index.js
CHANGED
|
@@ -332,7 +332,13 @@ __reExport(src_exports, events_exports);
|
|
|
332
332
|
export * from "@autometa/phrases";
|
|
333
333
|
import { Dates, Time } from "@autometa/datetime";
|
|
334
334
|
import { AutomationError, raise } from "@autometa/errors";
|
|
335
|
-
import {
|
|
335
|
+
import {
|
|
336
|
+
DataTable,
|
|
337
|
+
HTable,
|
|
338
|
+
VTable,
|
|
339
|
+
MTable,
|
|
340
|
+
TableDocument
|
|
341
|
+
} from "@autometa/gherkin";
|
|
336
342
|
import { Bind } from "@autometa/bind-decorator";
|
|
337
343
|
import { Types } from "@autometa/scopes";
|
|
338
344
|
export * from "@autometa/http";
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/config.ts","../../src/parameters.ts","../../src/scopes.ts","../../src/events.ts","../../src/event-logger.ts","../../src/executor.ts","../../src/app.ts"],"sourcesContent":["import type {\n FeatureAction,\n FeatureScope,\n ScenarioAction,\n ScenarioScope,\n SizedTimeout,\n TestTimeout\n} from \"@autometa/scopes\";\n\nexport { defineConfig } from \"./config\";\nexport { defineParameterType } from \"./parameters\";\nimport {\n Feature as FeatureDefinition,\n Scenario as ScenarioDefinition,\n ScenarioOutline as ScenarioOutlineDefinition,\n Rule as RuleDefinition,\n Given as GivenDefinition,\n When as WhenDefinition,\n Then as ThenDefinition,\n Before as BeforeDefinition,\n After as AfterDefinition,\n Teardown as TeardownDefinition,\n Setup as SetupDefinition\n} from \"./scopes\";\nimport { RuleAction } from \"@autometa/scopes\";\nimport { RuleScope } from \"@autometa/scopes\";\nexport { Pass } from \"./scopes\";\nexport * from \"@autometa/phrases\";\nexport {\n AppType,\n Fixture,\n Container,\n Constructor,\n AutometaApp,\n getApp,\n AutometaWorld,\n App,\n World,\n INJECTION_SCOPE,\n InjectionScope,\n Inject\n} from \"./app\";\nexport { Dates, Time } from \"@autometa/datetime\";\nexport { AutomationError, raise } from \"@autometa/errors\";\nexport { DataTable, HTable, VTable, MTable, TableDocument } from \"@autometa/gherkin\";\nexport { Bind } from \"@autometa/bind-decorator\";\nexport { Types } from \"@autometa/scopes\";\nexport * from \"./events\";\nexport * from \"@autometa/http\";\nexport * from \"@autometa/asserters\";\nexport {\n GetAccessedCount,\n GetAssignedValues,\n TrackAccess\n} from \"@autometa/fixture-proxies\";\n\nexport { FileObject } from \"@autometa/file-proxies\";\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n *\n * ``ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n *\n * Feature('../features/my-feature.feature')\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * }\n * ```\n *\n * Global steps are defined in standard Cucumber stle.\n * ```ts\n * // ./test/steps/my-steps.ts\n * import { Given, When, Then } from '@autometa/runner'\n *\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * ```\n * @param filepath The absolute, relative, or 'feature root' path to the `.feature` file.\n */\nexport function Feature(filepath: string): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n * Accepts a timeout in milliseconds which will be applied to\n * all tests within the feature.\n *\n * ```ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n * // 10 second timeout\n * Feature('../features/my-feature.feature', 10_000)\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * }\n * ```\n *\n * Global steps are defined in standard Cucumber style.\n *\n * ```ts\n * // ./test/steps/my-steps.ts\n * import { Given, When, Then } from '@autometa/runner'\n *\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * ```\n * @param filepath The absolute, relative, or 'feature root' path to the `.feature` file.\n * @param timeout The timeout in milliseconds to apply to all tests within the feature.\n */\nexport function Feature(filepath: string, timeout: number): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n * Accepts a timeout as a `TestTimeout` which is a tuple of `[durationNumber, 'ms' | 's' | 'm' | 'h']`\n * which will be applied to all tests within the feature.\n *\n * i.e. `[10, 's']` is a 10 second timeout. `[1, 'm']` is a 1 minute timeout.\n *\n * ```ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n *\n * // 10 second timeout\n * Feature('../features/my-feature.feature', [10, 's'])\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * };\n *\n * ```\n *\n * @param filepath\n * @param timeout\n */\nexport function Feature(filepath: string, timeout: TestTimeout): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and optionally locally defined steps,\n * mixed with optionally globally defined Step Definitions.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * })\n * ```\n *\n * If defined in the Gherkin, it will also use any Globally defined Step Definitions which match,\n * if none is defined locally. If a Step Definition is defined both globally and locally,\n * the most local definition will be used. This applies to sub-scopes like Scenarios and Rules\n * also.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n *\n * Scenario('My Scenario', () => {\n * Given('I have a step', () => {})\n * })\n *\n * Rule('My Rule', () => {\n * Given('I have a step', () => {})\n * })\n *\n * @param testDefinition\n * @param filepath\n */\nexport function Feature(\n testDefinition: FeatureAction,\n filepath: string\n): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and optionally locally defined steps,\n * mixed with optionally globally defined Step Definitions.\n * Accepts a timeout in milliseconds which will be applied to\n * all tests within the feature.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * // 10 second timeout\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * }, 10_000)\n * ```\n * @param testDefinition the Feature definition callback\n * @param filepath\n * @param timeout\n */\nexport function Feature(\n testDefinition: FeatureAction,\n filepath: string,\n timeout: number\n): FeatureScope;\nexport function Feature(\n ...args: (FeatureAction | string | TestTimeout)[]\n): FeatureScope {\n return FeatureDefinition(...args);\n}\n\nexport function Scenario(title: string, action: ScenarioAction): ScenarioScope;\nexport function Scenario(\n title: string,\n action: ScenarioAction,\n timeout: number\n): ScenarioScope;\nexport function Scenario(\n title: string,\n action: ScenarioAction,\n timeout: SizedTimeout\n): ScenarioScope;\nexport function Scenario(\n ...args: (string | ScenarioAction | SizedTimeout | number)[]\n): ScenarioScope {\n return ScenarioDefinition(...args);\n}\n\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction\n): ScenarioScope;\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction,\n timeout: number\n): ScenarioScope;\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction,\n timeout: SizedTimeout\n): ScenarioScope;\nexport function ScenarioOutline(\n ...args: (string | ScenarioAction | SizedTimeout | number)[]\n): ScenarioScope {\n return ScenarioOutlineDefinition(...args);\n}\n\nexport function Rule(title: string, action: RuleAction): RuleScope;\nexport function Rule(\n title: string,\n action: RuleAction,\n timeout: number\n): RuleScope;\nexport function Rule(\n title: string,\n action: RuleAction,\n timeout: SizedTimeout\n): RuleScope;\nexport function Rule(\n ...args: (string | RuleAction | SizedTimeout | number)[]\n): RuleScope {\n return RuleDefinition(...args);\n}\n/**\n * Defines a `Given` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n * the context of a scenario, but cannot be accessed from the same step in a different\n * scenario.\n *\n * ```ts\n * import { Given } from '@autometa/runner'\n *\n * Given('I have a step', (app) => {\n * app.world.someData = 'some value'\n * })\n * // using destructuring\n * Given('I have a step', ({ world }) => {\n * world.someData = 'some value'\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { Given } from '@autometa/runner'\n *\n * // matches 'Given I have a step with a 'blue' value'\n * Given('I have a step with a {string} value', (value, { world }) => {\n * world.someData = value\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const Given = GivenDefinition;\n/**\n * Defines a `When` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n *\n * ```ts\n * import { When } from '@autometa/runner'\n *\n * When('I do something', async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * When('I do something', async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { When } from '@autometa/runner'\n *\n * // matches 'When I do something with a 'blue' value'\n * When('I do something with a {string} value', async (value, { webdriver }) => {\n * await webdriver.click(`#some-button-${value}`)\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const When = WhenDefinition;\n\n/**\n * Defines a `Then` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n *\n * ```ts\n * import { Then } from '@autometa/runner'\n *\n * Then('I expect something', async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Then('I expect something', async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { Then } from '@autometa/runner'\n *\n * // matches 'Then I expect something with a 'blue' value'\n * Then('I expect something with a {string} value', async (value, { world }) => {\n * expect(world.someData).toBe(value)\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const Then = ThenDefinition;\n\n/**\n * Defines a `Before` hook. Executes before each scenario.\n *\n * ```ts\n * import { Before } from '@autometa/runner'\n *\n * Before(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Before(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Before = BeforeDefinition;\n\n/**\n * Defines a `After` hook. Executes after each scenario.\n *\n * ```ts\n * import { After } from '@autometa/runner'\n *\n * After(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * After(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const After = AfterDefinition;\n\n/**\n * Defines a `Setup` hook. Executes before all scenarios.\n * Setups are scoped, meaning a Setup defined inside the scope of a rule\n * will only apply to scenarios within that rule.\n *\n * N.b the Setup Hook and Teardown Hook reference their own unique\n * copy of the App with it's own unique life cycle. Values stored here\n * will not be accessible in tests without a singleton fixture.\n *\n * ```ts\n * import { Setup } from '@autometa/runner'\n *\n * Setup(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Setup(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Teardown = TeardownDefinition;\n\n/**\n * Defines a `Teardown` hook. Executes after all scenarios have completed.\n * Teardowns are scoped, meaning a Teardown defined inside the scope of a rule\n * will only apply to scenarios within that rule.\n *\n * N.b the Setup Hook and Teardown Hook reference their own unique\n * copy of the App with it's own unique life cycle. Values stored here\n * will not be accessible in tests without a singleston fixture.\n * ```ts\n * import { Teardown } from '@autometa/runner'\n *\n * Teardown(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Teardown(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Setup = SetupDefinition;\n","import {\n Config,\n TestExecutorConfig,\n defineConfig as dc\n} from \"@autometa/config\";\n\nexport const CONFIG = new Config(new Map<string, TestExecutorConfig>());\nexport const defineConfig = dc.bind(null, CONFIG);\n","import { ParameterTypeRegistry } from \"@cucumber/cucumber-expressions\";\nimport {\n BooleanParam,\n DateParam,\n NumberParam,\n PrimitiveParam,\n OrdinalParam,\n TextParam,\n defineParameterType as dpt\n} from \"@autometa/cucumber-expressions\";\n\nexport const PARAM_REGISTRY = new ParameterTypeRegistry();\n\n/**\n * Defines a parameter type for use in step definitions.\n * \n * ```ts\n * import { Color } from '../support/color';\n * \n * defineParameterType({\n * name: \"color\",\n * regexpPattern: /red|blue|yellow/,\n * transform: (value: string) => Color(value)\n * })\n * \n * // using regex arrays\n * defineParameterType({\n * name: \"color\",\n * regexpPattern: [/red/, /blue/, /yellow/],\n * transform: (value: string) => Color(value)\n * })\n * ```\n */\nexport const defineParameterType = dpt.bind(null, PARAM_REGISTRY);\n\ndefineParameterType(\n NumberParam,\n BooleanParam,\n PrimitiveParam,\n TextParam,\n DateParam,\n OrdinalParam\n);\n","import { PARAM_REGISTRY } from \"./parameters\";\nimport { GetCucumberFunctions, Pass } from \"@autometa/scopes\";\nimport { Coordinator } from \"@autometa/coordinator\";\nimport { CONFIG } from \"./config\";\nimport { makeTestEmitter } from \"./events\";\nimport { executor } from \"./executor\";\nimport { OPTS } from \"./app\";\nconst {\n Feature,\n Scenario,\n ScenarioOutline,\n Rule,\n Given,\n When,\n Then,\n Before,\n After,\n Teardown,\n Setup,\n Global\n} = GetCucumberFunctions(PARAM_REGISTRY);\nconst coordinator = new Coordinator(Global, CONFIG, OPTS);\nGlobal.onFeatureExecuted = (feature, caller) => {\n const groupLogger = CONFIG.current.test?.groupLogging ?? false;\n const events = makeTestEmitter({ groupLogger });\n coordinator.run(feature, caller, events, executor);\n};\n\nexport {\n Feature,\n Scenario,\n ScenarioOutline,\n Rule,\n Given,\n When,\n Then,\n Before,\n After,\n Teardown,\n Setup,\n Pass\n};\n","import { TestEventEmitter } from \"@autometa/events\";\nimport { CONFIG } from \"./config\";\nexport * from \"@autometa/events\";\nimport { GroupLogEvents } from \"./event-logger\";\nimport p from \"path\";\nexport function makeTestEmitter(opts: { groupLogger: boolean }) {\n const events = CONFIG.current.events;\n const emitter = new TestEventEmitter();\n if (opts.groupLogger) {\n emitter.load(new GroupLogEvents());\n }\n if (!events) {\n return emitter;\n }\n\n for (const event of events) {\n const isLocal = isRelativePath(event) || isAbsolutePath(event);\n if (isLocal) {\n const uriRoot = process.cwd();\n const uri = p.join(uriRoot, event);\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const listener = require(uri);\n if('default' in listener && typeof listener.default === \"function\") {\n emitter.load(new listener.default());\n return emitter;\n }\n if('default' in listener && typeof listener.default === \"object\") {\n emitter.load(listener.default);\n return emitter;\n }\n if(typeof listener === \"function\") {\n emitter.load(new listener());\n return emitter;\n }\n emitter.load(listener);\n return emitter;\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const listener = require(event);\n if('default' in listener) {\n emitter.load(listener.default);\n return emitter;\n }\n emitter.load(listener);\n return emitter;\n }\n\n return emitter;\n}\n\nfunction isRelativePath(path: string) {\n return path.startsWith(\".\");\n}\n\nfunction isAbsolutePath(path: string) {\n return p.isAbsolute(path);\n}\n","import {\n EndAfterOpts,\n EndBeforeOpts,\n EndFeatureOpts,\n EndRuleOpts,\n EndScenarioOpts,\n EndScenarioOutlineOpts,\n EndSetupOpts,\n EndStepOpts,\n EndTeardownOpts,\n EventSubscriber,\n StartAfterOpts,\n StartBeforeOpts,\n StartFeatureOpts,\n StartRuleOpts,\n StartScenarioOpts,\n StartScenarioOutlineOpts,\n StartSetupOpts,\n StartStepOpts,\n StartTeardownOpts\n} from \"@autometa/events\";\nimport colors from \"colors-cli\";\nexport class GroupLogEvents implements EventSubscriber {\n onFeatureStart({ title }: StartFeatureOpts) {\n console.group(title);\n console.group();\n }\n onFeatureEnd({ title, status }: EndFeatureOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onScenarioStart({ title }: StartScenarioOpts): void {\n console.group(title);\n console.group();\n }\n onScenarioEnd({ title, status }: EndScenarioOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onScenarioOutlineStart(opts: StartScenarioOutlineOpts): void {\n console.group(opts.title);\n console.group();\n }\n onScenarioOutlineEnd({ title, status }: EndScenarioOutlineOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onRuleStart({ title }: StartRuleOpts): void {\n console.group(title);\n console.group();\n }\n onRuleEnd({ title, status }: EndRuleOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onStepStart({ title }: StartStepOpts) {\n console.group(title);\n console.group();\n }\n onStepEnd({ title, status }: EndStepOpts) {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onBeforeStart({ title, status }: StartBeforeOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onBeforeEnd({ title, status }: EndBeforeOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onAfterStart({ title, status }: StartAfterOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onAfterEnd({ title, status }: EndAfterOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onTeardownStart({ title, status }: StartTeardownOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onTeardownEnd({ title, status }: EndTeardownOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onSetupStart({title, status}: StartSetupOpts): void {\n if (status === \"SKIPPED\") {\n return\n }\n console.group(title);\n console.group();\n }\n onSetupEnd({ title, status }: EndSetupOpts): void {\n if (status === \"SKIPPED\") {\n return\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n}\nfunction colorStatus(\n status: \"FAILED\" | \"PASSED\" | \"SKIPPED\" | \"BROKEN\" | undefined,\n text: string\n) {\n switch (status) {\n case \"FAILED\":\n return `${colors.red(\"x\")} ${text}`;\n case \"PASSED\":\n return `${colors.green(\"✔️\")} ${text}`;\n case \"SKIPPED\":\n return `${colors.yellow(\"⊘\")} ${text}`;\n default:\n return text;\n }\n}\n","import { execute } from \"@autometa/jest-executor\";\n\nexport const executor = execute;\n","import \"@autometa/types\";\nimport { AppType as at } from \"@autometa/app\";\nimport { CoordinatorOpts } from \"@autometa/coordinator\";\nexport { AutometaApp, AutometaWorld, App, World } from \"@autometa/app\";\nexport {\n Fixture,\n INJECTION_SCOPE,\n InjectionScope,\n Token,\n Container,\n Constructor,\n Inject,\n} from \"@autometa/injection\";\nexport const OPTS = {} as Record<string, CoordinatorOpts>;\n/**\n * Marks a class as being the `App` of the test framework. The `App` is the\n * entry point for the test framework. The App will be made available as the final\n * argument in the Step Definition Callbacks.\n *\n * ```ts\n *\n * @AppType(World)\n * @Constructor(MyClient)\n * class App {\n * constructor(readonly myCLient: MyClient) {}\n * }\n * ```\n * Or with tokens\n *\n * ```ts\n * import from \"@autometa/runner\";\n * import { World } from \"./default.world\";\n * @AppType(World)\n * @Constructor(HTTP, Token(\"MyClient\"))\n * class App {\n * constructor(readonly http: HTTP, readonly myClient: MyClient) {}\n * }\n * ```\n */\nexport const AppType = at.bind(null, OPTS);\nexport { getApp } from \"@autometa/app\";\n"],"mappings":"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","names":["After","Before","Feature","Given","Rule","Scenario","ScenarioOutline","Setup","Teardown","Then","When","listener","Feature","Scenario","ScenarioOutline","Rule","Given","When","Then","Before","After","Teardown","Setup"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/config.ts","../../src/parameters.ts","../../src/scopes.ts","../../src/events.ts","../../src/event-logger.ts","../../src/executor.ts","../../src/app.ts"],"sourcesContent":["import type {\n FeatureAction,\n FeatureScope,\n ScenarioAction,\n ScenarioScope,\n SizedTimeout,\n TestTimeout,\n} from \"@autometa/scopes\";\n\nexport { defineConfig } from \"./config\";\nexport { defineParameterType } from \"./parameters\";\nimport {\n Feature as FeatureDefinition,\n Scenario as ScenarioDefinition,\n ScenarioOutline as ScenarioOutlineDefinition,\n Rule as RuleDefinition,\n Given as GivenDefinition,\n When as WhenDefinition,\n Then as ThenDefinition,\n Before as BeforeDefinition,\n After as AfterDefinition,\n Teardown as TeardownDefinition,\n Setup as SetupDefinition,\n} from \"./scopes\";\nimport { RuleAction } from \"@autometa/scopes\";\nimport { RuleScope } from \"@autometa/scopes\";\nexport { Pass } from \"./scopes\";\nexport * from \"@autometa/phrases\";\nexport {\n AppType,\n Fixture,\n Container,\n Constructor,\n AutometaApp,\n getApp,\n AutometaWorld,\n App,\n World,\n INJECTION_SCOPE,\n InjectionScope,\n Inject,\n} from \"./app\";\nexport { Dates, Time } from \"@autometa/datetime\";\nexport { AutomationError, raise } from \"@autometa/errors\";\nexport {\n DataTable,\n HTable,\n VTable,\n MTable,\n TableDocument,\n} from \"@autometa/gherkin\";\nexport { Bind } from \"@autometa/bind-decorator\";\nexport { Types } from \"@autometa/scopes\";\nexport * from \"./events\";\nexport * from \"@autometa/http\";\nexport * from \"@autometa/asserters\";\nexport {\n GetAccessedCount,\n GetAssignedValues,\n TrackAccess,\n} from \"@autometa/fixture-proxies\";\n\nexport { FileObject } from \"@autometa/file-proxies\";\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n *\n * ``ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n *\n * Feature('../features/my-feature.feature')\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * }\n * ```\n *\n * Global steps are defined in standard Cucumber stle.\n * ```ts\n * // ./test/steps/my-steps.ts\n * import { Given, When, Then } from '@autometa/runner'\n *\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * ```\n * @param filepath The absolute, relative, or 'feature root' path to the `.feature` file.\n */\nexport function Feature(filepath: string): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n * Accepts a timeout in milliseconds which will be applied to\n * all tests within the feature.\n *\n * ```ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n * // 10 second timeout\n * Feature('../features/my-feature.feature', 10_000)\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * }\n * ```\n *\n * Global steps are defined in standard Cucumber style.\n *\n * ```ts\n * // ./test/steps/my-steps.ts\n * import { Given, When, Then } from '@autometa/runner'\n *\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * ```\n * @param filepath The absolute, relative, or 'feature root' path to the `.feature` file.\n * @param timeout The timeout in milliseconds to apply to all tests within the feature.\n */\nexport function Feature(filepath: string, timeout: number): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n * Accepts a timeout as a `TestTimeout` which is a tuple of `[durationNumber, 'ms' | 's' | 'm' | 'h']`\n * which will be applied to all tests within the feature.\n *\n * i.e. `[10, 's']` is a 10 second timeout. `[1, 'm']` is a 1 minute timeout.\n *\n * ```ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n *\n * // 10 second timeout\n * Feature('../features/my-feature.feature', [10, 's'])\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * };\n *\n * ```\n *\n * @param filepath\n * @param timeout\n */\nexport function Feature(filepath: string, timeout: TestTimeout): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and optionally locally defined steps,\n * mixed with optionally globally defined Step Definitions.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * })\n * ```\n *\n * If defined in the Gherkin, it will also use any Globally defined Step Definitions which match,\n * if none is defined locally. If a Step Definition is defined both globally and locally,\n * the most local definition will be used. This applies to sub-scopes like Scenarios and Rules\n * also.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n *\n * Scenario('My Scenario', () => {\n * Given('I have a step', () => {})\n * })\n *\n * Rule('My Rule', () => {\n * Given('I have a step', () => {})\n * })\n *\n * @param testDefinition\n * @param filepath\n */\nexport function Feature(\n testDefinition: FeatureAction,\n filepath: string\n): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and optionally locally defined steps,\n * mixed with optionally globally defined Step Definitions.\n * Accepts a timeout in milliseconds which will be applied to\n * all tests within the feature.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * // 10 second timeout\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * }, 10_000)\n * ```\n * @param testDefinition the Feature definition callback\n * @param filepath\n * @param timeout\n */\nexport function Feature(\n testDefinition: FeatureAction,\n filepath: string,\n timeout: number\n): FeatureScope;\nexport function Feature(\n ...args: (FeatureAction | string | TestTimeout)[]\n): FeatureScope {\n return FeatureDefinition(...args);\n}\n\nexport function Scenario(title: string, action: ScenarioAction): ScenarioScope;\nexport function Scenario(\n title: string,\n action: ScenarioAction,\n timeout: number\n): ScenarioScope;\nexport function Scenario(\n title: string,\n action: ScenarioAction,\n timeout: SizedTimeout\n): ScenarioScope;\nexport function Scenario(\n ...args: (string | ScenarioAction | SizedTimeout | number)[]\n): ScenarioScope {\n return ScenarioDefinition(...args);\n}\n\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction\n): ScenarioScope;\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction,\n timeout: number\n): ScenarioScope;\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction,\n timeout: SizedTimeout\n): ScenarioScope;\nexport function ScenarioOutline(\n ...args: (string | ScenarioAction | SizedTimeout | number)[]\n): ScenarioScope {\n return ScenarioOutlineDefinition(...args);\n}\n\nexport function Rule(title: string, action: RuleAction): RuleScope;\nexport function Rule(\n title: string,\n action: RuleAction,\n timeout: number\n): RuleScope;\nexport function Rule(\n title: string,\n action: RuleAction,\n timeout: SizedTimeout\n): RuleScope;\nexport function Rule(\n ...args: (string | RuleAction | SizedTimeout | number)[]\n): RuleScope {\n return RuleDefinition(...args);\n}\n/**\n * Defines a `Given` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n * the context of a scenario, but cannot be accessed from the same step in a different\n * scenario.\n *\n * ```ts\n * import { Given } from '@autometa/runner'\n *\n * Given('I have a step', (app) => {\n * app.world.someData = 'some value'\n * })\n * // using destructuring\n * Given('I have a step', ({ world }) => {\n * world.someData = 'some value'\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { Given } from '@autometa/runner'\n *\n * // matches 'Given I have a step with a 'blue' value'\n * Given('I have a step with a {string} value', (value, { world }) => {\n * world.someData = value\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const Given = GivenDefinition;\n/**\n * Defines a `When` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n *\n * ```ts\n * import { When } from '@autometa/runner'\n *\n * When('I do something', async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * When('I do something', async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { When } from '@autometa/runner'\n *\n * // matches 'When I do something with a 'blue' value'\n * When('I do something with a {string} value', async (value, { webdriver }) => {\n * await webdriver.click(`#some-button-${value}`)\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const When = WhenDefinition;\n\n/**\n * Defines a `Then` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n *\n * ```ts\n * import { Then } from '@autometa/runner'\n *\n * Then('I expect something', async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Then('I expect something', async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { Then } from '@autometa/runner'\n *\n * // matches 'Then I expect something with a 'blue' value'\n * Then('I expect something with a {string} value', async (value, { world }) => {\n * expect(world.someData).toBe(value)\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const Then = ThenDefinition;\n\n/**\n * Defines a `Before` hook. Executes before each scenario.\n *\n * ```ts\n * import { Before } from '@autometa/runner'\n *\n * Before(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Before(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Before = BeforeDefinition;\n\n/**\n * Defines a `After` hook. Executes after each scenario.\n *\n * ```ts\n * import { After } from '@autometa/runner'\n *\n * After(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * After(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const After = AfterDefinition;\n\n/**\n * Defines a `Setup` hook. Executes before all scenarios.\n * Setups are scoped, meaning a Setup defined inside the scope of a rule\n * will only apply to scenarios within that rule.\n *\n * N.b the Setup Hook and Teardown Hook reference their own unique\n * copy of the App with it's own unique life cycle. Values stored here\n * will not be accessible in tests without a singleton fixture.\n *\n * ```ts\n * import { Setup } from '@autometa/runner'\n *\n * Setup(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Setup(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Teardown = TeardownDefinition;\n\n/**\n * Defines a `Teardown` hook. Executes after all scenarios have completed.\n * Teardowns are scoped, meaning a Teardown defined inside the scope of a rule\n * will only apply to scenarios within that rule.\n *\n * N.b the Setup Hook and Teardown Hook reference their own unique\n * copy of the App with it's own unique life cycle. Values stored here\n * will not be accessible in tests without a singleston fixture.\n * ```ts\n * import { Teardown } from '@autometa/runner'\n *\n * Teardown(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Teardown(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Setup = SetupDefinition;\n","import {\n Config,\n TestExecutorConfig,\n defineConfig as dc,\n} from \"@autometa/config\";\n\nexport const CONFIG = new Config(new Map<string, TestExecutorConfig>());\nexport const defineConfig = dc.bind(null, CONFIG);\n","import { ParameterTypeRegistry } from \"@cucumber/cucumber-expressions\";\nimport {\n BooleanParam,\n DateParam,\n NumberParam,\n PrimitiveParam,\n OrdinalParam,\n TextParam,\n defineParameterType as dpt,\n} from \"@autometa/cucumber-expressions\";\n\nexport const PARAM_REGISTRY = new ParameterTypeRegistry();\n\n/**\n * Defines a parameter type for use in step definitions.\n *\n * ```ts\n * import { Color } from '../support/color';\n *\n * defineParameterType({\n * name: \"color\",\n * regexpPattern: /red|blue|yellow/,\n * transform: (value: string) => Color(value)\n * })\n *\n * // using regex arrays\n * defineParameterType({\n * name: \"color\",\n * regexpPattern: [/red/, /blue/, /yellow/],\n * transform: (value: string) => Color(value)\n * })\n * ```\n */\nexport const defineParameterType = dpt.bind(null, PARAM_REGISTRY);\n\ndefineParameterType(\n NumberParam,\n BooleanParam,\n PrimitiveParam,\n TextParam,\n DateParam,\n OrdinalParam\n);\n","import { PARAM_REGISTRY } from \"./parameters\";\nimport { GetCucumberFunctions, Pass } from \"@autometa/scopes\";\nimport { Coordinator } from \"@autometa/coordinator\";\nimport { CONFIG } from \"./config\";\nimport { makeTestEmitter } from \"./events\";\nimport { executor } from \"./executor\";\nimport { OPTS } from \"./app\";\nconst {\n Feature,\n Scenario,\n ScenarioOutline,\n Rule,\n Given,\n When,\n Then,\n Before,\n After,\n Teardown,\n Setup,\n Global,\n} = GetCucumberFunctions(PARAM_REGISTRY);\nconst coordinator = new Coordinator(Global, CONFIG, OPTS);\nGlobal.onFeatureExecuted = (feature, caller) => {\n const groupLogger = CONFIG.current.test?.groupLogging ?? false;\n const events = makeTestEmitter({ groupLogger });\n coordinator.run(feature, caller, events, executor);\n};\n\nexport {\n Feature,\n Scenario,\n ScenarioOutline,\n Rule,\n Given,\n When,\n Then,\n Before,\n After,\n Teardown,\n Setup,\n Pass,\n};\n","import { TestEventEmitter } from \"@autometa/events\";\nimport { CONFIG } from \"./config\";\nexport * from \"@autometa/events\";\nimport { GroupLogEvents } from \"./event-logger\";\nimport p from \"path\";\nexport function makeTestEmitter(opts: { groupLogger: boolean }) {\n const events = CONFIG.current.events;\n const emitter = new TestEventEmitter();\n if (opts.groupLogger) {\n emitter.load(new GroupLogEvents());\n }\n if (!events) {\n return emitter;\n }\n\n for (const event of events) {\n const isLocal = isRelativePath(event) || isAbsolutePath(event);\n if (isLocal) {\n const uriRoot = process.cwd();\n const uri = p.join(uriRoot, event);\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const listener = require(uri);\n if (\"default\" in listener && typeof listener.default === \"function\") {\n emitter.load(new listener.default());\n return emitter;\n }\n if (\"default\" in listener && typeof listener.default === \"object\") {\n emitter.load(listener.default);\n return emitter;\n }\n if (typeof listener === \"function\") {\n emitter.load(new listener());\n return emitter;\n }\n emitter.load(listener);\n return emitter;\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const listener = require(event);\n if (\"default\" in listener) {\n emitter.load(listener.default);\n return emitter;\n }\n emitter.load(listener);\n return emitter;\n }\n\n return emitter;\n}\n\nfunction isRelativePath(path: string) {\n return path.startsWith(\".\");\n}\n\nfunction isAbsolutePath(path: string) {\n return p.isAbsolute(path);\n}\n","import {\n EndAfterOpts,\n EndBeforeOpts,\n EndFeatureOpts,\n EndRuleOpts,\n EndScenarioOpts,\n EndScenarioOutlineOpts,\n EndSetupOpts,\n EndStepOpts,\n EndTeardownOpts,\n EventSubscriber,\n StartAfterOpts,\n StartBeforeOpts,\n StartFeatureOpts,\n StartRuleOpts,\n StartScenarioOpts,\n StartScenarioOutlineOpts,\n StartSetupOpts,\n StartStepOpts,\n StartTeardownOpts,\n} from \"@autometa/events\";\nimport colors from \"colors-cli\";\nexport class GroupLogEvents implements EventSubscriber {\n onFeatureStart({ title }: StartFeatureOpts) {\n console.group(title);\n console.group();\n }\n onFeatureEnd({ title, status }: EndFeatureOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onScenarioStart({ title }: StartScenarioOpts): void {\n console.group(title);\n console.group();\n }\n onScenarioEnd({ title, status }: EndScenarioOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onScenarioOutlineStart(opts: StartScenarioOutlineOpts): void {\n console.group(opts.title);\n console.group();\n }\n onScenarioOutlineEnd({ title, status }: EndScenarioOutlineOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onRuleStart({ title }: StartRuleOpts): void {\n console.group(title);\n console.group();\n }\n onRuleEnd({ title, status }: EndRuleOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onStepStart({ title }: StartStepOpts) {\n console.group(title);\n console.group();\n }\n onStepEnd({ title, status }: EndStepOpts) {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onBeforeStart({ title, status }: StartBeforeOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onBeforeEnd({ title, status }: EndBeforeOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onAfterStart({ title, status }: StartAfterOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onAfterEnd({ title, status }: EndAfterOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onTeardownStart({ title, status }: StartTeardownOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onTeardownEnd({ title, status }: EndTeardownOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onSetupStart({ title, status }: StartSetupOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onSetupEnd({ title, status }: EndSetupOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n}\nfunction colorStatus(\n status: \"FAILED\" | \"PASSED\" | \"SKIPPED\" | \"BROKEN\" | undefined,\n text: string\n) {\n switch (status) {\n case \"FAILED\":\n return `${colors.red(\"x\")} ${text}`;\n case \"PASSED\":\n return `${colors.green(\"✔️\")} ${text}`;\n case \"SKIPPED\":\n return `${colors.yellow(\"⊘\")} ${text}`;\n default:\n return text;\n }\n}\n","import { execute } from \"@autometa/jest-executor\";\n\nexport const executor = execute;\n","import \"@autometa/types\";\nimport { AppType as at } from \"@autometa/app\";\nimport { CoordinatorOpts } from \"@autometa/coordinator\";\nexport { AutometaApp, AutometaWorld, App, World } from \"@autometa/app\";\nexport {\n Fixture,\n INJECTION_SCOPE,\n InjectionScope,\n Token,\n Container,\n Constructor,\n Inject,\n} from \"@autometa/injection\";\nexport const OPTS = {} as Record<string, CoordinatorOpts>;\n/**\n * Marks a class as being the `App` of the test framework. The `App` is the\n * entry point for the test framework. The App will be made available as the final\n * argument in the Step Definition Callbacks.\n *\n * ```ts\n *\n * @AppType(World)\n * @Constructor(MyClient)\n * class App {\n * constructor(readonly myCLient: MyClient) {}\n * }\n * ```\n * Or with tokens\n *\n * ```ts\n * import from \"@autometa/runner\";\n * import { World } from \"./default.world\";\n * @AppType(World)\n * @Constructor(HTTP, Token(\"MyClient\"))\n * class App {\n * constructor(readonly http: HTTP, readonly myClient: MyClient) {}\n * }\n * ```\n */\nexport const AppType = at.bind(null, OPTS);\nexport { getApp } from \"@autometa/app\";\n"],"mappings":"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","names":["After","Before","Feature","Given","Rule","Scenario","ScenarioOutline","Setup","Teardown","Then","When","listener","Feature","Scenario","ScenarioOutline","Rule","Given","When","Then","Before","After","Teardown","Setup"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/config.ts","../src/parameters.ts","../src/scopes.ts","../src/events.ts","../src/event-logger.ts","../src/executor.ts","../src/app.ts"],"sourcesContent":["import type {\n FeatureAction,\n FeatureScope,\n ScenarioAction,\n ScenarioScope,\n SizedTimeout,\n TestTimeout\n} from \"@autometa/scopes\";\n\nexport { defineConfig } from \"./config\";\nexport { defineParameterType } from \"./parameters\";\nimport {\n Feature as FeatureDefinition,\n Scenario as ScenarioDefinition,\n ScenarioOutline as ScenarioOutlineDefinition,\n Rule as RuleDefinition,\n Given as GivenDefinition,\n When as WhenDefinition,\n Then as ThenDefinition,\n Before as BeforeDefinition,\n After as AfterDefinition,\n Teardown as TeardownDefinition,\n Setup as SetupDefinition\n} from \"./scopes\";\nimport { RuleAction } from \"@autometa/scopes\";\nimport { RuleScope } from \"@autometa/scopes\";\nexport { Pass } from \"./scopes\";\nexport * from \"@autometa/phrases\";\nexport {\n AppType,\n Fixture,\n Container,\n Constructor,\n AutometaApp,\n getApp,\n AutometaWorld,\n App,\n World,\n INJECTION_SCOPE,\n InjectionScope,\n Inject\n} from \"./app\";\nexport { Dates, Time } from \"@autometa/datetime\";\nexport { AutomationError, raise } from \"@autometa/errors\";\nexport { DataTable, HTable, VTable, MTable, TableDocument } from \"@autometa/gherkin\";\nexport { Bind } from \"@autometa/bind-decorator\";\nexport { Types } from \"@autometa/scopes\";\nexport * from \"./events\";\nexport * from \"@autometa/http\";\nexport * from \"@autometa/asserters\";\nexport {\n GetAccessedCount,\n GetAssignedValues,\n TrackAccess\n} from \"@autometa/fixture-proxies\";\n\nexport { FileObject } from \"@autometa/file-proxies\";\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n *\n * ``ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n *\n * Feature('../features/my-feature.feature')\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * }\n * ```\n *\n * Global steps are defined in standard Cucumber stle.\n * ```ts\n * // ./test/steps/my-steps.ts\n * import { Given, When, Then } from '@autometa/runner'\n *\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * ```\n * @param filepath The absolute, relative, or 'feature root' path to the `.feature` file.\n */\nexport function Feature(filepath: string): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n * Accepts a timeout in milliseconds which will be applied to\n * all tests within the feature.\n *\n * ```ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n * // 10 second timeout\n * Feature('../features/my-feature.feature', 10_000)\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * }\n * ```\n *\n * Global steps are defined in standard Cucumber style.\n *\n * ```ts\n * // ./test/steps/my-steps.ts\n * import { Given, When, Then } from '@autometa/runner'\n *\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * ```\n * @param filepath The absolute, relative, or 'feature root' path to the `.feature` file.\n * @param timeout The timeout in milliseconds to apply to all tests within the feature.\n */\nexport function Feature(filepath: string, timeout: number): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n * Accepts a timeout as a `TestTimeout` which is a tuple of `[durationNumber, 'ms' | 's' | 'm' | 'h']`\n * which will be applied to all tests within the feature.\n *\n * i.e. `[10, 's']` is a 10 second timeout. `[1, 'm']` is a 1 minute timeout.\n *\n * ```ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n *\n * // 10 second timeout\n * Feature('../features/my-feature.feature', [10, 's'])\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * };\n *\n * ```\n *\n * @param filepath\n * @param timeout\n */\nexport function Feature(filepath: string, timeout: TestTimeout): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and optionally locally defined steps,\n * mixed with optionally globally defined Step Definitions.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * })\n * ```\n *\n * If defined in the Gherkin, it will also use any Globally defined Step Definitions which match,\n * if none is defined locally. If a Step Definition is defined both globally and locally,\n * the most local definition will be used. This applies to sub-scopes like Scenarios and Rules\n * also.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n *\n * Scenario('My Scenario', () => {\n * Given('I have a step', () => {})\n * })\n *\n * Rule('My Rule', () => {\n * Given('I have a step', () => {})\n * })\n *\n * @param testDefinition\n * @param filepath\n */\nexport function Feature(\n testDefinition: FeatureAction,\n filepath: string\n): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and optionally locally defined steps,\n * mixed with optionally globally defined Step Definitions.\n * Accepts a timeout in milliseconds which will be applied to\n * all tests within the feature.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * // 10 second timeout\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * }, 10_000)\n * ```\n * @param testDefinition the Feature definition callback\n * @param filepath\n * @param timeout\n */\nexport function Feature(\n testDefinition: FeatureAction,\n filepath: string,\n timeout: number\n): FeatureScope;\nexport function Feature(\n ...args: (FeatureAction | string | TestTimeout)[]\n): FeatureScope {\n return FeatureDefinition(...args);\n}\n\nexport function Scenario(title: string, action: ScenarioAction): ScenarioScope;\nexport function Scenario(\n title: string,\n action: ScenarioAction,\n timeout: number\n): ScenarioScope;\nexport function Scenario(\n title: string,\n action: ScenarioAction,\n timeout: SizedTimeout\n): ScenarioScope;\nexport function Scenario(\n ...args: (string | ScenarioAction | SizedTimeout | number)[]\n): ScenarioScope {\n return ScenarioDefinition(...args);\n}\n\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction\n): ScenarioScope;\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction,\n timeout: number\n): ScenarioScope;\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction,\n timeout: SizedTimeout\n): ScenarioScope;\nexport function ScenarioOutline(\n ...args: (string | ScenarioAction | SizedTimeout | number)[]\n): ScenarioScope {\n return ScenarioOutlineDefinition(...args);\n}\n\nexport function Rule(title: string, action: RuleAction): RuleScope;\nexport function Rule(\n title: string,\n action: RuleAction,\n timeout: number\n): RuleScope;\nexport function Rule(\n title: string,\n action: RuleAction,\n timeout: SizedTimeout\n): RuleScope;\nexport function Rule(\n ...args: (string | RuleAction | SizedTimeout | number)[]\n): RuleScope {\n return RuleDefinition(...args);\n}\n/**\n * Defines a `Given` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n * the context of a scenario, but cannot be accessed from the same step in a different\n * scenario.\n *\n * ```ts\n * import { Given } from '@autometa/runner'\n *\n * Given('I have a step', (app) => {\n * app.world.someData = 'some value'\n * })\n * // using destructuring\n * Given('I have a step', ({ world }) => {\n * world.someData = 'some value'\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { Given } from '@autometa/runner'\n *\n * // matches 'Given I have a step with a 'blue' value'\n * Given('I have a step with a {string} value', (value, { world }) => {\n * world.someData = value\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const Given = GivenDefinition;\n/**\n * Defines a `When` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n *\n * ```ts\n * import { When } from '@autometa/runner'\n *\n * When('I do something', async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * When('I do something', async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { When } from '@autometa/runner'\n *\n * // matches 'When I do something with a 'blue' value'\n * When('I do something with a {string} value', async (value, { webdriver }) => {\n * await webdriver.click(`#some-button-${value}`)\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const When = WhenDefinition;\n\n/**\n * Defines a `Then` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n *\n * ```ts\n * import { Then } from '@autometa/runner'\n *\n * Then('I expect something', async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Then('I expect something', async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { Then } from '@autometa/runner'\n *\n * // matches 'Then I expect something with a 'blue' value'\n * Then('I expect something with a {string} value', async (value, { world }) => {\n * expect(world.someData).toBe(value)\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const Then = ThenDefinition;\n\n/**\n * Defines a `Before` hook. Executes before each scenario.\n *\n * ```ts\n * import { Before } from '@autometa/runner'\n *\n * Before(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Before(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Before = BeforeDefinition;\n\n/**\n * Defines a `After` hook. Executes after each scenario.\n *\n * ```ts\n * import { After } from '@autometa/runner'\n *\n * After(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * After(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const After = AfterDefinition;\n\n/**\n * Defines a `Setup` hook. Executes before all scenarios.\n * Setups are scoped, meaning a Setup defined inside the scope of a rule\n * will only apply to scenarios within that rule.\n *\n * N.b the Setup Hook and Teardown Hook reference their own unique\n * copy of the App with it's own unique life cycle. Values stored here\n * will not be accessible in tests without a singleton fixture.\n *\n * ```ts\n * import { Setup } from '@autometa/runner'\n *\n * Setup(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Setup(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Teardown = TeardownDefinition;\n\n/**\n * Defines a `Teardown` hook. Executes after all scenarios have completed.\n * Teardowns are scoped, meaning a Teardown defined inside the scope of a rule\n * will only apply to scenarios within that rule.\n *\n * N.b the Setup Hook and Teardown Hook reference their own unique\n * copy of the App with it's own unique life cycle. Values stored here\n * will not be accessible in tests without a singleston fixture.\n * ```ts\n * import { Teardown } from '@autometa/runner'\n *\n * Teardown(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Teardown(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Setup = SetupDefinition;\n","import {\n Config,\n TestExecutorConfig,\n defineConfig as dc\n} from \"@autometa/config\";\n\nexport const CONFIG = new Config(new Map<string, TestExecutorConfig>());\nexport const defineConfig = dc.bind(null, CONFIG);\n","import { ParameterTypeRegistry } from \"@cucumber/cucumber-expressions\";\nimport {\n BooleanParam,\n DateParam,\n NumberParam,\n PrimitiveParam,\n OrdinalParam,\n TextParam,\n defineParameterType as dpt\n} from \"@autometa/cucumber-expressions\";\n\nexport const PARAM_REGISTRY = new ParameterTypeRegistry();\n\n/**\n * Defines a parameter type for use in step definitions.\n * \n * ```ts\n * import { Color } from '../support/color';\n * \n * defineParameterType({\n * name: \"color\",\n * regexpPattern: /red|blue|yellow/,\n * transform: (value: string) => Color(value)\n * })\n * \n * // using regex arrays\n * defineParameterType({\n * name: \"color\",\n * regexpPattern: [/red/, /blue/, /yellow/],\n * transform: (value: string) => Color(value)\n * })\n * ```\n */\nexport const defineParameterType = dpt.bind(null, PARAM_REGISTRY);\n\ndefineParameterType(\n NumberParam,\n BooleanParam,\n PrimitiveParam,\n TextParam,\n DateParam,\n OrdinalParam\n);\n","import { PARAM_REGISTRY } from \"./parameters\";\nimport { GetCucumberFunctions, Pass } from \"@autometa/scopes\";\nimport { Coordinator } from \"@autometa/coordinator\";\nimport { CONFIG } from \"./config\";\nimport { makeTestEmitter } from \"./events\";\nimport { executor } from \"./executor\";\nimport { OPTS } from \"./app\";\nconst {\n Feature,\n Scenario,\n ScenarioOutline,\n Rule,\n Given,\n When,\n Then,\n Before,\n After,\n Teardown,\n Setup,\n Global\n} = GetCucumberFunctions(PARAM_REGISTRY);\nconst coordinator = new Coordinator(Global, CONFIG, OPTS);\nGlobal.onFeatureExecuted = (feature, caller) => {\n const groupLogger = CONFIG.current.test?.groupLogging ?? false;\n const events = makeTestEmitter({ groupLogger });\n coordinator.run(feature, caller, events, executor);\n};\n\nexport {\n Feature,\n Scenario,\n ScenarioOutline,\n Rule,\n Given,\n When,\n Then,\n Before,\n After,\n Teardown,\n Setup,\n Pass\n};\n","import { TestEventEmitter } from \"@autometa/events\";\nimport { CONFIG } from \"./config\";\nexport * from \"@autometa/events\";\nimport { GroupLogEvents } from \"./event-logger\";\nimport p from \"path\";\nexport function makeTestEmitter(opts: { groupLogger: boolean }) {\n const events = CONFIG.current.events;\n const emitter = new TestEventEmitter();\n if (opts.groupLogger) {\n emitter.load(new GroupLogEvents());\n }\n if (!events) {\n return emitter;\n }\n\n for (const event of events) {\n const isLocal = isRelativePath(event) || isAbsolutePath(event);\n if (isLocal) {\n const uriRoot = process.cwd();\n const uri = p.join(uriRoot, event);\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const listener = require(uri);\n if('default' in listener && typeof listener.default === \"function\") {\n emitter.load(new listener.default());\n return emitter;\n }\n if('default' in listener && typeof listener.default === \"object\") {\n emitter.load(listener.default);\n return emitter;\n }\n if(typeof listener === \"function\") {\n emitter.load(new listener());\n return emitter;\n }\n emitter.load(listener);\n return emitter;\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const listener = require(event);\n if('default' in listener) {\n emitter.load(listener.default);\n return emitter;\n }\n emitter.load(listener);\n return emitter;\n }\n\n return emitter;\n}\n\nfunction isRelativePath(path: string) {\n return path.startsWith(\".\");\n}\n\nfunction isAbsolutePath(path: string) {\n return p.isAbsolute(path);\n}\n","import {\n EndAfterOpts,\n EndBeforeOpts,\n EndFeatureOpts,\n EndRuleOpts,\n EndScenarioOpts,\n EndScenarioOutlineOpts,\n EndSetupOpts,\n EndStepOpts,\n EndTeardownOpts,\n EventSubscriber,\n StartAfterOpts,\n StartBeforeOpts,\n StartFeatureOpts,\n StartRuleOpts,\n StartScenarioOpts,\n StartScenarioOutlineOpts,\n StartSetupOpts,\n StartStepOpts,\n StartTeardownOpts\n} from \"@autometa/events\";\nimport colors from \"colors-cli\";\nexport class GroupLogEvents implements EventSubscriber {\n onFeatureStart({ title }: StartFeatureOpts) {\n console.group(title);\n console.group();\n }\n onFeatureEnd({ title, status }: EndFeatureOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onScenarioStart({ title }: StartScenarioOpts): void {\n console.group(title);\n console.group();\n }\n onScenarioEnd({ title, status }: EndScenarioOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onScenarioOutlineStart(opts: StartScenarioOutlineOpts): void {\n console.group(opts.title);\n console.group();\n }\n onScenarioOutlineEnd({ title, status }: EndScenarioOutlineOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onRuleStart({ title }: StartRuleOpts): void {\n console.group(title);\n console.group();\n }\n onRuleEnd({ title, status }: EndRuleOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onStepStart({ title }: StartStepOpts) {\n console.group(title);\n console.group();\n }\n onStepEnd({ title, status }: EndStepOpts) {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onBeforeStart({ title, status }: StartBeforeOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onBeforeEnd({ title, status }: EndBeforeOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onAfterStart({ title, status }: StartAfterOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onAfterEnd({ title, status }: EndAfterOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onTeardownStart({ title, status }: StartTeardownOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onTeardownEnd({ title, status }: EndTeardownOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onSetupStart({title, status}: StartSetupOpts): void {\n if (status === \"SKIPPED\") {\n return\n }\n console.group(title);\n console.group();\n }\n onSetupEnd({ title, status }: EndSetupOpts): void {\n if (status === \"SKIPPED\") {\n return\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n}\nfunction colorStatus(\n status: \"FAILED\" | \"PASSED\" | \"SKIPPED\" | \"BROKEN\" | undefined,\n text: string\n) {\n switch (status) {\n case \"FAILED\":\n return `${colors.red(\"x\")} ${text}`;\n case \"PASSED\":\n return `${colors.green(\"✔️\")} ${text}`;\n case \"SKIPPED\":\n return `${colors.yellow(\"⊘\")} ${text}`;\n default:\n return text;\n }\n}\n","import { execute } from \"@autometa/jest-executor\";\n\nexport const executor = execute;\n","import \"@autometa/types\";\nimport { AppType as at } from \"@autometa/app\";\nimport { CoordinatorOpts } from \"@autometa/coordinator\";\nexport { AutometaApp, AutometaWorld, App, World } from \"@autometa/app\";\nexport {\n Fixture,\n INJECTION_SCOPE,\n InjectionScope,\n Token,\n Container,\n Constructor,\n Inject,\n} from \"@autometa/injection\";\nexport const OPTS = {} as Record<string, CoordinatorOpts>;\n/**\n * Marks a class as being the `App` of the test framework. The `App` is the\n * entry point for the test framework. The App will be made available as the final\n * argument in the Step Definition Callbacks.\n *\n * ```ts\n *\n * @AppType(World)\n * @Constructor(MyClient)\n * class App {\n * constructor(readonly myCLient: MyClient) {}\n * }\n * ```\n * Or with tokens\n *\n * ```ts\n * import from \"@autometa/runner\";\n * import { World } from \"./default.world\";\n * @AppType(World)\n * @Constructor(HTTP, Token(\"MyClient\"))\n * class App {\n * constructor(readonly http: HTTP, readonly myClient: MyClient) {}\n * }\n * ```\n */\nexport const AppType = at.bind(null, OPTS);\nexport { getApp } from \"@autometa/app\";\n"],"mappings":"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","names":["After","Before","Feature","Given","Rule","Scenario","ScenarioOutline","Setup","Teardown","Then","When","dc","import_cucumber_expressions","dpt","colors","p","listener","import_app","at","import_scopes","Feature","Scenario","ScenarioOutline","Rule","Given","When","Then","Before","After","Teardown","Setup"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/config.ts","../src/parameters.ts","../src/scopes.ts","../src/events.ts","../src/event-logger.ts","../src/executor.ts","../src/app.ts"],"sourcesContent":["import type {\n FeatureAction,\n FeatureScope,\n ScenarioAction,\n ScenarioScope,\n SizedTimeout,\n TestTimeout,\n} from \"@autometa/scopes\";\n\nexport { defineConfig } from \"./config\";\nexport { defineParameterType } from \"./parameters\";\nimport {\n Feature as FeatureDefinition,\n Scenario as ScenarioDefinition,\n ScenarioOutline as ScenarioOutlineDefinition,\n Rule as RuleDefinition,\n Given as GivenDefinition,\n When as WhenDefinition,\n Then as ThenDefinition,\n Before as BeforeDefinition,\n After as AfterDefinition,\n Teardown as TeardownDefinition,\n Setup as SetupDefinition,\n} from \"./scopes\";\nimport { RuleAction } from \"@autometa/scopes\";\nimport { RuleScope } from \"@autometa/scopes\";\nexport { Pass } from \"./scopes\";\nexport * from \"@autometa/phrases\";\nexport {\n AppType,\n Fixture,\n Container,\n Constructor,\n AutometaApp,\n getApp,\n AutometaWorld,\n App,\n World,\n INJECTION_SCOPE,\n InjectionScope,\n Inject,\n} from \"./app\";\nexport { Dates, Time } from \"@autometa/datetime\";\nexport { AutomationError, raise } from \"@autometa/errors\";\nexport {\n DataTable,\n HTable,\n VTable,\n MTable,\n TableDocument,\n} from \"@autometa/gherkin\";\nexport { Bind } from \"@autometa/bind-decorator\";\nexport { Types } from \"@autometa/scopes\";\nexport * from \"./events\";\nexport * from \"@autometa/http\";\nexport * from \"@autometa/asserters\";\nexport {\n GetAccessedCount,\n GetAssignedValues,\n TrackAccess,\n} from \"@autometa/fixture-proxies\";\n\nexport { FileObject } from \"@autometa/file-proxies\";\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n *\n * ``ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n *\n * Feature('../features/my-feature.feature')\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * }\n * ```\n *\n * Global steps are defined in standard Cucumber stle.\n * ```ts\n * // ./test/steps/my-steps.ts\n * import { Given, When, Then } from '@autometa/runner'\n *\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * ```\n * @param filepath The absolute, relative, or 'feature root' path to the `.feature` file.\n */\nexport function Feature(filepath: string): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n * Accepts a timeout in milliseconds which will be applied to\n * all tests within the feature.\n *\n * ```ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n * // 10 second timeout\n * Feature('../features/my-feature.feature', 10_000)\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * }\n * ```\n *\n * Global steps are defined in standard Cucumber style.\n *\n * ```ts\n * // ./test/steps/my-steps.ts\n * import { Given, When, Then } from '@autometa/runner'\n *\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * ```\n * @param filepath The absolute, relative, or 'feature root' path to the `.feature` file.\n * @param timeout The timeout in milliseconds to apply to all tests within the feature.\n */\nexport function Feature(filepath: string, timeout: number): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and globally defined Step Definitions.\n * Accepts a timeout as a `TestTimeout` which is a tuple of `[durationNumber, 'ms' | 's' | 'm' | 'h']`\n * which will be applied to all tests within the feature.\n *\n * i.e. `[10, 's']` is a 10 second timeout. `[1, 'm']` is a 1 minute timeout.\n *\n * ```ts\n * // using relative path\n * import { Feature } from '@autometa/runner'\n *\n * // 10 second timeout\n * Feature('../features/my-feature.feature', [10, 's'])\n * ```\n *\n * Steps will be automatically assembled from Globally defined Step Definitions,\n * if a step definition root and app root are defined.\n *\n * ```ts\n * import { defineConfig } from '@autometa/runner'\n *\n * defineConfig({\n * ...\n * roots: {\n * steps: ['./test/steps'],\n * app: ['./app'],\n * },\n * };\n *\n * ```\n *\n * @param filepath\n * @param timeout\n */\nexport function Feature(filepath: string, timeout: TestTimeout): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and optionally locally defined steps,\n * mixed with optionally globally defined Step Definitions.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * })\n * ```\n *\n * If defined in the Gherkin, it will also use any Globally defined Step Definitions which match,\n * if none is defined locally. If a Step Definition is defined both globally and locally,\n * the most local definition will be used. This applies to sub-scopes like Scenarios and Rules\n * also.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n *\n * Scenario('My Scenario', () => {\n * Given('I have a step', () => {})\n * })\n *\n * Rule('My Rule', () => {\n * Given('I have a step', () => {})\n * })\n *\n * @param testDefinition\n * @param filepath\n */\nexport function Feature(\n testDefinition: FeatureAction,\n filepath: string\n): FeatureScope;\n/**\n * Executes a gherkin `.feature` file. Assembles Tests\n * using the Cucumber file and optionally locally defined steps,\n * mixed with optionally globally defined Step Definitions.\n * Accepts a timeout in milliseconds which will be applied to\n * all tests within the feature.\n *\n * ```ts\n * import { Feature } from '@autometa/runner'\n *\n * // 10 second timeout\n * Feature('My Feature', () => {\n * Given('I have a step', () => {})\n * When('I do something', () => {})\n * Then('I expect something', () => {})\n * }, 10_000)\n * ```\n * @param testDefinition the Feature definition callback\n * @param filepath\n * @param timeout\n */\nexport function Feature(\n testDefinition: FeatureAction,\n filepath: string,\n timeout: number\n): FeatureScope;\nexport function Feature(\n ...args: (FeatureAction | string | TestTimeout)[]\n): FeatureScope {\n return FeatureDefinition(...args);\n}\n\nexport function Scenario(title: string, action: ScenarioAction): ScenarioScope;\nexport function Scenario(\n title: string,\n action: ScenarioAction,\n timeout: number\n): ScenarioScope;\nexport function Scenario(\n title: string,\n action: ScenarioAction,\n timeout: SizedTimeout\n): ScenarioScope;\nexport function Scenario(\n ...args: (string | ScenarioAction | SizedTimeout | number)[]\n): ScenarioScope {\n return ScenarioDefinition(...args);\n}\n\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction\n): ScenarioScope;\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction,\n timeout: number\n): ScenarioScope;\nexport function ScenarioOutline(\n title: string,\n action: ScenarioAction,\n timeout: SizedTimeout\n): ScenarioScope;\nexport function ScenarioOutline(\n ...args: (string | ScenarioAction | SizedTimeout | number)[]\n): ScenarioScope {\n return ScenarioOutlineDefinition(...args);\n}\n\nexport function Rule(title: string, action: RuleAction): RuleScope;\nexport function Rule(\n title: string,\n action: RuleAction,\n timeout: number\n): RuleScope;\nexport function Rule(\n title: string,\n action: RuleAction,\n timeout: SizedTimeout\n): RuleScope;\nexport function Rule(\n ...args: (string | RuleAction | SizedTimeout | number)[]\n): RuleScope {\n return RuleDefinition(...args);\n}\n/**\n * Defines a `Given` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n * the context of a scenario, but cannot be accessed from the same step in a different\n * scenario.\n *\n * ```ts\n * import { Given } from '@autometa/runner'\n *\n * Given('I have a step', (app) => {\n * app.world.someData = 'some value'\n * })\n * // using destructuring\n * Given('I have a step', ({ world }) => {\n * world.someData = 'some value'\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { Given } from '@autometa/runner'\n *\n * // matches 'Given I have a step with a 'blue' value'\n * Given('I have a step with a {string} value', (value, { world }) => {\n * world.someData = value\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const Given = GivenDefinition;\n/**\n * Defines a `When` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n *\n * ```ts\n * import { When } from '@autometa/runner'\n *\n * When('I do something', async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * When('I do something', async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { When } from '@autometa/runner'\n *\n * // matches 'When I do something with a 'blue' value'\n * When('I do something with a {string} value', async (value, { webdriver }) => {\n * await webdriver.click(`#some-button-${value}`)\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const When = WhenDefinition;\n\n/**\n * Defines a `Then` step definition. Matches a gherkin step\n * as either a string literal match, or a Cucumber Expression.\n *\n * The callback function is passed as it's last (or only) argument\n * a copy of the `App` object which also contains a reference to the World.\n * This can be used to access features, or store data across steps within a test.\n *\n * N.b. The App instance is shared between all step definitions and hooks within\n *\n * ```ts\n * import { Then } from '@autometa/runner'\n *\n * Then('I expect something', async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Then('I expect something', async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * Steps also support Cucumber Expressions, which can be used to match\n * dynamic values in the step.\n *\n * ```ts\n * import { Then } from '@autometa/runner'\n *\n * // matches 'Then I expect something with a 'blue' value'\n * Then('I expect something with a {string} value', async (value, { world }) => {\n * expect(world.someData).toBe(value)\n * })\n *\n * @param pattern The step pattern to match.\n * @param action The step action to execute.\n */\nexport const Then = ThenDefinition;\n\n/**\n * Defines a `Before` hook. Executes before each scenario.\n *\n * ```ts\n * import { Before } from '@autometa/runner'\n *\n * Before(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Before(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Before = BeforeDefinition;\n\n/**\n * Defines a `After` hook. Executes after each scenario.\n *\n * ```ts\n * import { After } from '@autometa/runner'\n *\n * After(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * After(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const After = AfterDefinition;\n\n/**\n * Defines a `Setup` hook. Executes before all scenarios.\n * Setups are scoped, meaning a Setup defined inside the scope of a rule\n * will only apply to scenarios within that rule.\n *\n * N.b the Setup Hook and Teardown Hook reference their own unique\n * copy of the App with it's own unique life cycle. Values stored here\n * will not be accessible in tests without a singleton fixture.\n *\n * ```ts\n * import { Setup } from '@autometa/runner'\n *\n * Setup(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Setup(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Teardown = TeardownDefinition;\n\n/**\n * Defines a `Teardown` hook. Executes after all scenarios have completed.\n * Teardowns are scoped, meaning a Teardown defined inside the scope of a rule\n * will only apply to scenarios within that rule.\n *\n * N.b the Setup Hook and Teardown Hook reference their own unique\n * copy of the App with it's own unique life cycle. Values stored here\n * will not be accessible in tests without a singleston fixture.\n * ```ts\n * import { Teardown } from '@autometa/runner'\n *\n * Teardown(async (app) => {\n * await app.webdriver.click('#some-button')\n * })\n *\n * // using destructuring\n * Teardown(async ({ webdriver }) => {\n * await webdriver.click('#some-button')\n * })\n * ```\n *\n * @param action The hook action to execute.\n */\nexport const Setup = SetupDefinition;\n","import {\n Config,\n TestExecutorConfig,\n defineConfig as dc,\n} from \"@autometa/config\";\n\nexport const CONFIG = new Config(new Map<string, TestExecutorConfig>());\nexport const defineConfig = dc.bind(null, CONFIG);\n","import { ParameterTypeRegistry } from \"@cucumber/cucumber-expressions\";\nimport {\n BooleanParam,\n DateParam,\n NumberParam,\n PrimitiveParam,\n OrdinalParam,\n TextParam,\n defineParameterType as dpt,\n} from \"@autometa/cucumber-expressions\";\n\nexport const PARAM_REGISTRY = new ParameterTypeRegistry();\n\n/**\n * Defines a parameter type for use in step definitions.\n *\n * ```ts\n * import { Color } from '../support/color';\n *\n * defineParameterType({\n * name: \"color\",\n * regexpPattern: /red|blue|yellow/,\n * transform: (value: string) => Color(value)\n * })\n *\n * // using regex arrays\n * defineParameterType({\n * name: \"color\",\n * regexpPattern: [/red/, /blue/, /yellow/],\n * transform: (value: string) => Color(value)\n * })\n * ```\n */\nexport const defineParameterType = dpt.bind(null, PARAM_REGISTRY);\n\ndefineParameterType(\n NumberParam,\n BooleanParam,\n PrimitiveParam,\n TextParam,\n DateParam,\n OrdinalParam\n);\n","import { PARAM_REGISTRY } from \"./parameters\";\nimport { GetCucumberFunctions, Pass } from \"@autometa/scopes\";\nimport { Coordinator } from \"@autometa/coordinator\";\nimport { CONFIG } from \"./config\";\nimport { makeTestEmitter } from \"./events\";\nimport { executor } from \"./executor\";\nimport { OPTS } from \"./app\";\nconst {\n Feature,\n Scenario,\n ScenarioOutline,\n Rule,\n Given,\n When,\n Then,\n Before,\n After,\n Teardown,\n Setup,\n Global,\n} = GetCucumberFunctions(PARAM_REGISTRY);\nconst coordinator = new Coordinator(Global, CONFIG, OPTS);\nGlobal.onFeatureExecuted = (feature, caller) => {\n const groupLogger = CONFIG.current.test?.groupLogging ?? false;\n const events = makeTestEmitter({ groupLogger });\n coordinator.run(feature, caller, events, executor);\n};\n\nexport {\n Feature,\n Scenario,\n ScenarioOutline,\n Rule,\n Given,\n When,\n Then,\n Before,\n After,\n Teardown,\n Setup,\n Pass,\n};\n","import { TestEventEmitter } from \"@autometa/events\";\nimport { CONFIG } from \"./config\";\nexport * from \"@autometa/events\";\nimport { GroupLogEvents } from \"./event-logger\";\nimport p from \"path\";\nexport function makeTestEmitter(opts: { groupLogger: boolean }) {\n const events = CONFIG.current.events;\n const emitter = new TestEventEmitter();\n if (opts.groupLogger) {\n emitter.load(new GroupLogEvents());\n }\n if (!events) {\n return emitter;\n }\n\n for (const event of events) {\n const isLocal = isRelativePath(event) || isAbsolutePath(event);\n if (isLocal) {\n const uriRoot = process.cwd();\n const uri = p.join(uriRoot, event);\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const listener = require(uri);\n if (\"default\" in listener && typeof listener.default === \"function\") {\n emitter.load(new listener.default());\n return emitter;\n }\n if (\"default\" in listener && typeof listener.default === \"object\") {\n emitter.load(listener.default);\n return emitter;\n }\n if (typeof listener === \"function\") {\n emitter.load(new listener());\n return emitter;\n }\n emitter.load(listener);\n return emitter;\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const listener = require(event);\n if (\"default\" in listener) {\n emitter.load(listener.default);\n return emitter;\n }\n emitter.load(listener);\n return emitter;\n }\n\n return emitter;\n}\n\nfunction isRelativePath(path: string) {\n return path.startsWith(\".\");\n}\n\nfunction isAbsolutePath(path: string) {\n return p.isAbsolute(path);\n}\n","import {\n EndAfterOpts,\n EndBeforeOpts,\n EndFeatureOpts,\n EndRuleOpts,\n EndScenarioOpts,\n EndScenarioOutlineOpts,\n EndSetupOpts,\n EndStepOpts,\n EndTeardownOpts,\n EventSubscriber,\n StartAfterOpts,\n StartBeforeOpts,\n StartFeatureOpts,\n StartRuleOpts,\n StartScenarioOpts,\n StartScenarioOutlineOpts,\n StartSetupOpts,\n StartStepOpts,\n StartTeardownOpts,\n} from \"@autometa/events\";\nimport colors from \"colors-cli\";\nexport class GroupLogEvents implements EventSubscriber {\n onFeatureStart({ title }: StartFeatureOpts) {\n console.group(title);\n console.group();\n }\n onFeatureEnd({ title, status }: EndFeatureOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onScenarioStart({ title }: StartScenarioOpts): void {\n console.group(title);\n console.group();\n }\n onScenarioEnd({ title, status }: EndScenarioOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onScenarioOutlineStart(opts: StartScenarioOutlineOpts): void {\n console.group(opts.title);\n console.group();\n }\n onScenarioOutlineEnd({ title, status }: EndScenarioOutlineOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onRuleStart({ title }: StartRuleOpts): void {\n console.group(title);\n console.group();\n }\n onRuleEnd({ title, status }: EndRuleOpts): void {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onStepStart({ title }: StartStepOpts) {\n console.group(title);\n console.group();\n }\n onStepEnd({ title, status }: EndStepOpts) {\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onBeforeStart({ title, status }: StartBeforeOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onBeforeEnd({ title, status }: EndBeforeOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onAfterStart({ title, status }: StartAfterOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onAfterEnd({ title, status }: EndAfterOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onTeardownStart({ title, status }: StartTeardownOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onTeardownEnd({ title, status }: EndTeardownOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n onSetupStart({ title, status }: StartSetupOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.group(title);\n console.group();\n }\n onSetupEnd({ title, status }: EndSetupOpts): void {\n if (status === \"SKIPPED\") {\n return;\n }\n console.groupEnd();\n console.log(colorStatus(status, `Ending ${title}`));\n console.groupEnd();\n }\n}\nfunction colorStatus(\n status: \"FAILED\" | \"PASSED\" | \"SKIPPED\" | \"BROKEN\" | undefined,\n text: string\n) {\n switch (status) {\n case \"FAILED\":\n return `${colors.red(\"x\")} ${text}`;\n case \"PASSED\":\n return `${colors.green(\"✔️\")} ${text}`;\n case \"SKIPPED\":\n return `${colors.yellow(\"⊘\")} ${text}`;\n default:\n return text;\n }\n}\n","import { execute } from \"@autometa/jest-executor\";\n\nexport const executor = execute;\n","import \"@autometa/types\";\nimport { AppType as at } from \"@autometa/app\";\nimport { CoordinatorOpts } from \"@autometa/coordinator\";\nexport { AutometaApp, AutometaWorld, App, World } from \"@autometa/app\";\nexport {\n Fixture,\n INJECTION_SCOPE,\n InjectionScope,\n Token,\n Container,\n Constructor,\n Inject,\n} from \"@autometa/injection\";\nexport const OPTS = {} as Record<string, CoordinatorOpts>;\n/**\n * Marks a class as being the `App` of the test framework. The `App` is the\n * entry point for the test framework. The App will be made available as the final\n * argument in the Step Definition Callbacks.\n *\n * ```ts\n *\n * @AppType(World)\n * @Constructor(MyClient)\n * class App {\n * constructor(readonly myCLient: MyClient) {}\n * }\n * ```\n * Or with tokens\n *\n * ```ts\n * import from \"@autometa/runner\";\n * import { World } from \"./default.world\";\n * @AppType(World)\n * @Constructor(HTTP, Token(\"MyClient\"))\n * class App {\n * constructor(readonly http: HTTP, readonly myClient: MyClient) {}\n * }\n * ```\n */\nexport const AppType = at.bind(null, OPTS);\nexport { getApp } from \"@autometa/app\";\n"],"mappings":"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","names":["After","Before","Feature","Given","Rule","Scenario","ScenarioOutline","Setup","Teardown","Then","When","dc","import_cucumber_expressions","dpt","colors","p","listener","import_app","at","import_scopes","Feature","Scenario","ScenarioOutline","Rule","Given","When","Then","Before","After","Teardown","Setup"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autometa/runner",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.17",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,39 +18,40 @@
|
|
|
18
18
|
"@types/uuid": "^9.0.5",
|
|
19
19
|
"@typescript-eslint/eslint-plugin": "^5.54.1",
|
|
20
20
|
"@typescript-eslint/parser": "^5.54.1",
|
|
21
|
-
"@vitest/coverage-istanbul": "^
|
|
21
|
+
"@vitest/coverage-istanbul": "^1.4.0",
|
|
22
|
+
"@vitest/coverage-v8": "^1.4.0",
|
|
22
23
|
"eslint": "^8.37.0",
|
|
23
|
-
"eslint-config-custom": "0.6.0",
|
|
24
24
|
"eslint-config-prettier": "^8.3.0",
|
|
25
25
|
"istanbul": "^0.4.5",
|
|
26
26
|
"rimraf": "^4.1.2",
|
|
27
|
-
"tsconfig": " *",
|
|
28
27
|
"tsup": "^7.2.0",
|
|
29
28
|
"typescript": "^4.9.5",
|
|
30
|
-
"vitest": "
|
|
29
|
+
"vitest": "1.4.0",
|
|
30
|
+
"eslint-config-custom": "0.6.0",
|
|
31
|
+
"tsconfig": "0.7.0"
|
|
31
32
|
},
|
|
32
33
|
"dependencies": {
|
|
34
|
+
"@cucumber/cucumber-expressions": "^16.1.2",
|
|
35
|
+
"colors-cli": "^1.0.32",
|
|
33
36
|
"@autometa/app": "^0.3.4",
|
|
34
37
|
"@autometa/asserters": "^0.1.8",
|
|
35
38
|
"@autometa/bind-decorator": "^0.5.1",
|
|
36
|
-
"@autometa/
|
|
37
|
-
"@autometa/coordinator": "^0.3.14",
|
|
38
|
-
"@autometa/cucumber-expressions": "^0.3.11",
|
|
39
|
+
"@autometa/coordinator": "^0.3.15",
|
|
39
40
|
"@autometa/datetime": "^0.1.16",
|
|
40
41
|
"@autometa/errors": "^0.2.2",
|
|
41
|
-
"@autometa/
|
|
42
|
+
"@autometa/cucumber-expressions": "^0.3.11",
|
|
42
43
|
"@autometa/file-proxies": "^0.1.0",
|
|
44
|
+
"@autometa/events": "^0.2.22",
|
|
45
|
+
"@autometa/gherkin": "^0.6.10",
|
|
43
46
|
"@autometa/fixture-proxies": "^0.1.3",
|
|
44
|
-
"@autometa/gherkin": "^0.6.9",
|
|
45
47
|
"@autometa/http": "^1.4.13",
|
|
46
48
|
"@autometa/injection": "^0.1.3",
|
|
47
|
-
"@autometa/jest-executor": "^0.4.
|
|
49
|
+
"@autometa/jest-executor": "^0.4.15",
|
|
50
|
+
"@autometa/scopes": "^0.5.12",
|
|
51
|
+
"@autometa/config": "^0.1.23",
|
|
52
|
+
"@autometa/test-builder": "^0.2.13",
|
|
48
53
|
"@autometa/phrases": "^0.1.12",
|
|
49
|
-
"@autometa/
|
|
50
|
-
"@autometa/test-builder": "^0.2.12",
|
|
51
|
-
"@autometa/types": "^0.4.1",
|
|
52
|
-
"@cucumber/cucumber-expressions": "^16.1.2",
|
|
53
|
-
"colors-cli": "^1.0.32"
|
|
54
|
+
"@autometa/types": "^0.4.1"
|
|
54
55
|
},
|
|
55
56
|
"scripts": {
|
|
56
57
|
"test": "vitest run --passWithNoTests",
|
|
@@ -60,6 +61,5 @@
|
|
|
60
61
|
"clean": "rimraf dist",
|
|
61
62
|
"build": "tsup",
|
|
62
63
|
"build:watch": "tsup --watch"
|
|
63
|
-
}
|
|
64
|
-
"readme": "# Autometa\n\n[Full Docs](https://bendat.github.io/autometa/docs/cucumber/test_runner/intro/)\n\n# NOTICE\n\nAutometa is under construction. It is currently unstable, poorly documented and not production ready for most cases.\n\nCheck back soon.\n\nThe following libraries may be considered relatively stable, but may contain bugs or unclear errors\n\n- [Overloaded](libraries/overloaded/) - Function and method overloads that are as pleasant to make as they are to use\n- [Bind Decorator](libraries/bind-decorator/) - Binds the `this` keyword on a class method. Respectfully a fork of [bind-decorator](https://www.npmjs.com/package/autobind-decorator)\n- [Status Codes](libraries/status-codes/) - Object containing HTTP status\ncodes and status messages, visible in the editor via `as const`\n\n# Autometa\n\n_Autometa_ is an early-development automation framework toolkit, which provides libraries to help automate the automation process on node with libraries to\nhelp bootstrap your node automation framework, for API or E2E testing.\n\n[Full Docs](https://bendat.github.io/autometa/docs/cucumber/test_runner/intro/)\n\n\n## Cucumber Runner\n\nThe Cucumber Runner lets you build and execute Cucumber style tests with alternative test runners. Currently supported are `jest` and `vitest`. Mocha\nlikely works but has not been tested.\n\nInitially inspired by [jest-cucumber](github.com/bencompton/jest-cucumber) provides a customizable hybrid approach between cucumbers flat global steps\nand jest-cucumbers nested spec-like tests.\n\nDependency injection is supported to make initializing client classes needed to interface with your service or website simple and logic-free, with unique copies\nprovided to each executing tests.\n\n```ts title='Cucumber like'\nimport { Feature, Given, When, Then, Before } from \"@autometa/cucumber-runner\";\nimport { App } from \"./my-app\";\nimport * as seedData from \"./seed-data\";\n\nBefore(\"Seed the database\", async ({ dbClient }: App) => {\n await dbClient.seed(seedData);\n});\nGiven(\"a user who wants to log in\", () => {});\nWhen(\"a user submits their credentials\", () => {});\nThen(\"a user sees their\", () => {});\n\n// tests assembled automatically\nFeature(\"./my-feature.feature\");\n```\n\nSteps can also be nested or groups to override higher level\nsteps.\n\n```ts title='Jest-Cucumber like'\nimport {\n Feature,\n Given,\n When,\n Then,\n Before,\n ScenarioOutline,\n Scenario,\n Rule,\n} from \"@autometa/cucumber-runner\";\nimport { App } from \"./my-app\";\nimport * as seedData from \"./seed-data\";\n\nBefore(\"Seed the database\", async ({ dbClient }: App) => {\n await dbClient.seed(seedData);\n});\nGiven(\"a user who wants to log in\", () => {});\nWhen(\"a user submits their credentials\", () => {});\n\nFeature(() => {\n Scenario(\"a user logs in successfully\", () => {\n Then(\"a user sees their profile\", () => {});\n });\n\n Scenario(\"a user cannot log in without a password\", () => {\n Then(\n \"a user is informed they cannot log in\",\n (expectedError: string) => {}\n );\n });\n Rule(\"a rule\", () => {\n ScenarioOutline(\"some outline\", () => {\n // define steps unique to `some outline`\n });\n });\n}, \"./my-feature.feature\");\n```\n\n## Dto Builder\n\nImplementation of the Builder pattern that allows automatically generating\nbuilder classes from a DTO class prototype, with type-safe builder methods in\nplace of DTO properties.\n\n```ts\nimport { dto, Builder } from '@autometa/dto-builder'\nexport class UserDto {\n id: number\n username: string,\n // default values, factories, dtos\n @DTO.dto(AddressDto)\n address: AddressDto\n @DTO.date()\n createdAt: Date\n}\n// or \n// avoid duplicating interface properties\nexport class UserDto extends DTO<IUser> {}\n\nconst UserDtoBuilder = Builder(UserDto);\n\nconst user = new UserDtoBuilder().id(1).name('bob').build()\n\n// compilation error, 'first argument of \"id\" must be a number\"\n new UserDtoBuilder().id('1').name('bob').build()\n // force it to pass a string\n new UserDtoBuilder().id('1' as unknown as number).name('bob').build()\n```\n"
|
|
64
|
+
}
|
|
65
65
|
}
|
package/tsup.config.ts
CHANGED
|
@@ -4,7 +4,7 @@ export default defineConfig({
|
|
|
4
4
|
clean: true, // clean up the dist folder
|
|
5
5
|
format: ["cjs", "esm"], // generate cjs and esm files
|
|
6
6
|
dts: true,
|
|
7
|
-
sourcemap:true, // generate sourcemaps
|
|
7
|
+
sourcemap: true, // generate sourcemaps
|
|
8
8
|
skipNodeModulesBundle: true,
|
|
9
9
|
entryPoints: ["src/index.ts"],
|
|
10
10
|
target: "es2020",
|