Пример #1
0
        public void TestClassWithMacroStringMultiSelect()
        {
            var elements = new[] { new ClassWithMacroString(), new ClassWithMacroString() };
            var elems    = AnnotationCollection.Annotate(elements);
            var sv       = elems.GetMember(nameof(ClassWithMacroString.String)).Get <IStringValueAnnotation>();

            sv.Value = "test";
            elems.Write();
            Assert.IsNotNull(sv.Value);
            // Check that multi-edit works.
            foreach (var elem in elements)
            {
                Assert.AreEqual("test", elem.String.ToString());
            }

            // verify that the same MacroPath instance is not being used.
            var elem2 = AnnotationCollection.Annotate(elements[0]);
            var sv2   = elem2.GetMember(nameof(ClassWithMacroString.String)).Get <IStringValueAnnotation>();

            sv2.Value = "test2";
            elem2.Write();

            Assert.AreEqual("test", elements[1].String.ToString());
            Assert.AreEqual("test2", elements[0].String.ToString());
            elems.Read();
            Assert.IsNull(sv.Value);
        }
Пример #2
0
        public void MetadataErrorAnnotation()
        {
            var p = new MetadataPromptObject()
            {
                Resources = new Dut[] { new ErrorMetadataDutResource() }
            };

            var test      = AnnotationCollection.Annotate(p);
            var forwarded = test.Get <IForwardedAnnotations>();
            var member    = forwarded.Forwarded.FirstOrDefault(x =>
                                                               x.Get <IMemberAnnotation>().Member.Name == nameof(ErrorMetadataDutResource.ErrorProperty));

            var error = member.GetAll <IErrorAnnotation>().SelectMany(x => x.Errors).ToArray();

            Assert.AreEqual(1, error.Length);

            void checkValue(string value, int errors)
            {
                member.Get <IStringValueAnnotation>().Value = value;
                test.Write();
                test.Read();

                error = member.GetAll <IErrorAnnotation>().SelectMany(x => x.Errors).ToArray();
                Assert.AreEqual(errors, error.Length);
            }

            for (int i = 0; i < 4; i++)
            {
                checkValue("2.0", 0);     // no errors.
                checkValue("-2.0", 1);    // validation failed.
                checkValue("invalid", 2); // validation failed + parse error.
            }
        }
Пример #3
0
        public void ListOfStringAnnotationTpr()
        {
            var tp             = new TestPlan();
            var stepa          = new ClassWithListOfString();
            var selectedMember = TypeData.GetTypeData(stepa).GetMember(nameof(ClassWithListOfString.Selected));
            var stepb          = new ClassWithListOfString();

            tp.ChildTestSteps.Add(stepa);
            tp.ChildTestSteps.Add(stepb);
            selectedMember.Parameterize(tp, stepa, selectedMember.Name);
            selectedMember.Parameterize(tp, stepb, selectedMember.Name);

            var name = Guid.NewGuid().ToString() + ".TapPlan";

            tp.Save(name);
            var plan2 = new TestPlan();
            var tpr   = new TestPlanReference();

            plan2.ChildTestSteps.Add(tpr);
            tpr.Filepath.Text = name;
            tpr.LoadTestPlan();
            File.Delete(name);

            var member = AnnotationCollection.Annotate(tpr).GetMember(selectedMember.Name);
            var avail  = member.Get <IAvailableValuesAnnotation>();

            Assert.AreEqual(2, avail.AvailableValues.Cast <object>().Count());
        }
Пример #4
0
        public void CyclicScopeTest()
        {
            var seq   = new SequenceStep();
            var delay = new DelayStep()
            {
                DelaySecs = 1.5
            };

            seq.ChildTestSteps.Add(delay);

            var member = TypeData.GetTypeData(delay).GetMember("Time Delay");

            member.Parameterize(seq, delay, "something");

            var value  = AnnotationCollection.Annotate(delay).GetMember("DelaySecs").Get <IObjectValueAnnotation>();
            var value2 = AnnotationCollection.Annotate(seq).GetMember("something").Get <IObjectValueAnnotation>();

            try
            {
                member.Parameterize(delay, seq, "something");
                Assert.Fail("Parameterize should have thrown an exception.");
            }
            catch (ArgumentException)
            {
            }

            // Stack overflow...
            value  = AnnotationCollection.Annotate(delay).GetMember("DelaySecs").Get <IObjectValueAnnotation>();
            value2 = AnnotationCollection.Annotate(seq).GetMember("something").Get <IObjectValueAnnotation>();
            Assert.IsNotNull(value);
            Assert.IsNotNull(value2);
        }
Пример #5
0
        public void TestPlanReferenceAnnotationTest()
        {
            var planname = Guid.NewGuid().ToString() + ".TestPlan";

            {
                var innerplan = new TestPlan();
                var step      = new DelayStep();
                innerplan.Steps.Add(step);
                innerplan.ExternalParameters.Add(step,
                                                 TypeData.GetTypeData(step).GetMember(nameof(DelayStep.DelaySecs)));
                innerplan.Save(planname);
            }
            try
            {
                var outerplan = new TestPlan();
                var tpr       = new TestPlanReference();
                outerplan.Steps.Add(tpr);
                tpr.Filepath.Text = planname;
                tpr.LoadTestPlan();

                var annotation = AnnotationCollection.Annotate(tpr);
                var members    = annotation.Get <IMembersAnnotation>().Members;
                var delaymem   = annotation.GetMember("Time Delay");
                Assert.IsNotNull(delaymem);
            }
            finally
            {
                File.Delete(planname);
            }
        }
Пример #6
0
        public void ScopedInputAnnotationWithSweepTest()
        {
            var sweepStep   = new SweepParameterStep();
            var verdictStep = new VerdictStep();

            sweepStep.ChildTestSteps.Add(verdictStep);
            var ifStep = new IfStep();

            sweepStep.ChildTestSteps.Add(ifStep);
            var member = TypeData.GetTypeData(ifStep).GetMember(nameof(IfStep.InputVerdict));
            var parameterizedMember = member.Parameterize(sweepStep, ifStep, member.Name);

            var annotation       = AnnotationCollection.Annotate(sweepStep);
            var memberAnnotation = annotation.GetMember(nameof(sweepStep.SweepValues));
            var col = memberAnnotation.Get <ICollectionAnnotation>();

            col.AnnotatedElements = new[] { col.NewElement() };
            annotation.Write();
            annotation.Read();
            var member2Annotation = col.AnnotatedElements.FirstOrDefault().GetMember(parameterizedMember.Name);
            var avail             = member2Annotation.Get <IAvailableValuesAnnotation>();

            Assert.IsNotNull(avail);

            // available values: None, verdict from itself, verdict from SetVerdict.

            Assert.AreEqual(3, avail.AvailableValues.Cast <object>().Count());
            var strings = avail.AvailableValues.Cast <object>().Select(x => x.ToString()).ToArray();

            Assert.IsTrue(strings.Contains($"Verdict from {ifStep.GetFormattedName()}"));
            Assert.IsTrue(strings.Contains("None"));
            Assert.IsTrue(strings.Contains($"Verdict from {verdictStep.GetFormattedName()}"));
        }
