public May <TestsLoadContext> LoadTests(string assemblyPath) { _log.Info("XUnit loading tests..."); var cci = new CciModuleSource(assemblyPath); var visitor = new XUnitTestsVisitor(); var traverser = new CodeTraverser { PreorderVisitor = visitor }; traverser.Traverse(cci.Module.Module); var classes = visitor.Classes.Where(c => c.Children.Count != 0).ToList(); if (classes.Count != 0) { _log.Info("Tests loaded (" + classes.Count + " classes)."); return(new May <TestsLoadContext>(new TestsLoadContext(FrameWorkName, classes))); } else { _log.Info("No tests found."); return(May.NoValue); } }
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 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); }
private List <MethodIdentifier> FindCoveringTests(CciModuleSource module, ICodePartsMatcher targetsMatcher) { _log.Debug("Scanning " + module.Module.Name + " for selected covering tests. "); var visitor = new CoveringTestsVisitor(targetsMatcher); var traverser = new CodeTraverser { PreorderVisitor = visitor }; traverser.Traverse(module.Decompile(module.Module)); _log.Debug("Finished scanning module" + module.Module.Name + ". Found " + visitor.FoundTests.Count + ". Scanned total: " + visitor.ScannedMethods + " methods and " + visitor.ScannedMethodCalls + " method calls."); _log.Debug("Listing found tests: "); foreach (var methodIdentifier in visitor.FoundTests) { _log.Debug("Test: " + methodIdentifier); } if (visitor.IsChoiceError) { throw new TestWasSelectedToMutateException(); } return(visitor.FoundTests.ToList()); }
private string GenerateOutput() { var solution = DTETransformer.BuildDteSolution(this.Types.ToArray()); var generator = new CodeTraverser(solution, this.Settings); var data = generator.GetAllInterfaces().ToList(); return(OutputFormatter.GetOutput(data, this.Settings)); }
private List<TypeScriptModule> GetDataToRenderSubClasses(Settings settings) { var generator = new CodeTraverser( new MockSolution( typeof(TestClass1) ).Object, settings); return generator.GetAllInterfaces().ToList(); }
private string GenerateOutput() { var solution = new MockSolution(Types.ToArray()); var generator = new CodeTraverser(solution.Object, this.Settings); var data = generator.GetAllInterfaces().ToList(); return OutputFormatter.GetOutput(data, this.Settings); }
private string GenerateOutput() { var solution = DTETransformer.BuildDteSolution(this.Types.ToArray()); var generator = new CodeTraverser(solution, this.Settings); var data = generator.GetAllInterfaces().ToList(); return OutputFormatter.GetOutput(data, this.Settings); }
private List <TypeScriptModule> GetDataToRenderSubClasses(Settings settings) { var generator = new CodeTraverser( new MockSolution( typeof(TestClass1) ).Object, settings); return(generator.GetAllInterfaces().ToList()); }
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()); }
private List<TypeScriptModule> GetInheritedGenericDataToRender(Settings settings) { var generator = new CodeTraverser( new MockSolution( /* typeof(SimpleParentDataTest), typeof(SimpleDataTest) */ typeof(EntityObject<Device>), typeof(EntityObjectId<Device>), typeof(Device) ).Object, settings); return generator.GetAllInterfaces().ToList(); }
/// <summary> /// decompile byte code to action objects /// </summary> public ArrayList Decompile(byte[] codeblock) { LabelId = 1; ArrayList actionRec = ReadActions(codeblock); ExplodePushLists(actionRec); // find argument count on stack // e.g. for actions likecallFunction or initArray CodeTraverser trav = new CodeTraverser(actionRec); trav.Traverse(new InvocationExaminer()); return(actionRec); }
private List <TypeScriptModule> GetInheritedGenericDataToRender(Settings settings) { var generator = new CodeTraverser( new MockSolution( /* * typeof(SimpleParentDataTest), * typeof(SimpleDataTest) */ typeof(EntityObject <Device>), typeof(EntityObjectId <Device>), typeof(Device) ).Object, settings); return(generator.GetAllInterfaces().ToList()); }
private string GenerateOutput() { var solution = DTETransformer.BuildDteSolution(this.Types.ToArray()); var attributeBuilder = new AttributeInterfaceBuilder(this.Settings); var typeContext = new TypeContext(this.TypeSettings); var generator = new CodeTraverser( solution, typeContext) { Settings = { ClassToInterfaceBuilder = attributeBuilder } }; var data = generator.GetAllInterfaces().ToList(); return(OutputFormatter.GetOutput( data, this.OutputSettings, typeContext)); }
public void ShouldHandleReservedPropNames() { var solution = DTETransformer.BuildDteSolution(typeof(ReservedPropModel)); var codeTraverser = new CodeTraverser(solution, new Settings()); var modules = codeTraverser.GetAllInterfaces(); var interfaces = modules.Single().Interfaces; var modelInterface = interfaces.Single(); var classProp = modelInterface.Members.SingleOrDefault(m => m.Name == "class"); var readonlyProp = modelInterface.Members.SingleOrDefault(m => m.Name == "readonly"); var publicProp = modelInterface.Members.SingleOrDefault(m => m.Name == "public"); Assert.AreEqual(3, modelInterface.Members.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 codeTraverser = new CodeTraverser(solution, new Settings()); var allModules = codeTraverser.GetAllInterfaces(); Assert.AreEqual(1, allModules.Count()); Assert.AreEqual(3, allModules.First().Interfaces.Count()); }
static void Main(string[] args) { if (args == null || args.Length == 0) { Console.WriteLine("usage: PeToPe [path]fileName.ext [noStack]"); return; } bool noStack = args.Length == 2; using (var host = new PeReader.DefaultHost()) { //Read the Metadata Model from the PE file var module = host.LoadUnitFrom(args[0]) as IModule; if (module == null || module == Dummy.Module || module == Dummy.Assembly) { Console.WriteLine(args[0] + " is not a PE file containing a CLR module or assembly."); return; } //Get a PDB reader if there is a PDB file. PdbReader /*?*/ pdbReader = null; string pdbFile = Path.ChangeExtension(module.Location, "pdb"); if (File.Exists(pdbFile)) { Stream pdbStream = File.OpenRead(pdbFile); pdbReader = new PdbReader(pdbStream, host); } using (pdbReader) { //Construct a Code Model from the Metadata model via decompilation var options = DecompilerOptions.None; if (noStack) { options |= DecompilerOptions.Unstack; } var decompiledModule = Decompiler.GetCodeModelFromMetadataModel(host, module, pdbReader, options); ISourceLocationProvider sourceLocationProvider = pdbReader; //The decompiler preserves the Locations from the IOperation values, so the PdbReader still works. //Recompiling the CodeModel to IL might change the IL offsets, so a new provider is needed. ILocalScopeProvider localScopeProvider = new Decompiler.LocalScopeProvider(pdbReader); //Get a mutable copy of the Code Model. The ISourceLocationProvider is needed to provide copied source method bodies with the //ability to find out where to mark sequence points when compiling themselves back into IL. //(ISourceMethodBody does not know about the Source Model, so this information must be provided explicitly.) var copier = new CodeDeepCopier(host, sourceLocationProvider); var mutableModule = copier.Copy(decompiledModule); //Traverse the mutable copy. In a real application the traversal will collect information to be used during rewriting. var traverser = new CodeTraverser() { PreorderVisitor = new CodeVisitor() }; traverser.Traverse(mutableModule); //Rewrite the mutable Code Model. In a real application CodeRewriter would be a subclass that actually does something. //(This is why decompiled source method bodies must recompile themselves, rather than just use the IL from which they were decompiled.) var rewriter = new CodeRewriter(host); var rewrittenModule = rewriter.Rewrite(mutableModule); //Write out the Code Model by traversing it as the Metadata Model that it also is. using (var peStream = File.Create(rewrittenModule.Location + ".pe")) { if (pdbReader == null) { PeWriter.WritePeToStream(rewrittenModule, host, peStream); } else { using (var pdbWriter = new PdbWriter(rewrittenModule.Location + ".pdb", pdbReader)) { PeWriter.WritePeToStream(rewrittenModule, host, peStream, sourceLocationProvider, localScopeProvider, pdbWriter); } } } } } }