public void ProcessAddsReferencesToJavaScriptAssetInBundleAndIgnoresTypeScriptReferences()
        {
            var asset = new Mock<IAsset>();
            asset.SetupGet(a => a.Path).Returns("~/asset.js"); // Remember TS files compile down to JS files

            var typeScriptSource = @"
            /// <reference path=""../../../../typings/jquery/jquery.d.ts"" />
            /// <reference path=""~/Scripts/jquery.js"" />
            // @reference ""~/bundles/bundle1""
            // @reference ~/bundles/bundle2

            $(document).ready(function () {
            });";
            asset.Setup(a => a.OpenStream())
                 .Returns(typeScriptSource.AsStream());
            var bundle = new ScriptBundle("~");
            bundle.Assets.Add(asset.Object);

            var processor = new ParseJavaScriptNotTypeScriptReferences();
            processor.Process(bundle);

            asset.Verify(a => a.AddReference("../../../../typings/jquery/jquery.d.ts", 2), Times.Never());
            asset.Verify(a => a.AddReference("~/Scripts/jquery.js", 3));
            asset.Verify(a => a.AddReference("~/bundles/bundle1", 4));
            asset.Verify(a => a.AddReference("~/bundles/bundle2", 5));
        }
示例#2
0
 static ScriptBundle StubScriptBundle(string path)
 {
     var bundle = new ScriptBundle(path);
     var asset = new Mock<IAsset>();
     asset.SetupGet(a => a.Hash).Returns(new byte[] { 1, 2, 3 });
     bundle.Assets.Add(asset.Object);
     return bundle;
 }
示例#3
0
        public void ModulePathIsBuiltFromAssetPath()
        {
            var asset = new StubAsset("~/test.js");
            var bundle = new ScriptBundle("~");

            var module = new AnonymousModule(asset, bundle);
            module.ModulePath.ShouldEqual("test");
        }
示例#4
0
        public void WhenProcessBundle_ThenHashIsAssigned()
        {
            var bundle = new ScriptBundle("~");

            pipeline.Process(bundle);

            bundle.Hash.ShouldNotBeNull();
        }
示例#5
0
        public void ModulePathIsAssignedFromConstructorArgument()
        {
            var asset = new StubAsset("~/test.js");
            var bundle = new ScriptBundle("~");
            var module = new NamedModule(asset, bundle, "module/path");

            module.ModulePath.ShouldEqual("module/path");
        }
示例#6
0
 public void ModulePathIsRequired()
 {
     var asset = new StubAsset("~/test.js");
     var bundle = new ScriptBundle("~");
     Assert.Throws<ArgumentNullException>(
         () => new NamedModule(asset, bundle, null)
     );
 }
 static ScriptBundle StubScriptBundle(string path)
 {
     var bundle = new ScriptBundle(path)
     {
         Hash = new byte[] { 1, 2, 3 }
     };
     return bundle;
 }
示例#8
0
        public void AliasIsFilenameWithoutExtension()
        {
            var asset = new StubAsset("~/test.js", "var test = {};");
            var bundle = new ScriptBundle("~");

            var module = new PlainScript(asset, bundle, modules.Object);

            module.Alias.ShouldEqual("test");
        }
示例#9
0
        public void AliasIsFromFilenameConvertsInvalidCharactersToUnderscores()
        {
            var asset = new StubAsset("~/test-test.js", "var test_test = {};");
            var bundle = new ScriptBundle("~");

            var module = new PlainScript(asset, bundle, modules.Object);

            module.Alias.ShouldEqual("test_test");
        }
示例#10
0
        public void WhenProcessBundle_ThenHashIsAssigned()
        {
            var pipeline = new ScriptPipeline();
            var bundle = new ScriptBundle("~");

            pipeline.Process(bundle, new CassetteSettings(""));

            bundle.Hash.ShouldNotBeNull();
        }