Пример #7
0
        public void ScopedInputAnnotationWithSweepTestSerialized()
        {
            var plan      = new TestPlan();
            var sweepStep = new SweepParameterStep();

            plan.Steps.Add(sweepStep);
            var verdictStep = new VerdictStep();

            sweepStep.ChildTestSteps.Add(verdictStep);
            var ifStep = new IfStep();

            sweepStep.ChildTestSteps.Add(ifStep);
            var member = TypeData.GetTypeData(ifStep).GetMember(nameof(IfStep.InputVerdict));
            var parameterizedMember = member.Parameterize(sweepStep, ifStep, member.Name);

            var annotation       = AnnotationCollection.Annotate(sweepStep);
            var memberAnnotation = annotation.GetMember(nameof(sweepStep.SweepValues));
            var col = memberAnnotation.Get <ICollectionAnnotation>();

            col.AnnotatedElements = new[] { col.NewElement() };
            annotation.Write();
            annotation.Read();
            var sweepValuesMember = TypeData.GetTypeData(sweepStep).GetMember(nameof(sweepStep.SweepValues));

            sweepValuesMember.Parameterize(plan, sweepStep, "SweepValues");
            var planstr = plan.SerializeToString();
            var plan2   = Utils.DeserializeFromString <TestPlan>(planstr);
            var ext     = plan2.ExternalParameters.Get("SweepValues");

            Assert.IsNotNull(ext);
        }
Пример #8
0
        public void SweepLoopEnabledTest()
        {
            var plan  = new TestPlan();
            var sweep = new SweepLoop();
            var prog  = new ProcessStep();

            plan.ChildTestSteps.Add(sweep);
            sweep.ChildTestSteps.Add(prog);

            sweep.SweepParameters.Add(new SweepParam(new [] { TypeData.FromType(prog.GetType()).GetMember(nameof(ProcessStep.RegularExpressionPattern)) }));

            var a = AnnotationCollection.Annotate(sweep);

            a.Read();
            var a2   = a.GetMember(nameof(SweepLoop.SweepParameters));
            var col  = a2.Get <ICollectionAnnotation>();
            var new1 = col.NewElement();

            col.AnnotatedElements = col.AnnotatedElements.Append(col.NewElement(), new1);

            var enabledmem = new1.Get <IMembersAnnotation>().Members.Last();
            var boolmember = enabledmem.Get <IMembersAnnotation>().Members.First();
            var val        = boolmember.Get <IObjectValueAnnotation>();

            val.Value = true;

            a.Write();

            var sweepParam = sweep.SweepParameters.FirstOrDefault();
            var en         = (Enabled <string>)sweepParam.Values[1];

            Assert.IsTrue(en.IsEnabled); // from val.Value = true.
        }
Пример #9
0
        public void ScopedInputAnnotationTest()
        {
            var seqStep     = new SequenceStep();
            var verdictStep = new VerdictStep();

            seqStep.ChildTestSteps.Add(verdictStep);
            var ifStep = new IfStep();

            seqStep.ChildTestSteps.Add(ifStep);
            var member = TypeData.GetTypeData(ifStep).GetMember(nameof(IfStep.InputVerdict));
            var parameterizedMember = member.Parameterize(seqStep, ifStep, member.Name);

            var annotation       = AnnotationCollection.Annotate(seqStep);
            var memberAnnotation = annotation.GetMember(parameterizedMember.Name);
            var avail            = memberAnnotation.Get <IAvailableValuesAnnotation>();

            Assert.IsNotNull(avail);

            // available values: None, verdict from itself, verdict from SetVerdict.

            Assert.AreEqual(3, avail.AvailableValues.Cast <object>().Count());
            var strings = avail.AvailableValues.Cast <object>().Select(x => x.ToString()).ToArray();

            Assert.IsTrue(strings.Contains($"Verdict from {ifStep.GetFormattedName()}"));
            Assert.IsTrue(strings.Contains("None"));
            Assert.IsTrue(strings.Contains($"Verdict from {verdictStep.GetFormattedName()}"));
        }
Пример #10
0
            public void TestNameInputOutputType()
            {
                GenerateOutputStep outputStep = new GenerateOutputStep();

                inputStep = new HandleInputStep();
                var plan = new TestPlan();

                plan.ChildTestSteps.Add(outputStep);
                plan.ChildTestSteps.Add(inputStep);

                var annotation      = AnnotationCollection.Annotate(inputStep);
                var inputAnnotation = annotation.GetMember(nameof(HandleInputStep.InputBoolArray));

                SetOutputProperty(inputAnnotation);
                inputAnnotation = annotation.GetMember(nameof(HandleInputStep.InputDouble));
                SetOutputProperty(inputAnnotation);
                inputAnnotation = annotation.GetMember(nameof(HandleInputStep.InputDoubleArray));
                SetOutputProperty(inputAnnotation);
                inputAnnotation = annotation.GetMember(nameof(HandleInputStep.InputString));
                SetOutputProperty(inputAnnotation);
                inputAnnotation = annotation.GetMember(nameof(HandleInputStep.InputStringArray));
                SetOutputProperty(inputAnnotation);
                inputAnnotation = annotation.GetMember(nameof(HandleInputStep.InputStringList));
                SetOutputProperty(inputAnnotation);

                annotation.Write(inputStep);

                AssertFormatName("{Input Bool Array}", "False, True");
                AssertFormatName("{Input Double}", "1");
                AssertFormatName("{Input Double Array}", "1, 2.2");
                AssertFormatName("{Input String}", "Something");
                AssertFormatName("{Input String Array}", "tom, dick");
                AssertFormatName("{Input String List}", "One, Two, Three");
            }
