/** * Copyright (c) 2014 - 2017 Frank Appel * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Frank Appel - initial API and implementation */ package com.codeaffine.eclipse.core.runtime; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.function.Predicate; import java.util.regex.PatternSyntaxException; import java.util.stream.Stream; import org.junit.Test; public class PredicatesTest<E> { private static final String NAME = "name"; private static final String ATTRIBUTE_VALUE = "value"; private static final String ATTRIBUTE_NAME = "name"; @Test public void alwaysTrue() { Predicate<Extension> predicate = Predicates.alwaysTrue(); boolean actual = predicate.test( mock( Extension.class ) ); assertThat( actual ).isTrue(); } @Test public void alwaysTrueWithNullAsInput() { Predicate<Extension> predicate = Predicates.alwaysTrue(); boolean actual = predicate.test( null ); assertThat( actual ).isTrue(); } @Test public void alwaysFalse() { Predicate<Extension> predicate = Predicates.alwaysFalse(); boolean actual = predicate.test( mock( Extension.class ) ); assertThat( actual ).isFalse(); } @Test public void alwaysFalseWithNullAsInput() { Predicate<Extension> predicate = Predicates.alwaysFalse(); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test public void isNull() { Predicate<Extension> predicate = Predicates.isNull(); boolean actual = predicate.test( null ); assertThat( actual ).isTrue(); } @Test public void isNullWithInput() { Predicate<Extension> predicate = Predicates.isNull(); boolean actual = predicate.test( mock( Extension.class ) ); assertThat( actual ).isFalse(); } @Test public void notNull() { Predicate<Extension> predicate = Predicates.notNull(); boolean actual = predicate.test( mock( Extension.class ) ); assertThat( actual ).isTrue(); } @Test public void notNullWithNullAsInput() { Predicate<Extension> predicate = Predicates.notNull(); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test public void not() { Predicate<Extension> predicate = Predicates.not( Predicates.alwaysTrue() ); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test( expected = IllegalArgumentException.class ) public void notWithNullAsPredictateArgument() { Predicates.not( null ); } @Test public void and() { Predicate<Extension> predicate = Predicates.and( Predicates.alwaysTrue(), Predicates.alwaysTrue() ); boolean actual = predicate.test( null ); assertThat( actual ).isTrue(); } @Test public void andWithFalsePredicate() { Predicate<Extension> predicate = Predicates.and( Predicates.alwaysTrue(), Predicates.alwaysFalse() ); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test public void andOnIterable() { Predicate<Extension> predicate = Predicates.and( asList( Predicates.alwaysTrue(), Predicates.alwaysTrue() ) ); boolean actual = predicate.test( null ); assertThat( actual ).isTrue(); } @Test public void andOnIterableWithFalsePredicate() { Predicate<Extension> predicate = Predicates.and( asList( Predicates.alwaysTrue(), Predicates.alwaysFalse() ) ); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test public void andOnVarargs() { Predicate<Extension> predicate = Predicates.and( Predicates.alwaysTrue(), Predicates.alwaysTrue(), Predicates.alwaysTrue() ); boolean actual = predicate.test( null ); assertThat( actual ).isTrue(); } @Test public void andOnVarargsWithFalsePredicate() { Predicate<Extension> predicate = Predicates.and( Predicates.alwaysTrue(), Predicates.alwaysTrue(), Predicates.alwaysFalse() ); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test( expected = IllegalArgumentException.class ) public void andWithNullAsFirstArgument() { Predicates.and( null, Predicates.alwaysFalse() ); } @Test( expected = IllegalArgumentException.class ) public void andWithNullAsSecondArgument() { Predicates.and( Predicates.alwaysFalse(), null ); } @Test( expected = IllegalArgumentException.class ) public void andOnIterableWithNullArgument() { Predicates.and( ( Iterable<? extends Predicate<Extension>>)null ); } @Test( expected = IllegalArgumentException.class ) public void andOnIterableWithNullAsIterableElement() { List<Predicate<Extension>> predicates = new ArrayList<>(); predicates.add( null ); Predicates.and( predicates ); } @Test( expected = IllegalArgumentException.class ) @SuppressWarnings("unchecked") public void andOnVarargsWithNullArgument() { Predicates.and( ( Predicate[] )null ); } @Test( expected = IllegalArgumentException.class ) @SuppressWarnings("unchecked") public void andOnVarargsWithNullAsArrayElement() { Predicates.and( new Predicate[] { null } ); } @Test public void or() { Predicate<Extension> predicate = Predicates.or( Predicates.alwaysTrue(), Predicates.alwaysFalse() ); boolean actual = predicate.test( null ); assertThat( actual ).isTrue(); } @Test public void orWithFalsePredicatesOnly() { Predicate<Extension> predicate = Predicates.or( Predicates.alwaysFalse(), Predicates.alwaysFalse() ); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test public void orOnIterable() { Predicate<Extension> predicate = Predicates.or( asList( Predicates.alwaysTrue(), Predicates.alwaysFalse() ) ); boolean actual = predicate.test( null ); assertThat( actual ).isTrue(); } @Test public void orOnIterableWithFalsePredicatesOnly() { Predicate<Extension> predicate = Predicates.or( asList( Predicates.alwaysFalse(), Predicates.alwaysFalse() ) ); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test public void orOnVarargs() { Predicate<Extension> predicate = Predicates.or( Predicates.alwaysTrue(), Predicates.alwaysFalse(), Predicates.alwaysFalse() ); boolean actual = predicate.test( null ); assertThat( actual ).isTrue(); } @Test public void orOnVarargsWithFalsePredicatesOnly() { Predicate<Extension> predicate = Predicates.or( Predicates.alwaysFalse(), Predicates.alwaysFalse(), Predicates.alwaysFalse() ); boolean actual = predicate.test( null ); assertThat( actual ).isFalse(); } @Test( expected = IllegalArgumentException.class ) public void orWithNullAsFirstArgument() { Predicates.or( null, Predicates.alwaysFalse() ); } @Test( expected = IllegalArgumentException.class ) public void orWithNullAsSecondArgument() { Predicates.or( Predicates.alwaysFalse(), null ); } @Test( expected = IllegalArgumentException.class ) public void orOnIterableWithNullArgument() { Predicates.or( ( Iterable<? extends Predicate<Extension>>)null ); } @Test( expected = IllegalArgumentException.class ) public void orOnIterableWithNullAsIterableElement() { List<Predicate<Extension>> predicates = new ArrayList<>(); predicates.add( null ); Predicates.or( predicates ); } @Test( expected = IllegalArgumentException.class ) @SuppressWarnings("unchecked") public void orOnVarargsWithNullArgument() { Predicates.or( ( Predicate[] )null ); } @Test( expected = IllegalArgumentException.class ) @SuppressWarnings("unchecked") public void orOnVarargsWithNullAsArrayElement() { Predicates.or( new Predicate[] { null } ); } @Test public void attribute() { Extension extension = createExtension( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); Predicate<Extension> predicate = Predicates.attribute( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); boolean actual = predicate.test( extension ); assertThat( actual ).isTrue(); } @Test public void attributeWithNonMatchingValue() { Extension extension = createExtension( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); Predicate<Extension> predicate = Predicates.attribute( ATTRIBUTE_NAME, "doesNotMatch" ); boolean actual = predicate.test( extension ); assertThat( actual ).isFalse(); } @Test public void attributeWithNonMatchingNullValue() { Extension extension = createExtension( ATTRIBUTE_NAME, null ); Predicate<Extension> predicate = Predicates.attribute( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); boolean actual = predicate.test( extension ); assertThat( actual ).isFalse(); } @Test( expected = IllegalArgumentException.class ) public void attributeWithNullAsName() { Predicates.attribute( null, ATTRIBUTE_VALUE ); } @Test( expected = IllegalArgumentException.class ) public void attributeWithNullAsValue() { Predicates.attribute( ATTRIBUTE_NAME, null ); } @Test public void attributeIsNull() { Extension extension = createExtension( ATTRIBUTE_NAME, null ); Predicate<Extension> predicate = Predicates.attributeIsNull( ATTRIBUTE_NAME ); boolean actual = predicate.test( extension ); assertThat( actual ).isTrue(); } @Test public void attributeIsNullWithNonNullAttributeValue() { Extension extension = createExtension( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); Predicate<Extension> predicate = Predicates.attributeIsNull( ATTRIBUTE_NAME ); boolean actual = predicate.test( extension ); assertThat( actual ).isFalse(); } @Test( expected = IllegalArgumentException.class ) public void attributeIsNullWithNullAsName() { Predicates.attributeIsNull( null ); } @Test public void attributeMatcher() { Extension extension = createExtension( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); Predicate<Extension> predicate = Predicates.attributeMatcher( ATTRIBUTE_NAME, ".*" ); boolean actual = predicate.test( extension ); assertThat( actual ).isTrue(); } @Test public void attributeMatcherWithNonMatchingExpression() { Extension extension = createExtension( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); Predicate<Extension> predicate = Predicates.attributeMatcher( ATTRIBUTE_NAME, "does.not.match" ); boolean actual = predicate.test( extension ); assertThat( actual ).isFalse(); } @Test( expected = PatternSyntaxException.class ) public void attributeMatcherWithIllegalSyntax() { Extension extension = createExtension( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); Predicate<Extension> predicate = Predicates.attributeMatcher( ATTRIBUTE_NAME, "[" ); predicate.test( extension ); } @Test( expected = IllegalArgumentException.class ) public void attributeMatcherWithNullAsName() { Predicates.attributeMatcher( null, ATTRIBUTE_VALUE ); } @Test( expected = IllegalArgumentException.class ) public void attributeWithNullAsRegex() { Predicates.attribute( ATTRIBUTE_NAME, null ); } @Test public void name() { Extension extension = createExtension( NAME ); Predicate<Extension> predicate = Predicates.name( NAME ); boolean actual = predicate.test( extension ); assertThat( actual ).isTrue(); } @Test public void nameWithNonMatchingValue() { Extension extension = createExtension( NAME ); Predicate<Extension> predicate = Predicates.name( "doesNotMatch" ); boolean actual = predicate.test( extension ); assertThat( actual ).isFalse(); } @Test( expected = IllegalArgumentException.class ) public void nameWithNullAsNameArgument() { Predicates.name( null ); } @Test public void nameMatcher() { Extension extension = createExtension( NAME ); Predicate<Extension> predicate = Predicates.nameMatcher( ".*" ); boolean actual = predicate.test( extension ); assertThat( actual ).isTrue(); } @Test public void nameWithNonMatchingExpression() { Extension extension = createExtension( NAME ); Predicate<Extension> predicate = Predicates.nameMatcher( "does.not.match" ); boolean actual = predicate.test( extension ); assertThat( actual ).isFalse(); } @Test( expected = IllegalArgumentException.class ) public void nameMatcherWithNullAsNameArgument() { Predicates.nameMatcher( null ); } @Test( expected = PatternSyntaxException.class ) public void nameMatcherWithIllegalSyntax() { Extension extension = createExtension( NAME ); Predicate<Extension> predicate = Predicates.nameMatcher( "[" ); predicate.test( extension ); } private static Extension createExtension( String attributeName, String attributeValue ) { Extension result = mock( Extension.class ); when( result.getAttribute( attributeName ) ).thenReturn( attributeValue ); return result; } private static Extension createExtension( String name ) { Extension result = mock( Extension.class ); when( result.getName() ).thenReturn( name ); return result; } @SafeVarargs private static Collection<Predicate<Extension>> asList( Predicate<Extension> ... predicates ) { List<Predicate<Extension>> result = new ArrayList<>(); Stream.of( predicates ).forEach( predicate -> result.add( predicate ) ); return result; } }