Skip to content

Commit 9b525b2

Browse files
author
jan
committed
Added waiting code for the indexer
1 parent 08e0291 commit 9b525b2

File tree

2 files changed

+44
-14
lines changed

2 files changed

+44
-14
lines changed

io.sloeber.tests/src/io/sloeber/core/RegressionTest.java

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public static void installAdditionalBoards() throws Exception {
9595
* @throws CoreException
9696
*/
9797
@Test
98-
public void issue555() throws CoreException {
98+
public void issue555() throws Exception {
9999
BoardDescription unoBoardid = Arduino.uno().getBoardDescriptor();
100100
BoardDescription teensyBoardid = Teensy.Teensy3_1().getBoardDescriptor();
101101

@@ -105,7 +105,7 @@ public void issue555() throws CoreException {
105105
NullProgressMonitor monitor = new NullProgressMonitor();
106106
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
107107
new CompileDescription(), monitor);
108-
108+
Shared.waitForIndexer(theTestProject);
109109
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, monitor);
110110
Assert.assertNull(Shared.hasBuildErrors(theTestProject));
111111

@@ -142,6 +142,7 @@ public void issue687() throws Exception {
142142
CodeDescription codeDescriptor = CodeDescription.createCustomTemplate(templateFolder);
143143
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
144144
new CompileDescription(), new NullProgressMonitor());
145+
Shared.waitForIndexer(theTestProject);
145146
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
146147
Assert.assertNull(Shared.hasBuildErrors(theTestProject));
147148
}
@@ -156,6 +157,7 @@ public void create_CPP_based_Sloeber_Project() throws Exception {
156157
CodeDescription codeDescriptor = CodeDescription.createDefaultCPP();
157158
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
158159
new CompileDescription(), new NullProgressMonitor());
160+
Shared.waitForIndexer(theTestProject);
159161
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
160162
Assert.assertNull(Shared.hasBuildErrors(theTestProject));
161163

@@ -171,6 +173,7 @@ public void createDefaultInoProject() throws Exception {
171173
CodeDescription codeDescriptor = CodeDescription.createDefaultIno();
172174
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
173175
new CompileDescription(), new NullProgressMonitor());
176+
Shared.waitForIndexer(theTestProject);
174177
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
175178
Assert.assertNull(Shared.hasBuildErrors(theTestProject));
176179
}
@@ -218,6 +221,7 @@ public void are_jantjes_options_taken_into_account() throws Exception {
218221
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
219222
compileOptions, new NullProgressMonitor());
220223

224+
Shared.waitForIndexer(theTestProject);
221225
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, monitor);
222226
Assert.assertNull(Shared.hasBuildErrors(theTestProject));
223227
}
@@ -241,6 +245,7 @@ public void is_extern_C_taken_into_account() throws Exception {
241245
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
242246
new CompileDescription(), new NullProgressMonitor());
243247

248+
Shared.waitForIndexer(theTestProject);
244249
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, monitor);
245250
Assert.assertNull(Shared.hasBuildErrors(theTestProject));
246251
}
@@ -264,6 +269,7 @@ public void are_defines_before_includes_taken_into_account() throws Exception {
264269
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
265270
new CompileDescription(), new NullProgressMonitor());
266271

272+
Shared.waitForIndexer(theTestProject);
267273
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, monitor);
268274
Assert.assertNull(Shared.hasBuildErrors(theTestProject));
269275

@@ -287,6 +293,7 @@ public void rename_Configuration() throws Exception {
287293
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
288294
new CompileDescription(), new NullProgressMonitor());
289295

296+
Shared.waitForIndexer(theTestProject);
290297
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, monitor);
291298
Assert.assertNull("Failed to compile the project before config rename", Shared.hasBuildErrors(theTestProject));
292299

