public void CanDealWithNestedNamespaces()
        {
            var builder = new TsModelBuilder();
            builder.Add<Person>();
            builder.Add<Drink>();

            var generator = new TsGenerator();
            generator.SetModuleNameFormatter(_ => "custom");//everything should go into the 'custom' module
            var model = builder.Build();
            var result = generator.Generate(model);

            var expectedOutput = @"
            declare module custom {
            interface Person {
            WhiteRussian: custom.Drink;
            AllDrinks: custom.Drink[];
            }
            }
            declare module custom {
            interface Drink {
            }
            }
            ";

            Assert.Equal(expectedOutput, result);
        }
예제 #2
0
        public void WhenSortOrderIsNotSpecified_Namespace1IsFirst()
        {
            var builder = new TsModelBuilder();

            builder.Add <DifferentNamespaces_Class3>();
            builder.Add <DifferentNamespaces_Class2>();
            builder.Add <DifferentNamespaces_Class1>();

            var model = builder.Build();

            var target = new TsGenerator();
            var script = target.Generate(model);

            Assert.True(script.IndexOf("TypeLitePlus.Tests.NetCore.TestModels.Namespace2") > script.IndexOf("TypeLitePlus.Tests.NetCore.TestModels.Namespace1"));
        }
        public void WhenAddEnum_EnumIsAddedToModel()
        {
            var target = new TsModelBuilder();
            target.Add(typeof(CustomerKind));

            Assert.Single(target.Enums.Values.Where(o => o.Type == typeof(CustomerKind)));
        }
예제 #4
0
        public void WhenAdd_AllClassesWithTsClassAttributeAreAdded()
        {
            var target = new TsModelBuilder();

            target.Add(typeof(Product).Assembly);

            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Product)));
        }
예제 #5
0
        public void WhenAdd_ClassIsAddedToModel()
        {
            var target = new TsModelBuilder();

            target.Add(typeof(Address), true);

            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Address)));
        }
예제 #6
0
        public void WhenAddEnum_EnumIsAddedToModel()
        {
            var target = new TsModelBuilder();

            target.Add(typeof(CustomerKind));

            Assert.Single(target.Enums.Values.Where(o => o.Type == typeof(CustomerKind)));
        }
        public void WhenAddAndClassHasBaseClass_BaseClassIsAddedToModel()
        {
            var target = new TsModelBuilder();

            target.Add(typeof(Employee), false);

            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Employee)));
            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Person)));
        }
        public void WhenAddClassWithReferenceAndReferenceIsIEnumerableOfCustomType_CustomTypeIsAddedToModel()
        {
            var target = new TsModelBuilder();

            target.Add<CustomTypeCollectionReference>(true);

            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(CustomTypeCollectionReference)));
            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Person)));
        }
        public void WhenAddAndIncludeReferencesIsTrue_ReferencedClassesAreAddedToModel()
        {
            var target = new TsModelBuilder();

            target.Add(typeof(Person), true);

            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Person)));
            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Address)));
        }
예제 #10
0
        public void WhenAddAndIncludeReferencesIsTrue_ReferencedClassesAreAddedToModel()
        {
            var target = new TsModelBuilder();

            target.Add(typeof(Person), true);

            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Person)));
            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Address)));
        }
예제 #11
0
        static void Main(string[] args)
        {
            var builder = new TsModelBuilder();
            builder.Add<TestObject>();
            var model = builder.Build();
            var target = new TypeLite.AlternateGenerators.TsBackboneModelGenerator();

            target.SetTypeVisibilityFormatter((c, v) => { return true; });
            var script = target.Generate(model, TsGeneratorOutput.Properties | TsGeneratorOutput.Enums);
        }
        public void WhenClassContainsNullableEnumProperty_ExceptionIsNotThrown()
        {
            var builder = new TsModelBuilder();
            builder.Add<Issue24Example>();

            var generator = new TsGenerator();
            var model = builder.Build();

            Assert.DoesNotThrow(() => generator.Generate(model));
        }
        public void WhenClassContainsPropertyOfSystemType_InvalidCastExceptionIsntThrown()
        {
            var builder = new TsModelBuilder();
            builder.Add<Issue15Example>();

            var generator = new TsGenerator();
            var model = builder.Build();

            Assert.DoesNotThrow(() => generator.Generate(model));
        }
