File: TestInternalPropertyValues%60.cs

package info (click to toggle)
mono-reference-assemblies 3.12.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 604,240 kB
  • ctags: 625,505
  • sloc: cs: 3,967,741; xml: 2,793,081; ansic: 418,042; java: 60,435; sh: 14,833; makefile: 11,576; sql: 7,956; perl: 1,467; cpp: 1,446; yacc: 1,203; python: 598; asm: 422; sed: 16; php: 1
file content (71 lines) | stat: -rw-r--r-- 2,948 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// 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;

    /// <summary>
    ///     This is an implementation of the abstract <see cref="InternalPropertyValues" /> 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.
    /// </summary>
    /// <typeparam name="T"> The type of object that the dictionary contains. </typeparam>
    internal class TestInternalPropertyValues<T> : InternalPropertyValues
    {
        private readonly ISet<string> _propertyNames;

        private readonly IDictionary<string, Mock<IPropertyValuesItem>> _propertyValues =
            new Dictionary<string, Mock<IPropertyValuesItem>>();

        public TestInternalPropertyValues(
            IDictionary<string, object> properties = null, IEnumerable<string> complexProperties = null, bool isEntityValues = false)
            : base(new Mock<InternalContextForMock>().Object, typeof(T), isEntityValues)
        {
            var names = new HashSet<string>();

            if (properties != null)
            {
                foreach (var property in properties)
                {
                    var name = property.Key;
                    names.Add(name);

                    var itemMock = new Mock<IPropertyValuesItem>();
                    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<string>(names);
        }

        public Mock<InternalContextForMock> MockInternalContext
        {
            get { return Mock.Get((InternalContextForMock)InternalContext); }
        }

        public Mock<IPropertyValuesItem> GetMockItem(string propertyName)
        {
            return _propertyValues[propertyName];
        }

        protected override IPropertyValuesItem GetItemImpl(string propertyName)
        {
            return _propertyValues[propertyName].Object;
        }

        public override ISet<string> PropertyNames
        {
            get { return _propertyNames; }
        }
    }
}