public static Bundle IncludeFromSprocketFile(this Bundle bundle, string relativePath, string root)
        {
            if (string.IsNullOrWhiteSpace(relativePath))
            {
                throw new ArgumentNullException("relativePath");
            }

            if (string.IsNullOrWhiteSpace(root))
            {
                throw new ArgumentNullException("root");
            }

            if (!relativePath.StartsWith("~/"))
            {
                throw new ArgumentException("relativePath must start with ~/", relativePath);
            }

            relativePath = relativePath.Substring(2);

            var sprockets = new Sprockets();

            var rootNode = sprockets.Scan(Path.Combine(root, relativePath));
            var resolved = rootNode.ResolveDependencies();

            return(bundle.Include(resolved.Select(node => ToAbsolutePath(node, root)).ToArray()));
        }
예제 #2
0
        public void IndependentJsFilesHasNoDependencies()
        {
            var sprockets = new Sprockets();

            var result = sprockets.Scan(Path.Combine(AssetsFolder, "b.js"));

            result.Edges.Count.ShouldEqual(0);
        }
예제 #3
0
        public void ChainedDependenciesAreCorrectlyOrdered()
        {
            var sprockets = new Sprockets();

            var node     = sprockets.Scan(Path.Combine(AssetsFolder, "z.coffee"));
            var resolved = node.ResolveDependencies();

            resolved.SequenceEqual(AssetsFolder, new[] { "x.coffee", "y.js", "z.coffee" }).ShouldBeTrue();
        }
예제 #4
0
        public void MultipleDependenciesCanBeDeclaredInOneRequireDirective()
        {
            var sprockets = new Sprockets();

            var node     = sprockets.Scan(Path.Combine(AssetsFolder, "poly.coffee"));
            var resolved = node.ResolveDependencies();

            //resolved.SequenceEqual(AssetsFolder, new[] { "loveAndMarriage.js", "horseAndCarriage.coffee" });
        }
예제 #5
0
        public void DependenciesWithMultipleExtensionsAreAccepted()
        {
            var sprockets = new Sprockets();

            var node     = sprockets.Scan(Path.Combine(AssetsFolder, "testing.js"));
            var resolved = node.ResolveDependencies();

            resolved.SequenceEqual(AssetsFolder, new[] { "1.2.3.coffee", "testing.js" }).ShouldBeTrue();
        }
예제 #6
0
        public void DependencyCyclesThrowsErrorDuringResolvingDependencies()
        {
            var sprockets = new Sprockets();

            var node = sprockets.Scan(Path.Combine(AssetsFolder, "yin.js"));

            Assert.Throws <CircularDependencyException <FileMetadata> >(() => node.ResolveDependencies());
            Assert.Throws <CircularDependencyException <FileMetadata> >(() => node.Edges[0].ResolveDependencies());
        }
예제 #7
0
        public void DependenciesCanHaveSubDirectoryRelativePaths()
        {
            var sprockets = new Sprockets();

            var node     = sprockets.Scan(Path.Combine(AssetsFolder, "song/loveAndMarriage.js"));
            var resolved = node.ResolveDependencies();

            resolved.SequenceEqual(AssetsFolder, new[] { "horseAndCarriage.coffee", "loveAndMarriage.js" });
            //.ShouldBeTrue();
        }
        public void Configure(BundleCollection bundles)
        {
            bundles.Add <ScriptBundle>("assets/javascripts/vendors/jquery-1.8.2.js", b => b.PageLocation = "jquery");
            var sprockets = new Sprockets();

            var node = sprockets.Scan(HostingEnvironment.MapPath("~/assets/javascripts/main.js"));
            var deps = node.ResolveDependencies();

            bundles.Add <ScriptBundle>("assets/javascripts/main.js", deps.Select(d => d.Data.AbsolutePath), b => b.PageLocation = "app");

            node = sprockets.Scan(HostingEnvironment.MapPath("~/assets/templates/main.js"));
            deps = node.ResolveDependencies();
            bundles.Add <HtmlTemplateBundle>("assets/templates", deps.Select(d => d.Data.AbsolutePath));
        }
예제 #9
0
        public void SingleStepDependenciesAreCorrectlyRecorded()
        {
            var sprockets = new Sprockets();

            var node     = sprockets.Scan(Path.Combine(AssetsFolder, "a.coffee"));
            var resolved = node.ResolveDependencies();

            resolved.Count.ShouldEqual(2);

            node.Edges.Count.ShouldEqual(1);
            node.Edges[0].Edges.Count.ShouldEqual(0);

            resolved.SequenceEqual(AssetsFolder, new[] { "b.js", "a.coffee" }).ShouldBeTrue();
        }
예제 #10
0
        public void RequireWorksForIncludesThatAreRelativeToOriginalFile()
        {
            var sprockets = new Sprockets();

            var node     = sprockets.Scan(Path.Combine(AssetsFolder, "first/syblingFolder.js"));
            var resolved = node.ResolveDependencies();

            resolved.SequenceEqual(AssetsFolder,
                                   new[]
            {
                "sybling/sybling.js",
                "first/syblingFolder.js"
            }).ShouldBeTrue();
        }
예제 #11
0
        public void RequireTreeWorksForRedundantDirectories()
        {
            var sprockets = new Sprockets();

            var node     = sprockets.Scan(Path.Combine(AssetsFolder, "trilogy.coffee"));
            var resolved = node.ResolveDependencies();

            resolved.SequenceEqual(AssetsFolder,
                                   new[]
            {
                "middleEarth/shire/bilbo.js",
                "middleEarth/shire/frodo.coffee",
                "middleEarth/legolas.coffee",
                "trilogy.coffee"
            }).ShouldBeTrue();
        }
예제 #12
0
        public void RequireTreeWorksForSameDirectory()
        {
            var sprockets = new Sprockets();

            var node     = sprockets.Scan(Path.Combine(AssetsFolder, "branch/center.coffee"));
            var resolved = node.ResolveDependencies();

            resolved.SequenceEqual(AssetsFolder,
                                   new[]
            {
                "branch/edge.coffee",
                "branch/periphery.js",
                "branch/unwanted",
                "branch/subbranch/leaf.js",
                "branch/center.coffee"
            })
            .ShouldBeTrue();
        }
예제 #13
0
        public void DependencyCyclesDoesNotThrowErrorDuringScanning()
        {
            var sprockets = new Sprockets();

            var node = sprockets.Scan(Path.Combine(AssetsFolder, "yin.js"));
        }