public void SetupDecoratorForTest() { Engine = new Mock <ILessEngine>(); Cache = new Mock <ICache>(); Imports = new List <string>(); Less = "the less"; Css = "the css"; FileName = "file.less"; CacheKey = FileName + "CEaZzayH8iHMO6dQWSalPiDS7TY="; Cached = false; Engine.Setup(e => e.GetImports()).Returns(Imports); Engine.Setup(e => e.TransformToCss(Less, FileName)).Returns(() => Css); Cache.Setup(c => c.Exists(CacheKey)).Returns(() => Cached); Cache.Setup(c => c.Retrieve(CacheKey)) .Returns(() => Cached ? Css : "") .Callback(() => { if (!Cached) { Assert.Fail("not cached"); } }); CacheDecorator = new CacheDecorator(Engine.Object, Cache.Object); }
public void RetrievesIfAlreadyCached() { Cached = true; CacheDecorator.TransformToCss(Less, FileName); Cache.Verify(c => c.Retrieve(CacheKey)); }
public void IncludesDependancyForAllImports() { Imports.Add("myfile.less"); Imports.Add("myotherfile.less"); CacheDecorator.TransformToCss(Less, FileName); Cache.Verify(c => c.Insert(CacheKey, It.Is <IEnumerable <string> >(i => Imports.All(s => i.Contains(s))), Css)); }
public static ICommandHandler <TCommand> DefaultWithRetry <TCommand>(object handler, IServiceProvider provider) { var logger = provider.GetService <ILogger>(); var cache = provider.GetService <ICache>(); var validations = provider.GetServices <IValidator <TCommand> >(); var transactionDecorator = new TransactionDecorator <TCommand>((ICommandHandler <TCommand>)handler); var loggingDecorator = new LoggingDecorator <TCommand>(transactionDecorator, logger); var validationDecorator = new ValidationDecorator <TCommand>(loggingDecorator, validations); var retryDecorator = new RetryDecorator <TCommand>(validationDecorator, logger, nrRetry: 3); var cacheDecorator = new CacheDecorator <TCommand>(retryDecorator, cache); return(cacheDecorator); // order is revers for decorators }
/// <inheritdoc /> protected override Task <IEnumerable <IDocument> > ExecuteContextAsync(IExecutionContext context) { DotlessConfiguration config = DotlessConfiguration.GetDefault(); // config.Logger = typeof(LessLogger); EngineFactory engineFactory = new EngineFactory(config); FileSystemReader fileSystemReader = new FileSystemReader(context.FileSystem); return(context.Inputs.ParallelSelectAsync(ProcessLessAsync)); async Task <IDocument> ProcessLessAsync(IDocument input) { context.LogDebug("Processing Less for {0}", input.ToSafeDisplayString()); // This is a hack to get to the underlying engine ParameterDecorator parameterDecorator = (ParameterDecorator)engineFactory.GetEngine(); CacheDecorator cacheDecorator = (CacheDecorator)parameterDecorator.Underlying; LessEngine engine = (LessEngine)cacheDecorator.Underlying; engine.Logger = new LessLogger(context); ((Importer)engine.Parser.Importer).FileReader = fileSystemReader; // Less conversion FilePath path = await _inputPath.GetValueAsync(input, context); if (path != null) { engine.CurrentDirectory = path.Directory.FullPath; } else { engine.CurrentDirectory = string.Empty; path = new FilePath(Path.GetRandomFileName()); context.LogWarning($"No input path found for document {input.ToSafeDisplayString()}, using {path.FileName.FullPath}"); } string content = engine.TransformToCss(await input.GetContentStringAsync(), path.FileName.FullPath); // Process the result FilePath cssPath = path.GetRelativeInputPath(context).ChangeExtension("css"); return(input.Clone( cssPath, await context.GetContentProviderAsync(content))); } }
public void SetupDecoratorForTest() { Engine = new Mock<ILessEngine>(); Cache = new Mock<ICache>(); Imports = new List<string>(); Less = "the less"; Css = "the css"; FileName = "file.less"; CacheKey = FileName + "CEaZzayH8iHMO6dQWSalPiDS7TY="; Cached = false; Engine.Setup(e => e.GetImports()).Returns(Imports); Engine.Setup(e => e.TransformToCss(Less, FileName)).Returns(() => Css); Cache.Setup(c => c.Exists(CacheKey)).Returns(() => Cached); Cache.Setup(c => c.Retrieve(CacheKey)) .Returns(() => Cached ? Css : "") .Callback(() => { if (!Cached) Assert.Fail("not cached"); }); CacheDecorator = new CacheDecorator(Engine.Object, Cache.Object); }
private static void LoadWithDecorators() { DABase decd; EMFetcher concrete = new EMFetcher(); DBDecorator dbdec = new DBDecorator(); dbdec.SetComponent(concrete); CacheDecorator cachedec = new CacheDecorator(); cachedec.SetComponent(dbdec); MemCacheDecorator memdec = new MemCacheDecorator(); memdec.SetComponent(cachedec); decd = memdec; var results = new Dictionary <string, string>(); decd.Load("loan", ref results); foreach (var a in results) { Console.WriteLine(a.Value); } }
//TODO: Cache sadece bir kere yaratılmalı, her seferinde değil. public static IDao <TModel> Cached <TModel>(this IDao <TModel> decorated) { IDao <TModel> decorator = new CacheDecorator <TModel>(decorated); return(decorator); }
public void OneDependancyIfNoImports() { CacheDecorator.TransformToCss(Less, FileName); Cache.Verify(c => c.Insert(CacheKey, It.Is <IEnumerable <string> >(i => i.Count() == 1), Css)); }
public void DependanciesContainsFileName() { CacheDecorator.TransformToCss(Less, FileName); Cache.Verify(c => c.Insert(CacheKey, It.Is <IEnumerable <string> >(i => i.Contains(FileName)), Css)); }
public void InsertsIfNotAlreadyCached() { CacheDecorator.TransformToCss(Less, FileName); Cache.Verify(c => c.Insert(CacheKey, It.IsAny <IEnumerable <string> >(), Css)); }