예제 #14
0
        public void WhenBuild_ModelWithAddedClassesIsReturned()
        {
            var target = new TsModelBuilder();

            target.Add(typeof(Person), true);

            var model = target.Build();

            Assert.Equal(target.Classes.Values, model.Classes);
        }
        public void WhenPropertyWithDbGeometryTypeIsAnnotedWithTsIgnoreAttribute_GeneratorDoesntCrash()
        {
            var builder = new TsModelBuilder();
            builder.Add<DbGeometryTestClass>();

            var generator = new TsGenerator();
            var model = builder.Build();

            Assert.DoesNotThrow(() => generator.Generate(model));
        }
        public void WhenClassContainsNullableAndNonNullableStruct_StructureIsIncludedInModelOnlyOnce()
        {
            var builder = new TsModelBuilder();
            builder.Add<NullableAndNonNullableContainer>();

            var generator = new TsGenerator();
            var model = builder.Build();

            Assert.Single(model.Classes.Where(o => o.Type == typeof(Structure1)));
        }
        public void WhenClassIsReferencedAndOutputIsSetToConstants_ClassIsntInOutput()
        {
            var builder = new TsModelBuilder();
            builder.Add<Item>();
            var model = builder.Build();
            var target = new TsGenerator();
            var script = target.Generate(model, TsGeneratorOutput.Constants);

            Assert.DoesNotContain("interface Item", script);
        }
        public void WhenModuleIsGeneratedWithEnumsOnlyOption_ModuleDoesntHaveDeclareKeyword()
        {
            var builder = new TsModelBuilder();
            builder.Add<MyTestClass>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model, TsGeneratorOutput.Enums);

            Assert.DoesNotContain("declare", result);
        }
        public void WhenModuleIsGeneratedWithFieldsOnlyOption_ModuleHasDeclareKeyword()
        {
            var builder = new TsModelBuilder();
            builder.Add<MyTestClass>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model, TsGeneratorOutput.Fields);

            Assert.Contains("declare", result);
        }
        public void WhenClassReferencesItself_ClassIsGenerated()
        {
            var builder = new TsModelBuilder();
            builder.Add<GenericWithSelfReference>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model);

            Assert.Contains("Children: TypeLite.Tests.RegressionTests.GenericWithSelfReference[]", result);
        }
        public void WhenModuleDoesntContainsAnyEnums_ItIsntGeneratedWithEnumsOption()
        {
            var builder = new TsModelBuilder();
            builder.Add<MyTestClass>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model, TsGeneratorOutput.Enums);

            Assert.DoesNotContain("MyTestModule", result);
        }
        public void WhenClassContainsNullableEnumProperty_ExceptionIsNotThrown()
        {
            var builder = new TsModelBuilder();

            builder.Add <Issue24Example>();

            var generator = new TsGenerator();
            var model     = builder.Build();

            Assert.DoesNotThrow(() => generator.Generate(model));
        }
예제 #23
0
        static void Main(string[] args)
        {
            var builder = new TsModelBuilder();

            builder.Add <TestObject>();
            var model  = builder.Build();
            var target = new TypeLite.AlternateGenerators.TsBackboneModelGenerator();

            target.SetTypeVisibilityFormatter((c, v) => { return(true); });
            var script = target.Generate(model, TsGeneratorOutput.Properties | TsGeneratorOutput.Enums);
        }
        public void WhenClassIsIgnoredByAttribute_InterfaceForClassIsntGenerated()
        {
            var builder = new TsModelBuilder();
            builder.Add<IgnoreTestBase>();
            var model = builder.Build();

            var target = new TsGenerator();
            var script = target.Generate(model);

            Assert.DoesNotContain("IgnoreTestBase", script);
        }
        public void PropertyIsMarkedOptional_OptionalPropertyIsGenerated()
        {
            var builder = new TsModelBuilder();
            builder.Add<Address>();
            var model = builder.Build();

            var target = new TsGenerator();
            var script = target.Generate(model);

            Assert.Contains("CountryID?: number", script);
        }
        public void WhenAssemblyContainsEnumWithoutClass_EnumIsGeneratedInTheOutput()
        {
            var builder = new TsModelBuilder();
            builder.Add(typeof(TypeLite.Tests.AssemblyWithEnum.TestEnum).Assembly);

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model, TsGeneratorOutput.Enums);

            Assert.Contains("TestEnum", result);
        }
        public void WhenEnumIsGenerated_ItHasExportKeyword()
        {
            var builder = new TsModelBuilder();
            builder.Add<MyTestClass>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model, TsGeneratorOutput.Enums);

            Assert.Contains("export", result);
        }
