public PluginCompositeFileProvider(IPluginManager pluginManager, IFileProvider defaultFileProvider, string subfolder=null) { var pluginsFileProviders = new List<IFileProvider>(pluginManager.LoadedPlugins.Count()+1); pluginsFileProviders.Add(defaultFileProvider); pluginsFileProviders.AddRange(GetPluginFileProviders(pluginManager, subfolder)); _fileProvider = new CompositeFileProvider(pluginsFileProviders); }
public void GetFileInfo_ReturnsNotFoundFileInfo_IfFileDoesNotExist() { // Arrange var provider = new CompositeFileProvider(new MockFileProvider(new MockFileInfo("DoesExist.txt"))); // Act var fileInfo = provider.GetFileInfo("DoesNotExist.txt"); // Assert Assert.NotNull(fileInfo); Assert.False(fileInfo.Exists); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); #region snippet1 var physicalProvider = _hostingEnvironment.ContentRootFileProvider; var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); #endregion }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); var physicalProvider = _hostingEnvironment.ContentRootFileProvider; var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); // choose one provider to use for the app and register it //services.AddSingleton<IFileProvider>(physicalProvider); //services.AddSingleton<IFileProvider>(embeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); }
/// <summary> /// Initializes a new instance of <see cref="DefaultRazorViewEngineFileProviderAccessor"/>. /// </summary> /// <param name="optionsAccessor">Accessor to <see cref="RazorViewEngineOptions"/>.</param> public DefaultRazorViewEngineFileProviderAccessor(IOptions <RazorViewEngineOptions> optionsAccessor) { var fileProviders = optionsAccessor.Value.FileProviders; if (fileProviders.Count == 1) { FileProvider = fileProviders[0]; } else { FileProvider = new CompositeFileProvider(fileProviders); } }
public void GetDirectoryContents_ReturnsNonExistingEmptySequence_IfNoFileProviderSpecified() { // Arrange var provider = new CompositeFileProvider(); // Act var files = provider.GetDirectoryContents(string.Empty); // Assert Assert.NotNull(files); Assert.False(files.Exists); Assert.Empty(files); }
public void GetDirectoryContents_ReturnsNonExistingEmptySequence_IfResourcesDoNotExist() { // Arrange var provider = new CompositeFileProvider(); // Act var files = provider.GetDirectoryContents("DoesNotExist"); // Assert Assert.NotNull(files); Assert.False(files.Exists); Assert.Empty(files); }
public void Watch_ReturnsNoopChangeToken_IfNoWatcherReturnedByFileProviders() { // Arrange var provider = new CompositeFileProvider( new MockFileProvider()); // Act var changeToken = provider.Watch("DoesntExist*Pattern"); // Assert Assert.NotNull(changeToken); Assert.False(changeToken.ActiveChangeCallbacks); }
public ResourceLoader(WebControlsOptions options) { this.Options = options; List <IFileProvider> embeddedFileProviders = new List <IFileProvider>(); foreach (var controlLibrary in this.Options.ControlLibraries) { embeddedFileProviders.Add(new EmbeddedFileProvider(controlLibrary)); } this.FileProvider = new CompositeFileProvider(embeddedFileProviders); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); var physicalProvider = _hostingEnvironment.ContentRootFileProvider; var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); // choose one provider to use for the app and register it //services.AddSingleton<IFileProvider>(physicalProvider); //services.AddSingleton<IFileProvider>(embeddedProvider); services.AddSingleton<IFileProvider>(compositeProvider); }
public ModuleRazorFileProvider(string rootPath, params string[] pluginHosts) { if (_paths != null) { return; } lock (_synLock) { if (_paths == null) { _paths = new Dictionary <string, string>(); var replacePath = rootPath.Replace("\\", "/"); foreach (var pluginHost in pluginHosts) { Directory.GetFiles(Path.Combine(rootPath, pluginHost), "*" + RazorViewEngine.ViewExtension, SearchOption.AllDirectories) .Select(x => x.Replace("\\", "/")) .ToList() .ForEach(x => { _paths.Add(x.Replace(replacePath, string.Empty), x); }); } } var roots = new HashSet <string>(); foreach (var path in _paths.Values.Where(p => p.Contains("/Pages/") && !p.StartsWith("/Pages/"))) { roots.Add(path.Substring(0, path.IndexOf("/Pages/"))); } if (roots.Count > 0) { _pagesFileProvider = new CompositeFileProvider(roots.Select(r => new PhysicalFileProvider(r))); } } if (_pluginHosts == null) { lock (_synLock) { if (_pluginHosts == null) { _pluginHosts = pluginHosts; } } } }
public void ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); #region snippet1 var physicalProvider = _env.ContentRootFileProvider; var manifestEmbeddedProvider = new ManifestEmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, manifestEmbeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); #endregion }
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); #region snippet1 var physicalProvider = _env.ContentRootFileProvider; var manifestEmbeddedProvider = new ManifestEmbeddedFileProvider(typeof(Program).Assembly); var compositeProvider = new CompositeFileProvider(physicalProvider, manifestEmbeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); #endregion }
public static PasswordlessLoginBuilder AddCustomEmailTemplates(this PasswordlessLoginBuilder builder, string templateOverrideFolder, CultureInfo[] supportedCultures = null) { if (!Directory.Exists(templateOverrideFolder ?? throw new ArgumentNullException(nameof(templateOverrideFolder)))) { throw new Exception($"Custom email template folder '{templateOverrideFolder}' does not exist."); } IFileProvider templateFileProvider = new CompositeFileProvider( new PhysicalFileProvider(templateOverrideFolder), TemplateFileProvider ); return(builder.AddEmailTemplates(templateFileProvider, supportedCultures, true)); }
/// <summary> /// Uses the MVC. /// </summary> /// <returns></returns> protected virtual IModule UseMvc() { var assembly = GetType().GetTypeInfo().Assembly; var assemblyPath = new Uri(assembly.CodeBase).LocalPath; MvcBuilder.AddApplicationPart(Assembly.Load(new AssemblyName(Path.GetFileNameWithoutExtension(assemblyPath)))); var fileProvider = new CompositeFileProvider(new EmbeddedFileProvider(assembly)); ServiceCollection.Configure <RazorViewEngineOptions>(options => { options.FileProviders.Add(fileProvider); }); return(this); }
public void Watch_CompositeChangeToken_RegisterChangeCallbackCorrectlyTransmitsAllParameters() { // Arrange var firstChangeToken = new MockChangeToken { ActiveChangeCallbacks = true }; var secondChangeToken = new MockChangeToken(); var thirdChangeToken = new MockChangeToken { ActiveChangeCallbacks = true }; var provider = new CompositeFileProvider( new MockFileProvider( new KeyValuePair <string, IChangeToken>("pattern", firstChangeToken), new KeyValuePair <string, IChangeToken>("2ndpattern", secondChangeToken)), new MockFileProvider(new KeyValuePair <string, IChangeToken>("pattern", thirdChangeToken))); // Act var changeToken = provider.Watch("pattern"); // Assert Assert.NotNull(changeToken); Assert.True(changeToken.ActiveChangeCallbacks); Assert.False(changeToken.HasChanged); // Register callback Assert.Equal(0, firstChangeToken.Callbacks.Count); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(0, thirdChangeToken.Callbacks.Count); var hasBeenCalled = false; object result = null; object state = new object(); changeToken.RegisterChangeCallback(item => { hasBeenCalled = true; result = item; }, state); Assert.Equal(1, firstChangeToken.Callbacks.Count); Assert.Same(state, firstChangeToken.Callbacks[0].Item2); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(1, thirdChangeToken.Callbacks.Count); Assert.Same(state, thirdChangeToken.Callbacks[0].Item2); var expectedResult = new object(); firstChangeToken.RaiseCallback(expectedResult); Assert.True(hasBeenCalled); Assert.Equal(expectedResult, result); }
public void Test1() { //Microsoft.Extensions.FileProviders.Composite.CompositeDirectoryContents // Microsoft.Extensions.FileProviders.NotFoundDirectoryContents //Microsoft.Extensions.FileProviders.Internal.PhysicalDirectoryContents //Microsoft.Extensions.FileProviders.PhysicalFileProvider var sss1 = new EmbeddedFileProvider(typeof(UnitTest1).Assembly); //var sss2 = new ManifestEmbeddedFileProvider(typeof(UnitTest1).Assembly); var sss3 = new PhysicalFileProvider(@"D:\Users\mccj\Source\Repos\FileManager\FileManager\"); var sss4 = new NullFileProvider(); var sss5 = new FileStorage.StoreFileProvider(new FileStorage.Standard.PhysicalFileSystemStore(@"D:\Users\mccj\Source\Repos\FileManager\FileManager\")); var sss6 = new FileStorage.StoreFileProvider(new FileStorage.Standard.FileSystemStore(@"D:\Users\mccj\Source\Repos\FileManager\FileManager\")); var sss7 = new CompositeFileProvider(sss1, sss3, sss4, sss5, sss6); var sdfsd = sss4.Watch(""); var rr = sss4.GetFileInfo(""); var sss11 = sss3.GetFileInfo("aaaa"); var sssd11 = sss5.GetFileInfo("aaaa"); var sssc11 = sss6.GetFileInfo("aaaa"); var sss113 = sss3.GetFileInfo("FileProviderStore"); var sssd113 = sss5.GetFileInfo("FileProviderStore"); var sssd213 = sss6.GetFileInfo("FileProviderStore"); var sss112 = sss3.GetFileInfo("ApplicationBuilderExtensions.cs"); var sssd112 = sss5.GetFileInfo("ApplicationBuilderExtensions.cs"); var sssc112 = sss6.GetFileInfo("ApplicationBuilderExtensions.cs"); var sss = sss3.GetDirectoryContents(""); var sssd = sss5.GetDirectoryContents(""); var sssc = sss6.GetDirectoryContents(""); var sss75 = sss3.GetDirectoryContents("aaaaa"); var sssd5 = sss5.GetDirectoryContents("aaaaa"); var sssdc = sss6.GetDirectoryContents("aaaaa"); var sss76 = sss3.GetDirectoryContents("FileProviderStore"); var sssd6 = sss5.GetDirectoryContents("FileProviderStore"); var sssdcc = sss6.GetDirectoryContents("FileProviderStore"); var sdsdasd = sss7.GetDirectoryContents(""); //sss6.GetDirectoryContents(""); //sss6.GetFileInfo(""); }
public void Watch_CompositeChangeToken_RegisterChangeCallbackReturnsACompositeDisposable() { // Arrange var firstChangeToken = new MockChangeToken { ActiveChangeCallbacks = true }; var secondChangeToken = new MockChangeToken(); var thirdChangeToken = new MockChangeToken { ActiveChangeCallbacks = false }; var provider = new CompositeFileProvider( new MockFileProvider( new KeyValuePair <string, IChangeToken>("pattern", firstChangeToken), new KeyValuePair <string, IChangeToken>("2ndpattern", secondChangeToken)), new MockFileProvider(new KeyValuePair <string, IChangeToken>("pattern", thirdChangeToken))); // Act var changeToken = provider.Watch("pattern"); // Assert Assert.NotNull(changeToken); Assert.True(changeToken.ActiveChangeCallbacks); Assert.False(changeToken.HasChanged); // Register callback Assert.Equal(0, firstChangeToken.Callbacks.Count); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(0, thirdChangeToken.Callbacks.Count); object result = null; object state = new object(); var disposable = changeToken.RegisterChangeCallback(item => { result = item; }, state); Assert.Equal(1, firstChangeToken.Callbacks.Count); Assert.False(firstChangeToken.Callbacks[0].Item3.Disposed); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(1, thirdChangeToken.Callbacks.Count); Assert.False(thirdChangeToken.Callbacks[0].Item3.Disposed); disposable.Dispose(); Assert.Equal(1, firstChangeToken.Callbacks.Count); Assert.True(firstChangeToken.Callbacks[0].Item3.Disposed); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(1, thirdChangeToken.Callbacks.Count); Assert.True(thirdChangeToken.Callbacks[0].Item3.Disposed); }
/// <summary> /// Initializes a new instance of <see cref="ShapeTemplateFileProviderAccessor"/>. /// </summary> /// <param name="optionsAccessor">Accessor to <see cref="FluidViewOptions"/>.</param> public ShapeTemplateFileProviderAccessor(IOptions <ShapeTemplateOptions> optionsAccessor) { var fileProviders = optionsAccessor.Value.FileProviders; if (fileProviders.Count == 0) { FileProvider = new NullFileProvider(); } else if (fileProviders.Count == 1) { FileProvider = fileProviders[0]; } else { FileProvider = new CompositeFileProvider(fileProviders); } }
/// <summary> /// Initializes a new instance of <see cref="LiquidViewFileProviderAccessor"/>. /// </summary> /// <param name="optionsAccessor">Accessor to <see cref="LiquidViewOptions"/>.</param> public LiquidViewFileProviderAccessor(IOptions <LiquidViewOptions> optionsAccessor) { var fileProviders = optionsAccessor.Value.FileProviders; if (fileProviders.Count == 0) { FileProvider = new NullFileProvider(); } else if (fileProviders.Count == 1) { FileProvider = fileProviders[0]; } else { FileProvider = new CompositeFileProvider(fileProviders); } }
public ExtensionsFileProviderAggregator(ILoggerFactory loggerFactory, IEnumerable <IExtension> extensions, IFileProvider provdier) { this.loggerFactory = loggerFactory; var extensionProviders = new List <IFileProvider>(); foreach (var extension in extensions) { extensionProviders.Add(new ExtensionsFileProvider(loggerFactory, extension)); } //extensionProviders.Reverse(); this.Composite = new CompositeFileProvider(new List <IFileProvider>(extensionProviders) { provdier }); }
private IFileProvider CreateHybridProvider() { IFileProvider fileProvider = new InternalVirtualFileProvider(_options); if (_options.FileSets.PhysicalPaths.Any()) { var fileProviders = _options.FileSets.PhysicalPaths .Select(rootPath => new PhysicalFileProvider(rootPath)) .Cast <IFileProvider>() .ToList(); fileProviders.Add(fileProvider); fileProvider = new CompositeFileProvider(fileProviders); } return(fileProvider); }
public static void AddFileStorage(this IServiceCollection services, IHostingEnvironment hostingEnvironment) { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (hostingEnvironment == null) { throw new ArgumentNullException(nameof(hostingEnvironment)); } var physicalProvider = hostingEnvironment.ContentRootFileProvider; var wwwroot = new PhysicalFileProvider(hostingEnvironment.WebRootPath); var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(wwwroot, physicalProvider, embeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); }
public static void AddServices(this IServiceCollection services) { services.AddSingleton <IActionContextAccessor, ActionContextAccessor>(); services.AddScoped <IUrlHelper>(factory => { var actionContext = factory.GetService <IActionContextAccessor>() .ActionContext; return(new UrlHelper(actionContext)); }); var physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()); var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); services.AddScoped <IUnitOfWork, UnitOfWork>(); services.AddScoped(typeof(ICoreService <>), typeof(CoreService <>)); }
public void ConfigureServices(IServiceCollection services) { //var cronJobs = new List<CronMethod>(); //Configuration.GetSection("CronJob").Bind(cronJobs); //services.AddSingleton(cronJobs); services.Configure <List <CronMethod> >(Configuration.GetSection("CronJob")); services.AddTransient <IBackgroundRepository, BackgroundRepository>(); services.UseQuartz(typeof(BackgroundJob)); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); var physicalProvider = _hostingEnvironment.ContentRootFileProvider; var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext <CoreContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddMvc(options => { options.OutputFormatters.Remove(new XmlDataContractSerializerOutputFormatter()); }); // AutoMapper Auto Scan this Assembly for Configuration Files services.AddAutoMapper(); services.AddScoped <IUnitOfWork, CoreContext>(); services.AddScoped(typeof(ICoreService <>), typeof(CoreService <>)); services.AddScoped <IUploadedFileRepository, UploadedFileRepository>(); //FileProvider var physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()); var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); // Swagger services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My APIs", Version = "v1" }); }); //services.AddAuthentication(options => // { // options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; // options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; // }) // .AddJwtBearer(o => // { // o.Audience = "api1"; // o.Authority = "http://localhost:5000"; // o.RequireHttpsMetadata = false; // }); }
public override void Run() { //物理文件 string root = AppDomain.CurrentDomain.BaseDirectory; IFileProvider fileProvider1 = new PhysicalFileProvider(root); //嵌入文件 IFileProvider fileProvider2 = new EmbeddedFileProvider(Assembly.GetExecutingAssembly()); //组合 IFileProvider fileProvider = new CompositeFileProvider(fileProvider1, fileProvider2); IDirectoryContents contents = fileProvider.GetDirectoryContents("/"); foreach (var item in contents) { Stream stream = item.CreateReadStream(); Console.WriteLine(item.Name); } }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { IFileProvider assemblyFile = new ManifestEmbeddedFileProvider(Assembly.GetEntryAssembly()); IFileProvider physicalFile = new PhysicalFileProvider(Directory.GetCurrentDirectory()); IFileProvider combineProvider = new CompositeFileProvider(assemblyFile, physicalFile); services.AddSingleton <IFileProvider>(combineProvider); // var contents = fileProvider.GetDirectoryContents(); services.Configure <CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
public void ConfigureServices(IServiceCollection services) { services.Configure <CookiePolicyOptions>(options => { options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); #region snippet1 var physicalProvider = _env.ContentRootFileProvider; var manifestEmbeddedProvider = new ManifestEmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, manifestEmbeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); #endregion }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddDbContext <SklepKomputerowyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SklepKomputerowyContext"))); services.Configure <RequestLocalizationOptions>( options => { options.DefaultRequestCulture = new RequestCulture(culture: "pl-PL", uiCulture: "pl-PL"); }); services.AddDirectoryBrowser(); IFileProvider physicalProvider = new PhysicalFileProvider(@"D:/Users/Micha³ Jaœkiewicz/Desktop/Praktyki projekt/sklepKomputerowy"); var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); // choose one provider to use for the app and register it services.AddSingleton <IFileProvider>(compositeProvider); services.AddRazorPages(); services.AddTransient <FilterZamowienieServices>(); }
public static void UseFrontend(this IApplicationBuilder app) { var environment = app.ApplicationServices.GetRequiredService <IWebHostEnvironment>(); var fileProvider = environment.WebRootFileProvider; if (environment.IsProduction()) { fileProvider = new CompositeFileProvider(fileProvider, new PhysicalFileProvider(Path.Combine(environment.WebRootPath, "build"))); } app.UseMiddleware <NotifoMiddleware>(); app.UseWhen(c => c.IsSpaFile(), builder => { builder.UseMiddleware <SetupMiddleware>(); }); app.UseWhen(c => c.IsSpaFile() || c.IsHtmlPath(), builder => { builder.UseHtmlTransform(); }); app.UseNotifoStaticFiles(fileProvider); if (environment.IsProduction()) { // Try static files again tó serve index.html. app.UsePathOverride("/index.html"); app.UseNotifoStaticFiles(fileProvider); } else { // Forward requests to SPA development server. app.UseSpa(builder => { builder.UseProxyToSpaDevelopmentServer("https://localhost:3002"); }); } }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext <HexaDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient); //register AutoMapper services.RegisterMapper(); services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); }); var physicalProvider = _hostingEnvironment.ContentRootFileProvider; var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); services.AddSingleton <IFileProvider>(compositeProvider); // register dependancy injection services.RegisterServices(); }
public ModuleProjectRazorFileProvider(string rootPath) { if (_paths != null) { return; } lock (_synLock) { if (_paths == null) { var path = Path.Combine(rootPath, MappingFileFolder, MappingFileName); if (File.Exists(path)) { var paths = File.ReadAllLines(path) .Select(x => x.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries)) .Where(x => x.Length == 2).ToDictionary(x => x[1].Replace('\\', '/'), x => x[0].Replace('\\', '/')); _paths = new Dictionary <string, string>(paths); } else { _paths = new Dictionary <string, string>(); } } var roots = new HashSet <string>(); foreach (var path in _paths.Values.Where(p => p.Contains("/Pages/") && !p.StartsWith("/Pages/"))) { roots.Add(path.Substring(0, path.IndexOf("/Pages/"))); } if (roots.Count > 0) { _pagesFileProvider = new CompositeFileProvider(roots.Select(r => new PhysicalFileProvider(r))); } } }
public void GetFileInfo_ReturnsTheFirstFoundFileInfo() { // Arrange var fileName = "File1"; var expectedFileInfo = new MockFileInfo(fileName); var provider = new CompositeFileProvider( new MockFileProvider( new MockFileInfo("FileA"), new MockFileInfo("FileB")), new MockFileProvider( expectedFileInfo, new MockFileInfo("File2")), new MockFileProvider( new MockFileInfo(fileName), new MockFileInfo("File3"))); // Act var fileInfo = provider.GetFileInfo(fileName); // Assert Assert.Same(expectedFileInfo, fileInfo); }
public void GetDirectoryContents_ReturnsCombinaitionOFFiles_WhenSomeFileProviderRetunsNoContent() { // Arrange var folderAFile1 = new MockFileInfo("FolderA/File1"); var folderAFile2 = new MockFileInfo("FolderA/File2"); var folderAFile2Bis = new MockFileInfo("FolderA/File2"); var folderBFile1 = new MockFileInfo("FolderB/File1"); var folderBFile2 = new MockFileInfo("FolderB/File2"); var folderCFile3 = new MockFileInfo("FolderC/File3"); var provider = new CompositeFileProvider( new MockFileProvider( folderAFile1, folderAFile2, folderBFile2), new MockFileProvider( folderAFile2Bis, folderBFile1, folderCFile3)); // Act var files = provider.GetDirectoryContents("FolderC/"); // Assert Assert.NotNull(files); Assert.True(files.Exists); Assert.Collection(files.OrderBy(f => f.Name, StringComparer.Ordinal), file => Assert.Equal(folderCFile3, file)); }
public void Watch_ReturnsNoopChangeToken_IfNoFileProviderSpecified() { // Arrange var provider = new CompositeFileProvider(); // Act var changeToken = provider.Watch("DoesNotExist*Pattern"); // Assert Assert.NotNull(changeToken); Assert.False(changeToken.ActiveChangeCallbacks); }
public void Watch_CompositeChangeToken_HasChangedIsCorrectlyComputed() { // Arrange var firstChangeToken = new MockChangeToken(); var secondChangeToken = new MockChangeToken(); var thirdChangeToken = new MockChangeToken(); var provider = new CompositeFileProvider( new MockFileProvider( new KeyValuePair<string, IChangeToken>("pattern", firstChangeToken), new KeyValuePair<string, IChangeToken>("2ndpattern", secondChangeToken)), new MockFileProvider(new KeyValuePair<string, IChangeToken>("pattern", thirdChangeToken))); // Act var changeToken = provider.Watch("pattern"); // Assert Assert.NotNull(changeToken); Assert.False(changeToken.ActiveChangeCallbacks); Assert.False(changeToken.HasChanged); // HasChanged update // first change token firstChangeToken.HasChanged = true; Assert.True(changeToken.HasChanged); firstChangeToken.HasChanged = false; // second change token secondChangeToken.HasChanged = true; Assert.False(changeToken.HasChanged); secondChangeToken.HasChanged = false; // third change token thirdChangeToken.HasChanged = true; Assert.True(changeToken.HasChanged); }
public void Watch_CompositeChangeToken_RegisterChangeCallbackCorrectlyTransmitsAllParameters() { // Arrange var firstChangeToken = new MockChangeToken { ActiveChangeCallbacks = true }; var secondChangeToken = new MockChangeToken(); var thirdChangeToken = new MockChangeToken { ActiveChangeCallbacks = true }; var provider = new CompositeFileProvider( new MockFileProvider( new KeyValuePair<string, IChangeToken>("pattern", firstChangeToken), new KeyValuePair<string, IChangeToken>("2ndpattern", secondChangeToken)), new MockFileProvider(new KeyValuePair<string, IChangeToken>("pattern", thirdChangeToken))); // Act var changeToken = provider.Watch("pattern"); // Assert Assert.NotNull(changeToken); Assert.True(changeToken.ActiveChangeCallbacks); Assert.False(changeToken.HasChanged); // Register callback Assert.Equal(0, firstChangeToken.Callbacks.Count); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(0, thirdChangeToken.Callbacks.Count); var hasBeenCalled = false; object result = null; object state = new object(); changeToken.RegisterChangeCallback(item => { hasBeenCalled = true; result = item; }, state); Assert.Equal(1, firstChangeToken.Callbacks.Count); Assert.Same(state, firstChangeToken.Callbacks[0].Item2); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(1, thirdChangeToken.Callbacks.Count); Assert.Same(state, thirdChangeToken.Callbacks[0].Item2); var expectedResult = new object(); firstChangeToken.RaiseCallback(expectedResult); Assert.True(hasBeenCalled); Assert.Equal(expectedResult, result); }
public void GetDirectoryContents_ReturnsCombinaisionOFFiles() { // Arrange var file1 = new MockFileInfo("File1"); var file2 = new MockFileInfo("File2"); var file2Bis = new MockFileInfo("File2"); var file3 = new MockFileInfo("File3"); var provider = new CompositeFileProvider( new MockFileProvider( file1, file2), new MockFileProvider( file2Bis, file3)); // Act var files = provider.GetDirectoryContents(string.Empty); // Assert Assert.NotNull(files); Assert.True(files.Exists); Assert.Collection(files.OrderBy(f => f.Name, StringComparer.Ordinal), file => Assert.Same(file1, file), file => Assert.Same(file2, file), file => Assert.Same(file3, file)); }
public void Watch_CompositeChangeToken_RegisterChangeCallbackReturnsACompositeDisposable() { // Arrange var firstChangeToken = new MockChangeToken { ActiveChangeCallbacks = true }; var secondChangeToken = new MockChangeToken(); var thirdChangeToken = new MockChangeToken { ActiveChangeCallbacks = false }; var provider = new CompositeFileProvider( new MockFileProvider( new KeyValuePair<string, IChangeToken>("pattern", firstChangeToken), new KeyValuePair<string, IChangeToken>("2ndpattern", secondChangeToken)), new MockFileProvider(new KeyValuePair<string, IChangeToken>("pattern", thirdChangeToken))); // Act var changeToken = provider.Watch("pattern"); // Assert Assert.NotNull(changeToken); Assert.True(changeToken.ActiveChangeCallbacks); Assert.False(changeToken.HasChanged); // Register callback Assert.Equal(0, firstChangeToken.Callbacks.Count); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(0, thirdChangeToken.Callbacks.Count); object result = null; object state = new object(); var disposable = changeToken.RegisterChangeCallback(item => { result = item; }, state); Assert.Equal(1, firstChangeToken.Callbacks.Count); Assert.False(firstChangeToken.Callbacks[0].Item3.Disposed); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(1, thirdChangeToken.Callbacks.Count); Assert.False(thirdChangeToken.Callbacks[0].Item3.Disposed); disposable.Dispose(); Assert.Equal(1, firstChangeToken.Callbacks.Count); Assert.True(firstChangeToken.Callbacks[0].Item3.Disposed); Assert.Equal(0, secondChangeToken.Callbacks.Count); Assert.Equal(1, thirdChangeToken.Callbacks.Count); Assert.True(thirdChangeToken.Callbacks[0].Item3.Disposed); }