/// <summary> /// Initializes a new instance of the <see cref="FunctionSegmentTemplate" /> class. /// </summary> /// <param name="parameters">The function parameter template mappings.The key string is case-sensitive, the value string should wrapper with { and }.</param> /// <param name="function">The Edm function, it should be bound function.</param> /// <param name="navigationSource">The Edm navigation source of this function return. It could be null.</param> public FunctionSegmentTemplate(IDictionary <string, string> parameters, IEdmFunction function, IEdmNavigationSource navigationSource) { if (parameters == null) { throw Error.ArgumentNull(nameof(parameters)); } Function = function ?? throw Error.ArgumentNull(nameof(function)); NavigationSource = navigationSource; // Only accept the bound function if (!function.IsBound) { throw new ODataException(Error.Format(SRResources.FunctionIsNotBound, function.Name)); } // Parameters should include all required parameter, but maybe include the optional parameter. ParameterMappings = function.VerifyAndBuildParameterMappings(parameters); string routeKey = ParameterMappings.BuildRouteKey(); string parameterStr = ParameterMappings.Count == 0 ? "()" : $"({{{routeKey}}})"; UnqualifiedIdentifier = function.Name + parameterStr; Literal = function.FullName() + parameterStr; // Function will always have the return type IsSingle = function.ReturnType.TypeKind() != EdmTypeKind.Collection; }
/// <summary> /// Initializes a new instance of the <see cref="FunctionSegmentTemplate" /> class. /// </summary> /// <param name="parameters">The function parameter template mappings.The key string is case-sensitive, the value string should wrapper with { and }.</param> /// <param name="function">The Edm function, it should be bound function.</param> /// <param name="navigationSource">The Edm navigation source of this function return. It could be null.</param> public FunctionSegmentTemplate(IDictionary <string, string> parameters, IEdmFunction function, IEdmNavigationSource navigationSource) { if (parameters == null) { throw Error.ArgumentNull(nameof(parameters)); } Function = function ?? throw Error.ArgumentNull(nameof(function)); NavigationSource = navigationSource; // Only accept the bound function if (!function.IsBound) { throw new ODataException(Error.Format(SRResources.FunctionIsNotBound, function.Name)); } // Parameters should include all required parameter, but maybe include the optional parameter. ParameterMappings = function.VerifyAndBuildParameterMappings(parameters); // Join the parameters as p1={p1} string parameterStr = "(" + string.Join(",", ParameterMappings.Select(a => $"{a.Key}={{{a.Value}}}")) + ")"; UnqualifiedIdentifier = function.Name + parameterStr; Literal = function.FullName() + parameterStr; // Function will always have the return type IsSingle = function.ReturnType.TypeKind() != EdmTypeKind.Collection; }
public void VerifyAndBuildParameterMappings_ThrowsArgumentNull_InputParameters() { // Arrange & Act & Assert IEdmFunction function = null; ExceptionAssert.ThrowsArgumentNull(() => function.VerifyAndBuildParameterMappings(null), "function"); // Arrange & Act & Assert function = new Mock <IEdmFunction>().Object; ExceptionAssert.ThrowsArgumentNull(() => function.VerifyAndBuildParameterMappings(null), "parameters"); }
/// <summary> /// Initializes a new instance of the <see cref="FunctionSegmentTemplate" /> class. /// </summary> /// <param name="parameters">The function parameter template mappings.The key string is case-sensitive, the value string should wrapper with { and }.</param> /// <param name="function">The Edm function, it should be bound function.</param> /// <param name="navigationSource">The Edm navigation source of this function return. It could be null.</param> public FunctionSegmentTemplate(IDictionary <string, string> parameters, IEdmFunction function, IEdmNavigationSource navigationSource) { if (parameters == null) { throw Error.ArgumentNull(nameof(parameters)); } Function = function ?? throw Error.ArgumentNull(nameof(function)); NavigationSource = navigationSource; // Only accept the bound function if (!function.IsBound) { throw new ODataException(Error.Format(SRResources.OperationIsNotBound, function.Name, "function")); } // Parameters should include all required parameter, but maybe include the optional parameter. ParameterMappings = function.VerifyAndBuildParameterMappings(parameters); }