Пример #11
0
        public void ScopeStepTest()
        {
            var diag = new DialogStep()
            {
                UseTimeout = true
            };
            var    diag2         = new DialogStep();
            var    scope         = new SequenceStep();
            string parameterName = "Scope\"" + DisplayAttribute.GroupSeparator + "Title"; // name intentionally weird to mess with the serializer.

            scope.ChildTestSteps.Add(diag);
            scope.ChildTestSteps.Add(diag2);
            var member = TypeData.GetTypeData(diag).GetMember("Title");

            member.Parameterize(scope, diag, parameterName);
            member.Parameterize(scope, diag2, parameterName);
            TypeData.GetTypeData(diag).GetMember("Timeout").Parameterize(scope, diag, "Group\\The Timeout");

            var annotation  = AnnotationCollection.Annotate(scope);
            var titleMember = annotation.GetMember(parameterName);

            titleMember.Get <IStringValueAnnotation>().Value = "New title";
            annotation.Write();
            Assert.AreEqual("New title", diag.Title);
            Assert.AreEqual("New title", diag2.Title);

            var timeoutMember = annotation.GetMember("Group\\The Timeout");

            Assert.IsFalse(timeoutMember.Get <IAccessAnnotation>().IsReadOnly);
            Assert.AreEqual("Group", TypeData.GetTypeData(scope).GetMember("Group\\The Timeout").GetDisplayAttribute().Group[0]);

            var plan = new TestPlan();

            plan.Steps.Add(scope);
            var str          = new TapSerializer().SerializeToString(plan);
            var plan2        = (TestPlan) new TapSerializer().DeserializeFromString(str);
            var scope2       = plan2.Steps[0];
            var annotation2  = AnnotationCollection.Annotate(scope2);
            var titleMember2 = annotation2.GetMember(parameterName);

            Assert.IsNotNull(titleMember2);
            titleMember2.Get <IStringValueAnnotation>().Value = "New Title 2";
            annotation2.Write();
            foreach (var step in scope2.ChildTestSteps.Cast <DialogStep>())
            {
                Assert.AreEqual(step.Title, "New Title 2");
            }

            var forwardedMember = (ParameterMemberData)TypeData.GetTypeData(scope2).GetMember(parameterName);

            Assert.IsNotNull(forwardedMember);

            member.Unparameterize(forwardedMember, scope2.ChildTestSteps[0]);
            Assert.IsNotNull(TypeData.GetTypeData(scope2).GetMember(parameterName));
            member.Unparameterize(forwardedMember, scope2.ChildTestSteps[1]);
            Assert.IsNull(TypeData.GetTypeData(scope2).GetMember(parameterName)); // last 'Title' removed.
        }
Пример #12
0
        public void ListOfStringAnnotation()
        {
            var obj     = new ClassWithListOfString();
            var a       = AnnotationCollection.Annotate(obj);
            var member  = a.GetMember(nameof(ClassWithListOfString.List));
            var col     = member.Get <ICollectionAnnotation>();
            var newelem = col.NewElement();

            Assert.IsTrue(newelem.Get <IReflectionAnnotation>().ReflectionInfo.DescendsTo(typeof(string)));
            Assert.IsNotNull(newelem.Get <IObjectValueAnnotation>().Value);
        }
Пример #13
0
        public void TestMultiSelectCallMethodAnnotation()
        {
            var elements   = new[] { new ClassWithMethodAnnotation(), new ClassWithMethodAnnotation() };
            var annotation = AnnotationCollection.Annotate(elements);
            var method     = annotation.GetMember(nameof(ClassWithMethodAnnotation.CallableMethod)).Get <IMethodAnnotation>();

            method.Invoke();
            foreach (var elem in elements)
            {
                Assert.AreEqual(1, elem.TimesCalled);
            }
        }
Пример #14
0
        public void SweepLoopRange2Test()
        {
            var plan       = new TestPlan();
            var sweep      = new SweepParameterRangeStep();
            var numberstep = new ScopeTestStep();

            plan.ChildTestSteps.Add(sweep);
            sweep.ChildTestSteps.Add(numberstep);
            var member = TypeData.GetTypeData(numberstep).GetMember("A");

            member.Parameterize(sweep, numberstep, "A");
            sweep.SelectedParameters = Enumerable.Empty <ParameterMemberData>().ToList();
            Assert.AreEqual(0, sweep.SelectedParameters.Count());
            {
                var a           = AnnotationCollection.Annotate(sweep);
                var m           = a.GetMember(nameof(SweepParameterRangeStep.SelectedParameters));
                var sweptMember = a.GetMember("A");
                Assert.IsTrue(sweptMember.Get <IEnabledAnnotation>().IsEnabled);
                var ms    = m.Get <IMultiSelectAnnotationProxy>();
                var avail = m.Get <IAvailableValuesAnnotationProxy>();
                ms.SelectedValues = avail.AvailableValues;
                a.Write();
                sweptMember = a.GetMember("A");
                Assert.IsFalse(sweptMember.Get <IEnabledAnnotation>().IsEnabled);
            }

            Assert.AreEqual(1, sweep.SelectedParameters.Count());


            sweep.SweepStart  = 1;
            sweep.SweepEnd    = 10;
            sweep.SweepPoints = 10;

            Assert.IsTrue(string.IsNullOrEmpty(sweep.Error));
            plan.Execute();

            Assert.IsTrue(Enumerable.Range(1, 10).SequenceEqual(numberstep.Collection));

            {
                var sweep2 = new SweepLoopRange();
                plan.ChildTestSteps.Add(sweep2);

                // verify that sweep Behavior selected value can be displayed.
                var annotation       = AnnotationCollection.Annotate(sweep);
                var mem              = annotation.GetMember(nameof(SweepParameterRangeStep.SweepBehavior));
                var proxy            = mem.Get <IAvailableValuesAnnotationProxy>();
                var selectedBehavior = proxy.SelectedValue.Get <IStringReadOnlyValueAnnotation>();
                Assert.AreEqual("Linear", selectedBehavior.Value);
            }
        }
Пример #15
0
        public void TestBreakConditionsLocked()
        {
            var plan = new TestPlan();
            var a    = AnnotationCollection.Annotate(plan);
            var mem  = a.GetMember("BreakConditions");

            Assert.IsFalse(mem.Get <IAccessAnnotation>().IsReadOnly);
            plan.Locked = true;
            a.Read();
            Assert.IsTrue(mem.Get <IAccessAnnotation>().IsReadOnly);
            plan.Locked = false;
            a.Read();
            Assert.IsFalse(mem.Get <IAccessAnnotation>().IsReadOnly);
        }
