Пример #1
0
        public async Task EvaluateAsync(string rScript)
        {
            VariableSubscription subscription = null;

            // One eval at a time
            await _sem.WaitAsync();

            try {
                _mre.Reset();

                _globalEnv   = null;
                subscription = _variableProvider.Subscribe(0, "base::environment()", OnGlobalEnvironmentEvaluated);

                using (var evaluation = await base.Session.BeginEvaluationAsync()) {
                    await evaluation.EvaluateAsync(rScript);
                }

                if (System.Diagnostics.Debugger.IsAttached)
                {
                    _mre.Wait();
                }
                else
                {
                    if (!_mre.Wait(TimeSpan.FromSeconds(10)))
                    {
                        throw new TimeoutException("Evaluate time out");
                    }
                }
            } finally {
                _variableProvider.Unsubscribe(subscription);
                _sem.Release();
            }
        }
Пример #2
0
        public async Task VariableGrid_ConstructorTest02()
        {
            VisualTreeObject actual = null;

            using (var hostScript = new VariableRHostScript()) {
                using (var script = new ControlTestScript(typeof(VariableGridHost))) {
                    DoIdle(100);

                    var result = await hostScript.EvaluateAsync("grid.test <- matrix(1:10, 2, 5)");

                    EvaluationWrapper wrapper = new EvaluationWrapper(result);

                    DoIdle(2000);

                    wrapper.Should().NotBeNull();

                    UIThreadHelper.Instance.Invoke(() => {
                        var host = (VariableGridHost)script.Control;
                        host.SetEvaluation(wrapper);
                    });

                    DoIdle(1000);

                    actual = VisualTreeObject.Create(script.Control);
                    ViewTreeDump.CompareVisualTrees(_files, actual, "VariableGrid02");
                }
            }
        }
Пример #3
0
        public async Task <DebugEvaluationResult> EvaluateAsync(string rScript)
        {
            // One eval at a time
            await _sem.WaitAsync();

            try {
                var debugSession = await _debugSessionProvider.GetDebugSessionAsync(Session);

                var frames = await debugSession.GetStackFramesAsync();

                var frame = frames.FirstOrDefault(f => f.Index == 0);

                const DebugEvaluationResultFields fields = DebugEvaluationResultFields.Classes
                                                           | DebugEvaluationResultFields.Expression
                                                           | DebugEvaluationResultFields.TypeName
                                                           | (DebugEvaluationResultFields.Repr | DebugEvaluationResultFields.ReprStr)
                                                           | DebugEvaluationResultFields.Dim
                                                           | DebugEvaluationResultFields.Length;
                var result = await frame.EvaluateAsync(rScript, fields);

                var globalResult = await frame.EvaluateAsync("base::environment()", fields);

                _globalEnv = new EvaluationWrapper(globalResult);

                return(result);
            } finally {
                _sem.Release();
            }
        }
Пример #4
0
 private void OnGlobalEnvironmentEvaluated(DebugEvaluationResult result)
 {
     _globalEnv = new EvaluationWrapper(result);
     _mre.Set();
 }