@Test
  public void testGetAllRelations() {
    try {
      ApplicationElement ae = applicationElement.getApplicationStructure().getElementByName("prj");

      assertEquals(2, ae.getAllRelations().length);

      ApplicationRelation firstRel = ae.getAllRelations()[0];
      assertEquals("env_iid", firstRel.getRelationName());
      assertEquals("prj_iid", firstRel.getInverseRelationName());
      assertEquals("environment", firstRel.getBaseRelation().getRelationName());
      assertEquals("tests", firstRel.getBaseRelation().getInverseRelationName());
      assertEquals(RelationType.FATHER_CHILD, firstRel.getRelationType());
      assertEquals(0, firstRel.getRelationRange().min);
      assertEquals(1, firstRel.getRelationRange().max);
      assertEquals(0, firstRel.getInverseRelationRange().min);
      assertEquals(-1, firstRel.getInverseRelationRange().max);
      assertEquals(Relationship.FATHER, firstRel.getRelationship());
      assertEquals(Relationship.CHILD, firstRel.getInverseRelationship());

      ApplicationRelation secRel = ae.getAllRelations()[1];
      assertEquals("tstser_iid", secRel.getRelationName());
      assertEquals("prj_iid", secRel.getInverseRelationName());
      assertEquals("children", secRel.getBaseRelation().getRelationName());
      assertEquals("parent_test", secRel.getBaseRelation().getInverseRelationName());
      assertEquals(RelationType.FATHER_CHILD, secRel.getRelationType());
      assertEquals(0, secRel.getRelationRange().min);
      assertEquals(-1, secRel.getRelationRange().max);
      assertEquals(1, secRel.getInverseRelationRange().min);
      assertEquals(1, secRel.getInverseRelationRange().max);
    } catch (AoException e) {
      fail(e.reason);
    }
  }
 @Test
 public void testGetAttributes() {
   try {
     assertEquals(6, applicationElement.getAttributes("*").length);
     assertEquals(2, applicationElement.listAttributes("meas*").length);
   } catch (AoException e) {
     fail(e.reason);
   }
 }
 @Test
 public void testListInstances() {
   try {
     assertEquals(3, applicationElement.listInstances("*").getCount());
     assertEquals(1, applicationElement.listInstances("Slow*").getCount());
   } catch (AoException e) {
     fail(e.reason);
   }
 }
 @Test
 public void testGetRelationsByType() {
   try {
     assertEquals(3, applicationElement.getRelationsByType(RelationType.FATHER_CHILD).length);
     assertEquals(4, applicationElement.getRelationsByType(RelationType.INFO).length);
     assertEquals(0, applicationElement.getRelationsByType(RelationType.INHERITANCE).length);
   } catch (AoException e) {
     fail(e.reason);
   }
 }
  @Test
  public void testGetInstances() {
    try {
      for (int i = 0; i < 10000; i++) {
        applicationElement.getInstances("*");
      }

      assertEquals(3, applicationElement.getInstances("*").getCount());
      assertEquals(1, applicationElement.getInstances("Slow*").getCount());
    } catch (AoException e) {
      fail(e.reason);
    }
  }
 @Test
 public void testGetAttributeByName() {
   try {
     assertEquals("dts_iid", applicationElement.getAttributeByName("dts_iid").getName());
   } catch (AoException e) {
     fail(e.reason);
   }
   try {
     applicationElement.getAttributeByName("non_existing_attribute");
     fail("AoException expected");
   } catch (AoException e) {
   }
 }
  @Test
  public void testGetAllRelatedElements() {
    try {
      // dts
      assertEquals(7, applicationElement.getAllRelatedElements().length);

      // audifahrzeug
      ApplicationElement aeFzg =
          aoSession.getApplicationStructure().getElementByName("audifahrzeug");
      assertEquals(8, aeFzg.getAllRelatedElements().length);
    } catch (AoException e) {
      fail(e.reason);
    }
  }
  @Test
  public void testRemoveAttribute() {
    try {
      assertEquals(6, applicationElement.listAttributes("*").length);

      BaseAttribute ba = applicationElement.getBaseElement().getAttributes("description")[0];
      ApplicationAttribute aa = applicationElement.createAttribute();
      aa.setName("new_attribute");
      aa.setBaseAttribute(ba);

      assertEquals("new_attribute", aa.getName());
      assertEquals(7, applicationElement.listAttributes("*").length);
      assertNotNull(applicationElement.getAttributeByBaseName("description"));

      applicationElement.removeAttribute(aa);
      assertEquals(6, applicationElement.listAttributes("*").length);
    } catch (AoException e) {
      fail(e.reason);
    }
    // try to access removed base attribute
    try {
      applicationElement.getAttributeByBaseName("description");
      fail("AoException expected");
    } catch (AoException e) {
      assertEquals(ErrorCode.AO_NOT_FOUND, e.errCode);
    }
  }
 @Test
 public void testSetName() {
   try {
     assertEquals("dts", applicationElement.getName());
     applicationElement.setName("new_name");
     assertEquals(
         "new_name",
         applicationElement.getApplicationStructure().getElementByName("new_name").getName());
     applicationElement.setName("dts");
     assertEquals("dts", applicationElement.getName());
   } catch (AoException e) {
     fail(e.reason);
   }
   // empty attribute name
   try {
     applicationElement.setName("");
     fail("AoException expected");
   } catch (AoException e) {
     assertEquals(ErrorCode.AO_BAD_PARAMETER, e.errCode);
   }
   // name length > 30
   try {
     applicationElement.setName("012345678901234567890123456789x");
     fail("AoException expected");
   } catch (AoException e) {
     assertEquals(ErrorCode.AO_BAD_PARAMETER, e.errCode);
   }
   // duplicate application element name
   try {
     applicationElement.setName("mea");
     fail("AoException expected");
   } catch (AoException e) {
     assertEquals(ErrorCode.AO_DUPLICATE_NAME, e.errCode);
   }
 }
 @Test
 public void testCreateAttribute() {
   try {
     assertEquals(6, applicationElement.listAttributes("*").length);
     ApplicationAttribute aa = applicationElement.createAttribute();
     aa.setName("new_attribute");
     assertEquals("new_attribute", aa.getName());
     assertEquals(7, applicationElement.listAttributes("*").length);
     applicationElement.removeAttribute(aa);
     assertEquals(6, applicationElement.listAttributes("*").length);
   } catch (AoException e) {
     fail(e.reason);
   }
 }
 @Test
 public void testGetInstanceById() {
   try {
     InstanceElement ie = applicationElement.getInstanceById(ODSHelper.asODSLongLong(58));
     assertEquals("1/3 Octave - Zusammenfassung", ie.getName());
     assertEquals(58, ODSHelper.asJLong(ie.getId()));
   } catch (AoException e) {
     fail(e.reason);
   }
   // query non existing instance
   try {
     applicationElement.getInstanceById(ODSHelper.asODSLongLong(999));
     fail("AoException expected");
   } catch (AoException e) {
   }
 }
 @Test
 public void testCreateInstance() {
   try {
     InstanceElement ie = applicationElement.createInstance("new_instance");
     assertEquals(83, ODSHelper.asJLong(ie.getId()));
     InstanceElement ie1 = applicationElement.createInstance("ni1");
     assertEquals(84, ODSHelper.asJLong(ie1.getId()));
     applicationElement.removeInstance(ie.getId(), false);
     InstanceElement ie2 = applicationElement.createInstance("ni2");
     assertEquals(85, ODSHelper.asJLong(ie2.getId()));
     applicationElement.removeInstance(ie1.getId(), false);
     applicationElement.removeInstance(ie2.getId(), false);
   } catch (AoException e) {
     fail(e.reason);
   }
 }
 @Test
 public void testGetName() {
   try {
     assertEquals("dts", applicationElement.getName());
   } catch (AoException e) {
     fail(e.reason);
   }
 }
 @Test
 public void testGetId() {
   try {
     assertEquals(19, ODSHelper.asJLong(applicationElement.getId()));
   } catch (AoException e) {
     fail(e.reason);
   }
 }
 @Test
 public void testGetBaseElement() {
   try {
     assertEquals("AoMeasurement", applicationElement.getBaseElement().getType());
   } catch (AoException e) {
     fail(e.reason);
   }
 }
 @Test
 public void testGetApplicationStructure() {
   try {
     applicationElement.getApplicationStructure();
   } catch (AoException e) {
     fail(e.reason);
   }
 }
 @Test
 public void testGetAttributeByBaseName() {
   try {
     assertEquals("dts_iid", applicationElement.getAttributeByBaseName("id").getName());
   } catch (AoException e) {
     fail(e.reason);
   }
 }
  @Test
  public void testGetRelationsByBaseName() {
    try {
      // dts
      assertEquals(1, applicationElement.getRelationsByBaseName("test").length);
      assertEquals(1, applicationElement.getRelationsByBaseName("measurement_quantities").length);
      assertEquals(1, applicationElement.getRelationsByBaseName("units_under_test").length);

      // audifahrzeug
      ApplicationElement aeFzg =
          aoSession.getApplicationStructure().getElementByName("audifahrzeug");
      assertEquals(5, aeFzg.getRelationsByBaseName("children").length);

    } catch (AoException e) {
      fail(e.reason);
    }
  }
 @Test
 public void testSetBaseElement() {
   try {
     applicationElement.setBaseElement(null);
     fail("AoException expected");
   } catch (AoException e) {
     assertEquals(ErrorCode.AO_NOT_IMPLEMENTED, e.errCode);
   }
 }
 @Test
 public void testGetSecurityLevel() {
   try {
     applicationElement.getSecurityLevel();
     fail("AoException expected");
   } catch (AoException e) {
     assertEquals(ErrorCode.AO_NOT_IMPLEMENTED, e.errCode);
   }
 }
 @Test
 public void testGetInitialRightRelations() {
   try {
     applicationElement.getInitialRightRelations();
     fail("AoException expected");
   } catch (AoException e) {
     assertEquals(ErrorCode.AO_NOT_IMPLEMENTED, e.errCode);
   }
 }
 @Test
 public void testCreateInstances() {
   try {
     applicationElement.createInstances(null, null);
     fail("AoException expected");
   } catch (AoException e) {
     assertEquals(ErrorCode.AO_NOT_IMPLEMENTED, e.errCode);
   }
 }
 @Test
 public void testGetInstanceByName() {
   try {
     InstanceElement ie = applicationElement.getInstanceByName("1/3 Octave - Zusammenfassung");
     assertEquals(58, ODSHelper.asJLong(ie.getId()));
     ie = applicationElement.getInstanceByName("not existing instance");
     assertEquals(null, ie);
   } catch (AoException e) {
     fail(e.reason);
   }
   // check duplicate names
   try {
     ApplicationElement aeParamSet =
         applicationElement.getApplicationStructure().getElementByName("pas");
     aeParamSet.getInstanceByName("basic");
     fail("AoException expected");
   } catch (AoException e) {
   }
 }
  @Test
  public void testRemoveInstance() {
    try {
      assertEquals(3, applicationElement.getInstances("*").getCount());

      InstanceElement ie = applicationElement.createInstance("new_instance");
      assertEquals(4, applicationElement.getInstances("*").getCount());
      assertEquals(ie.getName(), applicationElement.getInstanceByName("new_instance").getName());

      applicationElement.removeInstance(ie.getId(), false);
      assertEquals(3, applicationElement.getInstances("*").getCount());
      assertEquals(null, applicationElement.getInstanceByName("new_instance"));
    } catch (AoException e) {
      fail(e.reason);
    }
    // non existing instance
    try {
      applicationElement.removeInstance(ODSHelper.asODSLongLong(999), false);
      fail("AoException expected");
    } catch (AoException e) {
    }
  }
 @Test
 public void testGetRelatedElementsByRelationship() {
   try {
     assertEquals(
         7, applicationElement.getRelatedElementsByRelationship(Relationship.ALL_REL).length);
     assertEquals(
         1, applicationElement.getRelatedElementsByRelationship(Relationship.FATHER).length);
     assertEquals(
         2, applicationElement.getRelatedElementsByRelationship(Relationship.CHILD).length);
     assertEquals(
         1, applicationElement.getRelatedElementsByRelationship(Relationship.INFO_REL).length);
     assertEquals(
         0, applicationElement.getRelatedElementsByRelationship(Relationship.INFO_FROM).length);
     assertEquals(
         3, applicationElement.getRelatedElementsByRelationship(Relationship.INFO_TO).length);
   } catch (AoException e) {
     fail(e.reason);
   }
 }