// Path: feature-matcher-generator/src/main/java/ru/yandex/qatools/processors/matcher/gen/bean/ClassSpecDescription.java
// public class ClassSpecDescription implements Comparable<ClassSpecDescription> {
// 
//     private Element classElement;
//     private TypeSpec spec;
// 
//     public ClassSpecDescription(Element classElement, TypeSpec spec) {
//         this.classElement = classElement;
//         this.spec = spec;
//     }
// 
//     public Element getClassElement() {
//         return classElement;
//     }
// 
//     public TypeSpec getSpec() {
//         return spec;
//     }
// 
//     public void setSpec(TypeSpec spec) {
//         this.spec = spec;
//     }
// 
//     public JavaFile asJavaFile() {
//         return JavaFile.builder(
//                 ((PackageElement) getClassElement().getEnclosingElement()).getQualifiedName().toString(),
//                 getSpec()
//         ).build();
//     }
// 
//     public void mergeWithParentFrom(Map<Element, ClassSpecDescription> classes) {
//         ClassSpecDescription container = classes.computeIfAbsent(
//                 getClassElement().getEnclosingElement(),
//                 enclosing -> new ClassSpecDescription(
//                         getClassElement().getEnclosingElement(),
//                         MethodsCollector.commonClassPart(enclosing).build()
//                 )
//         );
// 
//         container.setSpec(
//                 container.getSpec()
//                         .toBuilder()
//                         .addType(getSpec())
//                         .build()
//         );
//     }
// 
//     @Override
//     public int compareTo(ClassSpecDescription o) {
//         return Comparator.comparing(ClassSpecDescription::depthOf).compare(this, o);
//     }
// 
//     private static long depthOf(ClassSpecDescription element) {
//         return ElementParentsIterable.stream(element.getClassElement())
//                 .filter(hasParentPackageElement().negate())
//                 .count();
//     }
// }
// 
// Path: feature-matcher-generator/src/test/java/ru/yandex/qatools/processors/matcher/gen/testclasses/WithSomeFields.java
// public class WithSomeFields {
//     int value;
//     byte[] bytes;
//     String str;
//     Integer integer;
//     String lower;
// 
//     int getValue() {
//         return value;
//     }
// 
//     byte[] getBytes() {
//         return bytes;
//     }
// 
//     String getStr() {
//         return str;
//     }
// 
//     Integer getInteger() {
//         return integer;
//     }
// 
//     String getLOWER() {
//         return lower;
//     }
// }
// 
// Path: feature-matcher-generator/src/test/java/ru/yandex/qatools/processors/matcher/gen/testclasses/WithoutGetter.java
// public class WithoutGetter {
//     private String prop;
// }
// 
// Path: feature-matcher-generator/src/main/java/ru/yandex/qatools/processors/matcher/gen/processing/MethodsCollector.java
// public static MethodsCollector collectingMethods() {
//     return new MethodsCollector();
// }


import com.google.testing.compile.CompilationRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import ru.yandex.qatools.processors.matcher.gen.bean.ClassSpecDescription;
import ru.yandex.qatools.processors.matcher.gen.testclasses.WithSomeFields;
import ru.yandex.qatools.processors.matcher.gen.testclasses.WithoutGetter;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.function.Predicate;
import static java.util.stream.Collectors.toCollection;
import static java.util.stream.Collectors.toList;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static ru.yandex.qatools.processors.matcher.gen.processing.MethodsCollector.collectingMethods;
package ru.yandex.qatools.processors.matcher.gen.processing;




/**
 * @author lanwen (Merkushev Kirill)
 */
public class MethodsCollectorTest {

    @Rule
    public CompilationRule compilation = new CompilationRule();
    @Rule
    public ExpectedException thrown = ExpectedException.none();

