<?xml version="1.0" encoding="UTF-8"?>
<test-data>
    <code-fragment id="basic-violation">
    <![CDATA[
public class Foo {
 public void example() {
  int x = 0;
  int a = 0;
  int b = 0;
  int c = 0;
  int d = 0;
  int a1 = 0;
  int a2 = 0;
  int b1 = 0;
  int b2 = 0;
  int z = 0;
  int h = 0;
  int e = 0;
  int f = 0;

  if (a == b) {
      if (a1 == b1) {
   x = 2;
      } else if (a2 == b2) {
   x = 2;
      } else {
   x = 2;
      }
  } else if (c == d) {
      while (c == d) {
   x = 2;
      }
  } else if (e == f) {
      for (int n = 0; n < h; n++) {
   x = 2;
      }
  } else {
      switch (z) {
      case 1:
   x = 2;
   break;

      case 2:
   x = 2;
   break;

      case 3:
   x = 2;
   break;

      default:
   x = 2;
   break;
      }
  }
 }
}
     ]]>
    </code-fragment>

    <test-code>
        <description>Simple method</description>
        <!--rule-property name="reportLevel">1</rule-property-->
        <expected-problems>2</expected-problems>
        <expected-messages>
            <message>The class 'Foo' has a Cyclomatic Complexity of 2 (Highest = 1).</message>
            <message>The method 'foo' has a Cyclomatic Complexity of 1.</message>
        </expected-messages>
        <code><![CDATA[
public class Foo {
 public void foo() {}
}
     ]]></code>
    </test-code>
    <test-code>
        <description>testLessComplicatedThanReportLevel</description>
        <!--rule-property name="reportLevel">10</rule-property-->
        <expected-problems>0</expected-problems>
        <code><![CDATA[
public class Foo {
 public void foo() {}
}
     ]]></code>
    </test-code>
    <test-code>
        <description>Complicated method</description>
        <!--rule-property name="reportLevel">10</rule-property-->
        <expected-problems>2</expected-problems>
        <expected-messages>
            <message>The class 'Foo' has a Cyclomatic Complexity of 12 (Highest = 11).</message>
            <message>The method 'example' has a Cyclomatic Complexity of 11.</message>
        </expected-messages>
        <code-ref id="basic-violation"/>
    </test-code>
    <test-code>
        <description>Constructor</description>
        <!--rule-property name="reportLevel">1</rule-property-->
        <expected-problems>2</expected-problems>
        <expected-messages>
            <message>The class 'Foo' has a Cyclomatic Complexity of 2 (Highest = 1).</message>
            <message>The constructor 'Foo' has a Cyclomatic Complexity of 1.</message>
        </expected-messages>
        <code><![CDATA[
public class Foo {
 public Foo() {}
}
     ]]></code>
    </test-code>
    <test-code>
        <description>
        	<![CDATA[
Testing new parameter showClassMethods
     		]]>
     	</description>
        <rule-property name="showClassesComplexity">false</rule-property>
        <expected-problems>1</expected-problems>
       <code-ref id="basic-violation"/>
    </test-code>
    <test-code>
        <description>
        	<![CDATA[
Testing new parameter showMethodsMethods
     		]]>
     	</description>
        <rule-property name="showMethodsComplexity">false</rule-property>
        <expected-problems>1</expected-problems>
       <code-ref id="basic-violation"/>
    </test-code>
  <test-code>
        <description>
        	<![CDATA[
Testing default value of showClassMethods and showClassesComplexity
     		]]>
     	</description>
        <expected-problems>2</expected-problems>
       <code-ref id="basic-violation"/>
    </test-code>
    <code-fragment id="constructor-violation"><![CDATA[
public class Test {
  public Test() {
    if (a == 1) {
      if (b == 2) {
        System.out.println("b");
      } else if (b == 1) {
      }
    } else {
    }
  }
}
    ]]></code-fragment>
    <test-code>
        <description>#984 Cyclomatic complexity should treat constructors like methods: 1 - showMethodsComplexity=true</description>
        <rule-property name="showClassesComplexity">false</rule-property>
        <rule-property name="showMethodsComplexity">true</rule-property>
        <rule-property name="reportLevel">1</rule-property>
        <expected-problems>1</expected-problems>
        <code-ref id="constructor-violation"/>
    </test-code>
    <test-code>
        <description>#984 Cyclomatic complexity should treat constructors like methods: 2 - showMethodsComplexity=false</description>
        <rule-property name="showClassesComplexity">false</rule-property>
        <rule-property name="showMethodsComplexity">false</rule-property>
        <rule-property name="reportLevel">1</rule-property>
        <expected-problems>0</expected-problems>
        <code-ref id="constructor-violation"/>
    </test-code>
    <test-code reinitializeRule="true">
        <description>#985 Suppressed methods shouldn't affect avg CyclomaticComplexity</description>
        <rule-property name="reportLevel">2</rule-property>
        <expected-problems>0</expected-problems>
        <code><![CDATA[
public class Test {
  @SuppressWarnings("PMD.CyclomaticComplexity")
  public Test() {
    if (a == 1) {
      if (b == 2) {
        System.out.println("b");
      } else if (b == 1) {
      }
    } else {
    }
  }
}
        ]]></code>
    </test-code>
</test-data>
