コード例 #1
0
        public void RegionDoesNotGetAddedTwiceWhenUpdatingRegions()
        {
            var regionManager = new MockRegionManager();
            var control       = new MockFrameworkElement();

            var regionScopeControl = new ContentControl();
            var accessor           = new MockRegionManagerAccessor
            {
                GetRegionManager = d => d == regionScopeControl ? regionManager : null
            };

            var behavior = new RegionManagerRegistrationBehavior()
            {
                RegionManagerAccessor = accessor,
                Region = new MockPresentationRegion()
                {
                    Name = "myRegionName"
                },
                HostControl = control
            };

            behavior.Attach();

            Assert.IsFalse(regionManager.MockRegionCollection.AddCalled);

            regionScopeControl.Content = control;
            accessor.UpdateRegions();

            Assert.IsTrue(regionManager.MockRegionCollection.AddCalled);
            regionManager.MockRegionCollection.AddCalled = false;

            accessor.UpdateRegions();
            Assert.IsFalse(regionManager.MockRegionCollection.AddCalled);
        }
コード例 #2
0
        public void BehaviorDoesNotPreventRegionManagerFromBeingGarbageCollected()
        {
            var control       = new MockFrameworkElement();
            var regionManager = new MockRegionManager();
            var regionManagerWeakReference = new WeakReference(regionManager);

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName    = d => "myRegionName",
                GetRegionManager = d => regionManager
            };

            var behavior = new RegionManagerRegistrationBehavior()
            {
                RegionManagerAccessor = accessor,
                Region      = new MockPresentationRegion(),
                HostControl = control
            };

            behavior.Attach();

            Assert.IsTrue(regionManagerWeakReference.IsAlive);
            GC.KeepAlive(regionManager);

            regionManager = null;

            GC.Collect();

            Assert.IsFalse(regionManagerWeakReference.IsAlive);
        }
コード例 #3
0
        public void RegionWillNotGetCreatedTwiceWhenThereAreMoreRegions()
        {
            var control1 = new MockFrameworkElement();
            var control2 = new MockFrameworkElement();

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName = d => d == control1 ? "Region1" : "Region2"
            };

            var adapter = new MockRegionAdapter();

            adapter.Accessor = accessor;

            var behavior1 = this.GetBehavior(control1, accessor, adapter);
            var behavior2 = this.GetBehavior(control2, accessor, adapter);

            behavior1.Attach();
            behavior2.Attach();

            accessor.UpdateRegions();

            Assert.IsTrue(adapter.CreatedRegions.Contains("Region1"));
            Assert.IsTrue(adapter.CreatedRegions.Contains("Region2"));
            Assert.AreEqual(1, adapter.CreatedRegions.Count((name) => name == "Region2"));
        }
コード例 #4
0
        public void CanAttachBeforeSettingName()
        {
            var control       = new ItemsControl();
            var regionManager = new MockRegionManager();
            var accessor      = new MockRegionManagerAccessor
            {
                GetRegionManager = d => regionManager
            };
            var region = new MockPresentationRegion()
            {
                Name = null
            };
            var behavior = new RegionManagerRegistrationBehavior()
            {
                RegionManagerAccessor = accessor,
                Region      = region,
                HostControl = control
            };

            behavior.Attach();
            Assert.IsFalse(regionManager.MockRegionCollection.AddCalled);

            region.Name = "myRegionName";

            Assert.IsTrue(regionManager.MockRegionCollection.AddCalled);
            Assert.AreSame(region, regionManager.MockRegionCollection.AddArgument);
        }
コード例 #5
0
        public void RegionGetsRemovedFromRegionManagerWhenRemovedFromScope()
        {
            var regionManager      = new MockRegionManager();
            var control            = new MockFrameworkElement();
            var regionScopeControl = new ContentControl();
            var accessor           = new MockRegionManagerAccessor
            {
                GetRegionManager = d => d == regionScopeControl ? regionManager : null
            };

            var region = new MockPresentationRegion()
            {
                Name = "myRegionName"
            };
            var behavior = new RegionManagerRegistrationBehavior()
            {
                RegionManagerAccessor = accessor,
                Region      = region,
                HostControl = control
            };

            behavior.Attach();

            regionScopeControl.Content = control;
            accessor.UpdateRegions();
            Assert.IsTrue(regionManager.MockRegionCollection.AddCalled);
            Assert.AreSame(region, regionManager.MockRegionCollection.AddArgument);

            regionScopeControl.Content = null;
            accessor.UpdateRegions();

            Assert.IsTrue(regionManager.MockRegionCollection.RemoveCalled);
        }
コード例 #6
0
        private DelayedRegionCreationBehavior GetBehavior(DependencyObject control, MockRegionManagerAccessor accessor, MockRegionAdapter adapter)
        {
            var mappings = new RegionAdapterMappings();

            mappings.RegisterMapping(control.GetType(), adapter);
            var behavior = new DelayedRegionCreationBehavior(mappings);

            behavior.RegionManagerAccessor = accessor;
            behavior.TargetElement         = control;
            return(behavior);
        }