示例#11
0
 public ScriptAndTemplateBundle(string name, ScriptBundle bundle, HtmlTemplateBundle templateBundle, Func<IBundleProcessor<HtmlTemplateBundle>> templateProcessor)
     : base(name)
 {
     ScriptBundle = bundle;
     HtmlTemplateBundle = templateBundle;
     ContentType = "text/javascript";
     TemplateProcessor = templateProcessor();
     ScriptProcessor = new ScriptPipeline();
 }
示例#12
0
 void GivenBundle(string path, params IAsset[] assets)
 {
     var bundle = new ScriptBundle(path);
     foreach (var asset in assets)
     {
         bundle.Assets.Add(asset);
     }
     bundles.Add(bundle);
 }
示例#13
0
        public void AssetIsWrappedInDefineCall()
        {
            var asset = new StubAsset("~/test.js", "var test = {};");
            var bundle = new ScriptBundle("~");

            var module = new PlainScript(asset, bundle, modules.Object);

            var output = asset.OpenStream().ReadToEnd();
            output.ShouldEqual("define(\"test\",[],function(){var test = {};\r\nreturn test;});");
        }
示例#14
0
        public void GivenProductionMode_WhenProcessBundle_ThenRendererIsScriptBundleHtmlRenderer()
        {
            settings.IsDebuggingEnabled = false;

            var bundle = new ScriptBundle("~/test");

            pipeline.Process(bundle);

            bundle.Renderer.ShouldBeType<ScriptBundleHtmlRenderer>();
        }
示例#15
0
        public void RenderCallsRenderer()
        {
            var bundle = new ScriptBundle("~");
            var renderer = new Mock<IBundleHtmlRenderer<ScriptBundle>>();
            bundle.Renderer = renderer.Object;

            bundle.Render();

            renderer.Verify(r => r.Render(bundle));
        }
示例#16
0
        public void GivenScriptHasNoTopLevelVarOrReturnExpressionThenDefineHasNoReturn()
        {
            var asset = new StubAsset("~/test.js");
            var bundle = new ScriptBundle("~");

            var module = new PlainScript(asset, bundle, modules.Object);

            var output = asset.OpenStream().ReadToEnd();
            output.ShouldEqual("define(\"test\",[],function(){\r\n});");
        }
示例#17
0
        public void AssetIsNotMinified()
        {
            var asset = new StubAsset("~/test.js", "define([],function(){var x = 1;})");
            var bundle = new ScriptBundle("~");

            var module = new AnonymousModule(asset, bundle);

            var output = asset.OpenStream().ReadToEnd();
            output.ShouldEqual("define(\"test\",[],function(){var x = 1;})");
        }
        public void Configure(BundleCollection bundles, CassetteSettings settings)
        {
            var script = new ScriptBundle("cassette.web.jasmine");
            script.Assets.Add(new ResourceAsset("Cassette.Web.Jasmine.jasmine.js", GetType().Assembly));
            bundles.Add(script);

            var css = new StylesheetBundle("cassette.web.jasmine");
            css.Assets.Add(new ResourceAsset("Cassette.Web.Jasmine.jasmine.css", GetType().Assembly));
            bundles.Add(css);
        }
示例#19
0
        public void AssetIsTransformedToIncludeModulePathInDefineCallWithNoDependencies()
        {
            var asset = new StubAsset("~/test.js", "define(function(){})");
            var bundle = new ScriptBundle("~");

            var module = new AnonymousModule(asset, bundle);

            var output = asset.OpenStream().ReadToEnd();
            output.ShouldEqual("define(\"test\",function(){})");
        }
        public ScriptBundleSerializer_Tests()
        {
            bundle = new ScriptBundle("~")
            {
                Hash = new byte[0],
                Condition = "CONDITION",
                Renderer = new ScriptBundleHtmlRenderer(Mock.Of<IUrlGenerator>())
            };

            SerializeToElement();
        }
        public ScriptBundleSerializer_Tests()
        {
            bundle = new ScriptBundle("~")
            {
                Hash = new byte[0],
                Condition = "CONDITION",
                Renderer = new ConstantHtmlRenderer<ScriptBundle>("", new VirtualDirectoryPrepender("/"))
            };

            SerializeToElement();
        }
