public void ShouldHandleReservedPropNames() { var solution = DTETransformer.BuildDteSolution(typeof(ReservedPropModel)); var attributeBuilder = new AttributeInterfaceBuilder(new Settings()); var codeTraverser = new CodeTraverser( solution, new TypeContext()) { Settings = new CodeTraverser.TraverserSettings() { ClassToInterfaceBuilder = attributeBuilder } }; var modules = codeTraverser.GetAllInterfaces(); var interfaces = modules.Single().Interfaces; var modelInterface = interfaces.Single(); var classProp = modelInterface.Fields.SingleOrDefault(m => m.Name == "class"); var readonlyProp = modelInterface.Fields.SingleOrDefault(m => m.Name == "readonly"); var publicProp = modelInterface.Fields.SingleOrDefault(m => m.Name == "public"); Assert.AreEqual(3, modelInterface.Fields.Count); Assert.IsNotNull(classProp); Assert.IsNotNull(readonlyProp); Assert.IsNotNull(publicProp); Assert.IsTrue(publicProp.Optional); }
public void ShouldWorkIfSolutionContainsPartialClasses() { //this may not make much sense, but this is my best guess at mimicking partial classes... //Actually traceing out all the TypeScriptInterfaces in the T4TS.Example solution contains these: // ... //T4TS.Example.Models.PartialModelByEF //T4TS.Example.Models.PartialModelByEF //T4TS.Example.Models.InheritsPartialModelByEF //T4TS.Example.Models.Partial //T4TS.Example.Models.Partial // ... var solution = DTETransformer.BuildDteSolution( typeof(T4TS.Tests.Fixtures.Partial.PartialModel), typeof(T4TS.Tests.Fixtures.Partial.PartialModel), typeof(T4TS.Tests.Fixtures.Partial.InheritsFromPartialModel) ); var attributeBuilder = new AttributeInterfaceBuilder(new Settings()); var codeTraverser = new CodeTraverser( solution, new TypeContext()) { Settings = new CodeTraverser.TraverserSettings() { ClassToInterfaceBuilder = attributeBuilder } }; var allModules = codeTraverser.GetAllInterfaces(); Assert.AreEqual(1, allModules.Count()); // TODO: verify that the interface contains members from both partial classes Assert.AreEqual(2, allModules.First().Interfaces.Count()); }
public void ShouldVisitEachProperty() { var codeClass = DTETransformer.BuildDteClass(typeof(M)); int callCount = 0; var expectedNames = new string[] { "A", "B", "C" }; new ClassTraverser(codeClass, (p) => { Assert.AreEqual(expectedNames[callCount++], p.Name); }); Assert.AreEqual(3, callCount); }
public void ShouldBuildInterfacesFromMarkedClassesOnly() { var solution = DTETransformer.BuildDteSolution( typeof(LocalModel), // has the TypeScriptInterface attribute typeof(ModelFromDifferentProject), // has the TypeScriptInterface attribute typeof(string) // has no TypeScriptInterface attribute ); var codeTraverser = new CodeTraverser(solution, new Settings()); Assert.AreEqual(2, codeTraverser.GetAllInterfaces().Count()); }
public void ShouldVisitEachNamespace() { var proj = DTETransformer.BuildDteProject(new Type[] { typeof(LocalModel), typeof(ModelFromDifferentProject) }, projectName: "proj"); int callCount = 0; var expectedNames = new string[] { "T4TS.Tests.Traversal.Models", "T4TS.Example.Models" }; new ProjectTraverser(proj, (ns) => { Assert.AreEqual(expectedNames[callCount++], ns.Name); }); Assert.AreEqual(2, callCount); }
public void ShouldVisitEachCodeClass() { var project = DTETransformer.BuildDteProject(new Type[] { typeof(M), typeof(N) }, projectName: "NamespaceTraverserTests"); int callCount = 0; var expectedNames = new string[] { "M", "N" }; ProjectItem projectItem; if (TryGetSingle(project.ProjectItems.GetEnumerator(), out projectItem)) { foreach (CodeNamespace ns in projectItem.FileCodeModel.CodeElements) { Traversal.TraverseClassesInNamespace(ns, (c) => { Assert.AreEqual(expectedNames[callCount++], c.Name); }); } } Assert.AreEqual(2, callCount); }
public void ShouldVisitSubProjectItems() { var subProjItem = DTETransformer.BuildDteProjectItem(new Type[] { typeof(ModelFromDifferentProject) }, projectItemName: "subProj"); var moqSubProjectItems = new Mock <ProjectItems>(); moqSubProjectItems.Setup(x => x.GetEnumerator()).Returns(() => new[] { subProjItem }.GetEnumerator()); var proj = DTETransformer.BuildDteProject(new Type[] { typeof(LocalModel) }, projectName: "proj", subProjectItems: moqSubProjectItems.Object); int callCount = 0; var expectedNames = new string[] { "T4TS.Tests.Models", "T4TS.Example.Models" }; T4TS.Traversal.TraverseNamespacesInProject(proj, (ns) => { Assert.AreEqual(expectedNames[callCount++], ns.Name); }); Assert.AreEqual(2, callCount); }