public void ReadMetadata() { string content = @" <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003' > <ItemDefinitionGroup> <i1> <m1>v1</m1> <m2 Condition='c'>v2</m2> <m1>v3</m1> </i1> </ItemDefinitionGroup> </Project> "; ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); ProjectItemDefinitionGroupElement itemDefinitionGroup = (ProjectItemDefinitionGroupElement)Helpers.GetFirst(project.Children); ProjectItemDefinitionElement itemDefinition = Helpers.GetFirst(itemDefinitionGroup.ItemDefinitions); var metadata = Helpers.MakeList(itemDefinition.Metadata); Assert.AreEqual(3, metadata.Count); Assert.AreEqual("m1", metadata[0].Name); Assert.AreEqual("v1", metadata[0].Value); Assert.AreEqual("m2", metadata[1].Name); Assert.AreEqual("v2", metadata[1].Value); Assert.AreEqual("c", metadata[1].Condition); Assert.AreEqual("m1", metadata[2].Name); Assert.AreEqual("v3", metadata[2].Value); }
internal void AddItems(ProjectItemDefinitionElement xml) { foreach (var item in xml.Metadata) { metadata.Add(new ProjectMetadata(project, ItemType, metadata, m => metadata.Remove(m), item)); } }
public void ReadMetadata() { string content = @" <Project> <ItemDefinitionGroup> <i1 m1='v1'> <m2 Condition='c'>v2</m2> <m1>v3</m1> </i1> </ItemDefinitionGroup> </Project> "; ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); ProjectItemDefinitionGroupElement itemDefinitionGroup = (ProjectItemDefinitionGroupElement)Helpers.GetFirst(project.Children); ProjectItemDefinitionElement itemDefinition = Helpers.GetFirst(itemDefinitionGroup.ItemDefinitions); var metadata = Helpers.MakeList(itemDefinition.Metadata); Assert.Equal(3, metadata.Count); Assert.Equal("m1", metadata[0].Name); Assert.Equal("v1", metadata[0].Value); Assert.Equal("m2", metadata[1].Name); Assert.Equal("v2", metadata[1].Value); Assert.Equal("c", metadata[1].Condition); Assert.Equal("m1", metadata[2].Name); Assert.Equal("v3", metadata[2].Value); }
public static void Verify(ProjectItemDefinitionElement viewXml, ProjectItemDefinitionElement realXml, ValidationContext context = null) { if (viewXml == null && realXml == null) { return; } VerifyProjectElement(viewXml, realXml, context); Assert.Equal(realXml.ItemType, viewXml.ItemType); ViewValidation.Verify(viewXml.Metadata, realXml.Metadata, ViewValidation.Verify, context); }
internal static StringPropertyList LookupMetadataPathList(this ProjectItemDefinitionElement pide, string metadataName, string defaultValue = null) { foreach (var m in pide.Metadata.Where(metadata => metadata.Name == metadataName)) { var metadata = m; return(_stringPropertyList.GetOrAdd(metadata, () => _stringPropertyList.AddOrSet(metadata, new UniquePathPropertyList(() => metadata.Value, v => metadata.Value = v)))); } var n = pide.AddMetadata(metadataName, defaultValue ?? ""); return(_stringPropertyList.GetOrAdd(n, () => _stringPropertyList.AddOrSet(n, new UniquePathPropertyList(() => n.Value, v => n.Value = v)))); }
internal void AddItems(ProjectItemDefinitionElement xml) { foreach (var item in xml.Metadata) { var existing = metadata.FirstOrDefault(i => i.Name == item.Name); if (existing != null) { metadata.Remove(existing); } metadata.Add(new ProjectMetadataInstance(item.Name, item.Value)); } }
public void SetCondition() { ProjectRootElement project = ProjectRootElement.Create(); ProjectItemDefinitionElement itemDefinition = project.AddItemDefinitionGroup().AddItemDefinition("i"); Helpers.ClearDirtyFlag(project); itemDefinition.Condition = "c"; Assert.AreEqual("c", itemDefinition.Condition); Assert.AreEqual(true, project.HasUnsavedChanges); }
/// <summary> /// Creates a ProjectItemDefinitionElement representing this instance. /// </summary> internal ProjectItemDefinitionElement ToProjectItemDefinitionElement(ProjectElementContainer parent) { ProjectItemDefinitionElement element = parent.ContainingProject.CreateItemDefinitionElement(ItemType); parent.AppendChild(element); foreach (ProjectMetadataInstance metadataInstance in _metadata) { element.AddMetadata(metadataInstance.Name, metadataInstance.EvaluatedValue); } return(element); }
public void ReadNoChildren() { string content = @" <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003' > <ItemDefinitionGroup> <i/> </ItemDefinitionGroup> </Project> "; ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); ProjectItemDefinitionGroupElement itemDefinitionGroup = (ProjectItemDefinitionGroupElement)Helpers.GetFirst(project.Children); ProjectItemDefinitionElement itemDefinition = Helpers.GetFirst(itemDefinitionGroup.ItemDefinitions); Assert.AreEqual(0, Helpers.Count(itemDefinition.Metadata)); }
public void ReadNoChildren() { string content = @" <Project> <ItemDefinitionGroup> <i/> </ItemDefinitionGroup> </Project> "; ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); ProjectItemDefinitionGroupElement itemDefinitionGroup = (ProjectItemDefinitionGroupElement)Helpers.GetFirst(project.Children); ProjectItemDefinitionElement itemDefinition = Helpers.GetFirst(itemDefinitionGroup.ItemDefinitions); Assert.Equal(0, Helpers.Count(itemDefinition.Metadata)); }
/// <summary> /// Sets a new metadata value on the ItemDefinition. /// </summary> /// <remarks>Unevaluated value is assumed to be escaped as necessary</remarks> public ProjectMetadata SetMetadataValue(string name, string unevaluatedValue) { if (Link != null) { return(Link.SetMetadataValue(name, unevaluatedValue)); } XmlUtilities.VerifyThrowArgumentValidElementName(name); ErrorUtilities.VerifyThrowArgument(!FileUtilities.ItemSpecModifiers.IsItemSpecModifier(name), "ItemSpecModifierCannotBeCustomMetadata", name); ErrorUtilities.VerifyThrowInvalidOperation(!XMakeElements.ReservedItemNames.Contains(name), "CannotModifyReservedItemMetadata", name); ProjectMetadata metadatum; if (_metadata != null) { metadatum = _metadata[name]; if (metadatum != null) { Project.VerifyThrowInvalidOperationNotImported(metadatum.Xml.ContainingProject); metadatum.UnevaluatedValue = unevaluatedValue; return(metadatum); } } // We can't use the item definition that this object came from as a root, as it doesn't map directly // to a single XML element. Instead, add a new one to the project. Best we can do. ProjectItemDefinitionElement itemDefinition = _project.Xml.AddItemDefinition(_itemType); ProjectMetadataElement metadatumXml = itemDefinition.AddMetadata(name, unevaluatedValue); _metadata = _metadata ?? new PropertyDictionary <ProjectMetadata>(); string evaluatedValueEscaped = _project.ExpandMetadataValueBestEffortLeaveEscaped(this, unevaluatedValue, metadatumXml.Location); metadatum = new ProjectMetadata(this, metadatumXml, evaluatedValueEscaped, null /* predecessor unknown */); _metadata.Set(metadatum); return(metadatum); }
public void ReadBasic() { string content = @" <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003' > <ItemDefinitionGroup> <i> <m1>v1</m1> </i> </ItemDefinitionGroup> </Project> "; ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); ProjectItemDefinitionGroupElement itemDefinitionGroup = (ProjectItemDefinitionGroupElement)Helpers.GetFirst(project.Children); ProjectItemDefinitionElement definition = Helpers.GetFirst(itemDefinitionGroup.ItemDefinitions); Assert.AreEqual("i", definition.ItemType); Assert.AreEqual(1, Helpers.Count(definition.Metadata)); Assert.AreEqual("m1", Helpers.GetFirst(definition.Metadata).Name); Assert.AreEqual("v1", Helpers.GetFirst(definition.Metadata).Value); }
public void ReadBasic() { string content = @" <Project> <ItemDefinitionGroup> <i> <m1>v1</m1> </i> </ItemDefinitionGroup> </Project> "; ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); ProjectItemDefinitionGroupElement itemDefinitionGroup = (ProjectItemDefinitionGroupElement)Helpers.GetFirst(project.Children); ProjectItemDefinitionElement definition = Helpers.GetFirst(itemDefinitionGroup.ItemDefinitions); Assert.Equal("i", definition.ItemType); Assert.Equal(1, Helpers.Count(definition.Metadata)); Assert.Equal("m1", Helpers.GetFirst(definition.Metadata).Name); Assert.Equal("v1", Helpers.GetFirst(definition.Metadata).Value); }
internal ProjectItemDefinitionInstance(ProjectItemDefinitionElement xml) { ItemType = xml.ItemType; AddItems(xml); }