public void EscapesReservedKeywords()
        {
            var model = root.AddClass(new CodeClass(root)
            {
                Name      = "break",
                ClassKind = CodeClassKind.Model
            }).First();

            ILanguageRefiner.Refine(new GenerationConfiguration {
                Language = GenerationLanguage.CSharp
            }, root);
            Assert.NotEqual("break", model.Name);
            Assert.Contains("@", model.Name);
        }
 public ShellCodeClass AddClass(string Name, object Position, object Bases, object ImplementedInterfaces,
                                vsCMAccess Access)
 {
     return
         (new ShellCodeClass(
              _namespace.AddClass(Name, Position, Bases, ImplementedInterfaces, Access) as CodeClass2));
 }
示例#3
0
 public CodeMethodWriterTests()
 {
     languageWriter = LanguageWriter.GetLanguageWriter(GenerationLanguage.PHP, DefaultPath, DefaultName);
     stringWriter   = new StringWriter();
     languageWriter.SetTextWriter(stringWriter);
     root              = CodeNamespace.InitRootNamespace();
     root.Name         = "Microsoft\\Graph";
     _codeMethodWriter = new CodeMethodWriter(new PhpConventionService());
     parentClass       = new CodeClass()
     {
         Name = "parentClass"
     };
     root.AddClass(parentClass);
     method = new CodeMethod()
     {
         Name        = MethodName,
         IsAsync     = true,
         Description = "This is a very good method to try all the good things"
     };
     method.ReturnType = new CodeType()
     {
         Name = ReturnTypeName
     };
     _refiner = new PhpRefiner(new GenerationConfiguration {
         Language = GenerationLanguage.PHP
     });
     parentClass.AddMethod(method);
 }
示例#4
0
 public CodeMethodWriterTests()
 {
     writer = LanguageWriter.GetLanguageWriter(GenerationLanguage.Ruby, DefaultPath, DefaultName);
     tw     = new StringWriter();
     writer.SetTextWriter(tw);
     root        = CodeNamespace.InitRootNamespace();
     parentClass = new CodeClass {
         Name = "parentClass"
     };
     root.AddClass(parentClass);
     method = new CodeMethod {
         Name = MethodName,
     };
     method.ReturnType = new CodeType {
         Name = ReturnTypeName
     };
     voidMethod = new CodeMethod {
         Name = MethodName,
     };
     voidMethod.ReturnType = new CodeType {
         Name = "void"
     };
     parentClass.AddMethod(voidMethod);
     parentClass.AddMethod(method);
 }
    public void AddsExceptionInheritanceOnErrorClasses()
    {
        var model = root.AddClass(new CodeClass {
            Name = "somemodel",
            Kind = CodeClassKind.Model,
            IsErrorDefinition = true,
        }).First();

        ILanguageRefiner.Refine(new GenerationConfiguration {
            Language = GenerationLanguage.CSharp
        }, root);

        var declaration = model.StartBlock as ClassDeclaration;

        Assert.Contains("ApiException", declaration.Usings.Select(x => x.Name));
        Assert.Equal("ApiException", declaration.Inherits.Name);
    }
        public void DoesNotKeepCancellationParametersInRequestExecutors()
        {
            var model = root.AddClass(new CodeClass
            {
                Name = "model",
                Kind = CodeClassKind.RequestBuilder
            }).First();
            var method = model.AddMethod(new CodeMethod
            {
                Name       = "getMethod",
                Kind       = CodeMethodKind.RequestExecutor,
                ReturnType = new CodeType
                {
                    Name = "string"
                }
            }).First();
            var cancellationParam = new CodeParameter
            {
                Name        = "cancelletionToken",
                Optional    = true,
                Kind        = CodeParameterKind.Cancellation,
                Description = "Cancellation token to use when cancelling requests",
                Type        = new CodeType {
                    Name = "CancelletionToken", IsExternal = true
                },
            };

            method.AddParameter(cancellationParam);
            ILanguageRefiner.Refine(new GenerationConfiguration {
                Language = GenerationLanguage.Ruby
            }, root);                                                                                          //using CSharp so the cancelletionToken doesn't get removed
            Assert.False(method.Parameters.Any());
            Assert.DoesNotContain(cancellationParam, method.Parameters);
        }
