예제 #1
0
        public void WhenModeIsClasses_InterfacesArentGenerated()
        {
            var builder = new TsModelBuilder();

            builder.Add <Employee>();
            builder.Add <User>();
            var model = builder.Build();

            var target = new TsGenerator
            {
                Mode = TsGenerationModes.Classes
            };
            var script = target.Generate(model);

            var classCount = Regex.Matches(script, Regex.Escape("class")).Count;

            Assert.True(classCount > 0, script);

            var moduleCount = Regex.Matches(script, Regex.Escape("module")).Count;

            Assert.True(moduleCount > 0, script);

            var interfaceCount = Regex.Matches(script, Regex.Escape("interface")).Count;

            Assert.True(interfaceCount == 0, script);

            var namespaceCount = Regex.Matches(script, Regex.Escape("namespace")).Count;

            Assert.True(namespaceCount == 0, script);
        }
예제 #2
0
        public void WhenGenerate_OutputIsFormated()
        {
            var builder = new TsModelBuilder();

            builder.Add <Address>();
            var model = builder.Build();

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

            using (var reader = new StringReader(script))
            {
                var line = string.Empty;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("interface Address {"))
                    {
                        Assert.StartsWith("\t", line);
                    }
                    if (line.Contains("ID: Guid"))
                    {
                        Assert.StartsWith("\t\t", line);
                    }
                }
            }
        }
예제 #3
0
        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 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 WhenBuild_NoSelfReferencingEnumerableInfiniteLoop()
        {
            var target = new TsModelBuilder();

            target.Add(typeof(IgnoredSelfReferencingEnumerableWrapper));

            // May cause infinite loop or stack overflow, if not handled correctly.
            target.Build();
        }
예제 #6
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 WhenPropertyWithDbGeometryTypeIsAnnotedWithTsIgnoreAttribute_GeneratorDoesntCrash()
        {
            var builder = new TsModelBuilder();
            builder.Add<DbGeometryTestClass>();

            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 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);
        }
예제 #10
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 WhenClassContainsNullableEnumProperty_ExceptionIsNotThrown()
        {
            var builder = new TsModelBuilder();
            builder.Add<Issue24Example>();

            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)));
        }
예제 #13
0
        public void DoesNotThrowNullReferenceException_WhenEnumPropertyInGenericClass()
        {
            Assert.DoesNotThrow(() => {
                var builder = new TsModelBuilder();
                builder.Add <Bob <object> >();

                var generator = new TsGenerator();
                var model     = builder.Build();
                var result    = generator.Generate(model);
            });
        }
        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);
        }
예제 #15
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 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 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 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 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);
        }
예제 #21
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 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 WhenClassContainsNullableEnumProperty_ExceptionIsNotThrown()
        {
            var builder = new TsModelBuilder();

            builder.Add <Issue24Example>();

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

            Assert.DoesNotThrow(() => generator.Generate(model));
        }
예제 #24
0
        public void WhenClassIsReferencedAndOutputIsSetToEnums_ClassIsntInOutput()
        {
            var builder = new TsModelBuilder();

            builder.Add <Item>();
            var model  = builder.Build();
            var target = new TsGenerator();
            var script = target.Generate(model, TsGeneratorOutput.Enums);

            Assert.DoesNotContain("interface Item", script);
        }
예제 #25
0
        public void WhenClassWithEnumReferenced_FullyQualifiedNameIsUsed()
        {
            var builder = new TsModelBuilder();

            builder.Add <Item>();
            var model  = builder.Build();
            var target = new TsGenerator();
            var script = target.Generate(model);

            Assert.Contains("Type: TypeLitePlus.Tests.NetCore.TestModels.ItemType", script);
        }
예제 #26
0
        public void WhenClassIsReferencedAndOutputIsSetToConstants_EnumIsntInOutput()
        {
            var builder = new TsModelBuilder();

            builder.Add <Item>();
            var model  = builder.Build();
            var target = new TsGenerator();
            var script = target.Generate(model, TsGeneratorOutput.Constants);

            Assert.DoesNotContain("enum ItemType", script);
        }
예제 #27
0
        public void WhenPropertyWithDbGeometryTypeIsAnnotedWithTsIgnoreAttribute_GeneratorDoesntCrash()
        {
            var builder = new TsModelBuilder();

            builder.Add <DbGeometryTestClass>();

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

            Assert.DoesNotThrow(() => generator.Generate(model));
        }
예제 #28
0
        public void WhenEnumIsReferencedAndOutputIsSetToFields_ConstantIsntInOutput()
        {
            var builder = new TsModelBuilder();

            builder.Add <Item>();
            var model  = builder.Build();
            var target = new TsGenerator();
            var script = target.Generate(model, TsGeneratorOutput.Fields);

            Assert.DoesNotContain("MaxItems", script);
        }
예제 #29
0
        public void WhenClassContainsPropertyOfSystemType_InvalidCastExceptionIsntThrown()
        {
            var builder = new TsModelBuilder();

            builder.Add <Issue15Example>();

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

            Assert.DoesNotThrow(() => generator.Generate(model));
        }
예제 #30
0
        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)));
        }
