Skip to content

Commit a7229e5

Browse files
Added React Component test
1 parent 0b547b3 commit a7229e5

File tree

2 files changed

+73
-33
lines changed

2 files changed

+73
-33
lines changed

typescript/test/react/integration/react-components.test.ts

Lines changed: 69 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,21 @@ describe("React Components test", () => {
1717
initNodeSampleProject(projectRootPath);
1818
initializeReactExtractor();
1919
const projects = await processProjects(projectRootPath);
20-
if(projects.length !== 1) {
21-
throw new Error("Processed " + projects.length + " projects. Should be 1 instead.")
20+
if (projects.length !== 1) {
21+
throw new Error("Processed " + projects.length + " projects. Should be 1 instead.");
2222
}
2323
result = projects[0].concepts;
2424

25-
if(!result.get(LCEReactComponent.conceptId)) {
26-
throw new Error("Could not find React components in result data.")
25+
if (!result.get(LCEReactComponent.conceptId)) {
26+
throw new Error("Could not find React components in result data.");
2727
}
2828

29-
for(const concept of (result.get(LCEReactComponent.conceptId) ?? [])) {
29+
for (const concept of result.get(LCEReactComponent.conceptId) ?? []) {
3030
const component: LCEReactComponent = concept as LCEReactComponent;
31-
if(!component.fqn.globalFqn) {
31+
if (!component.fqn.globalFqn) {
3232
throw new Error("React component has no globalFQN " + JSON.stringify(component));
3333
}
34-
if(components.has(component.fqn.globalFqn)) {
34+
if (components.has(component.fqn.globalFqn)) {
3535
throw new Error("Two React components with same global FQN were returned: " + component.fqn.globalFqn);
3636
}
3737
components.set(component.fqn.globalFqn, component);
@@ -43,7 +43,7 @@ describe("React Components test", () => {
4343
test("basic function component", async () => {
4444
const comp = components.get(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".BasicFunctionComponent'));
4545
expect(comp).toBeDefined();
46-
if(comp) {
46+
if (comp) {
4747
expect(comp.componentName).toBe("BasicFunctionComponent");
4848
expect(comp.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".BasicFunctionComponent'));
4949
expect(comp.renderedElements).toHaveLength(0);
@@ -53,7 +53,7 @@ describe("React Components test", () => {
5353
test("basic arrow function component", async () => {
5454
const comp = components.get(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".BasicArrowFunctionComponent'));
5555
expect(comp).toBeDefined();
56-
if(comp) {
56+
if (comp) {
5757
expect(comp.componentName).toBe("BasicArrowFunctionComponent");
5858
expect(comp.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".BasicArrowFunctionComponent'));
5959
expect(comp.renderedElements).toHaveLength(0);
@@ -63,7 +63,7 @@ describe("React Components test", () => {
6363
test("basic class component", async () => {
6464
const comp = components.get(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".BasicClassComponent'));
6565
expect(comp).toBeDefined();
66-
if(comp) {
66+
if (comp) {
6767
expect(comp.componentName).toBe("BasicClassComponent");
6868
expect(comp.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".BasicClassComponent'));
6969
expect(comp.renderedElements).toHaveLength(0);
@@ -73,27 +73,36 @@ describe("React Components test", () => {
7373
test("arrow function component with content", async () => {
7474
const comp = components.get(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ArrFuncComponentWithContent'));
7575
expect(comp).toBeDefined();
76-
if(comp) {
76+
if (comp) {
7777
expect(comp.componentName).toBe("ArrFuncComponentWithContent");
7878
expect(comp.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ArrFuncComponentWithContent'));
7979
expect(comp.renderedElements).toHaveLength(3);
80-
expectJSXDependency(comp, 'h1', 'h1', 1);
81-
expectJSXDependency(comp, 'h2', 'h2', 2);
82-
expectJSXDependency(comp, resolveGlobalFqn(projectRootPath, '"./src/main.tsx".SomeComponent'), 'SomeComponent', 1);
80+
expectJSXDependency(comp, "h1", "h1", 1);
81+
expectJSXDependency(comp, "h2", "h2", 2);
82+
expectJSXDependency(comp, resolveGlobalFqn(projectRootPath, '"./src/main.tsx".SomeComponent'), "SomeComponent", 1);
83+
}
84+
});
8385

86+
test("arrow function component with React.FC type", async () => {
87+
const comp = components.get(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ArrFuncComponentReactFC'));
88+
expect(comp).toBeDefined();
89+
if (comp) {
90+
expect(comp.componentName).toBe("ArrFuncComponentReactFC");
91+
expect(comp.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ArrFuncComponentReactFC'));
92+
expect(comp.renderedElements).toHaveLength(0);
8493
}
8594
});
8695

87-
test("class function component with content", async () => {
96+
test("class component with content", async () => {
8897
const comp = components.get(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ClassComponentWithContent'));
8998
expect(comp).toBeDefined();
90-
if(comp) {
99+
if (comp) {
91100
expect(comp.componentName).toBe("ClassComponentWithContent");
92101
expect(comp.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ClassComponentWithContent'));
93102
expect(comp.renderedElements).toHaveLength(3);
94-
expectJSXDependency(comp, 'h1', 'h1', 1);
95-
expectJSXDependency(comp, 'div', 'div', 1);
96-
expectJSXDependency(comp, resolveGlobalFqn(projectRootPath, '"./src/main.tsx".SomeComponent'), 'SomeComponent', 3);
103+
expectJSXDependency(comp, "h1", "h1", 1);
104+
expectJSXDependency(comp, "div", "div", 1);
105+
expectJSXDependency(comp, resolveGlobalFqn(projectRootPath, '"./src/main.tsx".SomeComponent'), "SomeComponent", 3);
97106
}
98107
});
99108

@@ -102,19 +111,30 @@ describe("React Components test", () => {
102111
const comp = components.get(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ComponentWithUnnamedIndexDefaultComponent'));
103112

104113
expect(compDef).toBeDefined();
105-
if(compDef) {
114+
if (compDef) {
106115
expect(compDef.componentName).toBe("UnnamedIndexComponent");
107116
expect(compDef.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/components/UnnamedIndexComponent".default'));
108117
expect(compDef.renderedElements).toHaveLength(1);
109-
expectJSXDependency(compDef, 'div', 'div', 1);
118+
expectJSXDependency(compDef, "div", "div", 1);
110119
}
111120
expect(comp).toBeDefined();
112-
if(comp) {
121+
if (comp) {
113122
expect(comp.componentName).toBe("ComponentWithUnnamedIndexDefaultComponent");
114123
expect(comp.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ComponentWithUnnamedIndexDefaultComponent'));
115124
expect(comp.renderedElements).toHaveLength(1);
116-
expectJSXDependency(comp, resolveGlobalFqn(projectRootPath, '"./src/components/UnnamedIndexComponent".default'), 'UnnamedIndexComponent', 1);
117-
expectDependency(projectRootPath, dependencies, '"./src/main.tsx".ComponentWithUnnamedIndexDefaultComponent', resolveGlobalFqn(projectRootPath, '"./src/components/UnnamedIndexComponent".default'), 1);
125+
expectJSXDependency(
126+
comp,
127+
resolveGlobalFqn(projectRootPath, '"./src/components/UnnamedIndexComponent".default'),
128+
"UnnamedIndexComponent",
129+
1,
130+
);
131+
expectDependency(
132+
projectRootPath,
133+
dependencies,
134+
'"./src/main.tsx".ComponentWithUnnamedIndexDefaultComponent',
135+
resolveGlobalFqn(projectRootPath, '"./src/components/UnnamedIndexComponent".default'),
136+
1,
137+
);
118138
}
119139
});
120140

@@ -124,28 +144,44 @@ describe("React Components test", () => {
124144
const compAlias = components.get(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ComponentWithNamedAliasIndexDefaultComponent'));
125145

126146
expect(compDef).toBeDefined();
127-
if(compDef) {
147+
if (compDef) {
128148
expect(compDef.componentName).toBe("MyNamedIndexComponent");
129149
expect(compDef.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'));
130150
expect(compDef.renderedElements).toHaveLength(1);
131-
expectJSXDependency(compDef, 'div', 'div', 1);
151+
expectJSXDependency(compDef, "div", "div", 1);
132152
}
133153
expect(comp).toBeDefined();
134-
if(comp) {
154+
if (comp) {
135155
expect(comp.componentName).toBe("ComponentWithNamedIndexDefaultComponent");
136156
expect(comp.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ComponentWithNamedIndexDefaultComponent'));
137157
expect(comp.renderedElements).toHaveLength(1);
138-
expectJSXDependency(comp, resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'), 'NamedIndexComponent', 1);
139-
expectDependency(projectRootPath, dependencies, '"./src/main.tsx".ComponentWithNamedIndexDefaultComponent', resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'), 1);
158+
expectJSXDependency(comp, resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'), "NamedIndexComponent", 1);
159+
expectDependency(
160+
projectRootPath,
161+
dependencies,
162+
'"./src/main.tsx".ComponentWithNamedIndexDefaultComponent',
163+
resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'),
164+
1,
165+
);
140166
}
141167
expect(compAlias).toBeDefined();
142-
if(compAlias) {
168+
if (compAlias) {
143169
expect(compAlias.componentName).toBe("ComponentWithNamedAliasIndexDefaultComponent");
144170
expect(compAlias.fqn.globalFqn).toBe(resolveGlobalFqn(projectRootPath, '"./src/main.tsx".ComponentWithNamedAliasIndexDefaultComponent'));
145171
expect(compAlias.renderedElements).toHaveLength(1);
146-
expectJSXDependency(compAlias, resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'), 'MyNamedIndexComponent', 1);
147-
expectDependency(projectRootPath, dependencies, '"./src/main.tsx".ComponentWithNamedAliasIndexDefaultComponent', resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'), 1);
172+
expectJSXDependency(
173+
compAlias,
174+
resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'),
175+
"MyNamedIndexComponent",
176+
1,
177+
);
178+
expectDependency(
179+
projectRootPath,
180+
dependencies,
181+
'"./src/main.tsx".ComponentWithNamedAliasIndexDefaultComponent',
182+
resolveGlobalFqn(projectRootPath, '"./src/components/NamedIndexComponent".default'),
183+
1,
184+
);
148185
}
149186
});
150-
151187
});

typescript/test/react/integration/sample-projects/components/src/main.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ const ArrFuncComponentWithContent = () => {
3030
</>;
3131
}
3232

33+
const ArrFuncComponentReactFC: React.FC<void> = () => {
34+
return <></>;
35+
}
36+
3337
class ClassComponentWithContent extends React.Component<unknown, {}> {
3438
public render(): ReactNode {
3539
return <>

0 commit comments

Comments
 (0)