public void testContainedWithName() throws Exception {
    // test contained annotation value setting/updating

    ICompilationUnit cu = createPackageInfoWithSchemaTypes();
    JavaResourcePackage resourcePackage = buildJavaResourcePackage(cu);

    XmlSchemaTypeAnnotation containedAnnotation =
        (XmlSchemaTypeAnnotation) resourcePackage.getAnnotation(0, JAXB.XML_SCHEMA_TYPE);

    containedAnnotation.setName(TEST_NAME);
    assertEquals(TEST_NAME, containedAnnotation.getName());
    assertSourceContains(
        "@XmlSchemaTypes({@XmlSchemaType(name = \"" + TEST_NAME + "\"),@XmlSchemaType})", cu);

    containedAnnotation.setName(null);
    assertNull(containedAnnotation.getName());
    assertSourceContains("@XmlSchemaTypes({@XmlSchemaType,@XmlSchemaType})", cu);
  }
  public void testContained() throws Exception {
    // test adding/removing/moving

    ICompilationUnit cu = createPackageInfoWithSchemaType();
    JavaResourcePackage resourcePackage = buildJavaResourcePackage(cu);

    assertEquals(1, resourcePackage.getAnnotationsSize(JAXB.XML_SCHEMA_TYPE));

    resourcePackage.addAnnotation(1, JAXB.XML_SCHEMA_TYPE);

    assertEquals(2, resourcePackage.getAnnotationsSize(JAXB.XML_SCHEMA_TYPE));
    assertSourceContains("@XmlSchemaTypes({ @XmlSchemaType, @XmlSchemaType })", cu);

    XmlSchemaTypeAnnotation containedAnnotation1 =
        (XmlSchemaTypeAnnotation) resourcePackage.getAnnotation(0, JAXB.XML_SCHEMA_TYPE);
    containedAnnotation1.setName(TEST_NAME);
    XmlSchemaTypeAnnotation containedAnnotation2 =
        (XmlSchemaTypeAnnotation) resourcePackage.getAnnotation(1, JAXB.XML_SCHEMA_TYPE);
    containedAnnotation2.setName(TEST_NAME_2);
    assertSourceContains(
        "@XmlSchemaTypes({ @XmlSchemaType(name = \""
            + TEST_NAME
            + "\"), @XmlSchemaType(name = \""
            + TEST_NAME_2
            + "\") })",
        cu);

    resourcePackage.moveAnnotation(0, 1, JAXB.XML_SCHEMA_TYPE);
    assertSourceContains(
        "@XmlSchemaTypes({ @XmlSchemaType(name = \""
            + TEST_NAME_2
            + "\"), @XmlSchemaType(name = \""
            + TEST_NAME
            + "\") })",
        cu);

    resourcePackage.removeAnnotation(1, JAXB.XML_SCHEMA_TYPE);
    assertEquals(1, resourcePackage.getAnnotationsSize(JAXB.XML_SCHEMA_TYPE));
    assertSourceContains("@XmlSchemaType(name = \"" + TEST_NAME_2 + "\")", cu);
    assertSourceDoesNotContain("@XmlSchemaTypes", cu);
  }
  public void testNamespace() throws Exception {
    ICompilationUnit cu = createPackageInfoWithSchemaTypeAndNamespace();
    JavaResourcePackage resourcePackage = buildJavaResourcePackage(cu);

    XmlSchemaTypeAnnotation annotation =
        (XmlSchemaTypeAnnotation) resourcePackage.getAnnotation(0, JAXB.XML_SCHEMA_TYPE);
    assertTrue(annotation != null);
    assertEquals(TEST_NAMESPACE, annotation.getNamespace());
    assertSourceContains("@XmlSchemaType(namespace = \"" + TEST_NAMESPACE + "\")", cu);

    annotation.setNamespace(TEST_NAMESPACE_2);
    assertEquals(TEST_NAMESPACE_2, annotation.getNamespace());
    assertSourceContains("@XmlSchemaType(namespace = \"" + TEST_NAMESPACE_2 + "\")", cu);

    annotation.setNamespace(null);
    assertEquals(null, annotation.getNamespace());
    assertSourceContains("@XmlSchemaType", cu);

    annotation.setNamespace(TEST_NAMESPACE);
    assertEquals(TEST_NAMESPACE, annotation.getNamespace());
    assertSourceContains("@XmlSchemaType(namespace = \"" + TEST_NAMESPACE + "\")", cu);
  }
  public void testContainedWithType() throws Exception {
    // test contained annotation type setting/updating

    ICompilationUnit cu = createPackageInfoWithSchemaTypes();
    JavaResourcePackage resourcePackage = buildJavaResourcePackage(cu);

    XmlSchemaTypeAnnotation containedAnnotation =
        (XmlSchemaTypeAnnotation) resourcePackage.getAnnotation(1, JAXB.XML_SCHEMA_TYPE);

    containedAnnotation.setType(TEST_CLASS);
    assertEquals(TEST_CLASS, containedAnnotation.getType());
    assertEquals(FQ_TEST_CLASS, containedAnnotation.getFullyQualifiedType());
    assertSourceContains(
        "@XmlSchemaTypes({@XmlSchemaType,@XmlSchemaType(type = " + TEST_CLASS + ".class)})", cu);

    containedAnnotation.setType(null);
    assertNull(containedAnnotation.getType());
    assertNull(FQ_TEST_CLASS, containedAnnotation.getFullyQualifiedType());
    assertSourceContains("@XmlSchemaTypes({@XmlSchemaType,@XmlSchemaType})", cu);
  }
  public void testType() throws Exception {
    ICompilationUnit cu = createPackageInfoWithSchemaTypeAndType();
    JavaResourcePackage resourcePackage = buildJavaResourcePackage(cu);

    XmlSchemaTypeAnnotation annotation =
        (XmlSchemaTypeAnnotation) resourcePackage.getAnnotation(0, JAXB.XML_SCHEMA_TYPE);
    assertTrue(annotation != null);
    assertEquals(TEST_CLASS, annotation.getType());
    assertEquals(FQ_TEST_CLASS, annotation.getFullyQualifiedType());
    assertSourceContains("@XmlSchemaType(type = " + TEST_CLASS + ".class)", cu);

    annotation.setType(TEST_CLASS_2);
    assertEquals(TEST_CLASS_2, annotation.getType());
    assertEquals(FQ_TEST_CLASS_2, annotation.getFullyQualifiedType());
    assertSourceContains("@XmlSchemaType(type = " + TEST_CLASS_2 + ".class)", cu);

    annotation.setType(null);
    assertEquals(null, annotation.getType());
    assertEquals(null, annotation.getFullyQualifiedType());
    assertSourceContains("@XmlSchemaType", cu);

    annotation.setType(TEST_CLASS);
    assertEquals(TEST_CLASS, annotation.getType());
    assertEquals(FQ_TEST_CLASS, annotation.getFullyQualifiedType());
    assertSourceContains("@XmlSchemaType(type = " + TEST_CLASS + ".class)", cu);
  }