public void WhenCalledConvert_CreatesNewViewOrReturnsCachedOneIfAny() { var converter = new EditorSelector(); var privateAccessor = new PrivateAccessor(converter); EditorSelector.ResetComposedConverter(); var view = new UserControl(); const string fieldType = "testFieldType"; converter.EditorFactories = new[] { new ExportFactory<UserControl, IExportAsControlForTypeMetadata>( () => new Tuple<UserControl, Action>(view, () => { }), new ExportAsControlForTypeAttribute(fieldType)) }; var fieldItemMock = Mock.Create<IFieldItem>(Behavior.CallOriginal); Mock.Arrange(() => fieldItemMock.FieldType).Returns(fieldType); Mock.Arrange(() => fieldItemMock.CanEdit).Returns(true); Mock.Arrange(() => fieldItemMock.CanView()).Returns(true); Mock.Arrange(() => fieldItemMock.IsInformationOnly).Returns(false); var returnedView = (UserControl)converter.Convert(fieldItemMock, new TypeDelegator(typeof (object)), new object(), null); Assert.AreEqual(view.GetType(), returnedView.GetType()); Assert.AreSame(fieldItemMock, returnedView.DataContext); Assert.IsTrue(returnedView.IsEnabled); //check that view was cached in RegisteredViews table UserControl cachedView; var registeredViews = privateAccessor.GetField("RegisteredViews") as ConditionalWeakTable<IFieldItem, UserControl>; Assert.IsNotNull(registeredViews); Assert.IsTrue(registeredViews.TryGetValue(fieldItemMock, out cachedView)); //remove cached view to ensure that converter will create a new one registeredViews.Remove(fieldItemMock); Mock.Arrange(() => fieldItemMock.CanEdit).Returns(false); Mock.Arrange(() => fieldItemMock.CanView()).Returns(false); returnedView = (UserControl)converter.Convert(fieldItemMock, new TypeDelegator(typeof(object)), new object(), null); Assert.AreEqual(view.GetType(), returnedView.GetType()); Assert.AreSame(fieldItemMock, returnedView.DataContext); Assert.IsFalse(returnedView.IsEnabled); //now converter should return the cached view Mock.Arrange(() => fieldItemMock.CanEdit).Returns(true); Mock.Arrange(() => fieldItemMock.CanView()).Returns(true); var returnedCachedView = (UserControl)converter.Convert(fieldItemMock, new TypeDelegator(typeof(object)), new object(), null); Assert.IsTrue(ReferenceEquals(returnedView, returnedCachedView)); Assert.AreSame(fieldItemMock, returnedCachedView.DataContext); Assert.IsFalse(returnedCachedView.IsEnabled); }
public void WhenCalledConvertBack_RaiseNotImplementedException() { var converter = new EditorSelector(); converter.ConvertBack(new object(), new TypeDelegator(typeof(object)), new object(), null); }