Пример #1
0
        public void HashCombiner_Test_Int()
        {
            var combiner1 = new HashCodeCombiner();
            combiner1.AddInt(1234);

            var combiner2 = new HashCodeCombiner();
            combiner2.AddInt(1234);

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());

            combiner2.AddInt(1);

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
Пример #2
0
        public void HashCombiner_Test_String()
        {
            var combiner1 = new HashCodeCombiner();
            combiner1.AddCaseInsensitiveString("Hello");

            var combiner2 = new HashCodeCombiner();
            combiner2.AddCaseInsensitiveString("hello");

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());

            combiner2.AddCaseInsensitiveString("world");

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
        public void HashCombiner_Test_Int()
        {
            var combiner1 = new HashCodeCombiner();

            combiner1.AddInt(1234);

            var combiner2 = new HashCodeCombiner();

            combiner2.AddInt(1234);

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());

            combiner2.AddInt(1);

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
        public void HashCombiner_Test_String()
        {
            var combiner1 = new HashCodeCombiner();

            combiner1.AddCaseInsensitiveString("Hello");

            var combiner2 = new HashCodeCombiner();

            combiner2.AddCaseInsensitiveString("hello");

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());

            combiner2.AddCaseInsensitiveString("world");

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
        public void HashCombiner_Test_DateTime()
        {
            var dt        = DateTime.Now;
            var combiner1 = new HashCodeCombiner();

            combiner1.AddDateTime(dt);

            var combiner2 = new HashCodeCombiner();

            combiner2.AddDateTime(dt);

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());

            combiner2.AddDateTime(DateTime.Now);

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
Пример #6
0
        public static string GetServerHash(string machineName, string appDomainAppId)
        {
            var hasher = new HashCodeCombiner();

            hasher.AddCaseInsensitiveString(appDomainAppId);
            hasher.AddCaseInsensitiveString(machineName);
            return(hasher.GetCombinedHashCode());
        }