示例#7
0
 protected override object NewClass(NewCodeElementItemParams newItemParams, string path)
 {
     return(_namespace.AddClass(path,
                                newItemParams.Position,
                                newItemParams.Bases.ToCSVDTEParameter(),
                                newItemParams.ImplementedInterfaces.ToCSVDTEParameter(),
                                newItemParams.AccessKind
                                ));
 }
示例#8
0
 public TypeScriptLanguageRefinerTests()
 {
     root        = CodeNamespace.InitRootNamespace();
     graphNS     = root.AddNamespace("graph");
     parentClass = new () {
         Name = "parentClass"
     };
     graphNS.AddClass(parentClass);
 }
示例#9
0
        public void AddsDefaultImports()
        {
            var model = root.AddClass(new CodeClass(root)
            {
                Name      = "model",
                ClassKind = CodeClassKind.Model
            }).First();
            var requestBuilder = root.AddClass(new CodeClass(root)
            {
                Name      = "rb",
                ClassKind = CodeClassKind.RequestBuilder,
            }).First();

            ILanguageRefiner.Refine(new GenerationConfiguration {
                Language = GenerationLanguage.Ruby
            }, root);
            Assert.NotEmpty(model.StartBlock.Usings);
            Assert.NotEmpty(requestBuilder.StartBlock.Usings);
        }
示例#10
0
    public void WritesModelFactoryBody()
    {
        var parentModel = root.AddClass(new CodeClass {
            Name = "parentModel",
            Kind = CodeClassKind.Model,
        }).First();
        var childModel = root.AddClass(new CodeClass {
            Name = "childModel",
            Kind = CodeClassKind.Model,
        }).First();

        (childModel.StartBlock as ClassDeclaration).Inherits = new CodeType {
            Name           = "parentModel",
            TypeDefinition = parentModel,
        };
        var factoryMethod = parentModel.AddMethod(new CodeMethod {
            Name       = "factory",
            Kind       = CodeMethodKind.Factory,
            ReturnType = new CodeType {
                Name           = "parentModel",
                TypeDefinition = parentModel,
            },
            IsStatic = true,
        }).First();

        factoryMethod.AddDiscriminatorMapping("ns.childmodel", new CodeType {
            Name           = "childModel",
            TypeDefinition = childModel,
        });
        factoryMethod.DiscriminatorPropertyName = "@odata.type";
        factoryMethod.AddParameter(new CodeParameter {
            Name = "parseNode",
            Kind = CodeParameterKind.ParseNode,
            Type = new CodeType {
                Name           = "ParseNode",
                TypeDefinition = new CodeClass {
                    Name = "ParseNode",
                },
                IsExternal = true,
            },
            Optional = false,
        });
        var factoryFunction = root.AddFunction(new CodeFunction(factoryMethod)).First();

        writer.Write(factoryFunction);
        var result = tw.ToString();

        Assert.Contains("const mappingValueNode = parseNode.getChildNode(\"@odata.type\")", result);
        Assert.Contains("if (mappingValueNode) {", result);
        Assert.Contains("const mappingValue = mappingValueNode.getStringValue()", result);
        Assert.Contains("if (mappingValue) {", result);
        Assert.Contains("switch (mappingValue) {", result);
        Assert.Contains("case \"ns.childmodel\":", result);
        Assert.Contains("return new ChildModel();", result);
        Assert.Contains("return new ParentModel();", result);
        AssertExtensions.CurlyBracesAreClosed(result, 1);
    }
示例#11
0
        private static CodeClass GetParentClassInStaticContext()
        {
            CodeClass parent = new CodeClass()
            {
                Name = "parent"
            };
            CodeNamespace rootNamespace = CodeNamespace.InitRootNamespace();

            rootNamespace.AddClass(parent);
            return(parent);
        }
 public CodeClassDeclarationWriterTests()
 {
     codeElementWriter = new CodeClassDeclarationWriter(new GoConventionService());
     writer            = LanguageWriter.GetLanguageWriter(GenerationLanguage.Go, DefaultPath, DefaultName);
     tw = new StringWriter();
     writer.SetTextWriter(tw);
     root        = CodeNamespace.InitRootNamespace();
     parentClass = new () {
         Name = "parentClass"
     };
     root.AddClass(parentClass);
 }