示例#22
0
        public ScriptBundleSerializer_Tests()
        {
            bundle = new ScriptBundle("~")
            {
                Hash      = new byte[0],
                Condition = "CONDITION",
                Renderer  = new ScriptBundleHtmlRenderer(Mock.Of <IUrlGenerator>())
            };

            SerializeToElement();
        }
示例#23
0
        public ScriptBundleSerializer_Tests()
        {
            bundle = new ScriptBundle("~")
            {
                Hash      = new byte[0],
                Condition = "CONDITION",
                Renderer  = new ConstantHtmlRenderer <ScriptBundle>("", new VirtualDirectoryPrepender("/"))
            };

            SerializeToElement();
        }
示例#24
0
        public void GivenProductionMode_WhenProcessBundle_ThenRendererIsScriptBundleHtmlRenderer()
        {
            var settings = new CassetteSettings("") { IsDebuggingEnabled = false };

            var bundle = new ScriptBundle("~/test");

            var pipeline = new ScriptPipeline();
            pipeline.Process(bundle, settings);

            bundle.Renderer.ShouldBeType<ScriptBundleHtmlRenderer>();
        }
示例#25
0
        public void RenderCallsRenderer()
        {
            var bundle   = new ScriptBundle("~");
            var renderer = new Mock <IBundleHtmlRenderer <ScriptBundle> >();

            bundle.Renderer = renderer.Object;

            bundle.Render();

            renderer.Verify(r => r.Render(bundle));
        }
示例#26
0
        public void GivenCompileCoffeeScriptIsTrue_WhenProcessBundle_ThenCompileAssetTransformerIsAddedToAsset()
        {
            var pipeline = new ScriptPipeline { CompileCoffeeScript = true };
            var bundle = new ScriptBundle("~");
            var asset = StubCoffeeScriptAsset();
            bundle.Assets.Add(asset.Object);

            pipeline.Process(bundle, new CassetteSettings(""));

            asset.Verify(a => a.AddAssetTransformer(It.IsAny<CompileAsset>()));
        }
示例#27
0
        public void GivenCompileCoffeeScriptIsTrue_WhenProcessBundle_ThenCompileAssetTransformerIsAddedToAsset()
        {
            var pipeline = new ScriptPipeline().CompileCoffeeScript();
            var bundle   = new ScriptBundle("~");
            var asset    = StubCoffeeScriptAsset();

            bundle.Assets.Add(asset.Object);

            pipeline.Process(bundle, new CassetteSettings(""));

            asset.Verify(a => a.AddAssetTransformer(It.IsAny <CompileAsset>()));
        }
        public void GivenRendererWithUrlGenerator_WhenRenderBundle_ThenScriptHtmlIsReturned()
        {
            var urlGenerator = new Mock<IUrlGenerator>();
            var renderer = new ScriptBundleHtmlRenderer(urlGenerator.Object);
            var bundle = new ScriptBundle("~/test");
            urlGenerator.Setup(g => g.CreateBundleUrl(bundle))
                        .Returns("URL");

            var html = renderer.Render(bundle);

            html.ShouldEqual("<script src=\"URL\" type=\"text/javascript\"></script>");
        }
示例#29
0
        public void GivenLocationAlreadyRendered_WhenAddReferenceToThatLocation_ThenExceptionThrown()
        {
            var bundle = new ScriptBundle("~/test");
            bundleContainer.Setup(c => c.FindBundleContainingPath<Bundle>("~/test"))
                           .Returns(bundle);

            builder.Render<ScriptBundle>("location");

            Assert.Throws<InvalidOperationException>(
                () => builder.Reference("~/test", "location")
            );
        }