예제 #28
0
        public void WhenDateTimePropertyIsInModel_DateWithUppercaseDIsGenerated()
        {
            var builder = new TsModelBuilder();
            builder.Add<ModelWithDateTime>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model);

            Assert.Contains("Property: Date", result);
        }
        public void WhenClassIsIgnored_InterfaceForClassIsntGenerated()
        {
            var builder = new TsModelBuilder();
            builder.Add<Address>();
            var model = builder.Build();
            model.Classes.Where(o => o.Name == "Address").Single().IsIgnored = true;

            var target = new TsGenerator();
            var script = target.Generate(model);

            Assert.DoesNotContain("Address", script);
        }
        public void WhenModuleIsGeneratedWithConstantsAndProperties_ThrowsInvalidOperationException()
        {
            var builder = new TsModelBuilder();
            builder.Add<MyTestClass>();

            var generator = new TsGenerator();
            var model = builder.Build();
            Assert.Throws<InvalidOperationException>(() =>
            {
                generator.Generate(model, TsGeneratorOutput.Constants | TsGeneratorOutput.Properties);
            });
        }
        public void WhenEnumTypeAppearsOnlyInCollectionTypeProperty_EnumIsGenerated()
        {
            var builder = new TsModelBuilder();
            builder.Add<AuthenticationResult>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model);

            Assert.True(model.Enums.Count == 1);
            Assert.True(model.Enums.Single().Type == typeof(AuthenticationError));
        }
예제 #32
0
        public void WhenRunVisitor_VisitEnumIsCalledForEnumsOfModel()
        {
            var visitor = new Mock<TsModelVisitor>();
            visitor.Setup(o => o.VisitEnum(It.Is<TsEnum>(c => c.Type == typeof(ContactType)))).Verifiable();

            var builder = new TsModelBuilder();
            builder.Add(typeof(Address), true);

            var target = builder.Build();
            target.RunVisitor(visitor.Object);

            visitor.VerifyAll();
        }
        public void WhenClassHasNullableStructure_StructureIsAddedToModel()
        {
            var builder = new TsModelBuilder();
            builder.Add<NullableStructureContainer>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model);

            Assert.Contains("NullableStructure: TypeLite.Tests.RegressionTests.Structure1;", result);
            Assert.Contains("NullableStructureCollection: TypeLite.Tests.RegressionTests.Structure2[];", result);
            Assert.Contains("NullableInt: number;", result);
        }
예제 #34
0
        public void WhenRunVisitor_VisitClassIsCalledForClassesOfModel()
        {
            var visitor = new Mock<TsModelVisitor>();
            visitor.Setup(o => o.VisitClass(It.Is<TsClass>(c => c.Type == typeof(Person)))).Verifiable();
            visitor.Setup(o => o.VisitClass(It.Is<TsClass>(c => c.Type == typeof(Address)))).Verifiable();

            var builder = new TsModelBuilder();
            builder.Add(typeof(Person), true);

            var target = builder.Build();
            target.RunVisitor(visitor.Object);

            visitor.VerifyAll();
        }
        public void WhenClosedGenericTypeAppearsAsPropertyTypeMultipleTimes_OnlyOneInterfaceGenerated()
        {
            var builder = new TsModelBuilder();
            builder.Add<GenericPropertiesBug>();

            var generator = new TsGenerator();
            var model = builder.Build();

            var result = generator.Generate(model);

            Assert.True(result.IndexOf("interface KeyValuePair") > -1, "KeyValuePair interface missing");
            Assert.True(result.IndexOf("interface KeyValuePair") == result.LastIndexOf("interface KeyValuePair"), "KeyValuePair interface generated too many times");

            Assert.True(result.Contains("Test1: System.Collections.Generic.KeyValuePair"));
            Assert.True(result.Contains("Test2: System.Collections.Generic.KeyValuePair"));
        }
        public void CanUseCustomFormatter()
        {
            var builder = new TsModelBuilder();
            builder.Add<Drink>();

            var generator = new TsGenerator();
            generator.SetModuleNameFormatter(_ => "custom");//everything should go into the 'custom' module
            var model = builder.Build();
            var result = generator.Generate(model);

            var expectedOutput = @"
            declare module custom {
            interface Drink {
            }
            }
            ";

            Assert.Equal(expectedOutput, result);
        }
        public void WhenArrayOfArrayEncountered_ArrayOfArrayTypeScriptTypeGenerated()
        {
            var builder = new TsModelBuilder();
            builder.Add<TestClass>();

            var generator = new TsGenerator();
            var model = builder.Build();
            var result = generator.Generate(model);

            Assert.Contains("MyStringProperty: string;", result);
            Assert.Contains("MyArray: string[];", result);
            Assert.Contains("MyJaggedArray: string[][];", result);
            Assert.Contains("MyVeryJaggedArray: string[][][];", result);
            Assert.Contains("MyIEnumerableOfString: string[];", result);
            Assert.Contains("MyListOfString: string[];", result);

            Assert.Contains("MyListOfStringArrays: string[][];", result);
            Assert.Contains("MyListOfIEnumerableOfString: string[][];", result);
            Assert.Contains("MyListOfListOfStringArray: string[][][];", result);
        }
        public void WhenAdd_AllClassesWithTsClassAttributeAreAdded()
        {
            var target = new TsModelBuilder();
            target.Add(typeof(Product).Assembly);

            Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Product)));
        }