I think you are exposing yourself to a race-condition here. You can't know by when ``projectA`` will be opened, hence it may happen too late (it's unlikely, but I think you probably want to play safe here and avoid other source of flakiness :)).

Also, I think the setup logic should be done in a [@Before method](http://junit.sourceforge.net/javadoc/org/junit/Before.html).

What I'd suggest is having something like:

```
@Before
def setup() {
  Set(projectA,projectB,...) foreach ensureItIsOpen
}

def ensureItIsOpen(p: IProject) {
  if(!p.isOpen) {
    val latch = new CountDownLatch(1) 
    // logic to decrement the latch when the project is open
    p.open(new NullProgressMonitor) 
    latch.await(EVENT_DELAY, java.util.concurrent.TimeUnit.SECONDS) 
  }
}
```

That way you know the initial state of each test is the same, i.e., tests do not depend on each other.