Click here to Skip to main content
15,884,176 members
Articles / Desktop Programming / WPF

Catel - Part 4 of n: Unit testing with Catel

Rate me:
Please Sign up or sign in to vote.
4.55/5 (10 votes)
28 Jan 2011CPOL11 min read 48.9K   572   11  
This article explains how to write unit tests for MVVM using Catel.
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="PropertyData.cs" company="Catel development team">
//   Copyright (c) 2008 - 2011 Catel development team. All rights reserved.
// </copyright>
// <summary>
//   Object that contains all the property data that is used by the <see cref="DataObjectBase{T}" /> class.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

using System;
using System.Xml.Serialization;

namespace Catel.Data
{
    /// <summary>
    /// Object that contains all the property data that is used by the <see cref="DataObjectBase{T}"/> class.
    /// </summary>
    public class PropertyData
    {
        #region Variables
        /// <summary>
        /// Type of the property.
        /// </summary>
#if !SILVERLIGHT
        [field: NonSerialized]
#endif
        private Type _type;
        #endregion

        #region Constructor & destructor
        /// <summary>
        /// Initializes a new instance of the <see cref="PropertyData"/> class.
        /// </summary>
        /// <param name="name">Name of the property.</param>
        /// <param name="type">Type of the property.</param>
        /// <param name="defaultValue">Default value of the property.</param>
        /// <param name="setParent">if set to <c>true</c>, the parent of the property will be set.</param>
        /// <param name="propertyChangedEventHandler">The property changed event handler.</param>
        /// <param name="isSerializable">if set to <c>true</c>, the property is serializable.</param>
        /// <param name="includeInSerialization">if set to <c>true</c>, the property should be included in the serialization.</param>
        /// <param name="isDataObjectBaseProperty">if set to <c>true</c>, the property is declared by the <see cref="DataObjectBase"/>.</param>
        internal PropertyData(string name, Type type, object defaultValue, bool setParent, EventHandler<PropertyChangedWithSenderEventArgs> propertyChangedEventHandler,
            bool isSerializable, bool includeInSerialization, bool isDataObjectBaseProperty)
        {
            Name = name;
            Type = type;
            DefaultValue = defaultValue;
            SetParent = setParent;
            PropertyChangedEventHandler = propertyChangedEventHandler;
            IsSerializable = isSerializable;
            IncludeInSerialization = includeInSerialization;
            IsDataObjectBaseProperty = isDataObjectBaseProperty;
        }
        #endregion

        #region Properties
        /// <summary>
        /// Gets the name of the property.
        /// </summary>
        public string Name { get; private set; }

        /// <summary>
        /// Gets the type of the property.
        /// </summary>
        [XmlIgnore]
        public Type Type
        {
            get { return _type ?? typeof(object); }
            private set { _type = value; }
        }

        /// <summary>
        /// Gets or sets the default value of the property.
        /// </summary>
        [XmlIgnore]
        private object DefaultValue { get; set; }

        /// <summary>
        /// Gets a value indicating whether to set the parent after creating or deserializing the property.
        /// </summary>
        /// <value><c>true</c> if the parent of the should be set after creating or deserializing the property; otherwise, <c>false</c>.</value>
        public bool SetParent { get; private set; }

        /// <summary>
        /// Gets a value indicating the property changed event handler.
        /// </summary>
        /// <value>The property changed event handler.</value>
        [XmlIgnore]
        internal EventHandler<PropertyChangedWithSenderEventArgs> PropertyChangedEventHandler { get; private set; }

        /// <summary>
        /// Gets a value indicating whether this property is serializable.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this property is serializable; otherwise, <c>false</c>.
        /// </value>
        [XmlIgnore]
        public bool IsSerializable { get; private set; }

        /// <summary>
        /// Gets a value indicating whether whether the property should be included in the serialization.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if the property should be included in the serialization; otherwise, <c>false</c>.
        /// </value>
        [XmlIgnore]
        public bool IncludeInSerialization { get; private set; }

        /// <summary>
        /// Gets a value indicating whether the property is declared by the <see cref="DataObjectBase"/>.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if the property is declared by the <see cref="DataObjectBase"/>; otherwise, <c>false</c>.
        /// </value>
        [XmlIgnore]
        public bool IsDataObjectBaseProperty { get; private set; }
        #endregion

        #region Methods
        /// <summary>
        /// Returns the default value of the property.
        /// </summary>
        /// <returns>Default value of the property.</returns>
        public object GetDefaultValue()
        {
            return DefaultValue;
        }

        /// <summary>
        /// Returns the typed default value of the property.
        /// </summary>
        /// <typeparam name="TValue">The type of the value.</typeparam>
        /// <returns>Default value of the property.</returns>
        public TValue GetDefaultValue<TValue>()
        {
            return ((DefaultValue != null) && (DefaultValue is TValue)) ? (TValue)DefaultValue : default(TValue);
        }
        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Netherlands Netherlands
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions