Exemplo n.º 1
0
        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]);
            }
        }
Exemplo n.º 4
0
        /// <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]);
            }
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        /// <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;
            }
        }
Exemplo n.º 9
0
        /// <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);
        }
Exemplo n.º 10
0
 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);
            }
        }