Пример #1
0
        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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
    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;
      }
    }