private static void AssertConvertedProgramHasIdenticalOutput(ProgramDescripton program, IEnumerable <string> onlyConvert = null) { program[0].Contents = "NotFile all ;\n" + program[0].Contents; var jamRunInstructions = new JamRunnerInstructions { JamfilesToCreate = program }; var jamResult = new JamRunner().Run(jamRunInstructions).Select(s => s.TrimEnd()); Console.WriteLine("Jam:"); foreach (var l in jamResult) { Console.WriteLine(l); } IEnumerable <string> csharpResult = null; Func <NPath, bool> shouldConvert = (NPath name) => onlyConvert == null || onlyConvert.Contains(name.ToString()); try { var toBeCSharp = new ProgramDescripton(program.Where(f => shouldConvert(f.File))); var toStayJam = new ProgramDescripton(program.Where(f => !shouldConvert(f.File))); var csharp = new JamToCSharpConverter().Convert(toBeCSharp); var convertedJamRunInstructions = new JamRunnerInstructions() { CSharpFiles = csharp, JamfilesToCreate = toStayJam, JamFileToInvokeOnStartup = program[0].File.FileName }; csharpResult = new JamRunner().Run(convertedJamRunInstructions).Select(s => s.TrimEnd()); Console.WriteLine("C#:"); foreach (var l in csharpResult) { Console.WriteLine(l); } Console.WriteLine(); } catch (Exception e) { Console.WriteLine("Failed converting/running to c#: " + e); } CollectionAssert.AreEqual(jamResult, csharpResult); }
//[Ignore("Playground")] public void A() { var converter = new JamToCSharpConverter(); var basePath = new NPath("c:/unity"); var files = new List <NPath>(); files.AddRange(basePath.Combine("Runtime").Files("*.jam", true)); files.AddRange(basePath.Combine("Editor").Files("*.jam", true)); files.AddRange(basePath.Combine("Projects/Jam").Files("*.jam", true)); files.AddRange(basePath.Files("*.jam", false)); files.AddRange(basePath.Combine("PlatformDependent").Files("*.jam", true)); var program = files.Where(f => !f.ToString().Contains("Config")).Select(f => new SourceFileDescription() { File = f.RelativeTo(basePath), Contents = f.ReadAllText() }).ToArray(); var csProgram = converter.Convert(new ProgramDescripton(program)); var jambase = @"C:\jamconverter\external\jamplus\bin\Jambase.jam"; var instructions = new JamRunnerInstructions() { CSharpFiles = csProgram, WorkingDir = new NPath("c:/unity"), JamFileToInvokeOnStartup = jambase.InQuotes(), }; var tempDir = NPath.SystemTemp.Combine("JamRunner"); instructions.WorkingDir = instructions.WorkingDir ?? tempDir; foreach (var f1 in instructions.JamfilesToCreate) { instructions.WorkingDir.Combine(f1.File).WriteAllText(f1.Contents); } CSharpRunner.Compile(csProgram, JamToCSharpConverter.RuntimeDependencies, tempDir.Combine("csharp.exe")); string genericArgs = $"-f {jambase.InQuotes()} -C {instructions.WorkingDir} \"<StandalonePlayer>Runtime/Graphics/Texture2D.obj\" -sPLATFORM=win64 -q -dx"; var csharpOnlyArgs = "-m " + tempDir.Combine("csharp.exe").InQuotes(); var finalArg = genericArgs + " " + csharpOnlyArgs; Console.WriteLine("args: " + JamBinary() + " " + finalArg); throw new Exception(); var args2 = new Shell.ExecuteArgs() { Arguments = finalArg, Executable = JamBinary().ToString() }; var output_cs = DropBox().Combine("output_cs"); Shell.Execute(args2, null, output_cs); //Truncate(output_cs); var args = new Shell.ExecuteArgs() { Arguments = genericArgs, Executable = JamBinary().ToString() }; var output_jam = DropBox().Combine("output_jam"); Shell.Execute(args, null, output_jam); // Truncate(output_jam); }