protected string GenericTest( string fileName, string csharpOutput, string javascriptOutput, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null ) { long elapsed, temp; string generatedJs = null; using (var test = new ComparisonTest(EvaluatorPool, Portability.NormalizeDirectorySeparators(fileName), stubbedAssemblies, typeInfo)) { var csOutput = test.RunCSharp(new string[0], out elapsed); try { var jsOutput = test.RunJavascript(new string[0], out generatedJs, out temp, out elapsed, MakeConfiguration); Assert.AreEqual(Portability.NormalizeNewLines(csharpOutput), csOutput.Trim(), "Did not get expected output from C# test"); Assert.AreEqual(Portability.NormalizeNewLines(javascriptOutput), jsOutput.Trim(), "Did not get expected output from JavaScript test"); } catch { Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); throw; } } return(generatedJs); }
protected string GenericIgnoreTest(string fileName, string workingOutput, string jsErrorSubstring, string[] stubbedAssemblies = null) { long elapsed, temp; string generatedJs = null, jsOutput = null; using (var test = new ComparisonTest(EvaluatorPool, fileName, stubbedAssemblies)) { var csOutput = test.RunCSharp(new string[0], out elapsed); Assert.AreEqual(workingOutput, csOutput.Trim()); try { jsOutput = test.RunJavascript(new string[0], out generatedJs, out temp, out elapsed, MakeConfiguration); Assert.Fail("Expected javascript to throw an exception containing the string \"" + jsErrorSubstring + "\"."); } catch (JavaScriptException jse) { if (!jse.ErrorText.Contains(jsErrorSubstring)) { Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); if (jsOutput != null) { Console.Error.WriteLine("// JS output: \r\n{0}", jsOutput); } throw; } } catch { Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); if (jsOutput != null) { Console.Error.WriteLine("// JS output: \r\n{0}", jsOutput); } throw; } } return(generatedJs); }
protected string GenericIgnoreTest(string fileName, string workingOutput, string jsErrorSubstring, string[] stubbedAssemblies = null) { long elapsed, temp; Func <string> generateJs = null; string jsOutput = null; using (var test = new ComparisonTest(EvaluatorPool, Portability.NormalizeDirectorySeparators(fileName), stubbedAssemblies)) { var csOutput = test.RunCSharp(new string[0], out elapsed); Assert.AreEqual(Portability.NormalizeNewLines(workingOutput), csOutput.Trim()); try { jsOutput = test.RunJavascript(new string[0], out generateJs, out temp, out elapsed, MakeConfiguration); Assert.Fail("Expected javascript to throw an exception containing the string \"" + jsErrorSubstring + "\"."); } catch (JavaScriptEvaluatorException jse) { bool foundMatch = false; foreach (var exc in jse.Exceptions) { if (exc.Message.Contains(jsErrorSubstring)) { foundMatch = true; break; } } if (!foundMatch) { Console.Error.WriteLine("// Was looking for a JS exception containing the string '{0}' but didn't find it.", jsErrorSubstring); Console.Error.WriteLine("// Generated JS: \r\n{0}", generateJs != null ? generateJs() : string.Empty); if (jsOutput != null) { Console.Error.WriteLine("// JS output: \r\n{0}", jsOutput); } throw; } } catch { Console.Error.WriteLine("// Generated JS: \r\n{0}", generateJs != null ? generateJs() : string.Empty); if (jsOutput != null) { Console.Error.WriteLine("// JS output: \r\n{0}", jsOutput); } throw; } } return(generateJs()); }
protected string GenericIgnoreTest(string fileName, string workingOutput, string jsErrorSubstring, string[] stubbedAssemblies = null) { long elapsed, temp; string generatedJs = null, jsOutput = null; using (var test = new ComparisonTest(EvaluatorPool, Portability.NormalizeDirectorySeparators(fileName), stubbedAssemblies)) { var csOutput = test.RunCSharp(new string[0], out elapsed); Assert.AreEqual(workingOutput, csOutput.Trim()); try { jsOutput = test.RunJavascript(new string[0], out generatedJs, out temp, out elapsed, MakeConfiguration); Assert.Fail("Expected javascript to throw an exception containing the string \"" + jsErrorSubstring + "\"."); } catch (JavaScriptEvaluatorException jse) { bool foundMatch = false; foreach (var exc in jse.Exceptions) { if (exc.Message.Contains(jsErrorSubstring)) { foundMatch = true; break; } } if (!foundMatch) { Console.Error.WriteLine("// Was looking for a JS exception containing the string '{0}' but didn't find it.", jsErrorSubstring); Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); if (jsOutput != null) Console.Error.WriteLine("// JS output: \r\n{0}", jsOutput); throw; } } catch { Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); if (jsOutput != null) Console.Error.WriteLine("// JS output: \r\n{0}", jsOutput); throw; } } return generatedJs; }
private CompileResult RunComparisonTest( string filename, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null, Action <string, string> errorCheckPredicate = null, List <string> failureList = null, string commonFile = null, bool shouldRunJs = true, AssemblyCache asmCache = null, Func <Configuration> makeConfiguration = null, Action <Exception> onTranslationFailure = null, JSEvaluationConfig evaluationConfig = null, string compilerOptions = "", Action <AssemblyTranslator> initializeTranslator = null, Func <string> getTestRunnerQueryString = null, bool?scanForProxies = null ) { CompileResult result = null; Console.WriteLine("// {0} ... ", Path.GetFileName(filename)); filename = Portability.NormalizeDirectorySeparators(filename); try { var testFilenames = new List <string>() { filename }; if (commonFile != null) { testFilenames.Add(commonFile); } using (var test = new ComparisonTest( EvaluatorPool, testFilenames, Path.Combine( ComparisonTest.TestSourceFolder, ComparisonTest.MapSourceFileToTestFile(filename) ), stubbedAssemblies, typeInfo, asmCache, compilerOptions: compilerOptions )) { test.GetTestRunnerQueryString = getTestRunnerQueryString ?? test.GetTestRunnerQueryString; result = test.CompileResult; if (shouldRunJs) { test.Run( makeConfiguration: makeConfiguration, evaluationConfig: evaluationConfig, onTranslationFailure: onTranslationFailure, initializeTranslator: initializeTranslator, scanForProxies: scanForProxies ); } else { string js; long elapsed; try { var csOutput = test.RunCSharp(new string[0], out elapsed); test.GenerateJavascript( new string[0], out js, out elapsed, makeConfiguration, evaluationConfig == null || evaluationConfig.ThrowOnUnimplementedExternals, onTranslationFailure, initializeTranslator ); Console.WriteLine("generated"); if (errorCheckPredicate != null) { errorCheckPredicate(csOutput, js); } } catch (Exception) { Console.WriteLine("error"); throw; } } } } catch (Exception ex) { if (ex.Message == "JS test failed") { Debug.WriteLine(ex.InnerException); } else { Debug.WriteLine(ex); } if (failureList != null) { failureList.Add(Path.GetFileNameWithoutExtension(filename)); } else { throw; } } return(result); }
protected string GenericTest(string fileName, string csharpOutput, string javascriptOutput, Regex[] stubbedAssemblies = null) { long elapsed, temp; string generatedJs; using (var test = new ComparisonTest(fileName, stubbedAssemblies)) { var csOutput = test.RunCSharp(new string[0], out elapsed); var jsOutput = test.RunJavascript(new string[0], out generatedJs, out temp, out elapsed); Assert.AreEqual(csharpOutput, csOutput.Trim(), "Did not get expected output from C# test"); Assert.AreEqual(javascriptOutput, jsOutput.Trim(), "Did not get expected output from JavaScript test"); } return generatedJs; }
protected string GenericIgnoreTest(string fileName, string workingOutput, string jsErrorSubstring, Regex[] stubbedAssemblies = null) { long elapsed, temp; string generatedJs = null; using (var test = new ComparisonTest(fileName, stubbedAssemblies)) { var csOutput = test.RunCSharp(new string[0], out elapsed); Assert.AreEqual(workingOutput, csOutput.Trim()); try { test.RunJavascript(new string[0], out generatedJs, out temp, out elapsed); Assert.Fail("Expected javascript to throw an exception containing the string \"" + jsErrorSubstring + "\"."); } catch (JavaScriptException jse) { if (!jse.ErrorText.Contains(jsErrorSubstring)) throw; } } return generatedJs; }
private void RunComparisonTest( string filename, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null, Action <string, string> errorCheckPredicate = null, List <string> failureList = null, string commonFile = null, bool shouldRunJs = true, AssemblyCache asmCache = null, Func <Configuration> makeConfiguration = null ) { Console.WriteLine("// {0} ... ", Path.GetFileName(filename)); try { var testFilenames = new List <string>() { filename }; if (commonFile != null) { testFilenames.Add(commonFile); } using (var test = new ComparisonTest( EvaluatorPool, testFilenames, Path.Combine( ComparisonTest.TestSourceFolder, ComparisonTest.MapSourceFileToTestFile(filename) ), stubbedAssemblies, typeInfo, asmCache) ) { if (shouldRunJs) { test.Run(); } else { string js; long elapsed; try { var csOutput = test.RunCSharp(new string[0], out elapsed); test.GenerateJavascript(new string[0], out js, out elapsed, makeConfiguration); Console.WriteLine("generated"); if (errorCheckPredicate != null) { errorCheckPredicate(csOutput, js); } } catch (Exception _exc) { Console.WriteLine("error"); throw; } } } } catch (Exception ex) { if (ex.Message == "JS test failed") { Debug.WriteLine(ex.InnerException); } else { Debug.WriteLine(ex); } if (failureList != null) { failureList.Add(Path.GetFileNameWithoutExtension(filename)); } else { throw; } } }
/// <summary> /// Runs one or more comparison tests by compiling the source C# or VB.net file, /// running the compiled test method, translating the compiled test method to JS, /// then running the translated JS and comparing the outputs. /// </summary> /// <param name="filenames">The path to one or more test files. If a test file is named 'Common.cs' it will be linked into all tests.</param> /// <param name="stubbedAssemblies">The paths of assemblies to stub during translation, if any.</param> /// <param name="typeInfo">A TypeInfoProvider to use for type info. Using this parameter is not advised if you use proxies or JSIL.Meta attributes in your tests.</param> /// <param name="testPredicate">A predicate to invoke before running each test. If the predicate returns false, the JS version of the test will not be run (though it will be translated).</param> protected void RunComparisonTests( string[] filenames, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null, Func <string, bool> testPredicate = null, Action <string, string> errorCheckPredicate = null ) { var started = DateTime.UtcNow.Ticks; string commonFile = null; for (var i = 0; i < filenames.Length; i++) { if (filenames[i].Contains("\\Common.")) { commonFile = filenames[i]; break; } } const string keyName = @"Software\Squared\JSIL\Tests\PreviousFailures"; StackFrame callingTest = null; for (int i = 1; i < 10; i++) { callingTest = new StackFrame(i); var method = callingTest.GetMethod(); if ((method != null) && method.GetCustomAttributes(true).Any( (ca) => ca.GetType().FullName == "NUnit.Framework.TestAttribute" )) { break; } else { callingTest = null; } } var previousFailures = new HashSet <string>(); MethodBase callingMethod = null; if ((callingTest != null) && ((callingMethod = callingTest.GetMethod()) != null)) { try { using (var rk = Registry.CurrentUser.CreateSubKey(keyName)) { var names = rk.GetValue(callingMethod.Name) as string; if (names != null) { foreach (var name in names.Split(',')) { previousFailures.Add(name); } } } } catch (Exception ex) { Console.WriteLine("Warning: Could not open registry key: {0}", ex); } } var failureList = new List <string>(); var sortedFilenames = new List <string>(filenames); sortedFilenames.Sort( (lhs, rhs) => { var lhsShort = Path.GetFileNameWithoutExtension(lhs); var rhsShort = Path.GetFileNameWithoutExtension(rhs); int result = (previousFailures.Contains(lhsShort) ? 0 : 1).CompareTo( previousFailures.Contains(rhsShort) ? 0 : 1 ); if (result == 0) { result = lhsShort.CompareTo(rhsShort); } return(result); } ); var asmCache = new AssemblyCache(); foreach (var filename in sortedFilenames) { if (filename == commonFile) { continue; } bool shouldRunJs = true; if (testPredicate != null) { shouldRunJs = testPredicate(filename); } Console.WriteLine("// {0} ... ", Path.GetFileName(filename)); try { var testFilenames = new List <string>() { filename }; if (commonFile != null) { testFilenames.Add(commonFile); } using (var test = new ComparisonTest( EvaluatorPool, testFilenames, Path.Combine( ComparisonTest.TestSourceFolder, ComparisonTest.MapSourceFileToTestFile(filename) ), stubbedAssemblies, typeInfo, asmCache) ) { if (shouldRunJs) { test.Run(); } else { string js; long elapsed; try { var csOutput = test.RunCSharp(new string[0], out elapsed); test.GenerateJavascript(new string[0], out js, out elapsed); Console.WriteLine("ok"); if (errorCheckPredicate != null) { errorCheckPredicate(csOutput, js); } } catch (Exception _exc) { Console.WriteLine("error"); throw; } } } } catch (Exception ex) { failureList.Add(Path.GetFileNameWithoutExtension(filename)); if (ex.Message == "JS test failed") { Debug.WriteLine(ex.InnerException); } else { Debug.WriteLine(ex); } } } if (callingMethod != null) { try { using (var rk = Registry.CurrentUser.CreateSubKey(keyName)) rk.SetValue(callingMethod.Name, String.Join(",", failureList.ToArray())); } catch (Exception ex) { Console.WriteLine("Warning: Could not open registry key: {0}", ex); } } var ended = DateTime.UtcNow.Ticks; var elapsedTotalSeconds = TimeSpan.FromTicks(ended - started).TotalSeconds; Console.WriteLine("// Ran {0} test(s) in {1:000.00}s.", sortedFilenames.Count, elapsedTotalSeconds); Assert.AreEqual(0, failureList.Count, String.Format("{0} test(s) failed:\r\n{1}", failureList.Count, String.Join("\r\n", failureList.ToArray())) ); }
private IEnumerable<Metacomment> RunComparisonTest ( string filename, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null, Action<string, Func<string>> errorCheckPredicate = null, List<string> failureList = null, string commonFile = null, bool shouldRunJs = true, AssemblyCache asmCache = null, Func<Configuration> makeConfiguration = null, Action<Exception> onTranslationFailure = null, JSEvaluationConfig evaluationConfig = null, string compilerOptions = "", Action<AssemblyTranslator> initializeTranslator = null, Func<string> getTestRunnerQueryString = null, bool? scanForProxies = null, string[] extraDependencies = null, string testFolderNameOverride = null ) { IEnumerable<Metacomment> result = null; Console.WriteLine("// {0} ... ", Path.GetFileName(filename)); filename = Portability.NormalizeDirectorySeparators(filename); try { var testFilenames = new List<string>() { filename }; if (commonFile != null) testFilenames.Add(commonFile); var testDirectoryName = testFolderNameOverride?? TestContext.CurrentContext.Test.FullName.Replace( "." + TestContext.CurrentContext.Test.Name, String.Empty); var testFileDirectory = Path.Combine( ComparisonTest.TestSourceFolder, Path.GetDirectoryName(filename)); var testDirectory = Path.Combine(testFileDirectory, testDirectoryName); Directory.CreateDirectory(testDirectory); using (var test = new ComparisonTest( EvaluatorPool, testFilenames, Path.Combine( testDirectory, ComparisonTest.MapSourceFileToTestFile(Path.GetFileName(filename)) ), stubbedAssemblies, typeInfo, asmCache, compilerOptions: compilerOptions )) { test.GetTestRunnerQueryString = getTestRunnerQueryString ?? test.GetTestRunnerQueryString; result = test.Metacomments; if (extraDependencies != null) { var destDir = Path.GetDirectoryName(test.AssemblyUtility.AssemblyLocation); foreach (var dependency in extraDependencies) File.Copy(dependency, Path.Combine(destDir, Path.GetFileName(dependency)), true); } if (shouldRunJs) { test.Run( makeConfiguration: makeConfiguration, evaluationConfig: evaluationConfig, onTranslationFailure: onTranslationFailure, initializeTranslator: initializeTranslator, scanForProxies: scanForProxies ); } else { Func<string> getJs; long elapsed; try { var csOutput = test.RunCSharp(new string[0], out elapsed); test.GenerateJavascript( new string[0], out getJs, out elapsed, makeConfiguration, evaluationConfig == null || evaluationConfig.ThrowOnUnimplementedExternals, onTranslationFailure, initializeTranslator, shouldWritePrologue: false ); Console.WriteLine("generated"); if (errorCheckPredicate != null) { errorCheckPredicate(csOutput, getJs); } } catch (Exception) { Console.WriteLine("error"); throw; } } } } catch (Exception ex) { if (ex.Message == "JS test failed") Debug.WriteLine(ex.InnerException); else Debug.WriteLine(ex); if (failureList != null) { failureList.Add(Path.GetFileNameWithoutExtension(filename)); } else throw; } return result; }
protected string GenericTest(string fileName, string csharpOutput, string javascriptOutput, string[] stubbedAssemblies = null) { long elapsed, temp; string generatedJs = null; using (var test = new ComparisonTest(fileName, stubbedAssemblies)) { var csOutput = test.RunCSharp(new string[0], out elapsed); try { var jsOutput = test.RunJavascript(new string[0], out generatedJs, out temp, out elapsed); Assert.AreEqual(csharpOutput, csOutput.Trim(), "Did not get expected output from C# test"); Assert.AreEqual(javascriptOutput, jsOutput.Trim(), "Did not get expected output from JavaScript test"); } catch { Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); throw; } } return generatedJs; }
private IEnumerable <Metacomment> RunComparisonTest( string filename, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null, Action <string, Func <string> > errorCheckPredicate = null, List <string> failureList = null, string commonFile = null, bool shouldRunJs = true, AssemblyCache asmCache = null, Func <Configuration> makeConfiguration = null, Action <Exception> onTranslationFailure = null, JSEvaluationConfig evaluationConfig = null, string compilerOptions = "", Action <AssemblyTranslator> initializeTranslator = null, Func <string> getTestRunnerQueryString = null, bool?scanForProxies = null, string[] extraDependencies = null, string testFolderNameOverride = null ) { IEnumerable <Metacomment> result = null; Console.WriteLine("// {0} ... ", Path.GetFileName(filename)); filename = Portability.NormalizeDirectorySeparators(filename); try { var testFilenames = new List <string>() { filename }; if (commonFile != null) { testFilenames.Add(commonFile); } var testDirectoryName = testFolderNameOverride ?? TestContext.CurrentContext.Test.FullName.Replace( "." + TestContext.CurrentContext.Test.Name, String.Empty); var testFileDirectory = Path.Combine( ComparisonTest.TestSourceFolder, Path.GetDirectoryName(filename)); var testDirectory = Path.Combine(testFileDirectory, testDirectoryName); Directory.CreateDirectory(testDirectory); using (var test = new ComparisonTest( EvaluatorPool, testFilenames, Path.Combine( testDirectory, ComparisonTest.MapSourceFileToTestFile(Path.GetFileName(filename)) ), stubbedAssemblies, typeInfo, asmCache, compilerOptions: compilerOptions )) { test.GetTestRunnerQueryString = getTestRunnerQueryString ?? test.GetTestRunnerQueryString; result = test.Metacomments; if (extraDependencies != null) { var destDir = Path.GetDirectoryName(test.AssemblyUtility.AssemblyLocation); foreach (var dependency in extraDependencies) { File.Copy(dependency, Path.Combine(destDir, Path.GetFileName(dependency)), true); } } if (shouldRunJs) { test.Run( makeConfiguration: makeConfiguration, evaluationConfig: evaluationConfig, onTranslationFailure: onTranslationFailure, initializeTranslator: initializeTranslator, scanForProxies: scanForProxies ); } else { Func <string> getJs; long elapsed; try { var csOutput = test.RunCSharp(new string[0], out elapsed); test.GenerateJavascript( new string[0], out getJs, out elapsed, makeConfiguration, evaluationConfig == null || evaluationConfig.ThrowOnUnimplementedExternals, onTranslationFailure, initializeTranslator, shouldWritePrologue: false ); Console.WriteLine("generated"); if (errorCheckPredicate != null) { errorCheckPredicate(csOutput, getJs); } } catch (Exception) { Console.WriteLine("error"); throw; } } } } catch (Exception ex) { if (ex.Message == "JS test failed") { Debug.WriteLine(ex.InnerException); } else { Debug.WriteLine(ex); } if (failureList != null) { failureList.Add(Path.GetFileNameWithoutExtension(filename)); } else { throw; } } return(result); }
/// <summary> /// Runs one or more comparison tests by compiling the source C# or VB.net file, /// running the compiled test method, translating the compiled test method to JS, /// then running the translated JS and comparing the outputs. /// </summary> /// <param name="filenames">The path to one or more test files. If a test file is named 'Common.cs' it will be linked into all tests.</param> /// <param name="stubbedAssemblies">The paths of assemblies to stub during translation, if any.</param> /// <param name="typeInfo">A TypeInfoProvider to use for type info. Using this parameter is not advised if you use proxies or JSIL.Meta attributes in your tests.</param> /// <param name="testPredicate">A predicate to invoke before running each test. If the predicate returns false, the JS version of the test will not be run (though it will be translated).</param> protected void RunComparisonTests( string[] filenames, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null, Func<string, bool> testPredicate = null, Action<string, string> errorCheckPredicate = null ) { var started = DateTime.UtcNow.Ticks; string commonFile = null; for (var i = 0; i < filenames.Length; i++) { if (filenames[i].Contains("\\Common.")) { commonFile = filenames[i]; break; } } const string keyName = @"Software\Squared\JSIL\Tests\PreviousFailures"; StackFrame callingTest = null; for (int i = 1; i < 10; i++) { callingTest = new StackFrame(i); var method = callingTest.GetMethod(); if ((method != null) && method.GetCustomAttributes(true).Any( (ca) => ca.GetType().FullName == "NUnit.Framework.TestAttribute" )) { break; } else { callingTest = null; } } var previousFailures = new HashSet<string>(); MethodBase callingMethod = null; if ((callingTest != null) && ((callingMethod = callingTest.GetMethod()) != null)) { try { using (var rk = Registry.CurrentUser.CreateSubKey(keyName)) { var names = rk.GetValue(callingMethod.Name) as string; if (names != null) { foreach (var name in names.Split(',')) { previousFailures.Add(name); } } } } catch (Exception ex) { Console.WriteLine("Warning: Could not open registry key: {0}", ex); } } var failureList = new List<string>(); var sortedFilenames = new List<string>(filenames); sortedFilenames.Sort( (lhs, rhs) => { var lhsShort = Path.GetFileNameWithoutExtension(lhs); var rhsShort = Path.GetFileNameWithoutExtension(rhs); int result = (previousFailures.Contains(lhsShort) ? 0 : 1).CompareTo( previousFailures.Contains(rhsShort) ? 0 : 1 ); if (result == 0) result = lhsShort.CompareTo(rhsShort); return result; } ); var asmCache = new AssemblyCache(); foreach (var filename in sortedFilenames) { if (filename == commonFile) continue; bool shouldRunJs = true; if (testPredicate != null) shouldRunJs = testPredicate(filename); Console.WriteLine("// {0} ... ", Path.GetFileName(filename)); try { var testFilenames = new List<string>() { filename }; if (commonFile != null) testFilenames.Add(commonFile); using (var test = new ComparisonTest( EvaluatorPool, testFilenames, Path.Combine( ComparisonTest.TestSourceFolder, ComparisonTest.MapSourceFileToTestFile(filename) ), stubbedAssemblies, typeInfo, asmCache) ) { if (shouldRunJs) { test.Run(); } else { string js; long elapsed; try { var csOutput = test.RunCSharp(new string[0], out elapsed); test.GenerateJavascript(new string[0], out js, out elapsed); Console.WriteLine("ok"); if (errorCheckPredicate != null) { errorCheckPredicate(csOutput, js); } } catch (Exception _exc) { Console.WriteLine("error"); throw; } } } } catch (Exception ex) { failureList.Add(Path.GetFileNameWithoutExtension(filename)); if (ex.Message == "JS test failed") Debug.WriteLine(ex.InnerException); else Debug.WriteLine(ex); } } if (callingMethod != null) { try { using (var rk = Registry.CurrentUser.CreateSubKey(keyName)) rk.SetValue(callingMethod.Name, String.Join(",", failureList.ToArray())); } catch (Exception ex) { Console.WriteLine("Warning: Could not open registry key: {0}", ex); } } var ended = DateTime.UtcNow.Ticks; var elapsedTotalSeconds = TimeSpan.FromTicks(ended - started).TotalSeconds; Console.WriteLine("// Ran {0} test(s) in {1:000.00}s.", sortedFilenames.Count, elapsedTotalSeconds); Assert.AreEqual(0, failureList.Count, String.Format("{0} test(s) failed:\r\n{1}", failureList.Count, String.Join("\r\n", failureList.ToArray())) ); }
protected string GenericIgnoreTest(string fileName, string workingOutput, string jsErrorSubstring, string[] stubbedAssemblies = null) { long elapsed, temp; string generatedJs = null, jsOutput = null; using (var test = new ComparisonTest(EvaluatorPool, fileName, stubbedAssemblies)) { var csOutput = test.RunCSharp(new string[0], out elapsed); Assert.AreEqual(workingOutput, csOutput.Trim()); try { jsOutput = test.RunJavascript(new string[0], out generatedJs, out temp, out elapsed); Assert.Fail("Expected javascript to throw an exception containing the string \"" + jsErrorSubstring + "\"."); } catch (JavaScriptException jse) { if (!jse.ErrorText.Contains(jsErrorSubstring)) { Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); if (jsOutput != null) Console.Error.WriteLine("// JS output: \r\n{0}", jsOutput); throw; } } catch { Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); if (jsOutput != null) Console.Error.WriteLine("// JS output: \r\n{0}", jsOutput); throw; } } return generatedJs; }
protected string GenericTest( string fileName, string csharpOutput, string javascriptOutput, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null ) { long elapsed, temp; string generatedJs = null; using (var test = new ComparisonTest(EvaluatorPool, Portability.NormalizeDirectorySeparators(fileName), stubbedAssemblies, typeInfo)) { var csOutput = test.RunCSharp(new string[0], out elapsed); try { var jsOutput = test.RunJavascript(new string[0], out generatedJs, out temp, out elapsed, MakeConfiguration); Assert.AreEqual(Portability.NormalizeNewLines(csharpOutput), csOutput.Trim(), "Did not get expected output from C# test"); Assert.AreEqual(Portability.NormalizeNewLines(javascriptOutput), jsOutput.Trim(), "Did not get expected output from JavaScript test"); } catch { Console.Error.WriteLine("// Generated JS: \r\n{0}", generatedJs); throw; } } return generatedJs; }
private CompileResult RunComparisonTest( string filename, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null, Action<string, string> errorCheckPredicate = null, List<string> failureList = null, string commonFile = null, bool shouldRunJs = true, AssemblyCache asmCache = null, Func<Configuration> makeConfiguration = null, Action<Exception> onTranslationFailure = null, string compilerOptions = "" ) { CompileResult result = null; Console.WriteLine("// {0} ... ", Path.GetFileName(filename)); filename = Portability.NormalizeDirectorySeparators(filename); try { var testFilenames = new List<string>() { filename }; if (commonFile != null) testFilenames.Add(commonFile); using (var test = new ComparisonTest( EvaluatorPool, testFilenames, Path.Combine( ComparisonTest.TestSourceFolder, ComparisonTest.MapSourceFileToTestFile(filename) ), stubbedAssemblies, typeInfo, asmCache, compilerOptions: compilerOptions )) { result = test.CompileResult; if (shouldRunJs) { test.Run(makeConfiguration: makeConfiguration, onTranslationFailure: onTranslationFailure); } else { string js; long elapsed; try { var csOutput = test.RunCSharp(new string[0], out elapsed); test.GenerateJavascript(new string[0], out js, out elapsed, makeConfiguration, onTranslationFailure); Console.WriteLine("generated"); if (errorCheckPredicate != null) { errorCheckPredicate(csOutput, js); } } catch (Exception) { Console.WriteLine("error"); throw; } } } } catch (Exception ex) { if (ex.Message == "JS test failed") Debug.WriteLine(ex.InnerException); else Debug.WriteLine(ex); if (failureList != null) { failureList.Add(Path.GetFileNameWithoutExtension(filename)); } else throw; } return result; }
private void RunComparisonTest( string filename, string[] stubbedAssemblies = null, TypeInfoProvider typeInfo = null, Action<string, string> errorCheckPredicate = null, List<string> failureList = null, string commonFile = null, bool shouldRunJs = true, AssemblyCache asmCache = null ) { Console.WriteLine("// {0} ... ", Path.GetFileName(filename)); try { var testFilenames = new List<string>() { filename }; if (commonFile != null) testFilenames.Add(commonFile); using (var test = new ComparisonTest( EvaluatorPool, testFilenames, Path.Combine( ComparisonTest.TestSourceFolder, ComparisonTest.MapSourceFileToTestFile(filename) ), stubbedAssemblies, typeInfo, asmCache) ) { if (shouldRunJs) { test.Run(); } else { string js; long elapsed; try { var csOutput = test.RunCSharp(new string[0], out elapsed); test.GenerateJavascript(new string[0], out js, out elapsed); Console.WriteLine("generated"); if (errorCheckPredicate != null) { errorCheckPredicate(csOutput, js); } } catch (Exception _exc) { Console.WriteLine("error"); throw; } } } } catch (Exception ex) { if (ex.Message == "JS test failed") Debug.WriteLine(ex.InnerException); else Debug.WriteLine(ex); if (failureList != null) { failureList.Add(Path.GetFileNameWithoutExtension(filename)); } else throw; } }