public void AssemblyRunner_WithNullMethodName_Fails()
 {
     using (var runner = new AssemblyRunner())
     {
         runner.Run("assembly.dll", "className", null);
     }
 }
 public void AssemblyRunner_WithNullAssembly_Fails()
 {
     using (var runner = new AssemblyRunner())
     {
         runner.Run(null, "className", "methodName");
     }
 }
 public void AssemblyRunner_Constructor_ReturnsIDisposable()
 {
     using (var runner = new AssemblyRunner())
     {
         Assert.IsTrue(runner is IDisposable);
     }
 }
        public void AssemblyRunner_WithValidArguments_ReturnsString()
        {
            using (var runner = new AssemblyRunner())
            {
                var result = runner.Run("DummyDll.dll", "DummyClass", "SayHello");

                Assert.IsFalse(string.IsNullOrEmpty(result));
            }
        }
        public void AssemblyRunner_WithFullPathDll_ReturnsString()
        {
            using (var runner = new AssemblyRunner())
            {
                var result = runner.Run(Path.Combine(Directory.GetCurrentDirectory(), "DummyDll.dll"), "DummyClass", "SayHello");

                Assert.IsFalse(string.IsNullOrEmpty(result));
            }
        }
        public async Task<string> GenerateViewAsync(string solutionPath, string activeDocument = null, int cursorPosition = -1)
        {
            var view = string.Empty;

            using (var tempDirectory = new TempDirectory())
            {
                try
                {
                    var workspace = MSBuildWorkspace.Create();
                    var solution = await workspace.OpenSolutionAsync(solutionPath);
                    var newSolution = solution.GetIsolatedSolution();

                    var expressionSearcher = new ExpressionSearcher();
                    var expressionBuilder = new ExpressionBuilder();
                    var source = await expressionSearcher.FindSource(newSolution, activeDocument, cursorPosition);
                    var target = await expressionSearcher.FindTarget(newSolution);
                    var instrumentation = await expressionBuilder.BuildWrapper(source);

                    var newCompilation = expressionSearcher.InsertNodeInCompilation(target.Compilation, target.Node, instrumentation);

                    var instrumentedDll = Path.Combine(tempDirectory.FullName, Path.GetRandomFileName() + ".dll");
                    var emitResult = newCompilation.Emit(instrumentedDll);
                    if (emitResult.Success)
                    {
                        using (var assemblyRunner = new AssemblyRunner())
                        {
                            var result = assemblyRunner.Run(instrumentedDll, "WrapperClass", "WrapperMethod");
                            view = result;
                        }
                    }
                    else
                    {
                        view = string.Join(Environment.NewLine, emitResult.Diagnostics);
                    }
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception.ToString());
                    view = exception.ToString();
                }
            }

            return view;
        }