@interactors/core 1.0.0-rc1.2 → 1.0.0-rc1.4
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/CHANGELOG.md +22 -0
- package/dist/cjs/constructor.js +62 -126
- package/dist/cjs/constructor.js.map +1 -1
- package/dist/cjs/converge.js +3 -5
- package/dist/cjs/converge.js.map +1 -1
- package/dist/cjs/format.js +50 -0
- package/dist/cjs/format.js.map +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/inspector.js +2 -1
- package/dist/cjs/inspector.js.map +1 -1
- package/dist/cjs/interaction.js +59 -35
- package/dist/cjs/interaction.js.map +1 -1
- package/dist/cjs/match.js +17 -7
- package/dist/cjs/match.js.map +1 -1
- package/dist/cjs/resolvers.js +98 -0
- package/dist/cjs/resolvers.js.map +1 -0
- package/dist/cjs/serialize.js +48 -0
- package/dist/cjs/serialize.js.map +1 -0
- package/dist/constructor.d.ts +0 -6
- package/dist/constructor.d.ts.map +1 -1
- package/dist/converge.d.ts +2 -1
- package/dist/converge.d.ts.map +1 -1
- package/dist/esm/constructor.js +59 -117
- package/dist/esm/constructor.js.map +1 -1
- package/dist/esm/converge.js +3 -5
- package/dist/esm/converge.js.map +1 -1
- package/dist/esm/{format-table.js → format.js} +19 -1
- package/dist/esm/format.js.map +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inspector.js +2 -1
- package/dist/esm/inspector.js.map +1 -1
- package/dist/esm/interaction.js +56 -29
- package/dist/esm/interaction.js.map +1 -1
- package/dist/esm/match.js +17 -7
- package/dist/esm/match.js.map +1 -1
- package/dist/esm/resolvers.js +88 -0
- package/dist/esm/resolvers.js.map +1 -0
- package/dist/esm/serialize.js +43 -0
- package/dist/esm/serialize.js.map +1 -0
- package/dist/format.d.ts +10 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/inspector.d.ts.map +1 -1
- package/dist/interaction.d.ts +38 -10
- package/dist/interaction.d.ts.map +1 -1
- package/dist/match.d.ts +5 -5
- package/dist/match.d.ts.map +1 -1
- package/dist/resolvers.d.ts +9 -0
- package/dist/resolvers.d.ts.map +1 -0
- package/dist/serialize.d.ts +13 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/specification.d.ts +14 -11
- package/dist/specification.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/src/constructor.ts +65 -133
- package/src/converge.ts +3 -6
- package/src/format.ts +58 -0
- package/src/index.ts +1 -1
- package/src/inspector.ts +2 -1
- package/src/interaction.ts +101 -36
- package/src/match.ts +23 -15
- package/src/resolvers.ts +100 -0
- package/src/serialize.ts +54 -0
- package/src/specification.ts +16 -13
- package/dist/cjs/format-table.js +0 -30
- package/dist/cjs/format-table.js.map +0 -1
- package/dist/esm/format-table.js.map +0 -1
- package/dist/format-table.d.ts +0 -6
- package/dist/format-table.d.ts.map +0 -1
- package/src/format-table.ts +0 -34
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @interactors/core
|
|
2
2
|
|
|
3
|
+
## 1.0.0-rc1.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 596dee1: bump @testing-library/dom to v8.18.1 fixes https://github.com/thefrontside/interactors/issues/212
|
|
8
|
+
|
|
9
|
+
## 1.0.0-rc1.3
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- a3155cf: Store interactor name and interaction arguments for reflection
|
|
14
|
+
- 968109e: Use effection for converge and interactions
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- efecf56: Improve filter matching and reduce unnecessary calls
|
|
19
|
+
- afcf87b: Add code representation for interactions
|
|
20
|
+
- Updated dependencies [a3155cf]
|
|
21
|
+
- Updated dependencies [968109e]
|
|
22
|
+
- Updated dependencies [afcf87b]
|
|
23
|
+
- @interactors/globals@1.0.0-rc1.2
|
|
24
|
+
|
|
3
25
|
## 1.0.0-rc1.2
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
package/dist/cjs/constructor.js
CHANGED
|
@@ -1,102 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.createConstructor = exports.instantiateInteractor =
|
|
5
|
-
const globals_1 = require("@interactors/globals");
|
|
4
|
+
exports.createConstructor = exports.instantiateInteractor = void 0;
|
|
6
5
|
const converge_1 = require("./converge");
|
|
7
6
|
const filter_set_1 = require("./filter-set");
|
|
8
7
|
const locator_1 = require("./locator");
|
|
9
8
|
const match_1 = require("./match");
|
|
10
|
-
const
|
|
9
|
+
const format_1 = require("./format");
|
|
11
10
|
const errors_1 = require("./errors");
|
|
12
11
|
const interaction_1 = require("./interaction");
|
|
13
|
-
const match_2 = require("./match");
|
|
14
|
-
const errors_2 = require("./errors");
|
|
15
12
|
const matcher_1 = require("./matcher");
|
|
16
13
|
const matching_1 = require("./matchers/matching");
|
|
14
|
+
const resolvers_1 = require("./resolvers");
|
|
17
15
|
const defaultLocator = (element) => element.textContent || "";
|
|
18
|
-
const defaultSelector = 'div';
|
|
19
|
-
function findElements(parentElement, interactor) {
|
|
20
|
-
if (typeof (interactor.specification.selector) === 'function') {
|
|
21
|
-
return interactor.specification.selector(parentElement);
|
|
22
|
-
}
|
|
23
|
-
else if (interactor.specification.selector === ':root') {
|
|
24
|
-
// this is a bit of a hack, because otherwise there isn't a good way of selecting the root element
|
|
25
|
-
return [parentElement.ownerDocument.querySelector(':root')];
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
return Array.from(parentElement.querySelectorAll(interactor.specification.selector || defaultSelector));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
exports.findElements = findElements;
|
|
32
|
-
function findMatches(parentElement, interactor) {
|
|
33
|
-
if (!interactor.name) {
|
|
34
|
-
throw new Error('One of your interactors was created without a name. Please provide a label for your interactor:\n\tHTML.extend(\'my interactor\') || createInteractor(\'my interactor\')');
|
|
35
|
-
}
|
|
36
|
-
return findElements(parentElement, interactor).map((e) => new match_2.Match(e, interactor.filter, interactor.locator));
|
|
37
|
-
}
|
|
38
|
-
function findMatchesMatching(parentElement, interactor) {
|
|
39
|
-
return findMatches(parentElement, interactor).filter((m) => m.matches);
|
|
40
|
-
}
|
|
41
|
-
function findMatchesNonEmpty(parentElement, interactor) {
|
|
42
|
-
let matches = findMatches(parentElement, interactor);
|
|
43
|
-
let matching = matches.filter((m) => m.matches);
|
|
44
|
-
if (matching.length > 0) {
|
|
45
|
-
return matching;
|
|
46
|
-
}
|
|
47
|
-
else if (matches.length === 0) {
|
|
48
|
-
throw new errors_2.NoSuchElementError(`did not find ${description(interactor)}`);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
let table = format_table_1.formatTable({
|
|
52
|
-
headers: interactor.locator ? [interactor.name, ...interactor.filter.asTableHeader()] : interactor.filter.asTableHeader(),
|
|
53
|
-
rows: matches.slice().sort((a, b) => b.sortWeight - a.sortWeight).map((m) => m.asTableRow()),
|
|
54
|
-
});
|
|
55
|
-
throw new errors_2.NoSuchElementError(`did not find ${description(interactor)}, did you mean one of:\n\n${table}`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// Given a parent element, and an interactor, find exactly one matching element
|
|
59
|
-
// and return it. If no elements match, raise an error. If more than one
|
|
60
|
-
// element matches, raise an error.
|
|
61
|
-
function resolveUnique(parentElement, interactor) {
|
|
62
|
-
let matching = findMatchesNonEmpty(parentElement, interactor);
|
|
63
|
-
if (matching.length === 1) {
|
|
64
|
-
return matching[0].element;
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
let alternatives = matching.map((m) => '- ' + m.elementDescription());
|
|
68
|
-
throw new errors_2.AmbiguousElementError(`${description(interactor)} matches multiple elements:\n\n${alternatives.join('\n')}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
exports.resolveUnique = resolveUnique;
|
|
72
|
-
// Given a parent element, and an interactor, find all matching elements and
|
|
73
|
-
// return them. If no elements match, raise an error.
|
|
74
|
-
function resolveNonEmpty(parentElement, interactor) {
|
|
75
|
-
return findMatchesNonEmpty(parentElement, interactor).map(m => m.element);
|
|
76
|
-
}
|
|
77
|
-
exports.resolveNonEmpty = resolveNonEmpty;
|
|
78
|
-
// Given a parent element, and an interactor, check if there are any matching
|
|
79
|
-
// elements, and throw an error if there are. Otherwise return undefined.
|
|
80
|
-
function resolveEmpty(parentElement, interactor) {
|
|
81
|
-
let matching = findMatchesMatching(parentElement, interactor);
|
|
82
|
-
if (matching.length !== 0) {
|
|
83
|
-
let alternatives = matching.map((m) => '- ' + m.elementDescription());
|
|
84
|
-
throw new errors_2.NotAbsentError(`${description(interactor)} exists but should not:\n\n${alternatives.join('\n')}`);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
exports.resolveEmpty = resolveEmpty;
|
|
88
|
-
function ownDescription(options) {
|
|
89
|
-
if (options.locator) {
|
|
90
|
-
return `${options.name} ${options.locator.description} ${options.filter.description}`.trim();
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
return `${options.name} ${options.filter.description}`.trim();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
function description(options) {
|
|
97
|
-
let ancestorsAndSelf = options.ancestors.concat(options);
|
|
98
|
-
return ancestorsAndSelf.reverse().map(ownDescription).join(' within ');
|
|
99
|
-
}
|
|
100
16
|
/**
|
|
101
17
|
* Removes any default values for a filter from the lookup if that filter is present in the
|
|
102
18
|
* assertion. Otherwise, it is not possible to make an assertion on a filter that might conflict
|
|
@@ -115,28 +31,28 @@ function getLookupFilterForAssertion(filter, filters) {
|
|
|
115
31
|
}
|
|
116
32
|
return lookupFilter;
|
|
117
33
|
}
|
|
118
|
-
function unsafeSyncResolveParent(options) {
|
|
119
|
-
return options.ancestors.reduce(resolveUnique, globals_1.globals.document.documentElement);
|
|
120
|
-
}
|
|
121
|
-
exports.unsafeSyncResolveParent = unsafeSyncResolveParent;
|
|
122
|
-
function unsafeSyncResolveUnique(options) {
|
|
123
|
-
return resolveUnique(unsafeSyncResolveParent(options), options);
|
|
124
|
-
}
|
|
125
|
-
exports.unsafeSyncResolveUnique = unsafeSyncResolveUnique;
|
|
126
34
|
function instantiateInteractor(options, resolver) {
|
|
127
35
|
let interactor = {
|
|
128
36
|
options,
|
|
129
37
|
get description() {
|
|
130
|
-
return
|
|
38
|
+
return format_1.formatDescription(options);
|
|
131
39
|
},
|
|
132
40
|
perform(fn) {
|
|
133
|
-
return interaction_1.
|
|
41
|
+
return interaction_1.createInteraction('action', {
|
|
42
|
+
name: "perform",
|
|
43
|
+
interactor,
|
|
44
|
+
args: [],
|
|
45
|
+
description: `run perform on ${format_1.formatDescription(options)}`,
|
|
46
|
+
run: (interactor) => converge_1.converge(() => fn(resolver(interactor.options))),
|
|
47
|
+
});
|
|
134
48
|
},
|
|
135
49
|
assert(fn) {
|
|
136
|
-
return interaction_1.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
50
|
+
return interaction_1.createInteraction('assertion', {
|
|
51
|
+
name: "assert",
|
|
52
|
+
interactor,
|
|
53
|
+
args: [],
|
|
54
|
+
description: `${format_1.formatDescription(options)} asserts`,
|
|
55
|
+
run: (interactor) => converge_1.converge(() => { fn(resolver(interactor.options)); }),
|
|
140
56
|
});
|
|
141
57
|
},
|
|
142
58
|
has(filters) {
|
|
@@ -144,14 +60,19 @@ function instantiateInteractor(options, resolver) {
|
|
|
144
60
|
},
|
|
145
61
|
is(filters) {
|
|
146
62
|
let filter = new filter_set_1.FilterSet(options.specification, filters);
|
|
147
|
-
return interaction_1.
|
|
148
|
-
|
|
149
|
-
|
|
63
|
+
return interaction_1.createInteraction('assertion', {
|
|
64
|
+
name: "is",
|
|
65
|
+
interactor,
|
|
66
|
+
args: [filters],
|
|
67
|
+
filters,
|
|
68
|
+
description: `${format_1.formatDescription(options)} matches filters: ${filter.description}`,
|
|
69
|
+
run: (interactor) => converge_1.converge(() => {
|
|
70
|
+
let element = resolver({ ...interactor.options, filter: getLookupFilterForAssertion(interactor.options.filter, filters) });
|
|
150
71
|
let match = new match_1.MatchFilter(element, filter);
|
|
151
72
|
if (!match.matches) {
|
|
152
|
-
throw new errors_1.FilterNotMatchingError(`${
|
|
73
|
+
throw new errors_1.FilterNotMatchingError(`${format_1.formatDescription(options)} does not match filters:\n\n${match.formatAsExpectations()}`);
|
|
153
74
|
}
|
|
154
|
-
})
|
|
75
|
+
}),
|
|
155
76
|
});
|
|
156
77
|
},
|
|
157
78
|
find(child) {
|
|
@@ -161,25 +82,29 @@ function instantiateInteractor(options, resolver) {
|
|
|
161
82
|
}, resolver);
|
|
162
83
|
},
|
|
163
84
|
exists() {
|
|
164
|
-
return interaction_1.
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
85
|
+
return interaction_1.createInteraction('assertion', {
|
|
86
|
+
name: 'exists',
|
|
87
|
+
interactor,
|
|
88
|
+
args: [],
|
|
89
|
+
description: `${format_1.formatDescription(options)} exists`,
|
|
90
|
+
run: (interactor) => converge_1.converge(() => {
|
|
91
|
+
resolvers_1.resolveFirst(resolvers_1.unsafeSyncResolveParent(interactor.options), options);
|
|
92
|
+
}),
|
|
93
|
+
}, (element) => resolvers_1.hasMatchMatching(element, options));
|
|
171
94
|
},
|
|
172
95
|
absent() {
|
|
173
|
-
return interaction_1.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
96
|
+
return interaction_1.createInteraction('assertion', {
|
|
97
|
+
name: 'absent',
|
|
98
|
+
interactor,
|
|
99
|
+
args: [],
|
|
100
|
+
description: `${format_1.formatDescription(options)} does not exist`,
|
|
101
|
+
run: (interactor) => converge_1.converge(() => {
|
|
102
|
+
resolvers_1.resolveEmpty(resolvers_1.unsafeSyncResolveParent(interactor.options), options);
|
|
103
|
+
}),
|
|
104
|
+
}, (element) => !resolvers_1.hasMatchMatching(element, options));
|
|
180
105
|
},
|
|
181
106
|
apply(parentElement) {
|
|
182
|
-
let element = [...options.ancestors, options].reduce(resolveUnique, parentElement);
|
|
107
|
+
let element = [...options.ancestors, options].reduce(resolvers_1.resolveUnique, parentElement);
|
|
183
108
|
return match_1.applyFilter(options.specification.locator || defaultLocator, element);
|
|
184
109
|
}
|
|
185
110
|
};
|
|
@@ -191,7 +116,13 @@ function instantiateInteractor(options, resolver) {
|
|
|
191
116
|
if (args.length) {
|
|
192
117
|
actionDescription += ` with ` + args.map((a) => JSON.stringify(a)).join(', ');
|
|
193
118
|
}
|
|
194
|
-
return interaction_1.
|
|
119
|
+
return interaction_1.createInteraction('action', {
|
|
120
|
+
name: actionName,
|
|
121
|
+
interactor,
|
|
122
|
+
args,
|
|
123
|
+
description: `${actionDescription} on ${format_1.formatDescription(options)}`,
|
|
124
|
+
run: (interactor) => action(interactor, ...args)
|
|
125
|
+
});
|
|
195
126
|
},
|
|
196
127
|
configurable: true,
|
|
197
128
|
writable: true,
|
|
@@ -203,10 +134,14 @@ function instantiateInteractor(options, resolver) {
|
|
|
203
134
|
if (!interactor.hasOwnProperty(filterName)) {
|
|
204
135
|
Object.defineProperty(interactor, filterName, {
|
|
205
136
|
value: function () {
|
|
206
|
-
return interaction_1.
|
|
207
|
-
|
|
137
|
+
return interaction_1.createInteraction('assertion', {
|
|
138
|
+
name: filterName,
|
|
139
|
+
interactor,
|
|
140
|
+
args: [],
|
|
141
|
+
description: `${filterName} of ${format_1.formatDescription(options)}`,
|
|
142
|
+
run: (interactor) => converge_1.converge(() => match_1.applyFilter(filter, resolver(interactor.options))),
|
|
208
143
|
}, (parentElement) => {
|
|
209
|
-
let element = [...options.ancestors, options].reduce(resolveUnique, parentElement);
|
|
144
|
+
let element = [...options.ancestors, options].reduce(resolvers_1.resolveUnique, parentElement);
|
|
210
145
|
return match_1.applyFilter(filter, element);
|
|
211
146
|
});
|
|
212
147
|
},
|
|
@@ -230,9 +165,10 @@ function createConstructor(name, specification) {
|
|
|
230
165
|
else {
|
|
231
166
|
filter = new filter_set_1.FilterSet(specification, args[0] || {});
|
|
232
167
|
}
|
|
233
|
-
return instantiateInteractor({ name, specification, filter, locator, ancestors: [] }, unsafeSyncResolveUnique);
|
|
168
|
+
return instantiateInteractor({ name, specification, filter, locator, ancestors: [] }, resolvers_1.unsafeSyncResolveUnique);
|
|
234
169
|
}
|
|
235
170
|
return Object.assign(initInteractor, {
|
|
171
|
+
interactorName: name,
|
|
236
172
|
selector: (value) => {
|
|
237
173
|
return createConstructor(name, { ...specification, selector: value });
|
|
238
174
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constructor.js","sourceRoot":"","sources":["../../src/constructor.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAEvD,
|
|
1
|
+
{"version":3,"file":"constructor.js","sourceRoot":"","sources":["../../src/constructor.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAEvD,yCAAsC;AAetC,6CAAyC;AACzC,uCAAoC;AACpC,mCAAmD;AACnD,qCAA6C;AAC7C,qCAAkD;AAClD,+CAA2F;AAC3F,uCAAsC;AACtC,kDAA+C;AAC/C,2CAA4I;AAE5I,MAAM,cAAc,GAAsC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;AAEjG;;;;EAIE;AACF,SAAS,2BAA2B,CAA0C,MAAuB,EAAE,OAA2B;IAChI,IAAI,YAAY,GAAG,IAAI,sBAAS,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1F,IAAI,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;IACrD,KAAK,IAAI,GAAG,IAAI,WAAW,EAAE;QAC3B,IAAI,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,UAAU;eACvC,SAAS,IAAI,WAAW,CAAC,GAAG,CAAC;eAC7B,GAAG,IAAI,OAAO;eACd,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;YACjC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;SAC1C;KACF;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,qBAAqB,CACnC,OAAmC,EACnC,QAAoD;IAEpD,IAAI,UAAU,GAAG;QACf,OAAO;QAEP,IAAI,WAAW;YACb,OAAO,0BAAiB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,CAAI,EAAqB;YAC9B,OAAO,+BAAiB,CAAC,QAAQ,EAAE;gBACjC,IAAI,EAAE,SAAS;gBACf,UAAU;gBACV,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,kBAAkB,0BAAiB,CAAC,OAAO,CAAC,EAAE;gBAC3D,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,mBAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;aACtE,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,EAAwB;YAC7B,OAAO,+BAAiB,CAAC,WAAW,EAAE;gBACpC,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,GAAG,0BAAiB,CAAC,OAAO,CAAC,UAAU;gBACpD,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,mBAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC;aAC1E,CAAC,CAAC;QACL,CAAC;QAED,GAAG,CAAC,OAA2B;YAC7B,OAAO,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAED,EAAE,CAAC,OAA2B;YAC5B,IAAI,MAAM,GAAG,IAAI,sBAAS,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO,+BAAiB,CAAC,WAAW,EAAE;gBACpC,IAAI,EAAE,IAAI;gBACV,UAAU;gBACV,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,OAAO;gBACP,WAAW,EAAE,GAAG,0BAAiB,CAAC,OAAO,CAAC,qBAAqB,MAAM,CAAC,WAAW,EAAE;gBACnF,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,mBAAQ,CAAC,GAAG,EAAE;oBACjC,IAAI,OAAO,GAAG,QAAQ,CAAC,EAAC,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC1H,IAAI,KAAK,GAAG,IAAI,mBAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;wBAClB,MAAM,IAAI,+BAAsB,CAAC,GAAG,0BAAiB,CAAC,OAAO,CAAC,+BAA+B,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;qBAC9H;gBACH,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAiC,KAAQ;YAC3C,OAAO,qBAAqB,CAAC;gBAC3B,GAAG,KAAK,CAAC,OAAO;gBAChB,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;aACvE,EAAE,QAAQ,CAAiB,CAAC;QAC/B,CAAC;QAED,MAAM;YACJ,OAAO,+BAAiB,CAAC,WAAW,EAAE;gBACpC,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,GAAG,0BAAiB,CAAC,OAAO,CAAC,SAAS;gBACnD,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,mBAAQ,CAAC,GAAG,EAAE;oBACjC,wBAAY,CAAC,mCAAuB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrE,CAAC,CAAC;aACH,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,4BAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM;YACJ,OAAO,+BAAiB,CAAC,WAAW,EAAE;gBACpC,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,GAAG,0BAAiB,CAAC,OAAO,CAAC,iBAAiB;gBAC3D,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,mBAAQ,CAAC,GAAG,EAAE;oBACjC,wBAAY,CAAC,mCAAuB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrE,CAAC,CAAC;aACH,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,4BAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,aAAsB;YAC1B,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,yBAAa,EAAE,aAAa,CAAC,CAAC;YACnF,OAAO,mBAAW,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,cAAc,EAAE,OAAO,CAAC,CAAC;QAC/E,CAAC;KACF,CAAC;IAEF,KAAK,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QACpF,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YAC1C,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE;gBAC5C,KAAK,EAAE,UAAS,GAAG,IAAe;oBAChC,IAAI,iBAAiB,GAAG,UAAU,CAAC;oBACnC,IAAI,IAAI,CAAC,MAAM,EAAE;wBACf,iBAAiB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC/E;oBACD,OAAO,+BAAiB,CAAC,QAAQ,EAAE;wBACjC,IAAI,EAAE,UAAU;wBAChB,UAAU;wBACV,IAAI;wBACJ,WAAW,EAAE,GAAG,iBAAiB,OAAO,0BAAiB,CAAC,OAAO,CAAC,EAAE;wBACpE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,UAA8H,EAAE,GAAG,IAAI,CAAC;qBACrK,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;SACJ;KACF;IAED,KAAK,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QACpF,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YAC1C,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE;gBAC5C,KAAK,EAAE;oBACL,OAAO,+BAAiB,CAAC,WAAW,EAAE;wBACpC,IAAI,EAAE,UAAU;wBAChB,UAAU;wBACV,IAAI,EAAE,EAAE;wBACR,WAAW,EAAE,GAAG,UAAU,OAAO,0BAAiB,CAAC,OAAO,CAAC,EAAE;wBAC7D,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,mBAAQ,CAAC,GAAG,EAAE,CAAC,mBAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;qBACvF,EAAE,CAAC,aAAa,EAAE,EAAE;wBACnB,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,yBAAa,EAAE,aAAa,CAAC,CAAC;wBACnF,OAAO,mBAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;SACJ;KACF;IAED,OAAO,UAA8H,CAAC;AACxI,CAAC;AAxID,sDAwIC;AAED,SAAgB,iBAAiB,CAC/B,IAAY,EACZ,aAAmD;IAEnD,SAAS,cAAc,CAAC,GAAG,IAAW;QACpC,IAAI,OAAO,EAAE,MAAM,CAAC;QACpB,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,mBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1E,IAAI,OAAM,CAAC,YAAY,CAAC,KAAK,QAAQ,IAAI,mBAAS,CAAC,YAAY,CAAC,EAAE;YAChE,OAAO,GAAG,IAAI,iBAAO,CAAC,aAAa,CAAC,OAAO,IAAI,cAAc,EAAE,YAAY,CAAC,CAAC;YAC7E,MAAM,GAAG,IAAI,sBAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACtD;aAAM;YACL,MAAM,GAAG,IAAI,sBAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACtD;QACD,OAAO,qBAAqB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,mCAAuB,CAAC,CAAC;IACjH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;QACnC,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,CAAC,KAAa,EAAwC,EAAE;YAChE,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,CAAC,KAAkC,EAAwC,EAAE;YACpF,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,EAAE,CAAwB,OAAW,EAA+G,EAAE;YAC3J,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO,EAAE,CAAkE,OAAW,EAA+E,EAAE;YACrK,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;QACD,MAAM,EAAE,CAAyB,OAAe,EAAyC,EAAE;YACzF,OAAO,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAqD,CAAC;QACvG,CAAC;KACF,CAAoD,CAAC;AACxD,CAAC;AAlCD,8CAkCC"}
|
package/dist/cjs/converge.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.converge = void 0;
|
|
4
|
+
const core_1 = require("@effection/core");
|
|
4
5
|
const performance_api_1 = require("performance-api");
|
|
5
6
|
const globals_1 = require("@interactors/globals");
|
|
6
|
-
function
|
|
7
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
8
|
-
}
|
|
9
|
-
async function converge(fn) {
|
|
7
|
+
function* converge(fn) {
|
|
10
8
|
let startTime = performance_api_1.performance.now();
|
|
11
9
|
while (true) {
|
|
12
10
|
try {
|
|
@@ -18,7 +16,7 @@ async function converge(fn) {
|
|
|
18
16
|
throw e;
|
|
19
17
|
}
|
|
20
18
|
else {
|
|
21
|
-
|
|
19
|
+
yield core_1.sleep(1);
|
|
22
20
|
}
|
|
23
21
|
}
|
|
24
22
|
}
|
package/dist/cjs/converge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converge.js","sourceRoot":"","sources":["../../src/converge.ts"],"names":[],"mappings":";;;AAAA,qDAA8C;AAC9C,kDAA8C;AAE9C,
|
|
1
|
+
{"version":3,"file":"converge.js","sourceRoot":"","sources":["../../src/converge.ts"],"names":[],"mappings":";;;AAAA,0CAAmD;AACnD,qDAA8C;AAC9C,kDAA8C;AAE9C,QAAe,CAAC,CAAC,QAAQ,CAAI,EAAW;IACtC,IAAI,SAAS,GAAG,6BAAW,CAAC,GAAG,EAAE,CAAC;IAClC,OAAM,IAAI,EAAE;QACV,IAAI;YACF,OAAO,EAAE,EAAE,CAAC;SACb;QAAC,OAAM,CAAC,EAAE;YACT,IAAI,IAAI,GAAG,6BAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACzC,IAAG,IAAI,GAAG,iBAAO,CAAC,iBAAiB,EAAE;gBACnC,MAAM,CAAC,CAAC;aACT;iBAAM;gBACL,MAAM,YAAK,CAAC,CAAC,CAAC,CAAC;aAChB;SACF;KACF;AACH,CAAC;AAdD,4BAcC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatMatchesTable = exports.formatDescription = exports.formatTable = void 0;
|
|
4
|
+
const MAX_COLUMN_WIDTH = 40;
|
|
5
|
+
function formatValue(value, width) {
|
|
6
|
+
if (value.length > width) {
|
|
7
|
+
return value.slice(0, width - 1) + '…';
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return value.padEnd(width);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function formatTable(options) {
|
|
14
|
+
let columnWidths = options.headers.map((h, index) => {
|
|
15
|
+
return Math.min(MAX_COLUMN_WIDTH, Math.max(h.length, ...options.rows.map((r) => r[index].length)));
|
|
16
|
+
});
|
|
17
|
+
let formatRow = (cells) => {
|
|
18
|
+
return '┃ ' + cells.map((c, index) => formatValue(c, columnWidths[index])).join(' ┃ ') + ' ┃';
|
|
19
|
+
};
|
|
20
|
+
let spacerRow = () => {
|
|
21
|
+
return '┣━' + columnWidths.map((w) => "━".repeat(w)).join('━╋━') + '━┫';
|
|
22
|
+
};
|
|
23
|
+
return [
|
|
24
|
+
formatRow(options.headers),
|
|
25
|
+
spacerRow(),
|
|
26
|
+
...options.rows.map((row) => formatRow(row))
|
|
27
|
+
].join('\n');
|
|
28
|
+
}
|
|
29
|
+
exports.formatTable = formatTable;
|
|
30
|
+
function ownDescription(options) {
|
|
31
|
+
if (options.locator) {
|
|
32
|
+
return `${options.name} ${options.locator.description} ${options.filter.description}`.trim();
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return `${options.name} ${options.filter.description}`.trim();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function formatDescription(options) {
|
|
39
|
+
let ancestorsAndSelf = options.ancestors.concat(options);
|
|
40
|
+
return ancestorsAndSelf.reverse().map(ownDescription).join(' within ');
|
|
41
|
+
}
|
|
42
|
+
exports.formatDescription = formatDescription;
|
|
43
|
+
function formatMatchesTable(interactor, matches) {
|
|
44
|
+
return formatTable({
|
|
45
|
+
headers: interactor.locator ? [interactor.name, ...interactor.filter.asTableHeader()] : interactor.filter.asTableHeader(),
|
|
46
|
+
rows: matches.slice().sort((a, b) => b.sortWeight - a.sortWeight).map((m) => m.asTableRow()),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
exports.formatMatchesTable = formatMatchesTable;
|
|
50
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,6CAAoG;AAArC,4GAAA,aAAa,OAAA;AAC5E,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,yCAA6C;AAApC,4GAAA,eAAe,OAAA;AACxB,yDAA+C;AAAtC,+GAAA,SAAS,OAAA;AAGlB,kDAAiD;AAAxC,sGAAA,SAAS,OAAA;AAClB,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AACjB,sCAAqC;AAA5B,0FAAA,GAAG,OAAA;AACZ,oCAAmC;AAA1B,wFAAA,EAAE,OAAA;AACX,sCAAqC;AAA5B,0FAAA,GAAG,OAAA;AACZ,wCAAuC;AAA9B,4FAAA,IAAI,OAAA;AACb,0CAAyC;AAAhC,8FAAA,KAAK,OAAA;AAEd,yCAAwC;AAA/B,8FAAA,KAAK,OAAA"}
|
package/dist/cjs/inspector.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.createInspector = void 0;
|
|
5
5
|
const constructor_1 = require("./constructor");
|
|
6
|
+
const resolvers_1 = require("./resolvers");
|
|
6
7
|
function createInspector(constructor, parentElement) {
|
|
7
8
|
// NOTE: Wait for https://github.com/thefrontside/bigtest/pull/895 to use specification instead
|
|
8
9
|
let options = constructor().options;
|
|
9
10
|
return {
|
|
10
11
|
all() {
|
|
11
|
-
let elements =
|
|
12
|
+
let elements = resolvers_1.findElements(parentElement !== null && parentElement !== void 0 ? parentElement : resolvers_1.unsafeSyncResolveParent(options), options);
|
|
12
13
|
return elements.map(element => (Object.assign(constructor_1.instantiateInteractor(options, () => element), {
|
|
13
14
|
element,
|
|
14
15
|
find(constructor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/inspector.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAEvD,+
|
|
1
|
+
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/inspector.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAEvD,+CAAsD;AACtD,2CAAmE;AAmBnE,SAAgB,eAAe,CAC7B,WAAe,EACf,aAAuB;IAEvB,+FAA+F;IAC/F,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC,OAAoC,CAAA;IAChE,OAAO;QACL,GAAG;YACD,IAAI,QAAQ,GAAG,wBAAY,CAAiB,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,mCAAuB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YACxG,OAAO,QAAQ,CAAC,GAAG,CACjB,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CACvB,mCAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAA2E,EAAE;gBACzH,OAAO;gBACP,IAAI,CAAsD,WAAc;oBACtE,OAAO,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;gBAC9C,CAAC;aACF,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AApBD,0CAoBC"}
|
package/dist/cjs/interaction.js
CHANGED
|
@@ -1,53 +1,77 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createInteraction = exports.isInteraction = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
const core_1 = require("@effection/core");
|
|
4
6
|
const globals_1 = require("@interactors/globals");
|
|
5
|
-
const
|
|
7
|
+
const serialize_1 = require("./serialize");
|
|
8
|
+
const interactionSymbol = core_1.Symbol.for('interaction');
|
|
6
9
|
function isInteraction(x) {
|
|
7
10
|
return typeof x === 'object' && x != null && interactionSymbol in x;
|
|
8
11
|
}
|
|
9
12
|
exports.isInteraction = isInteraction;
|
|
10
|
-
function createInteraction(
|
|
11
|
-
let
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
function createInteraction(type, options, apply) {
|
|
14
|
+
let task;
|
|
15
|
+
let shouldCatchHalt = false;
|
|
16
|
+
function operation(scope) {
|
|
17
|
+
let run = () => options.run(options.interactor);
|
|
18
|
+
return (globals_1.globals.wrapInteraction
|
|
19
|
+
? globals_1.globals.wrapInteraction(() => scope.run(run), interaction)
|
|
20
|
+
: globals_1.globals.wrapAction(interaction.description, () => scope.run(run), type));
|
|
21
|
+
}
|
|
22
|
+
;
|
|
23
|
+
function action() {
|
|
24
|
+
if (!task) {
|
|
25
|
+
task = core_1.run(operation);
|
|
26
|
+
}
|
|
27
|
+
return task;
|
|
28
|
+
}
|
|
29
|
+
;
|
|
30
|
+
function catchHalt(onReject) {
|
|
31
|
+
return (reason) => {
|
|
32
|
+
if (shouldCatchHalt && reason instanceof Error && reason.message == 'halted') {
|
|
33
|
+
return reason;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
onReject === null || onReject === void 0 ? void 0 : onReject(reason);
|
|
37
|
+
return reason;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
let serializedOptions = serialize_1.serializeInteractionOptions(type, options);
|
|
42
|
+
let interaction = {
|
|
43
|
+
type,
|
|
44
|
+
options: serializedOptions,
|
|
45
|
+
description: options.description,
|
|
46
|
+
interactor: options.interactor,
|
|
47
|
+
run: options.run,
|
|
48
|
+
args: options.args,
|
|
14
49
|
action,
|
|
50
|
+
check: type === 'assertion' ? action : undefined,
|
|
51
|
+
code: () => serializedOptions.code(),
|
|
52
|
+
halt: () => {
|
|
53
|
+
shouldCatchHalt = true;
|
|
54
|
+
return action().halt();
|
|
55
|
+
},
|
|
15
56
|
[interactionSymbol]: true,
|
|
16
|
-
[Symbol.toStringTag]: `[interaction ${description}]`,
|
|
57
|
+
[core_1.Symbol.toStringTag]: `[interaction ${options.description}]`,
|
|
58
|
+
[core_1.Symbol.operation]: operation,
|
|
17
59
|
then(onFulfill, onReject) {
|
|
18
|
-
|
|
19
|
-
promise = this.action();
|
|
20
|
-
}
|
|
21
|
-
return promise.then(onFulfill, onReject);
|
|
60
|
+
return action().then(onFulfill, catchHalt(onReject));
|
|
22
61
|
},
|
|
23
62
|
catch(onReject) {
|
|
24
|
-
|
|
25
|
-
promise = this.action();
|
|
26
|
-
}
|
|
27
|
-
return promise.catch(onReject);
|
|
63
|
+
return action().catch(catchHalt(onReject));
|
|
28
64
|
},
|
|
29
65
|
finally(handler) {
|
|
30
|
-
|
|
31
|
-
promise = this.action();
|
|
32
|
-
}
|
|
33
|
-
return promise.finally(handler);
|
|
66
|
+
return action().finally(handler);
|
|
34
67
|
}
|
|
35
68
|
};
|
|
69
|
+
if (apply) {
|
|
70
|
+
return Object.assign(interaction, { apply });
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return interaction;
|
|
74
|
+
}
|
|
36
75
|
}
|
|
37
|
-
|
|
38
|
-
return createInteraction(description, globals_1.globals.wrapAction(description, action, 'interaction'));
|
|
39
|
-
}
|
|
40
|
-
exports.interaction = interaction;
|
|
41
|
-
function check(description, check) {
|
|
42
|
-
return { check() { return this.action(); }, ...createInteraction(description, globals_1.globals.wrapAction(description, check, 'check')) };
|
|
43
|
-
}
|
|
44
|
-
exports.check = check;
|
|
45
|
-
function interactionFilter(description, action, filter) {
|
|
46
|
-
return { apply: filter, ...interaction(description, action) };
|
|
47
|
-
}
|
|
48
|
-
exports.interactionFilter = interactionFilter;
|
|
49
|
-
function checkFilter(description, action, filter) {
|
|
50
|
-
return { apply: filter, ...check(description, action) };
|
|
51
|
-
}
|
|
52
|
-
exports.checkFilter = checkFilter;
|
|
76
|
+
exports.createInteraction = createInteraction;
|
|
53
77
|
//# sourceMappingURL=interaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../src/interaction.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../src/interaction.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/match.js
CHANGED
|
@@ -11,7 +11,9 @@ class Match {
|
|
|
11
11
|
this.locator = locator;
|
|
12
12
|
this.matchLocator = locator && new MatchLocator(element, locator);
|
|
13
13
|
this.matchFilter = new MatchFilter(element, filterSet);
|
|
14
|
-
|
|
14
|
+
}
|
|
15
|
+
get matches() {
|
|
16
|
+
return (this.matchLocator ? this.matchLocator.matches : true) && this.matchFilter.matches;
|
|
15
17
|
}
|
|
16
18
|
asTableHeader(name) {
|
|
17
19
|
if (this.matchLocator) {
|
|
@@ -48,7 +50,9 @@ class MatchLocator {
|
|
|
48
50
|
this.locator = locator;
|
|
49
51
|
this.expected = locator.value;
|
|
50
52
|
this.actual = locator.apply(element);
|
|
51
|
-
|
|
53
|
+
}
|
|
54
|
+
get matches() {
|
|
55
|
+
return matcher_1.applyMatcher(this.expected, this.actual);
|
|
52
56
|
}
|
|
53
57
|
formatActual() {
|
|
54
58
|
return JSON.stringify(this.actual);
|
|
@@ -68,7 +72,9 @@ class MatchFilter {
|
|
|
68
72
|
this.items = Object.entries(filter.all).map(([key, expected]) => {
|
|
69
73
|
return new MatchFilterItem(element, filter, key, expected);
|
|
70
74
|
});
|
|
71
|
-
|
|
75
|
+
}
|
|
76
|
+
get matches() {
|
|
77
|
+
return this.items.every((match) => match.matches);
|
|
72
78
|
}
|
|
73
79
|
asTableRow() {
|
|
74
80
|
return this.items.map((f) => f.description());
|
|
@@ -97,15 +103,19 @@ class MatchFilterItem {
|
|
|
97
103
|
this.filter = filter;
|
|
98
104
|
this.key = key;
|
|
99
105
|
this.expected = expected;
|
|
106
|
+
}
|
|
107
|
+
get matches() {
|
|
108
|
+
return matcher_1.applyMatcher(this.expected, this.actual);
|
|
109
|
+
}
|
|
110
|
+
get actual() {
|
|
100
111
|
if (this.filter.specification.filters && this.filter.specification.filters[this.key]) {
|
|
101
112
|
let definition = this.filter.specification.filters[this.key];
|
|
102
|
-
if (typeof
|
|
103
|
-
|
|
113
|
+
if (typeof definition === 'function') {
|
|
114
|
+
return definition(this.element);
|
|
104
115
|
}
|
|
105
116
|
else {
|
|
106
|
-
|
|
117
|
+
return definition.apply(this.element);
|
|
107
118
|
}
|
|
108
|
-
this.matches = matcher_1.applyMatcher(this.expected, this.actual);
|
|
109
119
|
}
|
|
110
120
|
else {
|
|
111
121
|
throw new Error(`interactor does not define a filter named ${JSON.stringify(this.key)}`);
|