public void Init() { _tempFolderName = Path.GetTempFileName(); File.Delete(_tempFolderName); var assembly = GetType().Assembly; foreach (var name in assembly.GetManifestResourceNames()) { if (name.StartsWith(DataPrefix)) { string text; using (var stream = assembly.GetManifestResourceStream(name)) { using (var reader = new StreamReader(stream)) text = reader.ReadToEnd(); } // Pro filtering var relativePath = name .Substring(DataPrefix.Length) .Replace(".txt", ":txt") .Replace(".recipe.xml", ":recipe:xml") .Replace('.', Path.DirectorySeparatorChar) .Replace(":txt", ".txt") .Replace(":recipe:xml", ".recipe.xml"); var targetPath = Path.Combine(_tempFolderName, relativePath); Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); using (var stream = new FileStream(targetPath, FileMode.Create)) { using (var writer = new StreamWriter(stream)) { writer.Write(text); } } } } var builder = new ContainerBuilder(); var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock<ICriticalErrorProvider>().Object); _folders = new ModuleFolders(new[] { _tempFolderName }, harvester); builder.RegisterType<RecipeManager>().As<IRecipeManager>(); builder.RegisterType<RecipeHarvester>().As<IRecipeHarvester>(); builder.RegisterType<RecipeStepExecutor>().As<IRecipeStepExecutor>(); builder.RegisterType<StubStepQueue>().As<IRecipeStepQueue>().InstancePerLifetimeScope(); builder.RegisterType<StubRecipeJournal>().As<IRecipeJournal>(); builder.RegisterType<StubRecipeScheduler>().As<IRecipeScheduler>(); builder.RegisterType<ExtensionManager>().As<IExtensionManager>(); builder.RegisterType<StubAppDataFolder>().As<IAppDataFolder>(); builder.RegisterType<StubClock>().As<IClock>(); builder.RegisterType<StubCacheManager>().As<ICacheManager>(); builder.RegisterType<StubParallelCacheContext>().As<IParallelCacheContext>(); builder.RegisterType<StubAsyncTokenProvider>().As<IAsyncTokenProvider>(); builder.RegisterInstance(_folders).As<IExtensionFolders>(); builder.RegisterInstance(new Mock<IRecipeExecuteEventHandler>().Object); builder.RegisterType<Environment.Extensions.ExtensionManagerTests.StubLoaders>().As<IExtensionLoader>(); builder.RegisterType<RecipeParser>().As<IRecipeParser>(); builder.RegisterType<StubWebSiteFolder>().As<IWebSiteFolder>(); builder.RegisterType<CustomRecipeHandler>().As<IRecipeHandler>(); _container = builder.Build(); _recipeManager = _container.Resolve<IRecipeManager>(); _recipeParser = _container.Resolve<IRecipeParser>(); _recipeHarvester = _container.Resolve<IRecipeHarvester>(); }
public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument() { var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock<ICriticalErrorProvider>().Object); IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester); var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1"); Assert.That(sample1.Id, Is.Not.Empty); Assert.That(sample1.Author, Is.EqualTo("Bertrand Le Roy")); // Sample1 }
public void NamesFromFoldersWithModuleTxtShouldFallBackToIdIfNotGiven() { var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock<ICriticalErrorProvider>().Object); IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester); var names = folders.AvailableExtensions().Select(d => d.Name); Assert.That(names.Count(), Is.EqualTo(5)); Assert.That(names, Has.Some.EqualTo("Le plug-in français")); // Sample1 Assert.That(names, Has.Some.EqualTo("This is another test.txt")); // Sample3 Assert.That(names, Has.Some.EqualTo("Sample4")); // Sample4 Assert.That(names, Has.Some.EqualTo("SampleSix")); // Sample6 Assert.That(names, Has.Some.EqualTo("Sample7")); // Sample7 }
public void IdsFromFoldersWithModuleTxtShouldBeListed() { var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock<ICriticalErrorProvider>().Object); IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester); var ids = folders.AvailableExtensions().Select(d => d.Id); Assert.That(ids.Count(), Is.EqualTo(5)); Assert.That(ids, Has.Some.EqualTo("Sample1")); // Sample1 - obviously Assert.That(ids, Has.Some.EqualTo("Sample3")); // Sample3 Assert.That(ids, Has.Some.EqualTo("Sample4")); // Sample4 Assert.That(ids, Has.Some.EqualTo("Sample6")); // Sample6 Assert.That(ids, Has.Some.EqualTo("Sample7")); // Sample7 }
public void PathsFromFoldersWithModuleTxtShouldFallBackAppropriatelyIfNotGiven() { var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock<ICriticalErrorProvider>().Object); IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester); var paths = folders.AvailableExtensions().Select(d => d.Path); Assert.That(paths.Count(), Is.EqualTo(5)); Assert.That(paths, Has.Some.EqualTo("Sample1")); // Sample1 - Id, Name invalid URL segment Assert.That(paths, Has.Some.EqualTo("Sample3")); // Sample3 - Id, Name invalid URL segment Assert.That(paths, Has.Some.EqualTo("ThisIs.Sample4")); // Sample4 - Path Assert.That(paths, Has.Some.EqualTo("SampleSix")); // Sample6 - Name, no Path Assert.That(paths, Has.Some.EqualTo("Sample7")); // Sample7 - Id, no Name or Path }