public void ScriptAssetsListNotContainAssetsWithInvalidTypes()
        {
            // Arrange
            var jqueryJsAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "jquery-1.6.2.js"),
                                          _virtualFileSystemWrapper);

            var testCoffeeAsset = new Asset(
                UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestCoffeeScript.coffee"),
                _virtualFileSystemWrapper);

            var assets = new List <IAsset>
            {
                jqueryJsAsset,
                testCoffeeAsset
            };

            Exception currentException          = null;
            var       scriptAssetTypesValidator = new ScriptAssetTypesValidator();

            // Act
            try
            {
                scriptAssetTypesValidator.Validate(assets);
            }
            catch (Exception ex)
            {
                currentException = ex;
            }

            // Assert
            Assert.IsNotType <InvalidAssetTypesException>(currentException);
        }
        public void StyleAssetsListNotContainAssetsWithInvalidTypes()
        {
            // Arrange
            var siteCssAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Site.css"),
                                         _virtualFileSystemWrapper);

            var testLessAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "TestLess.less"),
                                          _virtualFileSystemWrapper);

            var assets = new List <IAsset>
            {
                siteCssAsset,
                testLessAsset
            };

            Exception currentException = null;

            var styleAssetTypesValidator = new StyleAssetTypesValidator();

            // Act
            try
            {
                styleAssetTypesValidator.Validate(assets);
            }
            catch (Exception ex)
            {
                currentException = ex;
            }

            // Assert
            Assert.IsNotType <InvalidAssetTypesException>(currentException);
        }
        public void DuplicateScriptAssetsRemovedIsCorrect()
        {
            // Arrange
            var virtualFileSystemWrapper = (new Mock <IVirtualFileSystemWrapper>()).Object;

            var jqueryMinAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                              "jquery-1.6.2.min.js"), virtualFileSystemWrapper);
            var jqueryAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                           "jquery-1.6.2.js"), virtualFileSystemWrapper);
            var ajaxLoginAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                              "AjaxLogin.js"), virtualFileSystemWrapper);
            var microsoftAjaxDebugAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                       "MicrosoftAjax.debug.js"), virtualFileSystemWrapper);
            var microsoftAjaxAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                  "MicrosoftAjax.js"), virtualFileSystemWrapper);
            var modernizrAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                              "modernizr-2.0.6-development-only.js"), virtualFileSystemWrapper);
            var ajaxLoginDuplicateAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                       "ajaxlogin.js"), virtualFileSystemWrapper);
            var testCoffeeAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                               "coffee/TestCoffeeScript.coffee"), virtualFileSystemWrapper);
            var testTsAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                           "ts/TestTypeScript.ts"), virtualFileSystemWrapper);
            var duplicateTestCoffeeAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                        "coffee/TestCoffeescript.coffee"), virtualFileSystemWrapper);

            IList <IAsset> assets = new List <IAsset>
            {
                jqueryMinAsset,
                jqueryAsset,
                ajaxLoginAsset,
                microsoftAjaxDebugAsset,
                microsoftAjaxAsset,
                modernizrAsset,
                ajaxLoginDuplicateAsset,
                testCoffeeAsset,
                testTsAsset,
                duplicateTestCoffeeAsset
            };

            var scriptDuplicateFilter = new ScriptDuplicateAssetsFilter();

            // Act
            IList <IAsset> processedAssets = scriptDuplicateFilter.Transform(assets);

            // Assert
            Assert.Equal(6, processedAssets.Count);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                            "jquery-1.6.2.min.js"), processedAssets[0].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                            "AjaxLogin.js"), processedAssets[1].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                            "MicrosoftAjax.debug.js"), processedAssets[2].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                            "modernizr-2.0.6-development-only.js"), processedAssets[3].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                            "coffee/TestCoffeeScript.coffee"), processedAssets[4].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                            "ts/TestTypeScript.ts"), processedAssets[5].VirtualPath);
        }
        public void ReplacementOfFileExtensionsInDebugModeAndUsageOfPreMinifiedFilesAllowedIsCorrect()
        {
            // Arrange
            IList <IAsset> assets = GetTestAssets();
            var            cssFileExtensionsFilter = new CssFileExtensionsFilter(_virtualFileSystemWrapper)
            {
                IsDebugMode         = true,
                UsePreMinifiedFiles = true
            };

            // Act
            IList <IAsset> processedAssets             = cssFileExtensionsFilter.Transform(assets);
            IAsset         siteAsset                   = processedAssets[0];
            IAsset         jqueryUiAccordionAsset      = processedAssets[1];
            IAsset         testCssComponentsPathsAsset = processedAssets[2];

            // Assert
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Site.css"), siteAsset.VirtualPath);
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                            @"themes\base\jquery.ui.accordion.min.css"), jqueryUiAccordionAsset.VirtualPath);
            Assert.NotEqual(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                               @"themes\base\jquery.ui.accordion.css"), jqueryUiAccordionAsset.VirtualPath);
            Assert.Equal(UrlHelpers.Combine(ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                            @"css\TestCssComponentsPaths.css"), testCssComponentsPathsAsset.VirtualPath);

            Assert.False(siteAsset.Minified);
            Assert.True(jqueryUiAccordionAsset.Minified);
            Assert.False(testCssComponentsPathsAsset.Minified);
        }
