public void NonBoundCsdlSemanticsOperationPropertiesShouldBeCorrect()
        {
            var function         = new CsdlFunction("Checkout", Enumerable.Empty <CsdlOperationParameter>(), new CsdlNamedTypeReference("Edm.String", false, testLocation), false /*isBound*/, null /*entitySetPath*/, true /*isComposable*/, null /*documentation*/, testLocation);
            var semanticFunction = new CsdlSemanticsFunction(this.semanticSchema, function);

            semanticFunction.IsBound.Should().BeFalse();
            semanticFunction.Location().Should().Be(testLocation);
            semanticFunction.Name.Should().Be("Checkout");
            semanticFunction.Namespace.Should().Be("FQ.NS");
            semanticFunction.ReturnType.Definition.Should().Be(EdmCoreModel.Instance.GetString(true).Definition);
            semanticFunction.EntitySetPath.Should().BeNull();
            semanticFunction.SchemaElementKind.Should().Be(EdmSchemaElementKind.Function);
            semanticFunction.IsComposable.Should().BeTrue();
        }
Esempio n. 2
0
        private IEnumerable <IEdmOperation> ComputeOperations()
        {
            List <IEdmOperation> operations = new List <IEdmOperation>();

            foreach (CsdlOperation operation in this.schema.Operations)
            {
                if (operation is CsdlAction)
                {
                    operations.Add(new CsdlSemanticsAction(this, (CsdlAction)operation));
                }
                else
                {
                    CsdlFunction function = operation as CsdlFunction;
                    Debug.Assert(function != null, "function != null");
                    operations.Add(new CsdlSemanticsFunction(this, function));
                }
            }

            return(operations);
        }
        public void NonBoundCsdlSemanticsOperationPropertiesShouldBeCorrect()
        {
            var function = new CsdlFunction(
                "Checkout",
                Enumerable.Empty <CsdlOperationParameter>(),
                new CsdlOperationReturn(new CsdlNamedTypeReference("Edm.String", false, testLocation), testLocation),
                false /*isBound*/,
                null /*entitySetPath*/,
                true /*isComposable*/,
                testLocation);

            var semanticFunction = new CsdlSemanticsFunction(this.semanticSchema, function);

            Assert.False(semanticFunction.IsBound);
            Assert.Equal(testLocation, semanticFunction.Location());
            Assert.Equal("Checkout", semanticFunction.Name);
            Assert.Equal("FQ.NS", semanticFunction.Namespace);
            Assert.Equal("Edm.String", semanticFunction.ReturnType.Definition.FullTypeName());
            Assert.Null(semanticFunction.EntitySetPath);
            Assert.Equal(EdmSchemaElementKind.Function, semanticFunction.SchemaElementKind);
            Assert.True(semanticFunction.IsComposable);
        }
Esempio n. 4
0
 public CsdlSemanticsFunction(CsdlSemanticsSchema context, CsdlFunction function)
     : base(context, function)
 {
     this.function = function;
 }
