public void ActionSuccessfullyResolvedWithDerivedType()
        {
            var parameters = new string[] { };

            IEdmOperation function;

            FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Move", parameters, HardCodedTestModel.GetManagerType(), HardCodedTestModel.TestModel, out function, ODataUriResolver.Default).Should().BeTrue();
            function.Should().BeSameAs(HardCodedTestModel.GetMoveOverloadForEmployee());
        }
        public void SingleFunctionSuccessfullyResolved()
        {
            var parameters = new[] { "inOffice" };

            IEdmOperation function;

            FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.HasDog", parameters, HardCodedTestModel.GetPersonType(), HardCodedTestModel.TestModel, out function, ODataUriResolver.Default).Should().BeTrue();
            function.Should().BeSameAs(HardCodedTestModel.GetHasDogOverloadForPeopleWithTwoParameters());
        }
        public void ActionWithParametersInURLShouldThrowError()
        {
            var model      = HardCodedTestModel.TestModel;
            var parameters = new string[] { "123 bob st." };

            IEdmOperation function;
            Action        test = () => FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Move", parameters, HardCodedTestModel.GetPersonType(), model, out function, ODataUriResolver.Default);

            test.ShouldThrow <ODataException>().WithMessage(ODataErrorStrings.RequestUriProcessor_SegmentDoesNotSupportKeyPredicates("Fully.Qualified.Namespace.Move"));
        }
        public void ActionSuccessfullyResolvedWithDerivedType()
        {
            var parameters = new string[] { };

            IEdmOperation function;
            var           result = FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Move", parameters, HardCodedTestModel.GetManagerType(), HardCodedTestModel.TestModel, out function, DefaultUriResolver);

            Assert.True(result);
            Assert.Same(HardCodedTestModel.GetMoveOverloadForEmployee(), function);
        }
        public void SingleFunctionSuccessfullyResolved()
        {
            var parameters = new[] { "inOffice" };

            IEdmOperation function;
            var           result = FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.HasDog", parameters, HardCodedTestModel.GetPersonType(), HardCodedTestModel.TestModel, out function, DefaultUriResolver);

            Assert.True(result);
            Assert.Same(HardCodedTestModel.GetHasDogOverloadForPeopleWithTwoParameters(), function);
        }
