Example #1
0
        // <summary>
        // Compare a collection of clr properties.
        // </summary>
        // <returns>
        // true, if all properties are equivalent
        // false, otherwise
        // </returns>
        private static bool CompareClrPropertyCollection(
            Object firstNode,
            Dictionary <string, PropertyDescriptor> properties1,
            Object secondNode,
            Dictionary <string, PropertyDescriptor> properties2)
        {
            IEnumerator <string> ie1 = properties1.Keys.GetEnumerator();

            while (ie1.MoveNext())
            {
                string propertyName = ie1.Current;

                // Check that the second tree contains the property.
                if (!properties2.ContainsKey(propertyName))
                {
                    TreeComparer.SendCompareMessage("Property '" + propertyName + "' is not in second tree.");
                    TreeComparer.Break();
                    return(false);
                }

                // If property was in skip collection, ignore it
                if (!TreeComparer.ShouldIgnoreProperty(propertyName, firstNode, IgnoreProperty.IgnoreValueOnly))
                {
                    // Compare properties
                    if (!TreeComparer.CompareClrProperty(
                            firstNode,
                            properties1[propertyName],
                            secondNode,
                            properties2[propertyName]))
                    {
                        TreeComparer.SendCompareMessage("Value of property '" + propertyName + "' is different.");
                        TreeComparer.Break();
                        return(false);
                    }
                }

                properties2.Remove(propertyName);
            }

            // Check that the second tree doesn't have more properties than the first tree.
            if (properties2.Count > 0)
            {
                IEnumerator <string> ie2 = properties2.Keys.GetEnumerator();
                ie2.MoveNext();

                TreeComparer.SendCompareMessage("Property '" + properties2[ie2.Current].Name + "' is not in first tree.");
                TreeComparer.Break();
                return(false);
            }

            return(true);
        }
Example #2
0
        // <summary>
        // Get clr properties
        // </summary>
        // <param name="owner">owner</param>
        private static Dictionary <string, PropertyDescriptor> GetClrProperties(object owner)
        {
            Dictionary <string, PropertyDescriptor> clrProperties = new Dictionary <string, PropertyDescriptor>();
            PropertyDescriptorCollection            properties    = TypeDescriptor.GetProperties(owner);

            foreach (PropertyDescriptor property in properties)
            {
                // skip properties
                if (TreeComparer.ShouldIgnoreProperty(property.Name, owner, IgnoreProperty.IgnoreNameAndValue))
                {
                    continue;
                }

                clrProperties.Add(property.Name, property);
            }

            return(clrProperties);
        }