/* * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.web.reactive.function; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.Test; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.context.support.StaticApplicationContext; import org.springframework.core.ResolvableType; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpInputMessage; import org.springframework.http.ReactiveHttpOutputMessage; import org.springframework.http.codec.HttpMessageReader; import org.springframework.http.codec.HttpMessageWriter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * @author Arjen Poutsma */ public class StrategiesSupplierTests { @Test public void empty() { StrategiesSupplier strategies = StrategiesSupplier.empty().build(); assertEquals(Optional.empty(), strategies.messageReaders().get().findFirst()); assertEquals(Optional.empty(), strategies.messageWriters().get().findFirst()); assertEquals(Optional.empty(), strategies.viewResolvers().get().findFirst()); } @Test public void ofSuppliers() { HttpMessageReader messageReader = new DummyMessageReader(); HttpMessageWriter messageWriter = new DummyMessageWriter(); StrategiesSupplier strategies = StrategiesSupplier.of( () -> Stream.of(messageReader), () -> Stream.of(messageWriter), null); assertEquals(1L, strategies.messageReaders().get().collect(Collectors.counting()).longValue()); assertEquals(Optional.of(messageReader), strategies.messageReaders().get().findFirst()); assertEquals(1L, strategies.messageWriters().get().collect(Collectors.counting()).longValue()); assertEquals(Optional.of(messageWriter), strategies.messageWriters().get().findFirst()); assertEquals(Optional.empty(), strategies.viewResolvers().get().findFirst()); } @Test public void toConfiguration() throws Exception { StaticApplicationContext applicationContext = new StaticApplicationContext(); applicationContext.registerSingleton("messageWriter", DummyMessageWriter.class); applicationContext.registerSingleton("messageReader", DummyMessageReader.class); applicationContext.refresh(); StrategiesSupplier strategies = StrategiesSupplier.applicationContext(applicationContext).build(); assertTrue(strategies.messageReaders().get() .allMatch(r -> r instanceof DummyMessageReader)); assertTrue(strategies.messageWriters().get() .allMatch(r -> r instanceof DummyMessageWriter)); } private static class DummyMessageWriter implements HttpMessageWriter { @Override public boolean canWrite(ResolvableType type, MediaType mediaType) { return false; } @Override public List getWritableMediaTypes() { return Collections.emptyList(); } @Override public Mono write(Publisher inputStream, ResolvableType type, MediaType contentType, ReactiveHttpOutputMessage outputMessage, Map hints) { return Mono.empty(); } } private static class DummyMessageReader implements HttpMessageReader { @Override public boolean canRead(ResolvableType type, MediaType mediaType) { return false; } @Override public List getReadableMediaTypes() { return Collections.emptyList(); } @Override public Flux read(ResolvableType type, ReactiveHttpInputMessage inputMessage, Map hints) { return Flux.empty(); } @Override public Mono readMono(ResolvableType type, ReactiveHttpInputMessage inputMessage, Map hints) { return Mono.empty(); } } }