示例#30
0
        public void GivenRendererWithUrlGenerator_WhenRenderBundle_ThenScriptHtmlIsReturned()
        {
            var urlGenerator = new Mock <IUrlGenerator>();
            var renderer     = new ScriptBundleHtmlRenderer(urlGenerator.Object);
            var bundle       = new ScriptBundle("~/test");

            urlGenerator.Setup(g => g.CreateBundleUrl(bundle))
            .Returns("URL");

            var html = renderer.Render(bundle);

            html.ShouldEqual("<script src=\"URL\" type=\"text/javascript\"></script>");
        }
示例#31
0
        public void DefineCallReturnsModuleReturnExpression()
        {
            var asset = new StubAsset("~/test.js", "var test = {};");
            var bundle = new ScriptBundle("~");

            var module = new PlainScript(asset, bundle, modules.Object)
            {
                ModuleReturnExpression = "{}"
            };

            var output = asset.OpenStream().ReadToEnd();
            output.ShouldEqual("define(\"test\",[],function(){var test = {};\r\nreturn {};});");
        }
        public void GivenRendererWithUrlGeneratorWithHtmlAttributes_WhenRenderBundle_ThenScriptHtmlIsReturned()
        {
            var urlGenerator = new Mock<IUrlGenerator>();
            var renderer = new ScriptBundleHtmlRenderer(urlGenerator.Object);
            var bundle = new ScriptBundle("~/test");
            bundle.HtmlAttributes.Add( new { Async = "async", @class = "isDismissed" } );

            urlGenerator.Setup(g => g.CreateBundleUrl(bundle))
                        .Returns("URL");

            var html = renderer.Render(bundle);

            html.ShouldEqual("<script src=\"URL\" type=\"text/javascript\" async=\"async\" class=\"isDismissed\"></script>");
        }
示例#33
0
        public void GivenBundleAReferencesBundleB_WhenAddReferenceToBundleA_ThenGetBundlesReturnsBoth()
        {
            var bundleA = new ScriptBundle("~/a");
            var bundleB = new ScriptBundle("~/b");

            bundleContainer.Setup(c => c.FindBundleContainingPath<Bundle>("~/a"))
                           .Returns(bundleA);
            bundleContainer.Setup(c => c.IncludeReferencesAndSortBundles(It.IsAny<IEnumerable<Bundle>>()))
                           .Returns(new[] { bundleB, bundleA });

            builder.Reference("a", null);

            builder.GetBundles(null).SequenceEqual(new[] { bundleB, bundleA }).ShouldBeTrue();
        }
示例#34
0
        public void GivenCompileCoffeeScriptIsFalse_WhenProcessBundle_ThenCompileAssetTransformerNotAddedToAsset()
        {
            var pipeline = new ScriptPipeline {
                CompileCoffeeScript = false
            };
            var bundle = new ScriptBundle("~");
            var asset  = StubCoffeeScriptAsset();

            bundle.Assets.Add(asset.Object);

            pipeline.Process(bundle, new CassetteSettings());

            asset.Verify(a => a.AddAssetTransformer(It.IsAny <CompileAsset>()), Times.Never());
        }
示例#35
0
        public void GivenDebugMode_WhenProcessBundle_ThenRendererIsDebugScriptBundleHtmlRenderer()
        {
            var settings = new CassetteSettings {
                IsDebuggingEnabled = true
            };

            var bundle = new ScriptBundle("~/test");

            var pipeline = new ScriptPipeline();

            pipeline.Process(bundle, settings);

            bundle.Renderer.ShouldBeType <DebugScriptBundleHtmlRenderer>();
        }
示例#36
0
        public void GivenRendererWithUrlGeneratorWithHtmlAttributes_WhenRenderBundle_ThenScriptHtmlIsReturned()
        {
            var urlGenerator = new Mock <IUrlGenerator>();
            var renderer     = new ScriptBundleHtmlRenderer(urlGenerator.Object);
            var bundle       = new ScriptBundle("~/test");

            bundle.HtmlAttributes.Add(new { Async = "async", @class = "isDismissed" });

            urlGenerator.Setup(g => g.CreateBundleUrl(bundle))
            .Returns("URL");

            var html = renderer.Render(bundle);

            html.ShouldEqual("<script src=\"URL\" type=\"text/javascript\" async=\"async\" class=\"isDismissed\"></script>");
        }