Пример #16
0
        public void EnabledAnnotated()
        {
            var step   = new ProcessStep();
            var a      = AnnotationCollection.Annotate(step);
            var x      = a.GetMember(nameof(step.RegularExpressionPattern));
            var str    = x.GetMember("Value");
            var strval = str.Get <IStringValueAnnotation>();
            var v1     = strval.Value.ToString();

            Assert.AreEqual("(.*)", v1);
            step.RegularExpressionPattern.Value = "test";
            a.Read();
            var v2 = strval.Value;

            Assert.AreEqual("test", v2);
        }
Пример #17
0
            public void RequestUserInput(object dataObject, TimeSpan Timeout, bool modal)
            {
                var datas        = AnnotationCollection.Annotate(dataObject);
                var selectedName = datas.GetMember("SelectedName");

                selectedName.Get <IStringValueAnnotation>().Value = SelectName;

                var scope  = datas.GetMember("Scope");
                var avail  = scope.Get <IAvailableValuesAnnotationProxy>();
                var values = avail.AvailableValues.ToArray();

                avail.SelectedValue = avail.AvailableValues.First(); // sequence step!
                Assert.IsTrue(values.Length > 0);
                datas.Write();

                WasInvoked = true;
            }
Пример #18
0
        public void AnnotatedFormattedName()
        {
            // both annotating the step itself and TestStep.Name should give the same GetFormatted read-only string.

            var delay = new DelayStep()
            {
                DelaySecs = 0.1, Name = "Delay: {Time Delay}"
            };
            var annotation    = AnnotationCollection.Annotate(delay);
            var formattedName = annotation.Get <IStringReadOnlyValueAnnotation>().Value;

            Assert.AreEqual("Delay: 0.1 s", formattedName);

            var formattedName2 = annotation.GetMember(nameof(TestStep.Name)).Get <IStringReadOnlyValueAnnotation>().Value;

            Assert.AreEqual("Delay: 0.1 s", formattedName2);
        }
Пример #19
0
        public void MenuAnnotationTest2()
        {
            var currentUserInterface = UserInput.Interface;
            var menuInterface        = new MenuTestUserInterface();

            UserInput.SetInterface(menuInterface);
            try
            {
                var plan  = new TestPlan();
                var delay = new DelayStep();
                plan.Steps.Add(delay);

                { // basic functionalities test
                    var member = AnnotationCollection.Annotate(delay).GetMember(nameof(DelayStep.DelaySecs));
                    var menu   = member.Get <MenuAnnotation>();
                    var items  = menu.MenuItems;

                    var icons = items.ToLookup(item =>
                                               item.Get <IIconAnnotation>()?.IconName ?? "");
                    var parameterizeOnTestPlan = icons[IconNames.ParameterizeOnTestPlan].First();
                    Assert.IsNotNull(parameterizeOnTestPlan);

                    // invoking this method should
                    var method = parameterizeOnTestPlan.Get <IMethodAnnotation>();
                    method.Invoke();
                    Assert.IsNotNull(plan.ExternalParameters.Get("Parameters \\ Time Delay"));

                    member = AnnotationCollection.Annotate(delay).GetMember(nameof(DelayStep.DelaySecs));
                    menu   = member.Get <MenuAnnotation>();
                    items  = menu.MenuItems;

                    icons = items.ToLookup(item =>
                                           item.Get <IIconAnnotation>()?.IconName ?? "");
                    parameterizeOnTestPlan = icons[IconNames.ParameterizeOnTestPlan].First();
                    Assert.IsNotNull(parameterizeOnTestPlan);

                    // This fails, which it should not.
                    Assert.IsFalse(parameterizeOnTestPlan.Get <IEnabledAnnotation>().IsEnabled);
                }
            }
            finally
            {
                UserInput.SetInterface(currentUserInterface as IUserInputInterface);
            }
        }
Пример #20
0
            public void RequestUserInput(object dataObject, TimeSpan Timeout, bool modal)
            {
                var datas        = AnnotationCollection.Annotate(dataObject);
                var selectedName = datas.GetMember("Output");
                var avail        = selectedName.Get <IAvailableValuesAnnotationProxy>();

                avail.SelectedValue = avail.AvailableValues.First(x => (x.Source.ToString().Contains(SelectName)));

                var response     = datas.GetMember("Response");
                var availRespons = response.Get <IAvailableValuesAnnotationProxy>();

                availRespons.SelectedValue =
                    availRespons.AvailableValues.FirstOrDefault(x => x.Source.ToString().Contains("Cancel") == false);

                datas.Write();

                WasInvoked = true;
            }
Пример #21
0
        public void ListOfEnumAnnotation()
        {
            var obj        = new ListOfEnumAnnotationClass();
            var annotation = AnnotationCollection.Annotate(obj);

            Assert.AreEqual(5, TypeData.GetTypeData(obj).GetMembers().Count());

            foreach (var member in TypeData.GetTypeData(obj).GetMembers())
            {
                int initCount        = (member.GetValue(obj) as IList).Count;
                var memberAnnotation = annotation.GetMember(member.Name);
                var collection       = memberAnnotation.Get <ICollectionAnnotation>();
                collection.AnnotatedElements = collection.AnnotatedElements.Append(collection.NewElement());
                annotation.Write();
                int finalCount = (TypeData.GetTypeData(obj).GetMember(member.Name).GetValue(obj) as IList).Count;
                Assert.IsTrue(initCount == finalCount - 1);
            }
        }
Пример #22
0
        public void TestPlanReferenceNameTest()
        {
            var step = new DelayStep();
            var testPlanReference = new TestPlanReference();
            var repeatStep        = new RepeatStep();

            repeatStep.ChildTestSteps.Add(testPlanReference);
            var plan = new TestPlan();

            plan.ChildTestSteps.Add(step);
            plan.ChildTestSteps.Add(repeatStep);

            var mem = AnnotationCollection.Annotate(repeatStep).Get <IMembersAnnotation>().Members
                      .FirstOrDefault(x => x.Get <IMemberAnnotation>().Member.Name == nameof(RepeatStep.TargetStep));
            var avail        = mem.Get <IAvailableValuesAnnotationProxy>().AvailableValues;
            var availStrings = avail.Select(x => x.Get <IStringReadOnlyValueAnnotation>().Value).ToArray();

            Assert.IsTrue(availStrings.Contains(step.GetFormattedName()));
            Assert.IsTrue(availStrings.Contains(testPlanReference.GetFormattedName()));
        }
