public void testSimpleExportProjectProvider2() throws Exception {
    doGenerate(
        new String[] {
          GeneratePDOMApplication.OPT_TARGET, target.getAbsolutePath(),
          GeneratePDOMApplication.OPT_PROJECTPROVIDER, TestProjectProvider4.class.getName()
        });
    assertTrue(target.exists());
    WritablePDOM wpdom =
        new WritablePDOM(
            target,
            new URIRelativeLocationConverter(BASEURI),
            LanguageManager.getInstance().getPDOMLinkageFactoryMappings());
    verifyProject1Content(wpdom);

    wpdom.acquireReadLock();
    try {
      String fid = wpdom.getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
      assertNotNull(fid);
      assertEquals(ACME_SDK_ID, fid); // check for custom export id
      String sdkVer = wpdom.getProperty(SDK_VERSION);
      assertNotNull(sdkVer);
      assertEquals("4.0.1", sdkVer); // check for custom property value
    } finally {
      wpdom.releaseReadLock();
    }
  }
  private WritablePDOM generatePDOM(String testProject, Class<?> provider, final int[] stateCount)
      throws Exception {
    IIndexerStateListener listener = null;
    if (stateCount != null) {
      listener =
          new IIndexerStateListener() {
            @Override
            public void indexChanged(IIndexerStateEvent event) {
              stateCount[0]++;
            }
          };
      CCorePlugin.getIndexManager().joinIndexer(8000, new NullProgressMonitor());
      CCorePlugin.getIndexManager().addIndexerStateListener(listener);
    }

    URL url = FileLocator.find(CTestPlugin.getDefault().getBundle(), new Path(testProject), null);
    String baseDir = FileLocator.toFileURL(url).getFile();

    doGenerate(
        new String[] {
          GeneratePDOMApplication.OPT_TARGET,
          target.getAbsolutePath(),
          GeneratePDOMApplication.OPT_PROJECTPROVIDER,
          provider.getName(),
          ExternalExportProjectProvider.OPT_SOURCE,
          baseDir,
          ExternalExportProjectProvider.OPT_FRAGMENT_ID,
          "generate.pdom.tests.id." + getName()
        });
    assertTrue(target.exists());
    if (listener != null) {
      CCorePlugin.getIndexManager().removeIndexerStateListener(listener);
    }
    return new WritablePDOM(
        target,
        new URIRelativeLocationConverter(BASEURI),
        LanguageManager.getInstance().getPDOMLinkageFactoryMappings());
  }
  public void testSimpleExportProjectProvider1() throws Exception {
    doGenerate(
        new String[] {
          GeneratePDOMApplication.OPT_TARGET, target.getAbsolutePath(),
          GeneratePDOMApplication.OPT_PROJECTPROVIDER, TestProjectProvider3.class.getName()
        });
    assertTrue(target.exists());
    WritablePDOM wpdom =
        new WritablePDOM(
            target,
            new URIRelativeLocationConverter(BASEURI),
            LanguageManager.getInstance().getPDOMLinkageFactoryMappings());
    verifyProject1Content(wpdom);

    String fid;
    wpdom.acquireReadLock();
    try {
      fid = wpdom.getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
    } finally {
      wpdom.releaseReadLock();
    }
    assertNotNull(fid);
    assertTrue(fid.startsWith("export")); // check for default export id
  }