@@ -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
170261describe ( '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