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); }
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))); }
public void WhenAdd_AllClassesWithTsClassAttributeAreAdded() { var target = new TsModelBuilder(); target.Add(typeof(Product).Assembly); Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Product))); }
public void WhenAdd_ClassIsAddedToModel() { var target = new TsModelBuilder(); target.Add(typeof(Address), true); Assert.Single(target.Classes.Values.Where(o => o.Type == typeof(Address))); }
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))); }
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)); }
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)); }
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); }
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)); }
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); }
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); }