    @Test
    public void shouldCollectFields() throws Exception {
// Path: feature-matcher-generator/src/main/java/ru/yandex/qatools/processors/matcher/gen/bean/ClassSpecDescription.java
// public class ClassSpecDescription implements Comparable<ClassSpecDescription> {
// 
//     private Element classElement;
//     private TypeSpec spec;
// 
//     public ClassSpecDescription(Element classElement, TypeSpec spec) {
//         this.classElement = classElement;
//         this.spec = spec;
//     }
// 
//     public Element getClassElement() {
//         return classElement;
//     }
// 
//     public TypeSpec getSpec() {
//         return spec;
//     }
// 
//     public void setSpec(TypeSpec spec) {
//         this.spec = spec;
//     }
// 
//     public JavaFile asJavaFile() {
//         return JavaFile.builder(
//                 ((PackageElement) getClassElement().getEnclosingElement()).getQualifiedName().toString(),
//                 getSpec()
//         ).build();
//     }
// 
//     public void mergeWithParentFrom(Map<Element, ClassSpecDescription> classes) {
//         ClassSpecDescription container = classes.computeIfAbsent(
//                 getClassElement().getEnclosingElement(),
//                 enclosing -> new ClassSpecDescription(
//                         getClassElement().getEnclosingElement(),
//                         MethodsCollector.commonClassPart(enclosing).build()
//                 )
//         );
// 
//         container.setSpec(
//                 container.getSpec()
//                         .toBuilder()
//                         .addType(getSpec())
//                         .build()
//         );
//     }
// 
//     @Override
//     public int compareTo(ClassSpecDescription o) {
//         return Comparator.comparing(ClassSpecDescription::depthOf).compare(this, o);
//     }
// 
//     private static long depthOf(ClassSpecDescription element) {
//         return ElementParentsIterable.stream(element.getClassElement())
//                 .filter(hasParentPackageElement().negate())
//                 .count();
//     }
// }
// 
// Path: feature-matcher-generator/src/test/java/ru/yandex/qatools/processors/matcher/gen/testclasses/WithSomeFields.java
// public class WithSomeFields {
//     int value;
//     byte[] bytes;
//     String str;
//     Integer integer;
//     String lower;
// 
//     int getValue() {
//         return value;
//     }
// 
//     byte[] getBytes() {
//         return bytes;
//     }
// 
//     String getStr() {
//         return str;
//     }
// 
//     Integer getInteger() {
//         return integer;
//     }
// 
//     String getLOWER() {
//         return lower;
//     }
// }
// 
// Path: feature-matcher-generator/src/test/java/ru/yandex/qatools/processors/matcher/gen/testclasses/WithoutGetter.java
// public class WithoutGetter {
//     private String prop;
// }
// 
// Path: feature-matcher-generator/src/main/java/ru/yandex/qatools/processors/matcher/gen/processing/MethodsCollector.java
// public static MethodsCollector collectingMethods() {
//     return new MethodsCollector();
// }


// Path: feature-matcher-generator/src/test/java/ru/yandex/qatools/processors/matcher/gen/processing/MethodsCollectorTest.java
import com.google.testing.compile.CompilationRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import ru.yandex.qatools.processors.matcher.gen.bean.ClassSpecDescription;
import ru.yandex.qatools.processors.matcher.gen.testclasses.WithSomeFields;
import ru.yandex.qatools.processors.matcher.gen.testclasses.WithoutGetter;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.function.Predicate;
import static java.util.stream.Collectors.toCollection;
import static java.util.stream.Collectors.toList;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static ru.yandex.qatools.processors.matcher.gen.processing.MethodsCollector.collectingMethods;

package ru.yandex.qatools.processors.matcher.gen.processing;




/**
 * @author lanwen (Merkushev Kirill)
 */
public class MethodsCollectorTest {

    @Rule
    public CompilationRule compilation = new CompilationRule();
    @Rule
    public ExpectedException thrown = ExpectedException.none();

    @Test
    public void shouldCollectFields() throws Exception {
        LinkedList<Element> fields = findFields(WithSomeFields.class);