예제 #1
0
        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");
        }
예제 #2
0
        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);
        }
예제 #3
0
        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"]);
        }
예제 #6
0
        /// <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");
        }