Esempio n. 1
0
        public void HandleThrowsIfOnHandleReturnsTooLargeArray()
        {
            HttpParameter[] parameters = new HttpParameter[] {
                new HttpParameter("arg1", typeof(string)),
            };

            SHttpOperationHandler handler = new SHttpOperationHandler()
            {
                CallBase = true
            };

            handler.OnGetInputParameters01  = () => parameters;
            handler.OnGetOutputParameters01 = () => parameters;
            handler.OnHandleObjectArray     = (oArray) => new object[2];

            string errorMessage = SR.HttpOperationHandlerProducedWrongNumberOfValues(
                typeof(HttpOperationHandler).Name,
                handler.ToString(),
                handler.OperationName,
                1,
                2);

            ExceptionAssert.Throws <InvalidOperationException>(
                errorMessage,
                () => handler.Handle(new object[] { "fred" })
                );
        }
Esempio n. 2
0
        public void HandleConvertsStringValuesReturnedFromOnHandle()
        {
            TestDataAssert.Execute(
                HttpTestData.ConvertableValueTypes,
                TestDataVariations.AllSingleInstances,
                "Handle failed",
                (type, obj) =>
            {
                Type convertType = obj.GetType();
                if (HttpParameterAssert.CanConvertToStringAndBack(convertType))
                {
                    HttpParameter hpd          = new HttpParameter("aName", convertType);
                    HttpParameter[] parameters = new HttpParameter[] { hpd };

                    SHttpOperationHandler handler   = new SHttpOperationHandler();
                    handler.OnGetInputParameters01  = () => parameters;
                    handler.OnGetOutputParameters01 = () => parameters;
                    handler.OnHandleObjectArray     = (oArray) => new object[] { obj.ToString() };

                    object[] result = handler.Handle(new object[] { obj });
                    Assert.IsNotNull(result, "Null result returned from Handle.");
                    Assert.AreEqual(1, result.Length, "Handle returned wrong length array.");
                    Assert.AreEqual(convertType, result[0].GetType(), "Value did not convert to right type.");
                    Assert.AreEqual(obj.ToString(), result[0].ToString(), "Object did not convert to the right value.");
                }
            });
        }
Esempio n. 3
0
        public void HandleThrowsIfOnHandleReturnsArrayContainingNonconvertableTypes()
        {
            HttpParameter hpd = new HttpParameter("arg1", typeof(PocoType));

            HttpParameter[] parameters = new HttpParameter[] { hpd };

            SHttpOperationHandler handler = new SHttpOperationHandler()
            {
                CallBase = true
            };

            handler.OnGetInputParameters01  = () => parameters;
            handler.OnGetOutputParameters01 = () => parameters;
            handler.OnHandleObjectArray     = (oArray) => new object[] { "notAPocoType" };

            string errorMessage = SR.HttpOperationHandlerReceivedWrongType(
                typeof(HttpOperationHandler).Name,
                handler.ToString(),
                handler.OperationName,
                hpd.Type.Name,
                hpd.Name,
                typeof(string).Name);

            ExceptionAssert.Throws <InvalidOperationException>(
                errorMessage,
                () => handler.Handle(new object[] { "fred" })
                );
        }
        public void ConstructorCallsOnGetInputParametersOfAllRequestHandlers()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler1);
            bool onGetInputParamters1Called = false;
            requestHandler1.OnGetOutputParameters01 = () => null;
            requestHandler1.OnGetInputParameters01 =
                () =>
                {
                    onGetInputParamters1Called = true;
                    return null;
                };

            SHttpOperationHandler requestHandler2 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler2);
            bool onGetInputParamters2Called = false;
            requestHandler2.OnGetOutputParameters01 = () => null;
            requestHandler2.OnGetInputParameters01 =
                () =>
                {
                    onGetInputParamters2Called = true;
                    return null;
                };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.ReturnValue = HttpParameter.ResponseMessage;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
            Assert.IsTrue(onGetInputParamters1Called, "The OnGetInputParameters() method of requestHandler1 was not called.");
            Assert.IsTrue(onGetInputParamters2Called, "The OnGetInputParameters() method of requestHandler2 was not called.");
        }
