public void VerifyPropertyValuesAfterTemplateApplication() { if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2)) { Log.Warning("Test is disabled on pre-RS2 because ScrollView not supported pre-RS2"); return; } using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollView", "ScrollPresenter")) { ScrollView scrollView = null; Rectangle rectangleScrollViewContent = null; AutoResetEvent scrollViewLoadedEvent = new AutoResetEvent(false); AutoResetEvent scrollViewUnloadedEvent = new AutoResetEvent(false); RunOnUIThread.Execute(() => { rectangleScrollViewContent = new Rectangle(); scrollView = new ScrollView(); SetupDefaultUI(scrollView, rectangleScrollViewContent, scrollViewLoadedEvent, scrollViewUnloadedEvent); }); WaitForEvent("Waiting for Loaded event", scrollViewLoadedEvent); RunOnUIThread.Execute(() => { Log.Comment("Verifying ScrollView property values after Loaded event"); Verify.AreEqual(scrollView.Content, rectangleScrollViewContent); Verify.IsNotNull(ScrollViewTestHooks.GetScrollPresenterPart(scrollView)); Verify.AreEqual(ScrollViewTestHooks.GetScrollPresenterPart(scrollView).Content, rectangleScrollViewContent); Verify.IsNotNull(scrollView.HorizontalScrollController); Verify.IsNotNull(scrollView.VerticalScrollController); Verify.AreEqual(scrollView.ExtentWidth, c_defaultUIScrollViewContentWidth); Verify.AreEqual(scrollView.ExtentHeight, c_defaultUIScrollViewContentHeight); Verify.AreEqual(scrollView.ViewportWidth, c_defaultUIScrollViewWidth); Verify.AreEqual(scrollView.ViewportHeight, c_defaultUIScrollViewHeight); Verify.AreEqual(scrollView.ScrollableWidth, c_defaultUIScrollViewContentWidth - c_defaultUIScrollViewWidth); Verify.AreEqual(scrollView.ScrollableHeight, c_defaultUIScrollViewContentHeight - c_defaultUIScrollViewHeight); Log.Comment("Resetting window content and ScrollView"); Content = null; scrollView = null; }); WaitForEvent("Waiting for Unloaded event", scrollViewUnloadedEvent); IdleSynchronizer.Wait(); Log.Comment("Garbage collecting..."); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); Log.Comment("Done"); } }
public void VerifyScrollerAttachedProperties() { if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2)) { Log.Warning("Test is disabled on pre-RS2 because ScrollViewer not supported pre-RS2"); return; } using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollViewer", "Scroller")) { ScrollViewer scrollViewer = null; Rectangle rectangleScrollViewerContent = null; AutoResetEvent scrollViewerLoadedEvent = new AutoResetEvent(false); AutoResetEvent scrollViewerUnloadedEvent = new AutoResetEvent(false); RunOnUIThread.Execute(() => { rectangleScrollViewerContent = new Rectangle(); scrollViewer = new ScrollViewer(); SetupDefaultUI(scrollViewer, rectangleScrollViewerContent, scrollViewerLoadedEvent, scrollViewerUnloadedEvent); }); WaitForEvent("Waiting for Loaded event", scrollViewerLoadedEvent); RunOnUIThread.Execute(() => { Log.Comment("Setting Scroller-cloned properties to non-default values"); scrollViewer.InputKind = InputKind.MouseWheel | InputKind.Pen; scrollViewer.IsChildAvailableWidthConstrained = !c_defaultIsChildAvailableWidthConstrained; scrollViewer.IsChildAvailableHeightConstrained = !c_defaultIsChildAvailableHeightConstrained; scrollViewer.HorizontalScrollChainingMode = ChainingMode.Always; scrollViewer.VerticalScrollChainingMode = ChainingMode.Never; scrollViewer.HorizontalScrollRailingMode = RailingMode.Disabled; scrollViewer.VerticalScrollRailingMode = RailingMode.Disabled; scrollViewer.HorizontalScrollMode = ScrollMode.Enabled; scrollViewer.VerticalScrollMode = ScrollMode.Disabled; scrollViewer.ZoomMode = ZoomMode.Enabled; scrollViewer.ZoomChainingMode = ChainingMode.Never; scrollViewer.MinZoomFactor = 2.0; scrollViewer.MaxZoomFactor = 8.0; Log.Comment("Verifying Scroller-cloned non-default properties"); Verify.AreEqual(scrollViewer.InputKind, InputKind.MouseWheel | InputKind.Pen); Verify.AreEqual(scrollViewer.IsChildAvailableWidthConstrained, !c_defaultIsChildAvailableWidthConstrained); Verify.AreEqual(scrollViewer.IsChildAvailableHeightConstrained, !c_defaultIsChildAvailableHeightConstrained); Verify.AreEqual(scrollViewer.HorizontalScrollChainingMode, ChainingMode.Always); Verify.AreEqual(scrollViewer.VerticalScrollChainingMode, ChainingMode.Never); Verify.AreEqual(scrollViewer.HorizontalScrollRailingMode, RailingMode.Disabled); Verify.AreEqual(scrollViewer.VerticalScrollRailingMode, RailingMode.Disabled); Verify.AreEqual(scrollViewer.HorizontalScrollMode, ScrollMode.Enabled); Verify.AreEqual(scrollViewer.VerticalScrollMode, ScrollMode.Disabled); Verify.AreEqual(scrollViewer.ComputedHorizontalScrollMode, ScrollMode.Enabled); Verify.AreEqual(scrollViewer.ComputedVerticalScrollMode, ScrollMode.Disabled); Verify.AreEqual(scrollViewer.ZoomMode, ZoomMode.Enabled); Verify.AreEqual(scrollViewer.ZoomChainingMode, ChainingMode.Never); Verify.IsGreaterThan(scrollViewer.MinZoomFactor, 2.0 - c_epsilon); Verify.IsLessThan(scrollViewer.MinZoomFactor, 2.0 + c_epsilon); Verify.IsGreaterThan(scrollViewer.MaxZoomFactor, 8.0 - c_epsilon); Verify.IsLessThan(scrollViewer.MaxZoomFactor, 8.0 + c_epsilon); Log.Comment("Resetting window content and ScrollViewer"); MUXControlsTestApp.App.TestContentRoot = null; scrollViewer = null; }); WaitForEvent("Waiting for Unloaded event", scrollViewerUnloadedEvent); IdleSynchronizer.Wait(); Log.Comment("Garbage collecting..."); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); Log.Comment("Done"); } }
public void AnchoringAtRepeaterMiddle() { using (ScrollerTestHooksHelper scrollerTestHooksHelper = new ScrollerTestHooksHelper()) { using (PrivateLoggingHelper privateLoggingHelper = new PrivateLoggingHelper("Scroller")) { Scroller scroller = null; AutoResetEvent scrollerLoadedEvent = new AutoResetEvent(false); AutoResetEvent scrollerViewChangedEvent = new AutoResetEvent(false); RunOnUIThread.Execute(() => { scroller = new Scroller(); SetupRepeaterAnchoringUI(scroller, scrollerLoadedEvent); scroller.HorizontalAnchorRatio = double.NaN; scroller.VerticalAnchorRatio = 0.5; }); WaitForEvent("Waiting for Loaded event", scrollerLoadedEvent); ChangeZoomFactor(scroller, 2.0f, 0.0f, 0.0f, ScrollerViewKind.Absolute, ScrollerViewChangeKind.AllowAnimation); ChangeOffsets(scroller, 0.0, 250.0, ScrollerViewKind.Absolute, ScrollerViewChangeKind.AllowAnimation, ScrollerViewChangeSnapPointRespect.IgnoreSnapPoints, false /*hookViewChanged*/); ItemsRepeater repeater = null; TestDataSource dataSource = null; RunOnUIThread.Execute(() => { repeater = (scroller.Child as Border).Child as ItemsRepeater; dataSource = repeater.ItemsSource as TestDataSource; scroller.ViewChanged += delegate(Scroller sender, object args) { scrollerViewChangedEvent.Set(); }; Log.Comment("Inserting items at the beginning"); dataSource.Insert(0 /*index*/, 2 /*count*/); }); WaitForEvent("Waiting for Scroller.ViewChanged event", scrollerViewChangedEvent); RunOnUIThread.Execute(() => { Log.Comment("Scroller offset change expected"); Verify.AreEqual(scroller.VerticalOffset, 520.0); }); RunOnUIThread.Execute(() => { scrollerViewChangedEvent.Reset(); Log.Comment("Removing items from the beginning"); dataSource.Remove(0 /*index*/, 2 /*count*/); }); WaitForEvent("Waiting for Scroller.ViewChanged event", scrollerViewChangedEvent); RunOnUIThread.Execute(() => { Log.Comment("Scroller offset change expected"); Verify.AreEqual(scroller.VerticalOffset, 250.0); }); } } }
public void AnchoringAtRepeaterMiddle() { using (ScrollPresenterTestHooksHelper scrollPresenterTestHooksHelper = new ScrollPresenterTestHooksHelper( enableAnchorNotifications: true, enableInteractionSourcesNotifications: true, enableExpressionAnimationStatusNotifications: false)) { using (PrivateLoggingHelper privateLoggingHelper = new PrivateLoggingHelper("ScrollPresenter")) { ScrollPresenter scrollPresenter = null; AutoResetEvent scrollPresenterLoadedEvent = new AutoResetEvent(false); AutoResetEvent scrollPresenterViewChangedEvent = new AutoResetEvent(false); RunOnUIThread.Execute(() => { scrollPresenter = new ScrollPresenter(); SetupRepeaterAnchoringUI(scrollPresenter, scrollPresenterLoadedEvent); scrollPresenter.HorizontalAnchorRatio = double.NaN; scrollPresenter.VerticalAnchorRatio = 0.5; }); WaitForEvent("Waiting for Loaded event", scrollPresenterLoadedEvent); ZoomTo(scrollPresenter, 2.0f, 0.0f, 0.0f, ScrollingAnimationMode.Enabled, ScrollingSnapPointsMode.Ignore); ScrollTo(scrollPresenter, 0.0, 250.0, ScrollingAnimationMode.Enabled, ScrollingSnapPointsMode.Ignore, false /*hookViewChanged*/); ItemsRepeater repeater = null; TestDataSource dataSource = null; RunOnUIThread.Execute(() => { repeater = (scrollPresenter.Content as Border).Child as ItemsRepeater; dataSource = repeater.ItemsSource as TestDataSource; scrollPresenter.ViewChanged += delegate(ScrollPresenter sender, object args) { scrollPresenterViewChangedEvent.Set(); }; Log.Comment("Inserting items at the beginning"); dataSource.Insert(0 /*index*/, 2 /*count*/); }); WaitForEvent("Waiting for ScrollPresenter.ViewChanged event", scrollPresenterViewChangedEvent); RunOnUIThread.Execute(() => { Log.Comment("ScrollPresenter offset change expected"); Verify.AreEqual(520.0, scrollPresenter.VerticalOffset); }); RunOnUIThread.Execute(() => { scrollPresenterViewChangedEvent.Reset(); Log.Comment("Removing items from the beginning"); dataSource.Remove(0 /*index*/, 2 /*count*/); }); WaitForEvent("Waiting for ScrollPresenter.ViewChanged event", scrollPresenterViewChangedEvent); RunOnUIThread.Execute(() => { Log.Comment("ScrollPresenter offset change expected"); Verify.AreEqual(250.0, scrollPresenter.VerticalOffset); Log.Comment("ScrollPresenter CurrentAnchor is " + (scrollPresenter.CurrentAnchor == null ? "null" : "non-null")); Verify.IsNotNull(scrollPresenter.CurrentAnchor); }); } } }
public void VerifyAnchorCandidateRegistration() { if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2)) { Log.Warning("Test is disabled on pre-RS2 because ScrollView not supported pre-RS2"); return; } using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollView", "ScrollPresenter")) { int expectedAnchorCandidatesCount = 0; ScrollPresenter scrollPresenter = null; ScrollView scrollView = null; Rectangle rectangleScrollViewContent = null; AutoResetEvent scrollViewLoadedEvent = new AutoResetEvent(false); AutoResetEvent scrollViewAnchorRequestedEvent = new AutoResetEvent(false); RunOnUIThread.Execute(() => { rectangleScrollViewContent = new Rectangle(); scrollView = new ScrollView(); scrollView.HorizontalAnchorRatio = 0.1; SetupDefaultUI(scrollView, rectangleScrollViewContent, scrollViewLoadedEvent); scrollView.AnchorRequested += (ScrollView sender, ScrollingAnchorRequestedEventArgs args) => { Log.Comment("ScrollView.AnchorRequested event handler. args.AnchorCandidates.Count: " + args.AnchorCandidates.Count); Verify.IsNull(args.AnchorElement); Verify.AreEqual(expectedAnchorCandidatesCount, args.AnchorCandidates.Count); scrollViewAnchorRequestedEvent.Set(); }; }); WaitForEvent("Waiting for Loaded event", scrollViewLoadedEvent); RunOnUIThread.Execute(() => { Log.Comment("Accessing inner ScrollPresenter control"); scrollPresenter = ScrollViewTestHooks.GetScrollPresenterPart(scrollView); Log.Comment("Registering Rectangle as anchor candidate"); scrollView.RegisterAnchorCandidate(rectangleScrollViewContent); expectedAnchorCandidatesCount = 1; Log.Comment("Forcing ScrollPresenter layout"); scrollPresenter.InvalidateArrange(); }); WaitForEvent("Waiting for AnchorRequested event", scrollViewAnchorRequestedEvent); RunOnUIThread.Execute(() => { Log.Comment("Unregistering Rectangle as anchor candidate"); scrollView.UnregisterAnchorCandidate(rectangleScrollViewContent); expectedAnchorCandidatesCount = 0; Log.Comment("Forcing ScrollPresenter layout"); scrollPresenter.InvalidateArrange(); }); WaitForEvent("Waiting for AnchorRequested event", scrollViewAnchorRequestedEvent); } }
private void VerifyVisualStates(ScrollBarVisibility scrollBarVisibility, bool autoHideScrollControllers) { using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollView")) { ScrollView scrollView = null; RunOnUIThread.Execute(() => { MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange; m_scrollViewVisualStateCounts = new ScrollViewVisualStateCounts(); scrollView = new ScrollView(); }); using (ScrollViewTestHooksHelper scrollViewTestHooksHelper = new ScrollViewTestHooksHelper(scrollView, autoHideScrollControllers)) { Rectangle rectangleScrollViewContent = null; AutoResetEvent scrollViewLoadedEvent = new AutoResetEvent(false); AutoResetEvent scrollViewUnloadedEvent = new AutoResetEvent(false); RunOnUIThread.Execute(() => { rectangleScrollViewContent = new Rectangle(); scrollView.HorizontalScrollBarVisibility = scrollBarVisibility; scrollView.VerticalScrollBarVisibility = scrollBarVisibility; SetupDefaultUI( scrollView: scrollView, rectangleScrollViewContent: rectangleScrollViewContent, scrollViewLoadedEvent: scrollViewLoadedEvent, scrollViewUnloadedEvent: scrollViewUnloadedEvent, setAsContentRoot: true, useParentGrid: true); }); WaitForEvent("Waiting for Loaded event", scrollViewLoadedEvent); RunOnUIThread.Execute(() => { MUXControlsTestHooks.LoggingMessage -= MUXControlsTestHooks_LoggingMessageForVisualStateChange; Log.Comment($"VerifyVisualStates: isEnabled:True, scrollBarVisibility:{scrollBarVisibility}, autoHideScrollControllers:{autoHideScrollControllers}"); VerifyVisualStates( expectedMouseIndicatorStateCount: autoHideScrollControllers ? 0u : (scrollBarVisibility == ScrollBarVisibility.Auto ? 2u : 3u), expectedTouchIndicatorStateCount: 0, expectedNoIndicatorStateCount: autoHideScrollControllers ? (scrollBarVisibility == ScrollBarVisibility.Auto ? 2u : 3u) : 0u, expectedScrollBarsSeparatorCollapsedStateCount: autoHideScrollControllers ? (scrollBarVisibility == ScrollBarVisibility.Auto ? 1u : 3u) : 0u, expectedScrollBarsSeparatorCollapsedDisabledStateCount: 0, expectedScrollBarsSeparatorExpandedStateCount: autoHideScrollControllers ? 0u : (scrollBarVisibility == ScrollBarVisibility.Auto ? 1u : 3u), expectedScrollBarsSeparatorDisplayedWithoutAnimationStateCount: 0, expectedScrollBarsSeparatorExpandedWithoutAnimationStateCount: 0, expectedScrollBarsSeparatorCollapsedWithoutAnimationStateCount: 0); m_scrollViewVisualStateCounts.ResetStateCounts(); MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange; Log.Comment("Disabling ScrollView"); scrollView.IsEnabled = false; }); IdleSynchronizer.Wait(); RunOnUIThread.Execute(() => { MUXControlsTestHooks.LoggingMessage -= MUXControlsTestHooks_LoggingMessageForVisualStateChange; Log.Comment($"VerifyVisualStates: isEnabled:False, scrollBarVisibility:{scrollBarVisibility}, autoHideScrollControllers:{autoHideScrollControllers}"); VerifyVisualStates( expectedMouseIndicatorStateCount: autoHideScrollControllers ? 0u : (scrollBarVisibility == ScrollBarVisibility.Auto ? 1u : 3u), expectedTouchIndicatorStateCount: 0, expectedNoIndicatorStateCount: autoHideScrollControllers ? (scrollBarVisibility == ScrollBarVisibility.Auto ? 1u : 3u) : 0u, expectedScrollBarsSeparatorCollapsedStateCount: 0, expectedScrollBarsSeparatorCollapsedDisabledStateCount: scrollBarVisibility == ScrollBarVisibility.Auto ? 0u : 3u, expectedScrollBarsSeparatorExpandedStateCount: 0, expectedScrollBarsSeparatorDisplayedWithoutAnimationStateCount: 0, expectedScrollBarsSeparatorExpandedWithoutAnimationStateCount: 0, expectedScrollBarsSeparatorCollapsedWithoutAnimationStateCount: 0); m_scrollViewVisualStateCounts.ResetStateCounts(); MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange; Log.Comment("Enabling ScrollView"); scrollView.IsEnabled = true; }); IdleSynchronizer.Wait(); RunOnUIThread.Execute(() => { MUXControlsTestHooks.LoggingMessage -= MUXControlsTestHooks_LoggingMessageForVisualStateChange; Log.Comment($"VerifyVisualStates: isEnabled:True, scrollBarVisibility:{scrollBarVisibility}, autoHideScrollControllers:{autoHideScrollControllers}"); VerifyVisualStates( expectedMouseIndicatorStateCount: autoHideScrollControllers ? 0u : 3u, expectedTouchIndicatorStateCount: 0, expectedNoIndicatorStateCount: autoHideScrollControllers ? 3u : 0u, expectedScrollBarsSeparatorCollapsedStateCount: autoHideScrollControllers ? (scrollBarVisibility == ScrollBarVisibility.Auto ? 2u : 3u) : 0u, expectedScrollBarsSeparatorCollapsedDisabledStateCount: 0, expectedScrollBarsSeparatorExpandedStateCount: autoHideScrollControllers ? 0u : (scrollBarVisibility == ScrollBarVisibility.Auto ? 2u : 3u), expectedScrollBarsSeparatorDisplayedWithoutAnimationStateCount: 0, expectedScrollBarsSeparatorExpandedWithoutAnimationStateCount: 0, expectedScrollBarsSeparatorCollapsedWithoutAnimationStateCount: 0); Log.Comment("Resetting window content"); Content = null; m_scrollViewVisualStateCounts = null; }); WaitForEvent("Waiting for Unloaded event", scrollViewUnloadedEvent); } } }
public void VerifyScrollPresenterAttachedProperties() { if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2)) { Log.Warning("Test is disabled on pre-RS2 because ScrollView not supported pre-RS2"); return; } using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollView", "ScrollPresenter")) { ScrollView scrollView = null; Rectangle rectangleScrollViewContent = null; AutoResetEvent scrollViewLoadedEvent = new AutoResetEvent(false); AutoResetEvent scrollViewUnloadedEvent = new AutoResetEvent(false); RunOnUIThread.Execute(() => { rectangleScrollViewContent = new Rectangle(); scrollView = new ScrollView(); SetupDefaultUI(scrollView, rectangleScrollViewContent, scrollViewLoadedEvent, scrollViewUnloadedEvent); }); WaitForEvent("Waiting for Loaded event", scrollViewLoadedEvent); RunOnUIThread.Execute(() => { Log.Comment("Setting ScrollPresenter-cloned properties to non-default values"); scrollView.IgnoredInputKind = InputKind.MouseWheel | InputKind.Pen; scrollView.ContentOrientation = ContentOrientation.Horizontal; scrollView.HorizontalScrollChainingMode = ChainingMode.Always; scrollView.VerticalScrollChainingMode = ChainingMode.Never; scrollView.HorizontalScrollRailingMode = RailingMode.Disabled; scrollView.VerticalScrollRailingMode = RailingMode.Disabled; scrollView.HorizontalScrollMode = ScrollMode.Enabled; scrollView.VerticalScrollMode = ScrollMode.Disabled; scrollView.ZoomMode = ZoomMode.Enabled; scrollView.ZoomChainingMode = ChainingMode.Never; scrollView.MinZoomFactor = 2.0; scrollView.MaxZoomFactor = 8.0; Log.Comment("Verifying ScrollPresenter-cloned non-default properties"); Verify.AreEqual(scrollView.IgnoredInputKind, InputKind.MouseWheel | InputKind.Pen); Verify.AreEqual(scrollView.ContentOrientation, ContentOrientation.Horizontal); Verify.AreEqual(scrollView.HorizontalScrollChainingMode, ChainingMode.Always); Verify.AreEqual(scrollView.VerticalScrollChainingMode, ChainingMode.Never); Verify.AreEqual(scrollView.HorizontalScrollRailingMode, RailingMode.Disabled); Verify.AreEqual(scrollView.VerticalScrollRailingMode, RailingMode.Disabled); Verify.AreEqual(scrollView.HorizontalScrollMode, ScrollMode.Enabled); Verify.AreEqual(scrollView.VerticalScrollMode, ScrollMode.Disabled); #if USE_SCROLLMODE_AUTO Verify.AreEqual(scrollView.ComputedHorizontalScrollMode, ScrollMode.Enabled); Verify.AreEqual(scrollView.ComputedVerticalScrollMode, ScrollMode.Disabled); #endif Verify.AreEqual(scrollView.ZoomMode, ZoomMode.Enabled); Verify.AreEqual(scrollView.ZoomChainingMode, ChainingMode.Never); Verify.IsGreaterThan(scrollView.MinZoomFactor, 2.0 - c_epsilon); Verify.IsLessThan(scrollView.MinZoomFactor, 2.0 + c_epsilon); Verify.IsGreaterThan(scrollView.MaxZoomFactor, 8.0 - c_epsilon); Verify.IsLessThan(scrollView.MaxZoomFactor, 8.0 + c_epsilon); Log.Comment("Resetting window content and ScrollView"); Content = null; scrollView = null; }); WaitForEvent("Waiting for Unloaded event", scrollViewUnloadedEvent); IdleSynchronizer.Wait(); Log.Comment("Garbage collecting..."); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); Log.Comment("Done"); } }