示例#13
0
        /// <summary>
        /// Adds a class to the <see cref="CodeNamespace"/> and supports adding a partial class.
        /// </summary>
        /// <param name="codeNamespace"><see cref="CodeNamespace"/> instance.</param>
        /// <param name="name">Name of the class.</param>
        /// <param name="baseName">Name of the base class. Null indicates no base class.</param>
        /// <param name="access">Class access.</param>
        /// <param name="classKind">Class kind.</param>
        /// <returns><see cref="CodeClass"/> instance.</returns>
        internal static CodeClass AddClassWithPartialSupport(this CodeNamespace codeNamespace, string name, string baseName,
                                                             vsCMAccess access, vsCMClassKind classKind)
        {
            // Workaround to support existing partial class, set name after.
            CodeClass codeClass = codeNamespace.AddClass(Resources.TempClassName, AppConstants.PLACE_AT_THE_END, baseName, null, access);

            (codeClass as CodeClass2).ClassKind = classKind;

            codeClass.Name = name;

            return(codeClass);
        }
示例#14
0
 public CodePropertyWriterTests()
 {
     stringWriter   = new StringWriter();
     languageWriter = LanguageWriter.GetLanguageWriter(GenerationLanguage.PHP, DefaultPath, DefaultName);
     languageWriter.SetTextWriter(stringWriter);
     parentClass = new CodeClass()
     {
         Name = "ParentClass", Description = "This is an amazing class", Kind = CodeClassKind.Model
     };
     root.AddClass(parentClass);
     _refiner       = new PhpRefiner(new() { Language = GenerationLanguage.PHP });
     propertyWriter = new CodePropertyWriter(new PhpConventionService());
 }
示例#15
0
    public void AddsQueryParameterMapperMethod()
    {
        var model = graphNS.AddClass(new CodeClass {
            Name = "somemodel",
            Kind = CodeClassKind.QueryParameters,
        }).First();

        model.AddProperty(new CodeProperty {
            Name = "Select",
            SerializationName = "%24select",
            Type = new CodeType {
                Name = "string"
            },
        });

        Assert.Empty(model.Methods);

        ILanguageRefiner.Refine(new GenerationConfiguration {
            Language = GenerationLanguage.TypeScript
        }, graphNS);
        Assert.Single(model.Methods.Where(x => x.IsOfKind(CodeMethodKind.QueryParametersMapper)));
    }
示例#16
0
 /// <summary>
 /// Finds the or create class element.
 /// </summary>
 /// <param name="cn">The cn.</param>
 /// <param name="name">The name.</param>
 /// <returns></returns>
 public static CodeClass2 FindOrCreateClassElement(CodeNamespace cn, string name)
 {
     foreach (CodeElement ce in cn.Members)
     {
         if (ce is CodeClass2 && ce.Name == name)
         {
             return((CodeClass2)ce);
         }
     }
     return
         ((CodeClass2)
          cn.AddClass(name, 0 /* au debut */, null /*classes de bases*/, null /*interfaces*/,
                      vsCMAccess.vsCMAccessPublic));
 }
示例#17
0
    public CodeMethodWriterTests()
    {
        writer = LanguageWriter.GetLanguageWriter(GenerationLanguage.CSharp, DefaultPath, DefaultName);
        tw     = new StringWriter();
        writer.SetTextWriter(tw);
        root        = CodeNamespace.InitRootNamespace();
        parentClass = new CodeClass {
            Name = "parentClass"
        };
        root.AddClass(parentClass);
        method = new CodeMethod {
            Name = MethodName,
        };
        var model = root.AddClass(new CodeClass {
            Name = ReturnTypeName,
            Kind = CodeClassKind.Model
        }).First();

        method.ReturnType = new CodeType {
            Name           = ReturnTypeName,
            TypeDefinition = model,
        };
        parentClass.AddMethod(method);
    }
示例#18
0
        public void ReplacesRequestBuilderPropertiesByMethods()
        {
            var model = root.AddClass(new CodeClass()
            {
                Name = "userRequestBuilder",
                Kind = CodeClassKind.RequestBuilder
            }).First();

            var requestBuilder = model.AddProperty(new CodeProperty()
            {
                Name = "breaks",
                Kind = CodePropertyKind.RequestBuilder,
                Type = new CodeType()
                {
                    Name = "string"
                }
            }).First();

            ILanguageRefiner.Refine(new GenerationConfiguration {
                Language = GenerationLanguage.PHP
            }, root);
            Assert.Equal("breaks", requestBuilder.Name);
            Assert.Equal("userRequestBuilder", model.Name);
        }
