/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.extension.internal.loader.validation; import org.mule.runtime.extension.api.annotation.Configuration; import org.mule.runtime.extension.api.annotation.Configurations; import org.mule.runtime.extension.api.annotation.Extension; import org.mule.runtime.extension.api.annotation.Operations; import org.mule.runtime.extension.api.annotation.param.Config; import org.mule.runtime.extension.api.exception.IllegalModelDefinitionException; import org.mule.runtime.extension.api.loader.ExtensionModelValidator; import org.mule.tck.junit4.AbstractMuleTestCase; import org.mule.tck.size.SmallTest; import org.mule.tck.testmodels.fruit.Apple; import org.mule.test.module.extension.internal.util.ExtensionsTestUtils; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @SmallTest public class ConfigurationModelValidatorTestCase extends AbstractMuleTestCase { @Rule public ExpectedException expectedException = ExpectedException.none(); private ExtensionModelValidator validator = new ConfigurationModelValidator(); @Test public void validConfigurationTypesForOperations() throws Exception { validate(ValidExtension.class); } @Test public void invalidConfigurationTypesForOperations() throws Exception { expectedException.expect(IllegalModelDefinitionException.class); expectedException.expectMessage("requires a configuration of type"); validate(InvalidExtension.class); } private void validate(Class<?> connectorClass) { ExtensionsTestUtils.validate(connectorClass, validator); } interface ConfigInterface { } @Extension(name = "invalidExtension") @Configurations({InvalidTestConfig.class}) public static class InvalidExtension { } @Extension(name = "validExtension") @Configurations({TestConfig.class, TestConfig2.class}) public static class ValidExtension { } @Configuration(name = "config") @Operations(ValidTestOperations.class) public static class TestConfig implements ConfigInterface { } @Operations(InvalidTestOperations.class) public static class InvalidTestConfig implements ConfigInterface { } @Configuration(name = "config2") @Operations(ValidTestOperations.class) public static class TestConfig2 implements ConfigInterface { } public static class ValidTestOperations { public void foo(@Config ConfigInterface connection) { } public void bar(@Config ConfigInterface connection) { } } public static class InvalidTestOperations { public void foo(@Config ConfigInterface config) { } public void bar(@Config Apple config) { } } }