Exemplo n.º 5
0
        public void DuplicateStyleAssetsRemovedIsCorrect()
        {
            // Arrange
            var siteAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                         "Site.css"), _virtualFileSystemWrapper);
            var jqueryUiAccordionMinAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                         "themes/base/jquery.ui.accordion.min.css"), _virtualFileSystemWrapper);
            var testCssComponentsPathsAsset = new Asset(UrlHelpers.Combine(ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                           "css/TestCssComponentsPaths.css"), _virtualFileSystemWrapper);
            var testCssComponentsPathsMinAsset = new Asset(UrlHelpers.Combine(
                                                               ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                                               "css/TestCssComponentsPaths.min.css"), _virtualFileSystemWrapper);
            var siteDuplicateAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                  "site.css"), _virtualFileSystemWrapper);
            var testLessAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                             "less/TestLess.less"), _virtualFileSystemWrapper);
            var testSassAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                             "sass/TestSass.sass"), _virtualFileSystemWrapper);
            var testScssAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                             "scss/TestScss.scss"), _virtualFileSystemWrapper);
            var duplicateTestLessAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                      "LESS/TestLess.less"), _virtualFileSystemWrapper);

            IList <IAsset> assets = new List <IAsset>
            {
                siteAsset,
                jqueryUiAccordionMinAsset,
                testCssComponentsPathsAsset,
                testCssComponentsPathsMinAsset,
                siteDuplicateAsset,
                testLessAsset,
                testSassAsset,
                testScssAsset,
                duplicateTestLessAsset
            };

            var styleDuplicateFilter = new StyleDuplicateAssetsFilter();

            // Act
            IList <IAsset> processedAssets = styleDuplicateFilter.Transform(assets);

            // Assert
            Assert.Equal(6, processedAssets.Count);
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                            "Site.css"), processedAssets[0].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                            "themes/base/jquery.ui.accordion.min.css"), processedAssets[1].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                            "css/TestCssComponentsPaths.css"), processedAssets[2].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                            "less/TestLess.less"), processedAssets[3].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                            "sass/TestSass.sass"), processedAssets[4].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                            "scss/TestScss.scss"), processedAssets[5].VirtualPath);
        }
Exemplo n.º 6
0
        public void UnneededScriptAssetsRemovedIsCorrect()
        {
            // Arrange
            var virtualFileSystemWrapper = (new Mock <IVirtualFileSystemWrapper>()).Object;

            var ajaxLoginAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                              "AjaxLogin.js"), virtualFileSystemWrapper);
            var jqueryMinAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                              "jquery-1.6.2.min.js"), virtualFileSystemWrapper);
            var jqueryVsDocAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                "jquery-1.6.2-vsdoc.js"), virtualFileSystemWrapper);
            var jqueryValidateVsDocMinAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                           "jquery.validate-vsdoc.min.js"), virtualFileSystemWrapper);
            var microsoftAjaxDebugAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                       "MicrosoftAjax.debug.js"), virtualFileSystemWrapper);
            var telerikAllMinAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                  "telerik.all.min.js"), virtualFileSystemWrapper);
            var knockoutAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                             "knockout-2.0.0.js"), virtualFileSystemWrapper);
            var modernizrAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                              "modernizr-2.0.6-development-only.js"), virtualFileSystemWrapper);
            var referencesAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                               "_references.js"), virtualFileSystemWrapper);

            var assets = new List <IAsset>
            {
                ajaxLoginAsset,
                jqueryMinAsset,
                jqueryVsDocAsset,
                jqueryValidateVsDocMinAsset,
                microsoftAjaxDebugAsset,
                telerikAllMinAsset,
                knockoutAsset,
                modernizrAsset,
                referencesAsset
            };

            var scriptUnnecessaryAssetsFilter = new ScriptUnnecessaryAssetsFilter(
                new[] { "*-vsdoc.js", "*.all.js", "_references.js" });

            // Act
            IList <IAsset> processedAssets = scriptUnnecessaryAssetsFilter.Transform(assets).ToList();

            // Assert
            Assert.Equal(5, processedAssets.Count);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "AjaxLogin.js"),
                         processedAssets[0].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "jquery-1.6.2.min.js"),
                         processedAssets[1].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "MicrosoftAjax.debug.js"),
                         processedAssets[2].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "knockout-2.0.0.js"),
                         processedAssets[3].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                            "modernizr-2.0.6-development-only.js"), processedAssets[4].VirtualPath);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Transforms a relative path to absolute
        /// </summary>
        /// <param name="basePath">The base path</param>
        /// <param name="relativePath">The relative path</param>
        public string ResolveRelativePath(string basePath, string relativePath)
        {
            if (basePath == null)
            {
                throw new ArgumentNullException(
                          nameof(basePath),
                          string.Format(Strings.Common_ArgumentIsNull, nameof(basePath))
                          );
            }

            if (relativePath == null)
            {
                throw new ArgumentNullException(
                          nameof(relativePath),
                          string.Format(Strings.Common_ArgumentIsNull, nameof(relativePath))
                          );
            }

            // Convert backslashes to forward slashes
            string processedBasePath     = UrlHelpers.ProcessBackSlashes(basePath);
            string processedRelativePath = UrlHelpers.ProcessBackSlashes(relativePath);

            // Trying to convert paths to absolute paths
            string absoluteRelativePath;

            if (TryConvertToAbsolutePath(processedRelativePath, out absoluteRelativePath))
            {
                return(UrlHelpers.Normalize(absoluteRelativePath));
            }

            string absoluteBasePath;

            if (TryConvertToAbsolutePath(processedBasePath, out absoluteBasePath))
            {
                processedBasePath = absoluteBasePath;
            }

            if (string.IsNullOrWhiteSpace(processedBasePath))
            {
                return(UrlHelpers.Normalize(processedRelativePath));
            }

            if (string.IsNullOrWhiteSpace(processedRelativePath))
            {
                return(UrlHelpers.Normalize(processedBasePath));
            }

            string baseDirectoryName = UrlHelpers.GetDirectoryName(processedBasePath);
            string absolutePath      = UrlHelpers.Combine(baseDirectoryName, processedRelativePath);

            return(absolutePath);
        }
        public void UrlCalculationIsCorrect()
        {
            // Arrange
            var siteCssAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Site.css"),
                                         _virtualFileSystemWrapper);
            var jqueryAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "jquery-1.6.2.js"),
                                        _virtualFileSystemWrapper);

            // Act
            string siteCssAssetUrl = siteCssAsset.Url;
            string jqueryAssetUrl  = jqueryAsset.Url;

            // Assert
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_URL, "Site.css"), siteCssAssetUrl);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_URL, "jquery-1.6.2.js"), jqueryAssetUrl);
        }
        private IList <IAsset> GetTestAssets()
        {
            var siteAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Site.css"),
                                      _virtualFileSystemWrapper);
            var jqueryUiAccordionAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                      @"themes\base\jquery.ui.accordion.min.css"), _virtualFileSystemWrapper);
            var testCssComponentsPathsAsset = new Asset(UrlHelpers.Combine(ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                           @"css\TestCssComponentsPaths.css"), _virtualFileSystemWrapper);

            var testAssets = new List <IAsset>
            {
                siteAsset,
                jqueryUiAccordionAsset,
                testCssComponentsPathsAsset
            };

            return(testAssets);
        }
