public void ProjectMetadataElementModify()
        {
            var pair    = GetNewInMemoryProject("temp.prj");
            var xmlPair = new ProjectXmlPair(pair);

            var item1    = xmlPair.AddNewChaildWithVerify <ProjectItemElement>(ObjectType.View, "newItem", (p, i) => p.AddItem("cpp", i), (pi, i) => pi.Include == i);
            var metadata = item1.AddNewChaildWithVerify <ProjectMetadataElement>(ObjectType.View, "metadata", (p, n) => p.AddMetadata(n, "value"), (md, n) => md.Name == n);

            metadata.VerifySetter("NewValue", (md) => md.Value, (md, v) => md.Value = v);
            metadata.VerifySetter("NewName", (md) => md.Name, (md, v) => md.Name    = v);
            // this is tricky
            metadata.VerifySetter(true, (md) => md.ExpressedAsAttribute, (md, v) => md.ExpressedAsAttribute = v);
            xmlPair.Verify(); // this will compare all up to including the XML content of entire project
            metadata.VerifySetter(false, (md) => md.ExpressedAsAttribute, (md, v) => md.ExpressedAsAttribute = v);
            xmlPair.Verify(); // this will compare all up to including the XML content of entire project
        }
        public void ProjectPropertyElementModify()
        {
            var pair    = GetNewInMemoryProject("temp.prj");
            var xmlPair = new ProjectXmlPair(pair);
            var propGrp = xmlPair.AddNewLabeledChaildWithVerify <ProjectPropertyGroupElement>(ObjectType.View, "grp", (p, l) => p.AddPropertyGroup());
            var prop    = propGrp.AddNewChaildWithVerify <ProjectPropertyElement>(ObjectType.View, "prop", (pg, n) => pg.AddProperty(n, $"value{n}"), (p, n) => p.Name == n);

            prop.VerifySetter("newValue", (p) => p.Value, (p, v) => p.Value = v);
            prop.VerifySetter("newName", (p) => p.Name, (p, v) => p.Name    = v);
            xmlPair.Verify(); // after rename
        }
