public void CloneComparer() { var dictionary = new CopyOnWriteDictionary <string, string>(StringComparer.OrdinalIgnoreCase); dictionary["test"] = "1"; Assert.AreEqual(dictionary["test"], "1"); var clone = dictionary.Clone(); Assert.AreEqual(clone["TEST"], "1"); }
public void CloneVisibility() { var dictionary = new CopyOnWriteDictionary <string, string>(); dictionary["test"] = "1"; Assert.AreEqual(dictionary["test"], "1"); var clone = dictionary.Clone(); Assert.AreEqual(clone["test"], "1"); Assert.AreEqual(clone.Count, dictionary.Count); }
public void OriginalWritesNotVisibleToClones() { var dictionary = new CopyOnWriteDictionary <string, string>(); dictionary["test"] = "1"; Assert.AreEqual(dictionary["test"], "1"); var clone = dictionary.Clone(); var clone2 = dictionary.Clone(); Assert.IsTrue(dictionary.HasSameBacking(clone)); Assert.IsTrue(dictionary.HasSameBacking(clone2)); dictionary["test"] = "2"; Assert.IsFalse(dictionary.HasSameBacking(clone)); Assert.IsFalse(dictionary.HasSameBacking(clone2)); Assert.IsTrue(clone.HasSameBacking(clone2)); Assert.AreEqual(clone["test"], "1"); Assert.AreEqual(clone2["test"], "1"); }
public void OriginalWritesNotVisibleToClones() { var dictionary = new CopyOnWriteDictionary <string, string>(); dictionary["test"] = "1"; dictionary["test"].ShouldBe("1"); var clone = dictionary.Clone(); var clone2 = dictionary.Clone(); dictionary.HasSameBacking(clone).ShouldBeTrue(); dictionary.HasSameBacking(clone2).ShouldBeTrue(); dictionary["test"] = "2"; dictionary.HasSameBacking(clone).ShouldBeFalse(); dictionary.HasSameBacking(clone2).ShouldBeFalse(); clone.HasSameBacking(clone2).ShouldBeTrue(); clone["test"].ShouldBe("1"); clone2["test"].ShouldBe("1"); }
public void CloneWritesNotVisibleToOriginal() { var dictionary = new CopyOnWriteDictionary <string, string>(); dictionary["test"] = "1"; Assert.Equal("1", dictionary["test"]); var clone = dictionary.Clone(); var clone2 = dictionary.Clone(); Assert.True(dictionary.HasSameBacking(clone)); Assert.True(dictionary.HasSameBacking(clone2)); clone["test"] = "2"; Assert.False(dictionary.HasSameBacking(clone)); Assert.False(clone2.HasSameBacking(clone)); Assert.True(dictionary.HasSameBacking(clone2)); clone2["test"] = "3"; Assert.False(dictionary.HasSameBacking(clone2)); Assert.Equal("1", dictionary["test"]); Assert.Equal("2", clone["test"]); }
/// <summary> /// Copy the metadata (but not the ItemSpec) to destinationItem. If a particular metadata already exists on the /// destination item, then it is not overwritten -- the original value wins. /// </summary> /// <param name="destinationItem">The item to copy metadata to.</param> public void CopyMetadataTo ( ITaskItem destinationItem ) { ErrorUtilities.VerifyThrowArgumentNull(destinationItem, "destinationItem"); // also copy the original item-spec under a "magic" metadata -- this is useful for tasks that forward metadata // between items, and need to know the source item where the metadata came from string originalItemSpec = destinationItem.GetMetadata("OriginalItemSpec"); ITaskItem2 destinationAsITaskItem2 = destinationItem as ITaskItem2; if (_metadata != null) { TaskItem destinationAsTaskItem = destinationItem as TaskItem; // Avoid a copy if we can if (destinationAsTaskItem != null && destinationAsTaskItem.Metadata == null) { destinationAsTaskItem.Metadata = _metadata.Clone(); // Copy on write! } else { foreach (KeyValuePair <string, string> entry in _metadata) { string value; if (destinationAsITaskItem2 != null) { value = destinationAsITaskItem2.GetMetadataValueEscaped(entry.Key); if (String.IsNullOrEmpty(value)) { destinationAsITaskItem2.SetMetadata(entry.Key, entry.Value); } } else { value = destinationItem.GetMetadata(entry.Key); if (String.IsNullOrEmpty(value)) { destinationItem.SetMetadata(entry.Key, EscapingUtilities.Escape(entry.Value)); } } } } } if (String.IsNullOrEmpty(originalItemSpec)) { if (destinationAsITaskItem2 != null) { destinationAsITaskItem2.SetMetadata("OriginalItemSpec", ((ITaskItem2)this).EvaluatedIncludeEscaped); } else { destinationItem.SetMetadata("OriginalItemSpec", EscapingUtilities.Escape(ItemSpec)); } } }
public void CloneWritesNotVisibleToOriginal() { var dictionary = new CopyOnWriteDictionary<string, string>(); dictionary["test"] = "1"; Assert.AreEqual(dictionary["test"], "1"); var clone = dictionary.Clone(); var clone2 = dictionary.Clone(); Assert.IsTrue(dictionary.HasSameBacking(clone)); Assert.IsTrue(dictionary.HasSameBacking(clone2)); clone["test"] = "2"; Assert.IsFalse(dictionary.HasSameBacking(clone)); Assert.IsFalse(clone2.HasSameBacking(clone)); Assert.IsTrue(dictionary.HasSameBacking(clone2)); clone2["test"] = "3"; Assert.IsFalse(dictionary.HasSameBacking(clone2)); Assert.AreEqual(dictionary["test"], "1"); Assert.AreEqual(clone["test"], "2"); }
public void CloneComparer() { var dictionary = new CopyOnWriteDictionary<string, string>(StringComparer.OrdinalIgnoreCase); dictionary["test"] = "1"; Assert.AreEqual(dictionary["test"], "1"); var clone = dictionary.Clone(); Assert.AreEqual(clone["TEST"], "1"); }
public void CloneVisibility() { var dictionary = new CopyOnWriteDictionary<string, string>(); dictionary["test"] = "1"; Assert.AreEqual(dictionary["test"], "1"); var clone = dictionary.Clone(); Assert.AreEqual(clone["test"], "1"); Assert.AreEqual(clone.Count, dictionary.Count); }
public void OriginalWritesNotVisibleToClones() { var dictionary = new CopyOnWriteDictionary<string, string>(); dictionary["test"] = "1"; Assert.Equal(dictionary["test"], "1"); var clone = dictionary.Clone(); var clone2 = dictionary.Clone(); Assert.True(dictionary.HasSameBacking(clone)); Assert.True(dictionary.HasSameBacking(clone2)); dictionary["test"] = "2"; Assert.False(dictionary.HasSameBacking(clone)); Assert.False(dictionary.HasSameBacking(clone2)); Assert.True(clone.HasSameBacking(clone2)); Assert.Equal(clone["test"], "1"); Assert.Equal(clone2["test"], "1"); }