• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package signature.converter;
18 
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertTrue;
21 
22 import org.junit.Test;
23 
24 import signature.converter.util.AbstractConvertTest;
25 import signature.converter.util.CompilationUnit;
26 import signature.model.IApi;
27 import signature.model.IClassDefinition;
28 import signature.model.IClassReference;
29 import signature.model.IField;
30 import signature.model.IPackage;
31 import signature.model.IParameterizedType;
32 import signature.model.ITypeReference;
33 import signature.model.IWildcardType;
34 import signature.model.util.ModelUtil;
35 
36 import java.io.IOException;
37 
38 public abstract class ConvertWildcardTest extends AbstractConvertTest {
39 
40     @Test
convertWildcardUpperBound()41     public void convertWildcardUpperBound() throws IOException {
42         String source =
43             "package a; " +
44             "public class A{" +
45             "  public java.util.Set<? extends Number> f; "+
46             "}";
47             IApi api = convert(new CompilationUnit("a.A", source));
48             IPackage sigPackage = ModelUtil.getPackage(api, "a");
49             IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A");
50             IField field = ModelUtil.getField(sigClass, "f");
51 
52             ITypeReference type = field.getType();
53             assertTrue(type instanceof IParameterizedType);
54 
55             IParameterizedType parametrizedType = (IParameterizedType)type;
56 
57             IClassDefinition rawType = parametrizedType.getRawType().getClassDefinition();
58             assertEquals("Set", rawType.getName());
59 
60             assertEquals(1, parametrizedType.getTypeArguments().size());
61             IWildcardType wildcardType = (IWildcardType) parametrizedType.getTypeArguments().get(0);
62             assertEquals(1, wildcardType.getUpperBounds().size());
63             ITypeReference upperBound = wildcardType.getUpperBounds().get(0);
64             assertTrue(upperBound instanceof IClassReference);
65 
66             assertEquals("Number", ((IClassReference)upperBound).getClassDefinition().getName());
67     }
68 
69     @Test
convertWildcardLowerBound()70     public void convertWildcardLowerBound() throws IOException {
71         String source =
72         "package a; " +
73         "public class A{" +
74         "  public java.util.Set<? super Number> f; "+
75         "}";
76         IApi api = convert(new CompilationUnit("a.A", source));
77         IPackage sigPackage = ModelUtil.getPackage(api, "a");
78         IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A");
79         IField field = ModelUtil.getField(sigClass, "f");
80 
81         ITypeReference type = field.getType();
82         assertTrue(type instanceof IParameterizedType);
83 
84         IParameterizedType parametrizedType = (IParameterizedType)type;
85 
86         IClassDefinition rawType = parametrizedType.getRawType().getClassDefinition();
87         assertEquals("Set", rawType.getName());
88 
89         assertEquals(1, parametrizedType.getTypeArguments().size());
90         IWildcardType wildcardType = (IWildcardType) parametrizedType.getTypeArguments().get(0);
91         assertEquals(1, wildcardType.getUpperBounds().size());
92         ITypeReference upperBound = wildcardType.getUpperBounds().get(0);
93         assertTrue(upperBound instanceof IClassReference);
94         assertEquals("Object", ((IClassReference)upperBound).getClassDefinition().getName());
95 
96         ITypeReference lowerBound = wildcardType.getLowerBound();
97         assertTrue(lowerBound instanceof IClassReference);
98         assertEquals("Number", ((IClassReference)lowerBound).getClassDefinition().getName());
99     }
100 }
101