Example #3
0
        private void CloneAndAddInternal(ProjectRootElement sourceProject)
        {
            bool externalSource = sourceProject != null;

            var projectPair = GetNewInMemoryProject("Clone", TestCollectionGroup.BigProjectFile);
            var xmlPair     = new ProjectXmlPair(projectPair);

            Assert.True(xmlPair.View.HasUnsavedChanges);
            xmlPair.View.Save();
            Assert.False(xmlPair.View.HasUnsavedChanges);

            sourceProject = sourceProject ?? xmlPair.View;


            // var existingItemGroup1 = sourceProject.QuerySingleChildrenWithValidation<ProjectItemGroupElement>((ig) => ig.Label == "Group1");
            var existingItemGroupList = sourceProject.AllChildren.OfType <ProjectItemGroupElement>().Where(((ig) => ig.Label == "Group1")).ToList();

            Assert.Single(existingItemGroupList);
            var existingItemGroup = existingItemGroupList[0];

            var cloned = (ProjectItemGroupElement)existingItemGroup.Clone();

            Assert.NotSame(cloned, existingItemGroup);
            Assert.False(sourceProject.HasUnsavedChanges);

            var sourceIsALink = ViewValidation.IsLinkedObject(sourceProject);

            ViewValidation.VerifyNotNull(cloned, sourceIsALink);


            if (externalSource)
            {
                Assert.ThrowsAny <InvalidOperationException>(() => xmlPair.View.AppendChild(cloned));
            }
            else
            {
                var clonedPair = xmlPair.CreateFromView(cloned);
                xmlPair.QueryChildrenWithValidation <ProjectItemGroupElement>((ig) => ig == cloned || ig == clonedPair.Real, 0);

                xmlPair.View.AppendChild(cloned);
                Assert.True(xmlPair.View.HasUnsavedChanges);
                Assert.True(xmlPair.Real.HasUnsavedChanges);

                clonedPair.VerifySame(xmlPair.QuerySingleChildrenWithValidation <ProjectItemGroupElement>((ig) => ig == clonedPair.View || ig == clonedPair.Real));
                xmlPair.QueryChildrenWithValidation <ProjectItemGroupElement>((ig) => ig.Label == "Group1", 2);

                clonedPair.VerifySetter("Group2", (g) => g.Label, (g, v) => g.Label = v);
                xmlPair.Verify();

                Assert.Equal("Group1", existingItemGroup.Label);
            }
        }
        public void ProjectItemElementModify()
        {
            var pair        = GetNewInMemoryProject("temp.prj");
            var xmlPair     = new ProjectXmlPair(pair);
            var target      = xmlPair.AddNewChaildWithVerify <ProjectTargetElement>(ObjectType.View, "NewTarget", (p, n) => p.AddTarget(n), (t, n) => string.Equals(t.Name, n));
            var itemGrp     = target.AddNewLabeledChaildWithVerify <ProjectItemGroupElement>(ObjectType.View, "tagetigrp", (p, s) => p.AddItemGroup());
            var itemInTargt = itemGrp.AddNewChaildWithVerify <ProjectItemElement>(ObjectType.View, "targetfile.cs", (p, s) => p.AddItem("cs", s), (pe, s) => pe.Include == s);

            var item = xmlPair.AddNewChaildWithVerify <ProjectItemElement>(ObjectType.View, "file.cpp", (p, s) => p.AddItem("cpp", s), (pe, s) => pe.Include == s);

            item.VerifySetter("newInclude", (i) => i.Include, (i, v) => i.Include = v);
            item.VerifySetter("newExclude", (i) => i.Exclude, (i, v) => i.Exclude = v);
            item.VerifySetter("newType", (i) => i.ItemType, (i, v) => i.ItemType  = v);
            xmlPair.Verify();                                                            // verify rename, thoroughly.

            Assert.ThrowsAny <InvalidOperationException>(() => item.View.Remove = "xx"); // Include/Update/Remove are exclusive
            Assert.ThrowsAny <InvalidOperationException>(() => item.View.Update = "xx"); // Include/Update/Remove are exclusive
            item.View.Include = null;
            item.VerifySetter("newRemove", (i) => i.Remove, (i, v) => i.Remove   = v);
            Assert.ThrowsAny <InvalidOperationException>(() => item.View.Include = "xx"); // Include/Update/Remove are exclusive
            Assert.ThrowsAny <InvalidOperationException>(() => item.View.Update  = "xx"); // Include/Update/Remove are exclusive
            item.View.Remove = null;
            item.VerifySetter("newUpdate", (i) => i.Update, (i, v) => i.Update   = v);
            Assert.ThrowsAny <InvalidOperationException>(() => item.View.Include = "xx"); // Include/Update/Remove are exclusive
            Assert.ThrowsAny <InvalidOperationException>(() => item.View.Remove  = "xx"); // Include/Update/Remove are exclusive

            // only for items inside "Target"
            Assert.ThrowsAny <InvalidOperationException>(() => item.View.KeepMetadata   = "xx");
            Assert.ThrowsAny <InvalidOperationException>(() => item.View.KeepDuplicates = "xx");
            Assert.ThrowsAny <InvalidOperationException>(() => item.View.RemoveMetadata = "xx");

            Assert.False(item.View.HasMetadata);
            Assert.Empty(item.View.Metadata);

            item.Add2NewChildrenWithVerify <ProjectMetadataElement>("mshort", (id, n) => id.AddMetadata(n, $"value{n}"), (md, n) => md.Name == n, out var mdShort1, out var mdShort2);
            Assert.Equal(2, item.View.Metadata.Count);
            item.Add2NewChildrenWithVerify <ProjectMetadataElement>("mlong", (id, n) => id.AddMetadata(n, $"value{n}", false), (md, n) => md.Name == n, out var mdLong1, out var mdLong2);
            Assert.Equal(4, item.View.Metadata.Count);
            item.Add2NewChildrenWithVerify <ProjectMetadataElement>("mlongAttrib", (id, n) => id.AddMetadata(n, $"value{n}", true), (md, n) => md.Name == n, out var mdAttrib1, out var mdAttrib2);
            Assert.Equal(6, item.View.Metadata.Count);


            // verify target items only props.
            itemInTargt.VerifySetter("newKeepDups", (i) => i.KeepDuplicates, (i, v) => i.KeepDuplicates = v);
            itemInTargt.VerifySetter("newKeepMetadata", (i) => i.KeepMetadata, (i, v) => i.KeepMetadata = v);
            Assert.ThrowsAny <InvalidOperationException>(() => itemInTargt.View.RemoveMetadata          = "xx"); // RemoveMetadata/KeepDuplicate exclusive
            itemInTargt.View.KeepMetadata = null;
            itemInTargt.VerifySetter("newRemoveMetadat", (i) => i.RemoveMetadata, (i, v) => i.RemoveMetadata = v);
            Assert.ThrowsAny <InvalidOperationException>(() => itemInTargt.View.KeepMetadata = "xx"); // RemoveMetadata/KeepDuplicate exclusive
        }
        public void ProjectSdkElementModify()
        {
            var pair       = GetNewInMemoryProject("temp.prj");
            var xmlPair    = new ProjectXmlPair(pair);
            var sdkElement = xmlPair.AppendNewChaildWithVerify <ProjectSdkElement>(ObjectType.View, "sdk", (p, n) => p.CreateProjectSdkElement(n, "sdkVer"), (s, n) => true);

            var curiousOfHowToSpecifySdk = xmlPair.View.RawXml;

            sdkElement.VerifySetter("newVersion", (s) => s.Version, (s, v) => s.Version = v);
            sdkElement.VerifySetter("newMinVersion", (s) => s.MinimumVersion, (s, v) => s.MinimumVersion = v);
            sdkElement.VerifySetter("newName", (s) => s.Name, (s, v) => s.Name = v);
            xmlPair.Verify();

            var curiousOfHowToSpecifySdk2 = xmlPair.View.RawXml;
        }