public void testFullNestedImport() {
    importManager.addImport("a.b.c.Foo.Bar.Baz");
    assertTrue(importManager.hasImport("Baz"));
    assertFalse(importManager.hasImport("Bar"));
    assertFalse(importManager.hasImport("Foo"));
    assertEquals("Baz", importManager.getImportedName("a.b.c.Foo$Bar$Baz"));
    assertEquals("Baz", importManager.getImportedName("a.b.c.Foo.Bar.Baz"));
    assertEquals("a.b.c.Foo.Bar", importManager.getImportedName("a.b.c.Foo$Bar"));
    assertEquals("a.b.c.Foo.Bar", importManager.getImportedName("a.b.c.Foo.Bar"));
    assertEquals("a.b.c.Foo", importManager.getImportedName("a.b.c.Foo"));

    importManager.addImport("a.b.c.Foo.Bar$Baz");
    assertTrue(importManager.hasImport("Baz"));
    assertTrue(importManager.hasImport("Bar"));
    assertFalse(importManager.hasImport("Foo"));
    assertEquals("Bar.Baz", importManager.getImportedName("a.b.c.Foo$Bar$Baz"));
    assertEquals("Baz", importManager.getImportedName("a.b.c.Foo.Bar.Baz"));
    assertEquals("Bar", importManager.getImportedName("a.b.c.Foo$Bar"));
    assertEquals("Bar", importManager.getImportedName("a.b.c.Foo.Bar"));
    assertEquals("a.b.c.Foo", importManager.getImportedName("a.b.c.Foo"));

    importManager.addImport("a.b.c.Foo$Bar$Baz");
    assertTrue(importManager.hasImport("Baz"));
    assertTrue(importManager.hasImport("Bar"));
    assertTrue(importManager.hasImport("Foo"));
    assertEquals("Foo.Bar.Baz", importManager.getImportedName("a.b.c.Foo$Bar$Baz"));
    assertEquals("Baz", importManager.getImportedName("a.b.c.Foo.Bar.Baz"));
    assertEquals("Foo.Bar", importManager.getImportedName("a.b.c.Foo$Bar"));
    assertEquals("Bar", importManager.getImportedName("a.b.c.Foo.Bar"));
    assertEquals("Foo", importManager.getImportedName("a.b.c.Foo"));
  }
  public void testPseudoImport() {
    importManager.addPseudoImport("a.b.c.Foo");
    importManager.addImport("d.e.Foo");
    importManager.addImport("a.Foo");

    assertEquals(0, importManager.getImports().size());
    assertTrue(importManager.hasImport("Foo"));
    assertEquals("Foo", importManager.getImportedName("a.b.c.Foo"));
    assertEquals("d.e.Foo", importManager.getImportedName("d.e.Foo"));
    assertEquals("a.Foo", importManager.getImportedName("a.Foo"));
  }
  public void testGenericTypeImport() {
    importManager.addImport("a.b.c.MyClass");
    importManager.addImport("java.util.Map");

    assertEquals(
        "MyClass<Map<String,a.Baz>>",
        importManager.getImportedName("a.b.c.MyClass<java.util.Map<java.lang.String,a.Baz>>"));
    assertEquals(
        "MyClass<Map<a.Baz, String>>",
        importManager.getImportedName("a.b.c.MyClass<java.util.Map<a.Baz, java.lang.String>>"));
    assertEquals(
        "MyClass <Map <a.Baz, String> >",
        importManager.getImportedName("a.b.c.MyClass <java.util.Map <a.Baz, java.lang.String> >"));
    assertEquals(
        "Map  < MyClass < a.Baz > , String >",
        importManager.getImportedName(
            "java.util.Map  < a.b.c.MyClass < a.Baz > , java.lang.String >"));
    assertEquals(
        "  Map  <   MyClass < a .  Baz > ,   String >",
        importManager.getImportedName(
            "java . util .  Map  < a . b . c .  MyClass < a .  Baz > , java . lang .  String >"));
    assertEquals(
        "Map<String, ?>", importManager.getImportedName("java.util.Map<java.lang.String, ?>"));
    assertEquals(
        "Map<String, ? extends MyClass & a.Baz>",
        importManager.getImportedName(
            "java.util.Map<java.lang.String, ? extends a.b.c.MyClass & a.Baz>"));
    assertEquals(
        "Map<String, ? super MyClass & a.Baz>",
        importManager.getImportedName(
            "java.util.Map<java.lang.String, ? super a.b.c.MyClass & a.Baz>"));
  }
  public void testWildcardImport() {
    importManager.addImport("a.b.c.Foo");
    importManager.addImport("a.b.c.*");
    importManager.addImport("a.b.c.Bar");

    assertTrue(importManager.hasImport("Foo"));
    assertTrue(importManager.hasImport("Bar"));
    assertFalse(importManager.hasImport("Baz"));
    assertEquals(1, importManager.getImports().size());
    assertEquals("Baz", importManager.getImportedName("a.b.c.Baz"));

    importManager.addImport("a.b.Baz");
    assertTrue(importManager.hasImport("Baz"));
    assertEquals(2, importManager.getImports().size());
    assertEquals("a.b.c.Baz", importManager.getImportedName("a.b.c.Baz"));
    assertEquals("Baz", importManager.getImportedName("a.b.Baz"));
  }
  public void testConflictingImplicitJavaImport() {
    importManager.addImport("a.b.c.String");

    assertEquals("a.b.c.String", importManager.getImportedName("a.b.c.String"));
    assertEquals("String", importManager.getImportedName("java.lang.String"));
    assertEquals(0, importManager.getImports().size());
    assertFalse(importManager.hasImport("String"));
  }
  public void testExplicitJavaImport() {
    importManager.addJavaLangImports(Collections.singletonList("String"));
    importManager.addImport("a.b.c.String");

    assertEquals("a.b.c.String", importManager.getImportedName("a.b.c.String"));
    assertEquals("String", importManager.getImportedName("java.lang.String"));
    assertEquals(1, importManager.getImports().size());
    assertFalse(importManager.hasImport("String"));
  }
  public void testMasterImport() {
    importManager.addImport("a.b.c.GeneratingClass");

    assertEquals(0, importManager.getImports().size());
    assertTrue(importManager.hasImport("GeneratingClass"));
    assertEquals(
        "GeneratingClass",
        importManager.getImportedName("org.eclipse.example.test.GeneratingClass"));
    assertEquals("a.b.c.GeneratingClass", importManager.getImportedName("a.b.c.GeneratingClass"));
  }
 public void testSimpleImport2() {
   importManager.addImport("a", "MyClass");
   importManager.addImport("a.b.c", "MyOtherClass");
   importManager.addImport("a.b.c", "ItemClass[]");
   assertSimpleImport();
 }
 public void testNestedWildcardImport() {
   importManager.addImport("a.b.c.Foo.Bar.*");
   assertEquals("Baz", importManager.getImportedName("a.b.c.Foo$Bar$Baz"));
 }
 public void testNestedImport2() {
   importManager.addImport("a.b.c", "OuterClass");
   importManager.addImport("a.b.c", "C1");
   assertNestedImport();
 }
 public void testNestedImport() {
   importManager.addImport("a.b.c.OuterClass$InnerClass");
   importManager.addImport("a.b.c.C1$C2$C3");
   assertNestedImport();
 }
 public void testWhitespaceImport2() {
   importManager.addImport("a. b. c", " MyThirdClass");
   assertWhitespaceImport();
 }
 protected static String getImportedName(String qualifiedName, ImportManager importManager) {
   int index = qualifiedName.indexOf("$");
   importManager.addImport(index == -1 ? qualifiedName : qualifiedName.substring(0, index));
   return importManager.getImportedName(qualifiedName);
 }