public ResultCodes Execute( TextWriter outputWriter, TextWriter errorWriter, TextWriter warningWriter, TextWriter logWriter, CommandContext context) { var inputFile = context.GetToken(0); var outputFile = context.GetToken(1); var platform = context.GetToken(2); if (inputFile == null) { errorWriter.WriteLine("Source file is not specified."); return(ResultCodes.Failure); } if (outputFile == null) { errorWriter.WriteLine("Output file is not specified."); return(ResultCodes.Failure); } if (platform == null) { errorWriter.WriteLine("Platform is not specified."); return(ResultCodes.Failure); } var compiler = new Compiler(); var flags = CompilerFlags.CreateDefault(); foreach (var sw in _switches) { _setFlag(context, flags, sw.Value.Item1, sw.Key); } var result = compiler.CompileFromSource( errorWriter, warningWriter, logWriter, inputFile, outputFile, platform, flags ); if (result.Successful) { outputWriter.WriteLine("Compilation finished successfully."); return(ResultCodes.Successful); } //preserving the stack-trace. var info = ExceptionDispatchInfo.Capture(result.Exception); info.Throw(); return(ResultCodes.Failure); }
public ResultCodes Execute( TextWriter outputWriter, TextWriter errorWriter, TextWriter warningWriter, TextWriter logWriter, CommandContext context, string sourceCode) { IPlatform platform; var osKind = Environment.OSVersion.Platform; if (osKind == PlatformID.Win32NT || osKind == PlatformID.Win32S || osKind == PlatformID.Win32Windows || osKind == PlatformID.WinCE) { platform = null; } else { platform = new UnixBashPlatform(); } var compiler = new Compiler(); var ctx = compiler.CompileFromSource( platform, CompilerFlags.CreateDefault(), errorWriter, warningWriter, logWriter, TextWriter.Null, TextWriter.Null, sourceCode ); return(ResultCodes.Successful); }
public void TestCompiler() { //try { Platforms.AddPlatform(new UnixBashPlatform()); var compiler = new Compiler(); var result = compiler.CompileFromSource( Console.Out, Console.Out, Console.Out, "/home/amk/Temp/ShellScript/variables.shellscript", "/home/amk/Temp/ShellScript/variables.sh", "unix-bash", CompilerFlags.CreateDefault() ); GC.KeepAlive(result); } //catch (Exception ex) { Debugger.Break(); } }
public void TestScripts() { const string TestScriptsRootDirectoryName = "ShellScript.MSTest"; const string TestScriptsDirectoryName = "TestScripts"; const string TempOutputDirectoryName = "TestScripts.temp"; var platforms = new[] { new UnixBashPlatform() }; var compilerFlags = CompilerFlags.CreateDefault(); //compilerFlags.WriteShellScriptVersion = false; string testScriptsRoot = null; string tempOutputRoot = null; var cDir = Environment.CurrentDirectory; while (!string.IsNullOrWhiteSpace(cDir)) { if (StringComparer.InvariantCultureIgnoreCase.Equals(Path.GetFileName(cDir), TestScriptsRootDirectoryName)) { testScriptsRoot = Path.Combine(cDir, TestScriptsDirectoryName); tempOutputRoot = Path.Combine(cDir, TempOutputDirectoryName); break; } cDir = Path.GetDirectoryName(cDir); } if (testScriptsRoot == null) { Assert.Fail("Test scripts directory not found."); } foreach (var file in Directory.GetFiles(testScriptsRoot, "*.shellscript", SearchOption.AllDirectories)) { foreach (var platform in platforms) { var ext = platform.Name.ToLower(); var assertionFile = $"{Path.GetFileNameWithoutExtension(file)}.{ext}"; var outputFile = $"{Path.GetFileNameWithoutExtension(file)}.{ext}"; assertionFile = Path.Combine(testScriptsRoot, assertionFile); outputFile = Path.Combine(tempOutputRoot, outputFile); if (File.Exists(assertionFile)) { using (var logWriter = new StringWriter()) { Directory.CreateDirectory(tempOutputRoot); var compiler = new Compiler(); compiler.CompileFromSource(file, tempOutputRoot, outputFile, platform, compilerFlags, logWriter, logWriter, logWriter); using (var assertionFileStream = new FileStream(assertionFile, FileMode.Open, FileAccess.Read)) using (var outputFileStream = new FileStream(outputFile, FileMode.Open, FileAccess.Read)) using (var assertionReader = new StreamReader(assertionFileStream)) using (var outputReader = new StreamReader(outputFileStream)) { string assertLine; string outputLine; int line = 0; while ((assertLine = assertionReader.ReadLine()) != null && (outputLine = outputReader.ReadLine()) != null) { if (line++ >= 2) { if (assertLine != outputLine) { Assert.Fail($"Assert failed on {file}"); } } } } } } } } }