forked from jasder/antlr
Update BaseTest to be compatible with .NET 3.5
This commit is contained in:
parent
f063557b7b
commit
104de1a1c5
|
@ -5,14 +5,12 @@
|
|||
using System.Text;
|
||||
using Antlr4.Runtime.Misc;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Microsoft.Win32;
|
||||
using Directory = System.IO.Directory;
|
||||
using DirectoryInfo = System.IO.DirectoryInfo;
|
||||
using File = System.IO.File;
|
||||
using IOException = System.IO.IOException;
|
||||
using Path = System.IO.Path;
|
||||
using RegistryHive = Microsoft.Win32.RegistryHive;
|
||||
using RegistryKey = Microsoft.Win32.RegistryKey;
|
||||
using RegistryView = Microsoft.Win32.RegistryView;
|
||||
using StreamReader = System.IO.StreamReader;
|
||||
using TextReader = System.IO.TextReader;
|
||||
using Thread = System.Threading.Thread;
|
||||
|
@ -70,6 +68,45 @@
|
|||
tmpdir = dir;
|
||||
}
|
||||
|
||||
protected static string WindowsFolder
|
||||
{
|
||||
get
|
||||
{
|
||||
#if NET_4_0
|
||||
return Environment.GetFolderPath(Environment.SpecialFolder.Windows);
|
||||
#else
|
||||
string systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);
|
||||
return Path.GetDirectoryName(systemFolder);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
protected static string UserProfile
|
||||
{
|
||||
get
|
||||
{
|
||||
#if NET_4_0
|
||||
return Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
||||
#else
|
||||
string documentsFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
|
||||
return Path.GetDirectoryName(documentsFolder);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
protected static string PathCombine(params string[] paths)
|
||||
{
|
||||
#if NET_4_0
|
||||
return Path.Combine(paths);
|
||||
#else
|
||||
string result = paths[0];
|
||||
for (int i = 1; i < paths.Length; i++)
|
||||
result = Path.Combine(result, paths[i]);
|
||||
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
/** Wow! much faster than compiling outside of VM. Finicky though.
|
||||
* Had rules called r and modulo. Wouldn't compile til I changed to 'a'.
|
||||
*/
|
||||
|
@ -78,8 +115,7 @@
|
|||
DirectoryInfo outputDir = new DirectoryInfo(tmpdir);
|
||||
try
|
||||
{
|
||||
string windows = Environment.GetFolderPath(Environment.SpecialFolder.Windows);
|
||||
string compiler = Path.Combine(windows, "Microsoft.NET", "Framework64", "v4.0.30319", "csc.exe");
|
||||
string compiler = PathCombine(WindowsFolder, "Microsoft.NET", "Framework64", "v4.0.30319", "csc.exe");
|
||||
|
||||
List<string> args = new List<string>();
|
||||
args.AddRange(getCompileOptions());
|
||||
|
@ -114,7 +150,7 @@
|
|||
args.Insert(1, "/out:Parser.dll");
|
||||
}
|
||||
|
||||
System.Diagnostics.Process process = System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(compiler, '"' + string.Join("\" \"", args) + '"')
|
||||
System.Diagnostics.Process process = System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(compiler, '"' + Utils.Join("\" \"", args) + '"')
|
||||
{
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
|
@ -132,12 +168,12 @@
|
|||
stderr.join();
|
||||
if (stdout.ToString().Length > 0)
|
||||
{
|
||||
Console.Error.WriteLine("compile stdout from: " + string.Join(" ", args));
|
||||
Console.Error.WriteLine("compile stdout from: " + Utils.Join(" ", args));
|
||||
Console.Error.WriteLine(stdout);
|
||||
}
|
||||
if (stderr.ToString().Length > 0)
|
||||
{
|
||||
Console.Error.WriteLine("compile stderr from: " + string.Join(" ", args));
|
||||
Console.Error.WriteLine("compile stderr from: " + Utils.Join(" ", args));
|
||||
Console.Error.WriteLine(stderr);
|
||||
}
|
||||
int ret = process.ExitCode;
|
||||
|
@ -190,7 +226,11 @@
|
|||
get
|
||||
{
|
||||
string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment";
|
||||
#if NET_4_0
|
||||
using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default).OpenSubKey(javaKey))
|
||||
#else
|
||||
using (var baseKey = Registry.LocalMachine.OpenSubKey(javaKey))
|
||||
#endif
|
||||
{
|
||||
string currentVersion = baseKey.GetValue("CurrentVersion").ToString();
|
||||
using (var homeKey = baseKey.OpenSubKey(currentVersion))
|
||||
|
@ -205,7 +245,7 @@
|
|||
{
|
||||
string mavenHome = Environment.GetEnvironmentVariable("M2_HOME");
|
||||
if (!Directory.Exists(mavenHome))
|
||||
mavenHome = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".m2");
|
||||
mavenHome = Path.Combine(UserProfile, ".m2");
|
||||
|
||||
return mavenHome;
|
||||
}
|
||||
|
@ -213,7 +253,7 @@
|
|||
|
||||
protected virtual string GetMavenArtifact(string groupId, string artifactId, string version, string classifier = null)
|
||||
{
|
||||
string folder = Path.Combine(MavenHome, "repository", groupId.Replace('.', Path.DirectorySeparatorChar), artifactId, version);
|
||||
string folder = PathCombine(MavenHome, "repository", groupId.Replace('.', Path.DirectorySeparatorChar), artifactId, version);
|
||||
string fileNameFormat = string.IsNullOrEmpty(classifier) ? "{0}-{1}.jar" : "{0}-{1}-{2}.jar";
|
||||
string fileName = string.Format(fileNameFormat, artifactId, version, classifier);
|
||||
return Path.Combine(folder, fileName);
|
||||
|
@ -226,7 +266,7 @@
|
|||
writeFile(tmpdir, fileName, grammarStr);
|
||||
try
|
||||
{
|
||||
string compiler = Path.Combine(JavaHome, "bin", "java.exe");
|
||||
string compiler = PathCombine(JavaHome, "bin", "java.exe");
|
||||
|
||||
List<string> classpath = new List<string>();
|
||||
classpath.Add(GetMavenArtifact("com.tunnelvisionlabs", "antlr4-csharp", "4.0.1-SNAPSHOT"));
|
||||
|
@ -237,7 +277,7 @@
|
|||
|
||||
List<string> options = new List<string>();
|
||||
options.Add("-cp");
|
||||
options.Add(string.Join(";", classpath));
|
||||
options.Add(Utils.Join(";", classpath));
|
||||
options.Add("org.antlr.v4.Tool");
|
||||
|
||||
options.AddRange(extraOptions);
|
||||
|
@ -248,7 +288,7 @@
|
|||
options.Add("-Dlanguage=CSharp");
|
||||
options.Add(grammarFileName);
|
||||
|
||||
System.Diagnostics.Process process = System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(compiler, '"' + string.Join("\" \"", options) + '"')
|
||||
System.Diagnostics.Process process = System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(compiler, '"' + Utils.Join("\" \"", options) + '"')
|
||||
{
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
|
@ -266,12 +306,12 @@
|
|||
stderr.join();
|
||||
if (stdout.ToString().Length > 0)
|
||||
{
|
||||
Console.Error.WriteLine("compile stdout from: " + string.Join(" ", options));
|
||||
Console.Error.WriteLine("compile stdout from: " + Utils.Join(" ", options));
|
||||
Console.Error.WriteLine(stdout);
|
||||
}
|
||||
if (stderr.ToString().Length > 0)
|
||||
{
|
||||
Console.Error.WriteLine("compile stderr from: " + string.Join(" ", options));
|
||||
Console.Error.WriteLine("compile stderr from: " + Utils.Join(" ", options));
|
||||
Console.Error.WriteLine(stderr);
|
||||
}
|
||||
int ret = process.ExitCode;
|
||||
|
@ -370,7 +410,7 @@
|
|||
if (parserName != null)
|
||||
{
|
||||
files.Add(parserName + ".cs");
|
||||
ISet<string> optionsSet = new HashSet<string>(extraOptions);
|
||||
HashSet<string> optionsSet = new HashSet<string>(extraOptions);
|
||||
if (!optionsSet.Contains("-no-listener"))
|
||||
{
|
||||
files.Add(grammarFileName.Substring(0, grammarFileName.LastIndexOf('.')) + "BaseListener.cs");
|
||||
|
|
Loading…
Reference in New Issue