Skip to content

Commit 6b693f0

Browse files
authored
Unify xpath expressions under XPathDefinitions class (#113)
Fixes #112 Signed-off-by: Zbynek Cervinka <zcervink@redhat.com>
1 parent d7b6a52 commit 6b693f0

33 files changed

+218
-107
lines changed

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/FlatWelcomeFrame.java

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.redhat.devtools.intellij.commonuitest.fixtures.dialogs.information.TipDialog;
3131
import com.redhat.devtools.intellij.commonuitest.fixtures.dialogs.settings.SettingsDialog;
3232
import com.redhat.devtools.intellij.commonuitest.fixtures.dialogs.settings.pages.NotificationsPage;
33+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
3334
import org.apache.commons.io.FileUtils;
3435
import org.jetbrains.annotations.NotNull;
3536

@@ -49,12 +50,10 @@
4950
*
5051
* @author zcervink@redhat.com
5152
*/
52-
@DefaultXpath(by = "FlatWelcomeFrame type", xpath = "//div[@class='FlatWelcomeFrame']")
53+
@DefaultXpath(by = "FlatWelcomeFrame type", xpath = XPathDefinitions.FLAT_WELCOME_FRAME)
5354
@FixtureName(name = "Welcome To IntelliJ IDEA Dialog")
5455
public class FlatWelcomeFrame extends CommonContainerFixture {
5556
private static final Logger LOGGER = Logger.getLogger(FlatWelcomeFrame.class.getName());
56-
private static final String JBLIST_XPATH = "//div[@class='JBList']";
57-
private static final String TREE_XPATH = "//div[@class='Tree']";
5857
private static final String PROJECTS_BUTTON = "Projects";
5958
private final RemoteRobot remoteRobot;
6059
private final UITestRunner.IdeaVersion intelliJVersion;
@@ -94,8 +93,7 @@ public void clickOnLink(String label) {
9493
* Clear the workspace by deleting the content of the IdeaProjects folder and clearing all the projects' links in the 'Welcome to IntelliJ IDEA' dialog
9594
*/
9695
public void clearWorkspace() {
97-
List<JListFixture> jListFixtures = jLists(byXpath("//div[@accessiblename='Recent Projects']"));
98-
96+
List<JListFixture> jListFixtures = jLists(byXpath(XPathDefinitions.RECENT_PROJECTS));
9997
for (int i = 0; i < projectsCount(); i++) {
10098
JListFixture recentProjectsList = jListFixtures.get(0);
10199
recentProjectsList.runJs("const horizontal_offset = component.getWidth()-22;\n" +
@@ -150,13 +148,13 @@ public void openSettingsDialog() {
150148
HeavyWeightWindowFixture heavyWeightWindowFixture = find(HeavyWeightWindowFixture.class, Duration.ofSeconds(5));
151149
heavyWeightWindowFixture.findText("Preferences").click();
152150
} else if (ideaVersion <= 20212) {
153-
JListFixture jListFixture = remoteRobot.find(JListFixture.class, byXpath(JBLIST_XPATH));
151+
JListFixture jListFixture = remoteRobot.find(JListFixture.class, byXpath(XPathDefinitions.JBLIST));
154152
jListFixture.clickItem("Customize", false);
155-
remoteRobot.find(ContainerFixture.class, byXpath("//div[@class='DialogPanel']")).findText("All settings" + '\u2026').click();
153+
remoteRobot.find(ContainerFixture.class, byXpath(XPathDefinitions.DIALOG_PANEL)).findText("All settings" + '\u2026').click();
156154
} else {
157-
JTreeFixture jTreeFixture = remoteRobot.find(JTreeFixture.class, byXpath(TREE_XPATH));
155+
JTreeFixture jTreeFixture = remoteRobot.find(JTreeFixture.class, byXpath(XPathDefinitions.TREE));
158156
jTreeFixture.findText("Customize").click();
159-
remoteRobot.find(ContainerFixture.class, byXpath("//div[@class='DialogPanel']")).findText("All settings" + '\u2026').click();
157+
remoteRobot.find(ContainerFixture.class, byXpath(XPathDefinitions.DIALOG_PANEL)).findText("All settings" + '\u2026').click();
160158
}
161159
}
162160

@@ -175,13 +173,13 @@ public TipDialog openTipDialog() {
175173
HeavyWeightWindowFixture heavyWeightWindowFixture = find(HeavyWeightWindowFixture.class, Duration.ofSeconds(5));
176174
heavyWeightWindowFixture.findText("Tip of the Day").click();
177175
} else if (ideaVersion <= 20212) {
178-
JListFixture jListFixture = remoteRobot.find(JListFixture.class, byXpath(JBLIST_XPATH));
176+
JListFixture jListFixture = remoteRobot.find(JListFixture.class, byXpath(XPathDefinitions.JBLIST));
179177
jListFixture.findText("Learn IntelliJ IDEA").click();
180-
remoteRobot.find(JLabelFixture.class, byXpath("//div[@text='Tip of the Day']")).click();
178+
remoteRobot.find(JLabelFixture.class, byXpath(XPathDefinitions.TIP_DIALOGA_2)).click();
181179
} else {
182-
JTreeFixture jTreeFixture = remoteRobot.find(JTreeFixture.class, byXpath(TREE_XPATH));
180+
JTreeFixture jTreeFixture = remoteRobot.find(JTreeFixture.class, byXpath(XPathDefinitions.TREE));
183181
jTreeFixture.findText("Learn IntelliJ IDEA").click();
184-
remoteRobot.find(JLabelFixture.class, byXpath("//div[@text='Tip of the Day']")).click();
182+
remoteRobot.find(JLabelFixture.class, byXpath(XPathDefinitions.TIP_DIALOGA_2)).click();
185183
}
186184

187185
return remoteRobot.find(TipDialog.class, Duration.ofSeconds(10));
@@ -199,10 +197,10 @@ public void disableNotifications() {
199197
settingsDialog.ok();
200198

201199
if (ideaVersion >= 20213) {
202-
JTreeFixture jTreeFixture = remoteRobot.find(JTreeFixture.class, byXpath(TREE_XPATH));
200+
JTreeFixture jTreeFixture = remoteRobot.find(JTreeFixture.class, byXpath(XPathDefinitions.TREE));
203201
jTreeFixture.findText(PROJECTS_BUTTON).click();
204202
} else if (ideaVersion >= 20203) {
205-
JListFixture jListFixture = remoteRobot.find(JListFixture.class, byXpath(JBLIST_XPATH));
203+
JListFixture jListFixture = remoteRobot.find(JListFixture.class, byXpath(XPathDefinitions.JBLIST));
206204
jListFixture.clickItem(PROJECTS_BUTTON, false);
207205
}
208206
}
@@ -216,18 +214,18 @@ public void preventTipDialogFromOpening() {
216214
tipDialog.close();
217215

218216
if (ideaVersion >= 20213) {
219-
JTreeFixture jTreeFixture = remoteRobot.find(JTreeFixture.class, byXpath(TREE_XPATH));
217+
JTreeFixture jTreeFixture = remoteRobot.find(JTreeFixture.class, byXpath(XPathDefinitions.TREE));
220218
jTreeFixture.findText(PROJECTS_BUTTON).click();
221219
} else if (ideaVersion >= 20203) {
222-
JListFixture jListFixture = remoteRobot.find(JListFixture.class, byXpath(JBLIST_XPATH));
220+
JListFixture jListFixture = remoteRobot.find(JListFixture.class, byXpath(XPathDefinitions.JBLIST));
223221
jListFixture.clickItem(PROJECTS_BUTTON, false);
224222
}
225223
}
226224

227225
private int projectsCount() {
228226
try {
229-
ContainerFixture projectWrapper = find(ContainerFixture.class, byXpath("//div[@class='NewRecentProjectPanel']"));
230-
JListFixture projectList = projectWrapper.find(JListFixture.class, byXpath("//div[@class='MyList']"));
227+
ContainerFixture projectWrapper = find(ContainerFixture.class, byXpath(XPathDefinitions.NEW_RECENT_PROJECT_PANEL));
228+
JListFixture projectList = projectWrapper.find(JListFixture.class, byXpath(XPathDefinitions.MY_LIST));
231229
return projectList.collectItems().size();
232230
} catch (WaitForConditionTimeoutException e) {
233231
return 0;
@@ -236,13 +234,13 @@ private int projectsCount() {
236234

237235
// Works for IntelliJ Idea 2020.3+
238236
private JButtonFixture welcomeFrameLink(String label) {
239-
if (UtilsKt.hasAnyComponent(this, byXpath("//div[@class='NewRecentProjectPanel']"))) {
240-
return button(byXpath("//div[@class='JBOptionButton' and @text='" + label + "']"), Duration.ofSeconds(2));
237+
if (UtilsKt.hasAnyComponent(this, byXpath(XPathDefinitions.NEW_RECENT_PROJECT_PANEL))) {
238+
return button(byXpath(XPathDefinitions.JBOptionButton(label)), Duration.ofSeconds(2));
241239
}
242-
return button(byXpath("//div[@class='NonOpaquePanel'][./div[@text='" + label + "']]"), Duration.ofSeconds(2));
240+
return button(byXpath(XPathDefinitions.NonOpaquePanel(label)), Duration.ofSeconds(2));
243241
}
244242

245243
private ComponentFixture ideErrorsIcon() {
246-
return find(ComponentFixture.class, byXpath("//div[@class='IdeErrorsIcon']"), Duration.ofSeconds(10));
244+
return find(ComponentFixture.class, byXpath(XPathDefinitions.IDE_ERROR_ICON), Duration.ofSeconds(10));
247245
}
248246
}

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/errors/IdeFatalErrorsDialog.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515
import com.intellij.remoterobot.fixtures.CommonContainerFixture;
1616
import com.intellij.remoterobot.fixtures.DefaultXpath;
1717
import com.intellij.remoterobot.fixtures.FixtureName;
18-
import com.redhat.devtools.intellij.commonuitest.utils.labels.ButtonLabels;
18+
import com.redhat.devtools.intellij.commonuitest.utils.constans.ButtonLabels;
19+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
1920
import org.jetbrains.annotations.NotNull;
2021

2122
/**
2223
* IDE Fatal Errors dialog fixture
2324
*
2425
* @author zcervink@redhat.com
2526
*/
26-
@DefaultXpath(by = "MyDialog type", xpath = "//div[@accessiblename='IDE Fatal Errors' and @class='MyDialog']")
27+
@DefaultXpath(by = "MyDialog type", xpath = XPathDefinitions.IDE_FATAL_ERRORS_DIALOG)
2728
@FixtureName(name = "IDE Fatal Errors Dialog")
2829
public class IdeFatalErrorsDialog extends CommonContainerFixture {
2930
public IdeFatalErrorsDialog(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/information/CodeWithMeDialog.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
import com.intellij.remoterobot.fixtures.DefaultXpath;
1717
import com.intellij.remoterobot.fixtures.FixtureName;
1818
import com.intellij.remoterobot.utils.WaitForConditionTimeoutException;
19-
import com.redhat.devtools.intellij.commonuitest.utils.labels.ButtonLabels;
19+
import com.redhat.devtools.intellij.commonuitest.utils.constans.ButtonLabels;
20+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
2021
import org.jetbrains.annotations.NotNull;
2122

2223
import java.time.Duration;
@@ -28,7 +29,7 @@
2829
*
2930
* @author zcervink@redhat.com
3031
*/
31-
@DefaultXpath(by = "CodeWithMe type", xpath = "//div[@class='Wrapper'][.//div[@class='JBLabel']]//div[@class='JPanel']")
32+
@DefaultXpath(by = "CodeWithMe type", xpath = XPathDefinitions.CODE_WITH_ME_JPANEL)
3233
@FixtureName(name = "Code With Me Dialog")
3334
public class CodeWithMeDialog extends CommonContainerFixture {
3435
private static final Logger LOGGER = Logger.getLogger(CodeWithMeDialog.class.getName());

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/information/ProjectStructureDialog.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515
import com.intellij.remoterobot.fixtures.CommonContainerFixture;
1616
import com.intellij.remoterobot.fixtures.DefaultXpath;
1717
import com.intellij.remoterobot.fixtures.FixtureName;
18-
import com.redhat.devtools.intellij.commonuitest.utils.labels.ButtonLabels;
18+
import com.redhat.devtools.intellij.commonuitest.utils.constans.ButtonLabels;
19+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
1920
import org.jetbrains.annotations.NotNull;
2021

2122
/**
2223
* Project Structure dialog fixture
2324
*
2425
* @author olkornii@redhat.com
2526
*/
26-
@DefaultXpath(by = "MyDialog type", xpath = "//div[@accessiblename='Project Structure' and @class='MyDialog']")
27+
@DefaultXpath(by = "MyDialog type", xpath = XPathDefinitions.PROJECT_STRUCTURE_DIALOG)
2728
@FixtureName(name = "Project Structure Dialog")
2829
public class ProjectStructureDialog extends CommonContainerFixture {
2930
public ProjectStructureDialog(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/information/TipDialog.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@
1616
import com.intellij.remoterobot.fixtures.DefaultXpath;
1717
import com.intellij.remoterobot.fixtures.FixtureName;
1818
import com.intellij.remoterobot.fixtures.JCheckboxFixture;
19-
import com.redhat.devtools.intellij.commonuitest.utils.labels.ButtonLabels;
19+
import com.redhat.devtools.intellij.commonuitest.utils.constans.ButtonLabels;
20+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
2021
import org.jetbrains.annotations.NotNull;
2122

2223
/**
2324
* Tip of the Day dialog fixture
2425
*
2526
* @author zcervink@redhat.com
2627
*/
27-
@DefaultXpath(by = "MyDialog type", xpath = "//div[@accessiblename='Tip of the Day' and @class='MyDialog']")
28+
@DefaultXpath(by = "MyDialog type", xpath = XPathDefinitions.TIP_DIALOG)
2829
@FixtureName(name = "Tip Of The Day Dialog")
2930
public class TipDialog extends CommonContainerFixture {
3031
public TipDialog(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/navigation/SearchEverywherePopup.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.intellij.remoterobot.utils.Keyboard;
2222
import com.intellij.remoterobot.utils.WaitForConditionTimeoutException;
2323
import com.redhat.devtools.intellij.commonuitest.exceptions.UITestException;
24+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
2425
import com.redhat.devtools.intellij.commonuitest.utils.texttranformation.TextUtils;
2526
import org.jetbrains.annotations.NotNull;
2627

@@ -36,7 +37,7 @@
3637
*
3738
* @author zcervink@redhat.com
3839
*/
39-
@DefaultXpath(by = "SearchEverywhereUI type", xpath = "//div[@accessiblename='Search everywhere' and @class='SearchEverywhereUI']")
40+
@DefaultXpath(by = "SearchEverywhereUI type", xpath = XPathDefinitions.SEARCH_EVERYWHERE_POPUP)
4041
@FixtureName(name = "Search Everywhere Popup")
4142
public class SearchEverywherePopup extends CommonContainerFixture {
4243
private RemoteRobot remoteRobot;
@@ -53,7 +54,7 @@ public SearchEverywherePopup(@NotNull RemoteRobot remoteRobot, @NotNull RemoteCo
5354
*/
5455
public void activateTab(String tabName) {
5556
try {
56-
button(byXpath("//div[@text='" + tabName + "']"), Duration.ofSeconds(2)).click();
57+
button(byXpath(XPathDefinitions.label(tabName)), Duration.ofSeconds(2)).click();
5758
} catch (WaitForConditionTimeoutException e) {
5859
throw new UITestException("The '" + tabName + "' tab cannot be found.");
5960
}

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/project/NewProjectDialogWizard.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@
1818
import com.intellij.remoterobot.fixtures.JButtonFixture;
1919
import com.intellij.remoterobot.utils.WaitForConditionTimeoutException;
2020
import com.redhat.devtools.intellij.commonuitest.exceptions.UITestException;
21-
import com.redhat.devtools.intellij.commonuitest.utils.labels.ButtonLabels;
21+
import com.redhat.devtools.intellij.commonuitest.utils.constans.ButtonLabels;
22+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
2223
import org.jetbrains.annotations.NotNull;
2324

2425
/**
2526
* New Project dialog wizard fixture
2627
*
2728
* @author zcervink@redhat.com
2829
*/
29-
@DefaultXpath(by = "MyDialog type", xpath = "//div[@accessiblename='New Project' and @class='MyDialog']")
30+
@DefaultXpath(by = "MyDialog type", xpath = XPathDefinitions.NEW_PROJECT_DIALOG_WIZARD)
3031
@FixtureName(name = "New Project Dialog")
3132
public class NewProjectDialogWizard extends CommonContainerFixture {
3233
public NewProjectDialogWizard(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/project/pages/AbstractNewProjectFinalPage.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
import com.intellij.remoterobot.fixtures.DefaultXpath;
1717
import com.intellij.remoterobot.fixtures.FixtureName;
1818
import com.intellij.remoterobot.fixtures.JTextFieldFixture;
19+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
1920
import org.jetbrains.annotations.NotNull;
2021

2122
/**
2223
* New Project dialog abstract terminal page fixture
2324
*
2425
* @author zcervink@redhat.com
2526
*/
26-
@DefaultXpath(by = "MyDialog type", xpath = "//div[@class='DialogRootPane']")
27+
@DefaultXpath(by = "MyDialog type", xpath = XPathDefinitions.DIALOG_ROOT_PANE)
2728
@FixtureName(name = "New Project Dialog")
2829
public abstract class AbstractNewProjectFinalPage extends CommonContainerFixture {
2930
protected AbstractNewProjectFinalPage(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/project/pages/JavaNewProjectFinalPage.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
import com.intellij.remoterobot.fixtures.DefaultXpath;
1818
import com.intellij.remoterobot.fixtures.FixtureName;
1919
import com.redhat.devtools.intellij.commonuitest.exceptions.UITestException;
20-
import com.redhat.devtools.intellij.commonuitest.utils.labels.ButtonLabels;
20+
import com.redhat.devtools.intellij.commonuitest.utils.constans.ButtonLabels;
21+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
2122
import org.jetbrains.annotations.NotNull;
2223

2324
import java.time.Duration;
@@ -30,7 +31,7 @@
3031
*
3132
* @author zcervink@redhat.com
3233
*/
33-
@DefaultXpath(by = "MyDialog type", xpath = "//div[@class='DialogRootPane']")
34+
@DefaultXpath(by = "MyDialog type", xpath = XPathDefinitions.DIALOG_ROOT_PANE)
3435
@FixtureName(name = "New Project Dialog")
3536
public class JavaNewProjectFinalPage extends AbstractNewProjectFinalPage {
3637
public JavaNewProjectFinalPage(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {
@@ -122,7 +123,7 @@ public void setModuleFileLocation(String moduleFileLocation) {
122123
* @throws UITestException when there is set another value than defined by the 'ProjectFormatType' enumeration in the combo box
123124
*/
124125
public ProjectFormatType getProjectFormat() {
125-
ComboBoxFixture projectFormatComboBox = comboBox(byXpath("//div[@class='JComboBox']"), Duration.ofSeconds(10));
126+
ComboBoxFixture projectFormatComboBox = comboBox(byXpath(XPathDefinitions.JCOMBOBOX), Duration.ofSeconds(10));
126127

127128
if (projectFormatComboBox.selectedText().contains(ProjectFormatType.IDEA_DIRECTORY_BASED.toString())) {
128129
return ProjectFormatType.IDEA_DIRECTORY_BASED;
@@ -139,11 +140,11 @@ public ProjectFormatType getProjectFormat() {
139140
* @param projectFormatType project format that will be set into the combo box
140141
*/
141142
public void setProjectFormat(ProjectFormatType projectFormatType) {
142-
ComboBoxFixture projectFormatComboBox = comboBox(byXpath("//div[@class='JComboBox']"), Duration.ofSeconds(10));
143+
ComboBoxFixture projectFormatComboBox = comboBox(byXpath(XPathDefinitions.JCOMBOBOX), Duration.ofSeconds(10));
143144
projectFormatComboBox.selectItemContains(projectFormatType.toString());
144145
}
145146

146147
private boolean isMoreSettingOpened() {
147-
return findAll(ContainerFixture.class, byXpath("//div[@class='TitledSeparator']/../../*")).size() == 2;
148+
return findAll(ContainerFixture.class, byXpath(XPathDefinitions.MORE_SETTINGS_TITLED_SEPARATOR)).size() == 2;
148149
}
149150
}

src/main/java/com/redhat/devtools/intellij/commonuitest/fixtures/dialogs/project/pages/JavaNewProjectSecondPage.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
import com.intellij.remoterobot.fixtures.DefaultXpath;
1717
import com.intellij.remoterobot.fixtures.FixtureName;
1818
import com.intellij.remoterobot.fixtures.JCheckboxFixture;
19+
import com.redhat.devtools.intellij.commonuitest.utils.constans.XPathDefinitions;
1920
import org.jetbrains.annotations.NotNull;
2021

2122
/**
2223
* New Project dialog java project second page fixture
2324
*
2425
* @author zcervink@redhat.com
2526
*/
26-
@DefaultXpath(by = "MyDialog type", xpath = "//div[@class='DialogRootPane']")
27+
@DefaultXpath(by = "MyDialog type", xpath = XPathDefinitions.DIALOG_ROOT_PANE)
2728
@FixtureName(name = "New Project Dialog")
2829
public class JavaNewProjectSecondPage extends CommonContainerFixture {
2930
public JavaNewProjectSecondPage(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {

0 commit comments

Comments
 (0)