public void PopulateData_LoadMode_ChainsToAddElementAndChildrenIntoList_CorrectParameters() { using (ShimsContext.Create()) { const DataContextMode expectedDcMode = DataContextMode.Load; const TreeViewMode expectedTreeViewMode = TreeViewMode.Control; A11yElement expectedElement = new A11yElement(); ElementDataContext dataContext = new ElementDataContext(expectedElement, 1); A11yElement actualElement = null; BoundedCounter actualCounter = null; Dictionary <int, A11yElement> actualDictionary = null; ShimCaptureAction.AddElementAndChildrenIntoListA11yElementDictionaryOfInt32A11yElementBoundedCounter = (e, d, c) => { actualElement = e; actualDictionary = d; actualCounter = c; }; CaptureAction.PopulateData(dataContext, expectedDcMode, expectedTreeViewMode); Assert.AreEqual(expectedDcMode, dataContext.Mode); Assert.AreEqual(expectedTreeViewMode, dataContext.TreeMode); Assert.AreSame(expectedElement, actualElement); Assert.IsNotNull(actualDictionary); Assert.IsFalse(actualDictionary.Any()); Assert.AreSame(dataContext.ElementCounter, actualCounter); Assert.AreSame(dataContext.Elements, actualDictionary); } }
IHttpActionResult CaptureData(Guid id, DataContextMode dm, TreeViewMode tvm, bool force) { try { if (CaptureAction.SetTestModeDataContext(id, dm, tvm, force)) { if (dm == DataContextMode.Test) { var dc = GetDataAction.GetElementDataContext(id); dc.PublishScanResults(); } return(Ok()); } else { return(StatusCode(HttpStatusCode.NotModified)); } } catch (Exception ex) { return(BadRequest(ex.ToString())); } }
public void SetTestModeDataContext_ForLoadDataContextMode_WalksTheOriginAncestorsChildrenDirectly( bool force, bool startWithNullDataContext, DataContextMode originalDataContextMode, TreeViewMode originalDataContextTreeViewMode) { // Arrange if (startWithNullDataContext) { mockElementContext.DataContext = null; } mockDataContext.Mode = originalDataContextMode; mockDataContext.TreeMode = originalDataContextTreeViewMode; TreeViewMode treeViewMode = TreeViewMode.Raw; var mockOriginAncestor = mockElement; mockOriginAncestor.UniqueId = 1; var mockChild1 = new A11yElement(); mockChild1.UniqueId = 2; var mockChild2 = new A11yElement(); mockChild2.UniqueId = 3; var mockGrandChild1 = new A11yElement(); mockGrandChild1.UniqueId = 4; mockOriginAncestor.Children = new List <A11yElement>() { mockChild1, mockChild2 }; mockChild2.Children = new List <A11yElement>() { mockGrandChild1 }; using (new CaptureActionTestHookOverrides(() => mockDataManager, null, null)) { // Act bool retVal = CaptureAction.SetTestModeDataContext(mockElementContext.Id, DataContextMode.Load, treeViewMode, force); // Assert Assert.IsTrue(retVal); Assert.IsNotNull(mockElementContext.DataContext); Assert.AreNotSame(mockDataContext, mockElementContext.DataContext); var result = mockElementContext.DataContext; Assert.AreSame(mockElement, result.Element); Assert.AreEqual(20000, result.ElementCounter.UpperBound); Assert.AreEqual(treeViewMode, result.TreeMode); Assert.AreEqual(DataContextMode.Load, result.Mode); Assert.AreEqual(mockOriginAncestor, result.RootElment); Assert.AreEqual(4, result.Elements.Count); Assert.AreSame(mockOriginAncestor, result.Elements[mockOriginAncestor.UniqueId]); Assert.AreSame(mockChild1, result.Elements[mockChild1.UniqueId]); Assert.AreSame(mockChild2, result.Elements[mockChild2.UniqueId]); Assert.AreSame(mockGrandChild1, result.Elements[mockGrandChild1.UniqueId]); } }
/// <summary> /// check whether it needs new DataContext /// </summary> /// <param name="sm"></param> /// <param name="tm"></param> /// <returns></returns> public static bool NeedNewDataContext(this ElementDataContext dc, DataContextMode sm, TreeViewMode tm) { if (dc == null) { throw new ArgumentNullException(nameof(dc)); } return(dc.Mode != DataContextMode.Load && (dc.Mode != sm || dc.TreeMode != tm)); }
public void SetTestModeDataContext_ForTestDataContextMode_UsesTreeWalkerForTestToCreateNewDataContext( bool force, bool startWithNullDataContext, DataContextMode originalDataContextMode, TreeViewMode originalDataContextTreeViewMode) { // Arrange if (startWithNullDataContext) { mockElementContext.DataContext = null; } mockDataContext.Mode = originalDataContextMode; mockDataContext.TreeMode = originalDataContextTreeViewMode; TreeViewMode treeViewMode = TreeViewMode.Raw; var mockTreeWalkerForTest = new Mock <ITreeWalkerForTest>(); var mockTopMostElement = new A11yElement(); var mockElementsItem1 = new A11yElement(); mockElementsItem1.UniqueId = 101; var mockElementsItem2 = new A11yElement(); mockElementsItem2.UniqueId = 102; mockTreeWalkerForTest.Setup(w => w.Elements).Returns(new List <A11yElement> { mockElementsItem1, mockElementsItem2 }); mockTreeWalkerForTest.Setup(w => w.TopMostElement).Returns(mockTopMostElement); using (new CaptureActionTestHookOverrides(() => mockDataManager, null, (_1, _2) => mockTreeWalkerForTest.Object)) { // Act bool retVal = CaptureAction.SetTestModeDataContext(mockElementContext.Id, DataContextMode.Test, treeViewMode, force); // Assert Assert.IsTrue(retVal); Assert.IsNotNull(mockElementContext.DataContext); Assert.AreNotSame(mockDataContext, mockElementContext.DataContext); var result = mockElementContext.DataContext; Assert.AreSame(mockElement, result.Element); Assert.AreEqual(20000, result.ElementCounter.UpperBound); Assert.AreEqual(treeViewMode, result.TreeMode); Assert.AreEqual(DataContextMode.Test, result.Mode); Assert.AreEqual(mockTopMostElement, result.RootElment); mockTreeWalkerForTest.Verify(w => w.RefreshTreeData(treeViewMode)); Assert.AreEqual(2, result.Elements.Count); Assert.AreSame(mockElementsItem1, result.Elements[mockElementsItem1.UniqueId]); Assert.AreSame(mockElementsItem2, result.Elements[mockElementsItem2.UniqueId]); } }
public void PopulateData_TestMode_ChainsToTreeWalkerRefreshTreeData_CorrectParameters() { using (ShimsContext.Create()) { const DataContextMode expectedDcMode = DataContextMode.Test; const TreeViewMode expectedTreeViewMode = TreeViewMode.Content; A11yElement expectedElement = new A11yElement(); List <A11yElement> expectedElements = null; ElementDataContext dataContext = new ElementDataContext(expectedElement, 1); BoundedCounter actualCounter = null; A11yElement actualElement = null; TreeViewMode? actualTreeMode = null; A11yElement rootElement = null; ShimTreeWalkerForTest.ConstructorA11yElementBoundedCounter = (ktw, e, c) => { actualCounter = c; actualElement = e; new ShimTreeWalkerForTest(ktw) { RefreshTreeDataTreeViewMode = (mode) => { actualTreeMode = mode; expectedElements = new List <A11yElement> { expectedElement }; rootElement = expectedElement; Assert.IsTrue(dataContext.ElementCounter.TryIncrement()); }, ElementsGet = () => expectedElements, TopMostElementGet = () => rootElement, }; }; CaptureAction.PopulateData(dataContext, expectedDcMode, expectedTreeViewMode); Assert.AreSame(dataContext.ElementCounter, actualCounter); Assert.AreSame(expectedElement, actualElement); Assert.AreEqual(expectedDcMode, dataContext.Mode); Assert.AreEqual(expectedTreeViewMode, dataContext.TreeMode); Assert.AreSame(expectedElement, dataContext.Elements.Values.First()); Assert.AreSame(expectedElement, dataContext.RootElment); } }
/// <summary> /// Update Data context in given ElementContext for Test Mode /// if Data Context is already up to date based on parameters, just skip. /// </summary> /// <param name="ecId">ElementContext Id</param> /// <param name="dm"></param> /// <param name="tvm"></param> /// <param name="force">Force the update</param> /// <returns>boolean</returns> public static bool SetTestModeDataContext(Guid ecId, DataContextMode dm, TreeViewMode tvm, bool force = false) { var ec = GetDataManager().GetElementContext(ecId); // if Data context is set via Live Mode, set it to null. if (ec.DataContext != null && ec.DataContext.Mode == DataContextMode.Live) { ec.DataContext = null; } if (NeedNewDataContext(ec.DataContext, dm, tvm) || force) { ec.DataContext = new ElementDataContext(ec.Element, MaxElements); PopulateData(ec.DataContext, dm, tvm); return(true); } return(false); }
/// <summary> /// Populate Data /// </summary> /// <param name="dc"></param> /// <param name="dcMode"></param> /// <param name="tm"></param> internal static void PopulateData(ElementDataContext dc, DataContextMode dcMode, TreeViewMode tm) { dc.TreeMode = tm; dc.Mode = dcMode; switch (dcMode) { case DataContextMode.Test: var stw = NewTreeWalkerForTest(dc.Element, dc.ElementCounter); stw.RefreshTreeData(tm); dc.Elements = stw.Elements.ToDictionary(l => l.UniqueId); dc.RootElment = stw.TopMostElement; break; case DataContextMode.Load: dc.RootElment = dc.Element.GetOriginAncestor(); PopulateElementAndDescendentsListFromLoadedData(dc); break; } }
/// <summary> /// Update Data context in given ElementContext for Test Mode /// if Data Context is already up to date based on parameters, just skip. /// </summary> /// <param name="ecId">ElementContext Id</param> /// <param name="dm"></param> /// <param name="tvm"></param> /// <param name="force">Force the update</param> /// <returns>boolean</returns> public static bool SetTestModeDataContext(Guid ecId, DataContextMode dm, TreeViewMode tvm, bool force = false) { var ec = GetDataManager().GetElementContext(ecId); // if Data context is set via Live Mode, set it to null. if (ec.DataContext != null && ec.DataContext.Mode == DataContextMode.Live) { ec.DataContext = null; // Re-register user-configured custom UIA data Registrar.GetDefaultInstance().RestoreCustomPropertyRegistrations(); } if (NeedNewDataContext(ec.DataContext, dm, tvm) || force) { ec.DataContext = new ElementDataContext(ec.Element, MaxElements); PopulateData(ec.DataContext, dm, tvm); return(true); } return(false); }
private static bool NeedNewDataContext(ElementDataContext dc, DataContextMode sm, TreeViewMode tm) { return(dc == null || (dc.Mode != DataContextMode.Load && (dc.Mode != sm || dc.TreeMode != tm))); }
/// <summary> /// check whether it needs new DataContext /// </summary> /// <param name="sm"></param> /// <param name="tm"></param> /// <returns></returns> public static bool NeedNewDataContext(this ElementDataContext dc, DataContextMode sm, TreeViewMode tm) { return(dc.Mode != DataContextMode.Load && (dc.Mode != sm || dc.TreeMode != tm)); }
public void SetTestModeDataContext_NoopsIfElementDoesNotNeedTestContextUpdate(DataContextMode originalMode, TreeViewMode originalTreeMode, DataContextMode newlySetMode, TreeViewMode newlySetTreeMode) { mockDataContext.Mode = originalMode; mockDataContext.TreeMode = originalTreeMode; using (new CaptureActionTestHookOverrides(() => mockDataManager, null, null)) { bool retVal = CaptureAction.SetTestModeDataContext(mockElementContext.Id, newlySetMode, newlySetTreeMode, force: false); Assert.IsFalse(retVal); Assert.AreSame(mockDataContext, mockElementContext.DataContext); } }