Exemplo n.º 10
0
        public void UnneededStyleAssetsRemovedIsCorrect()
        {
            // Arrange
            var virtualFileSystemWrapper = (new Mock <IVirtualFileSystemWrapper>()).Object;

            var siteAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, @"Site.css"),
                                      virtualFileSystemWrapper);
            var jqueryUiAccordionAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                      @"themes\base\jquery.ui.accordion.css"), virtualFileSystemWrapper);
            var jqueryUiAllAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                @"themes\base\jquery.ui.all.css"), virtualFileSystemWrapper);
            var testCssComponentsPathsAsset = new Asset(UrlHelpers.Combine(ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                           @"css\TestCssComponentsPaths.css"), virtualFileSystemWrapper);
            var jqueryUiBaseMinAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                    @"themes\base\jquery.ui.base.min.css"), virtualFileSystemWrapper);

            var assets = new List <IAsset>
            {
                siteAsset,
                jqueryUiAccordionAsset,
                jqueryUiAllAsset,
                testCssComponentsPathsAsset,
                jqueryUiBaseMinAsset
            };

            var styleUnnecessaryAssetsFilter = new StyleUnnecessaryAssetsFilter(
                new[] { "*.all.css", "jquery.ui.base.css" });

            // Act
            IList <IAsset> processedAssets = styleUnnecessaryAssetsFilter.Transform(assets).ToList();

            // Assert
            Assert.Equal(3, processedAssets.Count);
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, @"Site.css"),
                         processedAssets[0].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                            @"themes\base\jquery.ui.accordion.css"), processedAssets[1].VirtualPath);
            Assert.Equal(UrlHelpers.Combine(ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                            @"css\TestCssComponentsPaths.css"), processedAssets[2].VirtualPath);
        }
Exemplo n.º 11
0
        public void ReplacementOfFileExtensionsInReleaseModeAndUsageOfPreMinifiedFilesDisallowedIsCorrect()
        {
            // Arrange
            IList <IAsset> assets = GetTestAssets();
            var            jsFileExtensionsFilter = new JsFileExtensionsFilter(_jsFilesWithMicrosoftStyleExtensions,
                                                                               _virtualFileSystemWrapper)
            {
                IsDebugMode         = false,
                UsePreMinifiedFiles = false
            };

            // Act
            IList <IAsset> processedAssets    = jsFileExtensionsFilter.Transform(assets);
            IAsset         jqueryAsset        = processedAssets[0];
            IAsset         jqueryUiAsset      = processedAssets[1];
            IAsset         microsoftAjaxAsset = processedAssets[2];
            IAsset         knockoutAsset      = processedAssets[3];
            IAsset         modernizrAsset     = processedAssets[4];

            // Assert
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "jquery-1.6.2.js"),
                         jqueryAsset.VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "jquery-ui-1.8.11.js"),
                         jqueryUiAsset.VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "MicrosoftAjax.debug.js"),
                         microsoftAjaxAsset.VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "knockout-2.1.0beta.debug.js"),
                         knockoutAsset.VirtualPath);
            Assert.Equal(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                            "modernizr-2.0.6-development-only.js"), modernizrAsset.VirtualPath);
            Assert.NotEqual(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                               "modernizr-2.0.6-development-only.min.js"), modernizrAsset.VirtualPath);

            Assert.False(jqueryAsset.Minified);
            Assert.False(jqueryUiAsset.Minified);
            Assert.False(microsoftAjaxAsset.Minified);
            Assert.False(knockoutAsset.Minified);
            Assert.False(modernizrAsset.Minified);
        }
        public CssFileExtensionsFilterTests()
        {
            var virtualFileSystemMock = new Mock <IVirtualFileSystemWrapper>();

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Site.css")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Site.min.css")))
            .Returns(false)
            ;

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                          @"themes\base\jquery.ui.accordion.css")))
            .Returns(false)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                          @"themes\base\jquery.ui.accordion.min.css")))
            .Returns(true)
            ;

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                                          @"css\TestCssComponentsPaths.css")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(ALTERNATIVE_STYLES_DIRECTORY_VIRTUAL_PATH,
                                                          @"css\TestCssComponentsPaths.min.css")))
            .Returns(true)
            ;

            _virtualFileSystemWrapper = virtualFileSystemMock.Object;
        }
