Skip to content

Commit d5089b9

Browse files
Pranav-yadavcortinico
authored andcommitted
add tests for getTypeArgumentParamsFromDeclaration & getNativeComponentType fn's
1 parent 6d355a1 commit d5089b9

File tree

1 file changed

+179
-0
lines changed

1 file changed

+179
-0
lines changed

packages/react-native-codegen/src/parsers/__tests__/parsers-test.js

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,97 @@ describe('FlowParser', () => {
165165
).toEqual(expected);
166166
});
167167
});
168+
169+
describe('getTypeArgumentParamsFromDeclaration', () => {
170+
it('returns type arguments params from declaration', () => {
171+
const declaration = {
172+
type: 'TypeAlias',
173+
typeArguments: {
174+
type: 'TypeParameterDeclaration',
175+
params: [
176+
{
177+
type: 'TypeParameter',
178+
name: 'T',
179+
},
180+
],
181+
},
182+
};
183+
184+
const expected = [
185+
{
186+
type: 'TypeParameter',
187+
name: 'T',
188+
},
189+
];
190+
191+
expect(parser.getTypeArgumentParamsFromDeclaration(declaration)).toEqual(
192+
expected,
193+
);
194+
});
195+
196+
it('returns undefined if declaration type argument params is Invalid', () => {
197+
const declaration = {
198+
type: 'TypeAlias',
199+
typeArguments: {
200+
type: 'TypeParameterDeclaration',
201+
},
202+
};
203+
204+
expect(parser.getTypeArgumentParamsFromDeclaration(declaration)).toEqual(
205+
undefined,
206+
);
207+
});
208+
});
209+
210+
describe('getNativeComponentType', () => {
211+
it('returns native component type when typeArgumentParams & funcArgumentParams are valid', () => {
212+
const typeArgumentParams = [
213+
{
214+
type: 'TypeParameter',
215+
name: 'T',
216+
id: {
217+
name: 'T',
218+
},
219+
},
220+
];
221+
222+
const funcArgumentParams = [
223+
{
224+
type: 'StringLiteral',
225+
value: 'componentName',
226+
},
227+
];
228+
229+
const expected = {
230+
propsTypeName: 'T' /* typeArgumentParams[0].id.name */,
231+
componentName: 'componentName' /* funcArgumentParams[0].value */,
232+
};
233+
234+
expect(
235+
parser.getNativeComponentType(typeArgumentParams, funcArgumentParams),
236+
).toEqual(expected);
237+
});
238+
239+
it('returns undefined when typeArgumentParams & funcArgumentParams are invalid', () => {
240+
const typeArgumentParams = [
241+
{
242+
type: 'TypeParameter',
243+
name: 'T',
244+
id: {},
245+
},
246+
];
247+
const funcArgumentParams = [{}];
248+
249+
const expected = {
250+
propsTypeName: undefined /* typeArgumentParams[0].id.name */,
251+
componentName: undefined /* funcArgumentParams[0].value */,
252+
};
253+
254+
expect(
255+
parser.getNativeComponentType(typeArgumentParams, funcArgumentParams),
256+
).toEqual(expected);
257+
});
258+
});
168259
});
169260

170261
describe('TypeScriptParser', () => {
@@ -326,4 +417,92 @@ describe('TypeScriptParser', () => {
326417
).toEqual(expected);
327418
});
328419
});
420+
421+
describe('getTypeArgumentParamsFromDeclaration', () => {
422+
it('returns type argument params from declaration', () => {
423+
const declaration = {
424+
type: 'TypeAlias',
425+
typeParameters: {
426+
type: 'TypeParameterDeclaration',
427+
params: [
428+
{
429+
type: 'TypeParameter',
430+
name: 'T',
431+
},
432+
],
433+
},
434+
};
435+
436+
const expected = [
437+
{
438+
type: 'TypeParameter',
439+
name: 'T',
440+
},
441+
];
442+
443+
expect(parser.getTypeArgumentParamsFromDeclaration(declaration)).toEqual(
444+
expected,
445+
);
446+
});
447+
448+
it('returns undefined if declaration type arguments params is Invalid', () => {
449+
const declaration = {
450+
type: 'TypeAlias',
451+
typeParameters: {},
452+
};
453+
454+
expect(parser.getTypeArgumentParamsFromDeclaration(declaration)).toEqual(
455+
undefined,
456+
);
457+
});
458+
});
459+
460+
describe('getNativeComponentType', () => {
461+
it('returns native component type when typeArgumentParams & funcArgumentParams are valid', () => {
462+
const typeArgumentParams = [
463+
{
464+
typeName: {
465+
type: 'Identifier',
466+
name: 'T',
467+
},
468+
},
469+
];
470+
471+
const funcArgumentParams = [
472+
{
473+
type: 'ObjectTypeAnnotation',
474+
value: 'StringTypeAnnotation',
475+
},
476+
];
477+
478+
const expected = {
479+
propsTypeName: 'T' /* typeArgumentParams[0].typeName.name */,
480+
componentName: 'StringTypeAnnotation' /* funcArgumentParams[0].value */,
481+
};
482+
483+
expect(
484+
parser.getNativeComponentType(typeArgumentParams, funcArgumentParams),
485+
).toEqual(expected);
486+
});
487+
488+
it('returns undefined when typeArgumentParams & funcArgumentParams are invalid', () => {
489+
const typeArgumentParams = [
490+
{
491+
typeName: {
492+
type: 'Invalid',
493+
},
494+
},
495+
];
496+
const funcArgumentParams = [{}];
497+
498+
const expected = {
499+
propsTypeName: undefined /* typeArgumentParams[0].typeName.name */,
500+
componentName: undefined /* funcArgumentParams[0].value */,
501+
};
502+
503+
expect(
504+
parser.getNativeComponentType(typeArgumentParams, funcArgumentParams),
505+
).toEqual(expected);
506+
});
507+
});
329508
});

0 commit comments

Comments
 (0)