@Test
 public void emptyListToList() throws Exception {
   conversionService.addConverter(new CollectionToCollectionConverter(conversionService));
   conversionService.addConverterFactory(new StringToNumberConverterFactory());
   List<String> list = new ArrayList<String>();
   TypeDescriptor sourceType = TypeDescriptor.forObject(list);
   TypeDescriptor targetType = new TypeDescriptor(getClass().getField("emptyListTarget"));
   assertTrue(conversionService.canConvert(sourceType, targetType));
   assertEquals(list, conversionService.convert(list, sourceType, targetType));
 }
 @Test
 public void emptyListToListDifferentTargetType() throws Exception {
   conversionService.addConverter(new CollectionToCollectionConverter(conversionService));
   conversionService.addConverterFactory(new StringToNumberConverterFactory());
   List<String> list = new ArrayList<String>();
   TypeDescriptor sourceType = TypeDescriptor.forObject(list);
   TypeDescriptor targetType = new TypeDescriptor(getClass().getField("emptyListDifferentTarget"));
   assertTrue(conversionService.canConvert(sourceType, targetType));
   @SuppressWarnings("unchecked")
   LinkedList<Integer> result =
       (LinkedList<Integer>) conversionService.convert(list, sourceType, targetType);
   assertEquals(LinkedList.class, result.getClass());
   assertTrue(result.isEmpty());
 }
 @Test
 @SuppressWarnings("unchecked")
 public void objectToCollection() throws Exception {
   List<List<String>> list = new ArrayList<List<String>>();
   list.add(Arrays.asList("9", "12"));
   list.add(Arrays.asList("37", "23"));
   conversionService.addConverterFactory(new StringToNumberConverterFactory());
   conversionService.addConverter(new ObjectToCollectionConverter(conversionService));
   conversionService.addConverter(new CollectionToObjectConverter(conversionService));
   TypeDescriptor sourceType = TypeDescriptor.forObject(list);
   TypeDescriptor targetType = new TypeDescriptor(getClass().getField("objectToCollection"));
   assertTrue(conversionService.canConvert(sourceType, targetType));
   List<List<List<Integer>>> result =
       (List<List<List<Integer>>>) conversionService.convert(list, sourceType, targetType);
   assertEquals((Integer) 9, result.get(0).get(0).get(0));
   assertEquals((Integer) 12, result.get(0).get(1).get(0));
   assertEquals((Integer) 37, result.get(1).get(0).get(0));
   assertEquals((Integer) 23, result.get(1).get(1).get(0));
 }
 @Test
 public void scalarList() throws Exception {
   List<String> list = new ArrayList<String>();
   list.add("9");
   list.add("37");
   TypeDescriptor sourceType = TypeDescriptor.forObject(list);
   TypeDescriptor targetType = new TypeDescriptor(getClass().getField("scalarListTarget"));
   assertTrue(conversionService.canConvert(sourceType, targetType));
   try {
     conversionService.convert(list, sourceType, targetType);
   } catch (ConversionFailedException ex) {
     assertTrue(ex.getCause() instanceof ConverterNotFoundException);
   }
   conversionService.addConverterFactory(new StringToNumberConverterFactory());
   assertTrue(conversionService.canConvert(sourceType, targetType));
   @SuppressWarnings("unchecked")
   List<String> result = (List<String>) conversionService.convert(list, sourceType, targetType);
   assertFalse(list.equals(result));
   assertEquals(9, result.get(0));
   assertEquals(37, result.get(1));
 }