package org.webpieces.http2client.mock; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import java.util.stream.Stream; import org.webpieces.mock.MethodEnum; import org.webpieces.mock.MockSuperclass; import org.webpieces.mock.ParametersPassedIn; import com.webpieces.http2engine.api.client.Http2ResponseListener; import com.webpieces.http2engine.api.client.PushPromiseListener; import com.webpieces.http2parser.api.dto.lib.PartialStream; public class MockResponseListener extends MockSuperclass implements Http2ResponseListener { enum Method implements MethodEnum { INCOMING_RESPONSE, INCOMING_PUSH, } @SuppressWarnings("unchecked") @Override public CompletableFuture<Void> incomingPartialResponse(PartialStream response) { return (CompletableFuture<Void>) super.calledMethod(Method.INCOMING_RESPONSE, response); } @Override public PushPromiseListener newIncomingPush(int streamId) { return (PushPromiseListener) super.calledMethod(Method.INCOMING_PUSH, streamId); } public void addReturnValueIncomingResponse(CompletableFuture<Void> future) { super.addValueToReturn(Method.INCOMING_RESPONSE, future); } public void addReturnValuePush(PushPromiseListener retVal) { super.addValueToReturn(Method.INCOMING_PUSH, retVal); } public int getSinglePushStreamId() { List<Integer> list = getIncomingPushStreamIds(); if(list.size() != 1) throw new IllegalStateException("There is not exactly one return value like expected. num times method called="+list.size()); return list.get(0); } public List<Integer> getIncomingPushStreamIds() { Stream<Integer> map = super.getCalledMethods(Method.INCOMING_PUSH).map(s -> (Integer)s.getArgs()[0]); return map.collect(Collectors.toList()); } public PartialStream getSingleReturnValueIncomingResponse() { List<PartialStream> list = getReturnValuesIncomingResponse(); if(list.size() != 1) throw new IllegalStateException("There is not exactly one return value like expected. num times method called="+list.size()); return list.get(0); } public List<PartialStream> getReturnValuesIncomingResponse() { Stream<ParametersPassedIn> calledMethodList = super.getCalledMethods(Method.INCOMING_RESPONSE); Stream<PartialStream> retVal = calledMethodList.map(p -> (PartialStream)p.getArgs()[0]); //clear out read values this.calledMethods.remove(Method.INCOMING_RESPONSE); return retVal.collect(Collectors.toList()); } public void setIncomingRespDefault(CompletableFuture<Void> retVal) { super.setDefaultReturnValue(Method.INCOMING_RESPONSE, retVal); } public void setIncomingPushDefault(PushPromiseListener pushListener) { super.setDefaultReturnValue(Method.INCOMING_PUSH, pushListener); } }