Exemple #1
0
        public void CanRunSimpleProgram()
        {
            var program = @"
class Dummy {
    static void Main()
    {
      System.Console.WriteLine(""Hello!"");
    }
}
";

            var output = new CSharpRunner().Run(new ProgramDescripton()
            {
                new SourceFileDescription()
                {
                    Contents = program, File = new NPath("Main.cs")
                }
            });

            CollectionAssert.AreEqual(new[] { "Hello!" }, output);
        }
Exemple #2
0
        public string[] Run(JamRunnerInstructions instructions)
        {
            var tempDir = NPath.CreateTempDirectory("jamrunner");

            instructions.WorkingDir = instructions.WorkingDir ?? tempDir;

            foreach (var f in instructions.JamfilesToCreate)
            {
                instructions.WorkingDir.Combine(f.File).WriteAllText(f.Contents);
            }

            string startupArg = "";

            if (instructions.CSharpFiles.Any())
            {
                var csharpExe = tempDir.Combine("csharp.exe");
                CSharpRunner.Compile(instructions.CSharpFiles, JamToCSharpConverter.RuntimeDependencies, csharpExe);
                startupArg += "-m " + csharpExe.InQuotes();
            }

            var jamPath   = Environment.OSVersion.Platform == PlatformID.Win32NT ? "external/jamplus/bin/win32/jam.exe" : "external/jamplus/macosx64/jam";
            var jamBinary = ConverterRoot.Combine(jamPath);

            startupArg += " -f " + (instructions.JamFileToInvokeOnStartup ?? instructions.JamfilesToCreate[0].File.FileName);

            startupArg += " -C " + instructions.WorkingDir;

            startupArg += " " + instructions.AdditionalArg;
            Console.WriteLine("args: " + startupArg);

            var execute = Shell.Execute(jamBinary, startupArg);

            var lines     = execute.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
            var relevance = RelevantLinesFrom(lines);

            return(relevance.ToArray());
        }