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); }
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); }
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))); }