/** * 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.test.util; import static com.codeaffine.eclipse.core.runtime.Predicates.attribute; import static com.codeaffine.eclipse.core.runtime.test.util.ExtensionAssert.PATTERN_EMPTY_ATTRIBUTE; import static com.codeaffine.eclipse.core.runtime.test.util.ExtensionAssert.PATTERN_ERR_CREATE; import static com.codeaffine.eclipse.core.runtime.test.util.ExtensionAssert.PATTERN_NOT_NULL_ATTRIBUTE; import static com.codeaffine.eclipse.core.runtime.test.util.ExtensionAssert.PATTERN_NULL_ATTRIBUTE; import static com.codeaffine.eclipse.core.runtime.test.util.ExtensionAssert.PATTERN_WRONG_ATTRIBUTE; import static com.codeaffine.eclipse.core.runtime.test.util.ExtensionAssert.PATTERN_WRONG_CHILD_SIZE; import static com.codeaffine.eclipse.core.runtime.test.util.ExtensionAssert.PATTERN_WRONG_CHILD_SIZE_WITH_ATTRIB; import static com.codeaffine.eclipse.core.runtime.test.util.TestExtension.EXTENSION_POINT_ID; import static com.codeaffine.test.util.lang.ThrowableCaptor.thrownBy; import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import com.codeaffine.eclipse.core.runtime.Extension; import com.codeaffine.eclipse.core.runtime.RegistryAdapter; public class ExtensionAssertPDETest { private static final String ATTRIBUTE_NAME = "id"; private static final String ATTRIBUTE_VALUE = "1"; private static final String DOES_NOT_MATCH = "doesNotMatch"; private static final String UNKNOWN = "unknown"; private static final String EMPTY = "empty"; private static final String TYPE = "type"; private static final String CONTRIBUTION = "contribution"; private static final String CHILD = "child"; private Extension extension; private ExtensionAssert extensionAssert; @Before public void setUp() { extension = new RegistryAdapter() .readExtension( EXTENSION_POINT_ID ) .thatMatches( attribute( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ) ) .process(); extensionAssert = ExtensionAssert.assertThat( extension ); } @Test public void assertThatFactory() { assertThat( extensionAssert ).isNotNull(); } @Test public void hasAttributeValue() { ExtensionAssert actual = extensionAssert.hasAttributeValue( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); assertThat( actual ).isSameAs( extensionAssert ); } @Test public void hasAttributeValueThatDoesNotMatch() { Throwable actual = thrownBy( () -> extensionAssert.hasAttributeValue( ATTRIBUTE_NAME, DOES_NOT_MATCH ) ); assertThat( actual ) .hasMessage( format( PATTERN_WRONG_ATTRIBUTE, ATTRIBUTE_NAME, DOES_NOT_MATCH, ATTRIBUTE_VALUE ) ) .isInstanceOf( AssertionError.class ); } @Test public void hasAttributeValueWithUnknownName() { Throwable actual = thrownBy( () -> extensionAssert.hasAttributeValue( UNKNOWN, DOES_NOT_MATCH ) ); assertThat( actual ) .hasMessage( format( PATTERN_WRONG_ATTRIBUTE, UNKNOWN, DOES_NOT_MATCH, null ) ) .isInstanceOf( AssertionError.class ); } @Test public void hasNonEmptyAttributeValueFor() { ExtensionAssert actual = extensionAssert.hasNonEmptyAttributeValueFor( ATTRIBUTE_NAME ); assertThat( actual ).isSameAs( extensionAssert ); } @Test public void hasNonEmptyAttributeValueForWithEmptyValue() { Throwable actual = thrownBy( () -> extensionAssert.hasNonEmptyAttributeValueFor( EMPTY ) ); assertThat( actual ) .hasMessage( format( PATTERN_EMPTY_ATTRIBUTE, EMPTY ) ) .isInstanceOf( AssertionError.class ); } @Test public void hasNonEmptyAttributeValueForWithNullValue() { Throwable actual = thrownBy( () -> extensionAssert.hasNonEmptyAttributeValueFor( UNKNOWN ) ); assertThat( actual ) .hasMessage( format( PATTERN_NULL_ATTRIBUTE, UNKNOWN ) ) .isInstanceOf( AssertionError.class ); } @Test public void hasNoAttributeValueFor() { ExtensionAssert actual = extensionAssert.hasNoAttributeValueFor( UNKNOWN ); assertThat( actual ).isSameAs( extensionAssert ); } @Test public void hasNoAttributeValueForWithValue() { Throwable actual = thrownBy( () -> extensionAssert.hasNoAttributeValueFor( ATTRIBUTE_NAME ) ); assertThat( actual ) .hasMessage( format( PATTERN_NOT_NULL_ATTRIBUTE, ATTRIBUTE_NAME, ATTRIBUTE_VALUE ) ) .isInstanceOf( AssertionError.class ); } @Test public void isInstantiable() { ExtensionAssert actual = extensionAssert.isInstantiable( TYPE, TestExtension.class ); assertThat( actual ).isSameAs( extensionAssert ); } @Test public void isInstantiableWithUnknownType() { Throwable actual = thrownBy( () -> extensionAssert.isInstantiable( UNKNOWN, TestExtension.class ) ); assertThat( actual ) .hasMessage( format( PATTERN_ERR_CREATE, TestExtension.class.getName(), null, UNKNOWN ) ) .isInstanceOf( AssertionError.class ); } @Test public void isInstantiableWithWrongType() { Throwable actual = thrownBy( () -> extensionAssert.isInstantiable( TYPE, Runnable.class ) ); assertThat( actual ) .hasMessage( format( PATTERN_ERR_CREATE, Runnable.class.getName(), TestExtension.class.getName(), TYPE ) ) .isInstanceOf( AssertionError.class ); } @Test @Ignore( "https://github.com/fappel/xiliary/issues/3" ) public void hasChildrenWithNonEmptyValue() { ExtensionAssert actual = extensionAssert.hasChildrenWithNonEmptyValue( CHILD, 1 ); assertThat( actual ).isSameAs( extensionAssert ); } @Test @Ignore( "https://github.com/fappel/xiliary/issues/3" ) public void hasChildrenWithNonEmptyValueWithWrongChildAmount() { Throwable actual = thrownBy( () -> extensionAssert.hasChildrenWithNonEmptyValue( CHILD, 2 ) ); assertThat( actual ) .hasMessage( format( PATTERN_WRONG_CHILD_SIZE, 2, CONTRIBUTION, CHILD, 1 ) ) .isInstanceOf( AssertionError.class ); } @Test public void hasChildWithAttributeValue() { ExtensionAssert actual = extensionAssert.hasChildWithAttributeValue( ATTRIBUTE_NAME, ATTRIBUTE_VALUE ); assertThat( actual ).isSameAs( extensionAssert ); } @Test public void hasChildWithAttributeValueThatDoesNotMatch() { Throwable actual = thrownBy( () -> extensionAssert.hasChildWithAttributeValue( ATTRIBUTE_NAME, DOES_NOT_MATCH ) ); assertThat( actual ) .hasMessage( format( PATTERN_WRONG_CHILD_SIZE_WITH_ATTRIB, ATTRIBUTE_NAME, DOES_NOT_MATCH, 0 ) ) .isInstanceOf( AssertionError.class ); } @Test public void hasChildWithAttributeValueWithTooManyMatches() { Throwable actual = thrownBy( () -> extensionAssert.hasChildWithAttributeValue( "category", "A" ) ); assertThat( actual ) .hasMessage( format( PATTERN_WRONG_CHILD_SIZE_WITH_ATTRIB, "category", "A", 2 ) ) .isInstanceOf( AssertionError.class ); } }