private IDataSource <object> SubmitPrefetchRequest( IProducer <object> producerSequence, ImageRequest imageRequest, RequestLevel lowestPermittedRequestLevelOnSubmit, object callerContext, int priority) { IRequestListener requestListener = GetRequestListenerForRequest(imageRequest); try { RequestLevel lowestPermittedRequestLevel = RequestLevel.GetMax( imageRequest.LowestPermittedRequestLevel, lowestPermittedRequestLevelOnSubmit); SettableProducerContext settableProducerContext = new SettableProducerContext( imageRequest, GenerateUniqueFutureId(), requestListener, callerContext, lowestPermittedRequestLevel.Value, /* isPrefetch */ true, /* isIntermediateResultExpected */ false, priority); return(ProducerToDataSourceAdapter <object> .Create( producerSequence, settableProducerContext, requestListener)); } catch (Exception exception) { return(DataSources.ImmediateFailedDataSource <object>(exception)); } }
public void Initialize() { // Initializes the mock RequestListener ProducerListenerImpl producerListener = new ProducerListenerImpl( (_, __) => { }, (_, __, ___) => { }, (_, __, ___) => { }, (_, __, ___, ____) => { }, (_, __, ___) => { }, (_) => { return(false); }); _requestListener = new RequestListenerImpl( producerListener, (imageRequest, callerContext, requestId, isPrefetch) => { _onRequestStartInvocation = true; _internalImageRequest = imageRequest; _internalCallerContext = callerContext; _internalRequestId = requestId; _internalIsPrefetch = isPrefetch; }, (imageRequest, requestId, isPrefetch) => { _onRequestSuccessInvocation = true; _internalImageRequest = imageRequest; _internalRequestId = requestId; _internalIsPrefetch = isPrefetch; }, (imageRequest, requestId, exception, isPrefetch) => { _onRequestFailureInvocation = true; _internalImageRequest = imageRequest; _internalRequestId = requestId; _internalException = exception; _internalIsPrefetch = isPrefetch; }, (requestId) => { _onRequestCancellationInvocation = true; _internalRequestId = requestId; }); _result1 = new object(); _result2 = new object(); _result3 = new object(); _dataSubscriber1 = new MockDataSubscriber <object>(); _dataSubscriber2 = new MockDataSubscriber <object>(); _internalIsPrefetch = true; _settableProducerContext = new SettableProducerContext( IMAGE_REQUEST, REQUEST_ID, producerListener, CALLER_CONTEXT, RequestLevel.FULL_FETCH, IS_PREFETCH, true, Priority.HIGH); _producer = new ProducerImpl <object>( (consumer, _) => { _internalConsumer = consumer; }); _dataSource = ProducerToDataSourceAdapter <object> .Create( _producer, _settableProducerContext, _requestListener); Assert.IsTrue(_onRequestStartInvocation); Assert.AreSame(_internalImageRequest, IMAGE_REQUEST); Assert.AreSame(_internalCallerContext, CALLER_CONTEXT); Assert.AreSame(_internalRequestId, REQUEST_ID); Assert.IsFalse(_internalIsPrefetch); Assert.IsNotNull(_internalConsumer); _onRequestStartInvocation = false; _dataSource.Subscribe(_dataSubscriber1, CallerThreadExecutor.Instance); }