/// <summary>
        /// Creates a new implemented object of the given interface type. Also checks if
        /// the given element is assignable to the given msbuild type.
        /// </summary>
        /// <param name="element"><seealso cref="XmlElement"/> to create a msbuild element from</param>
        /// <typeparam name="T">Type to create a new object from</typeparam>
        /// <returns>Created object if the given element is assignable to the given type</returns>
        public virtual T Create <T>(XmlElement element) where T : IMsBuildElement
        {
            IMsBuildElement createdObject = null;

            if (typeof(T) == typeof(IMsBuildTarget) &&
                MsBuildXmlTargetImplementation.XmlElementName.Equals(element.Name,
                                                                     StringComparison.OrdinalIgnoreCase))
            {
                createdObject = new MsBuildXmlTargetImplementation(element);
            }

            if (typeof(T) == typeof(IMsBuildOnError) &&
                MsBuildXmlOnErrorTaskImplementation.XmlElementName.Equals(element.Name,
                                                                          StringComparison.OrdinalIgnoreCase))
            {
                createdObject = new MsBuildXmlOnErrorTaskImplementation(element);
            }

            if (typeof(T) == typeof(IMsBuildPropertyGroup) &&
                MsBuildXmlPropertyGroupImplementation.XmlElementName.Equals(element.Name,
                                                                            StringComparison.OrdinalIgnoreCase))
            {
                createdObject = new MsBuildXmlPropertyGroupImplementation(element);
            }

            return((T)createdObject);
        }
        Construct_WithElementAndSetContinueOnErrorToErrorAndStop_ShouldInitializeContinueOnErrorToErrorAndStop()
        {
            MsBuildXmlOnErrorTaskImplementation propertyGroupImplementation =
                new MsBuildXmlOnErrorTaskImplementation(
                    CreateFromString("<OnError ExecuteTargets=\"TargetA\" ContinueOnError=\"ErrorAndStop\" />"));

            Assert.AreEqual(ContinueOnError.ErrorAndStop, propertyGroupImplementation.ContinueOnError);
        }
        public void Construct_WithElementContainingOneTarget_ShouldInitializeTargets()
        {
            MsBuildXmlOnErrorTaskImplementation propertyGroupImplementation =
                new MsBuildXmlOnErrorTaskImplementation(
                    CreateFromString("<OnError ExecuteTargets=\"TargetA\" />"));

            Assert.AreEqual("TargetA", propertyGroupImplementation.ExecuteTargets[0]);
        }
 public void Construct_WithNullElement_ShouldThrowArgumentNullException()
 {
     MsBuildXmlOnErrorTaskImplementation propertyGroupImplementation =
         new MsBuildXmlOnErrorTaskImplementation(null);
 }