/// <summary> /// Constructs a instance of Andrey Sitnik's Autoprefix CSS postprocessor /// </summary> /// <param name="createJsEngineInstance">Delegate that creates an instance of JS engine</param> /// <param name="virtualFileSystemWrapper">Virtual file system wrapper</param> /// <param name="autoprefixerConfig">Configuration settings of Andrey Sitnik's Autoprefix CSS postprocessor</param> public AutoprefixCssPostProcessor(Func <IJsEngine> createJsEngineInstance, IVirtualFileSystemWrapper virtualFileSystemWrapper, AutoprefixerSettings autoprefixerConfig) { _virtualFileSystemWrapper = virtualFileSystemWrapper; Browsers = autoprefixerConfig.Browsers .Cast <BrowserConditionalExpression>() .Select(b => b.ConditionalExpression) .ToList() ; Cascade = autoprefixerConfig.Cascade; Add = autoprefixerConfig.Add; Remove = autoprefixerConfig.Remove; Supports = autoprefixerConfig.Supports; Flexbox = autoprefixerConfig.Flexbox; Grid = autoprefixerConfig.Grid; IgnoreUnknownVersions = autoprefixerConfig.IgnoreUnknownVersions; Stats = autoprefixerConfig.Stats; if (createJsEngineInstance == null) { string jsEngineName = autoprefixerConfig.JsEngine.Name; if (string.IsNullOrWhiteSpace(jsEngineName)) { throw new ConfigurationErrorsException( string.Format(CoreStrings.Configuration_JsEngineNotSpecified, "autoprefixer", @" * JavaScriptEngineSwitcher.Msie (only in the Chakra JsRT modes) * JavaScriptEngineSwitcher.V8 * JavaScriptEngineSwitcher.ChakraCore (while it is recommended to use version 3.1.1)", "MsieJsEngine") ); } createJsEngineInstance = () => JsEngineSwitcher.Current.CreateEngine(jsEngineName); } _createJsEngineInstance = createJsEngineInstance; }
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]); }
/// <summary> /// Constructs a instance of Andrey Sitnik's Autoprefix CSS-postprocessor /// </summary> /// <param name="createJsEngineInstance">Delegate that creates an instance of JavaScript engine</param> /// <param name="autoprefixerConfig">Configuration settings of Andrey Sitnik's Autoprefix CSS-postprocessor</param> public AutoprefixCssPostProcessor(Func<IJsEngine> createJsEngineInstance, AutoprefixerSettings autoprefixerConfig) { Browsers = autoprefixerConfig.Browsers .Cast<BrowserConditionalExpression>() .Select(b => b.ConditionalExpression) .ToList() ; Cascade = autoprefixerConfig.Cascade; Remove = autoprefixerConfig.Remove; Add = autoprefixerConfig.Add; if (createJsEngineInstance == null) { string jsEngineName = autoprefixerConfig.JsEngine.Name; if (string.IsNullOrWhiteSpace(jsEngineName)) { throw new ConfigurationErrorsException( string.Format(CoreStrings.Configuration_JsEngineNotSpecified, "autoprefixer", @" * JavaScriptEngineSwitcher.Msie * JavaScriptEngineSwitcher.V8", "MsieJsEngine") ); } createJsEngineInstance = (() => JsEngineSwitcher.Current.CreateJsEngineInstance(jsEngineName)); } _createJsEngineInstance = createJsEngineInstance; }