Esempio n. 5
0
        public void ParseCsdlOperationWithActionAndFunctionWorksAsExpected()
        {
            string json = @"""Approval"": [
    {
        ""$Kind"": ""Action"",
        ""$IsBound"": true,
        ""$Parameter"": [
            {
                ""$Name"": ""binding"",
                ""$Type"": ""self.Order"",
                ""$Nullable"": true
            }
        ]
    },
    {
        ""$Kind"": ""Function"",
        ""$Parameter"": [
            {
                ""$Name"": ""Rating"",
                ""$Type"": ""Edm.Decimal"",
                ""$Precision"": 4,
                ""$Scale"": 1
            }
        ],
        ""$ReturnType"": {
            ""$Type"": ""self.Product""
         }
    }
]";

            IList <CsdlOperation> operations = ParseCsdlSchemaElement(json, SchemaJsonParser.TryParseCsdlOperationOverload);

            Assert.NotNull(operations);
            Assert.Equal(2, operations.Count);

            // #1 CsdlAction
            CsdlAction action = Assert.IsType <CsdlAction>(operations.First());

            Assert.Equal("Approval", action.Name);
            Assert.True(action.IsBound);
            Assert.Null(action.EntitySetPath);

            CsdlOperationParameter parameter = Assert.Single(action.Parameters);

            Assert.Equal("binding", parameter.Name);
            Assert.False(parameter.IsOptional);
            Assert.Null(parameter.DefaultValue);
            CsdlNamedTypeReference namedType = Assert.IsType <CsdlNamedTypeReference>(parameter.Type);

            Assert.True(namedType.IsNullable);
            Assert.Equal("self.Order", namedType.FullName);
            Assert.Null(action.Return);

            // #2 CsdlFunction
            CsdlFunction function = Assert.IsType <CsdlFunction>(operations.Last());

            Assert.Equal("Approval", function.Name);
            Assert.False(function.IsBound);
            Assert.Null(function.EntitySetPath);

            parameter = Assert.Single(function.Parameters);
            Assert.Equal("Rating", parameter.Name);
            Assert.False(parameter.IsOptional);
            Assert.Null(parameter.DefaultValue);
            CsdlDecimalTypeReference decimalType = Assert.IsType <CsdlDecimalTypeReference>(parameter.Type);

            Assert.False(decimalType.IsNullable);
            Assert.Equal(4, decimalType.Precision.Value);
            Assert.Equal(1, decimalType.Scale.Value);

            Assert.NotNull(function.Return);
            namedType = Assert.IsType <CsdlNamedTypeReference>(function.Return.ReturnType);
            Assert.False(namedType.IsNullable);
            Assert.Equal("self.Product", namedType.FullName);
        }
Esempio n. 6
0
        public void ParseCsdlOperationForFunctionWithMembersWorksAsExpected()
        {
            string json = @"""CreatedEntities"": [
    {
        ""$Kind"": ""Function"",
        ""$Parameter"": [
            {
                ""$Name"": ""before"",
                ""$Type"": ""Edm.DateTimeOffset"",
                ""$Nullable"": true,
                ""$Precision"": 10
            },
            {
                ""$Name"": ""after"",
                ""$Type"": ""Edm.DateTimeOffset"",
                ""$Precision"": 9
            }
        ],
        ""$ReturnType"": {
            ""$Collection"": true,
            ""$Type"": ""Edm.EntityType"",
            ""$Nullable"": true
        },
        ""$IsComposable"": true
    }
]";

            IList <CsdlOperation> operations = ParseCsdlSchemaElement(json, SchemaJsonParser.TryParseCsdlOperationOverload);

            Assert.NotNull(operations);
            CsdlOperation operation = Assert.Single(operations);

            CsdlFunction function = Assert.IsType <CsdlFunction>(operation);

            Assert.Equal("CreatedEntities", function.Name);
            Assert.False(function.IsBound);
            Assert.True(function.IsComposable);
            Assert.Null(function.EntitySetPath);

            // Parameter
            Assert.Equal(2, function.Parameters.Count());
            CsdlOperationParameter parameter = function.Parameters.First(c => c.Name == "before");

            Assert.False(parameter.IsOptional);
            Assert.Null(parameter.DefaultValue);
            CsdlTemporalTypeReference temporalType = Assert.IsType <CsdlTemporalTypeReference>(parameter.Type);

            Assert.Equal(EdmPrimitiveTypeKind.DateTimeOffset, temporalType.Kind);
            Assert.True(temporalType.IsNullable);
            Assert.Equal(10, temporalType.Precision.Value);

            parameter = function.Parameters.First(c => c.Name == "after");
            Assert.False(parameter.IsOptional);
            Assert.Null(parameter.DefaultValue);
            temporalType = Assert.IsType <CsdlTemporalTypeReference>(parameter.Type);
            Assert.Equal(EdmPrimitiveTypeKind.DateTimeOffset, temporalType.Kind);
            Assert.False(temporalType.IsNullable);
            Assert.Equal(9, temporalType.Precision.Value);

            // ReturnType
            Assert.NotNull(function.Return);
            CsdlExpressionTypeReference expTypeRef = Assert.IsType <CsdlExpressionTypeReference>(operation.Return.ReturnType);

            Assert.True(expTypeRef.IsNullable);

            CsdlNamedTypeReference namedType = Assert.IsType <CsdlNamedTypeReference>(Assert.IsType <CsdlCollectionType>(expTypeRef.TypeExpression).ElementType);

            Assert.True(namedType.IsNullable); // derived from collection
            Assert.Equal("Edm.EntityType", namedType.FullName);
        }