public void Regress_Mutation_ConstructThroughDictionaryIsShallowCopy()
        {
            CopyOnWriteHashtable c    = new CopyOnWriteHashtable(StringComparer.OrdinalIgnoreCase);
            CopyOnWriteHashtable refc = new CopyOnWriteHashtable((IDictionary)c, StringComparer.OrdinalIgnoreCase);

            Assertion.Assert(refc.IsShallowCopy);
        }
        public void Regress450669_CaseSensitiveBatch_HashtableCopyRespectsComparer()
        {
            Hashtable c = new Hashtable(StringComparer.OrdinalIgnoreCase);

            c["key"] = null;
            CopyOnWriteHashtable refc = new CopyOnWriteHashtable(c, StringComparer.OrdinalIgnoreCase);

            Assertion.Assert(c.ContainsKey("kEy"));
            Assertion.Assert(refc.ContainsKey("kEy"));
        }
        public void Regress_Mutation_WritingSameValueShouldNotCauseDeepCopy()
        {
            CopyOnWriteHashtable c = new CopyOnWriteHashtable(StringComparer.OrdinalIgnoreCase);

            c["answer"] = "yes";
            CopyOnWriteHashtable refc = new CopyOnWriteHashtable(c, StringComparer.OrdinalIgnoreCase);

            Assertion.Assert(refc.IsShallowCopy);
            refc["answer"] = "yes";
            Assertion.Assert(refc.IsShallowCopy);  // Setting the same value should not cause a deep copy.
        }
        public void Regress_SettingWhenValueNull()
        {
            CopyOnWriteHashtable c    = new CopyOnWriteHashtable(StringComparer.OrdinalIgnoreCase);
            CopyOnWriteHashtable refc = new CopyOnWriteHashtable(c, StringComparer.OrdinalIgnoreCase);
            Hashtable            h    = new Hashtable();

            refc["key"] = null;
            h["key"]    = null;

            Assertion.AssertEquals(h.ContainsKey("key"), refc.ContainsKey("key"));
            Assertion.Assert(!c.ContainsKey("key"));
        }
        public void Regress_Mutation_ClearReadOnlyData()
        {
            CopyOnWriteHashtable c = new CopyOnWriteHashtable(StringComparer.OrdinalIgnoreCase);

            c["key"] = "value";
            CopyOnWriteHashtable refc = new CopyOnWriteHashtable(c, StringComparer.OrdinalIgnoreCase);

            Assertion.Assert(refc.ContainsKey("key"));
            Assertion.Assert(refc.IsShallowCopy);
            c.Clear();
            Assertion.Assert(refc.ContainsKey("key"));
            Assertion.Assert(!c.ContainsKey("key"));
        }
        public void Basic()
        {
            CopyOnWriteHashtable c = new CopyOnWriteHashtable(StringComparer.OrdinalIgnoreCase);
            CopyOnWriteHashtable b = (CopyOnWriteHashtable)c.Clone();
            CopyOnWriteHashtable a = (CopyOnWriteHashtable)b.Clone();

            c["Foo"] = "Bar";

            // Just wrote to 'c' so it should contain data.
            Assertion.Assert(c.ContainsKey("Foo"));

            // Writing to a depended upon hashtable should not be visible to the dependents.
            Assertion.Assert(!a.ContainsKey("Foo"));
            Assertion.Assert(!b.ContainsKey("Foo"));
        }
 public void Regress450669_CaseSensitiveBatch_WeDontAllowChangingCaseOnCopiedHashTable()
 {
     CopyOnWriteHashtable c    = new CopyOnWriteHashtable(StringComparer.OrdinalIgnoreCase);
     CopyOnWriteHashtable refc = new CopyOnWriteHashtable(c, StringComparer.Ordinal); // Different case.
 }
 public void Regress_Mutation_MustHaveNonNullStringComparer2()
 {
     CopyOnWriteHashtable c = new CopyOnWriteHashtable(null, null);
 }