예제 #31
0
        public void WhenClassIsReferenced_FullyQualifiedNameIsUsed()
        {
            var builder = new TsModelBuilder();

            builder.Add <Person>();
            var model  = builder.Build();
            var target = new TsGenerator();
            var script = target.Generate(model);

            Assert.Contains("PrimaryAddress: TypeLitePlus.Tests.NetCore.TestModels.Address", script);
            Assert.Contains("Addresses: TypeLitePlus.Tests.NetCore.TestModels.Address[]", script);
        }
예제 #32
0
        public void WhenBaseClassIsIgnoredByAttribute_InterfaceForClassIsntGenerated()
        {
            var builder = new TsModelBuilder();

            builder.Add <IgnoreTest>();
            var model = builder.Build();

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

            Assert.DoesNotContain("interface IgnoreTestBase", script);
        }
        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));
        }
예제 #34
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);
        }
예제 #35
0
        //
        // GET: /Home/

        public ActionResult Index()
        {
            var builder = new TsModelBuilder();

            builder.Add <Customer>();
            var model = builder.Build();

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

            return(View());
        }
예제 #36
0
        public void WhenInterfaceIsAdded_InterfaceIsInOutput()
        {
            var builder = new TsModelBuilder();

            builder.Add <IShippingService>();
            var model  = builder.Build();
            var target = new TsGenerator();
            var script = target.Generate(model, TsGeneratorOutput.Properties);

            Assert.Contains("IShippingService", script);
            Assert.Contains("Price", script);
        }
예제 #37
0
        public void WhenPropertyHastsIgnoreAttribute_TypeOfIgnoredPropertyIsExcludedFromModel()
        {
            var builder = new TsModelBuilder();

            builder.Add <Issue14Example>();

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

            Assert.DoesNotContain("Person", script);
        }
        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: TypeLitePlus.Tests.NetCore.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 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 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);
        }
예제 #42
0
        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 WhenModuleIsGeneratedWithConstantsOnlyOption_ModuleDoesntHaveDeclareKeyword()
        {
            var builder = new TsModelBuilder();

            builder.Add <MyTestClass>();

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

            Assert.DoesNotContain("declare", 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);
        }
예제 #45
0
        public void WhenClassHasGenericProperty_PropertyTypeIsResolvedToTypeOfGenericArgument()
        {
            var builder = new TsModelBuilder();

            builder.Add <ClassWithGenericArguments <Address> >();

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

            Assert.Contains("Property: T", result);
        }
        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);
        }
예제 #47
0
        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);
        }
예제 #48
0
        public void OrdersPropertiesAndFieldsByName()
        {
            var builder = new TsModelBuilder();

            builder.Add <DifferentNamespaces_Class2>();

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

            var result = generator.Generate(model);

            Assert.True(result.IndexOf("Property1") < result.IndexOf("Property2"), "Didn't order properties");
        }
        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);
        }
예제 #50
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();
        }
예제 #51
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 WhenModuleIsGeneratedWithPropertiesOnlyOption_ModuleHasDeclareKeyword()
        {
            var builder = new TsModelBuilder();
            builder.Add<MyTestClass>();

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

            Assert.Contains("declare", result);
        }
        public void WhenPropertyIsIgnored_PropertyIsExcludedFromInterface()
        {
            var builder = new TsModelBuilder();
            builder.Add<Address>();
            var model = builder.Build();
            model.Classes.Where(o => o.Name == "Address").Single().Properties.Where(p => p.Name == "Street").Single().IsIgnored = true;

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

            Assert.False(script.Contains("Street"));
        }
        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 WhenBuild_ModelWithModulesIsReturned()
        {
            var target = new TsModelBuilder();
            target.Add(typeof(Person), true);

            var model = target.Build();

            var module = model.Modules.Where(m => m.Name == "TypeLite.Tests.TestModels").Single();
            var personClass = model.Classes.Where(o => o.Type == typeof(Person)).Single();

            Assert.Same(personClass.Module, module);
        }
        public void WhenBuild_TypeReferencesInModelAreResolved()
        {
            var target = new TsModelBuilder();
            target.Add(typeof(Person), true);

            var model = target.Build();

            var personClass = model.Classes.Where(o => o.Type == typeof(Person)).Single();
            var addressClass = model.Classes.Where(o => o.Type == typeof(Address)).Single();

            Assert.Same(addressClass, personClass.Properties.Where(p => p.Name == "PrimaryAddress").Single().PropertyType);
            Assert.IsType<TsSystemType>(personClass.Properties.Where(p => p.Name == "Name").Single().PropertyType);
            Assert.IsType<TsCollection>(personClass.Properties.Where(p => p.Name == "Addresses").Single().PropertyType);

            Assert.IsType<TsSystemType>(personClass.Fields.Where(f => f.Name == "PhoneNumber").Single().PropertyType);

            Assert.IsType<TsSystemType>(personClass.Constants.Where(c => c.Name == "MaxAddresses").Single().PropertyType);
        }
        public void WhenBuild_ModulesInModelAreResolved()
        {
            var target = new TsModelBuilder();
            target.Add(typeof(Person));

            var model = target.Build();

            var personClass = model.Classes.Where(o => o.Type == typeof(Person)).Single();
            var addressClass = model.Classes.Where(o => o.Type == typeof(Address)).Single();

            Assert.Same(personClass.Module, addressClass.Module);
        }