@Test
  public void simple() {
    HierarchicalFaultClassification simpleXml = createSimpleXmlBuilder().build();

    // Assert equals
    // Project
    Assert.assertEquals(PROJECT_NAME, simpleXml.getProject());

    // TestCriteria
    Assert.assertEquals(REQUIREMENT_TYPE, simpleXml.getRequirementType());
    Assert.assertEquals("TARANTULA", simpleXml.getHeuristic());

    // Package
    Assert.assertEquals(1, simpleXml.getPackages().size());
    Package package1 = simpleXml.getPackages().iterator().next();
    Assert.assertEquals(new Integer(1), package1.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, package1.getSuspiciousValue());
    Assert.assertEquals(new Integer(-1), package1.getLocation());

    // Class
    Assert.assertEquals(1, package1.getClasses().size());
    Class class1 = package1.getClasses().iterator().next();
    Assert.assertEquals(new Integer(1), class1.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, class1.getSuspiciousValue());
    Assert.assertEquals(CLASS_FIRST_LINE, class1.getLocation());
    Assert.assertEquals(CLASS_NAME1, class1.getName());

    // Method
    Assert.assertEquals(1, class1.getMethods().size());
    Method method1 = class1.getMethods().iterator().next();
    Assert.assertEquals(new Integer(1), method1.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, method1.getSuspiciousValue());
    Assert.assertEquals(SUSPICIOUSNESS, method1.getMethodsusp());
    Assert.assertEquals(METHOD_FIRST_LINE, method1.getLocation());
    Assert.assertEquals(METHOD_SIGNATURE, method1.getName());
    Assert.assertEquals(METHOD_ID, method1.getId());
    Assert.assertEquals(new Integer(1), method1.getPosition());

    // Requirement
    Assert.assertEquals(1, method1.getRequirements().size());
    Requirement requirementExpected1 = method1.getRequirements().iterator().next();
    Assert.assertEquals(REQUIREMENT_LINE_NUMBER.toString(), requirementExpected1.getName());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected1.getSuspiciousValue());
    Assert.assertEquals(REQUIREMENT_LINE_NUMBER, requirementExpected1.getLocation());
  }
  @Test
  @Ignore // TODO teste falha dependendo da versao do java
  public void complex() {
    HierarchicalXmlBuilder xmlBuilder = createSimpleXmlBuilder();
    // variaveis
    String className2 = CLASS_NAME1 + 1;
    String className3 = "br.usp.each.saeg.jaguar.core.element";

    // Requisitos
    AbstractTestRequirement requirement2 = new LineTestRequirement(CLASS_NAME1, 9);
    requirement2.setClassFirstLine(CLASS_FIRST_LINE);
    requirement2.setMethodId(METHOD_ID);
    requirement2.setMethodLine(METHOD_FIRST_LINE);
    requirement2.setMethodSignature(METHOD_SIGNATURE);
    requirement2.setSuspiciousness(SUSPICIOUSNESS);
    xmlBuilder.addTestRequirement(requirement2);

    AbstractTestRequirement requirement3 = new LineTestRequirement(CLASS_NAME1, 21);
    requirement3.setClassFirstLine(CLASS_FIRST_LINE);
    requirement3.setMethodId(1);
    requirement3.setMethodLine(21);
    requirement3.setMethodSignature("calc()");
    requirement3.setSuspiciousness(SUSPICIOUSNESS);
    xmlBuilder.addTestRequirement(requirement3);

    AbstractTestRequirement requirement4 = new LineTestRequirement(className2, 5);
    requirement4.setClassFirstLine(3);
    requirement4.setMethodId(0);
    requirement4.setMethodLine(5);
    requirement4.setMethodSignature("order()");
    requirement4.setSuspiciousness(SUSPICIOUSNESS);
    xmlBuilder.addTestRequirement(requirement4);

    AbstractTestRequirement requirement5 = new LineTestRequirement(className3, 13);
    requirement5.setClassFirstLine(10);
    requirement5.setMethodId(0);
    requirement5.setMethodLine(13);
    requirement5.setMethodSignature("clean()");
    requirement5.setSuspiciousness(SUSPICIOUSNESS);
    xmlBuilder.addTestRequirement(requirement5);

    AbstractTestRequirement requirement6 = new LineTestRequirement(className3, 14);
    requirement6.setClassFirstLine(10);
    requirement6.setMethodId(0);
    requirement6.setMethodLine(13);
    requirement6.setMethodSignature("clean()");
    requirement6.setSuspiciousness(SUSPICIOUSNESS);
    xmlBuilder.addTestRequirement(requirement6);

    AbstractTestRequirement requirement7 = new LineTestRequirement(className3, 15);
    requirement7.setClassFirstLine(10);
    requirement7.setMethodId(0);
    requirement7.setMethodLine(13);
    requirement7.setMethodSignature("clean()");
    requirement7.setSuspiciousness(SUSPICIOUSNESS);
    xmlBuilder.addTestRequirement(requirement7);

    AbstractTestRequirement requirement8 = new LineTestRequirement(className3, 16);
    requirement8.setClassFirstLine(10);
    requirement8.setMethodId(0);
    requirement8.setMethodLine(13);
    requirement8.setMethodSignature("clean()");
    requirement8.setSuspiciousness(SUSPICIOUSNESS);
    xmlBuilder.addTestRequirement(requirement8);

    HierarchicalFaultClassification complexXml = xmlBuilder.build();

    // Assert equals
    // Project
    Assert.assertEquals(PROJECT_NAME, complexXml.getProject());

    // TestCriteria
    Assert.assertEquals(REQUIREMENT_TYPE, complexXml.getRequirementType());
    Assert.assertEquals("TARANTULA", complexXml.getHeuristic());

    // Package 1
    Assert.assertEquals(2, complexXml.getPackages().size());
    Iterator<Package> packageIterator = complexXml.getPackages().iterator();
    Package package1 = packageIterator.next();
    Assert.assertEquals(new Integer(4), package1.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, package1.getSuspiciousValue());
    Assert.assertEquals(null, package1.getLocation());

    // Class 3
    Assert.assertEquals(1, package1.getClasses().size());
    Class class3 = package1.getClasses().iterator().next();
    Assert.assertEquals(new Integer(4), class3.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, class3.getSuspiciousValue());
    Assert.assertEquals(new Integer(10), class3.getLocation());
    Assert.assertEquals(className3, class3.getName());

    // Method 1
    Assert.assertEquals(1, class3.getMethods().size());
    Method method4 = class3.getMethods().iterator().next();
    Assert.assertEquals(new Integer(4), method4.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, method4.getSuspiciousValue());
    Assert.assertEquals(SUSPICIOUSNESS, method4.getMethodsusp());
    Assert.assertEquals(new Integer(13), method4.getLocation());
    Assert.assertEquals("clean()", method4.getName());
    Assert.assertEquals(new Integer(0), method4.getId());
    Assert.assertEquals(new Integer(4), method4.getPosition());

    // Requirement 5
    Assert.assertEquals(4, method4.getRequirements().size());
    Iterator<? extends Requirement> requirementIterator = method4.getRequirements().iterator();
    Requirement requirementExpected5 = requirementIterator.next();
    Assert.assertEquals("13", requirementExpected5.getName());
    Assert.assertEquals(new Integer(13), requirementExpected5.getLocation());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected5.getSuspiciousValue());

    // Requirement 6
    Assert.assertEquals(4, method4.getRequirements().size());
    Requirement requirementExpected6 = requirementIterator.next();
    Assert.assertEquals("14", requirementExpected6.getName());
    Assert.assertEquals(new Integer(14), requirementExpected6.getLocation());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected6.getSuspiciousValue());

    // Requirement 7
    Assert.assertEquals(4, method4.getRequirements().size());
    Requirement requirementExpected7 = requirementIterator.next();
    Assert.assertEquals("15", requirementExpected7.getName());
    Assert.assertEquals(new Integer(15), requirementExpected7.getLocation());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected7.getSuspiciousValue());

    // Requirement 8
    Assert.assertEquals(4, method4.getRequirements().size());
    Requirement requirementExpected8 = requirementIterator.next();
    Assert.assertEquals("16", requirementExpected8.getName());
    Assert.assertEquals(new Integer(16), requirementExpected8.getLocation());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected8.getSuspiciousValue());

    // Package 2
    Package package2 = packageIterator.next();
    Assert.assertEquals(new Integer(4), package2.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, package2.getSuspiciousValue());
    Assert.assertEquals(null, package2.getLocation());

    // Class 1
    Assert.assertEquals(2, package2.getClasses().size());
    Iterator<Class> classIterator = package2.getClasses().iterator();
    Class class1 = classIterator.next();
    Assert.assertEquals(new Integer(3), class1.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, class1.getSuspiciousValue());
    Assert.assertEquals(CLASS_FIRST_LINE, class1.getLocation());
    Assert.assertEquals(CLASS_NAME1, class1.getName());

    // Method 1
    Assert.assertEquals(2, class1.getMethods().size());
    Iterator<Method> methodIterator = class1.getMethods().iterator();
    Method method1 = methodIterator.next();
    Assert.assertEquals(new Integer(2), method1.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, method1.getSuspiciousValue());
    Assert.assertEquals(SUSPICIOUSNESS, method1.getMethodsusp());
    Assert.assertEquals(METHOD_FIRST_LINE, method1.getLocation());
    Assert.assertEquals(METHOD_SIGNATURE, method1.getName());
    Assert.assertEquals(METHOD_ID, method1.getId());
    Assert.assertEquals(new Integer(1), method1.getPosition());

    // Requirement 1
    Assert.assertEquals(2, method1.getRequirements().size());
    requirementIterator = method1.getRequirements().iterator();
    Requirement requirementExpected1 = requirementIterator.next();
    Assert.assertEquals(REQUIREMENT_LINE_NUMBER.toString(), requirementExpected1.getName());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected1.getSuspiciousValue());
    Assert.assertEquals(REQUIREMENT_LINE_NUMBER, requirementExpected1.getLocation());

    // Requirement 2
    Assert.assertEquals(2, method1.getRequirements().size());
    Requirement requirementExpected2 = requirementIterator.next();
    Assert.assertEquals("9", requirementExpected2.getName());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected2.getSuspiciousValue());
    Assert.assertEquals(new Integer(9), requirementExpected2.getLocation());

    // Method 2
    Assert.assertEquals(2, class1.getMethods().size());
    Method method2 = methodIterator.next();
    Assert.assertEquals(new Integer(1), method2.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, method2.getSuspiciousValue());
    Assert.assertEquals(SUSPICIOUSNESS, method2.getMethodsusp());
    Assert.assertEquals(new Integer(21), method2.getLocation());
    Assert.assertEquals("calc()", method2.getName());
    Assert.assertEquals(new Integer(1), method2.getId());
    Assert.assertEquals(new Integer(2), method2.getPosition());

    // Requirement 3
    Assert.assertEquals(1, method2.getRequirements().size());
    Requirement requirementExpected3 = method2.getRequirements().iterator().next();
    Assert.assertEquals("21", requirementExpected3.getName());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected3.getSuspiciousValue());
    Assert.assertEquals(new Integer(21), requirementExpected3.getLocation());

    // Class 2
    Assert.assertEquals(2, package2.getClasses().size());
    Class class2 = classIterator.next();
    Assert.assertEquals(new Integer(1), class2.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, class2.getSuspiciousValue());
    Assert.assertEquals(new Integer(3), class2.getLocation());
    Assert.assertEquals(className2, class2.getName());

    // Method 1
    Assert.assertEquals(1, class2.getMethods().size());
    method1 = class2.getMethods().iterator().next();
    Assert.assertEquals(new Integer(1), method1.getNumber());
    Assert.assertEquals(SUSPICIOUSNESS, method1.getSuspiciousValue());
    Assert.assertEquals(SUSPICIOUSNESS, method1.getMethodsusp());
    Assert.assertEquals(new Integer(5), method1.getLocation());
    Assert.assertEquals("order()", method1.getName());
    Assert.assertEquals(new Integer(0), method1.getId());
    Assert.assertEquals(new Integer(3), method1.getPosition());

    // Requirement 4
    Assert.assertEquals(1, method1.getRequirements().size());
    Requirement requirementExpected4 = method1.getRequirements().iterator().next();
    Assert.assertEquals("5", requirementExpected4.getName());
    Assert.assertEquals(SUSPICIOUSNESS, requirementExpected4.getSuspiciousValue());
    Assert.assertEquals(new Integer(5), requirementExpected4.getLocation());
  }