Ejemplo n.º 6
0
        public void OperationOverloadsWithSameNameWithoutBindingType()
        {
            var model      = ModelBuildingHelpers.GetModelWithOperationOverloadsWithSameName();
            var parameters = new string[] {};

            IEdmOperation operation;
            Action        resolve = () => FunctionOverloadResolver.ResolveOperationFromList("Test.Action", parameters, null, model, out operation, DefaultUriResolver);

            resolve.Throws <ODataException>(ODataErrorStrings.FunctionOverloadResolver_MultipleActionOverloads("Test.Action"));
        }
        public void OverloadBoundFunctionsWithAllOptionalParametersSuccessfullyResolved()
        {
            var model = new EdmModel();

            var int32TypeReference = EdmCoreModel.Instance.GetInt32(false);

            // Add function with all optional parameters.
            var functionWithAllOptionalParameters = new EdmFunction("NS", "Function", int32TypeReference, true, null, true);

            functionWithAllOptionalParameters.AddParameter("BindingParameter", int32TypeReference);
            functionWithAllOptionalParameters.AddOptionalParameter("Parameter1", int32TypeReference);
            functionWithAllOptionalParameters.AddOptionalParameter("Parameter2", int32TypeReference);
            model.AddElement(functionWithAllOptionalParameters);

            // Add an overload function without parameter.
            var functionWithoutParameter = new EdmFunction("NS", "Function", int32TypeReference, true, null, true);

            functionWithoutParameter.AddParameter("BindingParameter", int32TypeReference);
            model.AddElement(functionWithoutParameter);

            IEdmOperation function;

            // Resolve overload function without parameter. Be noted, it picks the one with no optional parameters.
            var parameters = new string[] { };
            var result     = FunctionOverloadResolver.ResolveOperationFromList("NS.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver);

            Assert.True(result);
            Assert.Same(functionWithoutParameter, function);

            // Resolve overload function with one bound and two optional parameters (one omitted).
            parameters = new string[] { "Parameter1" };
            result     = FunctionOverloadResolver.ResolveOperationFromList("NS.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver);
            Assert.True(result);
            Assert.Same(functionWithAllOptionalParameters, function);

            // Resolve overload function with one bound and two optional parameters (both specified).
            parameters = new string[] { "Parameter1", "Parameter2" };
            result     = FunctionOverloadResolver.ResolveOperationFromList("NS.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver);
            Assert.True(result);
            Assert.Same(functionWithAllOptionalParameters, function);

            // Return false if no match.
            parameters = new string[] { "Parameter1", "Parameter4" };
            result     = FunctionOverloadResolver.ResolveOperationFromList("NS.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver);
            Assert.False(result);
        }
Ejemplo n.º 8
0
        public void OverloadBoundFunctionsSuccessfullyResolved()
        {
            var model = new EdmModel();

            // Add function without parameter.
            var int32TypeReference       = EdmCoreModel.Instance.GetInt32(false);
            var functionWithoutParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference, true, null, true);

            functionWithoutParameter.AddParameter("BindingParameter", int32TypeReference);
            model.AddElement(functionWithoutParameter);

            // Add function with parameter.
            var functionWithParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference, true, null, true);

            functionWithParameter.AddParameter("BindingParameter", int32TypeReference);
            functionWithParameter.AddParameter("Parameter", int32TypeReference);
            model.AddElement(functionWithParameter);

            // Add function with two parameters.
            var functionWithTwoParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference, true, null, true);

            functionWithTwoParameter.AddParameter("BindingParameter", int32TypeReference);
            functionWithTwoParameter.AddParameter("Parameter", int32TypeReference);
            functionWithTwoParameter.AddParameter("Parameter2", int32TypeReference);
            model.AddElement(functionWithTwoParameter);

            // Add function with two required and two optional parameters.
            var functionWithTwoRequiredOneOptionalParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference, true, null, true);

            functionWithTwoRequiredOneOptionalParameter.AddParameter("BindingParameter", int32TypeReference);
            functionWithTwoRequiredOneOptionalParameter.AddParameter("Parameter", int32TypeReference);
            functionWithTwoRequiredOneOptionalParameter.AddParameter("Parameter2", int32TypeReference);
            functionWithTwoRequiredOneOptionalParameter.AddOptionalParameter("Parameter3", int32TypeReference);
            functionWithTwoRequiredOneOptionalParameter.AddOptionalParameter("Parameter4", int32TypeReference);
            model.AddElement(functionWithTwoRequiredOneOptionalParameter);

            // Add function with one required and one optional parameters.
            var functionWithOneRequiredOneOptionalParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference, true, null, true);

            functionWithOneRequiredOneOptionalParameter.AddParameter("BindingParameter", int32TypeReference);
            functionWithOneRequiredOneOptionalParameter.AddParameter("Parameter1", int32TypeReference);
            functionWithOneRequiredOneOptionalParameter.AddOptionalParameter("Parameter3", int32TypeReference);
            model.AddElement(functionWithOneRequiredOneOptionalParameter);

            // Add function with one required and two optional parameters.
            var functionWithOneRequiredTwoOptionalParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference, true, null, true);

            functionWithOneRequiredTwoOptionalParameter.AddParameter("BindingParameter", int32TypeReference);
            functionWithOneRequiredTwoOptionalParameter.AddParameter("Parameter1", int32TypeReference);
            functionWithOneRequiredTwoOptionalParameter.AddOptionalParameter("Parameter3", int32TypeReference);
            functionWithOneRequiredTwoOptionalParameter.AddOptionalParameter("Parameter4", int32TypeReference);
            model.AddElement(functionWithOneRequiredTwoOptionalParameter);

            // Add function with one required and two optional parameters.
            var functionWithOneRequiredThreeOptionalParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference, true, null, true);

            functionWithOneRequiredThreeOptionalParameter.AddParameter("BindingParameter", int32TypeReference);
            functionWithOneRequiredThreeOptionalParameter.AddParameter("Parameter1", int32TypeReference);
            functionWithOneRequiredThreeOptionalParameter.AddOptionalParameter("Parameter3", int32TypeReference);
            functionWithOneRequiredThreeOptionalParameter.AddOptionalParameter("Parameter4", int32TypeReference);
            functionWithOneRequiredThreeOptionalParameter.AddOptionalParameter("Parameter5", int32TypeReference);
            model.AddElement(functionWithOneRequiredThreeOptionalParameter);

            IEdmOperation function;

            // Resolve overload function without parameter.
            var parameters = new string[] { };

            FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver).Should().BeTrue();
            function.Should().BeSameAs(functionWithoutParameter);

            // Resolve overload function with parameter.
            parameters = new string[] { "Parameter" };
            FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver).Should().BeTrue();
            function.Should().BeSameAs(functionWithParameter);

            // Resolve overload function with parameter.
            parameters = new string[] { "Parameter", "Parameter2" };
            FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver).Should().BeTrue();
            function.Should().BeSameAs(functionWithTwoParameter);

            // Resolve overload function with two required and one optional parameter.
            parameters = new string[] { "Parameter", "Parameter2", "Parameter3" };
            FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver).Should().BeTrue();
            function.Should().BeSameAs(functionWithTwoRequiredOneOptionalParameter);

            // Resolve overload function with one required and two optional parameters (one omitted).
            parameters = new string[] { "Parameter1", "Parameter3" };
            FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver).Should().BeTrue();
            function.Should().BeSameAs(functionWithOneRequiredOneOptionalParameter);

            // Resolve overload function with one required and three optional parameters (one omitted).
            parameters = new string[] { "Parameter1", "Parameter3", "Parameter5" };
            FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver).Should().BeTrue();
            function.Should().BeSameAs(functionWithOneRequiredThreeOptionalParameter);

            // Raise exception if more than one match.
            parameters = new string[] { "Parameter1", "Parameter4" };
            Action resolve = () => FunctionOverloadResolver.ResolveOperationFromList("Fully.Qualified.Namespace.Function", parameters, int32TypeReference.Definition, model, out function, DefaultUriResolver).Should().BeTrue();

            resolve.ShouldThrow <ODataException>().WithMessage(ODataErrorStrings.FunctionOverloadResolver_NoSingleMatchFound("Fully.Qualified.Namespace.Function", string.Join(",", parameters)));
        }