示例#19
0
    public void AddsUsingsForCommandTypesUsedInCommandBuilder()
    {
        var requestBuilder = root.AddClass(new CodeClass {
            Name = "somerequestbuilder",
            Kind = CodeClassKind.RequestBuilder,
        }).First();
        var subNS          = root.AddNamespace($"{root.Name}.subns"); // otherwise the import gets trimmed
        var commandBuilder = requestBuilder.AddMethod(new CodeMethod {
            Name       = "GetCommand",
            Kind       = CodeMethodKind.CommandBuilder,
            ReturnType = new CodeType {
                Name       = "Command",
                IsExternal = true
            }
        }).First();

        ILanguageRefiner.Refine(new GenerationConfiguration {
            Language = GenerationLanguage.Shell
        }, root);

        var declaration = requestBuilder.StartBlock as ClassDeclaration;

        Assert.Contains("System.CommandLine", declaration.Usings.Select(x => x.Declaration?.Name));
    }
示例#20
0
    private void AddRequestBodyParameters(bool useComplexTypeForBody = false)
    {
        var stringType = new CodeType {
            Name = "string",
        };
        var requestConfigClass = parentClass.AddInnerClass(new CodeClass {
            Name = "RequestConfig",
            Kind = CodeClassKind.RequestConfiguration,
        }).First();

        requestConfigClass.AddProperty(new() {
            Name = "h",
            Kind = CodePropertyKind.Headers,
            Type = stringType,
        },
                                       new () {
            Name = "q",
            Kind = CodePropertyKind.QueryParameters,
            Type = stringType,
        },
                                       new () {
            Name = "o",
            Kind = CodePropertyKind.Options,
            Type = stringType,
        });
        method.AddParameter(new CodeParameter {
            Name = "b",
            Kind = CodeParameterKind.RequestBody,
            Type = useComplexTypeForBody ? new CodeType {
                Name           = "SomeComplexTypeForRequestBody",
                TypeDefinition = root.AddClass(new CodeClass {
                    Name = "SomeComplexTypeForRequestBody",
                    Kind = CodeClassKind.Model,
                }).First(),
            } : stringType,
        });
        method.AddParameter(new CodeParameter {
            Name = "c",
            Kind = CodeParameterKind.RequestConfiguration,
            Type = new CodeType {
                Name           = "RequestConfig",
                TypeDefinition = requestConfigClass,
                ActionOf       = true,
            },
            Optional = true,
        });
        method.AddParameter(new CodeParameter {
            Name = "r",
            Kind = CodeParameterKind.ResponseHandler,
            Type = stringType,
        });
    }
