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); } }
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); } }