Ejemplo n.º 1
0
        /// <summary>
        ///     Sets the value of a specific variable
        /// </summary>
        /// <param name="variableName"></param>
        /// <param name="value"></param>
        public void SetVariableValue(string variableName, Value value)
        {
            EfsAccess.WaitOne();
            try
            {
                if (Runner != null)
                {
                    IVariable variable = EfsSystem.Instance.FindByFullName(variableName) as IVariable;

                    if (variable != null)
                    {
                        Util.DontNotify(() =>
                        {
                            Runner.CacheImpact = new CacheImpact();
                            SyntheticVariableUpdateAction action = new SyntheticVariableUpdateAction(variable,
                                                                                                     value.ConvertBack(variable.Type));
                            VariableUpdate variableUpdate = new VariableUpdate(action, null, null);
                            Runner.EventTimeLine.AddModelEvent(variableUpdate, true);
                            Runner.ClearCaches();
                        });
                    }
                    else
                    {
                        throw new FaultException <EFSServiceFault> (
                                  new EFSServiceFault("Cannot find variable " + variableName),
                                  new FaultReason(new FaultReasonText("Cannot find variable " + variableName)));
                    }
                }
            }
            finally
            {
                EfsAccess.ReleaseMutex();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Handles a double click event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TimeLineControl_DoubleClick(object sender, EventArgs e)
        {
            ModelEvent evt = GetEventUnderMouse();

            VariableUpdate variableUpdate = evt as VariableUpdate;

            if (variableUpdate != null)
            {
                EditorView.Window form = new EditorView.Window();
                TimeLineExpressionableTextChangeHandler handler = new TimeLineExpressionableTextChangeHandler(this,
                                                                                                              variableUpdate.Action);
                form.setChangeHandler(handler);
                GuiUtils.MdiWindow.AddChildWindow(form, DockAreas.Float);
            }

            Expect expect = evt as Expect;

            if (expect != null)
            {
                EditorView.Window form = new EditorView.Window();
                TimeLineExpressionableTextChangeHandler handler = new TimeLineExpressionableTextChangeHandler(this,
                                                                                                              expect.Expectation);
                form.setChangeHandler(handler);
                GuiUtils.MdiWindow.AddChildWindow(form, DockAreas.Float);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     Indicates that an event should be shown
        /// </summary>
        /// <param name="evt"></param>
        /// <returns></returns>
        public bool VisibleEvent(ModelEvent evt)
        {
            bool retVal = true;

            // Check event type
            // ReSharper disable once ConditionIsAlwaysTrueOrFalse
            retVal = retVal && (!(evt is Expect) || Expect);
            retVal = retVal && (!(evt is RuleFired) || RuleFired);

            // Ignore the following internal events
            retVal = retVal && (!(evt is ExpectationStateChange));
            retVal = retVal && (!(evt is SubStepActivated));

            if (retVal)
            {
                // Checks the variable update
                VariableUpdate variableUpdate = evt as VariableUpdate;
                if (variableUpdate != null)
                {
                    if (VariableUpdate)
                    {
                        // Do not filter out variables updates for which the rule is not available
                        // because these updates are related to test steps or external input (using EFS service)
                        if (variableUpdate.Action.RuleCondition != null)
                        {
                            retVal = false;
                            foreach (Variable variable in Variables)
                            {
                                retVal = variableUpdate.Changes.ImpactVariable(variable);
                                if (retVal)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        retVal = false;
                    }
                }
                else
                {
                    // Check event namespace
                    if (evt.NameSpace != null)
                    {
                        retVal = NameSpaces.Contains(evt.NameSpace);
                    }
                }
            }

            // Keep messages that match the regular expression
            if (!Util.isEmpty(RegExp))
            {
                Regex regularExpression = new Regex(RegExp);
                retVal = retVal || regularExpression.IsMatch(evt.Message);
            }

            return(retVal);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///     Handles a double click event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TimeLineControl_DoubleClick(object sender, EventArgs e)
        {
            ModelEvent evt = GetEventUnderMouse();

            VariableUpdate variableUpdate = evt as VariableUpdate;

            if (variableUpdate != null)
            {
                ExplanationPart explain        = variableUpdate.Explanation;
                ExplainBox      explainTextBox = new ExplainBox();
                explainTextBox.SetExplanation(explain);
                GuiUtils.MdiWindow.AddChildWindow(explainTextBox);
            }

            RuleFired rulefired = evt as RuleFired;

            if (rulefired != null)
            {
                ExplanationPart explain        = rulefired.Explanation;
                ExplainBox      explainTextBox = new ExplainBox();
                explainTextBox.SetExplanation(explain);
                GuiUtils.MdiWindow.AddChildWindow(explainTextBox);
            }

            Expect expect = evt as Expect;

            if (expect != null)
            {
                Expectation expectation = expect.Expectation;

                if (expectation != null)
                {
                    ExplanationPart explanation = expect.Explanation;
                    if (explanation == null)
                    {
                        explanation = expectation.Explain;
                    }

                    ExplainBox explainTextBox = new ExplainBox();
                    explainTextBox.SetExplanation(explanation);
                    GuiUtils.MdiWindow.AddChildWindow(explainTextBox);
                }
            }

            ModelInterpretationFailure modelInterpretationFailure = evt as ModelInterpretationFailure;

            if (modelInterpretationFailure != null)
            {
                ExplainBox explainTextBox = new ExplainBox();
                explainTextBox.SetExplanation(modelInterpretationFailure.Explanation);
                GuiUtils.MdiWindow.AddChildWindow(explainTextBox);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        ///     Handles a click event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TimeLineControl_Click(object sender, EventArgs e)
        {
            ModelEvent evt = GetEventUnderMouse();

            RuleFired ruleFired = evt as RuleFired;

            if (ruleFired != null)
            {
                EfsSystem.Instance.Context.SelectElement(ruleFired.RuleCondition, this,
                                                         Context.SelectionCriteria.LeftClick);
            }

            VariableUpdate variableUpdate = evt as VariableUpdate;

            if (variableUpdate != null)
            {
                EfsSystem.Instance.Context.SelectElement(variableUpdate.Action, this,
                                                         Context.SelectionCriteria.LeftClick);
            }

            Expect expect = evt as Expect;

            if (expect != null)
            {
                EfsSystem.Instance.Context.SelectElement(expect.Expectation, this, Context.SelectionCriteria.LeftClick);
            }

            ModelInterpretationFailure failure = evt as ModelInterpretationFailure;

            if (failure != null)
            {
                EfsSystem.Instance.Context.SelectElement(failure.Instance as IModelElement, this,
                                                         Context.SelectionCriteria.LeftClick);
            }

            SubStepActivated subStepActivated = evt as SubStepActivated;

            if (subStepActivated != null)
            {
                EfsSystem.Instance.Context.SelectElement(subStepActivated.SubStep, this,
                                                         Context.SelectionCriteria.LeftClick);
            }

            StepActivation stepActivation = evt as StepActivation;

            if (stepActivation != null)
            {
                EfsSystem.Instance.Context.SelectElement(stepActivation.Step, this, Context.SelectionCriteria.LeftClick);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Provides the color associated to a model event
        /// </summary>
        /// <param name="modelEvent"></param>
        private void SetColor()
        {
            Color color = Color.Brown;

            if (ModelEvent is RuleFired)
            {
                color = Color.Blue;
            }
            else if (ModelEvent is VariableUpdate)
            {
                VariableUpdate update = ModelEvent as VariableUpdate;

                TestCase testCase = Utils.EnclosingFinder <TestCase> .find(update.Action);

                if (testCase != null)
                {
                    color = Color.LightGreen;
                }
                else
                {
                    color = Color.BlanchedAlmond;
                }
            }
            else if (ModelEvent is Expect)
            {
                Expect expect = ModelEvent as Expect;
                switch (expect.State)
                {
                case Expect.EventState.Active:
                    color = Color.Silver;
                    break;

                case Expect.EventState.Fullfilled:
                    color = Color.Gold;
                    break;

                case Expect.EventState.TimeOut:
                    color = Color.Red;
                    break;
                }
            }

            BackColor = color;
        }
Ejemplo n.º 7
0
        /// <summary>
        ///     Positions a substep in the time line
        /// </summary>
        /// <param name="currentTime"></param>
        /// <param name="subStep"></param>
        /// <returns></returns>
        private void PositionSubStep(double currentTime, SubStep subStep)
        {
            SubStepActivated subStepActivated = new SubStepActivated(subStep, null)
            {
                Time = currentTime
            };

            PositionHandler.RegisterEvent(subStepActivated);
            foreach (Action action in subStep.Actions)
            {
                VariableUpdate variableUpdate = new VariableUpdate(action, action, null);
                PositionHandler.RegisterEvent(variableUpdate);
            }
            foreach (Expectation expectation in subStep.Expectations)
            {
                Expect expect = new Expect(expectation, null);
                PositionHandler.RegisterEvent(expect);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        ///     Applies the selected actions and update the system state
        /// </summary>
        /// <param name="activations"></param>
        /// <param name="priority"></param>
        /// <param name="updates">Provides all the updates that have been evaluated</param>
        public void EvaluateActivations(HashSet <Activation> activations, acceptor.RulePriority?priority,
                                        List <VariableUpdate> updates)
        {
            foreach (Activation activation in activations)
            {
                if (activation.RuleCondition.Actions.Count > 0)
                {
                    // Register the fact that a rule has been triggered
                    RuleFired ruleFired = new RuleFired(activation, priority);
                    EventTimeLine.AddModelEvent(ruleFired, true);
                    ExplanationPart changesExplanation = ExplanationPart.CreateSubExplanation(activation.Explanation,
                                                                                              "Changes");

                    // Registers all model updates due to this rule triggering
                    foreach (Action action in activation.RuleCondition.Actions)
                    {
                        if (action.Statement != null)
                        {
                            VariableUpdate variableUpdate = new VariableUpdate(action, activation.Instance, priority);
                            variableUpdate.ComputeChanges(false, this);
                            EventTimeLine.AddModelEvent(variableUpdate, false);
                            ruleFired.AddVariableUpdate(variableUpdate);
                            if (changesExplanation != null)
                            {
                                changesExplanation.SubExplanations.Add(variableUpdate.Explanation);
                            }
                            updates.Add(variableUpdate);
                        }
                        else
                        {
                            action.AddError("Cannot parse action statement");
                        }
                    }
                }
            }

            HandleEnterAndLeaveStateActions(priority, updates);
        }
Ejemplo n.º 9
0
        /// <summary>
        ///     Applies a specific statement on the model
        /// </summary>
        /// <param name="statementText"></param>
        public void ApplyStatement(string statementText)
        {
            EfsAccess.WaitOne();
            try
            {
                if (Runner != null)
                {
                    const bool silent = true;
                    using (Parser parser = new Parser())
                    {
                        Statement statement = parser.Statement(EfsSystem.Instance.Dictionaries[0],
                                                               statementText, silent);

                        if (statement != null)
                        {
                            Util.DontNotify(() =>
                            {
                                Runner.CacheImpact            = new CacheImpact();
                                Action action                 = (Action)acceptor.getFactory().createAction();
                                action.ExpressionText         = statementText;
                                VariableUpdate variableUpdate = new VariableUpdate(action, null, null);
                                Runner.EventTimeLine.AddModelEvent(variableUpdate, true);
                                Runner.ClearCaches();
                            });
                        }
                    }
                }
            }
            catch (Exception)
            {
                // TODO
            }
            finally
            {
                EfsAccess.ReleaseMutex();
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Click!
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void EventControl_Click(object sender, EventArgs e)
        {
            if (ModelEvent is RuleFired)
            {
                if (TimeLine.Window.MDIWindow.DataDictionaryWindow != null)
                {
                    RuleFired ruleFired = ModelEvent as RuleFired;
                    TimeLine.Window.MDIWindow.DataDictionaryWindow.TreeView.Select(ruleFired.RuleCondition);
                }
            }
            else if (ModelEvent is VariableUpdate)
            {
                VariableUpdate variableUpdate = ModelEvent as VariableUpdate;

                if (isDoubleClick())
                {
                    if (variableUpdate != null)
                    {
                        DataDictionary.Interpreter.ExplanationPart explain = variableUpdate.Explanation;
                        ExplainBox explainTextBox = new ExplainBox();
                        explainTextBox.setExplanation(explain);
                        MDIWindow.AddChildWindow(explainTextBox);
                    }
                }

                BaseTreeNode treeNode = null;

                if (TimeLine.Window.MDIWindow.DataDictionaryWindow != null)
                {
                    treeNode = TimeLine.Window.MDIWindow.DataDictionaryWindow.TreeView.Select(variableUpdate.Action);
                }
                if (treeNode == null)
                {
                    if (TimeLine.Window.MDIWindow.TestWindow != null)
                    {
                        TimeLine.Window.MDIWindow.TestWindow.TreeView.Select(variableUpdate.Action);
                    }
                }
            }
            else if (ModelEvent is Expect)
            {
                if (isDoubleClick())
                {
                    DataDictionary.Tests.Expectation expectation = getExpectation();

                    if (expectation != null)
                    {
                        DataDictionary.Interpreter.ExplanationPart explain = expectation.ExpressionTree.Explain();
                        ExplainBox explainTextBox = new ExplainBox();
                        explainTextBox.setExplanation(explain);
                        MDIWindow.AddChildWindow(explainTextBox);
                    }
                }

                if (TimeLine.Window.MDIWindow.TestWindow != null)
                {
                    TimeLine.Window.MDIWindow.TestWindow.TreeView.Select((ModelEvent as Expect).Expectation);
                }
            }

            lastClick = DateTime.Now;
        }
Ejemplo n.º 11
0
        /// <summary>
        ///     Provides the display attributes for a model event
        /// </summary>
        /// <param name="evt"></param>
        /// <returns></returns>
        private EventDisplayAttributes GetDisplayAttributes(ModelEvent evt)
        {
            EventDisplayAttributes retVal = new EventDisplayAttributes(Color.White, new Pen(Color.Black), "<undefined>",
                                                                       null, null, null);

            ModelElement.DontRaiseError(() =>
            {
                Expect expect = evt as Expect;
                if (expect != null)
                {
                    string name = GuiUtils.AdjustForDisplay(ShortName(expect.Expectation.Name),
                                                            _eventSize.Width - 4, BottomFont);

                    switch (expect.State)
                    {
                    case Expect.EventState.Active:
                        retVal = new EventDisplayAttributes(Color.Violet, new Pen(Color.Black), name,
                                                            Images.Images[QuestionMarkImageIndex], NameSpaceImages.Instance.GetImage(expect.Expectation), null);
                        break;

                    case Expect.EventState.Fullfilled:
                        retVal = new EventDisplayAttributes(Color.LightGreen, new Pen(Color.Green), name,
                                                            Images.Images[SuccessImageIndex], NameSpaceImages.Instance.GetImage(expect.Expectation), null);
                        break;

                    case Expect.EventState.TimeOut:
                        retVal = new EventDisplayAttributes(Color.Red, new Pen(Color.DarkRed), name, Images.Images[ErrorImageIndex],
                                                            NameSpaceImages.Instance.GetImage(expect.Expectation), null);
                        break;
                    }

                    if (expect.Expectation.getKind() == acceptor.ExpectationKind.aContinuous)
                    {
                        retVal.TopRightIconImage.Add(Images.Images[CircularArrowIndex]);
                    }
                    if (expect.Expectation.Blocking)
                    {
                        retVal.TopRightIconImage.Add(Images.Images[DownArrowIndex]);
                    }
                }

                ModelInterpretationFailure modelInterpretationFailure = evt as ModelInterpretationFailure;
                if (modelInterpretationFailure != null)
                {
                    string name = GuiUtils.AdjustForDisplay(modelInterpretationFailure.Message,
                                                            _eventSize.Width - 4, BottomFont);

                    retVal = new EventDisplayAttributes(Color.Red, new Pen(Color.DarkRed), name, Images.Images[ErrorImageIndex],
                                                        NameSpaceImages.Instance.GetImage(modelInterpretationFailure.Instance as ModelElement), null);
                }

                RuleFired ruleFired = evt as RuleFired;
                if (ruleFired != null)
                {
                    string name = GuiUtils.AdjustForDisplay(ShortName(ruleFired.RuleCondition.Name),
                                                            _eventSize.Width - 4, BottomFont);

                    retVal = new EventDisplayAttributes(Color.LightBlue, new Pen(Color.Blue), name, null,
                                                        NameSpaceImages.Instance.GetImage(ruleFired.RuleCondition), Images.Images[ToolsImageIndex]);
                }

                VariableUpdate variableUpdate = evt as VariableUpdate;
                if (variableUpdate != null)
                {
                    string name         = variableUpdate.Action.ExpressionText;
                    Image rightIcon     = null;
                    Image rightModifier = null;
                    if (variableUpdate.Action.Statement != null)
                    {
                        name      = variableUpdate.Action.Statement.ShortShortDescription();
                        rightIcon = NameSpaceImages.Instance.GetImage(variableUpdate.Action.Statement.AffectedElement());

                        switch (variableUpdate.Action.Statement.UsageDescription())
                        {
                        case Statement.ModeEnum.Call:
                            rightModifier = Images.Images[CallImageIndex];
                            break;

                        case Statement.ModeEnum.In:
                            rightModifier = Images.Images[InImageIndex];
                            break;

                        case Statement.ModeEnum.InOut:
                            rightModifier = Images.Images[InOutImageIndex];
                            break;

                        case Statement.ModeEnum.Internal:
                            rightModifier = Images.Images[InternalImageIndex];
                            break;

                        case Statement.ModeEnum.Out:
                            rightModifier = Images.Images[OutImageIndex];
                            break;
                        }
                    }
                    name = GuiUtils.AdjustForDisplay(ShortName(name), _eventSize.Width - 4, BottomFont);

                    NameSpace nameSpace = EnclosingFinder <NameSpace> .find(variableUpdate.Action);
                    if (nameSpace == null)
                    {
                        retVal = new EventDisplayAttributes(Color.LightGray, new Pen(Color.Black), name, null, rightIcon,
                                                            rightModifier);
                    }
                    else
                    {
                        retVal = new EventDisplayAttributes(Color.BlanchedAlmond, new Pen(Color.Black), name, null,
                                                            rightIcon, rightModifier);
                    }
                }

                SubStepActivated subStepActivated = evt as SubStepActivated;
                if (subStepActivated != null)
                {
                    retVal = new EventDisplayAttributes(Color.LightGray, new Pen(Color.Black), "SubStep", null, null, null);
                }
            });

            return(retVal);
        }