示例#21
0
        public void FixInheritedEntityType()
        {
            var model = root.AddClass(new CodeClass {
                Name = "model",
                Kind = CodeClassKind.Model
            }).First();
            var entity = graphNS.AddClass(new CodeClass {
                Name = "entity",
                Kind = CodeClassKind.Model
            }).First();
            var declaration = model.StartBlock as ClassDeclaration;

            declaration.Inherits = new (){
                Name = "entity"
            };
            ILanguageRefiner.Refine(new GenerationConfiguration {
                Language = GenerationLanguage.Ruby, ClientNamespaceName = graphNS.Name
            }, root);
            Assert.Equal("Graph::Entity", declaration.Inherits.Name);
        }
        public void ReplacesImportsSubNamespace()
        {
            var rootNS = parentClass.Parent as CodeNamespace;

            rootNS.RemoveChildElement(parentClass);
            graphNS.AddClass(parentClass);
            var declaration     = parentClass.StartBlock as CodeClass.Declaration;
            var subNS           = graphNS.AddNamespace($"{graphNS.Name}.messages");
            var messageClassDef = new CodeClass(subNS)
            {
                Name = "Message",
            };

            declaration.Usings.Add(new (parentClass) {
                Name        = "graph",
                Declaration = new(parentClass) {
                    Name           = "Message",
                    TypeDefinition = messageClassDef,
                }
            });
示例#23
0
        /// <summary>
        /// Get the specified class from the given namespace. Creates new class if no exists.
        /// </summary>
        /// <param name="p_fcm"></param>
        /// <param name="p_testingNameSpace"></param>
        /// <param name="p_className"></param>
        /// <returns></returns>
        private static CodeClass2 GetClass(FileCodeModel2 p_fcm, CodeNamespace p_testingNameSpace, string p_className)
        {
            CodeClass2 securedClass = null;

            foreach (CodeElement2 codeElement in p_fcm.CodeElements)
            {
                securedClass = FindClassRecursive(codeElement, p_className);
                if (securedClass != null)
                {
                    break;
                }
            }

            if (securedClass == null)
            {
                // Add a class to the namespace.
                securedClass = (CodeClass2)p_testingNameSpace.AddClass(p_className, -1, null, null, vsCMAccess.vsCMAccessPublic);
                securedClass.DataTypeKind = vsCMDataTypeKind.vsCMDataTypeKindPartial;
                securedClass.AddAttribute("TestClass", string.Empty);
            }
            return(securedClass);
        }
        // add a class to the given namespace
        private void AddClassToNamespace(CodeNamespace ns)
        {
            // add a class
            CodeClass chess = (CodeClass)ns.AddClass("Chess", -1, null, null, vsCMAccess.vsCMAccessPublic);

            // add a function with a parameter and a comment
            CodeFunction move = (CodeFunction)chess.AddFunction("Move", vsCMFunction.vsCMFunctionFunction, "int", -1, vsCMAccess.vsCMAccessPublic, null);

            move.AddParameter("IsOK", "bool", -1);
            move.Comment = "This is the move function";

            // add some text to the body of the function
            EditPoint editPoint = (EditPoint)move.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint();

            editPoint.Indent(null, 0);
            editPoint.Insert("int a = 1;");
            editPoint.Insert(Environment.NewLine);
            editPoint.Indent(null, 3);
            editPoint.Insert("int b = 3;");
            editPoint.Insert(Environment.NewLine);
            editPoint.Indent(null, 3);
            editPoint.Insert("return a + b; //");
        }
示例#25
0
        public void EscapesReservedKeywordsInInternalDeclaration()
        {
            var model = root.AddClass(new CodeClass(root)
            {
                Name      = "break",
                ClassKind = CodeClassKind.Model
            }).First();
            var nUsing = new CodeUsing(model)
            {
                Name = "some.ns",
            };

            nUsing.Declaration = new CodeType(nUsing)
            {
                Name       = "break",
                IsExternal = false,
            };
            model.AddUsing(nUsing);
            ILanguageRefiner.Refine(new GenerationConfiguration {
                Language = GenerationLanguage.Java
            }, root);
            Assert.NotEqual("break", nUsing.Declaration.Name);
            Assert.Contains("escaped", nUsing.Declaration.Name);
        }
示例#26
0
    private void AddSerializationProperties()
    {
        var addData = parentClass.AddProperty(new CodeProperty {
            Name = "additionalData",
            Kind = CodePropertyKind.AdditionalData,
        }).First();

        addData.Type = new CodeType {
            Name = "string"
        };
        var dummyProp = parentClass.AddProperty(new CodeProperty {
            Name = "dummyProp",
        }).First();

        dummyProp.Type = new CodeType {
            Name = "string"
        };
        var dummyCollectionProp = parentClass.AddProperty(new CodeProperty {
            Name = "dummyColl",
        }).First();

        dummyCollectionProp.Type = new CodeType {
            Name           = "string",
            CollectionKind = CodeTypeBase.CodeTypeCollectionKind.Array,
        };
        var dummyComplexCollection = parentClass.AddProperty(new CodeProperty {
            Name = "dummyComplexColl"
        }).First();
        var complexTypeClass = root.AddClass(new CodeClass
        {
            Name = "SomeComplexType"
        }).First();

        dummyComplexCollection.Type = new CodeType {
            Name           = "Complex",
            CollectionKind = CodeTypeBase.CodeTypeCollectionKind.Array,
            TypeDefinition = complexTypeClass
        };
        var dummyEnumProp = parentClass.AddProperty(new CodeProperty {
            Name = "dummyEnumCollection",
        }).First();
        var enumDefinition = root.AddEnum(new CodeEnum
        {
            Name = "EnumType"
        }).First();

        dummyEnumProp.Type = new CodeType {
            Name           = "SomeEnum",
            TypeDefinition = enumDefinition
        };
        parentClass.AddProperty(new CodeProperty {
            Name = "definedInParent",
            Type = new CodeType {
                Name = "string"
            },
            OriginalPropertyFromBaseType = new CodeProperty {
                Name = "definedInParent",
                Type = new CodeType {
                    Name = "string"
                }
            }
        });
    }
示例#27
0
    public void ReplacesModelsByInterfaces()
    {
        var model = root.AddClass(new CodeClass {
            Name = "somemodel",
            Kind = CodeClassKind.Model,
        }).First();
        var requestBuilder = root.AddClass(new CodeClass {
            Name = "somerequestbuilder",
            Kind = CodeClassKind.RequestBuilder,
        }).First();

        var executorMethod = requestBuilder.AddMethod(new CodeMethod {
            Name       = "Execute",
            Kind       = CodeMethodKind.RequestExecutor,
            ReturnType = new CodeType {
                Name           = model.Name,
                TypeDefinition = model,
            },
        }).First();
        var executorParameter = new CodeParameter {
            Name = "requestBody",
            Kind = CodeParameterKind.RequestBody,
            Type = new CodeType {
                Name           = model.Name,
                TypeDefinition = model,
            },
        };

        executorMethod.AddParameter(executorParameter);
        var property = model.AddProperty(new CodeProperty {
            Name = "someProp",
            Kind = CodePropertyKind.Custom,
            Type = new CodeType {
                Name           = model.Name,
                TypeDefinition = model,
            },
        }).First();

        Assert.Empty(root.GetChildElements(true).OfType <CodeInterface>());
        ILanguageRefiner.Refine(new GenerationConfiguration {
            Language = GenerationLanguage.Go
        }, root);
        Assert.Single(root.GetChildElements(true).OfType <CodeInterface>());
        var inter = root.GetChildElements(true).OfType <CodeInterface>().First();

        Assert.NotEqual(model.Name, inter.Name);
        var propertyType = property.Type as CodeType;

        Assert.NotNull(propertyType);
        Assert.Equal(inter, propertyType.TypeDefinition);
        var executorParameterType = executorParameter.Type as CodeType;

        Assert.NotNull(executorParameterType);
        Assert.Equal(inter, executorParameterType.TypeDefinition);
        var executorMethodReturnType = executorMethod.ReturnType as CodeType;

        Assert.NotNull(executorMethodReturnType);
        Assert.Equal(inter, executorMethodReturnType.TypeDefinition);
    }
示例#28
0
        public void WriteRequestExecutor()
        {
            CodeProperty[] properties =
            {
                new CodeProperty {
                    Kind = CodePropertyKind.RequestAdapter, Name = "requestAdapter"
                },
                new CodeProperty {
                    Kind = CodePropertyKind.UrlTemplate, Name = "urlTemplate"
                },
                new CodeProperty {
                    Kind = CodePropertyKind.PathParameters, Name = "pathParameters"
                },
            };
            parentClass.AddProperty(properties);
            var codeMethod = new CodeMethod()
            {
                Name       = "post",
                HttpMethod = HttpMethod.Post,
                ReturnType = new CodeType()
                {
                    IsExternal = true,
                    Name       = "StreamInterface"
                },
                Description = "This will send a POST request",
                Kind        = CodeMethodKind.RequestExecutor
            };

            codeMethod.AddParameter(new CodeParameter
            {
                Name     = "ResponseHandler",
                Kind     = CodeParameterKind.ResponseHandler,
                Optional = true,
                Type     = new CodeType
                {
                    Name       = "ResponseHandler",
                    IsNullable = true
                }
            });
            var codeMethodRequestGenerator = new CodeMethod()
            {
                Kind       = CodeMethodKind.RequestGenerator,
                HttpMethod = HttpMethod.Post,
                Name       = "createPostRequestInformation",
                ReturnType = new CodeType()
                {
                    Name = "RequestInformation"
                }
            };

            parentClass.AddMethod(codeMethod);
            parentClass.AddMethod(codeMethodRequestGenerator);
            var error4XX = root.AddClass(new CodeClass {
                Name = "Error4XX",
            }).First();
            var error5XX = root.AddClass(new CodeClass {
                Name = "Error5XX",
            }).First();
            var error401 = root.AddClass(new CodeClass {
                Name = "Error401",
            }).First();

            codeMethod.AddErrorMapping("4XX", new CodeType {
                Name = "Error4XX", TypeDefinition = error4XX
            });
            codeMethod.AddErrorMapping("5XX", new CodeType {
                Name = "Error5XX", TypeDefinition = error5XX
            });
            codeMethod.AddErrorMapping("403", new CodeType {
                Name = "Error403", TypeDefinition = error401
            });
            _codeMethodWriter.WriteCodeElement(codeMethod, languageWriter);
            var result = stringWriter.ToString();

            Assert.Contains("Promise", result);
            Assert.Contains("$requestInfo = $this->createPostRequestInformation();", result);
            Assert.Contains("RejectedPromise", result);
            Assert.Contains("catch(Exception $ex)", result);
            Assert.Contains("'403' => array(Error403::class, 'createFromDiscriminatorValue')", result);
            Assert.Contains("return $this->requestAdapter->sendPrimitiveAsync($requestInfo, StreamInterface::class, $responseHandler, $errorMappings);", result);
        }
示例#29
0
    public void WritesExecutableCommandForPagedGetRequestModel()
    {
        method.Kind        = CodeMethodKind.CommandBuilder;
        method.Description = "Test description";
        method.SimpleName  = "User";
        method.HttpMethod  = HttpMethod.Get;
        var userClass = root.AddClass(new CodeClass
        {
            Name = "User",
            Kind = CodeClassKind.Model
        }).First();
        var stringType = new CodeType
        {
            Name           = "user",
            TypeDefinition = userClass,
        };
        var generatorMethod = new CodeMethod
        {
            Kind       = CodeMethodKind.RequestGenerator,
            Name       = "CreateGetRequestInformation",
            HttpMethod = method.HttpMethod
        };

        method.OriginalMethod = new CodeMethod
        {
            Kind              = CodeMethodKind.RequestExecutor,
            HttpMethod        = method.HttpMethod,
            ReturnType        = stringType,
            Parent            = method.Parent,
            PagingInformation = new()
            {
                NextLinkName = "nextLink",
                ItemName     = "item"
            },
        };
        var codeClass = method.Parent as CodeClass;

        codeClass.AddMethod(generatorMethod);

        AddRequestProperties();
        AddRequestBodyParameters(method.OriginalMethod);
        AddPathQueryAndHeaderParameters(generatorMethod);

        writer.Write(method);
        var result = tw.ToString();

        Assert.Contains("var command = new Command(\"user\");", result);
        Assert.Contains("command.Description = \"Test description\";", result);
        Assert.Contains("var qOption = new Option<string>(\"-q\", getDefaultValue: ()=> \"test\", description: \"The q option\")", result);
        Assert.Contains("qOption.IsRequired = false;", result);
        Assert.Contains("var jsonNoIndentOption = new Option<bool>(\"--json-no-indent\", r => {", result);
        Assert.Contains("var allOption = new Option<bool>(\"--all\")", result);
        Assert.Contains("command.AddOption(qOption);", result);
        Assert.Contains("command.AddOption(jsonNoIndentOption);", result);
        Assert.Contains("command.AddOption(outputOption);", result);
        Assert.Contains("command.AddOption(allOption);", result);
        Assert.Contains("command.SetHandler(async (invocationContext) => {", result);
        Assert.Contains("var q = invocationContext.ParseResult.GetValueForOption(qOption);", result);
        Assert.Contains("var all = invocationContext.ParseResult.GetValueForOption(allOption)", result);
        Assert.Contains("var requestInfo = CreateGetRequestInformation", result);
        Assert.Contains("requestInfo.PathParameters.Add(\"test%2Dpath\", testPath);", result);
        Assert.Contains("var pagingData = new PageLinkData(requestInfo, null, itemName: \"item\", nextLinkName: \"nextLink\");", result);
        Assert.Contains("var pageResponse = await pagingService.GetPagedDataAsync((info, handler, token) => RequestAdapter.SendNoContentAsync(info, cancellationToken: token, responseHandler: handler), pagingData, all, cancellationToken);", result);
        Assert.Contains("formatterOptions = output.GetOutputFormatterOptions(new FormatterOptionsModel(!jsonNoIndent));", result);
        Assert.Contains("IOutputFormatter? formatter = null;", result);
        Assert.Contains("if (pageResponse?.StatusCode >= 200 && pageResponse?.StatusCode < 300) {", result);
        Assert.Contains("formatter = outputFormatterFactory.GetFormatter(output);", result);
        Assert.Contains("response = await outputFilter?.FilterOutputAsync(response, query, cancellationToken)", result);
        Assert.Contains("formatter = outputFormatterFactory.GetFormatter(FormatterType.TEXT);", result);
        Assert.Contains("await formatter.WriteOutputAsync(response, formatterOptions, cancellationToken);", result);
        Assert.Contains("});", result);
        Assert.Contains("return command;", result);
    }