/* * Copyright 2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.xd.module.options; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import static org.springframework.xd.module.ModuleType.*; import static org.springframework.xd.module.options.ModuleOptionMatchers.*; import org.junit.Test; import org.springframework.xd.module.ModuleDefinition; import org.springframework.xd.module.ModuleDefinitions; /** * Tests for {@link DefaultModuleOptionsMetadataResolver}. * * @author Eric Bottard */ public class DefaultModuleOptionsMetadataResolverTests { private DefaultModuleOptionsMetadataResolver metadataResolver = new DefaultModuleOptionsMetadataResolver(); @Test @SuppressWarnings("unchecked") public void testPojoOptionsConstruction() { String resource = "classpath:/DefaultModuleOptionsMetadataResolverTests-modules/source/module1/"; ModuleDefinition definition = ModuleDefinitions.simple("module1", source, resource); ModuleOptionsMetadata metadata = metadataResolver.resolve(definition); assertThat( metadata, containsInAnyOrder(moduleOptionNamed("bar"), moduleOptionNamed("foo"))); } @Test @SuppressWarnings("unchecked") public void testMixin() { String resource = "classpath:/DefaultModuleOptionsMetadataResolverTests-modules/source/module2/"; ModuleDefinition definition = ModuleDefinitions.simple("module2", source, resource); ModuleOptionsMetadata metadata = metadataResolver.resolve(definition); assertThat( metadata, containsInAnyOrder(moduleOptionNamed("bar"), moduleOptionNamed("fizz"), moduleOptionNamed("foo"), moduleOptionNamed("optionDefinedHere"))); } /** * This test has the "foo" option *exactly* overlapping from different mixins: this is ok, and only one copy is * visible. */ @Test @SuppressWarnings("unchecked") public void testMixinOverlap() { String resource = "classpath:/DefaultModuleOptionsMetadataResolverTests-modules/source/module3/"; ModuleDefinition definition = ModuleDefinitions.simple("module3", source, resource); ModuleOptionsMetadata metadata = metadataResolver.resolve(definition); assertThat( metadata, containsInAnyOrder(moduleOptionNamed("foo"), moduleOptionNamed("bar"))); } /** * This test has the "foo" option almost overlapping: for the same name "foo", two options exist with slightly * different attributes, this is an error. */ @Test(expected = IllegalArgumentException.class) public void testMixinAlmostOverlap() { String resource = "classpath:/DefaultModuleOptionsMetadataResolverTests-modules/source/module4/"; ModuleDefinition definition = ModuleDefinitions.simple("module4", source, resource); metadataResolver.resolve(definition); } @Test public void testNormalMetadataTypeValueTrimmed() { String resource = "classpath:/DefaultModuleOptionsMetadataResolverTests-modules/source/module5/"; ModuleDefinition definition = ModuleDefinitions.simple("module5", source, resource); ModuleOptionsMetadata metadata = metadataResolver.resolve(definition); assertThat(metadata, hasItem(moduleOptionNamed("foo"))); ModuleOption foo = metadata.iterator().next(); assertThat(foo.getType(), equalTo(String.class.getName())); } @Test @SuppressWarnings("unchecked") public void testOptionClassValueTrimmed() { String resource = "classpath:/DefaultModuleOptionsMetadataResolverTests-modules/source/module6/"; ModuleDefinition definition = ModuleDefinitions.simple("module6", source, resource); ModuleOptionsMetadata metadata = metadataResolver.resolve(definition); assertThat( metadata, containsInAnyOrder(moduleOptionNamed("bar"), moduleOptionNamed("foo"))); } }