blob: 755619908dd8dc948b08d53a6bf2db96abb01e83 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.tuscany.sca.itest.databindings.jaxb;
import java.io.File;
import junit.framework.Assert;
import org.apache.tuscany.sca.itest.databindings.jaxb.impl.GenericsTransformer;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Databinding tests for generics, parameterized and polymorphic types.
*
* @version $Rev$ $Date$
*/
public class GenericsDatabindingTestCase {
private static Node node;
/**
* Runs before each test method
*/
@BeforeClass
public static void setUp() throws Exception {
try {
NodeFactory factory = NodeFactory.newInstance();
node = factory.createNode(new File("src/main/resources/generics-service.composite").toURI().toURL().toString(),
new Contribution("TestContribution", new File("src/main/resources/").toURI().toURL().toString()));
node.start();
} catch(Throwable e) {
e.printStackTrace();
}
}
/**
* Runs after each test method
*/
@AfterClass
public static void tearDown() {
node.stop();
}
/**
* Invokes the GenericsService service using SCA binding.
* Service method invoked is getTypeExplicit.
*/
@Test
public void testSCATypeExplicit() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientSCAComponent");
performTestTypeExplicit(serviceClient);
}
/**
* Invokes the GenericsService service using SCA binding.
* Service method invoked is getTypeUnbound.
*/
@Test
public void testSCATypeUnbound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientSCAComponent");
performTestTypeUnbound(serviceClient);
}
/**
* Invokes the GenericsService service using SCA binding.
* Service method invoked is getTypeExtends.
*/
@Test
public void testSCATypeExtends() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientSCAComponent");
performTestTypeExtends(serviceClient);
}
/**
* Invokes the GenericsService service using SCA binding.
* Service method invoked is getRecursiveTypeBound.
*/
@Test
public void testSCARecursiveTypeBound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientSCAComponent");
performTestRecursiveTypeBound(serviceClient);
}
/**
* Invokes the GenericsService service using SCA binding.
* Service method invoked is getWildcardUnbound.
*/
@Test
public void testSCAWildcardUnbound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientSCAComponent");
performTestWildcardUnbound(serviceClient);
}
/**
* Invokes the GenericsService service using SCA binding.
* Service method invoked is getWildcardSuper.
*/
@Test
public void testSCAWildcardSuper() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientSCAComponent");
performTestWildcardSuper(serviceClient);
}
/**
* Invokes the GenericsService service using SCA binding.
* Service method invoked is getWildcardExtends.
*/
@Test
public void testSCAWildcardExtends() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientSCAComponent");
performTestWildcardExtends(serviceClient);
}
/**
* Invokes the GenericsService service using SCA binding.
* Service method invoked is getPolymorphic.
*/
@Test
public void testSCAPolymorphic() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientSCAComponent");
performTestPolymorphic(serviceClient);
}
/**
* Invokes the GenericsService service using WS binding.
* Service method invoked is getTypeExplicit.
*/
@Test
public void testWSTypeExplicit() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientWSComponent");
performTestTypeExplicit(serviceClient);
}
/**
* Invokes the GenericsService service using WS binding.
* Service method invoked is getTypeUnbound.
*/
@Test
public void testWSTypeUnbound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientWSComponent");
performTestTypeUnbound(serviceClient);
}
/**
* Invokes the GenericsService service using WS binding.
* Service method invoked is getTypeExtends.
*/
@Test
public void testWSTypeExtends() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientWSComponent");
performTestTypeExtends(serviceClient);
}
/**
* Invokes the GenericsService service using WS binding.
* Service method invoked is getRecursiveTypeBound.
*/
@Test
public void testWSRecursiveTypeBound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientWSComponent");
performTestRecursiveTypeBound(serviceClient);
}
/**
* Invokes the GenericsService service using WS binding.
* Service method invoked is getWildcardUnbound.
*/
@Test
public void testWSWildcardUnbound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientWSComponent");
performTestWildcardUnbound(serviceClient);
}
/**
* Invokes the GenericsService service using WS binding.
* Service method invoked is getWildcardSuper.
*/
@Test
public void testWSWildcardSuper() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientWSComponent");
performTestWildcardSuper(serviceClient);
}
/**
* Invokes the GenericsService service using WS binding.
* Service method invoked is getWildcardExtends.
*/
@Test
public void testWSWildcardExtends() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientWSComponent");
performTestWildcardExtends(serviceClient);
}
/**
* Invokes the GenericsService service using WS binding.
* Service method invoked is getPolymorphic.
*/
@Test
public void testWSPolymorphic() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsServiceClientWSComponent");
performTestPolymorphic(serviceClient);
}
/**
* Invokes the GenericsLocalService service using SCA binding.
* Service method invoked is getTypeExplicit.
*/
@Test
public void testSCALocalTypeExplicit() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsLocalServiceClientSCAComponent");
performTestTypeExplicit(serviceClient);
}
/**
* Invokes the GenericsLocalService service using SCA binding.
* Service method invoked is getTypeUnbound.
*/
@Test
public void testSCALocalTypeUnbound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsLocalServiceClientSCAComponent");
performTestTypeUnbound(serviceClient);
}
/**
* Invokes the GenericsLocalService service using SCA binding.
* Service method invoked is getTypeExtends.
*/
@Test
public void testSCALocalTypeExtends() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsLocalServiceClientSCAComponent");
performTestTypeExtends(serviceClient);
}
/**
* Invokes the GenericsLocalService service using SCA binding.
* Service method invoked is getRecursiveTypeBound.
*/
@Test
public void testSCALocalRecursiveTypeBound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsLocalServiceClientSCAComponent");
performTestRecursiveTypeBound(serviceClient);
}
/**
* Invokes the GenericsLocalService service using SCA binding.
* Service method invoked is getWildcardUnbound.
*/
@Test
public void testSCALocalWildcardUnbound() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsLocalServiceClientSCAComponent");
performTestWildcardUnbound(serviceClient);
}
/**
* Invokes the GenericsLocalService service using SCA binding.
* Service method invoked is getWildcardSuper.
*/
@Test
public void testSCALocalWildcardSuper() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsLocalServiceClientSCAComponent");
performTestWildcardSuper(serviceClient);
}
/**
* Invokes the GenericsLocalService service using SCA binding.
* Service method invoked is getWildcardExtends.
*/
@Test
public void testSCALocalWildcardExtends() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsLocalServiceClientSCAComponent");
performTestWildcardExtends(serviceClient);
}
/**
* Invokes the GenericsLocalService service using SCA binding.
* Service method invoked is getPolymorphic.
*/
@Test
public void testSCALocalPolymorphic() throws Exception {
GenericsServiceClient serviceClient = node.getService(GenericsServiceClient.class, "GenericsLocalServiceClientSCAComponent");
performTestPolymorphic(serviceClient);
}
private void performTestTypeExplicit(GenericsServiceClient serviceClient) {
Bean1<String> args[] = new Bean1[2];
args[0] = new Bean1<String>("Me");
args[1] = new Bean1<String>();
for(int i = 0; i < args.length; ++i) {
Bean1<String> arg = args[i];
Bean1<String> expected = GenericsTransformer.getTypeExplicit(arg);
Bean1<String> actual = serviceClient.getTypeExplicitForward(arg);
Assert.assertEquals(expected, actual);
}
}
private void performTestTypeUnbound(GenericsServiceClient serviceClient) {
{ // String
String[] args = { "Me", "You", "Him" };
Bean1<String> expected = GenericsTransformer.getTypeUnbound(args);
Bean1<String> actual = serviceClient.getTypeUnboundForward(args);
// Assert.assertEquals(expected, actual);
}
{ // Integer
Integer[] args = new Integer[3];
args[0] = -10;
args[1] = 0;
args[2] = 10;
Bean1<Integer> expected = GenericsTransformer.getTypeUnbound(args);
Bean1<Integer> actual = serviceClient.getTypeUnboundForward(args);
// Assert.assertEquals(expected, actual);
}
{ // Object
Object[] args = new Object[3];
args[0] = "Me";
args[1] = 10;
args[2] = "Him";
Bean1<Object> expected = GenericsTransformer.getTypeUnbound(args);
Bean1<Object> actual = serviceClient.getTypeUnboundForward(args);
Assert.assertEquals(expected, actual);
}
}
private void performTestTypeExtends(GenericsServiceClient serviceClient) {
{ // Bean2
Bean2[] args = new Bean2[3];
for(int i = 0; i < args.length; ++i) {
args[i] = new Bean2();
args[i].setName("Name"+i);
}
Bean1<Bean2> expected = GenericsTransformer.getTypeExtends(args);
Bean1<Bean2> actual = serviceClient.getTypeExtendsForward(args);
Assert.assertEquals(expected, actual);
}
{ // Bean3 extends Bean2
Bean3[] args = new Bean3[3];
for(int i = 0; i < args.length; ++i) {
args[i] = new Bean3();
args[i].setName("Name"+i);
args[i].setAddress("Address"+i);
}
Bean1<Bean3> expected = GenericsTransformer.getTypeExtends(args);
Bean1<Bean3> actual = serviceClient.getTypeExtendsForward(args);
// Assert.assertEquals(expected, actual);
}
{ //Bean31 extends Bean2
Bean31[] args = new Bean31[3];
for(int i = 0; i < args.length; ++i) {
args[i] = new Bean31();
args[i].setName("Name"+i);
args[i].setAddress("Address"+i);
}
Bean1<Bean31> expected = GenericsTransformer.getTypeExtends(args);
Bean1<Bean31> actual = serviceClient.getTypeExtendsForward(args);
// Assert.assertEquals(expected, actual);
}
}
private void performTestRecursiveTypeBound(GenericsServiceClient serviceClient) {
{ // Bean1<String>
Bean1<String>[] args = new Bean1[3];
for(int i = 0; i < args.length; ++i) {
args[i] = new Bean1<String>();
args[i].setItem("Bean."+i);
}
Bean1<Bean1<String>> expected = GenericsTransformer.getRecursiveTypeBound(args);
Bean1<Bean1<String>> actual = serviceClient.getRecursiveTypeBoundForward(args);
Assert.assertEquals(expected, actual);
}
{ // Bean10 extends Bean1<String>
Bean10[] args = new Bean10[3];
for(int i = 0; i < args.length; ++i) {
args[i] = new Bean10();
args[i].setItem("Bean10."+i);
}
Bean1<Bean10> expected = GenericsTransformer.getRecursiveTypeBound(args);
Bean1<Bean10> actual = serviceClient.getRecursiveTypeBoundForward(args);
// Assert.assertEquals(expected, actual);
}
{ // Bean11 extends Bean1<String>
Bean11[] args = new Bean11[3];
for(int i = 0; i < args.length; ++i) {
args[i] = new Bean11();
args[i].setItem("Bean11."+i);
}
Bean1<Bean11> expected = GenericsTransformer.getRecursiveTypeBound(args);
Bean1<Bean11> actual = serviceClient.getRecursiveTypeBoundForward(args);
// Assert.assertEquals(expected, actual);
}
}
private void performTestWildcardUnbound(GenericsServiceClient serviceClient) {
{
Bean1<?> arg = new Bean1<String>("Me");
Bean1<?> expected = GenericsTransformer.getWildcardUnbound(arg);
Bean1<?> actual = serviceClient.getWildcardUnboundForward(arg);
Assert.assertEquals(expected, actual);
}
{
Bean1<?> arg = new Bean1<Integer>(1);
Bean1<?> expected = GenericsTransformer.getWildcardUnbound(arg);
Bean1<?> actual = serviceClient.getWildcardUnboundForward(arg);
Assert.assertEquals(expected, actual);
}
}
private void performTestWildcardSuper(GenericsServiceClient serviceClient) {
Bean1<? super Bean3> arg = new Bean1<Bean2>();
Bean3 item = new Bean3();
item.setName("Name");
item.setAddress("Address");
arg.setItem(item);
Bean1<? super Bean3> expected = GenericsTransformer.getWildcardSuper(arg);
Bean1<? super Bean3> actual = serviceClient.getWildcardSuperForward(arg);
Assert.assertEquals(expected, actual);
}
private void performTestWildcardExtends(GenericsServiceClient serviceClient) {
{ // Bean2
Bean2 temp = new Bean2();
temp.setName("Me");
Bean1<? extends Bean2> arg = new Bean1<Bean2>(temp);
Bean1<? extends Bean2> expected = GenericsTransformer.getWildcardExtends(arg);
Bean1<? extends Bean2> actual = serviceClient.getWildcardExtendsForward(arg);
Assert.assertEquals(expected, actual);
}
{ // Bean3 extends Bean2
Bean3 temp = new Bean3();
temp.setName("Me");
temp.setAddress("My address");
Bean1<? extends Bean2> arg = new Bean1<Bean3>(temp);
Bean1<? extends Bean2> expected = GenericsTransformer.getWildcardExtends(arg);
Bean1<? extends Bean2> actual = serviceClient.getWildcardExtendsForward(arg);
// The Bean3 will be unmarshalled into Bean2
// Assert.assertEquals(expected, actual);
Assert.assertTrue(actual.getItem() instanceof Bean2);
}
{ // Bean31 extends Bean2
Bean31 temp = new Bean31();
temp.setName("Me1");
temp.setAddress("My address1");
Bean1<? extends Bean2> arg = new Bean1<Bean31>(temp);
Bean1<? extends Bean2> expected = GenericsTransformer.getWildcardExtends(arg);
Bean1<? extends Bean2> actual = serviceClient.getWildcardExtendsForward(arg);
// The Bean31 will be unmarshalled into Bean2
// Assert.assertEquals(expected, actual);
Assert.assertTrue(actual.getItem() instanceof Bean2);
}
}
private void performTestPolymorphic(GenericsServiceClient serviceClient) {
{ // Bean2
Bean2 arg = new Bean2();
arg.setName("Me");
Bean2 expected = GenericsTransformer.getPolymorphic(arg);
Bean2 actual = serviceClient.getPolymorphicForward(arg);
Assert.assertEquals(expected, actual);
}
{ // Bean3 extends Bean2
Bean3 arg = new Bean3();
arg.setName("Me");
arg.setAddress("My address");
Bean2 expected = GenericsTransformer.getPolymorphic(arg);
Bean2 actual = serviceClient.getPolymorphicForward(arg);
Assert.assertEquals(expected.getName(), actual.getName());
}
}
}