17dd252788645e940eada959bdde927426e2531c9Paul Duffin/*
27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2011 The Guava Authors
37dd252788645e940eada959bdde927426e2531c9Paul Duffin *
47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License");
57dd252788645e940eada959bdde927426e2531c9Paul Duffin * you may not use this file except in compliance with the License.
67dd252788645e940eada959bdde927426e2531c9Paul Duffin * You may obtain a copy of the License at
77dd252788645e940eada959bdde927426e2531c9Paul Duffin *
87dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0
97dd252788645e940eada959bdde927426e2531c9Paul Duffin *
107dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software
117dd252788645e940eada959bdde927426e2531c9Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS,
127dd252788645e940eada959bdde927426e2531c9Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137dd252788645e940eada959bdde927426e2531c9Paul Duffin * See the License for the specific language governing permissions and
147dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License.
157dd252788645e940eada959bdde927426e2531c9Paul Duffin */
167dd252788645e940eada959bdde927426e2531c9Paul Duffin
177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.reflect;
187dd252788645e940eada959bdde927426e2531c9Paul Duffin
197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.testing.EqualsTester;
207dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.testing.NullPointerTester;
217dd252788645e940eada959bdde927426e2531c9Paul Duffin
227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.TestCase;
237dd252788645e940eada959bdde927426e2531c9Paul Duffin
247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.lang.reflect.Method;
257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.lang.reflect.TypeVariable;
267dd252788645e940eada959bdde927426e2531c9Paul Duffin
277dd252788645e940eada959bdde927426e2531c9Paul Duffin/**
287dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unit test for {@link TypeParameter}.
297dd252788645e940eada959bdde927426e2531c9Paul Duffin *
307dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Ben Yu
317dd252788645e940eada959bdde927426e2531c9Paul Duffin */
327dd252788645e940eada959bdde927426e2531c9Paul Duffinpublic class TypeParameterTest extends TestCase {
337dd252788645e940eada959bdde927426e2531c9Paul Duffin
347dd252788645e940eada959bdde927426e2531c9Paul Duffin  public <T> void testCaptureTypeParameter() throws Exception {
357dd252788645e940eada959bdde927426e2531c9Paul Duffin    TypeVariable<?> variable = new TypeParameter<T>() {}.typeVariable;
367dd252788645e940eada959bdde927426e2531c9Paul Duffin    TypeVariable<?> expected = TypeParameterTest.class
377dd252788645e940eada959bdde927426e2531c9Paul Duffin        .getDeclaredMethod("testCaptureTypeParameter")
387dd252788645e940eada959bdde927426e2531c9Paul Duffin        .getTypeParameters()[0];
397dd252788645e940eada959bdde927426e2531c9Paul Duffin    assertEquals(expected, variable);
407dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
417dd252788645e940eada959bdde927426e2531c9Paul Duffin
427dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testConcreteTypeRejected() {
437dd252788645e940eada959bdde927426e2531c9Paul Duffin    try {
447dd252788645e940eada959bdde927426e2531c9Paul Duffin      new TypeParameter<String>() {};
457dd252788645e940eada959bdde927426e2531c9Paul Duffin      fail();
467dd252788645e940eada959bdde927426e2531c9Paul Duffin    } catch (IllegalArgumentException expected) {}
477dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
487dd252788645e940eada959bdde927426e2531c9Paul Duffin
497dd252788645e940eada959bdde927426e2531c9Paul Duffin  public <A, B> void testEquals() throws Exception {
507dd252788645e940eada959bdde927426e2531c9Paul Duffin    Method method = TypeParameterTest.class.getDeclaredMethod("testEquals");
517dd252788645e940eada959bdde927426e2531c9Paul Duffin    new EqualsTester()
527dd252788645e940eada959bdde927426e2531c9Paul Duffin        .addEqualityGroup(
537dd252788645e940eada959bdde927426e2531c9Paul Duffin            new TypeParameter<A>() {}, new TypeParameter<A>() {})
547dd252788645e940eada959bdde927426e2531c9Paul Duffin        .addEqualityGroup(new TypeParameter<B>() {})
557dd252788645e940eada959bdde927426e2531c9Paul Duffin        .testEquals();
567dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
577dd252788645e940eada959bdde927426e2531c9Paul Duffin
587dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testNullPointers() {
597dd252788645e940eada959bdde927426e2531c9Paul Duffin    new NullPointerTester().testAllPublicStaticMethods(TypeParameter.class);
607dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
617dd252788645e940eada959bdde927426e2531c9Paul Duffin}
62