示例#37
0
        public void AssetReferencesAreTranslatedIntoModuleDependencies()
        {
            SetupFakeModule("foo");
            SetupFakeModule("bar");

            var asset = new StubAsset("~/test.js");
            asset.ReferenceList.Add(new AssetReference("~/test.js", "~/foo.js", 1, AssetReferenceType.SameBundle));
            asset.ReferenceList.Add(new AssetReference("~/test.js", "~/bar.js", 1, AssetReferenceType.SameBundle));
            var bundle = new ScriptBundle("~");

            var module = new PlainScript(asset, bundle, modules.Object);

            var output = asset.OpenStream().ReadToEnd();
            output.ShouldEqual("define(\"test\",[\"foo\",\"bar\"],function(foo,bar){\r\n});");
        }
        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 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);
        }
示例#40
0
        public void GivenScriptBundleWithNotIECondition_WhenRender_ThenHtmlConditionalCommentWrapsLinkButLeavesScriptVisibleToAllBrowsers()
        {
            var urlGenerator = new Mock <IUrlGenerator>();
            var renderer     = new ScriptBundleHtmlRenderer(urlGenerator.Object);
            var bundle       = new ScriptBundle("~/test")
            {
                Condition = "(gt IE 9)| !IE"
            };

            urlGenerator.Setup(g => g.CreateBundleUrl(bundle))
            .Returns("URL");

            var html = renderer.Render(bundle);

            html.ShouldEqual(
                "<!--[if " + bundle.Condition + "]><!-->" + Environment.NewLine +
                "<script src=\"URL\" type=\"text/javascript\"></script>" + Environment.NewLine +
                "<!-- <![endif]-->"
                );
        }
示例#41
0
        public void GivenScriptBundleWithCondition_WhenRender_ThenHtmlConditionalCommentWrapsLink()
        {
            var urlGenerator = new Mock <IUrlGenerator>();
            var renderer     = new ScriptBundleHtmlRenderer(urlGenerator.Object);
            var bundle       = new ScriptBundle("~/test")
            {
                Condition = "CONDITION"
            };

            urlGenerator.Setup(g => g.CreateBundleUrl(bundle))
            .Returns("URL");

            var html = renderer.Render(bundle);

            html.ShouldEqual(
                "<!--[if CONDITION]>" + Environment.NewLine +
                "<script src=\"URL\" type=\"text/javascript\"></script>" + Environment.NewLine +
                "<![endif]-->"
                );
        }
示例#42
0
        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 GivenBundleWithTwoAssets_WhenRenderBundle_ThenScriptsElementReturnedForEachAsset()
        {
            var bundle = new ScriptBundle("~/test");

            bundle.Assets.Add(new StubAsset());
            bundle.Assets.Add(new StubAsset());

            var urlGenerator = new Mock <IUrlGenerator>();
            var assetUrls    = new Queue <string>(new[] { "asset1", "asset2" });

            urlGenerator.Setup(g => g.CreateAssetUrl(It.IsAny <IAsset>()))
            .Returns(assetUrls.Dequeue);

            var renderer = new DebugScriptBundleHtmlRenderer(urlGenerator.Object);

            var html = renderer.Render(bundle);

            html.ShouldEqual(
                "<script src=\"asset1\" type=\"text/javascript\"></script>" +
                Environment.NewLine +
                "<script src=\"asset2\" type=\"text/javascript\"></script>"
                );
        }
示例#44
0
 void DeserializeBundle()
 {
     bundle = deserializer.Deserialize(element, directory);
 }
示例#45
0
        public void HtmlAttributesTypeIsTextJavaScript()
        {
            var bundle = new ScriptBundle("~");

            bundle.HtmlAttributes["type"].ShouldEqual("text/javascript");
        }