public void AddRequiredParametersTest()
        {
            var parameterA = new MockParameter() { Name = "ParamA", IsRequired = false };
            var parameterB = new MockParameter() { Name = "ParamB", IsRequired = true};
            var method = new MockMethod() { Name = "Method", Parameters = new Dictionary<string, IParameter>() };
            method.Parameters.Add("ParamA", parameterA);
            method.Parameters.Add("ParamB", parameterB);
            var resource = new MockResource();
            resource.Methods.Add("Method", method);
            var resourceDecl = new CodeTypeDeclaration();
            var typeProvider = new DefaultObjectTypeProvider("Schema");

            // Confirm that the "service" parameter is added.
            var decorator = new RequestConstructorDecorator(typeProvider);
            CodeConstructor constructor = new CodeConstructor();
            decorator.AddRequestParameters(resourceDecl, method, constructor, false);

            Assert.AreEqual(1, constructor.Parameters.Count);
            Assert.AreEqual("paramB", constructor.Parameters[0].Name);
            Assert.AreEqual(1, constructor.Statements.Count);

            // Check that optional parameters are added when the appropriate flag is set.
            constructor = new CodeConstructor();
            decorator.AddRequestParameters(resourceDecl, method, constructor, true);

            Assert.AreEqual(2, constructor.Parameters.Count);
            Assert.AreEqual("paramB", constructor.Parameters[0].Name);
            Assert.AreEqual("paramA", constructor.Parameters[1].Name);
            Assert.AreEqual(2, constructor.Statements.Count);
        }
        public void DecorateClassTest()
        {
            var method = new MockMethod() { Name = "Method", Parameters = new Dictionary<string, IParameter>() };
            method.Parameters.Add("Param", new MockParameter() { Name = "Param" });
            var resource = new MockResource();
            resource.Methods.Add("Method", method);
            var resourceDecl = new CodeTypeDeclaration();
            var requestDecl = new CodeTypeDeclaration();
            var typeProvider = new DefaultObjectTypeProvider("Schema");

            // Confirm that the decorator has run correctly.
            var decorator = new RequestConstructorDecorator(typeProvider) { CreateOptionalConstructor = true };
            decorator.DecorateClass(resource, method, requestDecl, resourceDecl);
            Assert.AreEqual(2, requestDecl.Members.Count); // 2 Constructors.
            Assert.IsInstanceOf<CodeConstructor>(requestDecl.Members[0]);
            Assert.AreEqual(0, resourceDecl.Members.Count);

            // Test the decorator without optional parameters.
            requestDecl = new CodeTypeDeclaration();
            decorator.CreateOptionalConstructor = false;
            decorator.DecorateClass(resource, method, requestDecl, resourceDecl);
            Assert.AreEqual(1, requestDecl.Members.Count); // 1 Constructor.
            Assert.IsInstanceOf<CodeConstructor>(requestDecl.Members[0]);
            Assert.AreEqual(0, resourceDecl.Members.Count);
        }
        public void AddBodyParameterTest()
        {
            var method = new MockMethod() { Name = "Method", Parameters = new Dictionary<string, IParameter>() };
            var typeProvider = new DefaultObjectTypeProvider("Schema");

            // Confirm that no body parameter is added.
            var decorator = new RequestConstructorDecorator(typeProvider);
            CodeConstructor constructor = new CodeConstructor();
            method.HasBody = false;
            decorator.AddBodyParameter(constructor, method);

            Assert.AreEqual(0, constructor.Parameters.Count);
            Assert.AreEqual(0, constructor.Statements.Count);

            // Confirm that a required body parameter is added.
            method.RequestType = "MySchema";
            method.HasBody = true;
            constructor = new CodeConstructor();
            decorator.AddBodyParameter(constructor, method);

            Assert.AreEqual(1, constructor.Parameters.Count);
            Assert.AreEqual("body", constructor.Parameters[0].Name);
            Assert.AreEqual("Schema.MySchema", constructor.Parameters[0].Type.BaseType);
            Assert.AreEqual(1, constructor.Statements.Count);
        }
예제 #4
0
        /// <summary>
        /// List of all request class decorators
        /// </summary>
        public static IList<IRequestDecorator> GetSchemaAwareCommonRequestDecorators(
          string schemaNamespace, IService service)
        {
            var typeProvider = new DefaultObjectTypeProvider(schemaNamespace);

            return (new List<IRequestDecorator>
                        {
                            new CommonParameterRequestDecorator(service.Parameters),
                            new ParameterPropertyDecorator(),
                        }).AsReadOnly();
        }
