public bool Run(RecoveryAlgorithm recoveryAlgorithm = RecoveryAlgorithm.Smart, int completionStartPos = -1, string completionPrefix = null) { var project = _file.Project; _file._completionStartPos = completionStartPos; _file._completionPrefix = completionPrefix; _file.ResetCache(); if (_file.Ast == null) { return(false); } var tests = _testFolder == null ? (IEnumerable <TestVm>) new[] { this } : _testFolder.Tests; var files = tests.Select(t => t.File).ToArray(); foreach (var file in files) { file.DeepResetProperties(); } var projectSupport = _file.Ast as IProjectSupport; var compilerMessages = new CompilerMessageList(); var cancellationToken = new CancellationToken(); var filesData = NitraFile.GetEvalPropertiesData(files); if (projectSupport != null) { if (_data == null) { _data = projectSupport.RefreshReferences(cancellationToken, project); } projectSupport.RefreshProject(cancellationToken, filesData, _data); } else if (_testFolder != null) { throw new InvalidOperationException("The '" + _file.Ast.GetType().Name + "' type must implement IProjectSupport, to be used in a multi-file test."); } else { var context = new DependentPropertyEvalContext(); var evalHost = new ProjectEvalPropertiesHost(filesData); evalHost.EvalProperties(context); } foreach (var fileData in filesData) { if (fileData.HasCompilerMessage) { fileData.GetCompilerMessage().TranslateTo(fileData.Ast.Location.Source.File.AstMessages); } } return(true); }
public void CheckGold(RecoveryAlgorithm recoveryAlgorithm) { if (TestSuite.TestState == TestState.Ignored) { return; } var gold = Gold; var parseTree = (ParseTree)_file.GetParseTree(); var prettyPrintResult = parseTree.ToString(PrettyPrintOptions.DebugIndent | PrettyPrintOptions.MissingNodes); PrettyPrintResult = prettyPrintResult; TestState = gold == prettyPrintResult ? TestState.Success : TestState.Failure; }
public bool Run(RecoveryAlgorithm recoveryAlgorithm = RecoveryAlgorithm.Smart, int completionStartPos = -1, string completionPrefix = null) { var project = _file.Project; _file._completionStartPos = completionStartPos; _file._completionPrefix = completionPrefix; _file.ResetCache(); if (_file.Ast == null) { return(false); } var tests = _testFolder == null ? (IEnumerable <TestVm>) new[] { this } : _testFolder.Tests; var files = tests.Select(t => t.File).ToArray(); foreach (var file in files) { file.DeepResetProperties(); } var projectSupport = _file.Ast as IProjectSupport; if (projectSupport != null) { projectSupport.RefreshProject(project); } else if (_testFolder != null) { throw new InvalidOperationException("The '" + _file.Ast.GetType().Name + "' type must implement IProjectSupport, to be used in a multi-file test."); } else { var context = new DependentPropertyEvalContext(); var evalHost = new ProjectEvalPropertiesHost(files); evalHost.EvalProperties(context); } return(true); }
public IParseResult Run([NotNull] string code, [CanBeNull] string gold = null, int completionStartPos = -1, string completionPrefix = null, RecoveryAlgorithm recoveryAlgorithm = RecoveryAlgorithm.Smart) { var source = new SourceSnapshot(code); if (Language.StartRule == null) { return(null); } try { var parseSession = new ParseSession(Language.StartRule, compositeGrammar: Language.CompositeGrammar, completionPrefix: completionPrefix, completionStartPos: completionStartPos, parseToEndOfString: true, dynamicExtensions: DynamicExtensions, statistics: Statistics); switch (recoveryAlgorithm) { case RecoveryAlgorithm.Smart: parseSession.OnRecovery = ParseSession.SmartRecovery; break; case RecoveryAlgorithm.Panic: parseSession.OnRecovery = ParseSession.PanicRecovery; break; case RecoveryAlgorithm.FirstError: parseSession.OnRecovery = ParseSession.FirsrErrorRecovery; break; } var parseResult = parseSession.Parse(source); this.Exception = null; return(parseResult); } catch (Exception ex) { this.Exception = ex; return(null); } }
public IParseResult Run([NotNull] string code, [CanBeNull] string gold = null, int completionStartPos = -1, string completionPrefix = null, RecoveryAlgorithm recoveryAlgorithm = RecoveryAlgorithm.Smart) { var source = new SourceSnapshot(code); if (Language.StartRule == null) return null; try { var parseSession = new ParseSession(Language.StartRule, compositeGrammar: Language.CompositeGrammar, completionPrefix: completionPrefix, completionStartPos: completionStartPos, parseToEndOfString: true, dynamicExtensions: DynamicExtensions, statistics: Statistics); switch (recoveryAlgorithm) { case RecoveryAlgorithm.Smart: parseSession.OnRecovery = ParseSession.SmartRecovery; break; case RecoveryAlgorithm.Panic: parseSession.OnRecovery = ParseSession.PanicRecovery; break; case RecoveryAlgorithm.FirstError: parseSession.OnRecovery = ParseSession.FirsrErrorRecovery; break; } var parseResult = parseSession.Parse(source); this.Exception = null; return parseResult; } catch (Exception ex) { this.Exception = ex; return null; } }