public void Can_Convert_Definition_Of_Models_Only()
        {
            StringBuilder result = new StringBuilder();

            result.AppendLine("/**");
            result.AppendLine(" * Opten.Web.Infrastructure.Test.TypeScript.PersonModel");
            result.AppendLine(" */");
            result.AppendLine("export class IPerson {");
            result.AppendLine("\tName: string;");
            result.AppendLine("\tAge: number;");
            result.AppendLine("\tEnum: MySuperEnum;");
            result.AppendLine("\tAddresses: Array<string>;");
            result.AppendLine("}");
            result.AppendLine();

            TypeScriptModel[] models = new[]
            {
                new TypeScriptModel("MySuperEnum", typeof(MySuperEnum)),
                new TypeScriptModel("IPerson", typeof(PersonModel))
            };

            TypeScriptModelsBuilder builder = new TypeScriptModelsBuilder(
                declarations: models,
                models: models.Where(o => o.Type.IsEnum == false).ToArray());

            Assert.AreEqual(result.ToString(), builder.Build().ToString());
        }
        public void Can_Convert_Definition_Of_Single_Model()
        {
            StringBuilder result = new StringBuilder();

            result.AppendLine("/**");
            result.AppendLine(" * Opten.Web.Infrastructure.Test.TypeScript.PersonModel");
            result.AppendLine(" */");
            result.AppendLine("interface IPerson {");
            result.AppendLine("\tName: string;");
            result.AppendLine("\tAge: number;");
            result.AppendLine("\tEnum: any;");
            result.AppendLine("\tAddresses: Array<string>;");
            result.AppendLine("}");
            result.AppendLine();

            TypeScriptModelsBuilder builder = new TypeScriptModelsBuilder(
                models: new[] {
                new TypeScriptModel("IPerson", typeof(PersonModel))
            },
                settings: new TypeScriptModelsBuilderSettings
            {
                PrefixClass = "interface"
            });

            Assert.AreEqual(result.ToString(), builder.Build().ToString());
        }
        public void Can_Convert_Definition_Of_Enum()
        {
            StringBuilder result = new StringBuilder();

            result.AppendLine("enum MySuperEnum2 {");
            result.AppendLine("\tValue1,");
            result.AppendLine("\tHello");
            result.AppendLine("}");
            result.AppendLine();

            TypeScriptModelsBuilder builder = new TypeScriptModelsBuilder(
                models: new[] {
                new TypeScriptModel("MySuperEnum2", typeof(MySuperEnum), new[] { "Testing" })
            },
                settings: new TypeScriptModelsBuilderSettings
            {
                Comments   = false,
                PrefixEnum = "enum"
            });

            Assert.AreEqual(result.ToString(), builder.Build().ToString());
        }
        public void Can_Convert_Definition_Of_Single_Model_As_Class()
        {
            StringBuilder result = new StringBuilder();

            result.AppendLine("class Person {");
            result.AppendLine("\tName: string;");
            result.AppendLine("\tAge: number;");
            result.AppendLine("\tEnum: any;");
            result.AppendLine("\tAddresses: Array<string>;");
            result.AppendLine("}");
            result.AppendLine();

            TypeScriptModelsBuilder builder = new TypeScriptModelsBuilder(
                models: new[] {
                new TypeScriptModel("Person", typeof(PersonModel))
            },
                settings: new TypeScriptModelsBuilderSettings
            {
                Comments    = false,
                PrefixClass = "class"
            });

            Assert.AreEqual(result.ToString(), builder.Build().ToString());
        }
        public void Can_Convert_Definition_Of_Multiple_Models_With_Array()
        {
            StringBuilder result = new StringBuilder();

            result.AppendLine("/**");
            result.AppendLine(" * Opten.Web.Infrastructure.Test.TypeScript.DoSomethingModel");
            result.AppendLine(" */");
            result.AppendLine("export class DoSomething {");
            result.AppendLine("}");
            result.AppendLine();
            result.AppendLine("/**");
            result.AppendLine(" * Opten.Web.Infrastructure.Test.TypeScript.DictionaryModel");
            result.AppendLine(" */");
            result.AppendLine("export class Dictionary {");
            result.AppendLine("}");
            result.AppendLine();
            result.AppendLine("/**");
            result.AppendLine(" * Opten.Web.Infrastructure.Test.TypeScript.MySuperEnum");
            result.AppendLine(" */");
            result.AppendLine("export enum MySuperEnum {");
            result.AppendLine("\tValue1,");
            result.AppendLine("\tTesting,");
            result.AppendLine("\tHello");
            result.AppendLine("}");
            result.AppendLine();
            result.AppendLine("/**");
            result.AppendLine(" * Opten.Web.Infrastructure.Test.TypeScript.PersonModel");
            result.AppendLine(" */");
            result.AppendLine("export class IPerson {");
            result.AppendLine("\tName: string;");
            result.AppendLine("\tAge: number;");
            result.AppendLine("\tEnum: MySuperEnum;");
            result.AppendLine("\tAddresses: Array<string>;");
            result.AppendLine("}");
            result.AppendLine();
            result.AppendLine("/**");
            result.AppendLine(" * Opten.Web.Infrastructure.Test.TypeScript.Car");
            result.AppendLine(" */");
            result.AppendLine("export class ICar {");
            result.AppendLine("\tisCabriolet?: boolean;");
            result.AppendLine("\tNumberOfWheels: number;");
            result.AppendLine("\tAgesOfPassengers: Array<number>;");
            result.AppendLine("\tNamesOfPassengers: Array<string>;");
            result.AppendLine("\tNamesOfPassengers2: Array<string>;");
            result.AppendLine("\tDriver: IPerson;");
            result.AppendLine("\tpass?: Array<string>;");
            result.AppendLine("\tiAmNotIgnoredAnymore: string;");
            result.AppendLine("\tPassengersDictionary: { [key: string]: boolean };");
            result.AppendLine("\tPassengersDictionary2: { [key: string]: boolean };");
            result.AppendLine("\tEnum: MySuperEnum;");
            result.AppendLine("\tStringEnum: string;");
            result.AppendLine("\tstringEnums: Array<string>;");
            result.AppendLine("\tSomething: DoSomething;");
            result.AppendLine("\tSomethingArray: Array<DoSomething>;");
            result.AppendLine("\tSomethingEnumerable: Array<DoSomething>;");
            result.AppendLine("\tDictionary: Array<Dictionary>;");
            result.AppendLine("}");
            result.AppendLine();

            TypeScriptModelsBuilder builder = new TypeScriptModelsBuilder(new[] {
                new TypeScriptModel("DoSomething", typeof(DoSomethingModel)),
                new TypeScriptModel("Dictionary", typeof(DictionaryModel)),
                new TypeScriptModel("MySuperEnum", typeof(MySuperEnum)),
                new TypeScriptModel("IPerson", typeof(PersonModel)),
                new TypeScriptModel("ICar", typeof(Car))
            });

            Assert.AreEqual(result.ToString(), builder.Build().ToString());
        }