@@ -360,6 +367,7 @@ public void openAndClosePreservesSettings(String projectName, CodeDescription co
360367
theTestProject = SloeberProject.createArduinoProject(projectName, null, unoBoardid, codeDescriptor,
361368
inCompileDescription, new NullProgressMonitor());
362369

370+
Shared.waitForIndexer(theTestProject);
363371
// also do a build
364372
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, null);
365373
Assert.assertNull("Failed to compile the project before close: " + projectName,
@@ -378,6 +386,7 @@ public void openAndClosePreservesSettings(String projectName, CodeDescription co
378386
// just wait a while
379387
Thread.sleep(1000);
380388
theTestProject.open(null);
389+
Shared.waitForIndexer(theTestProject);
381390

382391
// read the data we want to test
383392
sloeberConf = ISloeberConfiguration.getActiveConfig(theTestProject);
@@ -458,7 +467,7 @@ public void openModAndCloseUsesSavedSettings() throws Exception {
458467

459468
// reopen the project
460469
proj2.open(null);
461-
Thread.sleep(1000);
470+
Shared.waitForIndexer(proj2);
462471

463472
// reread project 2
464473
ISloeberConfiguration sloebercfg2 = ISloeberConfiguration.getActiveConfig(proj2);
@@ -505,14 +514,15 @@ public void createProjectWithURI() throws Exception {
505514
IPath projectFolder = workspace.getRoot().getLocation().removeLastSegments(1).append(codeFolderName);
506515
URI uri = projectFolder.toFile().toURI();
507516
// workspace.getRoot().getFolder(Path.fromOSString(codeFolderName)).getLocationURI();
508-
IProject proj = SloeberProject.createArduinoProject(proj1Name, uri, proj1BoardDesc, codeDesc, proj1CompileDesc,
517+
IProject theTestProject = SloeberProject.createArduinoProject(proj1Name, uri, proj1BoardDesc, codeDesc, proj1CompileDesc,
509518
otherDesc, new NullProgressMonitor());
510519

511-
proj.build(IncrementalProjectBuilder.FULL_BUILD, null);
512-
Assert.assertNull("Failed to compile the project: " + Shared.hasBuildErrors(proj), Shared.hasBuildErrors(proj));
520+
Shared.waitForIndexer(theTestProject);
521+
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, null);
522+
Assert.assertNull("Failed to compile the project: " + Shared.hasBuildErrors(theTestProject), Shared.hasBuildErrors(theTestProject));
513523
String fileLocation = projectFolder.append("src").append(proj1Name + ".cpp").toString();
514524

515-
IFile cppFile = proj.getFolder("src").getFile(proj1Name + ".cpp");
525+
IFile cppFile = theTestProject.getFolder("src").getFile(proj1Name + ".cpp");
516526
Assert.assertTrue("File not in correct location", cppFile.exists());
517527
Assert.assertEquals("File not in correct location", cppFile.getLocation().toString(), fileLocation);
518528

@@ -586,21 +596,23 @@ public static Stream<Arguments> testDifferentSourceFoldersData() throws Exceptio
586596
@ParameterizedTest
587597
@MethodSource("testDifferentSourceFoldersData")
588598
public void testDifferentSourceFolders(String projectName, CodeDescription codeDescriptor, MCUBoard board,
589-
OtherDescription otherDesc, CompileDescription proj1CompileDesc) throws CoreException {
599+
OtherDescription otherDesc, CompileDescription proj1CompileDesc) throws Exception {
590600

591601
BoardDescription proj1BoardDesc = board.getBoardDescriptor();
592-
IProject project = SloeberProject.createArduinoProject(projectName, null, proj1BoardDesc, codeDescriptor,
602+
IProject theTestProject = SloeberProject.createArduinoProject(projectName, null, proj1BoardDesc, codeDescriptor,
593603
proj1CompileDesc, otherDesc, new NullProgressMonitor());
594604

595-
project.build(IncrementalProjectBuilder.FULL_BUILD, null);
596-
assertNull("Failed to compile " + projectName, Shared.hasBuildErrors(project));
605+
606+
Shared.waitForIndexer(theTestProject);
607+
theTestProject.build(IncrementalProjectBuilder.FULL_BUILD, null);
608+
assertNull("Failed to compile " + projectName, Shared.hasBuildErrors(theTestProject));
597609

598610
String srcFolder = codeDescriptor.getCodeFolder();
599611
IFile cppFile = null;
600612
if (srcFolder == null) {
601-
cppFile = project.getFile(projectName + ".cpp");
613+
cppFile = theTestProject.getFile(projectName + ".cpp");
602614
} else {
603-
cppFile = project.getFolder(srcFolder).getFile(projectName + ".cpp");
615+
cppFile = theTestProject.getFolder(srcFolder).getFile(projectName + ".cpp");
604616
}
605617
assertTrue("Source File not in right location " + projectName, cppFile.exists());
606618
}

io.sloeber.tests/src/io/sloeber/core/Shared.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
import java.util.zip.ZipEntry;
1616
import java.util.zip.ZipInputStream;
1717

18+
import org.eclipse.cdt.core.CCorePlugin;
19+
import org.eclipse.cdt.core.index.IIndex;
1820
import org.eclipse.cdt.core.model.CoreModel;
1921
import org.eclipse.cdt.core.model.ICModelMarker;
22+
import org.eclipse.cdt.core.model.ICProject;
2023
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
2124
import org.eclipse.core.resources.IFile;
2225
import org.eclipse.core.resources.IFolder;
@@ -104,6 +107,21 @@ public static void waitForBoardsManager() throws Exception {
104107
}
105108
}
106109
}
110+
public static void waitForIndexer(IProject iProject) throws Exception {
111+
int count=0;
112+
ICProject icProject = CoreModel.getDefault().create(iProject);
113+
IIndex index = CCorePlugin.getIndexManager().getIndex(icProject);
114+
while (!(index.isFullyInitialized())) {
115+
count++;
116+
Thread.sleep(500);
117+
// If you do not get out of this loop it probably means you are
118+
// runnning the test in the gui thread
119+
if(count%10==0) {
120+
System.out.println("Waiting for indexer");
121+
}
122+
}
123+
}
124+
107125

108126
public static void waitForAllJobsToFinish() {
109127
// try {
@@ -209,7 +227,7 @@ public static String buildAndVerifyGivenBuilders(String projectName, BoardDescri
209227
compileOptions.setEnableParallelBuild(true);
210228
theTestProject = SloeberProject.createArduinoProject(projectName, null, boardDescriptor, codeDescriptor,
211229
compileOptions, curBuilder, monitor);
212-
waitForAllJobsToFinish(); // for the indexer
230+
waitForIndexer(theTestProject);
213231
}
214232
// do not set the build tool when the project is freshly created because then
215233
// the default case would never be tested

0 commit comments

Comments
 (0)