// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. namespace System.Data.Entity { using System.Collections.Generic; using System.Data.Entity.Internal; using System.Linq; using Moq; /// /// This is an implementation of the abstract class that /// is based on a simple dictionary of property values. Instances of this class are used to /// test the functionality of the abstract class in unit tests. /// It was possible to do everything here with Moq, but it was easier and clearer in this case /// to create a simple implementation instead. /// /// The type of object that the dictionary contains. internal class TestInternalPropertyValues : InternalPropertyValues { private readonly ISet _propertyNames; private readonly IDictionary> _propertyValues = new Dictionary>(); public TestInternalPropertyValues( IDictionary properties = null, IEnumerable complexProperties = null, bool isEntityValues = false) : base(new Mock().Object, typeof(T), isEntityValues) { var names = new HashSet(); if (properties != null) { foreach (var property in properties) { var name = property.Key; names.Add(name); var itemMock = new Mock(); itemMock.SetupGet(i => i.Name).Returns(name); itemMock.SetupProperty(i => i.Value, property.Value); itemMock.SetupGet(i => i.IsComplex).Returns(complexProperties != null && complexProperties.Contains(name)); itemMock.SetupGet(i => i.Type).Returns(property.Value != null ? property.Value.GetType() : typeof(object)); _propertyValues[name] = itemMock; } } _propertyNames = new ReadOnlySet(names); } public Mock MockInternalContext { get { return Mock.Get((InternalContextForMock)InternalContext); } } public Mock GetMockItem(string propertyName) { return _propertyValues[propertyName]; } protected override IPropertyValuesItem GetItemImpl(string propertyName) { return _propertyValues[propertyName].Object; } public override ISet PropertyNames { get { return _propertyNames; } } } }