Example #1
0
        public void Equals_CompareCollectionFieldsSet_MatchExpectation()
        {
            var cacheControl1 = new CacheControlHeaderValue();
            var cacheControl2 = new CacheControlHeaderValue();
            var cacheControl3 = new CacheControlHeaderValue();
            var cacheControl4 = new CacheControlHeaderValue();
            var cacheControl5 = new CacheControlHeaderValue();
            var cacheControl6 = new CacheControlHeaderValue();

            cacheControl1.NoCache = true;
            cacheControl1.NoCacheHeaders.Add("token2");

            Assert.False(cacheControl1.Equals(null), "Compare with 'null'");

            cacheControl2.NoCache = true;
            cacheControl2.NoCacheHeaders.Add("token1");
            cacheControl2.NoCacheHeaders.Add("token2");

            CompareValues(cacheControl1 !, cacheControl2, false);

            cacheControl1 !.NoCacheHeaders.Add("token1");
            CompareValues(cacheControl1, cacheControl2, true);

            // Since NoCache and Private generate different hash codes, even if NoCacheHeaders and PrivateHeaders
            // have the same values, the hash code will be different.
            cacheControl3.Private = true;
            cacheControl3.PrivateHeaders.Add("token2");
            CompareValues(cacheControl1, cacheControl3, false);

            cacheControl4.Private = true;
            cacheControl4.PrivateHeaders.Add("token3");
            CompareValues(cacheControl3, cacheControl4, false);

            cacheControl5.Extensions.Add(new NameValueHeaderValue("custom"));
            CompareValues(cacheControl1, cacheControl5, false);

            cacheControl6.Extensions.Add(new NameValueHeaderValue("customN", "customV"));
            cacheControl6.Extensions.Add(new NameValueHeaderValue("custom"));
            CompareValues(cacheControl5, cacheControl6, false);

            cacheControl5.Extensions.Add(new NameValueHeaderValue("customN", "customV"));
            CompareValues(cacheControl5, cacheControl6, true);
        }
        private CacheControlHeaderValue(CacheControlHeaderValue source)
        {
            Debug.Assert(source != null);

            _noCache         = source._noCache;
            _noStore         = source._noStore;
            _maxAge          = source._maxAge;
            _sharedMaxAge    = source._sharedMaxAge;
            _maxStale        = source._maxStale;
            _maxStaleLimit   = source._maxStaleLimit;
            _minFresh        = source._minFresh;
            _noTransform     = source._noTransform;
            _onlyIfCached    = source._onlyIfCached;
            _publicField     = source._publicField;
            _privateField    = source._privateField;
            _mustRevalidate  = source._mustRevalidate;
            _proxyRevalidate = source._proxyRevalidate;

            if (source._noCacheHeaders != null)
            {
                foreach (var noCacheHeader in source._noCacheHeaders)
                {
                    NoCacheHeaders.Add(noCacheHeader);
                }
            }

            if (source._privateHeaders != null)
            {
                foreach (var privateHeader in source._privateHeaders)
                {
                    PrivateHeaders.Add(privateHeader);
                }
            }

            if (source._extensions != null)
            {
                foreach (var extension in source._extensions)
                {
                    Extensions.Add((NameValueHeaderValue)((ICloneable)extension).Clone());
                }
            }
        }
        private CacheControlHeaderValue(CacheControlHeaderValue source)
        {
            Contract.Requires(source != null);

            noCache         = source.noCache;
            noStore         = source.noStore;
            maxAge          = source.maxAge;
            sharedMaxAge    = source.sharedMaxAge;
            maxStale        = source.maxStale;
            maxStaleLimit   = source.maxStaleLimit;
            minFresh        = source.minFresh;
            noTransform     = source.noTransform;
            onlyIfCached    = source.onlyIfCached;
            publicField     = source.publicField;
            privateField    = source.privateField;
            mustRevalidate  = source.mustRevalidate;
            proxyRevalidate = source.proxyRevalidate;

            if (source.noCacheHeaders != null)
            {
                foreach (var noCacheHeader in source.noCacheHeaders)
                {
                    NoCacheHeaders.Add(noCacheHeader);
                }
            }

            if (source.privateHeaders != null)
            {
                foreach (var privateHeader in source.privateHeaders)
                {
                    PrivateHeaders.Add(privateHeader);
                }
            }

            if (source.extensions != null)
            {
                foreach (var extension in source.extensions)
                {
                    Extensions.Add((NameValueHeaderValue)((ICloneable)extension).Clone());
                }
            }
        }