Esempio n. 1
0
        private static bool ValidateProperty(TempDataSerializer tempDataSerializer, List <string> errorMessages, PropertyInfo property)
        {
            if (!(property.SetMethod != null &&
                  property.SetMethod.IsPublic &&
                  property.GetMethod != null &&
                  property.GetMethod.IsPublic))
            {
                errorMessages.Add(
                    Resources.FormatTempDataProperties_PublicGetterSetter(property.DeclaringType.FullName, property.Name, nameof(TempDataAttribute)));

                return(false);
            }

            if (!tempDataSerializer.CanSerializeType(property.PropertyType))
            {
                var errorMessage = Resources.FormatTempDataProperties_InvalidType(
                    tempDataSerializer.GetType().FullName,
                    TypeNameHelper.GetTypeDisplayName(property.DeclaringType),
                    property.Name,
                    TypeNameHelper.GetTypeDisplayName(property.PropertyType));

                errorMessages.Add(errorMessage);

                return(false);
            }

            return(true);
        }
        public void EnsureObjectCanBeSerialized_DoesNotThrow_OnValidType(object value)
        {
            // Arrange
            var testProvider = new TempDataSerializer();

            // Act & Assert (Does not throw)
            testProvider.EnsureObjectCanBeSerialized(value);
        }
        public void DeserializeTempData_ReturnsEmptyDictionary_DataIsEmpty()
        {
            // Arrange
            var serializer = new TempDataSerializer();

            // Act
            var tempDataDictionary = serializer.Deserialize(new byte[0]);

            // Assert
            Assert.NotNull(tempDataDictionary);
            Assert.Empty(tempDataDictionary);
        }
        public void EnsureObjectCanBeSerialized_ThrowsException_OnInvalidDictionaryType(object value, Type type)
        {
            // Arrange
            var testProvider = new TempDataSerializer();

            // Act & Assert
            var exception = Assert.Throws <InvalidOperationException>(() =>
            {
                testProvider.EnsureObjectCanBeSerialized(value);
            });

            Assert.Equal($"The '{typeof(TempDataSerializer).FullName}' cannot serialize a dictionary " +
                         $"with a key of type '{type}'. The key must be of type 'System.String'.",
                         exception.Message);
        }
        public void EnsureObjectCanBeSerialized_ThrowsException_OnInvalidType(object value, Type type)
        {
            // Arrange
            var testProvider = new TempDataSerializer();

            // Act & Assert
            var exception = Assert.Throws <InvalidOperationException>(() =>
            {
                testProvider.EnsureObjectCanBeSerialized(value);
            });

            Assert.Equal($"The '{typeof(TempDataSerializer).FullName}' cannot serialize " +
                         $"an object of type '{type}'.",
                         exception.Message);
        }
        public void SerializeAndDeserialize_NullValue_RoundTripsSuccessfully()
        {
            // Arrange
            var key          = "NullKey";
            var testProvider = new TempDataSerializer();
            var input        = new Dictionary <string, object>
            {
                { key, null }
            };

            // Act
            var bytes  = testProvider.Serialize(input);
            var values = testProvider.Deserialize(bytes);

            // Assert
            Assert.True(values.ContainsKey(key));
            Assert.Null(values[key]);
        }
Esempio n. 7
0
        public static IReadOnlyList <LifecycleProperty> GetTempDataProperties(
            TempDataSerializer tempDataSerializer,
            Type type)
        {
            List <LifecycleProperty> results = null;
            var errorMessages = new List <string>();

            var propertyHelpers = PropertyHelper.GetVisibleProperties(type: type);

            for (var i = 0; i < propertyHelpers.Length; i++)
            {
                var propertyHelper    = propertyHelpers[i];
                var property          = propertyHelper.Property;
                var tempDataAttribute = property.GetCustomAttribute <TempDataAttribute>();
                if (tempDataAttribute != null && ValidateProperty(tempDataSerializer, errorMessages, propertyHelper.Property))
                {
                    if (results == null)
                    {
                        results = new List <LifecycleProperty>();
                    }

                    var key = tempDataAttribute.Key;
                    if (string.IsNullOrEmpty(key))
                    {
                        key = property.Name;
                    }

                    results.Add(new LifecycleProperty(property, key));
                }
            }

            if (errorMessages.Count > 0)
            {
                throw new InvalidOperationException(string.Join(Environment.NewLine, errorMessages));
            }

            return(results);
        }
        private static void ValidateProperty(PropertyInfo property)
        {
            if (!(property.SetMethod != null &&
                  property.SetMethod.IsPublic &&
                  property.GetMethod != null &&
                  property.GetMethod.IsPublic))
            {
                throw new InvalidOperationException(
                          Resources.FormatTempDataProperties_PublicGetterSetter(property.DeclaringType.FullName, property.Name, nameof(TempDataAttribute)));
            }

            var propertyType = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;

            if (!TempDataSerializer.CanSerializeType(propertyType, out var errorMessage))
            {
                var messageWithPropertyInfo = Resources.FormatTempDataProperties_InvalidType(
                    property.DeclaringType.FullName,
                    property.Name,
                    nameof(TempDataAttribute));

                throw new InvalidOperationException($"{messageWithPropertyInfo} {errorMessage}");
            }
        }
 public TempDataApplicationModelProvider(TempDataSerializer tempDataSerializer)
 {
     _tempDataSerializer = tempDataSerializer;
 }