@Override
  public void runTest() throws Exception {
    super.runTest();

    checkLibrary((Library) QvtOperationalStdLibrary.INSTANCE.getStdLibModule());
    EList<ModuleImport> moduleImports =
        getCompiledResults()[0].getModules().get(0).getModuleImport();
    assertEquals(moduleImports.size(), 2);

    for (ModuleImport nextImport : moduleImports) {
      checkLibrary((Library) nextImport.getImportedModule());
    }
  }
  private void readHierarchy(Module module) {
    for (ModuleImport moduleImport : module.getModuleImport()) {
      Module importedModule = moduleImport.getImportedModule();
      if (importedModule != null) {
        readHierarchy(importedModule);
      }
    }

    for (EStructuralFeature nextFeature : module.getEAllStructuralFeatures()) {
      if (nextFeature instanceof ContextualProperty) {
        ContextualProperty ctxProp = (ContextualProperty) nextFeature;
        if (ctxProp.getContext() == null) {
          continue;
        }
        String name = ctxProp.getName();
        List<Entry> entryList = getData().get(name);
        if (entryList == null) {
          entryList = new LinkedList<Entry>();
          getData().put(name, entryList);
        }

        boolean joined = false;
        for (Entry entry : entryList) {
          if (entry.addIfApplicable(ctxProp)) {
            joined = true;
            break;
          }
        }

        if (!joined) {
          Entry newEntry = new Entry();
          entryList.add(newEntry);
          newEntry.addIfApplicable(ctxProp);
        }
      }
    }
  }