コード例 #1
0
        /// <summary>
        /// Adds a fingerprint to local url() references.
        /// NOTE: Make sure to call Concatinate() before this method
        /// </summary>
        public static IAsset FingerprintUrls(this IAsset bundle)
        {
            var minifier = new CssFingerprinter();

            bundle.Processors.Add(minifier);

            return(bundle);
        }
コード例 #2
0
        public async Task CssFingerprint_Success(string url, string newUrl)
        {
            var adjuster     = new CssFingerprinter();
            var context      = new Mock <IAssetContext>().SetupAllProperties();
            var pipeline     = new Mock <IAssetPipeline>().SetupAllProperties();
            var asset        = new Mock <IAsset>().SetupAllProperties();
            var env          = new Mock <IHostingEnvironment>();
            var fileProvider = new Mock <IFileProvider>();

            string temp = Path.GetTempPath();
            string path = Path.Combine(temp, "css", "img");

            Directory.CreateDirectory(path);
            string imagePath = Path.Combine(path, "foo.png");

            File.WriteAllText(imagePath, string.Empty);
            File.SetLastWriteTime(imagePath, new DateTime(2017, 1, 1));

            var inputFile  = new PhysicalFileInfo(new FileInfo(Path.Combine(temp, "css", "site.css")));
            var outputFile = new PhysicalFileInfo(new FileInfo(Path.Combine(temp, "dist", "all.css")));

            context.SetupGet(s => s.Asset.Route)
            .Returns("/my/route.css");

            context.Setup(s => s.HttpContext.RequestServices.GetService(typeof(IAssetPipeline)))
            .Returns(pipeline.Object);

            context.Setup(s => s.HttpContext.RequestServices.GetService(typeof(IHostingEnvironment)))
            .Returns(env.Object);

            context.SetupGet(s => s.Asset)
            .Returns(asset.Object);

            env.SetupGet(e => e.WebRootFileProvider)
            .Returns(fileProvider.Object);

            env.SetupGet(e => e.WebRootPath)
            .Returns(temp);

            fileProvider.SetupSequence(f => f.GetFileInfo(It.IsAny <string>()))
            .Returns(inputFile)
            .Returns(outputFile);

            context.Object.Content = new Dictionary <string, byte[]> {
                { "css/site.css", url.AsByteArray() }
            };

            await adjuster.ExecuteAsync(context.Object);

            string result = context.Object.Content.First().Value.AsString();

            Assert.Equal(newUrl, result);
            Assert.Equal("", adjuster.CacheKey(new DefaultHttpContext()));
        }