コード例 #7
0
        public void InvalidControlThrowsDuringAttach()
        {
            var control = new DependencyObject();

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName = d => "myRegionName"
            };

            var behavior = this.GetBehavior(control, accessor);

            behavior.Attach();
        }
コード例 #8
0
        public void DoesNotFailIfRegionManagerIsNotSet()
        {
            var control  = new ItemsControl();
            var accessor = new MockRegionManagerAccessor();

            var behavior = new RegionManagerRegistrationBehavior()
            {
                RegionManagerAccessor = accessor,
                Region = new MockPresentationRegion()
                {
                    Name = "myRegionWithoutManager"
                },
                HostControl = control
            };

            behavior.Attach();
        }
コード例 #9
0
        public void BehaviorShouldUnhookEventWhenDetaching()
        {
            var control = new MockFrameworkElement();

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName = d => "myRegionName",
            };
            var behavior = this.GetBehavior(control, accessor);

            behavior.Attach();

            int startingCount = accessor.GetSubscribersCount();

            behavior.Detach();

            Assert.AreEqual <int>(startingCount - 1, accessor.GetSubscribersCount());
        }
コード例 #10
0
        public void RegionGetsCreatedWhenAccessingRegions()
        {
            var control = new MockFrameworkElement();

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName = d => "myRegionName"
            };

            var behavior = this.GetBehavior(control, accessor);

            behavior.Attach();

            accessor.UpdateRegions();

            Assert.IsNotNull(RegionManager.GetObservableRegion(control).Value);
            Assert.IsInstanceOfType(RegionManager.GetObservableRegion(control).Value, typeof(IRegion));
        }
コード例 #11
0
        public void RegionDoesNotGetCreatedTwiceWhenUpdatingRegions()
        {
            var control = new MockFrameworkElement();

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName = d => "myRegionName"
            };

            var behavior = this.GetBehavior(control, accessor);

            behavior.Attach();
            accessor.UpdateRegions();
            IRegion region = RegionManager.GetObservableRegion(control).Value;

            accessor.UpdateRegions();

            Assert.AreSame(region, RegionManager.GetObservableRegion(control).Value);
        }
コード例 #12
0
        public void BehaviorDoesNotPreventControlFromBeingGarbageCollected()
        {
            var           control = new MockFrameworkElement();
            WeakReference controlWeakReference = new WeakReference(control);

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName = d => "myRegionName"
            };

            var behavior = this.GetBehavior(control, accessor);

            behavior.Attach();

            Assert.IsTrue(controlWeakReference.IsAlive);
            GC.KeepAlive(control);

            control = null;
            GC.Collect();

            Assert.IsFalse(controlWeakReference.IsAlive);
        }
コード例 #13
0
        public void ShouldCleanupBehaviorOnceRegionIsCreated()
        {
            var control = new MockFrameworkElement();

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName = d => "myRegionName"
            };

            var           behavior = this.GetBehavior(control, accessor);
            WeakReference behaviorWeakReference = new WeakReference(behavior);

            behavior.Attach();
            accessor.UpdateRegions();
            Assert.IsTrue(behaviorWeakReference.IsAlive);
            GC.KeepAlive(behavior);

            behavior = null;
            GC.Collect();

            Assert.IsFalse(behaviorWeakReference.IsAlive);
        }
コード例 #14
0
        public void ShouldRegisterRegionIfRegionManagerIsSet()
        {
            var control       = new ItemsControl();
            var regionManager = new MockRegionManager();
            var accessor      = new MockRegionManagerAccessor
            {
                GetRegionManager = d => regionManager
            };
            var region = new MockPresentationRegion()
            {
                Name = "myRegionName"
            };
            var behavior = new RegionManagerRegistrationBehavior()
            {
                RegionManagerAccessor = accessor,
                Region      = region,
                HostControl = control
            };

            behavior.Attach();

            Assert.IsTrue(regionManager.MockRegionCollection.AddCalled);
            Assert.AreSame(region, regionManager.MockRegionCollection.AddArgument);
        }
コード例 #15
0
        public void RegionGetsCreatedWhenAccessingRegions()
        {
            var control1 = new MockFrameworkElement();
            var control2 = new MockFrameworkContentElement();

            var accessor = new MockRegionManagerAccessor
            {
                GetRegionName = d => "myRegionName"
            };

            var behavior1 = this.GetBehavior(control1, accessor);

            behavior1.Attach();
            var behavior2 = this.GetBehavior(control2, accessor);

            behavior2.Attach();

            accessor.UpdateRegions();

            Assert.NotNull(RegionManager.GetObservableRegion(control1).Value);
            Assert.IsAssignableFrom <IRegion>(RegionManager.GetObservableRegion(control1).Value);
            Assert.NotNull(RegionManager.GetObservableRegion(control2).Value);
            Assert.IsAssignableFrom <IRegion>(RegionManager.GetObservableRegion(control2).Value);
        }
コード例 #16
0
 private DelayedRegionCreationBehavior GetBehavior(DependencyObject control, MockRegionManagerAccessor accessor)
 {
     return(GetBehavior(control, accessor, new MockRegionAdapter()));
 }