Пример #23
0
        public void ListOfStringAnnotation2()
        {
            var obj          = new ClassWithListOfString();
            var targetObject = new SequenceStep();
            var obj2         = new ClassWithListOfString();

            targetObject.ChildTestSteps.Add(obj);
            targetObject.ChildTestSteps.Add(obj2);
            obj2.List.Add("C");
            var selectedMember = TypeData.GetTypeData(obj).GetMember(nameof(ClassWithListOfString.Selected));

            selectedMember.Parameterize(targetObject, obj, selectedMember.Name);
            selectedMember.Parameterize(targetObject, obj2, selectedMember.Name);

            // TODO:
            var b     = AnnotationCollection.Annotate(targetObject);
            var avail = b.GetMember(selectedMember.Name).Get <IAvailableValuesAnnotation>();

            Assert.AreEqual(2, avail.AvailableValues.Cast <object>().Count());
        }
Пример #24
0
        public void RemoveFromFixedSizeAnnotation()
        {
            var obj        = new ArrayAnnotationClass();
            var annotation = AnnotationCollection.Annotate(obj);

            Assert.AreEqual(5, TypeData.GetTypeData(obj).GetMembers().Count());

            foreach (var member in TypeData.GetTypeData(obj).GetMembers())
            {
                int initCount        = (member.GetValue(obj) as IList).Count;
                var memberAnnotation = annotation.GetMember(member.Name);
                var collection       = memberAnnotation.Get <ICollectionAnnotation>();

                collection.AnnotatedElements = collection.AnnotatedElements
                                               .Take(collection.AnnotatedElements.Count() - 1).ToList();

                annotation.Write();
                int finalCount = (TypeData.GetTypeData(obj).GetMember(member.Name).GetValue(obj) as IList).Count;
                Assert.IsTrue(initCount == finalCount + 1);
            }
        }
Пример #25
0
        public void TestMenuAnnotationForInputOutputRelations()
        {
            var userInput = UserInput.GetInterface();
            var request   = new SelectAssignmentFromAnnotationMenu();

            UserInput.SetInterface(request);
            try
            {
                var step1 = new OutputInput {
                    Output = 5, Input = 5, Name = "Step 1"
                };
                var step2 = new OutputInput {
                    ExpectedInput = 5, CheckExpectedInput = true, Name = "Step 2"
                };
                var step3 = new OutputInput {
                    ExpectedInput = 5, CheckExpectedInput = true, Name = "Step 3"
                };
                var plan = new TestPlan();
                plan.ChildTestSteps.AddRange(new[] { step1, step2, step3 });

                var menu = AnnotationCollection.Annotate(step2).GetMember(nameof(OutputInput.Input))
                           .Get <MenuAnnotation>();
                request.SelectName = "Step 1";
                menu.MenuItems.First(x => x.Get <IconAnnotationAttribute>().IconName == IconNames.AssignOutput).Get <IMethodAnnotation>().Invoke();
                request.SelectName = "Step 2";
                menu = AnnotationCollection.Annotate(step3).GetMember(nameof(OutputInput.Input))
                       .Get <MenuAnnotation>();
                menu.MenuItems.First(x => x.Get <IconAnnotationAttribute>().IconName == IconNames.AssignOutput).Get <IMethodAnnotation>().Invoke();

                var run = plan.Execute();
                Assert.AreEqual(Verdict.Pass, run.Verdict);
                Assert.IsTrue(request.WasInvoked);
            }
            finally
            {
                UserInput.SetInterface(userInput);
            }
        }
Пример #26
0
        private void PrintExternalParameters(TraceSource log)
        {
            var annotation = AnnotationCollection.Annotate(Plan).Get <IMembersAnnotation>();

            log.Info("Listing {0} External Test Plan Parameters:", Plan.ExternalParameters.Entries.Count);
            foreach (var member in annotation.Members)
            {
                if (member.Get <IMemberAnnotation>()?.Member is ParameterMemberData param)
                {
                    var    multiValues = member.Get <IMultiSelectAnnotationProxy>()?.SelectedValues;
                    string printStr    = "";
                    if (multiValues != null)
                    {
                        foreach (var val in multiValues)
                        {
                            printStr += string.Format("{0} | ", val.Get <IStringReadOnlyValueAnnotation>()?.Value ?? val.Get <IObjectValueAnnotation>()?.Value?.ToString() ?? "");
                        }
                        printStr = printStr.Remove(printStr.Length - 3);    // Remove trailing delimiter
                    }
                    else
                    {
                        printStr = member.Get <IStringReadOnlyValueAnnotation>()?.Value ?? member.Get <IObjectValueAnnotation>()?.Value?.ToString();
                    }

                    log.Info("  {0} = {1}", param.Name, printStr);

                    if (member.Get <IAvailableValuesAnnotationProxy>() is IAvailableValuesAnnotationProxy avail)
                    {
                        log.Info("    Available Values:");
                        foreach (var val in avail.AvailableValues ?? new AnnotationCollection[0])
                        {
                            log.Info("      {0}", val.Get <IStringReadOnlyValueAnnotation>()?.Value ?? val.Get <IObjectValueAnnotation>()?.Value?.ToString() ?? "");
                        }
                    }
                }
            }
        }
