public void Assets_Can_Be_Retrieved_When_Entrypoints_Provides_Multiple_Assets()
        {
            var config1 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest5.json", AssetOutputPath = ""
            };

            SetupManifestFile(config1, @"{
                                                            ""main"": {
                                                                ""js"": [
                                                                      ""/dist/first-script.js"",
                                                                      ""/dist/second-script.js"",
                                                                      ""/dist/third-script.js""
                                                                      ],
                                                                ""css"": [
                                                                    ""/dist/first-style.css"",
                                                                    ""/dist/second-style.css"",
                                                                    ]
                                                                }
                                                            }");

            WebpackAssetsDictionary webpackAssetDictionary = WebpackAssetsDictionary.FromConfig(config1);

            var webpack = new Webpack(new[] { webpackAssetDictionary });

            Assert.That(webpack.GetAssetsUrl("main", "js").Count, Is.EqualTo(3));
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("/dist/first-script.js"));
            Assert.That(webpack.GetAssetsUrl("main", "js")[1], Is.EqualTo("/dist/second-script.js"));
            Assert.That(webpack.GetAssetsUrl("main", "js")[2], Is.EqualTo("/dist/third-script.js"));

            Assert.That(webpack.GetAssetsUrl("main", "css").Count, Is.EqualTo(2));
            Assert.That(webpack.GetAssetsUrl("main", "css")[0], Is.EqualTo("/dist/first-style.css"));
            Assert.That(webpack.GetAssetsUrl("main", "css")[1], Is.EqualTo("/dist/second-style.css"));
        }