Esempio n. 5
0
        public void InputParametersCallsOnGetInputParmeters()
        {
            SHttpOperationHandler handler = new SHttpOperationHandler();
            bool wereCalled = false;

            handler.OnGetInputParameters01 = () => { wereCalled = true; return(new HttpParameter[0]); };
            ReadOnlyCollection <HttpParameter> arguments = handler.InputParameters;

            Assert.IsTrue(wereCalled, "OnGetInputParameters was not called.");
        }
Esempio n. 6
0
        public void InputParametersDoesNotCallOnGetInputParmetersTwice()
        {
            SHttpOperationHandler handler = new SHttpOperationHandler();
            int callCount = 0;

            handler.OnGetInputParameters01 = () => { ++callCount; return(new HttpParameter[0]); };
            ReadOnlyCollection <HttpParameter> arguments1 = handler.InputParameters;
            ReadOnlyCollection <HttpParameter> arguments2 = handler.InputParameters;

            Assert.AreEqual(1, callCount, "OnGetInputParameters was called more than once.");
        }
Esempio n. 7
0
        public void InputParametersAcceptsNullFromOnGetInputParmeters()
        {
            SHttpOperationHandler handler = new SHttpOperationHandler();
            bool wereCalled = false;

            handler.OnGetInputParameters01 = () => { wereCalled = true; return(null); };
            ReadOnlyCollection <HttpParameter> arguments = handler.InputParameters;

            Assert.IsTrue(wereCalled, "OnGetInputParameters was not called.");
            Assert.AreEqual(0, arguments.Count, "Collection should have been empty.");
        }
Esempio n. 8
0
        public void InputParametersReturnsReadOnlyCollection()
        {
            SHttpOperationHandler handler = new SHttpOperationHandler();

            handler.OnGetInputParameters01 = () => new HttpParameter[] { new HttpParameter("arg1", typeof(string)) };
            ReadOnlyCollection <HttpParameter> arguments = handler.InputParameters;

            Assert.IsNotNull(arguments, "InputParameters should never be null.");
            Assert.AreEqual(1, arguments.Count, "InputParameters.Count should have been 1.");
            HttpParameter hpd = arguments[0];

            Assert.AreEqual("arg1", hpd.Name, "Did not set inputParameters[0] corectly.");
        }
Esempio n. 9
0
        public void OutputParametersPreservesOrderFromOnGetOutputParameters()
        {
            HttpParameter[] parameters = new HttpParameter[] {
                new HttpParameter("arg1", typeof(string)),
                new HttpParameter("arg2", typeof(int))
            };

            SHttpOperationHandler handler = new SHttpOperationHandler();

            handler.OnGetOutputParameters01 = () => parameters;
            ReadOnlyCollection <HttpParameter> arguments = handler.OutputParameters;

            HttpParameterAssert.AreEqual(parameters, arguments, "Order was not preserved.");
        }
        public void ConstructorAcceptsAnEmptyResponseHandlersCollection()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            SHttpOperationHandler handler = new SHttpOperationHandler();
            handler.OnGetInputParameters01 = () => null;
            handler.OnGetOutputParameters01 = () => null;
            requestHandlers.Add(handler);

            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.ReturnValue = HttpParameter.ResponseMessage;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
        }
Esempio n. 11
0
        public void HandleThrowsWithNullInput()
        {
            HttpParameter[] parameters = new HttpParameter[] {
                new HttpParameter("arg1", typeof(string)),
            };

            SHttpOperationHandler handler = new SHttpOperationHandler()
            {
                CallBase = true
            };

            handler.OnGetInputParameters01  = () => parameters;
            handler.OnGetOutputParameters01 = () => parameters;

            ExceptionAssert.ThrowsArgumentNull("input", () => handler.Handle(null));
        }
