@cucumber/query 9.0.1 → 9.0.2

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.
@@ -0,0 +1,47 @@
1
+ import { messages } from '@cucumber/messages';
2
+ export default class Query {
3
+ private readonly testStepResultByPickleId;
4
+ private readonly testStepResultsByPickleStepId;
5
+ private readonly testStepById;
6
+ private readonly testCaseByPickleId;
7
+ private readonly pickleIdByTestStepId;
8
+ private readonly pickleStepIdByTestStepId;
9
+ private readonly testStepResultsbyTestStepId;
10
+ private readonly testStepIdsByPickleStepId;
11
+ private readonly hooksById;
12
+ private readonly attachmentsByTestStepId;
13
+ private readonly stepMatchArgumentsListsByPickleStepId;
14
+ update(envelope: messages.IEnvelope): void;
15
+ /**
16
+ * Gets all the results for multiple pickle steps
17
+ * @param pickleStepIds
18
+ */
19
+ getPickleStepTestStepResults(pickleStepIds: ReadonlyArray<string>): ReadonlyArray<messages.TestStepFinished.ITestStepResult>;
20
+ /**
21
+ * Gets all the results for multiple pickles
22
+ * @param pickleIds
23
+ */
24
+ getPickleTestStepResults(pickleIds: ReadonlyArray<string>): ReadonlyArray<messages.TestStepFinished.ITestStepResult>;
25
+ /**
26
+ * Gets the worst result
27
+ * @param testStepResults
28
+ */
29
+ getWorstTestStepResult(testStepResults: ReadonlyArray<messages.TestStepFinished.ITestStepResult>): messages.TestStepFinished.ITestStepResult;
30
+ /**
31
+ * Gets all the attachments for multiple pickle steps
32
+ * @param pickleStepIds
33
+ */
34
+ getPickleStepAttachments(pickleStepIds: ReadonlyArray<string>): ReadonlyArray<messages.IAttachment>;
35
+ getTestStepsAttachments(testStepIds: ReadonlyArray<string>): ReadonlyArray<messages.IAttachment>;
36
+ /**
37
+ * Get StepMatchArguments for a pickle step
38
+ * @param pickleStepId
39
+ */
40
+ getStepMatchArgumentsLists(pickleStepId: string): ReadonlyArray<messages.TestCase.TestStep.IStepMatchArgumentsList> | undefined;
41
+ getHook(hookId: string): messages.IHook;
42
+ getBeforeHookSteps(pickleId: string): ReadonlyArray<messages.TestCase.ITestStep>;
43
+ getAfterHookSteps(pickleId: string): ReadonlyArray<messages.TestCase.ITestStep>;
44
+ private identifyHookSteps;
45
+ getTestStepResults(testStepId: string): messages.TestStepFinished.ITestStepResult[];
46
+ }
47
+ //# sourceMappingURL=Query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/Query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,oBAAoB,CAAA;AAG7D,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAGtC;IACH,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAG3C;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiD;IAC9E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwC;IAC3E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA4B;IACjE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA4B;IACrE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAGzC;IACH,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAsC;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAoD;IAE5F,OAAO,CAAC,QAAQ,CAAC,qCAAqC,CAGnD;IAEI,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS;IAoC1C;;;OAGG;IACI,4BAA4B,CACjC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GACnC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC;IAiB3D;;;OAGG;IACI,wBAAwB,CAC7B,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,GAC/B,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC;IAiB3D;;;OAGG;IACI,sBAAsB,CAC3B,eAAe,EAAE,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,GACxE,QAAQ,CAAC,gBAAgB,CAAC,eAAe;IAU5C;;;OAGG;IACI,wBAAwB,CAC7B,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GACnC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC;IAQ/B,uBAAuB,CAC5B,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,GACjC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC;IAMtC;;;OAGG;IACI,0BAA0B,CAC/B,YAAY,EAAE,MAAM,GACnB,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,SAAS;IAIzE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK;IAIvC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;IAWhF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;IAWtF,OAAO,CAAC,iBAAiB;IAsBlB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE;CAG3F"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const messages_1 = require("@cucumber/messages");
4
+ const multimaps_1 = require("@teppeis/multimaps");
5
+ class Query {
6
+ constructor() {
7
+ this.testStepResultByPickleId = new multimaps_1.ArrayMultimap();
8
+ this.testStepResultsByPickleStepId = new multimaps_1.ArrayMultimap();
9
+ this.testStepById = new Map();
10
+ this.testCaseByPickleId = new Map();
11
+ this.pickleIdByTestStepId = new Map();
12
+ this.pickleStepIdByTestStepId = new Map();
13
+ this.testStepResultsbyTestStepId = new multimaps_1.ArrayMultimap();
14
+ this.testStepIdsByPickleStepId = new multimaps_1.ArrayMultimap();
15
+ this.hooksById = new Map();
16
+ this.attachmentsByTestStepId = new multimaps_1.ArrayMultimap();
17
+ this.stepMatchArgumentsListsByPickleStepId = new Map();
18
+ }
19
+ update(envelope) {
20
+ if (envelope.testCase) {
21
+ this.testCaseByPickleId.set(envelope.testCase.pickleId, envelope.testCase);
22
+ for (const testStep of envelope.testCase.testSteps) {
23
+ this.testStepById.set(testStep.id, testStep);
24
+ this.pickleIdByTestStepId.set(testStep.id, envelope.testCase.pickleId);
25
+ this.pickleStepIdByTestStepId.set(testStep.id, testStep.pickleStepId);
26
+ this.testStepIdsByPickleStepId.put(testStep.pickleStepId, testStep.id);
27
+ this.stepMatchArgumentsListsByPickleStepId.set(testStep.pickleStepId, testStep.stepMatchArgumentsLists);
28
+ }
29
+ }
30
+ if (envelope.testStepFinished) {
31
+ const pickleId = this.pickleIdByTestStepId.get(envelope.testStepFinished.testStepId);
32
+ this.testStepResultByPickleId.put(pickleId, envelope.testStepFinished.testStepResult);
33
+ const testStep = this.testStepById.get(envelope.testStepFinished.testStepId);
34
+ this.testStepResultsByPickleStepId.put(testStep.pickleStepId, envelope.testStepFinished.testStepResult);
35
+ this.testStepResultsbyTestStepId.put(testStep.id, envelope.testStepFinished.testStepResult);
36
+ }
37
+ if (envelope.hook) {
38
+ this.hooksById.set(envelope.hook.id, envelope.hook);
39
+ }
40
+ if (envelope.attachment) {
41
+ this.attachmentsByTestStepId.put(envelope.attachment.testStepId, envelope.attachment);
42
+ }
43
+ }
44
+ /**
45
+ * Gets all the results for multiple pickle steps
46
+ * @param pickleStepIds
47
+ */
48
+ getPickleStepTestStepResults(pickleStepIds) {
49
+ if (pickleStepIds.length === 0) {
50
+ return [
51
+ new messages_1.messages.TestStepFinished.TestStepResult({
52
+ status: messages_1.messages.TestStepFinished.TestStepResult.Status.UNKNOWN,
53
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
54
+ }),
55
+ ];
56
+ }
57
+ return pickleStepIds.reduce((testStepResults, pickleId) => {
58
+ return testStepResults.concat(this.testStepResultsByPickleStepId.get(pickleId));
59
+ }, []);
60
+ }
61
+ /**
62
+ * Gets all the results for multiple pickles
63
+ * @param pickleIds
64
+ */
65
+ getPickleTestStepResults(pickleIds) {
66
+ if (pickleIds.length === 0) {
67
+ return [
68
+ new messages_1.messages.TestStepFinished.TestStepResult({
69
+ status: messages_1.messages.TestStepFinished.TestStepResult.Status.UNKNOWN,
70
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
71
+ }),
72
+ ];
73
+ }
74
+ return pickleIds.reduce((testStepResults, pickleId) => {
75
+ return testStepResults.concat(this.testStepResultByPickleId.get(pickleId));
76
+ }, []);
77
+ }
78
+ /**
79
+ * Gets the worst result
80
+ * @param testStepResults
81
+ */
82
+ getWorstTestStepResult(testStepResults) {
83
+ return (testStepResults.slice().sort((r1, r2) => r2.status - r1.status)[0] ||
84
+ new messages_1.messages.TestStepFinished.TestStepResult({
85
+ status: messages_1.messages.TestStepFinished.TestStepResult.Status.UNKNOWN,
86
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
87
+ }));
88
+ }
89
+ /**
90
+ * Gets all the attachments for multiple pickle steps
91
+ * @param pickleStepIds
92
+ */
93
+ getPickleStepAttachments(pickleStepIds) {
94
+ return this.getTestStepsAttachments(pickleStepIds.reduce((testStepIds, pickleStepId) => {
95
+ return testStepIds.concat(this.testStepIdsByPickleStepId.get(pickleStepId));
96
+ }, []));
97
+ }
98
+ getTestStepsAttachments(testStepIds) {
99
+ return testStepIds.reduce((attachments, testStepId) => {
100
+ return attachments.concat(this.attachmentsByTestStepId.get(testStepId));
101
+ }, []);
102
+ }
103
+ /**
104
+ * Get StepMatchArguments for a pickle step
105
+ * @param pickleStepId
106
+ */
107
+ getStepMatchArgumentsLists(pickleStepId) {
108
+ return this.stepMatchArgumentsListsByPickleStepId.get(pickleStepId);
109
+ }
110
+ getHook(hookId) {
111
+ return this.hooksById.get(hookId);
112
+ }
113
+ getBeforeHookSteps(pickleId) {
114
+ const hookSteps = [];
115
+ this.identifyHookSteps(pickleId, (hook) => hookSteps.push(hook), () => null);
116
+ return hookSteps;
117
+ }
118
+ getAfterHookSteps(pickleId) {
119
+ const hookSteps = [];
120
+ this.identifyHookSteps(pickleId, () => null, (hook) => hookSteps.push(hook));
121
+ return hookSteps;
122
+ }
123
+ identifyHookSteps(pickleId, onBeforeHookFound, onAfterHookFound) {
124
+ const testCase = this.testCaseByPickleId.get(pickleId);
125
+ if (!testCase) {
126
+ return;
127
+ }
128
+ let pickleStepFound = false;
129
+ for (const step of testCase.testSteps) {
130
+ if (step.hookId) {
131
+ pickleStepFound ? onAfterHookFound(step) : onBeforeHookFound(step);
132
+ }
133
+ else {
134
+ pickleStepFound = true;
135
+ }
136
+ }
137
+ }
138
+ getTestStepResults(testStepId) {
139
+ return this.testStepResultsbyTestStepId.get(testStepId);
140
+ }
141
+ }
142
+ exports.default = Query;
143
+ //# sourceMappingURL=Query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Query.js","sourceRoot":"","sources":["../../src/Query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import Query from './Query';
2
+ export { Query };
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAClB,gBADF,eAAK,CACE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=QueryTest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryTest.d.ts","sourceRoot":"","sources":["../../test/QueryTest.ts"],"names":[],"mappings":""}
@@ -0,0 +1,395 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const gherkin_streams_1 = require("@cucumber/gherkin-streams");
16
+ const gherkin_utils_1 = require("@cucumber/gherkin-utils");
17
+ const messages_1 = require("@cucumber/messages");
18
+ const stream_1 = require("stream");
19
+ const assert_1 = __importDefault(require("assert"));
20
+ const fake_cucumber_1 = require("@cucumber/fake-cucumber");
21
+ const util_1 = require("util");
22
+ const Query_1 = __importDefault(require("../src/Query"));
23
+ const pipelinePromise = util_1.promisify(stream_1.pipeline);
24
+ describe('Query', () => {
25
+ let gherkinQuery;
26
+ let cucumberQuery;
27
+ beforeEach(() => {
28
+ gherkinQuery = new gherkin_utils_1.Query();
29
+ cucumberQuery = new Query_1.default();
30
+ });
31
+ describe('#getWorstTestStepResult(testStepResults)', () => {
32
+ it('returns a FAILED result for PASSED,FAILED,PASSED', () => {
33
+ const result = cucumberQuery.getWorstTestStepResult([
34
+ new messages_1.messages.TestStepFinished.TestStepResult({
35
+ status: messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
36
+ }),
37
+ new messages_1.messages.TestStepFinished.TestStepResult({
38
+ status: messages_1.messages.TestStepFinished.TestStepResult.Status.FAILED,
39
+ }),
40
+ new messages_1.messages.TestStepFinished.TestStepResult({
41
+ status: messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
42
+ }),
43
+ ]);
44
+ assert_1.default.strictEqual(result.status, messages_1.messages.TestStepFinished.TestStepResult.Status.FAILED);
45
+ });
46
+ });
47
+ describe('#getPickleStepTestStepResults(pickleStepIds)', () => {
48
+ it('returns a single UNKNOWN when the list is empty', () => {
49
+ const results = cucumberQuery.getPickleTestStepResults([]);
50
+ assert_1.default.deepStrictEqual(results.map((r) => r.status), [messages_1.messages.TestStepFinished.TestStepResult.Status.UNKNOWN]);
51
+ });
52
+ it('looks up results for scenario steps', () => __awaiter(void 0, void 0, void 0, function* () {
53
+ const envelopes = [];
54
+ yield execute(`Feature: hello
55
+ Scenario: ok
56
+ Given a passed step
57
+ `, (envelope) => envelopes.push(envelope));
58
+ const scenario = findScenario(envelopes);
59
+ const pickleStepIds = gherkinQuery.getPickleStepIds(scenario.steps[0].id);
60
+ assert_1.default.strictEqual(pickleStepIds.length, 1);
61
+ const testStepResults = cucumberQuery.getPickleStepTestStepResults(pickleStepIds);
62
+ assert_1.default.strictEqual(testStepResults.length, 1);
63
+ assert_1.default.strictEqual(testStepResults[0].status, messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED);
64
+ }));
65
+ it('looks up results for background steps', () => __awaiter(void 0, void 0, void 0, function* () {
66
+ const envelopes = [];
67
+ yield execute(`Feature: hello
68
+ Background:
69
+ Given a passed step
70
+
71
+ Scenario: ok
72
+ Given a passed step
73
+
74
+ Scenario: ko
75
+ Given a failed step
76
+ `, (envelope) => envelopes.push(envelope));
77
+ const background = findBackground(envelopes);
78
+ const pickleStepIds = gherkinQuery.getPickleStepIds(background.steps[0].id);
79
+ assert_1.default.strictEqual(pickleStepIds.length, 2);
80
+ const testStepResults = cucumberQuery.getPickleStepTestStepResults(pickleStepIds);
81
+ assert_1.default.deepStrictEqual(testStepResults.map((r) => r.status), [
82
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
83
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
84
+ ]);
85
+ }));
86
+ it('looks up results for background steps when scenarios are empty', () => __awaiter(void 0, void 0, void 0, function* () {
87
+ const envelopes = [];
88
+ yield execute(`Feature: hello
89
+ Background:
90
+ Given a passed step
91
+
92
+ Scenario: ok
93
+
94
+ Scenario: ok too
95
+ `, (envelope) => envelopes.push(envelope));
96
+ const background = findBackground(envelopes);
97
+ const pickleStepIds = gherkinQuery.getPickleStepIds(background.steps[0].id);
98
+ assert_1.default.strictEqual(pickleStepIds.length, 0);
99
+ const testStepResults = cucumberQuery.getPickleStepTestStepResults(pickleStepIds);
100
+ assert_1.default.strictEqual(testStepResults.length, 1);
101
+ assert_1.default.strictEqual(testStepResults[0].status, messages_1.messages.TestStepFinished.TestStepResult.Status.UNKNOWN);
102
+ }));
103
+ });
104
+ describe('#getPickleTestStepResults(pickleIds)', () => {
105
+ it('looks up results for scenarios', () => __awaiter(void 0, void 0, void 0, function* () {
106
+ const envelopes = [];
107
+ yield execute(`Feature: hello
108
+ Scenario: ko
109
+ Given a passed step
110
+ Given a failed step
111
+ `, (envelope) => envelopes.push(envelope));
112
+ const scenario = findScenario(envelopes);
113
+ const pickleIds = gherkinQuery.getPickleIds('test.feature', scenario.id);
114
+ assert_1.default.strictEqual(pickleIds.length, 1);
115
+ const testStepResults = cucumberQuery.getPickleTestStepResults(pickleIds);
116
+ assert_1.default.deepStrictEqual(testStepResults.map((r) => r.status), [
117
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
118
+ messages_1.messages.TestStepFinished.TestStepResult.Status.FAILED,
119
+ ]);
120
+ }));
121
+ it('looks up results for scenario outlines', () => __awaiter(void 0, void 0, void 0, function* () {
122
+ const envelopes = [];
123
+ yield execute(`Feature: hello
124
+ Scenario: hi <status1> and <status2>
125
+ Given a <status1> step
126
+ And a <status2> step
127
+
128
+ Examples:
129
+ | status1 | status2 |
130
+ | passed | passed |
131
+ | passed | failed |
132
+ `, (envelope) => envelopes.push(envelope));
133
+ const scenario = findScenario(envelopes);
134
+ const pickleIds = gherkinQuery.getPickleIds('test.feature', scenario.id);
135
+ assert_1.default.strictEqual(pickleIds.length, 2);
136
+ assert_1.default.deepStrictEqual(cucumberQuery.getPickleTestStepResults(pickleIds).map((r) => r.status), [
137
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
138
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
139
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
140
+ messages_1.messages.TestStepFinished.TestStepResult.Status.FAILED,
141
+ ]);
142
+ }));
143
+ it('looks up results for examples rows outlines', () => __awaiter(void 0, void 0, void 0, function* () {
144
+ const envelopes = [];
145
+ yield execute(`Feature: hello
146
+ Scenario: hi <status1> and <status2>
147
+ Given a <status1> step
148
+ And a <status2> step
149
+
150
+ Examples:
151
+ | status1 | status2 |
152
+ | passed | passed |
153
+ | passed | failed |
154
+ `, (envelope) => envelopes.push(envelope));
155
+ const scenario = findScenario(envelopes);
156
+ const exampleIds = scenario.examples[0].tableBody.map((row) => row.id);
157
+ assert_1.default.deepStrictEqual(cucumberQuery
158
+ .getPickleTestStepResults(gherkinQuery.getPickleIds('test.feature', exampleIds[0]))
159
+ .map((r) => r.status), [
160
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
161
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
162
+ ]);
163
+ assert_1.default.deepStrictEqual(cucumberQuery
164
+ .getPickleTestStepResults(gherkinQuery.getPickleIds('test.feature', exampleIds[1]))
165
+ .map((r) => r.status), [
166
+ messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED,
167
+ messages_1.messages.TestStepFinished.TestStepResult.Status.FAILED,
168
+ ]);
169
+ }));
170
+ });
171
+ describe('#getPickleStepAttachments(pickleIds)', () => {
172
+ it('looks up attachments', () => __awaiter(void 0, void 0, void 0, function* () {
173
+ const envelopes = [];
174
+ yield execute(`Feature: hello
175
+ Scenario: ok
176
+ Given a passed step with attachment
177
+ `, (envelope) => envelopes.push(envelope));
178
+ const scenario = findScenario(envelopes);
179
+ const pickleStepIds = gherkinQuery.getPickleStepIds(scenario.steps[0].id);
180
+ assert_1.default.strictEqual(pickleStepIds.length, 1);
181
+ const attachments = cucumberQuery.getPickleStepAttachments(pickleStepIds);
182
+ assert_1.default.strictEqual(attachments.length, 1);
183
+ assert_1.default.strictEqual(attachments[0].body, 'Hello');
184
+ }));
185
+ });
186
+ describe('#getStepMatchArguments(uri, lineNumber)', () => {
187
+ it("looks up result for step's uri and line", () => __awaiter(void 0, void 0, void 0, function* () {
188
+ const envelopes = [];
189
+ yield execute(`Feature: hello
190
+ Scenario: ok
191
+ Given a passed step
192
+ And I have 567 cukes in my belly
193
+ `, (envelope) => envelopes.push(envelope));
194
+ const scenario = findScenario(envelopes);
195
+ assert_1.default.deepStrictEqual(cucumberQuery
196
+ .getStepMatchArgumentsLists(gherkinQuery.getPickleStepIds(scenario.steps[0].id)[0])
197
+ .map((sal) => sal.stepMatchArguments.map((arg) => arg.parameterTypeName)), [[]]);
198
+ assert_1.default.deepStrictEqual(cucumberQuery
199
+ .getStepMatchArgumentsLists(gherkinQuery.getPickleStepIds(scenario.steps[1].id)[0])
200
+ .map((sal) => sal.stepMatchArguments.map((arg) => arg.parameterTypeName)), [['int', 'word']]);
201
+ }));
202
+ describe('#getBeforeHookSteps(pickleId: string)', () => {
203
+ it('returns an empty list when there is no hooks', () => __awaiter(void 0, void 0, void 0, function* () {
204
+ const envelopes = [];
205
+ yield execute(`Feature: hello
206
+ Scenario: hi
207
+ Given a passed step
208
+ `, (envelope) => envelopes.push(envelope));
209
+ const scenarioId = findScenario(envelopes).id;
210
+ const pickleId = gherkinQuery.getPickleIds('test.feature', scenarioId)[0];
211
+ assert_1.default.deepStrictEqual(cucumberQuery.getBeforeHookSteps(pickleId), []);
212
+ }));
213
+ it('returns one before hook step', () => __awaiter(void 0, void 0, void 0, function* () {
214
+ const envelopes = [];
215
+ yield execute(`Feature: hello
216
+ @beforeHook
217
+ Scenario: hi
218
+ Given a passed step
219
+ `, (envelope) => envelopes.push(envelope));
220
+ const scenarioId = findScenario(envelopes).id;
221
+ const pickleId = gherkinQuery.getPickleIds('test.feature', scenarioId)[0];
222
+ assert_1.default.strictEqual(cucumberQuery.getBeforeHookSteps(pickleId).length, 1);
223
+ }));
224
+ it('does not return after hook steps', () => __awaiter(void 0, void 0, void 0, function* () {
225
+ const envelopes = [];
226
+ yield execute(`Feature: hello
227
+ @afterHook
228
+ Scenario: hi
229
+ Given a passed step
230
+ `, (envelope) => envelopes.push(envelope));
231
+ const scenarioId = findScenario(envelopes).id;
232
+ const pickleId = gherkinQuery.getPickleIds('test.feature', scenarioId)[0];
233
+ assert_1.default.deepStrictEqual(cucumberQuery.getBeforeHookSteps(pickleId), []);
234
+ }));
235
+ });
236
+ describe('#getAfterHookSteps(pickleId: string)', () => {
237
+ it('returns an empty list when there is no hooks', () => __awaiter(void 0, void 0, void 0, function* () {
238
+ const envelopes = [];
239
+ yield execute(`Feature: hello
240
+ Scenario: hi
241
+ Given a passed step
242
+ `, (envelope) => envelopes.push(envelope));
243
+ const scenarioId = findScenario(envelopes).id;
244
+ const pickleId = gherkinQuery.getPickleIds('test.feature', scenarioId)[0];
245
+ assert_1.default.deepStrictEqual(cucumberQuery.getAfterHookSteps(pickleId), []);
246
+ }));
247
+ it('returns one after hook step', () => __awaiter(void 0, void 0, void 0, function* () {
248
+ const envelopes = [];
249
+ yield execute(`Feature: hello
250
+ @afterHook
251
+ Scenario: hi
252
+ Given a passed step
253
+ `, (envelope) => envelopes.push(envelope));
254
+ const scenarioId = findScenario(envelopes).id;
255
+ const pickleId = gherkinQuery.getPickleIds('test.feature', scenarioId)[0];
256
+ assert_1.default.strictEqual(cucumberQuery.getAfterHookSteps(pickleId).length, 1);
257
+ }));
258
+ it('does not return before hook steps', () => __awaiter(void 0, void 0, void 0, function* () {
259
+ const envelopes = [];
260
+ yield execute(`Feature: hello
261
+ @beforeHook
262
+ Scenario: hi
263
+ Given a passed step
264
+ `, (envelope) => envelopes.push(envelope));
265
+ const scenarioId = findScenario(envelopes).id;
266
+ const pickleId = gherkinQuery.getPickleIds('test.feature', scenarioId)[0];
267
+ assert_1.default.deepStrictEqual(cucumberQuery.getAfterHookSteps(pickleId), []);
268
+ }));
269
+ });
270
+ describe('#getTestStepResult', () => {
271
+ it('returns one test step result', () => __awaiter(void 0, void 0, void 0, function* () {
272
+ const emittedMessages = [];
273
+ yield execute(`Feature: hello
274
+ Scenario: hi
275
+ Given a passed step
276
+ `, (message) => emittedMessages.push(message));
277
+ const testCase = emittedMessages.find((child) => child.testCase).testCase;
278
+ const testStep = testCase.testSteps[0];
279
+ const results = cucumberQuery.getTestStepResults(testStep.id);
280
+ assert_1.default.deepStrictEqual(results.length, 1);
281
+ assert_1.default.deepStrictEqual(results[0].status, messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED);
282
+ }));
283
+ it('returns a result for hook step', () => __awaiter(void 0, void 0, void 0, function* () {
284
+ const emittedMessages = [];
285
+ yield execute(`Feature: hello
286
+ @beforeHook
287
+ Scenario: hi
288
+ Given a passed step
289
+ `, (message) => emittedMessages.push(message));
290
+ const testCase = emittedMessages.find((child) => child.testCase).testCase;
291
+ const testStep = testCase.testSteps[0];
292
+ const results = cucumberQuery.getTestStepResults(testStep.id);
293
+ assert_1.default.deepStrictEqual(results.length, 1);
294
+ assert_1.default.deepStrictEqual(results[0].status, messages_1.messages.TestStepFinished.TestStepResult.Status.PASSED);
295
+ }));
296
+ });
297
+ describe('#getHook(HookId)', () => {
298
+ it('returns undefined if the id does not match any hook', () => {
299
+ assert_1.default.strictEqual(cucumberQuery.getHook('tralala'), undefined);
300
+ });
301
+ it('returns the matching hook', () => {
302
+ const hook = messages_1.messages.Hook.create({
303
+ id: 'tralala',
304
+ });
305
+ const envelope = messages_1.messages.Envelope.create({
306
+ hook,
307
+ });
308
+ cucumberQuery.update(envelope);
309
+ assert_1.default.deepStrictEqual(cucumberQuery.getHook('tralala'), hook);
310
+ });
311
+ });
312
+ describe('#getAttachmentByTestStepId', () => {
313
+ it('looks up attachments', () => __awaiter(void 0, void 0, void 0, function* () {
314
+ const testCases = [];
315
+ yield execute(`Feature: hello
316
+ Scenario: ok
317
+ Given a passed step with attachment
318
+ `, (envelope) => {
319
+ if (envelope.testCase) {
320
+ testCases.push(envelope.testCase);
321
+ }
322
+ });
323
+ const attachments = cucumberQuery.getTestStepsAttachments([testCases[0].testSteps[0].id]);
324
+ assert_1.default.strictEqual(attachments.length, 1);
325
+ assert_1.default.strictEqual(attachments[0].body, 'Hello');
326
+ }));
327
+ });
328
+ });
329
+ function execute(gherkinSource, messagesHandler = () => null) {
330
+ return __awaiter(this, void 0, void 0, function* () {
331
+ const newId = messages_1.IdGenerator.incrementing();
332
+ const clock = new fake_cucumber_1.IncrementClock();
333
+ const stopwatch = new fake_cucumber_1.IncrementStopwatch();
334
+ const makeErrorMessage = fake_cucumber_1.withFullStackTrace();
335
+ const supportCode = new fake_cucumber_1.SupportCode(newId, clock, stopwatch, makeErrorMessage);
336
+ supportCode.defineBeforeHook(null, '@beforeHook', () => {
337
+ // no-op
338
+ });
339
+ supportCode.defineAfterHook(null, '@afterHook', () => {
340
+ // no-op
341
+ });
342
+ supportCode.defineStepDefinition(null, 'a passed step', () => {
343
+ // no-op
344
+ });
345
+ supportCode.defineStepDefinition(null, 'a passed step with attachment', function () {
346
+ this.attach('Hello', 'text/plain');
347
+ });
348
+ supportCode.defineStepDefinition(null, 'a failed step', () => {
349
+ throw new Error(`This step failed.`);
350
+ });
351
+ supportCode.defineStepDefinition(null, 'I have {int} cukes in my {word}', (cukes) => {
352
+ assert_1.default.ok(cukes);
353
+ });
354
+ const queryUpdateStream = new stream_1.Writable({
355
+ objectMode: true,
356
+ write(envelope, encoding, callback) {
357
+ try {
358
+ messagesHandler(envelope);
359
+ gherkinQuery.update(envelope);
360
+ cucumberQuery.update(envelope);
361
+ callback();
362
+ }
363
+ catch (err) {
364
+ callback(err);
365
+ }
366
+ },
367
+ });
368
+ yield pipelinePromise(gherkinMessages(gherkinSource, 'test.feature', newId), queryUpdateStream);
369
+ const testPlan = fake_cucumber_1.makeTestPlan(gherkinQuery, supportCode, fake_cucumber_1.makeTestCase);
370
+ yield testPlan.execute((envelope) => {
371
+ messagesHandler(envelope);
372
+ cucumberQuery.update(envelope);
373
+ });
374
+ });
375
+ }
376
+ function gherkinMessages(gherkinSource, uri, newId) {
377
+ const source = messages_1.messages.Envelope.fromObject({
378
+ source: {
379
+ uri,
380
+ data: gherkinSource,
381
+ mediaType: 'text/x.cucumber.gherkin+plain',
382
+ },
383
+ });
384
+ return gherkin_streams_1.GherkinStreams.fromSources([source], { newId });
385
+ }
386
+ function findScenario(envelopes) {
387
+ const gherkinDocument = envelopes.find((envelope) => envelope.gherkinDocument).gherkinDocument;
388
+ return gherkinDocument.feature.children.find((child) => child.scenario).scenario;
389
+ }
390
+ function findBackground(envelopes) {
391
+ const gherkinDocument = envelopes.find((envelope) => envelope.gherkinDocument).gherkinDocument;
392
+ return gherkinDocument.feature.children.find((child) => child.background).background;
393
+ }
394
+ });
395
+ //# sourceMappingURL=QueryTest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryTest.js","sourceRoot":"","sources":["../../test/QueryTest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,+DAA0D;AAC1D,2DAA+D;AAC/D,iDAA0D;AAC1D,mCAAqD;AACrD,oDAA2B;AAC3B,2DAOgC;AAEhC,+BAAgC;AAChC,yDAAgC;AAEhC,MAAM,eAAe,GAAG,gBAAS,CAAC,iBAAQ,CAAC,CAAA;AAE3C,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,IAAI,YAA0B,CAAA;IAC9B,IAAI,aAAoB,CAAA;IACxB,UAAU,CAAC,GAAG,EAAE;QACd,YAAY,GAAG,IAAI,qBAAY,EAAE,CAAA;QACjC,aAAa,GAAG,IAAI,eAAK,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,sBAAsB,CAAC;gBAClD,IAAI,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC;oBAC3C,MAAM,EAAE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;iBAC/D,CAAC;gBACF,IAAI,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC;oBAC3C,MAAM,EAAE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;iBAC/D,CAAC;gBACF,IAAI,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC;oBAC3C,MAAM,EAAE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;iBAC/D,CAAC;aACH,CAAC,CAAA;YACF,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3F,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;QAC5D,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,OAAO,GAAG,aAAa,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAA;YAC1D,gBAAM,CAAC,eAAe,CACpB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAC5B,CAAC,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAC1D,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qCAAqC,EAAE,GAAS,EAAE;YACnD,MAAM,SAAS,GAAyB,EAAE,CAAA;YAE1C,MAAM,OAAO,CACX;;;CAGP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YAExC,MAAM,aAAa,GAAG,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACzE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAE3C,MAAM,eAAe,GAAG,aAAa,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAA;YACjF,gBAAM,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAE7C,gBAAM,CAAC,WAAW,CAChB,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EACzB,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CACvD,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAS,EAAE;YACrD,MAAM,SAAS,GAAyB,EAAE,CAAA;YAE1C,MAAM,OAAO,CACX;;;;;;;;;CASP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;YAED,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;YAC5C,MAAM,aAAa,GAAG,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC3E,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAE3C,MAAM,eAAe,GAAG,aAAa,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAA;YAEjF,gBAAM,CAAC,eAAe,CACpB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EACpC;gBACE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;gBACtD,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;aACvD,CACF,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,gEAAgE,EAAE,GAAS,EAAE;YAC9E,MAAM,SAAS,GAAyB,EAAE,CAAA;YAE1C,MAAM,OAAO,CACX;;;;;;;CAOP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;YAED,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;YAC5C,MAAM,aAAa,GAAG,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC3E,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAE3C,MAAM,eAAe,GAAG,aAAa,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAA;YACjF,gBAAM,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAE7C,gBAAM,CAAC,WAAW,CAChB,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EACzB,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CACxD,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,EAAE,CAAC,gCAAgC,EAAE,GAAS,EAAE;YAC9C,MAAM,SAAS,GAAyB,EAAE,CAAA;YAC1C,MAAM,OAAO,CACX;;;;CAIP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YACxC,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;YACxE,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAEvC,MAAM,eAAe,GAAG,aAAa,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAA;YAEzE,gBAAM,CAAC,eAAe,CACpB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EACpC;gBACE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;gBACtD,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;aACvD,CACF,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,GAAS,EAAE;YACtD,MAAM,SAAS,GAAyB,EAAE,CAAA;YAC1C,MAAM,OAAO,CACX;;;;;;;;;CASP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YACxC,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;YACxE,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAEvC,gBAAM,CAAC,eAAe,CACpB,aAAa,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EACtE;gBACE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;gBACtD,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;gBACtD,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;gBACtD,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;aACvD,CACF,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;YAC3D,MAAM,SAAS,GAAyB,EAAE,CAAA;YAE1C,MAAM,OAAO,CACX;;;;;;;;;CASP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEtE,gBAAM,CAAC,eAAe,CACpB,aAAa;iBACV,wBAAwB,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EACvB;gBACE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;gBACtD,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;aACvD,CACF,CAAA;YAED,gBAAM,CAAC,eAAe,CACpB,aAAa;iBACV,wBAAwB,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EACvB;gBACE,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;gBACtD,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;aACvD,CACF,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,EAAE,CAAC,sBAAsB,EAAE,GAAS,EAAE;YACpC,MAAM,SAAS,GAAyB,EAAE,CAAA;YAC1C,MAAM,OAAO,CACX;;;KAGH,EACG,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YACxC,MAAM,aAAa,GAAG,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACzE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAE3C,MAAM,WAAW,GAAG,aAAa,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAA;YACzE,gBAAM,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAEzC,gBAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAClD,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACvD,EAAE,CAAC,yCAAyC,EAAE,GAAS,EAAE;YACvD,MAAM,SAAS,GAAyB,EAAE,CAAA;YAC1C,MAAM,OAAO,CACX;;;;KAIH,EACG,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YAExC,gBAAM,CAAC,eAAe,CACpB,aAAa;iBACV,0BAA0B,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClF,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAC3E,CAAC,EAAE,CAAC,CACL,CAAA;YAED,gBAAM,CAAC,eAAe,CACpB,aAAa;iBACV,0BAA0B,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClF,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAC3E,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAClB,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;YACrD,EAAE,CAAC,8CAA8C,EAAE,GAAS,EAAE;gBAC5D,MAAM,SAAS,GAAyB,EAAE,CAAA;gBAC1C,MAAM,OAAO,CACX;;;GAGP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;gBACD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAA;gBAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEzE,gBAAM,CAAC,eAAe,CAAC,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;YACxE,CAAC,CAAA,CAAC,CAAA;YAEF,EAAE,CAAC,8BAA8B,EAAE,GAAS,EAAE;gBAC5C,MAAM,SAAS,GAAyB,EAAE,CAAA;gBAC1C,MAAM,OAAO,CACX;;;;GAIP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;gBACD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAA;gBAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEzE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC1E,CAAC,CAAA,CAAC,CAAA;YAEF,EAAE,CAAC,kCAAkC,EAAE,GAAS,EAAE;gBAChD,MAAM,SAAS,GAAyB,EAAE,CAAA;gBAC1C,MAAM,OAAO,CACX;;;;GAIP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;gBACD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAA;gBAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEzE,gBAAM,CAAC,eAAe,CAAC,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;YACxE,CAAC,CAAA,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;YACpD,EAAE,CAAC,8CAA8C,EAAE,GAAS,EAAE;gBAC5D,MAAM,SAAS,GAAyB,EAAE,CAAA;gBAC1C,MAAM,OAAO,CACX;;;GAGP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;gBACD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAA;gBAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEzE,gBAAM,CAAC,eAAe,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;YACvE,CAAC,CAAA,CAAC,CAAA;YAEF,EAAE,CAAC,6BAA6B,EAAE,GAAS,EAAE;gBAC3C,MAAM,SAAS,GAAyB,EAAE,CAAA;gBAC1C,MAAM,OAAO,CACX;;;;GAIP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;gBACD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAA;gBAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEzE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACzE,CAAC,CAAA,CAAC,CAAA;YAEF,EAAE,CAAC,mCAAmC,EAAE,GAAS,EAAE;gBACjD,MAAM,SAAS,GAAyB,EAAE,CAAA;gBAC1C,MAAM,OAAO,CACX;;;;GAIP,EACO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACvC,CAAA;gBACD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAA;gBAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEzE,gBAAM,CAAC,eAAe,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;YACvE,CAAC,CAAA,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,8BAA8B,EAAE,GAAS,EAAE;gBAC5C,MAAM,eAAe,GAA8B,EAAE,CAAA;gBACrD,MAAM,OAAO,CACX;;;GAGP,EACO,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAC3C,CAAA;gBACD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;gBACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBACtC,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;gBAE7D,gBAAM,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBACzC,gBAAM,CAAC,eAAe,CACpB,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EACjB,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CACvD,CAAA;YACH,CAAC,CAAA,CAAC,CAAA;YAEF,EAAE,CAAC,gCAAgC,EAAE,GAAS,EAAE;gBAC9C,MAAM,eAAe,GAA8B,EAAE,CAAA;gBACrD,MAAM,OAAO,CACX;;;;GAIP,EACO,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAC3C,CAAA;gBACD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;gBACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBACtC,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;gBAE7D,gBAAM,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBACzC,gBAAM,CAAC,eAAe,CACpB,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EACjB,mBAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CACvD,CAAA;YACH,CAAC,CAAA,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAChC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC7D,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAA;YACjE,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;gBACnC,MAAM,IAAI,GAAG,mBAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBAChC,EAAE,EAAE,SAAS;iBACd,CAAC,CAAA;gBACF,MAAM,QAAQ,GAAG,mBAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACxC,IAAI;iBACL,CAAC,CAAA;gBAEF,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAE9B,gBAAM,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAA;YAChE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,EAAE,CAAC,sBAAsB,EAAE,GAAS,EAAE;gBACpC,MAAM,SAAS,GAAyB,EAAE,CAAA;gBAC1C,MAAM,OAAO,CACX;;;GAGP,EACO,CAAC,QAAQ,EAAE,EAAE;oBACX,IAAI,QAAQ,CAAC,QAAQ,EAAE;wBACrB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;qBAClC;gBACH,CAAC,CACF,CAAA;gBAED,MAAM,WAAW,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACzF,gBAAM,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBAEzC,gBAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAClD,CAAC,CAAA,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,SAAe,OAAO,CACpB,aAAqB,EACrB,kBAA0D,GAAG,EAAE,CAAC,IAAI;;YAEpE,MAAM,KAAK,GAAG,sBAAW,CAAC,YAAY,EAAE,CAAA;YACxC,MAAM,KAAK,GAAG,IAAI,8BAAc,EAAE,CAAA;YAClC,MAAM,SAAS,GAAG,IAAI,kCAAkB,EAAE,CAAA;YAC1C,MAAM,gBAAgB,GAAG,kCAAkB,EAAE,CAAA;YAC7C,MAAM,WAAW,GAAG,IAAI,2BAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAA;YAC9E,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE;gBACrD,QAAQ;YACV,CAAC,CAAC,CAAA;YACF,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE;gBACnD,QAAQ;YACV,CAAC,CAAC,CAAA;YACF,WAAW,CAAC,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE;gBAC3D,QAAQ;YACV,CAAC,CAAC,CAAA;YACF,WAAW,CAAC,oBAAoB,CAAC,IAAI,EAAE,+BAA+B,EAAE;gBACtE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;YACpC,CAAC,CAAC,CAAA;YACF,WAAW,CAAC,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE;gBAC3D,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;YACtC,CAAC,CAAC,CAAA;YACF,WAAW,CAAC,oBAAoB,CAAC,IAAI,EAAE,iCAAiC,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1F,gBAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YAClB,CAAC,CAAC,CAAA;YAEF,MAAM,iBAAiB,GAAG,IAAI,iBAAQ,CAAC;gBACrC,UAAU,EAAE,IAAI;gBAChB,KAAK,CACH,QAA4B,EAC5B,QAAgB,EAChB,QAAwC;oBAExC,IAAI;wBACF,eAAe,CAAC,QAAQ,CAAC,CAAA;wBACzB,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;wBAC7B,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;wBAC9B,QAAQ,EAAE,CAAA;qBACX;oBAAC,OAAO,GAAG,EAAE;wBACZ,QAAQ,CAAC,GAAG,CAAC,CAAA;qBACd;gBACH,CAAC;aACF,CAAC,CAAA;YACF,MAAM,eAAe,CAAC,eAAe,CAAC,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAA;YAE/F,MAAM,QAAQ,GAAG,4BAAY,CAAC,YAAY,EAAE,WAAW,EAAE,4BAAY,CAAC,CAAA;YACtE,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,QAA4B,EAAE,EAAE;gBACtD,eAAe,CAAC,QAAQ,CAAC,CAAA;gBACzB,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAED,SAAS,eAAe,CAAC,aAAqB,EAAE,GAAW,EAAE,KAAwB;QACnF,MAAM,MAAM,GAAG,mBAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC1C,MAAM,EAAE;gBACN,GAAG;gBACH,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,+BAA+B;aAC3C;SACF,CAAC,CAAA;QACF,OAAO,gCAAc,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,SAAS,YAAY,CACnB,SAA+B;QAE/B,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,eAAe,CAAA;QAC9F,OAAO,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;IAClF,CAAC;IAED,SAAS,cAAc,CACrB,SAA+B;QAE/B,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,eAAe,CAAA;QAC9F,OAAO,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,UAAU,CAAA;IACtF,CAAC;AACH,CAAC,CAAC,CAAA"}