public void AccessorsWithMetadata() { ProjectItemInstance item = GetItemInstance(); item.SetMetadata("m1", "v0"); item.SetMetadata("m1", "v1"); item.SetMetadata("m2", "v2"); Assert.Equal("m1", item.GetMetadata("m1").Name); Assert.Equal("m2", item.GetMetadata("m2").Name); Assert.Equal("v1", item.GetMetadataValue("m1")); Assert.Equal("v2", item.GetMetadataValue("m2")); }
public void InvalidUnqualifiedMetadataReference() { Assert.Throws <InvalidProjectFileException>(() => { ProjectInstance project = ProjectHelpers.CreateEmptyProjectInstance(); List <string> parameters = new List <string>(); parameters.Add("@(File)"); parameters.Add("%(Culture)"); ItemDictionary <ProjectItemInstance> itemsByType = new ItemDictionary <ProjectItemInstance>(); List <ProjectItemInstance> items = new List <ProjectItemInstance>(); ProjectItemInstance a = new ProjectItemInstance(project, "File", "a.foo", project.FullPath); items.Add(a); ProjectItemInstance b = new ProjectItemInstance(project, "File", "b.foo", project.FullPath); items.Add(b); a.SetMetadata("Culture", "fr-fr"); itemsByType.ImportItems(items); PropertyDictionary <ProjectPropertyInstance> properties = new PropertyDictionary <ProjectPropertyInstance>(); // This is expected to throw because not all items contain a value for metadata "Culture". // Only a.foo has a Culture metadata. b.foo does not. List <ItemBucket> buckets = BatchingEngine.PrepareBatchingBuckets(parameters, CreateLookup(itemsByType, properties), MockElementLocation.Instance); } ); }
public void ValidUnqualifiedMetadataReference() { ProjectInstance project = ProjectHelpers.CreateEmptyProjectInstance(); List <string> parameters = new List <string>(); parameters.Add("@(File)"); parameters.Add("%(Culture)"); ItemDictionary <ProjectItemInstance> itemsByType = new ItemDictionary <ProjectItemInstance>(); List <ProjectItemInstance> items = new List <ProjectItemInstance>(); ProjectItemInstance a = new ProjectItemInstance(project, "File", "a.foo", project.FullPath); ProjectItemInstance b = new ProjectItemInstance(project, "File", "b.foo", project.FullPath); a.SetMetadata("Culture", "fr-fr"); b.SetMetadata("Culture", "en-en"); items.Add(a); items.Add(b); itemsByType.ImportItems(items); PropertyDictionary <ProjectPropertyInstance> properties = new PropertyDictionary <ProjectPropertyInstance>(); List <ItemBucket> buckets = BatchingEngine.PrepareBatchingBuckets(parameters, CreateLookup(itemsByType, properties), null); Assert.Equal(2, buckets.Count); }
public void SetNullMetadataValue() { ProjectItemInstance item = GetItemInstance(); item.SetMetadata("m", null); Assert.Equal(String.Empty, item.GetMetadataValue("m")); }
public void SetMetadata() { ProjectItemInstance item = GetItemInstance(); item.SetMetadata("m", "m1"); Assert.Equal("m1", item.GetMetadataValue("m")); }
public void SetMetadataEmptyString() { ProjectItemInstance item = GetItemInstance(); item.SetMetadata("m", String.Empty); Assert.AreEqual(String.Empty, item.GetMetadataValue("m")); }
/// <summary> /// Get a single metadata instance /// </summary> private static ProjectMetadataInstance GetMetadataInstance() { Project project = new Project(); ProjectInstance projectInstance = project.CreateProjectInstance(); ProjectItemInstance item = projectInstance.AddItem("i", "i1"); ProjectMetadataInstance metadata = item.SetMetadata("m", "m1"); return(metadata); }
public void SetInvalidEmptyMetadataName() { Assert.Throws <ArgumentException>(() => { ProjectItemInstance item = GetItemInstance(); item.SetMetadata(String.Empty, "m1"); } ); }
public void SetInvalidNullMetadataName() { Assert.Throws <ArgumentNullException>(() => { ProjectItemInstance item = GetItemInstance(); item.SetMetadata(null, "m1"); } ); }
public void CastToITaskItem() { ProjectItemInstance item = GetItemInstance(); item.SetMetadata("m", "m1"); ITaskItem taskItem = (ITaskItem)item; Assert.Equal(item.EvaluatedInclude, taskItem.ItemSpec); Assert.Equal(1 + BuiltInMetadataCount, taskItem.MetadataCount); Assert.Equal(1 + BuiltInMetadataCount, taskItem.MetadataNames.Count); Assert.Equal("m1", taskItem.GetMetadata("m")); taskItem.SetMetadata("m", "m2"); Assert.Equal("m2", item.GetMetadataValue("m")); }
private void ExecuteAdd(ProjectItemGroupTaskItemInstance child, ItemBucket bucket, ISet <string> keepMetadata, ISet <string> removeMetadata) { // First, collect up the appropriate metadata collections. We need the one from the item definition, if any, and // the one we are using for this batching bucket. ProjectItemDefinitionInstance itemDefinition; Project.ItemDefinitions.TryGetValue(child.ItemType, out itemDefinition); // The NestedMetadataTable will handle the aggregation of the different metadata collections NestedMetadataTable metadataTable = new NestedMetadataTable(child.ItemType, bucket.Expander.Metadata, itemDefinition); IMetadataTable originalMetadataTable = bucket.Expander.Metadata; bucket.Expander.Metadata = metadataTable; // Second, expand the item include and exclude, and filter existing metadata as appropriate. List <ProjectItemInstance> itemsToAdd = ExpandItemIntoItems(child, bucket.Expander, keepMetadata, removeMetadata); // Third, expand the metadata. foreach (ProjectItemGroupTaskMetadataInstance metadataInstance in child.Metadata) { bool condition = ConditionEvaluator.EvaluateCondition ( metadataInstance.Condition, ParserOptions.AllowAll, bucket.Expander, ExpanderOptions.ExpandAll, Project.Directory, metadataInstance.Location, LoggingContext.LoggingService, LoggingContext.BuildEventContext, FileSystems.Default); if (condition) { string evaluatedValue = bucket.Expander.ExpandIntoStringLeaveEscaped(metadataInstance.Value, ExpanderOptions.ExpandAll, metadataInstance.Location); // This both stores the metadata so we can add it to all the items we just created later, and // exposes this metadata to further metadata evaluations in subsequent loop iterations. metadataTable.SetValue(metadataInstance.Name, evaluatedValue); } } // Finally, copy the added metadata onto the new items. The set call is additive. ProjectItemInstance.SetMetadata(metadataTable.AddedMetadata, itemsToAdd); // Add in one operation for potential copy-on-write // Restore the original metadata table. bucket.Expander.Metadata = originalMetadataTable; // Determine if we should NOT add duplicate entries bool keepDuplicates = ConditionEvaluator.EvaluateCondition ( child.KeepDuplicates, ParserOptions.AllowAll, bucket.Expander, ExpanderOptions.ExpandAll, Project.Directory, child.KeepDuplicatesLocation, LoggingContext.LoggingService, LoggingContext.BuildEventContext, FileSystems.Default); if (LogTaskInputs && !LoggingContext.LoggingService.OnlyLogCriticalEvents && itemsToAdd?.Count > 0) { ItemGroupLoggingHelper.LogTaskParameter( LoggingContext, TaskParameterMessageKind.AddItem, child.ItemType, itemsToAdd, logItemMetadata: true, child.Location); } // Now add the items we created to the lookup. bucket.Lookup.AddNewItemsOfItemType(child.ItemType, itemsToAdd, !keepDuplicates); // Add in one operation for potential copy-on-write }
public void ITaskItem2Operations() { Project project = new Project(); ProjectInstance projectInstance = project.CreateProjectInstance(); ProjectItemInstance item = projectInstance.AddItem("EscapedItem", "esca%20ped%3bitem"); item.SetMetadata("m", "m1"); item.SetMetadata("m;", "m%3b1"); ITaskItem2 taskItem = (ITaskItem2)item; Assert.Equal(taskItem.EvaluatedIncludeEscaped, "esca%20ped%3bitem"); Assert.Equal(taskItem.ItemSpec, "esca ped;item"); Assert.Equal(taskItem.GetMetadata("m;"), "m;1"); Assert.Equal(taskItem.GetMetadataValueEscaped("m;"), "m%3b1"); Assert.Equal(taskItem.GetMetadataValueEscaped("m"), "m1"); Assert.Equal(taskItem.EvaluatedIncludeEscaped, "esca%20ped%3bitem"); Assert.Equal(taskItem.ItemSpec, "esca ped;item"); ITaskItem2 taskItem2 = new Microsoft.Build.Utilities.TaskItem(taskItem); taskItem2.SetMetadataValueLiteral("m;", "m;2"); Assert.Equal(taskItem2.GetMetadataValueEscaped("m;"), "m%3b2"); Assert.Equal(taskItem2.GetMetadata("m;"), "m;2"); IDictionary <string, string> taskItem2Metadata = (IDictionary <string, string>)taskItem2.CloneCustomMetadata(); Assert.Equal(3, taskItem2Metadata.Count); foreach (KeyValuePair <string, string> pair in taskItem2Metadata) { if (pair.Key.Equals("m")) { Assert.Equal("m1", pair.Value); } if (pair.Key.Equals("m;")) { Assert.Equal("m;2", pair.Value); } if (pair.Key.Equals("OriginalItemSpec")) { Assert.Equal("esca ped;item", pair.Value); } } IDictionary <string, string> taskItem2MetadataEscaped = (IDictionary <string, string>)taskItem2.CloneCustomMetadataEscaped(); Assert.Equal(3, taskItem2MetadataEscaped.Count); foreach (KeyValuePair <string, string> pair in taskItem2MetadataEscaped) { if (pair.Key.Equals("m")) { Assert.Equal("m1", pair.Value); } if (pair.Key.Equals("m;")) { Assert.Equal("m%3b2", pair.Value); } if (pair.Key.Equals("OriginalItemSpec")) { Assert.Equal("esca%20ped%3bitem", pair.Value); } } }
public void SetInvalidEmptyMetadataName() { ProjectItemInstance item = GetItemInstance(); item.SetMetadata(String.Empty, "m1"); }
public void SetInvalidNullMetadataName() { ProjectItemInstance item = GetItemInstance(); item.SetMetadata(null, "m1"); }