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 }
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; }