public void GivenProcessedExternalScriptBundleWithFallbackCondition_WhenRender_ThenExternalRendererUsed() { var urlGenerator = new Mock<IUrlGenerator>(); urlGenerator .Setup(g => g.CreateBundleUrl(It.IsAny<Bundle>())) .Returns("/"); var bundle = new ExternalScriptBundle(Url, "~/test", "condition") { Renderer = new ScriptBundleHtmlRenderer(urlGenerator.Object), Pipeline = Mock.Of<IBundlePipeline<ScriptBundle>>() }; var asset = new Mock<IAsset>(); asset.SetupGet(a => a.Path).Returns("~/test/asset.js"); asset.Setup(a => a.OpenStream()).Returns(Stream.Null); bundle.Assets.Add(asset.Object); var settings = new CassetteSettings(); bundle.Process(settings); var html = bundle.Render(); html.ShouldEqual(@"<script src=""http://test.com/asset.js"" type=""text/javascript""></script> <script type=""text/javascript""> if(condition){ document.write('<script src=""/"" type=""text/javascript""><\/script>'); } </script>"); }
public void GivenCacheIsUpToDate_WhenInitializeBundlesFromCacheIfUpToDate_ThenBundleAssetsReplacedWithCachedAsset() { using (var cacheDir = new TempDirectory()) { File.WriteAllText( Path.Combine(cacheDir, "container.xml"), "<?xml version=\"1.0\"?><Container Version=\"VERSION\" AssetCount=\"1\"><Bundle Path=\"~/test\" Hash=\"01\"/></Container>" ); File.WriteAllText( Path.Combine(cacheDir, "test.bundle"), "asset" ); var bundleWithAsset = new TestableBundle("~/test"); var asset = StubAsset(); bundleWithAsset.Assets.Add(asset.Object); var sourceBundles = new[] { bundleWithAsset }; var settings = new CassetteSettings { SourceDirectory = Mock.Of <IDirectory>(), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); var result = cache.InitializeBundlesFromCacheIfUpToDate(sourceBundles); result.ShouldBeTrue(); bundleWithAsset.Assets[0].OpenStream().ReadToEnd().ShouldEqual("asset"); } }
public DiagnosticRequestHandler(BundleCollection bundles, CassetteSettings settings, IUrlGenerator urlGenerator, IBundleCacheRebuilder bundleCacheRebuilder) { this.bundles = bundles; this.settings = settings; this.urlGenerator = urlGenerator; this.bundleCacheRebuilder = bundleCacheRebuilder; }
public void GivenProcessedExternalScriptBundleWithFallbackCondition_WhenRender_ThenExternalRendererUsed() { var urlGenerator = new Mock <IUrlGenerator>(); urlGenerator .Setup(g => g.CreateBundleUrl(It.IsAny <Bundle>())) .Returns("/"); var bundle = new ExternalScriptBundle(Url, "~/test", "condition") { Renderer = new ScriptBundleHtmlRenderer(urlGenerator.Object), Pipeline = Mock.Of <IBundlePipeline <ScriptBundle> >() }; var asset = new Mock <IAsset>(); asset.SetupGet(a => a.Path).Returns("~/test/asset.js"); asset.Setup(a => a.OpenStream()).Returns(Stream.Null); bundle.Assets.Add(asset.Object); var settings = new CassetteSettings(); bundle.Process(settings); var html = bundle.Render(); html.ShouldEqual(@"<script src=""http://test.com/asset.js"" type=""text/javascript""></script> <script type=""text/javascript""> if(condition){ document.write('<script src=""/"" type=""text/javascript""><\/script>'); } </script>"); }
protected override void ProcessCore(CassetteSettings settings) { base.ProcessCore(settings); fallbackRenderer = Renderer; isDebuggingEnabled = settings.IsDebuggingEnabled; Renderer = this; }
public void Process(Bundle bundle, CassetteSettings settings) { foreach (var asset in bundle.Assets) { asset.AddAssetTransformer(minifier); } }
static CassetteApplication CreateCassetteApplication() { lock (CreationLock) { var allConfigurations = GetAllConfigurations(GetCassetteConfigurationSection()); var cacheVersion = GetConfigurationVersion(allConfigurations, HttpRuntime.AppDomainAppVirtualPath); var settings = new CassetteSettings(cacheVersion); var bundles = new BundleCollection(settings); foreach (var configuration in allConfigurations) { Trace.Source.TraceInformation("Executing configuration {0}", configuration.GetType().AssemblyQualifiedName); configuration.Configure(bundles, settings); } var routing = new CassetteRouting(settings.UrlModifier, () => ((CassetteApplication)CassetteApplicationContainer.Instance.Application).BundleContainer); settings.UrlGenerator = routing; Trace.Source.TraceInformation("Creating Cassette application object"); Trace.Source.TraceInformation("IsDebuggingEnabled: {0}", settings.IsDebuggingEnabled); Trace.Source.TraceInformation("Cache version: {0}", cacheVersion); var application = new CassetteApplication( bundles, settings, routing, GetCurrentHttpContext ); application.InstallRoutes(RouteTable.Routes); return(application); } }
public JavaScriptHtmlTemplatePipeline(TinyIoCContainer container, CassetteSettings settings) : base(container) { this.container = container; this.settings = settings; BuildPipeline(); }
public void GivenAssetWithReferenceToAssetInSameBundle_WhenSaveContainer_ThenXmlHasNoReferenceElements() { using (var cacheDir = new TempDirectory()) { var settings = new CassetteSettings { SourceDirectory = Mock.Of <IDirectory>(), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); var bundle = new TestableBundle("~/bundle-1"); var asset1 = StubAsset("~/bundle-1/asset1.js"); var asset2 = StubAsset("~/bundle-1/asset2.js"); var reference = new AssetReference("~/bundle-1/asset2.js", asset1.Object, -1, AssetReferenceType.SameBundle); asset1.SetupGet(a => a.References) .Returns(new[] { reference }); bundle.Assets.Add(new ConcatenatedAsset(new[] { asset1.Object, asset2.Object })); cache.SaveBundleContainer(new BundleContainer(new[] { bundle })); var xml = File.ReadAllText(Path.Combine(cacheDir, "container.xml")); xml.ShouldNotContain("<Reference "); } }
public void GivenCacheMissingSecondFile_WhenInitializeBundlesFromCacheIfUpToDate_ThenFirstBundleAssetsAreNotModified() { using (var cacheDir = new TempDirectory()) { File.WriteAllText( Path.Combine(cacheDir, "container.xml"), "<?xml version=\"1.0\"?><Container Version=\"VERSION\" AssetCount=\"2\"><Bundle Path=\"~/test1\" Hash=\"01\"/><Bundle Path=\"~/test2\" Hash=\"01\"/></Container>" ); File.WriteAllText( Path.Combine(cacheDir, "test1.bundle"), "asset" ); var bundle1 = new TestableBundle("~/test1"); var bundle2 = new TestableBundle("~/test2"); var asset1 = StubAsset(); bundle1.Assets.Add(asset1.Object); var asset2 = StubAsset(); bundle2.Assets.Add(asset2.Object); var sourceBundles = new[] { bundle1, bundle2 }; var settings = new CassetteSettings { SourceDirectory = Mock.Of <IDirectory>(), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); var result = cache.InitializeBundlesFromCacheIfUpToDate(sourceBundles); result.ShouldBeFalse(); bundle1.Assets[0].ShouldNotBeType <CachedAsset>(); } }
public void Configure(BundleCollection bundles, CassetteSettings settings) { // TODO: Configure your bundles here... // Please read http://getcassette.net/documentation/configuration // This default configuration treats each file as a separate 'bundle'. // In production the content will be minified, but the files are not combined. // So you probably want to tweak these defaults! bundles.AddPerIndividualFile <StylesheetBundle>("Content"); //bundles.AddPerIndividualFile<ScriptBundle>("Scripts", null, x => // { // //x.Processor = new CommonJSScriptPipeline(); // }); bundles.Add <ScriptBundle>("Scripts/internal", b => b.Processor = new ScriptPipeline().InsertBefore <SortAssetsByDependency>(new StitchProcessor())); settings.IsDebuggingEnabled = true; //settings.UrlModifier = new FileExtensionUrlModifier(); // To combine files, try something like this instead: // bundles.Add<StylesheetBundle>("Content"); // In production mode, all of ~/Content will be combined into a single bundle. // If you want a bundle per folder, try this: // bundles.AddPerSubDirectory<ScriptBundle>("Scripts"); // Each immediate sub-directory of ~/Scripts will be combined into its own bundle. // This is useful when there are lots of scripts for different areas of the website. // *** TOP TIP: Delete all ".min.js" files now *** // Cassette minifies scripts for you. So those files are never used. }
public void GivenContainerCacheHasFileReferenceThatIsModifiedSinceCacheWrite_WhenInitializeBundlesFromCacheIfUpToDate_ThenReturnFalse() { using (var cacheDir = new TempDirectory()) using (var sourceDir = new TempDirectory()) { File.WriteAllText( Path.Combine(cacheDir, "container.xml"), "<?xml version=\"1.0\"?><Container Version=\"VERSION\" AssetCount=\"0\">" + "<Bundle Path=\"~/test\" Hash=\"01\">" + " <File Path=\"~/file.png\"/>" + "</Bundle>" + "</Container>" ); Thread.Sleep(10); // Brief pause, otherwise the file write times are the same. File.WriteAllText(Path.Combine(sourceDir, "file.png"), ""); var bundle = new TestableBundle("~/test"); var sourceBundles = new[] { bundle }; var settings = new CassetteSettings("") { SourceDirectory = new FileSystemDirectory(sourceDir), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); var result = cache.InitializeBundlesFromCacheIfUpToDate(sourceBundles); result.ShouldBeFalse(); } }
public void Process(StylesheetBundle bundle, CassetteSettings settings) { foreach (var asset in bundle.Assets) { asset.AddAssetTransformer(new ExpandCssUrlsAssetTransformer(settings.SourceDirectory, settings.UrlGenerator)); } }
public Bundles_FileUrl_Tests() { urlGenerator = new Mock<IUrlGenerator>(); fileSystem = new FakeFileSystem { { "~/test.png", new byte[] { 1, 2, 3 } } }; using (var sha1 = SHA1.Create()) { hashOfFileContent = sha1.ComputeHash(new byte[] { 1, 2, 3 }).ToHexString(); } var settings = new CassetteSettings { SourceDirectory = fileSystem }; fileAccessAuthorization = new Mock<IFileAccessAuthorization>(); fileAccessAuthorization.Setup(a => a.CanAccess("~/test.png")).Returns(true); var referenceBuilder = new Mock<IReferenceBuilder>(); var bundles = new BundleCollection(settings, Mock.Of<IFileSearchProvider>(), Mock.Of<IBundleFactoryProvider>()); var bundleCacheRebuilder = new Mock<IBundleCacheRebuilder>(); Bundles.Helper = new BundlesHelper(bundles, settings, urlGenerator.Object, () => referenceBuilder.Object, fileAccessAuthorization.Object, bundleCacheRebuilder.Object, new SimpleJsonSerializer()); }
public StylesheetPipeline_Process_TestBase() { settings = new CassetteSettings(); bundle = new StylesheetBundle("~"); asset1 = new Mock<IAsset>(); asset2 = new Mock<IAsset>(); bundle.Assets.Add(asset1.Object); bundle.Assets.Add(asset2.Object); asset1.SetupGet(a => a.Path) .Returns("~/asset1.css"); asset1.Setup(a => a.OpenStream()) .Returns(() => "/* @reference \"asset2.css\"; */".AsStream()); asset2.SetupGet(a => a.Path) .Returns("~/asset2.css"); asset2.Setup(a => a.OpenStream()) .Returns(() => "p { color: White; }".AsStream()); asset1.SetupGet(a => a.References) .Returns(new[] { new AssetReference(asset1.Object.Path, "~/asset2.css", -1, AssetReferenceType.SameBundle) }); minifier = new MicrosoftStylesheetMinifier(); urlGenerator = new Mock<IUrlGenerator>(); container = new TinyIoCContainer(); container.Register(minifier); container.Register(urlGenerator.Object); container.Register(settings); }
public void Configure(BundleCollection bundles, CassetteSettings settings) { // The "Scripts/app" contains the application script we'll be testing with Jasmine. // The "Scripts/specs" contains the Jasmine specs. It is treated just like a regular Cassette bundle. bundles.AddPerSubDirectory <ScriptBundle>("Scripts"); }
internal CassetteApplication StubApplication(Action <CassetteSettings> alterSettings = null, Func <CassetteSettings, BundleCollection> createBundles = null) { var settings = new CassetteSettings { CacheDirectory = new FileSystemDirectory(cacheDir), SourceDirectory = new FileSystemDirectory(sourceDir) }; if (alterSettings != null) { alterSettings(settings); } var bundles = createBundles == null ? new BundleCollection(settings) : createBundles(settings); return(new CassetteApplication( bundles, settings, new CassetteRouting(new VirtualDirectoryPrepender("/")), () => httpContext.Object, "" )); }
public void GivenContainerFileIsOlderThanAnAssetFile_WhenInitializeBundlesFromCacheIfUpToDate_ThenReturnFalse() { using (var cacheDir = new TempDirectory()) { File.WriteAllText( Path.Combine(cacheDir, "container.xml"), "<?xml version=\"1.0\"?><Container Version=\"VERSION\" AssetCount=\"0\"></Container>" ); var bundleWithAsset = new TestableBundle("~/test"); var asset = StubAsset(); asset.Setup(a => a.SourceFile.LastWriteTimeUtc).Returns(DateTime.UtcNow); bundleWithAsset.Assets.Add(asset.Object); var sourceBundles = new[] { bundleWithAsset }; var settings = new CassetteSettings { SourceDirectory = Mock.Of <IDirectory>(), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); var result = cache.InitializeBundlesFromCacheIfUpToDate(sourceBundles); result.ShouldBeFalse(); } }
public void GivenContainerCacheHasBundleReferences_WhenInitializeBundlesFromCacheIfUpToDate_ThenBundleReferencesAreSet() { using (var cacheDir = new TempDirectory()) { File.WriteAllText( Path.Combine(cacheDir, "container.xml"), "<?xml version=\"1.0\"?><Container Version=\"VERSION\" AssetCount=\"0\">" + "<Bundle Path=\"~/test1\" Hash=\"01\">" + " <Reference Path=\"~/test2\"/>" + "</Bundle>" + "<Bundle Path=\"~/test2\" Hash=\"01\"/>" + "</Container>" ); var bundle1 = new TestableBundle("~/test1"); var bundle2 = new TestableBundle("~/test2"); var sourceBundles = new[] { bundle1, bundle2 }; var settings = new CassetteSettings { SourceDirectory = Mock.Of <IDirectory>(), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); cache.InitializeBundlesFromCacheIfUpToDate(sourceBundles); bundle1.References.First().ShouldEqual("~/test2"); } }
public void GivenContainerCacheHasFileReferenceToMissingFile_WhenInitializeBundlesFromCacheIfUpToDate_ThenReturnFalse() { using (var cacheDir = new TempDirectory()) using (var sourceDir = new TempDirectory()) { File.WriteAllText( Path.Combine(cacheDir, "container.xml"), "<?xml version=\"1.0\"?><Container Version=\"VERSION\" AssetCount=\"0\">" + "<Bundle Path=\"~/test\" Hash=\"01\">" + " <File Path=\"~/file.png\"/>" + "</Bundle>" + "</Container>" ); var bundle = new TestableBundle("~/test"); var sourceBundles = new[] { bundle }; var settings = new CassetteSettings { SourceDirectory = new FileSystemDirectory(sourceDir), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); var result = cache.InitializeBundlesFromCacheIfUpToDate(sourceBundles); result.ShouldBeFalse(); } }
public Bundles_FileUrl_Tests() { urlGenerator = new Mock <IUrlGenerator>(); fileSystem = new FakeFileSystem { { "~/test.png", new byte[] { 1, 2, 3 } } }; using (var sha1 = SHA1.Create()) { hashOfFileContent = sha1.ComputeHash(new byte[] { 1, 2, 3 }).ToHexString(); } var settings = new CassetteSettings { SourceDirectory = fileSystem }; fileAccessAuthorization = new Mock <IFileAccessAuthorization>(); fileAccessAuthorization.Setup(a => a.CanAccess("~/test.png")).Returns(true); var referenceBuilder = new Mock <IReferenceBuilder>(); var bundles = new BundleCollection(settings, Mock.Of <IFileSearchProvider>(), Mock.Of <IBundleFactoryProvider>()); var bundleCacheRebuilder = new Mock <IBundleCacheRebuilder>(); Bundles.Helper = new BundlesHelper(bundles, settings, urlGenerator.Object, () => referenceBuilder.Object, fileAccessAuthorization.Object, bundleCacheRebuilder.Object, new SimpleJsonSerializer()); }
CassetteApplication CreateApplication(Action <BundleCollection> configure, string sourceDirectory = "assets", bool isDebuggingEnabled = false) { var container = new Mock <ICassetteApplicationContainer <ICassetteApplication> >(); var settings = new CassetteSettings("") { CacheDirectory = new IsolatedStorageDirectory(storage), SourceDirectory = new FileSystemDirectory(Path.GetFullPath(sourceDirectory)), UrlGenerator = new UrlGenerator(new VirtualDirectoryPrepender("/"), "_cassette"), IsDebuggingEnabled = isDebuggingEnabled }; var bundles = new BundleCollection(settings); configure(bundles); foreach (var bundle in bundles) { bundle.Process(settings); } var bundleContainer = new BundleContainer(bundles); var application = new CassetteApplication( bundleContainer, settings, () => httpContext.Object ); container.Setup(c => c.Application).Returns(() => application); new RouteInstaller(container.Object, "_cassette").InstallRoutes(routes); return(application); }
public void Configure(BundleCollection bundles, CassetteSettings settings) { // TODO: Configure your bundles here... // Please read http://getcassette.net/documentation/configuration // This default configuration treats each file as a separate 'bundle'. // In production the content will be minified, but the files are not combined. // So you probably want to tweak these defaults! bundles.AddPerIndividualFile<StylesheetBundle>("Content"); //bundles.AddPerIndividualFile<ScriptBundle>("Scripts", null, x => // { // //x.Processor = new CommonJSScriptPipeline(); // }); bundles.Add<ScriptBundle>("Scripts/internal", b => b.Processor = new ScriptPipeline().InsertBefore<SortAssetsByDependency>(new StitchProcessor())); settings.IsDebuggingEnabled = true; //settings.UrlModifier = new FileExtensionUrlModifier(); // To combine files, try something like this instead: // bundles.Add<StylesheetBundle>("Content"); // In production mode, all of ~/Content will be combined into a single bundle. // If you want a bundle per folder, try this: // bundles.AddPerSubDirectory<ScriptBundle>("Scripts"); // Each immediate sub-directory of ~/Scripts will be combined into its own bundle. // This is useful when there are lots of scripts for different areas of the website. // *** TOP TIP: Delete all ".min.js" files now *** // Cassette minifies scripts for you. So those files are never used. }
public void GivenCacheIsUpToDate_WhenInitializeBundlesFromCacheIfUpToDate_ThenReturnTrue() { using (var cacheDir = new TempDirectory()) { File.WriteAllText( Path.Combine(cacheDir, "container.xml"), "<?xml version=\"1.0\"?><Container Version=\"VERSION\" AssetCount=\"0\"><Bundle Path=\"~/test\" Hash=\"01\"/></Container>" ); File.WriteAllText( Path.Combine(cacheDir, "test.bundle"), "asset" ); var bundle = new TestableBundle("~/test"); var sourceBundles = new[] { bundle }; var settings = new CassetteSettings { SourceDirectory = Mock.Of <IDirectory>(), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); var result = cache.InitializeBundlesFromCacheIfUpToDate(sourceBundles); result.ShouldBeTrue(); } }
public ExternalStylesheetHtmlRenderer_Tests() { settings = new CassetteSettings(); fallbackRenderer = new Mock <IBundleHtmlRenderer <StylesheetBundle> >(); renderer = new ExternalStylesheetHtmlRenderer(fallbackRenderer.Object, settings); bundle = new ExternalStylesheetBundle("http://test.com/"); }
protected override Bundle CreateBundleCore(CassetteSettings settings) { return(new ExternalScriptBundle(Url, Path, FallbackCondition) { Renderer = new ConstantHtmlRenderer <ScriptBundle>(Html(), settings.UrlModifier) }); }
internal override void Process(CassetteSettings settings) { // Any fallback assets are processed like a regular ScriptBundle. base.Process(settings); // We just need a special renderer instead. externalRenderer = new ExternalScriptBundleHtmlRenderer(Renderer, settings); }
public void GivenAssetWithTwoReferencesToAssetsInAnotherBundle_WhenSaveContainer_ThenXmlHasOneReferenceElementWithReferencedBundlePath() { using (var cacheDir = new TempDirectory()) { var settings = new CassetteSettings { SourceDirectory = Mock.Of <IDirectory>(), CacheDirectory = new FileSystemDirectory(cacheDir) }; var cache = new BundleCache("VERSION", settings); var bundle1 = new TestableBundle("~/bundle-1"); var bundle2 = new TestableBundle("~/bundle-2"); var asset1 = StubAsset(); var reference1 = new AssetReference("~/bundle-2/asset2.js", asset1.Object, -1, AssetReferenceType.DifferentBundle); var reference2 = new AssetReference("~/bundle-2/asset3.js", asset1.Object, -1, AssetReferenceType.DifferentBundle); asset1.SetupGet(a => a.References) .Returns(new[] { reference1, reference2 }); bundle1.Assets.Add(asset1.Object); bundle2.Assets.Add( new ConcatenatedAsset(new[] { StubAsset("~/bundle-2/asset2.js").Object, StubAsset("~/bundle-2/asset3.js").Object }) ); cache.SaveBundleContainer(new BundleContainer(new[] { bundle1, bundle2 })); var xml = File.ReadAllText(Path.Combine(cacheDir, "container.xml")); Regex.Matches(xml, Regex.Escape("<Reference Path=\"~/bundle-2\" />")).Count.ShouldEqual(1); } }
protected BundleRequestHandler_Tests() { httpContext = new Mock <HttpContextBase>(); request = new Mock <HttpRequestBase>(); requestHeaders = new NameValueCollection(); response = new Mock <HttpResponseBase>(); responseCache = new Mock <HttpCachePolicyBase>(); routeData = new RouteData(); requestContext = new RequestContext(httpContext.Object, routeData); outputStream = new MemoryStream(); httpContext.SetupGet(c => c.Request).Returns(request.Object); httpContext.SetupGet(c => c.Response).Returns(response.Object); httpContext.SetupGet(c => c.Items).Returns(new Dictionary <string, object>()); response.SetupGet(r => r.OutputStream).Returns(outputStream); response.SetupGet(r => r.Cache).Returns(responseCache.Object); request.SetupGet(r => r.Headers).Returns(requestHeaders); request.SetupGet(x => x.RawUrl).Returns("~/010203/test"); var settings = new CassetteSettings(); bundles = new BundleCollection(settings, Mock.Of <IFileSearchProvider>(), Mock.Of <IBundleFactoryProvider>()); }
public BundleCommonJs(ICommonJsWriter writer, CassetteSettings cassetteSettings, ConcatenateAssets concatenateAssets, ISourceMapRewriter sourceMapRewriter) { _writer = writer; _cassetteSettings = cassetteSettings; _concatenateAssets = concatenateAssets; _sourceMapRewriter = sourceMapRewriter; }
public void Process(HtmlTemplateBundle bundle, CassetteSettings settings) { foreach (var asset in bundle.Assets) { asset.AddAssetTransformer(new WrapHtmlTemplateInScriptElement(bundle)); } }
public ExternalScriptBundleHtmlRenderer_Tests() { settings = new CassetteSettings { IsDebuggingEnabled = false }; }
public void GivenCachedFileThrowsWhenDeleted_WhenSaveContainer_ThenSecondCachedFileIsStillDeleted() { var firstFile = new Mock <IFile>(); firstFile.Setup(f => f.Delete()).Throws <IOException>(); var secondFile = new Mock <IFile>(); var cacheDirectory = new Mock <IDirectory>(); cacheDirectory.Setup(d => d.GetFiles("*", SearchOption.AllDirectories)) .Returns(new[] { firstFile.Object, secondFile.Object }); var containerFile = new Mock <IFile>(); cacheDirectory.Setup(d => d.GetFile("container.xml")) .Returns(containerFile.Object); containerFile.Setup(f => f.Open(It.IsAny <FileMode>(), It.IsAny <FileAccess>(), It.IsAny <FileShare>())) .Returns(Stream.Null); var settings = new CassetteSettings { SourceDirectory = Mock.Of <IDirectory>(), CacheDirectory = cacheDirectory.Object }; var cache = new BundleCache("VERSION", settings); cache.SaveBundleContainer(new BundleContainer(Enumerable.Empty <Bundle>())); secondFile.Verify(f => f.Delete()); }
public void Configure(BundleCollection bundles, CassetteSettings settings) { // TODO: Configure your bundles here... // Please read http://getcassette.net/documentation/configuration // This default configuration treats each file as a separate 'bundle'. // In production the content will be minified, but the files are not combined. // So you probably want to tweak these defaults! // CSS bundles.Add <StylesheetBundle>("Content/Lib/Unsemantic/assets/stylesheets/unsemantic-grid-responsive.css"); bundles.Add <StylesheetBundle>("Styles"); // Scripts bundles.Add <ScriptBundle>("Content/Lib/Unsemantic/assets/javascripts"); bundles.Add <ScriptBundle>("Scripts"); // To combine files, try something like this instead: // bundles.Add<StylesheetBundle>("Content"); // In production mode, all of ~/Content will be combined into a single bundle. // If you want a bundle per folder, try this: // bundles.AddPerSubDirectory<ScriptBundle>("Scripts"); // Each immediate sub-directory of ~/Scripts will be combined into its own bundle. // This is useful when there are lots of scripts for different areas of the website. // *** TOP TIP: Delete all ".min.js" files now *** // Cassette minifies scripts for you. So those files are never used. }
void AssetRewrite(string from, string to) { var context = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); var cache = new Mock<HttpCachePolicyBase>(); var cassetteSettings = new CassetteSettings(); var requestHeaders = new NameValueCollection(); context.SetupGet(c => c.Request).Returns(request.Object); context.Setup(c => c.Response.Cache).Returns(cache.Object); var auth = new Mock<IFileAccessAuthorization>(); auth.Setup(a => a.CanAccess(It.IsAny<string>())).Returns(true); var hasher = new Mock<IFileContentHasher>(); hasher.Setup(h => h.Hash(It.IsAny<string>())).Returns(new byte[] { 1 }); request .SetupGet(r => r.AppRelativeCurrentExecutionFilePath) .Returns("~/cassette.axd"); request .SetupGet(r => r.PathInfo) .Returns(from); request .SetupGet(r => r.Headers) .Returns(requestHeaders); var rewriter = new RawFileRequestRewriter(context.Object, auth.Object, hasher.Object, cassetteSettings, usingIntegratedPipeline: true); rewriter.Rewrite(); context.Verify(c => c.RewritePath(to)); }
public RawFileRequestRewriter(BundleCollection bundles, IRootPathProvider rootPathProvider, IFileContentHasher fileContentHasher, CassetteSettings settings) { this.bundles = bundles; this.rootPathProvider = rootPathProvider; this.logger = NLog.LogManager.GetCurrentClassLogger(); this.fileContentHasher = fileContentHasher; this.settings = settings; }
public void UseIsolatedStorageWhenCachedDirectoryNotConfigured() { var section = new CassetteConfigurationSection(); var configuration = new TestableWebHostSettingsConfiguration("/", section); var settings = new CassetteSettings(); configuration.Configure(settings); settings.CacheDirectory.ShouldBeType<IsolatedStorageDirectory>(); }
internal BundleRequestHandler<TestableBundle> CreateRequestHandler(CassetteSettings settings = null) { return new BundleRequestHandler<TestableBundle>( settings ?? new CassetteSettings(), bundles, requestContext ); }
public ExternalScriptBundleRender_Tests() { settings = new CassetteSettings() { IsDebuggingEnabled = false }; fallbackRenderer = new Mock<IBundleHtmlRenderer<ScriptBundle>>(); }
public RuntimeBundleCollectionInitializer( CassetteSettings settings, CacheAwareBundleCollectionInitializer cacheAwareBundleCollectionInitializer, BundleCollectionInitializer bundleCollectionInitializer) { this.settings = settings; this.cacheAwareBundleCollectionInitializer = cacheAwareBundleCollectionInitializer; this.bundleCollectionInitializer = bundleCollectionInitializer; }
public ExternalStylesheetBundleRender_Tests() { settings = new CassetteSettings(); fallbackRenderer = new Mock<IBundleHtmlRenderer<StylesheetBundle>>(); bundle = new ExternalStylesheetBundle("http://test.com/") { Pipeline = Mock.Of<IBundlePipeline<StylesheetBundle>>() }; }
public BundlesHelper_Tests() { settings = new CassetteSettings(); bundles = new BundleCollection(settings, Mock.Of<IFileSearchProvider>(), Mock.Of<IBundleFactoryProvider>(), Mock.Of<IBundleCollectionInitializer>()); referenceBuilder = new Mock<IReferenceBuilder>(); var urlModifier = new VirtualDirectoryPrepender("/"); var urlGenerator = new UrlGenerator(urlModifier, new FakeFileSystem(), "cassette.axd/"); helper = new BundlesHelper(bundles, settings, urlGenerator, () => referenceBuilder.Object, Mock.Of<IFileAccessAuthorization>(), Mock.Of<IBundleCacheRebuilder>(), new SimpleJsonSerializer()); }
public void GivenProductionMode_WhenProcess_ThenBundleRenderIsStylesheetHtmlRenderer() { var settings = new CassetteSettings { IsDebuggingEnabled = false }; var processor = new AssignStylesheetRenderer(Mock.Of<IUrlGenerator>(), settings); var bundle = new StylesheetBundle("~/test"); processor.Process(bundle); bundle.Renderer.ShouldBeType<StylesheetHtmlRenderer>(); }
public Bundles_Test() { urlGenerator = new Mock<IUrlGenerator>(); referenceBuilder = new Mock<IReferenceBuilder>(); settings = new CassetteSettings(); bundles = new BundleCollection(settings, Mock.Of<IFileSearchProvider>(), Mock.Of<IBundleFactoryProvider>(), Mock.Of<IBundleCollectionInitializer>()); fileAccessAuthorization = new Mock<IFileAccessAuthorization>(); bundleCacheRebuilder = new Mock<IBundleCacheRebuilder>(); Bundles.Helper = new BundlesHelper(bundles, settings, urlGenerator.Object, () => referenceBuilder.Object, fileAccessAuthorization.Object, bundleCacheRebuilder.Object, new SimpleJsonSerializer()); }
public JasmineBundleConfiguration_WhenConfigure() { var scriptBundleFactory = new ScriptBundleFactory(() => Mock.Of<IBundlePipeline<ScriptBundle>>()); var stylesheetBundleFactory = new StylesheetBundleFactory(() => Mock.Of<IBundlePipeline<StylesheetBundle>>()); var configuration = new JasmineBundleConfiguration(scriptBundleFactory, stylesheetBundleFactory); var settings = new CassetteSettings(); bundles = new BundleCollection(settings, Mock.Of<IFileSearchProvider>(), Mock.Of<IBundleFactoryProvider>()); configuration.Configure(bundles); }
protected void SetupTestBundle(CassetteSettings settings = null) { var bundle = new TestableBundle("~/test"); var asset = new StubAsset("~/asset.js", "asset-content"); bundle.Assets.Add(asset); bundle.Hash = new byte[] { 1, 2, 3 }; bundles.Add(bundle); bundles.BuildReferences(); bundle.Process(settings ?? new CassetteSettings()); }
public PlaceholderRewriter_Tests() { settings = new CassetteSettings(); tracker = new Mock<IPlaceholderTracker>(); httpContext = new Mock<HttpContextBase>(); response = new Mock<HttpResponseBase>(); items = new Dictionary<string, object>(); httpContext.SetupGet(c => c.Items).Returns(items); httpContext.SetupGet(c => c.Response).Returns(response.Object); rewriter = new PlaceholderRewriter(settings, () => tracker.Object, () => httpContext.Object); }
public void ProcessCallsProcessor() { var bundle = new ExternalScriptBundle(Url); var pipeline = new Mock<IBundlePipeline<ScriptBundle>>(); var settings = new CassetteSettings(); bundle.Pipeline = pipeline.Object; bundle.Process(settings); pipeline.Verify(p => p.Process(bundle)); }
public void ProcessCallsProcessor() { var bundle = new HtmlTemplateBundle("~"); var pipeline = new Mock<IBundlePipeline<HtmlTemplateBundle>>(); var settings = new CassetteSettings(); bundle.Pipeline = pipeline.Object; bundle.Process(settings); pipeline.Verify(p => p.Process(bundle)); }
public void UseFileSystemDirectoryWhenCacheDirectoryIsConfigured() { var section = new CassetteConfigurationSection { CacheDirectory = Environment.CurrentDirectory }; var configuration = new TestableWebHostSettingsConfiguration("/", section); var settings = new CassetteSettings(); configuration.Configure(settings); settings.CacheDirectory.ShouldBeType<FileSystemDirectory>(); }
public ScriptPipeline_Tests() { minifier = Mock.Of<IJavaScriptMinifier>(); urlGenerator = Mock.Of<IUrlGenerator>(); var container = new TinyIoCContainer(); settings = new CassetteSettings(); container.Register(minifier); container.Register(urlGenerator); container.Register(settings); pipeline = new ScriptPipeline(container, settings); }
public void UseAbsoluteFileSystemDirectoryWhenCacheDirectoryIsConfiguredAsRelativePath() { var section = new CassetteConfigurationSection { CacheDirectory = "test" }; var configuration = new TestableWebHostSettingsConfiguration("/", section); var settings = new CassetteSettings(); configuration.Configure(settings); var directory = settings.CacheDirectory.ShouldBeType<FileSystemDirectory>(); directory.FullSystemPath.ShouldEqual(Path.Combine(Environment.CurrentDirectory, "test").Replace('\\', '/')); }
public GivenPipeline() { bundle = new ScriptBundle("~/"); asset = new Mock<IAsset>(); asset.SetupGet(a => a.Path).Returns("~/test.js"); asset.Setup(a => a.OpenStream()).Returns(Stream.Null); bundle.Assets.Add(asset.Object); var settings = new CassetteSettings(); var container = new TinyIoCContainer(); container.Register(Mock.Of<IJavaScriptMinifier>()); container.Register(Mock.Of<IUrlGenerator>()); container.Register(settings); pipeline = new ScriptPipeline(container, settings); }
public DiagnosticRequestHandler_Tests() { httpContext = new Mock<HttpContextBase>(); response = new Mock<HttpResponseBase>(); httpContext.SetupGet(c => c.Response).Returns(response.Object); var requestContext = new RequestContext(httpContext.Object, new RouteData()); settings = new CassetteSettings(); bundles = new BundleCollection(settings, Mock.Of<IFileSearchProvider>(), Mock.Of<IBundleFactoryProvider>()); var urlGenerator = Mock.Of<IUrlGenerator>(); rebuilder = new Mock<IBundleCacheRebuilder>(); helper = new Mock<IBundlesHelper>(); helper.Setup(h => h.Render<ScriptBundle>(null)).Returns(new HtmlString("")); helper.SetupGet(h => h.JsonSerializer).Returns(new SimpleJsonSerializer()); Bundles.Helper = helper.Object; httpContext.SetupGet(c => c.Request.HttpMethod).Returns("GET"); handler = new DiagnosticRequestHandler(requestContext, bundles, settings, urlGenerator, rebuilder.Object); }
public SassBundlePipelineModifier_Tests() { var minifier = Mock.Of<IStylesheetMinifier>(); var urlGenerator = Mock.Of<IUrlGenerator>(); var compiler = new Mock<ISassCompiler>(); var settings = new CassetteSettings(); var modifier = new SassBundlePipelineModifier(); var container = new TinyIoCContainer(); container.Register(compiler.Object); container.Register(minifier); container.Register(urlGenerator); container.Register(settings); originalPipeline = new StylesheetPipeline(container, settings); modifiedPipeline = modifier.Modify(originalPipeline); }
public GivenPiplineWhereCompileCoffeeScriptWithCustomCompiler() { bundle = new ScriptBundle("~/"); asset = new Mock<IAsset>(); asset.SetupGet(a => a.Path).Returns("~/test.coffee"); asset.Setup(a => a.OpenStream()).Returns(Stream.Null); bundle.Assets.Add(asset.Object); compiler = new Mock<ICoffeeScriptCompiler>(); var settings = new CassetteSettings(); var container = new TinyIoCContainer(); container.Register(compiler.Object); container.Register(Mock.Of<IJavaScriptMinifier>()); container.Register(Mock.Of<IUrlGenerator>()); container.Register(settings); var modifier = new CoffeeScriptBundlePipelineModifier(); pipeline = new ScriptPipeline(container, settings); pipeline = modifier.Modify(pipeline); }
public void DontSpriteWhenDebugging() { var bundle = new StylesheetBundle("~"); var asset = new StubAsset( "~/asset.css", ".a { background-image:url(image-a.png);width:20px;height:20px }\n" + ".b { background-image:url(image-b.png);width:20px;height:20px }" ); bundle.Assets.Add(asset); var settings = new CassetteSettings { IsDebuggingEnabled = true, CacheDirectory = new FakeFileSystem() }; var processor = new SpriteImages(settings, () => null); processor.Process(bundle); // Would throw exception if it tried to sprite the CSS. }
public RawFileRequestRewriter(HttpContextBase context, IFileAccessAuthorization fileAccessAuthorization, IFileContentHasher fileContentHasher, CassetteSettings cassetteSettings, bool usingIntegratedPipeline) { this.context = context; this.fileAccessAuthorization = fileAccessAuthorization; this.fileContentHasher = fileContentHasher; this.cassetteSettings = cassetteSettings; request = context.Request; // RewritePath doesn't work as expected in IIS 6 or IIS 7 Classic pipeline // Check if integrated pipeline is in use, and fall back to an alternate method if not. if (usingIntegratedPipeline) { rewritePath = RewritePathIntegratedPipeline; } else { rewritePath = RewritePathClassicPipeline; // Only required for classic pipeline mimeMapping = new MimeMappingWrapper(); } }
protected BundleRequestHandler_Tests() { httpContext = new Mock<HttpContextBase>(); request = new Mock<HttpRequestBase>(); requestHeaders = new NameValueCollection(); response = new Mock<HttpResponseBase>(); responseCache = new Mock<HttpCachePolicyBase>(); routeData = new RouteData(); requestContext = new RequestContext(httpContext.Object, routeData); outputStream = new MemoryStream(); httpContext.SetupGet(c => c.Request).Returns(request.Object); httpContext.SetupGet(c => c.Response).Returns(response.Object); httpContext.SetupGet(c => c.Items).Returns(new Dictionary<string, object>()); response.SetupGet(r => r.OutputStream).Returns(outputStream); response.SetupGet(r => r.Cache).Returns(responseCache.Object); request.SetupGet(r => r.Headers).Returns(requestHeaders); var settings = new CassetteSettings(); bundles = new BundleCollection(settings, Mock.Of<IFileSearchProvider>(), Mock.Of<IBundleFactoryProvider>()); }