/// <summary> /// BuildItems are passed around internally, including across the wire. Before passing these /// to tasks, they need to be converted into TaskItems using this method. /// </summary> internal void ConvertToTaskItems() { // If outputsByTarget was null then we dont have to re-create anything as nothing was passed over if (null != outputsByTarget) { string[] keys = new string[outputsByTarget.Count]; outputsByTarget.Keys.CopyTo(keys, 0); for (int key_index = 0; key_index < keys.Length; key_index++) { object key = keys[key_index]; BuildItem[] originalArray = (BuildItem[])outputsByTarget[key]; outputsByTarget[key] = BuildItem.ConvertBuildItemArrayToTaskItems(originalArray); } } }
public void BuildItemToTaskItemAndBack() { BuildItem[] buildItems = new BuildItem[2]; buildItems[0] = new BuildItem("item1name", "item1$$value"); buildItems[0].SetMetadata("Something", "Dir\\**"); buildItems[0].SetMetadata("stupidescaping", "nokidding"); buildItems[1] = new BuildItem("item2", "value2"); buildItems[1].SetMetadata("name", "value"); buildItems[1].SetMetadata("OtherName", ";Value;"); ITaskItem[] pass1 = BuildItem.ConvertBuildItemArrayToTaskItems(buildItems); for (int i = 0; i < 2; i++) { Assert.AreEqual(pass1[i].ItemSpec, buildItems[i].FinalItemSpec); foreach (string metadataName in pass1[i].MetadataNames) { Assert.AreEqual(pass1[i].GetMetadata(metadataName), buildItems[i].GetEvaluatedMetadata(metadataName)); } } // This will create nameless BuildItems, so it's a different code path - that's why we need this and // the following test BuildItem[] pass2 = BuildItem.ConvertTaskItemArrayToBuildItems(pass1); for (int i = 0; i < 2; i++) { Assert.AreEqual(pass1[i].ItemSpec, pass2[i].FinalItemSpec); foreach (string metadataName in pass1[i].MetadataNames) { Assert.AreEqual(pass1[i].GetMetadata(metadataName), pass2[i].GetEvaluatedMetadata(metadataName)); } } ITaskItem[] pass3 = BuildItem.ConvertBuildItemArrayToTaskItems(pass2); for (int i = 0; i < 2; i++) { Assert.AreEqual(pass3[i].ItemSpec, pass2[i].FinalItemSpec); foreach (string metadataName in pass3[i].MetadataNames) { Assert.AreEqual(pass3[i].GetMetadata(metadataName), pass2[i].GetEvaluatedMetadata(metadataName)); } } }