package com.tngtech.archunit.core.domain.properties;
import com.tngtech.archunit.base.DescribedPredicate;
import com.tngtech.archunit.core.domain.properties.HasOwner.Functions.Get;
import com.tngtech.archunit.core.domain.properties.HasOwner.Predicates.With;
import org.junit.Test;
import static com.tngtech.archunit.testutil.Assertions.assertThat;
public class HasOwnerTest {
@Test
public void predicate_with_owner() {
HasOwner<String> hasOwner = hasOwner("owner");
assertThat(With.owner(startsWith("o")).apply(hasOwner)).as("predicate matches").isTrue();
assertThat(With.owner(startsWith("w")).apply(hasOwner)).as("predicate matches").isFalse();
assertThat(With.owner(startsWith("foo")).getDescription()).isEqualTo("owner starts with foo");
}
@Test
@SuppressWarnings("unchecked")
public void function_get_owner() {
HasOwner<String> hasOwner = hasOwner("owner");
assertThat(Get.<String>owner().apply(hasOwner)).isEqualTo("owner");
}
private DescribedPredicate<String> startsWith(final String prefix) {
return new DescribedPredicate<String>("starts with " + prefix) {
@Override
public boolean apply(String input) {
return input.startsWith(prefix);
}
};
}
private <T> HasOwner<T> hasOwner(final T owner) {
return new HasOwner<T>() {
@Override
public T getOwner() {
return owner;
}
};
}
}