Пример #7
0
        public void HashCombiner_Test_Type()
        {
            var combiner1 = new HashCodeCombiner();
            combiner1.AddType(typeof(HashCodeCombiner));

            var combiner2 = new HashCodeCombiner();
            combiner2.AddType(typeof(HashCodeCombiner));

            var combiner3 = new HashCodeCombiner();
            combiner3.AddType(typeof(HashCodeCombinerTests));

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
            Assert.AreNotEqual(combiner2.GetCombinedHashCode(), combiner3.GetCombinedHashCode());

            combiner2.AddType(typeof(HashCodeCombiner));

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
Пример #8
0
        public void HashCombiner_Test_Bool()
        {
            var combiner1 = new HashCodeCombiner();
            combiner1.AddBool(true);

            var combiner2 = new HashCodeCombiner();
            combiner2.AddBool(true);

            var combiner3 = new HashCodeCombiner();
            combiner3.AddBool(false);

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
            Assert.AreNotEqual(combiner2.GetCombinedHashCode(), combiner3.GetCombinedHashCode());

            combiner2.AddBool(true);

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
Пример #9
0
        /// <summary>
        /// Called to write the js and css to string output
        /// </summary>
        /// <param name="allDependencies"></param>
        /// <param name="paths"></param>
        /// <param name="jsOutput"></param>
        /// <param name="cssOutput"></param>
        /// <param name="http"></param>
        internal void WriteDependencies(List <IClientDependencyFile> allDependencies,
                                        HashSet <IClientDependencyPath> paths,
                                        out string jsOutput,
                                        out string cssOutput,
                                        HttpContextBase http)
        {
            //create the hash to see if we've already stored it
            var hashCodeCombiner = new HashCodeCombiner();

            foreach (var d in allDependencies)
            {
                hashCodeCombiner.AddObject(d);
            }
            var hash = hashCodeCombiner.GetCombinedHashCode();

            //we may have already processed this so don't do it again
            if (http.Items["BaseRenderer.RegisterDependencies." + hash] == null)
            {
                var folderPaths = paths;
                UpdateFilePaths(allDependencies, folderPaths, http);
                EnsureNoDuplicates(allDependencies, folderPaths);

                //now we regenerate the hash since dependencies have been removed/etc..
                // and update the context items so it's not run again
                hashCodeCombiner = new HashCodeCombiner();
                foreach (var d in allDependencies)
                {
                    hashCodeCombiner.AddObject(d);
                }
                hash = hashCodeCombiner.GetCombinedHashCode();
                http.Items["BaseRenderer.RegisterDependencies." + hash] = true;
            }

            var cssBuilder = new StringBuilder();
            var jsBuilder  = new StringBuilder();

            //group by the group and order by the value
            foreach (var group in allDependencies.GroupBy(x => x.Group).OrderBy(x => x.Key))
            {
                //sort both the js and css dependencies properly

                var jsDependencies = DependencySorter.SortItems(
                    group.Where(x => x.DependencyType == ClientDependencyType.Javascript).ToList());

                var cssDependencies = DependencySorter.SortItems(
                    group.Where(x => x.DependencyType == ClientDependencyType.Css).ToList());

                //render
                WriteStaggeredDependencies(cssDependencies, http, cssBuilder, RenderCssDependencies, RenderSingleCssFile);
                WriteStaggeredDependencies(jsDependencies, http, jsBuilder, RenderJsDependencies, RenderSingleJsFile);
            }

            cssOutput = cssBuilder.ToString();
            jsOutput  = jsBuilder.ToString();
        }
Пример #10
0
        public void HashCombiner_Test_Bool()
        {
            var combiner1 = new HashCodeCombiner();

            combiner1.AddBool(true);

            var combiner2 = new HashCodeCombiner();

            combiner2.AddBool(true);

            var combiner3 = new HashCodeCombiner();

            combiner3.AddBool(false);

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
            Assert.AreNotEqual(combiner2.GetCombinedHashCode(), combiner3.GetCombinedHashCode());

            combiner2.AddBool(true);

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
Пример #11
0
        public void HashCombiner_Test_Type()
        {
            var combiner1 = new HashCodeCombiner();

            combiner1.AddType(typeof(HashCodeCombiner));

            var combiner2 = new HashCodeCombiner();

            combiner2.AddType(typeof(HashCodeCombiner));

            var combiner3 = new HashCodeCombiner();

            combiner3.AddType(typeof(HashCodeCombinerTests));

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
            Assert.AreNotEqual(combiner2.GetCombinedHashCode(), combiner3.GetCombinedHashCode());

            combiner2.AddType(typeof(HashCodeCombiner));

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
        public void HashCombiner_Test_Folder()
        {
            var dir       = PrepareFolder();
            var file1Path = Path.Combine(dir.FullName, "hastest1.txt");

            File.Delete(file1Path);
            using (var file1 = File.CreateText(Path.Combine(dir.FullName, "hastest1.txt")))
            {
                file1.WriteLine("hello");
            }

            //first test the whole folder
            var combiner1 = new HashCodeCombiner();

            combiner1.AddFolder(dir);

            var combiner2 = new HashCodeCombiner();

            combiner2.AddFolder(dir);

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());

            //now add a file to the folder

            var file2Path = Path.Combine(dir.FullName, "hastest2.txt");

            File.Delete(file2Path);
            using (var file2 = File.CreateText(Path.Combine(dir.FullName, "hastest2.txt")))
            {
                //even though files are the same, the dates are different
                file2.WriteLine("hello");
            }

            var combiner3 = new HashCodeCombiner();

            combiner3.AddFolder(dir);

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner3.GetCombinedHashCode());
        }
        public void HashCombiner_Test_File()
        {
            DirectoryInfo dir       = PrepareFolder();
            var           file1Path = Path.Combine(dir.FullName, "hastest1.txt");

            File.Delete(file1Path);
            using (StreamWriter file1 = File.CreateText(Path.Combine(dir.FullName, "hastest1.txt")))
            {
                file1.WriteLine("hello");
            }

            var file2Path = Path.Combine(dir.FullName, "hastest2.txt");

            File.Delete(file2Path);
            using (StreamWriter file2 = File.CreateText(Path.Combine(dir.FullName, "hastest2.txt")))
            {
                // even though files are the same, the dates are different
                file2.WriteLine("hello");
            }

            var combiner1 = new HashCodeCombiner();

            combiner1.AddFile(new FileInfo(file1Path));

            var combiner2 = new HashCodeCombiner();

            combiner2.AddFile(new FileInfo(file1Path));

            var combiner3 = new HashCodeCombiner();

            combiner3.AddFile(new FileInfo(file2Path));

            Assert.AreEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner3.GetCombinedHashCode());

            combiner2.AddFile(new FileInfo(file2Path));

            Assert.AreNotEqual(combiner1.GetCombinedHashCode(), combiner2.GetCombinedHashCode());
        }
Пример #14
0
 /// <summary>
 /// Returns the hash string for all found plugins/folders
 /// </summary>
 /// <returns></returns>
 internal static string GetPluginsHash(IEnumerable <FileInfo> plugins, bool generateNew = false)
 {
     if (generateNew || _pluginsHash.IsNullOrWhiteSpace())
     {
         using (DisposableTimer.TraceDuration <PluginManager>("Determining hash of plugins on disk", "Hash determined"))
         {
             var hashCombiner = new HashCodeCombiner();
             //add each unique folder to the hash
             foreach (var i in plugins.Select(x => x.Directory).DistinctBy(x => x.FullName))
             {
                 hashCombiner.AddFolder(i);
             }
             _pluginsHash = hashCombiner.GetCombinedHashCode();
         }
     }
     return(_pluginsHash);
 }
Пример #15
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public static string GetCacheBustHash()
        {
            //make a hash of umbraco and client dependency version
            //in case the user bypasses the installer and just bumps the web.config or clientdep config

            var versionHash = new HashCodeCombiner();

            //if in debug mode, always burst the cache
            if (GlobalSettings.DebugMode)
            {
                versionHash.AddCaseInsensitiveString(DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                //create a unique hash code of the current umb version and the current cdf version

                versionHash.AddCaseInsensitiveString(UmbracoVersion.Current.ToString());
                versionHash.AddCaseInsensitiveString(ClientDependencySettings.Instance.Version.ToString(CultureInfo.InvariantCulture));
            }

            return(versionHash.GetCombinedHashCode());
        }