Esempio n. 12
0
        public void HandleCallsOnHandle()
        {
            HttpParameter[] parameters = new HttpParameter[] {
                new HttpParameter("arg1", typeof(string)),
            };

            SHttpOperationHandler handler = new SHttpOperationHandler();
            bool called = false;

            handler.OnGetInputParameters01  = () => parameters;
            handler.OnGetOutputParameters01 = () => parameters;
            handler.OnHandleObjectArray     = (oArray) => { called = true; return(oArray); };

            handler.Handle(new object[] { "fred" });
            Assert.IsTrue(called, "Handle did not call OnHandle.");
        }
Esempio n. 13
0
        public void OutputParametersClonesParametersFromOnGetInputParameters()
        {
            HttpParameter[] parameters = new HttpParameter[] {
                new HttpParameter("arg1", typeof(string)),
            };

            SHttpOperationHandler handler = new SHttpOperationHandler();

            handler.OnGetOutputParameters01 = () => parameters;
            ReadOnlyCollection <HttpParameter> arguments = handler.OutputParameters;
            bool isContentParameterOriginal = parameters[0].IsContentParameter;
            bool isContentParameterCloned   = arguments[0].IsContentParameter;

            Assert.AreEqual(isContentParameterOriginal, isContentParameterCloned, "IsContentParameter property was not properly cloned.");
            parameters[0].IsContentParameter = !isContentParameterOriginal;
            Assert.AreEqual(isContentParameterOriginal, isContentParameterCloned, "IsContentParameter property on original should not have affected clone.");
        }
Esempio n. 14
0
        public void HandlePropagatesExceptionFromOnHandle()
        {
            HttpParameter hpd = new HttpParameter("arg1", typeof(int));

            HttpParameter[] parameters = new HttpParameter[] { hpd };

            SHttpOperationHandler handler = new SHttpOperationHandler();

            handler.OnGetInputParameters01  = () => parameters;
            handler.OnGetOutputParameters01 = () => parameters;
            handler.OnHandleObjectArray     = (oArray) => { throw new NotSupportedException("myMessage"); };

            ExceptionAssert.Throws <NotSupportedException>(
                "myMessage",
                () => handler.Handle(new object[] { 5 })
                );
        }
Esempio n. 15
0
        public void HandleReturnsEmptyArrayIfOnHandleReturnsNull()
        {
            HttpParameter[] parameters = new HttpParameter[] {
                new HttpParameter("arg1", typeof(string)),
            };

            SHttpOperationHandler handler = new SHttpOperationHandler();

            handler.OnGetInputParameters01  = () => parameters;
            handler.OnGetOutputParameters01 = () => parameters;
            handler.OnHandleObjectArray     = (oArray) => null;

            object[] result = handler.Handle(new object[] { "fred" });
            Assert.IsNotNull(result, "Handle returned null.");
            Assert.AreEqual(1, result.Length, "Handle returned wrong length array.");
            Assert.IsNull(result[0], "Handle did not return empty array.");
        }
Esempio n. 16
0
        public void HandleThrowsWithTooLargeInput()
        {
            HttpParameter[] parameters = new HttpParameter[] {
                new HttpParameter("arg1", typeof(string)),
            };

            SHttpOperationHandler handler = new SHttpOperationHandler()
            {
                CallBase = true
            };

            handler.OnGetInputParameters01  = () => parameters;
            handler.OnGetOutputParameters01 = () => parameters;

            string errorMessage = SR.HttpOperationHandlerReceivedWrongNumberOfValues(
                typeof(HttpOperationHandler).Name,
                handler.ToString(),
                handler.OperationName,
                parameters.Length,
                2);

            ExceptionAssert.Throws <InvalidOperationException>(errorMessage, () => handler.Handle(new object[2]));
        }