Пример #27
0
        public void SweepLoopDisabledMembersOnMultiSelect()
        {
            var plan        = new TestPlan();
            var sweep       = new SweepParameterRangeStep();
            var sweep2      = new SweepParameterRangeStep();
            var numberstep  = new ScopeTestStep();
            var numberstep2 = new ScopeTestStep();

            plan.ChildTestSteps.Add(sweep);
            plan.ChildTestSteps.Add(sweep2);
            sweep.ChildTestSteps.Add(numberstep);
            sweep2.ChildTestSteps.Add(numberstep2);
            var member = TypeData.GetTypeData(numberstep).GetMember("A");

            member.Parameterize(sweep, numberstep, "A");
            member.Parameterize(sweep2, numberstep2, "A");
            sweep.SelectedParameters = Enumerable.Empty <ParameterMemberData>().ToList();
            Assert.AreEqual(0, sweep.SelectedParameters.Count());
            {
                var a           = AnnotationCollection.Annotate(sweep);
                var m           = a.GetMember(nameof(SweepParameterRangeStep.SelectedParameters));
                var sweptMember = a.GetMember("A");
                Assert.IsTrue(sweptMember.Get <IEnabledAnnotation>().IsEnabled);
                var ms    = m.Get <IMultiSelectAnnotationProxy>();
                var avail = m.Get <IAvailableValuesAnnotationProxy>();
                ms.SelectedValues = avail.AvailableValues;
                a.Write();
                sweptMember = a.GetMember("A");
                Assert.IsFalse(sweptMember.Get <IEnabledAnnotation>().IsEnabled);
            }
            {
                var a        = AnnotationCollection.Annotate(new object[] { sweep, sweep2 });
                var amem     = a.GetMember("A");
                var ienabled = amem.Get <IEnabledAnnotation>();
                Assert.IsFalse(ienabled.IsEnabled);
            }
        }
Пример #28
0
        public void TestPlanAnnotated()
        {
            var plan = new TestPlan();
            var step = new DelayStep();

            plan.ChildTestSteps.Add(step);
            var stepType = TypeData.GetTypeData(step);
            var mem      = stepType.GetMember(nameof(DelayStep.DelaySecs));

            mem.Parameterize(plan, step, "delay");

            var a       = AnnotationCollection.Annotate(plan);
            var members = a.Get <IMembersAnnotation>().Members;

            bool filterCol(AnnotationCollection col)
            {
                if (col.Get <IAccessAnnotation>() is IAccessAnnotation access)
                {
                    if (access.IsVisible == false)
                    {
                        return(false);
                    }
                }

                var m = col.Get <IMemberAnnotation>().Member;

                var browsable = m.GetAttribute <BrowsableAttribute>();

                // Browsable overrides everything
                if (browsable != null)
                {
                    return(browsable.Browsable);
                }

                var xmlIgnore = m.GetAttribute <XmlIgnoreAttribute>();

                if (xmlIgnore != null)
                {
                    return(false);
                }

                if (m.HasAttribute <OutputAttribute>())
                {
                    return(true);
                }
                if (!m.Writable || !m.Readable)
                {
                    return(false);
                }
                return(true);
            }

            members = members.Where(filterCol).ToArray();
            // Name, delay
            Assert.AreEqual(members.Count(), 4);

            AnnotationCollection getMember(string name) => members.FirstOrDefault(x => x.Get <IMemberAnnotation>().Member.Name == name);

            var nameMem = getMember(nameof(TestPlan.Name));

            Assert.IsNotNull(nameMem);
            Assert.IsTrue(nameMem.Get <IAccessAnnotation>().IsReadOnly);
            var delayMember = getMember("delay");

            Assert.IsNotNull(delayMember);
            Assert.IsFalse(delayMember.Get <IAccessAnnotation>().IsReadOnly);
            var lockedMember = getMember(nameof(TestPlan.Locked));

            Assert.IsNotNull(lockedMember);
            Assert.IsFalse(lockedMember.Get <IAccessAnnotation>().IsReadOnly);
            var breakConditionsMember = getMember("BreakConditions");

            Assert.IsNotNull(breakConditionsMember);
            var en = breakConditionsMember.GetMember("IsEnabled");

            en.Get <IObjectValueAnnotation>().Value = true;
            en.Write();
            a.Write();

            var descr = AnnotationCollection.Annotate(step).GetMember("BreakConditions").GetMember("Value")
                        .Get <IValueDescriptionAnnotation>().Describe();

            Assert.AreEqual("Break on Error (inherited from test plan).", descr);

            {
                var stepAnnotation = AnnotationCollection.Annotate(step);
                var enabled        = stepAnnotation.GetMember("BreakConditions").GetMember("IsEnabled").Get <IObjectValueAnnotation>();
                enabled.Value = true;
                //stepAnnotation.Write();
                var value = stepAnnotation.GetMember("BreakConditions").GetMember("Value").Get <IObjectValueAnnotation>();
                var thing = stepAnnotation.GetMember("BreakConditions").GetMember("Value");
                var proxy = thing.Get <IMultiSelectAnnotationProxy>();
                var sel   = proxy.SelectedValues.ToArray();
                value.Value = BreakCondition.BreakOnInconclusive;
                stepAnnotation.Write();
                var descr2 = stepAnnotation.GetMember("BreakConditions").GetMember("Value")
                             .Get <IValueDescriptionAnnotation>().Describe();
            }
        }
