/// <summary>
        /// Verifies that the attributes stored in an extension match what is expected. Asserts will be raised for any
        /// differences.
        /// </summary>
        /// <param name="expected">The attributes that are expected to be present.</param>
        /// <param name="actual">The extension that contains the actual attributes.</param>
        private void VerifyAttributes(List<IExtensionAttribute> expected, IExtension actual)
        {
            if (expected == null)
            {
                Assert.IsFalse(actual.HasAttributes, "HasAttributes is incorrect.");
                Assert.IsNull(actual.GetAttributes(), "Attributes should be null.");
            }
            else
            {
                IEnumerable<IExtensionAttribute> attributes;
                IList<IExtensionAttribute> attributesList;

                attributes = actual.GetAttributes();

                Assert.IsTrue(actual.HasAttributes, "HasAttributes is incorrect.");
                Assert.IsNotNull(attributes, "Attributes should not be null.");
                attributesList = attributes.ToList();
                Assert.AreEqual(expected.Count, attributesList.Count, "Attributes Count is incorrect.");

                for (int i = 0; i < expected.Count; i++)
                {
                    Assert.AreEqual(expected[i].LocalName, attributesList[i].LocalName, "Attribute[{0}] Name is incorrect.", i);
                    Assert.AreEqual(expected[i].Namespace, attributesList[i].Namespace, "Attribute[{0}] Namespace is incorrect.", i);
                    Assert.AreEqual(expected[i].Value, attributesList[i].Value, "Attribute[{0}] Value is incorrect.", i);
                }
            }
        }