Esempio n. 17
0
        public void HandleThrowsWitUnconvertableInput()
        {
            HttpParameter[] parameters = new HttpParameter[] {
                new HttpParameter("arg1", typeof(string)),
            };

            SHttpOperationHandler handler = new SHttpOperationHandler()
            {
                CallBase = true
            };

            handler.OnGetInputParameters01  = () => parameters;
            handler.OnGetOutputParameters01 = () => parameters;

            string errorMessage = SR.HttpOperationHandlerReceivedWrongType(
                typeof(HttpOperationHandler).Name,
                handler.ToString(),
                handler.OperationName,
                parameters[0].Type.Name,
                parameters[0].Name,
                typeof(PocoType).Name);

            ExceptionAssert.Throws <InvalidOperationException>(errorMessage, () => handler.Handle(new object[] { new PocoType() }));
        }
        public void SetOutputValuesFromHandlerSetsValuesOnBoundInputs()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler1);
            requestHandler1.OnGetInputParameters01 = () => new HttpParameter[] { HttpParameter.RequestMessage };
            requestHandler1.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("anotherMessage", typeof(HttpRequestMessage)), HttpParameter.RequestHeaders };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.InputParameters.Add(HttpParameter.RequestHeaders);
            operation.InputParameters.Add(new HttpParameter("aThirdMessage", typeof(HttpRequestMessage)));
            operation.OutputParameters.Add(new HttpParameter("unknown", typeof(DateTime)));

            SHttpOperationHandler responseHandler1 = new SHttpOperationHandler();
            responseHandlers.Add(responseHandler1);
            responseHandler1.OnGetInputParameters01 = () => new HttpParameter[] { new HttpParameter("aDateTime", typeof(DateTime)) };
            responseHandler1.OnGetOutputParameters01 = () => null;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
            object[] array = pipelineInfo.GetEmptyPipelineValuesArray();

            object obj1 = new object();
            object obj2 = new object();
            object[] requestHandlerOutputs = new object[] { obj1, obj2 };

            object obj3 = new HttpResponseMessage();
            object obj4 = DateTime.Now;
            object[] serviceOperationOutputs = new object[] { obj3, obj4 };

            pipelineInfo.SetOutputValuesFromHandler(1, requestHandlerOutputs, array);

            Assert.AreSame(obj1, array[2], "SetOutputValuesFromHandler didn't set the correct output values for the request handler.");
            Assert.AreSame(obj2, array[1], "SetOutputValuesFromHandler didn't set the correct output values for the request handler.");

            pipelineInfo.SetOutputValuesFromHandler(2, serviceOperationOutputs, array);

            Assert.AreSame(obj3, array[4], "SetOutputValuesFromHandler didn't set the correct output values for the service operation.");
            Assert.AreSame(obj4, array[3], "SetOutputValuesFromHandler didn't set the correct output values for the service operation.");
        }
        public void SetHttpRequestMessageAddsHttpRequestMessageToTheArray()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler1);
            requestHandler1.OnGetInputParameters01 = () => new HttpParameter[] { HttpParameter.RequestMessage };
            requestHandler1.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("anotherMessage", typeof(HttpRequestMessage)), HttpParameter.RequestHeaders };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.InputParameters.Add(HttpParameter.RequestHeaders);
            operation.InputParameters.Add(new HttpParameter("aThirdMessage", typeof(HttpRequestMessage)));
            operation.OutputParameters.Add(new HttpParameter("unknown", typeof(DateTime)));

            SHttpOperationHandler responseHandler1 = new SHttpOperationHandler();
            responseHandlers.Add(responseHandler1);
            responseHandler1.OnGetInputParameters01 = () => new HttpParameter[] { new HttpParameter("aDateTime", typeof(DateTime)) };
            responseHandler1.OnGetOutputParameters01 = () => null;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
            object[] array = pipelineInfo.GetEmptyPipelineValuesArray();

            HttpRequestMessage request = new HttpRequestMessage();
            pipelineInfo.SetHttpRequestMessage(request, array);

            Assert.AreSame(request, array[0], "The HttpRequestMessage was not added to the first array indice although the input parameter is bound to the HttpRequestMessage.");
            Assert.IsNull(array[1], "The HttpRequestMessage was added to the second array indice although the input parameter is not bound to the HttpRequestMessage.");
            Assert.AreSame(request, array[2], "The HttpRequestMessage was not added to the third array indice although the input parameter is bound to the HttpRequestMessage.");
            Assert.IsNull(array[3], "The HttpRequestMessage was added to the fourth array indice although the input parameter is not bound to the HttpRequestMessage.");
            Assert.IsNull(array[4], "The HttpRequestMessage was added to the fifth array indice although the input parameter is not bound to the HttpRequestMessage.");
        }
        public void GetInputValuesForHandlerReturnsInputsForAGivenHandler()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler1);
            requestHandler1.OnGetInputParameters01 = () => new HttpParameter[] { HttpParameter.RequestMessage };
            requestHandler1.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("anotherMessage", typeof(HttpRequestMessage)), HttpParameter.RequestHeaders };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.InputParameters.Add(HttpParameter.RequestHeaders);
            operation.InputParameters.Add(new HttpParameter("aThirdMessage", typeof(HttpRequestMessage)));
            operation.OutputParameters.Add(new HttpParameter("unknown", typeof(DateTime)));

            SHttpOperationHandler responseHandler1 = new SHttpOperationHandler();
            responseHandlers.Add(responseHandler1);
            responseHandler1.OnGetInputParameters01 = () => new HttpParameter[] { new HttpParameter("aDateTime", typeof(DateTime)) };
            responseHandler1.OnGetOutputParameters01 = () => null;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
            object[] array = pipelineInfo.GetEmptyPipelineValuesArray();

            object obj1 = new object();
            array[0] = obj1;

            object obj2 = new HttpRequestMessage().Headers;
            array[1] = obj2;

            object obj3 = new HttpRequestMessage();
            array[2] = obj3;

            object obj4 = new object();
            array[3] = obj4;

            object[] requestSourceInputs = pipelineInfo.GetInputValuesForHandler(0, array);
            object[] requestHandlerInputs = pipelineInfo.GetInputValuesForHandler(1, array);
            object[] serviceOperationInputs = pipelineInfo.GetInputValuesForHandler(2, array);
            object[] responseHandlerInputs = pipelineInfo.GetInputValuesForHandler(3, array);
            object[] responseSinkInputs = pipelineInfo.GetInputValuesForHandler(4, array);

            Assert.AreEqual(0, requestSourceInputs.Length, "GetInputValuesForHandler returned the wrong number of input values for the request source handler.");

            Assert.AreEqual(1, requestHandlerInputs.Length, "GetInputValuesForHandler returned the wrong number of input values for the request handler.");
            Assert.AreSame(obj1, requestHandlerInputs[0], "GetInputValuesForHandler returned the wrong input value for the request handler.");

            Assert.AreEqual(2, serviceOperationInputs.Length, "GetInputValuesForHandler returned the wrong number of input values for the service operation.");
            Assert.AreSame(obj2, serviceOperationInputs[0], "GetInputValuesForHandler returned the wrong input value for the service operation.");
            Assert.AreSame(obj3, serviceOperationInputs[1], "GetInputValuesForHandler returned the wrong input value for the service operation.");

            Assert.AreEqual(1, responseHandlerInputs.Length, "GetInputValuesForHandler returned the wrong number of input values for the response handler.");
            Assert.AreSame(obj4, responseHandlerInputs[0], "GetInputValuesForHandler returned the wrong input value for the response handler.");

            Assert.AreEqual(1, responseSinkInputs.Length, "GetInputValuesForHandler returned the wrong number of input values for the response sink handler.");
        }
        public void GetHttpResponseMessageReturnsNullIfNoHttpResponseMessage()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler1);
            requestHandler1.OnGetInputParameters01 = () => new HttpParameter[] { HttpParameter.RequestMessage };
            requestHandler1.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("anInt", typeof(string)) };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.InputParameters.Add(new HttpParameter("anInt", typeof(int)));
            operation.OutputParameters.Add(new HttpParameter("unknown", typeof(DateTime)));

            SHttpOperationHandler responseHandler1 = new SHttpOperationHandler();
            responseHandlers.Add(responseHandler1);
            responseHandler1.OnGetInputParameters01 = () => new HttpParameter[] { new HttpParameter("aDateTime", typeof(DateTime)) };
            responseHandler1.OnGetOutputParameters01 = () => null;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
            object[] array = pipelineInfo.GetEmptyPipelineValuesArray();

            array[array.Length - 1] = null;
            HttpResponseMessage responseFromArray = pipelineInfo.GetHttpResponseMessage(array);

            Assert.IsNull(responseFromArray, "GetHttpResponseMessage() did not return the null value from the last indice of the array.");
        }
        public void GetEmptyPipelineValueArrayReturnsAnArrayInstance()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler1);
            requestHandler1.OnGetInputParameters01 = () => new HttpParameter[] { HttpParameter.RequestMessage };
            requestHandler1.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("anInt", typeof(string)) };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.InputParameters.Add(new HttpParameter("anInt", typeof(int)));
            operation.OutputParameters.Add(new HttpParameter("unknown", typeof(DateTime)));

            SHttpOperationHandler responseHandler1 = new SHttpOperationHandler();
            responseHandlers.Add(responseHandler1);
            responseHandler1.OnGetInputParameters01 = () => new HttpParameter[] { new HttpParameter("aDateTime", typeof(DateTime)) };
            responseHandler1.OnGetOutputParameters01 = () => null;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
            object[] array = pipelineInfo.GetEmptyPipelineValuesArray();
            Assert.AreEqual(4, array.Length, "The returned array length was not the count of input parameters plus one for the HttpResponseMessage.");
        }
        public void ConstructorThrowsIfAServiceOperationInputHasMultipleTypeOnlyBindings()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandler1.CallBase = true;
            requestHandlers.Add(requestHandler1);
            requestHandler1.OnGetInputParameters01 = () => null;
            requestHandler1.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("dateTime1", typeof(DateTime)) };

            SHttpOperationHandler requestHandler2 = new SHttpOperationHandler();
            requestHandler2.CallBase = true;
            requestHandlers.Add(requestHandler2);
            requestHandler2.OnGetInputParameters01 = () => null;
            requestHandler2.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("dateTime2", typeof(DateTime)) };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.InputParameters.Add(new HttpParameter("dateTime3", typeof(DateTime)));

            string exceptionMessage = SR.ServiceOperationWithMultipleTypeOnlyBindings(
                "operationName",
                "dateTime3",
                "DateTime",
                HttpOperationHandler.HttpOperationHandlerType.Name);
            string paramMessage1 = SR.RequestHandlerTypeOnlyOutputParameter(
                HttpOperationHandler.HttpOperationHandlerType.Name,
                requestHandler2.ToString(),
                "dateTime2",
                "DateTime");
            string paramMessage2 = SR.RequestHandlerTypeOnlyOutputParameter(
                HttpOperationHandler.HttpOperationHandlerType.Name,
                requestHandler1.ToString(),
                "dateTime1",
                "DateTime");
            string completeMessage = string.Format("{0}{3}{1}{3}{2}", exceptionMessage, paramMessage1, paramMessage2, Environment.NewLine);

            ExceptionAssert.Throws<InvalidOperationException>(completeMessage, () => new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation));
        }
        public void ConstructorThrowsIfAServiceOperationInputCanNotBeBoundAndItCanBeConvertedToFromAString()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler1);
            requestHandler1.OnGetInputParameters01 = () => null;
            requestHandler1.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("someOutput", typeof(string)) };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.InputParameters.Add(new HttpParameter("someInt", typeof(int)));

            string exceptionMessage = SR.ServiceOperationWithNoPossibleBindingForStringConvertableType(
                "operationName",
                "someInt",
                "Int32",
                HttpOperationHandler.HttpOperationHandlerType.Name);

            ExceptionAssert.Throws<InvalidOperationException>(exceptionMessage, () => new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation));
        }
        public void ConstructorThrowsIfAResponseHandlerInputCanNotBeBound()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.OutputParameters.Add(new HttpParameter("someOutput", typeof(string)));

            SHttpOperationHandler responseHandler1 = new SHttpOperationHandler();
            responseHandler1.CallBase = true;
            responseHandlers.Add(responseHandler1);
            responseHandler1.OnGetInputParameters01 = () => new HttpParameter[] { new HttpParameter("pocoType", typeof(PocoType)) };
            responseHandler1.OnGetOutputParameters01 = () => null;

            string exceptionMessage = SR.ResponseHandlerWithNoPossibleBindingForNonStringConvertableType(
                HttpOperationHandler.HttpOperationHandlerType.Name,
                responseHandler1.ToString(),
                "operationName",
                "pocoType",
                "PocoType",
                responseHandler1.GetType().Name);

            ExceptionAssert.Throws<InvalidOperationException>(exceptionMessage, () => new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation));
        }
        public void ConstructorDoesNotThrowIfTheOperationHandlerPipelineCanBindSuccessfully()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler requestHandler1 = new SHttpOperationHandler();
            requestHandlers.Add(requestHandler1);
            requestHandler1.OnGetInputParameters01 = () => new HttpParameter[] { HttpParameter.RequestMessage };
            requestHandler1.OnGetOutputParameters01 = () => new HttpParameter[] { new HttpParameter("anInt", typeof(string)) };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.Name = "operationName";
            operation.ReturnValue = HttpParameter.ResponseMessage;
            operation.InputParameters.Add(new HttpParameter("anInt", typeof(int)));
            operation.OutputParameters.Add(new HttpParameter("unknown", typeof(DateTime)));

            SHttpOperationHandler responseHandler1 = new SHttpOperationHandler();
            responseHandlers.Add(responseHandler1);
            responseHandler1.OnGetInputParameters01 = () => new HttpParameter[] { new HttpParameter("aDateTime", typeof(DateTime)) };
            responseHandler1.OnGetOutputParameters01 = () => null;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
        }
        public void ConstructorDoesNotCallOnHandleOfAnyResponseHandlers()
        {
            List<HttpOperationHandler> requestHandlers = new List<HttpOperationHandler>();
            List<HttpOperationHandler> responseHandlers = new List<HttpOperationHandler>();

            SHttpOperationHandler responseHandler1 = new SHttpOperationHandler();
            responseHandlers.Add(responseHandler1);
            responseHandler1.OnGetInputParameters01 = () => null;
            responseHandler1.OnGetOutputParameters01 = () => null;
            responseHandler1.OnHandleObjectArray =
                (inputs) =>
                {
                    Assert.Fail("OnHandle() was called.");
                    return null;
                };

            SHttpOperationHandler responseHandler2 = new SHttpOperationHandler();
            responseHandlers.Add(responseHandler2);
            responseHandler2.OnGetInputParameters01 = () => null;
            responseHandler2.OnGetOutputParameters01 = () => null;
            responseHandler2.OnHandleObjectArray =
                (inputs) =>
                {
                    Assert.Fail("OnHandle() was called.");
                    return null;
                };

            SHttpOperationDescription operation = new SHttpOperationDescription();
            operation.ReturnValue = HttpParameter.ResponseMessage;

            OperationHandlerPipelineInfo pipelineInfo = new OperationHandlerPipelineInfo(requestHandlers, responseHandlers, operation);
        }