Skip to content

Commit

Permalink
Issue: TNG#60
Browse files Browse the repository at this point in the history
I worked on adding theClass(String className) to the ArchRuleDefinition class so that users can easily select a specifc class to test

Signed-off-by: Michael Sherman <msherman32@gatech.edu>
  • Loading branch information
Michael Sherman committed May 24, 2018
1 parent d63dc3b commit 75fce5e
Showing 1 changed file with 42 additions and 0 deletions.
Expand Up @@ -15,17 +15,24 @@
*/
package com.tngtech.archunit.lang.syntax;

import java.util.Collections;

import com.tngtech.archunit.PublicAPI;
import com.tngtech.archunit.base.Function;
import com.tngtech.archunit.base.Function.Functions;
import com.tngtech.archunit.core.domain.JavaClass;
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import com.tngtech.archunit.lang.AbstractClassesTransformer;
import com.tngtech.archunit.lang.ArchCondition;
import com.tngtech.archunit.lang.ArchRule;
import com.tngtech.archunit.lang.ClassesTransformer;
import com.tngtech.archunit.lang.Priority;
import com.tngtech.archunit.lang.syntax.elements.GivenClass;
import com.tngtech.archunit.lang.syntax.elements.GivenClasses;
import com.tngtech.archunit.lang.syntax.elements.GivenClassesConjunction;
import com.tngtech.archunit.lang.syntax.elements.GivenObjects;
import com.tngtech.archunit.lang.syntax.GivenClassesThatInternal;

import static com.tngtech.archunit.PublicAPI.Usage.ACCESS;
import static com.tngtech.archunit.lang.Priority.MEDIUM;
Expand Down Expand Up @@ -66,6 +73,10 @@ public static GivenClasses noClasses() {
return priority(MEDIUM).noClasses();
}

public static GivenClass theClass(Class<?> clazz) {
return priority(MEDIUM).theClass(clazz);
}

public static final class Creator {
private final Priority priority;

Expand Down Expand Up @@ -110,6 +121,37 @@ public <TYPE> GivenObjects<TYPE> no(ClassesTransformer<TYPE> classesTransformer)
classesTransformer.as("no " + classesTransformer.getDescription()),
ArchRuleDefinition.<TYPE>negateCondition());
}

public GivenClass theClass(final Class<?> clazz) {
ClassesTransformer<JavaClass> theClass = new AbstractClassesTransformer<JavaClass>("the class " + clazz.getName()) {
@Override
public Iterable<JavaClass> doTransform(JavaClasses classes) {
return Collections.singleton(classes.get(clazz));
}
};
return new GivenClassInternal(priority, theClass, Functions.<ArchCondition<JavaClass>>identity());
}

public GivenClass theClass(final String className) {
ArchCondition<JavaClass> nameCondition = getConditionFrom(className);

return new GivenClassInternal(Priority.LOW, classesTransformer, prepareCondition);



//need to get to haveFullyQualifiedName in ArchConditions
}

private ArchCondition<JavaClass> getConditionFrom(String className) {
GivenClassesInternal givenClasses = new GivenClassesInternal(priority, ClassesIdentityTransformer.classes());
PredicateAggregator<JavaClass> predicateAggregator = new PredicateAggregator<JavaClass>();

GivenClassesThatInternal theClassThat = new GivenClassesThatInternal(givenClasses, predicateAggregator);
GivenClassesConjunction conjunction = theClassThat.haveFullyQualifiedName(className);
// or().haveSimpleName(className);

return conjunction;
}
}

private static <T> Function<ArchCondition<T>, ArchCondition<T>> negateCondition() {
Expand Down

0 comments on commit 75fce5e

Please sign in to comment.