Пример #29
0
        void IUserInputInterface.RequestUserInput(object dataObject, TimeSpan Timeout, bool modal)
        {
            if (readerThread == null)
            {
                lock (readerLock)
                {
                    if (readerThread == null)
                    {
                        readerThread = TapThread.Start(() =>
                        {
                            while (true)
                            {
                                lines.Add(Console.ReadLine());
                            }
                        }, "Console Reader");
                    }
                }
            }
            DateTime TimeoutTime;

            if (Timeout == TimeSpan.MaxValue)
            {
                TimeoutTime = DateTime.MaxValue;
            }
            else
            {
                TimeoutTime = DateTime.Now + Timeout;
            }

            if (Timeout >= new TimeSpan(0, 0, 0, 0, int.MaxValue))
            {
                Timeout = new TimeSpan(0, 0, 0, 0, -1);
            }
            do
            {
                if (platforDialogMutex.WaitOne(Timeout))
                {
                    break;
                }
                if (DateTime.Now >= TimeoutTime)
                {
                    throw new TimeoutException("Request User Input timed out");
                }
            } while (true);

            try
            {
                Log.Flush();
                var a    = AnnotationCollection.Annotate(dataObject);
                var mems = a.Get <IMembersAnnotation>()?.Members;

                if (mems == null)
                {
                    return;
                }
                mems = mems.Concat(a.Get <IForwardedAnnotations>()?.Forwarded ?? Array.Empty <AnnotationCollection>());
                var title = TypeData.GetTypeData(dataObject)?.GetMember("Name")?.GetValue(dataObject) as string;
                if (string.IsNullOrWhiteSpace(title) == false)
                {
                    Console.WriteLine(title);
                }
                bool isBrowsable(IMemberData m)
                {
                    var browsable = m.GetAttribute <System.ComponentModel.BrowsableAttribute>();

                    // Browsable overrides everything
                    if (browsable != null)
                    {
                        return(browsable.Browsable);
                    }

                    if (m is IMemberData mem)
                    {
                        if (m.HasAttribute <OutputAttribute>())
                        {
                            return(true);
                        }
                        if (!mem.Writable || !mem.Readable)
                        {
                            return(false);
                        }
                        return(true);
                    }
                    return(false);
                }
                foreach (var _message in mems)
                {
                    var mem = _message.Get <IMemberAnnotation>()?.Member;
                    if (mem != null)
                    {
                        if (!isBrowsable(mem))
                        {
                            continue;
                        }
                    }
                    log.Flush();
                    var str = _message.Get <IStringValueAnnotation>();
                    if (str == null)
                    {
                        continue;
                    }
                    var name = _message.Get <DisplayAttribute>()?.Name;

start:
                    var isVisible = _message.Get <IAccessAnnotation>()?.IsVisible ?? true;
                    if (!isVisible)
                    {
                        continue;
                    }


                    var isReadOnly = _message.Get <IAccessAnnotation>()?.IsReadOnly ?? false;
                    if (isReadOnly)
                    {
                        Console.WriteLine($"{str.Value}");
                        continue;
                    }

                    var           proxy       = _message.Get <IAvailableValuesAnnotationProxy>();
                    List <string> options     = null;
                    bool          pleaseEnter = true;
                    if (proxy != null)
                    {
                        pleaseEnter = false;
                        options     = new List <string>();

                        int index         = 0;
                        var current_value = proxy.SelectedValue;
                        foreach (var value in proxy.AvailableValues)
                        {
                            var v = value.Get <IStringValueAnnotation>();
                            if (v != null)
                            {
                                Console.Write("{1}: '{0}'", v.Value, index);
                                if (value == current_value)
                                {
                                    Console.WriteLine(" (default)");
                                }
                                else
                                {
                                    Console.WriteLine();
                                }
                            }
                            options.Add(v?.Value);
                            index++;
                        }
                        Console.Write("Please enter a number or name ");
                    }

                    var  layout   = _message.Get <IMemberAnnotation>()?.Member.GetAttribute <LayoutAttribute>();
                    bool showName = layout?.Mode.HasFlag(LayoutMode.FullRow) == true ? false : true;
                    if (pleaseEnter)
                    {
                        Console.Write("Please enter ");
                    }
                    if (showName)
                    {
                        Console.Write($"{name} ({str.Value}): ");
                    }
                    else
                    {
                        Console.Write($"({str.Value}): ");
                    }


                    var read = (awaitReadLine(TimeoutTime) ?? "").Trim();
                    if (read == "")
                    {
                        // accept the default value.
                        continue;
                    }
                    try
                    {
                        if (options != null && int.TryParse(read, out int result))
                        {
                            if (result < options.Count)
                            {
                                read = options[result];
                            }
                            else
                            {
                                goto start;
                            }
                        }
                        str.Value = read;

                        var err = a.Get <IErrorAnnotation>();
                        IEnumerable <string> errors = err?.Errors;

                        _message.Write();
                        if (errors?.Any() == true)
                        {
                            Console.WriteLine("Unable to parse value {0}", read);
                            goto start;
                        }
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Unable to parse '{0}'", read);
                        goto start;
                    }
                }
                a.Write();
            }
            finally
            {
                platforDialogMutex.ReleaseMutex();
            }
        }