Exemplo n.º 2
0
        public void Assets_Can_Be_Retrieved_From_Multiple_Configurations()
        {
            var config1 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest1.json", AssetOutputPath = "~/dist/1"
            };
            var config2 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest2.json", AssetOutputPath = "~/dist/2"
            };
            var config3 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest3.json", AssetOutputPath = ""
            };
            var config4 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest4.json", AssetOutputPath = "~/dist/ignored"
            };

            SetupManifestFile(config1, @"{ ""code"": { ""js"": ""file.1.js"" } }");
            SetupManifestFile(config2, @"{ ""style"": { ""css"": ""file.2.css"" } }");
            SetupManifestFile(config3, @"{ ""file"": { ""js"": ""file.3.js"" } }");
            SetupManifestFile(config4, @"{ ""other"": { ""js"": ""http://server/file.4.js"" } }");

            var manifest1 = WebpackAssetsDictionary.FromConfig(config1);
            var manifest2 = WebpackAssetsDictionary.FromConfig(config2);
            var manifest3 = WebpackAssetsDictionary.FromConfig(config3);
            var manifest4 = WebpackAssetsDictionary.FromConfig(config4);

            var webpack = new Webpack(new[] { manifest1, manifest2, manifest3, manifest4 });

            Assert.That(webpack.GetAssetUrl("code", "js"), Is.EqualTo("~/dist/1/file.1.js"));
            Assert.That(webpack.GetAssetUrl("style", "css"), Is.EqualTo("~/dist/2/file.2.css"));
            Assert.That(webpack.GetAssetUrl("file", "js"), Is.EqualTo("file.3.js"));
            Assert.That(webpack.GetAssetUrl("other", "js"), Is.EqualTo("http://server/file.4.js"));
        }
        public void GetAssetsUrl_Returns_Empty_List_When_Not_Required_And_No_Matching_Resource()
        {
            _config.AssetManifestPath = "~/scripts/manifest.json";
            SetupManifestFile(_config, @"{ ""file"": { ""js"": ""file.js"" } }");

            WebpackAssetsDictionary webpackAssetDictionary = WebpackAssetsDictionary.FromConfig(_config);

            var webpack = new Webpack(new[] { webpackAssetDictionary });

            Assert.That(webpack.GetAssetsUrl("non-existant", "js", false), Is.Empty);
            Assert.That(webpack.GetAssetsUrl("file", "non-existant", false), Is.Empty);
            Assert.That(webpack.GetAssetsUrl("non-existant", "non-existant", false), Is.Empty);
        }
        public void GetAssetsUrl_Throws_On_No_Matching_Resource()
        {
            _config.AssetManifestPath = "~/scripts/manifest.json";
            SetupManifestFile(_config, @"{ ""file"": { ""js"": ""file.js"" } }");

            WebpackAssetsDictionary webpackAssetDictionary = WebpackAssetsDictionary.FromConfig(_config);

            var webpack = new Webpack(new[] { webpackAssetDictionary });

            Assert.Throws <AssetNotFoundException>(() => webpack.GetAssetsUrl("non-existant", "js"));
            Assert.Throws <AssetNotFoundException>(() => webpack.GetAssetsUrl("file", "non-existant"));
            Assert.Throws <AssetNotFoundException>(() => webpack.GetAssetsUrl("non-existant", "non-existant"));
        }
        public void FromFile_Reads_Valid_Content()
        {
            File.WriteAllText(_tempFile, @"
			{
				""file"": { ""js"": ""file.hash.js"", ""other"": ""file.hash.other"" },
				""file2"": { ""js"": ""file2.hash.js"" }
			}"            );

            var assets = WebpackAssetsDictionary.FromFile(_tempFile);

            Assert.That(assets["file"]["js"], Is.EqualTo("file.hash.js"));
            Assert.That(assets["file"]["other"], Is.EqualTo("file.hash.other"));
            Assert.That(assets["file2"]["js"], Is.EqualTo("file2.hash.js"));
        }
        public void Assets_have_proper_url_when_using_AsemblyOutputPath()
        {
            var config1 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest5.json", AssetOutputPath = "//somecdn.com/path/"
            };

            SetupManifestFile(config1, @"{
                                                            ""main"": {
                                                                ""js"": [
                                                                      ""/dist/first-script.js"",
                                                                      ""/dist/second-script.js"",
                                                                      ""/dist/third-script.js""
                                                                      ],
                                                                ""css"": [
                                                                    ""/dist/first-style.css"",
                                                                    ""/dist/second-style.css"",
                                                                    ]
                                                                }
                                                            }");

            WebpackAssetsDictionary webpackAssetDictionary = WebpackAssetsDictionary.FromConfig(config1);

            var webpack = new Webpack(new[] { webpackAssetDictionary });

            Assert.That(webpack.GetAssetsUrl("main", "js").Count, Is.EqualTo(3));
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("//somecdn.com/path/dist/first-script.js"));
            Assert.That(webpack.GetAssetsUrl("main", "js")[1], Is.EqualTo("//somecdn.com/path/dist/second-script.js"));
            Assert.That(webpack.GetAssetsUrl("main", "js")[2], Is.EqualTo("//somecdn.com/path/dist/third-script.js"));

            Assert.That(webpack.GetAssetsUrl("main", "css").Count, Is.EqualTo(2));
            Assert.That(webpack.GetAssetsUrl("main", "css")[0], Is.EqualTo("//somecdn.com/path/dist/first-style.css"));
            Assert.That(webpack.GetAssetsUrl("main", "css")[1], Is.EqualTo("//somecdn.com/path/dist/second-style.css"));

            // Test variations of the AssetOutputPath
            webpackAssetDictionary.RootFolder = "/root";
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("/root/dist/first-script.js"));

            webpackAssetDictionary.RootFolder = "/root//////"; // extra slashes
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("/root/dist/first-script.js"));

            webpackAssetDictionary.RootFolder = "\\root\\"; // back slash converted to forward slashes
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("/root/dist/first-script.js"));
        }
        public void FromFile_Reads_Valid_Content()
        {
            File.WriteAllText(_tempFile, @"
			{
				""file"": { ""js"": ""file.hash.js"", ""other"": ""file.hash.other"" },
				""file2"": { ""js"": ""file2.hash.js"" },
                ""file3"": { ""js"": [""file3-1.js"", ""file3-2.js""], ""css"": [""style-1.css"", ""style-2.css""] }
			}"            );

            var assets = WebpackAssetsDictionary.FromFile(_tempFile);

            Assert.That(assets["file"]["js"].First(), Is.EqualTo("file.hash.js"));
            Assert.That(assets["file"]["other"].First(), Is.EqualTo("file.hash.other"));
            Assert.That(assets["file2"]["js"].First(), Is.EqualTo("file2.hash.js"));

            Assert.That(assets["file3"]["js"].First(), Is.EqualTo("file3-1.js"));
            Assert.That(assets["file3"]["js"].Skip(1).First(), Is.EqualTo("file3-2.js"));
            Assert.That(assets["file3"]["css"].First(), Is.EqualTo("style-1.css"));
            Assert.That(assets["file3"]["css"].Skip(1).First(), Is.EqualTo("style-2.css"));
        }
 public void FromFile_Throws_On_NonExistant_File()
 {
     Assert.Throws <FileNotFoundException>(() => WebpackAssetsDictionary.FromFile("non-existant.json"));
 }
 public void FromFile_Throws_On_Invalid_Filename()
 {
     Assert.Throws <ArgumentNullException>(() => WebpackAssetsDictionary.FromFile(null));
     Assert.Throws <ArgumentException>(() => WebpackAssetsDictionary.FromFile(string.Empty));
 }