예제 #5
0
        /// <summary>
        /// List of all request class decorators
        /// </summary>
        public static IList<IRequestDecorator> GetSchemaAwareRequestDecorators(
          string schemaNamespace, IService service)
        {
            var typeProvider = new DefaultObjectTypeProvider(schemaNamespace);

            return (new List<IRequestDecorator>()
                        {
                            new ServiceRequestInheritanceDecorator(typeProvider),
                            new BodyPropertyDecorator(typeProvider),
                            new RequestConstructorDecorator(typeProvider) { CreateOptionalConstructor = false },
                            new ServiceRequestFieldDecorator(),
                        }).AsReadOnly();
        }
        public void CreateConstructorTest()
        {
            var parameter = new MockParameter() { Name = "Param", IsRequired = true };
            var method = new MockMethod() { Name = "Method", Parameters = new Dictionary<string, IParameter>() };
            method.Parameters.Add("Param", parameter);
            var resource = new MockResource();
            resource.Methods.Add("Method", method);
            var resourceDecl = new CodeTypeDeclaration();
            var typeProvider = new DefaultObjectTypeProvider("Schema");

            // Confirm that the "service" parameter is added.
            var decorator = new RequestConstructorDecorator(typeProvider);
            CodeConstructor constructor = decorator.CreateRequiredConstructor(resourceDecl, method, false);
            Assert.AreEqual(2, constructor.Parameters.Count);
            Assert.AreEqual("service", constructor.Parameters[0].Name);
            Assert.AreEqual(1, constructor.BaseConstructorArgs.Count);
        }
        public void CreateMethodTest()
        {
            const string className = "TestClass";
            var typeProvider = new DefaultObjectTypeProvider("Schema");
            var commentCreator = new DefaultEnglishCommentCreator();
            var generator = new RequestMethodResourceDecorator.ResourceGenerator(
                className, typeProvider, commentCreator);

            // Generate a method.
            var decl = new CodeTypeDeclaration();
            var resource = new MockResource();
            var method = new MockMethod() { Name = "Test", Parameters = new Dictionary<string, IParameter>()};
            method.Parameters.Add(
                "a", new MockParameter() { Name = "a", ParameterType = "string", IsRequired = false });
            method.Parameters.Add(
                "b", new MockParameter() { Name = "b", ParameterType = "string", IsRequired = true });
            CodeMemberMethod generatedMethod = generator.CreateMethod(decl, resource, method, true);

            Assert.AreEqual("Test", generatedMethod.Name);
            Assert.AreEqual(2, generatedMethod.Parameters.Count); // two parameters defined.
            Assert.AreEqual(1, generatedMethod.Statements.Count); // one "new ...Request()" statement.
            Assert.AreEqual("TestRequest", generatedMethod.ReturnType.BaseType);
        }
예제 #8
0
        /// <summary>
        /// Returns a list of all schema aware resource decorators
        /// </summary>
        public static IList<IResourceDecorator> GetSchemaAwareResourceDecorators(string schemaNamespace)
        {
            var typeProvider = new DefaultObjectTypeProvider(schemaNamespace);

            return
                (new List<IResourceDecorator>
                     {
                         new SubresourceClassDecorator(),
                         new EnumResourceDecorator(),
                         new StandardServiceFieldResourceDecorator(),
                         new StandardResourceNameResourceDecorator(),
                         new StandardConstructorResourceDecorator(),
                         new RequestMethodResourceDecorator(typeProvider) { AddOptionalParameters = false },
                     }).AsReadOnly
                    ();
        }
        /// <summary>
        /// List of all upload class decorators
        /// </summary>
        public static IList<IRequestDecorator> GetSchemaAwareUploadDecorators(
          string schemaNamespace, IService service)
        {
            var typeProvider = new DefaultObjectTypeProvider(schemaNamespace);

            return (new List<IRequestDecorator>
                        {
                            new ResumableUploadInheritanceDecorator(typeProvider),
                            new UploadConstructorDecorator(typeProvider),
                        }).AsReadOnly();
        }
 public void ConstructTest()
 {
     var typeProvider = new DefaultObjectTypeProvider("Schema");
     Assert.DoesNotThrow(() => new RequestConstructorDecorator(typeProvider));
 }