@Test
 public void postProcessPartConverters() throws Exception {
   HttpMessageConverters converters =
       new HttpMessageConverters() {
         @Override
         protected List<HttpMessageConverter<?>> postProcessPartConverters(
             List<HttpMessageConverter<?>> converters) {
           for (Iterator<HttpMessageConverter<?>> iterator = converters.iterator();
               iterator.hasNext(); ) {
             if (iterator.next() instanceof MappingJackson2XmlHttpMessageConverter) {
               iterator.remove();
             }
           }
           return converters;
         };
       };
   List<Class<?>> converterClasses = new ArrayList<Class<?>>();
   for (HttpMessageConverter<?> converter :
       extractFormPartConverters(converters.getConverters())) {
     converterClasses.add(converter.getClass());
   }
   assertThat(converterClasses)
       .containsExactly(
           ByteArrayHttpMessageConverter.class,
           StringHttpMessageConverter.class,
           ResourceHttpMessageConverter.class,
           SourceHttpMessageConverter.class,
           MappingJackson2HttpMessageConverter.class);
 }
 @Test
 public void addNewConverters() {
   HttpMessageConverter<?> converter1 = mock(HttpMessageConverter.class);
   HttpMessageConverter<?> converter2 = mock(HttpMessageConverter.class);
   HttpMessageConverters converters = new HttpMessageConverters(converter1, converter2);
   assertThat(converters.getConverters().get(0)).isEqualTo(converter1);
   assertThat(converters.getConverters().get(1)).isEqualTo(converter2);
 }
 @Test
 public void addBeforeExistingConverter() {
   MappingJackson2HttpMessageConverter converter1 = new MappingJackson2HttpMessageConverter();
   MappingJackson2HttpMessageConverter converter2 = new MappingJackson2HttpMessageConverter();
   HttpMessageConverters converters = new HttpMessageConverters(converter1, converter2);
   assertThat(converters.getConverters().contains(converter1)).isTrue();
   assertThat(converters.getConverters().contains(converter2)).isTrue();
   List<MappingJackson2HttpMessageConverter> httpConverters =
       new ArrayList<MappingJackson2HttpMessageConverter>();
   for (HttpMessageConverter<?> candidate : converters) {
     if (candidate instanceof MappingJackson2HttpMessageConverter) {
       httpConverters.add((MappingJackson2HttpMessageConverter) candidate);
     }
   }
   // The existing converter is still there, but with a lower priority
   assertThat(httpConverters).hasSize(3);
   assertThat(httpConverters.indexOf(converter1)).isEqualTo(0);
   assertThat(httpConverters.indexOf(converter2)).isEqualTo(1);
   assertThat(converters.getConverters().indexOf(converter1)).isNotEqualTo(0);
 }
 private void assertConverterBeanRegisteredWithHttpMessageConverters(Class<?> type) {
   Object converter = this.context.getBean(type);
   HttpMessageConverters converters = this.context.getBean(HttpMessageConverters.class);
   assertTrue(converters.getConverters().contains(converter));
 }