Пример #30
0
        public void MenuAnnotationTest()
        {
            var currentUserInterface = UserInput.Interface;
            var menuInterface        = new MenuTestUserInterface();

            UserInput.SetInterface(menuInterface);
            try
            {
                var plan         = new TestPlan();
                var sequenceRoot = new SequenceStep();
                var sequence     = new SequenceStep();
                var step         = new DelayStep();
                plan.Steps.Add(sequenceRoot);
                sequenceRoot.ChildTestSteps.Add(sequence);
                var step2 = new DelayStep();
                sequenceRoot.ChildTestSteps.Add(step);
                sequence.ChildTestSteps.Add(step2);

                { // basic functionalities test
                    var member = AnnotationCollection.Annotate(step2).GetMember(nameof(DelayStep.DelaySecs));
                    var menu   = member.Get <MenuAnnotation>();

                    var items = menu.MenuItems;

                    var icons = items.ToLookup(item =>
                                               item.Get <IIconAnnotation>()?.IconName ?? "");
                    var parameterizeOnTestPlan = icons[IconNames.ParameterizeOnTestPlan].First();
                    Assert.IsNotNull(parameterizeOnTestPlan);

                    // invoking this method should
                    var method = parameterizeOnTestPlan.Get <IMethodAnnotation>();
                    method.Invoke();
                    Assert.IsNotNull(plan.ExternalParameters.Get("Parameters \\ Time Delay"));

                    var unparameterize = icons[IconNames.Unparameterize].First();
                    unparameterize.Get <IMethodAnnotation>().Invoke();
                    Assert.IsNull(plan.ExternalParameters.Get("Parameters \\ Time Delay"));

                    var createOnParent = icons[IconNames.ParameterizeOnParent].First();
                    Assert.IsNotNull(createOnParent);
                    createOnParent.Get <IMethodAnnotation>().Invoke();
                    Assert.IsNotNull(TypeData.GetTypeData(sequence).GetMember("Parameters \\ Time Delay"));

                    unparameterize.Get <IMethodAnnotation>().Invoke();
                    Assert.IsNull(TypeData.GetTypeData(sequence).GetMember("Parameters \\ Time Delay"));

                    menuInterface.SelectName = "A";

                    var parameterize = icons[IconNames.Parameterize].First();
                    parameterize.Get <IMethodAnnotation>().Invoke();
                    Assert.IsTrue(menuInterface.WasInvoked);

                    var newParameter = TypeData.GetTypeData(sequence).GetMember("A");
                    Assert.IsNotNull(newParameter);
                    unparameterize.Get <IMethodAnnotation>().Invoke();
                    Assert.IsNull(TypeData.GetTypeData(sequence).GetMember("A"));
                    parameterize.Get <IMethodAnnotation>().Invoke();

                    var editParameter = AnnotationCollection.Annotate(sequence).GetMember("A").Get <MenuAnnotation>()
                                        .MenuItems
                                        .FirstOrDefault(x => x.Get <IconAnnotationAttribute>()?.IconName == IconNames.EditParameter);

                    menuInterface.SelectName = "B";
                    editParameter.Get <IMethodAnnotation>().Invoke();

                    Assert.IsNull(TypeData.GetTypeData(sequence).GetMember("A"));
                    Assert.IsNotNull(TypeData.GetTypeData(sequence).GetMember("B"));
                }

                { // test multi-select
                    var memberMulti = AnnotationCollection.Annotate(new[] { step, step2 })
                                      .GetMember(nameof(DelayStep.DelaySecs));
                    var menuMulti = memberMulti.Get <MenuAnnotation>();
                    Assert.IsNotNull(menuMulti);

                    var icons2 = menuMulti.MenuItems.ToLookup(x => x.Get <IIconAnnotation>()?.IconName ?? "");
                    var parmeterizeOnTestPlanMulti = icons2[IconNames.ParameterizeOnTestPlan].First();
                    parmeterizeOnTestPlanMulti.Get <IMethodAnnotation>().Invoke();
                    Assert.AreEqual(2, plan.ExternalParameters.Entries.FirstOrDefault().Properties.Count());

                    var unparmeterizePlanMulti = icons2[IconNames.Unparameterize].First();
                    unparmeterizePlanMulti.Get <IMethodAnnotation>().Invoke();
                    Assert.IsNull(plan.ExternalParameters.Entries.FirstOrDefault());

                    var parmeterizeOnParentMulti = icons2[IconNames.ParameterizeOnParent].First();
                    Assert.IsFalse(parmeterizeOnParentMulti.Get <IEnabledAnnotation>().IsEnabled);
                }

                { // Test Plan Enabled Items Locked
                    var annotation = AnnotationCollection.Annotate(step);
                    var menu       = annotation.GetMember(nameof(DelayStep.DelaySecs))
                                     .Get <MenuAnnotation>();
                    var icons = menu.MenuItems.ToLookup(x => x.Get <IIconAnnotation>()?.IconName ?? "");
                    icons[IconNames.ParameterizeOnTestPlan].First().Get <IMethodAnnotation>().Invoke();
                    annotation.Read();

                    Assert.IsFalse(icons[IconNames.ParameterizeOnTestPlan].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(icons[IconNames.Parameterize].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(icons[IconNames.ParameterizeOnParent].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsTrue(icons[IconNames.Unparameterize].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(icons[IconNames.EditParameter].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(icons[IconNames.RemoveParameter].First().Get <IEnabledAnnotation>().IsEnabled);

                    var planAnnotation = AnnotationCollection.Annotate(plan);
                    var planMenu       = planAnnotation.GetMember("Parameters \\ Time Delay")
                                         .Get <MenuAnnotation>();
                    var planIcons = planMenu.MenuItems.ToLookup(x => x.Get <IIconAnnotation>()?.IconName ?? "");
                    Assert.IsFalse(planIcons[IconNames.ParameterizeOnTestPlan].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(planIcons[IconNames.Parameterize].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsTrue(planIcons[IconNames.EditParameter].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(planIcons[IconNames.ParameterizeOnParent].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(planIcons[IconNames.Unparameterize].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsTrue(planIcons[IconNames.RemoveParameter].First().Get <IEnabledAnnotation>().IsEnabled);

                    plan.Locked = true;
                    menu        = AnnotationCollection.Annotate(step).GetMember(nameof(DelayStep.DelaySecs))
                                  .Get <MenuAnnotation>();
                    icons = menu.MenuItems.ToLookup(x => x.Get <IIconAnnotation>()?.IconName ?? "");
                    Assert.IsFalse(icons[IconNames.ParameterizeOnTestPlan].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(icons[IconNames.Parameterize].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(icons[IconNames.ParameterizeOnParent].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(icons[IconNames.Unparameterize].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(icons[IconNames.EditParameter].First().Get <IEnabledAnnotation>().IsEnabled);
                    planAnnotation = AnnotationCollection.Annotate(plan);
                    planMenu       = planAnnotation.GetMember("Parameters \\ Time Delay")
                                     .Get <MenuAnnotation>();
                    planIcons = planMenu.MenuItems.ToLookup(x => x.Get <IIconAnnotation>()?.IconName ?? "");
                    Assert.IsFalse(planIcons[IconNames.ParameterizeOnTestPlan].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(planIcons[IconNames.Parameterize].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(planIcons[IconNames.EditParameter].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(planIcons[IconNames.ParameterizeOnParent].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(planIcons[IconNames.Unparameterize].First().Get <IEnabledAnnotation>().IsEnabled);
                    Assert.IsFalse(planIcons[IconNames.RemoveParameter].First().Get <IEnabledAnnotation>().IsEnabled);
                }
                {
                    // remove parameter
                    plan.Locked = false;
                    var planAnnotation = AnnotationCollection.Annotate(plan);
                    var menu           = planAnnotation.GetMember("Parameters \\ Time Delay").Get <MenuAnnotation>();
                    var removeItem     = menu.MenuItems.First(x => x.Get <IconAnnotationAttribute>()?.IconName == IconNames.RemoveParameter);
                    removeItem.Get <IMethodAnnotation>().Invoke();
                    planAnnotation = AnnotationCollection.Annotate(plan);
                    // after removing there is not Time Delay parameter..
                    Assert.IsNull(planAnnotation.GetMember("Parameters \\ Time Delay"));
                }
                {// Break Conditions
                    var member = AnnotationCollection.Annotate(step2).GetMember("BreakConditions");
                    Assert.NotNull(member);
                    var menu = member.Get <MenuAnnotation>();
                    Assert.NotNull(menu);
                    var parameterize = menu.MenuItems.FirstOrDefault(x =>
                                                                     x.Get <IIconAnnotation>()?.IconName == IconNames.ParameterizeOnTestPlan);
                    Assert.IsTrue(parameterize.Get <IAccessAnnotation>().IsVisible);

                    Assert.AreEqual(1, TypeData.GetTypeData(plan).GetMembers().Count(x => x.Name.Contains("BreakConditions") || x.Name.Contains("BreakConditions")));
                    parameterize.Get <IMethodAnnotation>().Invoke();
                    Assert.AreEqual(2, TypeData.GetTypeData(plan).GetMembers().Count(x => x.Name.Contains("Break Conditions") || x.Name.Contains("BreakConditions")));
                }
            }
            finally
            {
                UserInput.SetInterface(currentUserInterface as IUserInputInterface);
            }
        }