Skip to content

Commit 50f61d4

Browse files
authored
fix: MultiElementWrapper support (#91)
1 parent 0dc32a0 commit 50f61d4

File tree

6 files changed

+180
-128
lines changed

6 files changed

+180
-128
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33
export class ElementWrapper {}
4+
5+
// this generic type simulates MultiElementWrapper from test-utils-core
6+
export class MultiElementWrapper<T extends ElementWrapper> {}

fixtures/test-utils/exports/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ export { AlertWrapper };
55
export { ButtonWrapper } from './button';
66
export { CardsWrapper } from './cards';
77
export { DropdownWrapper } from './dropdown';
8+
export { RadioGroupWrapper } from './radio-group';
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
import { ElementWrapper, MultiElementWrapper } from './core';
5+
6+
class RadioButtonWrapper extends ElementWrapper {
7+
findLabel() {
8+
return new ElementWrapper();
9+
}
10+
}
11+
12+
export class RadioGroupWrapper extends ElementWrapper {
13+
findItems() {
14+
return new MultiElementWrapper<RadioButtonWrapper>();
15+
}
16+
}

src/test-utils-new/extractor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ function findDependencyType(
134134
}
135135

136136
const typeName = checker.symbolToString(symbol);
137-
if (typeName === 'Array') {
137+
if (typeName === 'Array' || typeName === 'MultiElementWrapper') {
138138
const itemType = checker.getTypeArguments(type as ts.TypeReference)[0];
139139
return findDependencyType(itemType, checker);
140140
}

test/test-utils/__snapshots__/doc-generation.test.ts.snap

Lines changed: 156 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -108,139 +108,180 @@ exports[`Generate documentation > deal with more complex types 1`] = `
108108
]
109109
`;
110110

111-
exports[`Generate documentation > deal with re-exports > alert wrapper methods 1`] = `
111+
exports[`Generate documentation > deal with re-exports 1`] = `
112112
[
113113
{
114-
"description": undefined,
115-
"inheritedFrom": undefined,
116-
"name": "findContent",
117-
"parameters": [],
118-
"returnType": {
119-
"isNullable": false,
120-
"name": "ElementWrapper",
121-
"typeArguments": undefined,
122-
},
123-
},
124-
]
125-
`;
126-
127-
exports[`Generate documentation > deal with re-exports > button wrapper methods 1`] = `
128-
[
129-
{
130-
"description": undefined,
131-
"inheritedFrom": undefined,
132-
"name": "findText",
133-
"parameters": [],
134-
"returnType": {
135-
"isNullable": false,
136-
"name": "ElementWrapper",
137-
"typeArguments": undefined,
138-
},
114+
"methods": [
115+
{
116+
"description": undefined,
117+
"inheritedFrom": undefined,
118+
"name": "findContent",
119+
"parameters": [],
120+
"returnType": {
121+
"isNullable": false,
122+
"name": "ElementWrapper",
123+
"typeArguments": undefined,
124+
},
125+
},
126+
],
127+
"name": "AlertWrapper",
139128
},
140-
]
141-
`;
142-
143-
exports[`Generate documentation > deal with re-exports > card item wrapper methods 1`] = `
144-
[
145129
{
146-
"description": undefined,
147-
"inheritedFrom": undefined,
148-
"name": "findContent",
149-
"parameters": [],
150-
"returnType": {
151-
"isNullable": false,
152-
"name": "ElementWrapper",
153-
"typeArguments": undefined,
154-
},
130+
"methods": [
131+
{
132+
"description": undefined,
133+
"inheritedFrom": undefined,
134+
"name": "findText",
135+
"parameters": [],
136+
"returnType": {
137+
"isNullable": false,
138+
"name": "ElementWrapper",
139+
"typeArguments": undefined,
140+
},
141+
},
142+
],
143+
"name": "ButtonWrapper",
155144
},
156145
{
157-
"description": undefined,
158-
"inheritedFrom": undefined,
159-
"name": "findHeader",
160-
"parameters": [],
161-
"returnType": {
162-
"isNullable": false,
163-
"name": "ElementWrapper",
164-
"typeArguments": undefined,
165-
},
146+
"methods": [
147+
{
148+
"description": undefined,
149+
"inheritedFrom": undefined,
150+
"name": "findItems",
151+
"parameters": [],
152+
"returnType": {
153+
"isNullable": false,
154+
"name": "Array",
155+
"typeArguments": [
156+
{
157+
"name": "CardWrapper",
158+
},
159+
],
160+
},
161+
},
162+
],
163+
"name": "CardsWrapper",
166164
},
167-
]
168-
`;
169-
170-
exports[`Generate documentation > deal with re-exports > cards wrapper methods 1`] = `
171-
[
172165
{
173-
"description": undefined,
174-
"inheritedFrom": undefined,
175-
"name": "findItems",
176-
"parameters": [],
177-
"returnType": {
178-
"isNullable": false,
179-
"name": "Array",
180-
"typeArguments": [
181-
{
182-
"name": "CardWrapper",
166+
"methods": [
167+
{
168+
"description": undefined,
169+
"inheritedFrom": undefined,
170+
"name": "findContent",
171+
"parameters": [],
172+
"returnType": {
173+
"isNullable": false,
174+
"name": "ElementWrapper",
175+
"typeArguments": undefined,
183176
},
184-
],
185-
},
177+
},
178+
{
179+
"description": undefined,
180+
"inheritedFrom": undefined,
181+
"name": "findHeader",
182+
"parameters": [],
183+
"returnType": {
184+
"isNullable": false,
185+
"name": "ElementWrapper",
186+
"typeArguments": undefined,
187+
},
188+
},
189+
],
190+
"name": "CardWrapper",
186191
},
187-
]
188-
`;
189-
190-
exports[`Generate documentation > deal with re-exports > dropdown wrapper methods 1`] = `
191-
[
192192
{
193-
"description": undefined,
194-
"inheritedFrom": undefined,
195-
"name": "findHighlightedOption",
196-
"parameters": [],
197-
"returnType": {
198-
"isNullable": false,
199-
"name": "OptionWrapper",
200-
"typeArguments": undefined,
201-
},
193+
"methods": [
194+
{
195+
"description": undefined,
196+
"inheritedFrom": undefined,
197+
"name": "findHighlightedOption",
198+
"parameters": [],
199+
"returnType": {
200+
"isNullable": false,
201+
"name": "OptionWrapper",
202+
"typeArguments": undefined,
203+
},
204+
},
205+
{
206+
"description": undefined,
207+
"inheritedFrom": undefined,
208+
"name": "findItemGroup",
209+
"parameters": [],
210+
"returnType": {
211+
"isNullable": false,
212+
"name": "DropdownWrapper",
213+
"typeArguments": undefined,
214+
},
215+
},
216+
{
217+
"description": undefined,
218+
"inheritedFrom": undefined,
219+
"name": "findItems",
220+
"parameters": [],
221+
"returnType": {
222+
"isNullable": false,
223+
"name": "Array",
224+
"typeArguments": [
225+
{
226+
"name": "OptionWrapper",
227+
},
228+
],
229+
},
230+
},
231+
],
232+
"name": "DropdownWrapper",
202233
},
203234
{
204-
"description": undefined,
205-
"inheritedFrom": undefined,
206-
"name": "findItemGroup",
207-
"parameters": [],
208-
"returnType": {
209-
"isNullable": false,
210-
"name": "DropdownWrapper",
211-
"typeArguments": undefined,
212-
},
235+
"methods": [
236+
{
237+
"description": undefined,
238+
"inheritedFrom": undefined,
239+
"name": "findLabel",
240+
"parameters": [],
241+
"returnType": {
242+
"isNullable": true,
243+
"name": "ElementWrapper",
244+
"typeArguments": undefined,
245+
},
246+
},
247+
],
248+
"name": "OptionWrapper",
213249
},
214250
{
215-
"description": undefined,
216-
"inheritedFrom": undefined,
217-
"name": "findItems",
218-
"parameters": [],
219-
"returnType": {
220-
"isNullable": false,
221-
"name": "Array",
222-
"typeArguments": [
223-
{
224-
"name": "OptionWrapper",
251+
"methods": [
252+
{
253+
"description": undefined,
254+
"inheritedFrom": undefined,
255+
"name": "findItems",
256+
"parameters": [],
257+
"returnType": {
258+
"isNullable": false,
259+
"name": "MultiElementWrapper",
260+
"typeArguments": [
261+
{
262+
"name": "RadioButtonWrapper",
263+
},
264+
],
225265
},
226-
],
227-
},
266+
},
267+
],
268+
"name": "RadioGroupWrapper",
228269
},
229-
]
230-
`;
231-
232-
exports[`Generate documentation > deal with re-exports > option wrapper methods 1`] = `
233-
[
234270
{
235-
"description": undefined,
236-
"inheritedFrom": undefined,
237-
"name": "findLabel",
238-
"parameters": [],
239-
"returnType": {
240-
"isNullable": true,
241-
"name": "ElementWrapper",
242-
"typeArguments": undefined,
243-
},
271+
"methods": [
272+
{
273+
"description": undefined,
274+
"inheritedFrom": undefined,
275+
"name": "findLabel",
276+
"parameters": [],
277+
"returnType": {
278+
"isNullable": false,
279+
"name": "ElementWrapper",
280+
"typeArguments": undefined,
281+
},
282+
},
283+
],
284+
"name": "RadioButtonWrapper",
244285
},
245286
]
246287
`;

test/test-utils/doc-generation.test.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,19 +92,10 @@ describe('Generate documentation', () => {
9292
'CardWrapper',
9393
'DropdownWrapper',
9494
'OptionWrapper',
95+
'RadioGroupWrapper',
96+
'RadioButtonWrapper',
9597
]);
96-
const alertWrapper = results.find(classDoc => classDoc.name === 'AlertWrapper')!;
97-
expect(alertWrapper.methods).toMatchSnapshot('alert wrapper methods');
98-
const buttonWrapper = results.find(classDoc => classDoc.name === 'ButtonWrapper')!;
99-
expect(buttonWrapper.methods).toMatchSnapshot('button wrapper methods');
100-
const cardsWrapper = results.find(classDoc => classDoc.name === 'CardsWrapper')!;
101-
expect(cardsWrapper.methods).toMatchSnapshot('cards wrapper methods');
102-
const cardItemWrapper = results.find(classDoc => classDoc.name === 'CardWrapper')!;
103-
expect(cardItemWrapper.methods).toMatchSnapshot('card item wrapper methods');
104-
const dropdownWrapper = results.find(classDoc => classDoc.name === 'DropdownWrapper')!;
105-
expect(dropdownWrapper.methods).toMatchSnapshot('dropdown wrapper methods');
106-
const optionWrapper = results.find(classDoc => classDoc.name === 'OptionWrapper')!;
107-
expect(optionWrapper.methods).toMatchSnapshot('option wrapper methods');
98+
expect(results).toMatchSnapshot();
10899
});
109100

110101
test('default value rendering', () => {

0 commit comments

Comments
 (0)