TestGenericsUtil.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.util;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. import junit.framework.TestCase;
  22. import org.apache.hadoop.conf.Configuration;
  23. public class TestGenericsUtil extends TestCase {
  24.   public void testToArray() {
  25.     
  26.     //test a list of size 10
  27.     List<Integer> list = new ArrayList<Integer>(); 
  28.     
  29.     for(int i=0; i<10; i++) {
  30.       list.add(i);
  31.     }
  32.     
  33.     Integer[] arr = GenericsUtil.toArray(list);
  34.     
  35.     for (int i = 0; i < arr.length; i++) {
  36.       assertEquals(list.get(i), arr[i]);
  37.     }
  38.   }
  39.   
  40.   public void testWithEmptyList() {
  41.     try {
  42.       List<String> list = new ArrayList<String>();
  43.       String[] arr = GenericsUtil.toArray(list);
  44.       fail("Empty array should throw exception");
  45.       System.out.println(arr); //use arr so that compiler will not complain
  46.       
  47.     }catch (IndexOutOfBoundsException ex) {
  48.       //test case is successful
  49.     }
  50.   }
  51.  
  52.   public void testWithEmptyList2() {
  53.     List<String> list = new ArrayList<String>();
  54.     //this method should not throw IndexOutOfBoundsException
  55.     String[] arr = GenericsUtil.<String>toArray(String.class, list);
  56.     
  57.     assertEquals(0, arr.length);
  58.   }
  59.   
  60.   /** This class uses generics */
  61.   private class GenericClass<T> {
  62.     T dummy;
  63.     List<T> list = new ArrayList<T>();
  64.     
  65.     void add(T item) {
  66.       list.add(item);
  67.     }
  68.     
  69.     T[] funcThatUsesToArray() {
  70.       T[] arr = GenericsUtil.toArray(list);
  71.       return arr;
  72.     }
  73.   }
  74.   
  75.   public void testWithGenericClass() {
  76.     
  77.     GenericClass<String> testSubject = new GenericClass<String>();
  78.     
  79.     testSubject.add("test1");
  80.     testSubject.add("test2");
  81.     
  82.     try {
  83.       //this cast would fail, if we had not used GenericsUtil.toArray, since the 
  84.       //rmethod would return Object[] rather than String[]
  85.       String[] arr = testSubject.funcThatUsesToArray();
  86.       
  87.       assertEquals("test1", arr[0]);
  88.       assertEquals("test2", arr[1]);
  89.       
  90.     }catch (ClassCastException ex) {
  91.       fail("GenericsUtil#toArray() is not working for generic classes");
  92.     }
  93.     
  94.   }
  95.   
  96.   public void testGenericOptionsParser() throws Exception {
  97.      GenericOptionsParser parser = new GenericOptionsParser(
  98.         new Configuration(), new String[] {"-jt"});
  99.     assertEquals(parser.getRemainingArgs().length, 0);
  100.   }
  101.   
  102.   public void testGetClass() {
  103.     
  104.     //test with Integer
  105.     Integer x = new Integer(42); 
  106.     Class<Integer> c = GenericsUtil.getClass(x);
  107.     assertEquals(Integer.class, c);
  108.     
  109.     //test with GenericClass<Integer>
  110.     GenericClass<Integer> testSubject = new GenericClass<Integer>();
  111.     Class<GenericClass<Integer>> c2 = GenericsUtil.getClass(testSubject);
  112.     assertEquals(GenericClass.class, c2);
  113.   }
  114.   
  115. }