Exemplo n.º 13
0
        private IList <IAsset> GetTestAssets()
        {
            var jqueryAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                           "jquery-1.6.2.js"), _virtualFileSystemWrapper);
            var jqueryUiAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                             "jquery-ui-1.8.11.min.js"), _virtualFileSystemWrapper);
            var microsoftAjaxAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                  "MicrosoftAjax.debug.js"), _virtualFileSystemWrapper);
            var knockoutAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                             "knockout-2.1.0beta.js"), _virtualFileSystemWrapper);
            var modernizrAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                              "modernizr-2.0.6-development-only.js"), _virtualFileSystemWrapper);

            var testAssets = new List <IAsset>
            {
                jqueryAsset,
                jqueryUiAsset,
                microsoftAjaxAsset,
                knockoutAsset,
                modernizrAsset
            };

            return(testAssets);
        }
Exemplo n.º 14
0
        public void FillingOfDependenciesIsCorrect()
        {
            // Arrange
            var virtualFileSystemMock = new Mock <IVirtualFileSystemWrapper>();

            string testLessLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "TestLess.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(testLessLessAssetVirtualPath))
            .Returns(testLessLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(testLessLessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(testLessLessAssetVirtualPath))
            .Returns(@"@import (once) ""Mixins.less"";
@import (reference) ""Variables.less"";
@import (css) url(""data:text/css;base64,Ym9keSB7IGJhY2tncm91bmQtY29sb3I6IGxpbWUgIWltcG9ydGFudDsgfQ=="");

.translators #less
{
	float: left;
	.visible();
	padding: 0.2em 0.5em 0.2em 0.5em;
	background-color: @bg-color;
	color: @caption-color;
	font-weight: bold;
	border: 1px solid @bg-color;
	.border-radius(5px);
}

.icon-monitor
{
	display: inline;
	background-image: url(""@{icons-path}monitor.png"");
}

@import (once) ""TestLessImport.less"";")
            ;

            string mixinsLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Mixins.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(mixinsLessAssetVirtualPath))
            .Returns(mixinsLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(mixinsLessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(mixinsLessAssetVirtualPath))
            .Returns(@"// Border Radius
.border-radius(@radius) {
  -webkit-border-radius: @radius;
     -moz-border-radius: @radius;
          border-radius: @radius;
}

// Visible
.visible
{
	display: block;
}")
            ;

            string variablesLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Variables.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(variablesLessAssetVirtualPath))
            .Returns(variablesLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(variablesLessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(variablesLessAssetVirtualPath))
            .Returns(@"@bg-color: #7AC0DA;
@caption-color: #FFFFFF;
@stylesheets-path: ""/Content/"";
@icons-path: ""/Content/images/icons/"";")
            ;

            string testLessImportLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                           "TestLessImport.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(testLessImportLessAssetVirtualPath))
            .Returns(testLessImportLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(testLessImportLessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(testLessImportLessAssetVirtualPath))
            .Returns(@"@alt-bg-color: #143352;

.translators #less
{
	background-color: @alt-bg-color;
}

.icon-headphone
{
	display: inline;
	background-image: data-uri('@{icons-path}headphone.gif');
}

.icon-google-plus
{
	display: inline;
	background-image: data-uri('google-plus.svg');
}

@import (multiple) url(		""TestLessImport.Sub1.less""	);
.singleline-comment { content: ""//"" } .triple-slash-directive { content: '///' } @import '@{stylesheets-path}TestLessImport.Sub2';
/*@import 'TestLessImport.Sub3.less';
@import 'TestLessImport.Sub4.less';*/
// @import ""TestLessImport.Sub5.less"";
// Obsolete import //@import ""TestLessImport.Sub6.less"";
.icon-bean { background-image: url(http://taritsyn.files.wordpress.com/2013/08/bean.png); } //@import ""TestLessImport.Sub7.less"";
// @import ""TestLessImport.Sub8.less""; @import ""TestLessImport.Sub9.less"";
")
            ;


            string headphoneGifAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "images/icons/headphone.gif");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(headphoneGifAssetVirtualPath))
            .Returns(headphoneGifAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(headphoneGifAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileBinaryContent(headphoneGifAssetVirtualPath))
            .Returns(new byte[0])
            ;


            string googlePlusSvgAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "google-plus.svg");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(googlePlusSvgAssetVirtualPath))
            .Returns(googlePlusSvgAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(googlePlusSvgAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(googlePlusSvgAssetVirtualPath))
            .Returns(string.Empty)
            ;


            string testLessImportSub1LessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                               "TestLessImport.Sub1.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(testLessImportSub1LessAssetVirtualPath))
            .Returns(testLessImportSub1LessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(testLessImportSub1LessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(testLessImportSub1LessAssetVirtualPath))
            .Returns(@"@import (css) url(http://fonts.googleapis.com/css?family=Limelight&subset=latin,latin-ext);

@border-color: #143352;

.translators #less
{
	border-color: @border-color;
}

.icon-network
{
	display: inline;
	background-image: data-uri('image/png;base64', ""@network.png"");
}

@import url(""TagIcon.css"");")
            ;


            string networkPngAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "@network.png");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(networkPngAssetVirtualPath))
            .Returns(networkPngAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(networkPngAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileBinaryContent(networkPngAssetVirtualPath))
            .Returns(new byte[0])
            ;


            string tagIconCssAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "TagIcon.css");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(tagIconCssAssetVirtualPath))
            .Returns(tagIconCssAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(tagIconCssAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(tagIconCssAssetVirtualPath))
            .Returns(@".icon-tag
{
	display: inline;
	background-image: url(tag.png) !important;
}")
            ;


            string testLessImportSub2LessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                               "TestLessImport.Sub2.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(testLessImportSub2LessAssetVirtualPath))
            .Returns(testLessImportSub2LessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(testLessImportSub2LessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(testLessImportSub2LessAssetVirtualPath))
            .Returns(@"@import (css) 'http://fonts.googleapis.com/css?family=Limelight&subset=latin,latin-ext';
@import (css) ""UsbFlashDriveIcon.css"";
@import (less) ""ValidationIcon.css"";
@import (inline) ""MicroformatsIcon.css"";
@import (inline, css) 'NodeIcon.less';
@import (css) ""OpenIdIcon.less"";
@import (optional) ""PrinterIcon.less"";
@import (optional) ""NonExistentIcon.less"";
@import ""~/Content/XfnIcon.less"";
@import ""~/Content/YahooIcon.css"";")
            ;


            string usbFlashDriveIconCssAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                             "UsbFlashDriveIcon.css");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(usbFlashDriveIconCssAssetVirtualPath))
            .Returns(usbFlashDriveIconCssAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(usbFlashDriveIconCssAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(usbFlashDriveIconCssAssetVirtualPath))
            .Returns(@".icon-usb-flash-drive
{
	display: inline;
	background-image: ""usb-flash-drive.png"" !important;
}")
            ;

            string validationIconCssAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                          "ValidationIcon.css");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(validationIconCssAssetVirtualPath))
            .Returns(validationIconCssAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(validationIconCssAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(validationIconCssAssetVirtualPath))
            .Returns(@".icon-validation
{
	display: inline;
	background-image: url('validation.png') !important;
}")
            ;

            string microformatsIconCssAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                            "MicroformatsIcon.css");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(microformatsIconCssAssetVirtualPath))
            .Returns(microformatsIconCssAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(microformatsIconCssAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(microformatsIconCssAssetVirtualPath))
            .Returns(@".icon-microformats
{
	display: inline;
	background-image: url(microformats.png) !important;
}")
            ;

            string nodeIconLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                     "NodeIcon.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(nodeIconLessAssetVirtualPath))
            .Returns(nodeIconLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(nodeIconLessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(nodeIconLessAssetVirtualPath))
            .Returns(@".icon-node
{
	display: inline;
	background-image: url(node.png) !important;
}")
            ;

            string openIdIconLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                       "OpenIdIcon.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(openIdIconLessAssetVirtualPath))
            .Returns(openIdIconLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(openIdIconLessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(openIdIconLessAssetVirtualPath))
            .Returns(@".icon-openid
{
	display: inline;
	background-image: url(openid.png) !important;
}")
            ;

            string printerIconLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                        "PrinterIcon.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(printerIconLessAssetVirtualPath))
            .Returns(printerIconLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(printerIconLessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(printerIconLessAssetVirtualPath))
            .Returns(@".icon-printer
{
	display: inline;
	background-image: url(printer.png) !important;
}")
            ;

            string nonExistentIconLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                            "NonExistentIcon.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(nonExistentIconLessAssetVirtualPath))
            .Returns(nonExistentIconLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(nonExistentIconLessAssetVirtualPath))
            .Returns(false)
            ;

            string xfnIconLessAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                    "XfnIcon.less");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath("~" + xfnIconLessAssetVirtualPath))
            .Returns(xfnIconLessAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(xfnIconLessAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(xfnIconLessAssetVirtualPath))
            .Returns(@".icon-xfn
{
	display: inline;
	background-image: url(""~/Content/xfn.png"");
}")
            ;

            string xfnPngAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                               "xfn.png");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath("~" + xfnPngAssetVirtualPath))
            .Returns(xfnPngAssetVirtualPath)
            ;

            string yahooIconCssAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH,
                                                                     "YahooIcon.css");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath("~" + yahooIconCssAssetVirtualPath))
            .Returns(yahooIconCssAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(yahooIconCssAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(yahooIconCssAssetVirtualPath))
            .Returns(@".icon-yahoo
{
	display: inline;
	background-image: url(""/Content/yahoo.ico"") !important;
}")
            ;

            Func <IJsEngine> createJsEngineInstance =
                () => JsEngineSwitcher.Instance.CreateDefaultEngine();
            IVirtualFileSystemWrapper virtualFileSystemWrapper = virtualFileSystemMock.Object;
            var lessConfig = new LessSettings();

            var lessTranslator = new LessTranslator(createJsEngineInstance,
                                                    virtualFileSystemWrapper, lessConfig);
            IAsset asset = new Asset(testLessLessAssetVirtualPath, virtualFileSystemWrapper);

            // Act
            asset = lessTranslator.Translate(asset);
            IList <string> dependencies = asset.VirtualPathDependencies;

            // Assert
            Assert.Equal(14, dependencies.Count);
            Assert.Equal(mixinsLessAssetVirtualPath, dependencies[0]);
            Assert.Equal(variablesLessAssetVirtualPath, dependencies[1]);
            Assert.Equal(testLessImportLessAssetVirtualPath, dependencies[2]);
            Assert.Equal(testLessImportSub1LessAssetVirtualPath, dependencies[3]);
            Assert.Equal(testLessImportSub2LessAssetVirtualPath, dependencies[4]);
            Assert.Equal(validationIconCssAssetVirtualPath, dependencies[5]);
            Assert.Equal(microformatsIconCssAssetVirtualPath, dependencies[6]);
            Assert.Equal(nodeIconLessAssetVirtualPath, dependencies[7]);
            Assert.Equal(printerIconLessAssetVirtualPath, dependencies[8]);
            Assert.Equal(nonExistentIconLessAssetVirtualPath, dependencies[9]);
            Assert.Equal(xfnIconLessAssetVirtualPath, dependencies[10]);
            Assert.Equal(headphoneGifAssetVirtualPath, dependencies[11]);
            Assert.Equal(googlePlusSvgAssetVirtualPath, dependencies[12]);
            Assert.Equal(networkPngAssetVirtualPath, dependencies[13]);
        }
        public void ScriptAssetsListContainAssetsWithInvalidTypes()
        {
            // Arrange
            var siteCssAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Site.css"),
                                         _virtualFileSystemWrapper);

            var jqueryJsAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "jquery-1.6.2.js"),
                                          _virtualFileSystemWrapper);

            var testLessAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "TestLess.less"),
                                          _virtualFileSystemWrapper);

            var testCoffeeAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestCoffeeScript.coffee"),
                                            _virtualFileSystemWrapper);

            var testLitCoffeeAsset = new Asset(
                UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestLiterateCoffeeScript.litcoffee"),
                _virtualFileSystemWrapper);

            var testCoffeeMdAsset = new Asset(
                UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestCoffeeScriptMarkdown.coffee.md"),
                _virtualFileSystemWrapper);

            var testPlainTextAsset = new Asset(UrlHelpers.Combine(APPLICATION_ROOT_VIRTUAL_PATH, "TestPlainText.txt"),
                                               _virtualFileSystemWrapper);

            var assets = new List <IAsset>
            {
                siteCssAsset,
                jqueryJsAsset,
                testLessAsset,
                testCoffeeAsset,
                testLitCoffeeAsset,
                testCoffeeMdAsset,
                testPlainTextAsset
            };

            Exception currentException          = null;
            var       scriptAssetTypesValidator = new ScriptAssetTypesValidator();

            // Act
            try
            {
                scriptAssetTypesValidator.Validate(assets);
            }
            catch (Exception ex)
            {
                currentException = ex;
            }

            var invalidAssetsVirtualPaths  = new string[0];
            var invalidAssetTypesException = (InvalidAssetTypesException)currentException;

            if (invalidAssetTypesException != null)
            {
                invalidAssetsVirtualPaths = invalidAssetTypesException.InvalidAssetsVirtualPaths;
            }

            // Assert
            Assert.IsType <InvalidAssetTypesException>(currentException);
            Assert.Equal(3, invalidAssetsVirtualPaths.Length);
            Assert.Contains(siteCssAsset.VirtualPath, invalidAssetsVirtualPaths);
            Assert.Contains(testLessAsset.VirtualPath, invalidAssetsVirtualPaths);
            Assert.Contains(testPlainTextAsset.VirtualPath, invalidAssetsVirtualPaths);
        }
Exemplo n.º 16
0
 public string ToAbsolutePath(string virtualPath)
 {
     return(UrlHelpers.Combine(_applicationRootUrl, virtualPath.TrimStart('~').TrimStart('/')));
 }
Exemplo n.º 17
0
        public JsFileExtensionsFilterTests()
        {
            var virtualFileSystemMock = new Mock <IVirtualFileSystemWrapper>();

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "jquery-1.6.2.debug.js")))
            .Returns(false)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "jquery-1.6.2.js")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "jquery-1.6.2.min.js")))
            .Returns(true)
            ;

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "jquery-ui-1.8.11.debug.js")))
            .Returns(false)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "jquery-ui-1.8.11.js")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "jquery-ui-1.8.11.min.js")))
            .Returns(true)
            ;

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "MicrosoftAjax.debug.js")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "MicrosoftAjax.js")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "MicrosoftAjax.min.js")))
            .Returns(false)
            ;

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "knockout-2.1.0beta.debug.js")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "knockout-2.1.0beta.js")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "knockout-2.1.0beta.min.js")))
            .Returns(false)
            ;

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "modernizr-2.0.6-development-only.debug.js")))
            .Returns(false)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "modernizr-2.0.6-development-only.js")))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                          "modernizr-2.0.6-development-only.min.js")))
            .Returns(false)
            ;

            _virtualFileSystemWrapper = virtualFileSystemMock.Object;
        }
        public void FillingOfDependenciesIsCorrect()
        {
            // Arrange
            var virtualFileSystemMock = new Mock <IVirtualFileSystemWrapper>();

            string testCssAssetVirtualPath = UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Test.css");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(testCssAssetVirtualPath))
            .Returns(testCssAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(testCssAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(testCssAssetVirtualPath))
            .Returns(@":fullscreen a
{
	display: flex
}")
            ;

            const string customStatisticsFileVirtualPath = "~/App_Data/BundleTransformer/stats.json";

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(customStatisticsFileVirtualPath))
            .Returns(customStatisticsFileVirtualPath.Replace("~/", "/"))
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(customStatisticsFileVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(customStatisticsFileVirtualPath))
            .Returns(@"{
	""name"": ""All data of website"",
	""id"": ""90598522|undefined"",
	""type"": ""custom"",
	""source"": ""google_analytics"",
	""dataByBrowser"": {},
	""meta"": {
		""start_date"": ""2015-12-20"",
		""end_date"": ""2016-01-19""
	},
	""uid"": ""custom.90598522|undefined""
}")
            ;

            Func <IJsEngine> createJsEngineInstance =
                () => JsEngineSwitcher.Instance.CreateDefaultEngine();
            IVirtualFileSystemWrapper virtualFileSystemWrapper = virtualFileSystemMock.Object;
            var autoprefixerConfig = new AutoprefixerSettings
            {
                Stats = customStatisticsFileVirtualPath
            };

            var autoprefixCssPostProcessor = new AutoprefixCssPostProcessor(createJsEngineInstance,
                                                                            virtualFileSystemWrapper, autoprefixerConfig);
            IAsset asset = new Asset(testCssAssetVirtualPath, virtualFileSystemWrapper);

            // Act
            asset = autoprefixCssPostProcessor.PostProcess(asset);
            IList <string> dependencies = asset.VirtualPathDependencies;

            // Assert
            Assert.Equal(1, dependencies.Count);
            Assert.Equal("/App_Data/BundleTransformer/stats.json", dependencies[0]);
        }
        public void FillingOfDependenciesIsCorrect()
        {
            // Arrange
            var virtualFileSystemMock = new Mock <IVirtualFileSystemWrapper>();

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath("~/"))
            .Returns("/")
            ;


            string testTypeScriptTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                         "TestTypeScript.ts");

            virtualFileSystemMock
            .Setup(fs => fs.ToAbsolutePath(testTypeScriptTsAssetVirtualPath))
            .Returns(testTypeScriptTsAssetVirtualPath)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.FileExists(testTypeScriptTsAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(testTypeScriptTsAssetVirtualPath))
            .Returns(@"/// <reference path=""ColoredTranslatorBadge.ts"" />

module TranslatorBadges {
	var TS_BADGE_TEXT: string = ""TypeScript"";
	var TS_BADGE_COLOR: string = ""#0074C1"";

	export function createTsTranslatorBadge() {
		var tsBadge: IColoredTranslatorBadge = new ColoredTranslatorBadge(""ts"");
		tsBadge.setText(TS_BADGE_TEXT);
		tsBadge.setTextColor(TS_BADGE_COLOR);
		tsBadge.setBorderColor(TS_BADGE_COLOR);
		tsBadge.show();
	}
}

TranslatorBadges.createTsTranslatorBadge();")
            ;


            string jqueryTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                 "jquery.d.ts");

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(jqueryTsAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(jqueryTsAssetVirtualPath))
            .Returns(Utils.GetResourceAsString("BundleTransformer.Tests.Resources.jquery.d.ts", GetType().Assembly))
            ;


            string iTranslatorBadgeTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                           "ITranslatorBadge.d.ts");

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(iTranslatorBadgeTsAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(iTranslatorBadgeTsAssetVirtualPath))
            .Returns(@"interface ITranslatorBadge {
	getText(): string;
	setText(text: string): void;
	show(): void;
	hide(): void;
	isVisible(): boolean;
}")
            ;


            string translatorBadgeTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                          "TranslatorBadge.ts");

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(translatorBadgeTsAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(translatorBadgeTsAssetVirtualPath))
            .Returns(@"/// <reference path=""jquery.d.ts"" />
/// <reference path=""ITranslatorBadge.d.ts"" />

module TranslatorBadges {
	export class TranslatorBadge implements ITranslatorBadge {
		$badgeElem: JQuery;
		$linkElem: JQuery;

		constructor (public elementId: string) {
			this.$badgeElem = jQuery(""#"" + elementId);
			this.$linkElem = this.$badgeElem.find(""A:first"");
		}

		public getText(): string {
			return this.$linkElem.text();
		}

		public setText(text: string): void {
			this.$linkElem.text(text);
		}

		public show(): void {
			this.$badgeElem.show(0);
		}

		public hide(): void {
			this.$badgeElem.hide(0);
		}

		public isVisible() : boolean {
			return this.$badgeElem.is("":visible"");
		}
	}
}")
            ;


            string iColoredTranslatorBadgeTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                                  "IColoredTranslatorBadge.d.ts");

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(iColoredTranslatorBadgeTsAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(iColoredTranslatorBadgeTsAssetVirtualPath))
            .Returns(@"/// <reference path=""ITranslatorBadge.d.ts"" />

interface IColoredTranslatorBadge extends ITranslatorBadge {
	getTextColor(): string;
	setTextColor(color: string): void;
	getBorderColor(): string;
	setBorderColor(color: string): void;
}")
            ;


            string coloredTranslatorBadgeTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                                                                                 "ColoredTranslatorBadge.ts");

            virtualFileSystemMock
            .Setup(fs => fs.FileExists(coloredTranslatorBadgeTsAssetVirtualPath))
            .Returns(true)
            ;
            virtualFileSystemMock
            .Setup(fs => fs.GetFileTextContent(coloredTranslatorBadgeTsAssetVirtualPath))
            .Returns(@"/// <reference path=""jquery.d.ts"" />
/// <reference path=""./IColoredTranslatorBadge.d.ts"" />
/// <reference path=""TranslatorBadge.ts"" />

module TranslatorBadges {
	export class ColoredTranslatorBadge
		extends TranslatorBadge
	{
		public getTextColor(): string {
			return this.$linkElem.css(""color"");
		}

		public setTextColor(color: string): void {
			this.$linkElem.css(""color"", color);
		}

		public getBorderColor(): string {
			return this.$badgeElem.css(""border-color"");
		}

		public setBorderColor(color: string): void {
			this.$badgeElem.css(""border-color"", color);
		}
	}
}")
            ;

            Func <IJsEngine> createJsEngineInstance =
                () => JsEngineSwitcher.Current.CreateDefaultEngine();
            IVirtualFileSystemWrapper virtualFileSystemWrapper = virtualFileSystemMock.Object;
            var tsConfig = new TypeScriptSettings();

            var tsTranslator = new TypeScriptTranslator(createJsEngineInstance, virtualFileSystemWrapper,
                                                        tsConfig);
            IAsset asset = new Asset(testTypeScriptTsAssetVirtualPath, virtualFileSystemWrapper);

            // Act
            asset = tsTranslator.Translate(asset);
            IList <string> dependencies = asset.VirtualPathDependencies;

            // Assert
            Assert.Equal(5, dependencies.Count);

            Assert.Equal(coloredTranslatorBadgeTsAssetVirtualPath, dependencies[0]);
            Assert.Equal(jqueryTsAssetVirtualPath, dependencies[1]);
            Assert.Equal(iColoredTranslatorBadgeTsAssetVirtualPath, dependencies[2]);
            Assert.Equal(iTranslatorBadgeTsAssetVirtualPath, dependencies[3]);
            Assert.Equal(translatorBadgeTsAssetVirtualPath, dependencies[4]);
        }
        public void DeterminationOfAssetTypeIsCorrect()
        {
            // Arrange

            // Act
            var siteCssAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "Site.css"),
                                         _virtualFileSystemWrapper);

            var jqueryJsAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "jquery-1.6.2.js"),
                                          _virtualFileSystemWrapper);

            var testLessAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "TestLess.less"),
                                          _virtualFileSystemWrapper);

            var testSassAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "TestSass.sass"),
                                          _virtualFileSystemWrapper);

            var testScssAsset = new Asset(UrlHelpers.Combine(STYLES_DIRECTORY_VIRTUAL_PATH, "TestScss.scss"),
                                          _virtualFileSystemWrapper);

            var testCoffeeAsset = new Asset(
                UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestCoffeeScript.coffee"),
                _virtualFileSystemWrapper);

            var testLitCoffeeAsset = new Asset(
                UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestLiterateCoffeeScript.litcoffee"),
                _virtualFileSystemWrapper);

            var testCoffeeMdAsset = new Asset(
                UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestCoffeeScriptMarkdown.coffee.md"),
                _virtualFileSystemWrapper);

            var testTsAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestTypeScript.ts"),
                                        _virtualFileSystemWrapper);

            var testHandlebarsAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestHandlebars.handlebars"),
                                                _virtualFileSystemWrapper);

            var testShortHandlebarsAsset = new Asset(UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH, "TestShortHandlebars.hbs"),
                                                     _virtualFileSystemWrapper);

            var testPlainTextAsset = new Asset(UrlHelpers.Combine(APPLICATION_ROOT_VIRTUAL_PATH, "TestPlainText.txt"),
                                               _virtualFileSystemWrapper);

            // Assert
            Assert.Equal(CoreAssetTypeCodes.Css, siteCssAsset.AssetTypeCode);
            Assert.Equal(CoreAssetTypeCodes.JavaScript, jqueryJsAsset.AssetTypeCode);
            Assert.Equal(LessAssetTypeCodes.Less, testLessAsset.AssetTypeCode);
            Assert.Equal(SassAndScssAssetTypeCodes.Sass, testSassAsset.AssetTypeCode);
            Assert.Equal(SassAndScssAssetTypeCodes.Scss, testScssAsset.AssetTypeCode);
            Assert.Equal(CoffeeScriptAssetTypeCodes.CoffeeScript, testCoffeeAsset.AssetTypeCode);
            Assert.Equal(CoffeeScriptAssetTypeCodes.LiterateCoffeeScript, testLitCoffeeAsset.AssetTypeCode);
            Assert.Equal(CoffeeScriptAssetTypeCodes.LiterateCoffeeScript, testCoffeeMdAsset.AssetTypeCode);
            Assert.Equal(TypeScriptAssetTypeCodes.TypeScript, testTsAsset.AssetTypeCode);
            Assert.Equal(HandlebarsAssetTypeCodes.Handlebars, testHandlebarsAsset.AssetTypeCode);
            Assert.Equal(HandlebarsAssetTypeCodes.Handlebars, testShortHandlebarsAsset.AssetTypeCode);
            Assert.Equal(CoreAssetTypeCodes.Unknown, testPlainTextAsset.AssetTypeCode);

            Assert.True(siteCssAsset.IsStylesheet);
            Assert.False(siteCssAsset.IsScript);
            Assert.False(jqueryJsAsset.IsStylesheet);
            Assert.True(jqueryJsAsset.IsScript);
            Assert.True(testLessAsset.IsStylesheet);
            Assert.False(testLessAsset.IsScript);
            Assert.True(testSassAsset.IsStylesheet);
            Assert.False(testSassAsset.IsScript);
            Assert.True(testScssAsset.IsStylesheet);
            Assert.False(testScssAsset.IsScript);
            Assert.False(testCoffeeAsset.IsStylesheet);
            Assert.True(testCoffeeAsset.IsScript);
            Assert.False(testLitCoffeeAsset.IsStylesheet);
            Assert.True(testLitCoffeeAsset.IsScript);
            Assert.False(testCoffeeMdAsset.IsStylesheet);
            Assert.True(testCoffeeMdAsset.IsScript);
            Assert.False(testTsAsset.IsStylesheet);
            Assert.True(testTsAsset.IsScript);
            Assert.False(testHandlebarsAsset.IsStylesheet);
            Assert.True(testHandlebarsAsset.IsScript);
            Assert.False(testShortHandlebarsAsset.IsStylesheet);
            Assert.True(testShortHandlebarsAsset.IsScript);
            Assert.False(testPlainTextAsset.IsStylesheet);
            Assert.False(testPlainTextAsset.IsScript);
        }