public async Task ConfigurationStoreGetAsync_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var store            = new ConfigurationCollectionStore(optionsBuilder);
            var configCollection = await store.CreateConfigurationAsync <ExampleConfigurationCollection>("Test");

            var resGuid = Guid.NewGuid();

            configCollection.Configuration.ExampleConfiguration.ISOPath0             = "TestEqual";
            configCollection.Configuration.ExampleConfiguration.FullscreenResolution =
                FullscreenResolution.Resolution1152X648;
            configCollection.Configuration.ExampleConfiguration.Fullscreen   = false;
            configCollection.Configuration.ExampleConfiguration.SomeResource = resGuid;
            await store.UpdateConfigurationAsync(configCollection);

            var retrievedConfig =
                await store.GetConfigurationAsync <ExampleConfigurationCollection>(configCollection.ValueCollection.Guid);

            Assert.NotNull(retrievedConfig);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.ISOPath0,
                         retrievedConfig.Configuration.ExampleConfiguration.ISOPath0);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.FullscreenResolution,
                         retrievedConfig.Configuration.ExampleConfiguration.FullscreenResolution);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.Fullscreen,
                         retrievedConfig.Configuration.ExampleConfiguration.Fullscreen);
            Assert.Equal(resGuid, configCollection.Configuration.ExampleConfiguration.SomeResource);
        }
        public void ConfigurationStoreSetIndividual_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var store            = new ConfigurationCollectionStore(optionsBuilder);
            var configCollection = store.CreateConfiguration <ExampleConfigurationCollection>("Test");

            configCollection.Configuration.ExampleConfiguration.ISOPath0             = "TestEqual";
            configCollection.Configuration.ExampleConfiguration.FullscreenResolution =
                FullscreenResolution.Resolution1152X648;
            configCollection.Configuration.ExampleConfiguration.Fullscreen = false;

            store.UpdateConfiguration(configCollection);
            configCollection.Configuration.ExampleConfiguration.FullscreenResolution =
                FullscreenResolution.Resolution1280X768;
            store.UpdateValue(configCollection.Configuration.ExampleConfiguration.Values["FullscreenResolution"]);

            var retrievedConfig =
                store.GetConfiguration <ExampleConfigurationCollection>(configCollection.ValueCollection.Guid);

            Assert.NotNull(retrievedConfig);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.ISOPath0,
                         retrievedConfig.Configuration.ExampleConfiguration.ISOPath0);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.FullscreenResolution,
                         retrievedConfig.Configuration.ExampleConfiguration.FullscreenResolution);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.Fullscreen,
                         retrievedConfig.Configuration.ExampleConfiguration.Fullscreen);
        }
        public async Task ConfigurationStoreSetAsync_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var store = new ConfigurationCollectionStore(optionsBuilder);
            await store.CreateConfigurationAsync <ExampleConfigurationCollection>("Test");
        }
        public void Compose(IModule module, Loader.IServiceRepository serviceContainer)
        {
            var    physicalFs       = serviceContainer.Get <IFileSystem>();
            var    contentDirectory = serviceContainer.Get <IContentDirectoryProvider>();
            string sqlitePath       = Path.Combine(contentDirectory.ApplicationData.FullName, "library.db");
            var    optionsBuilder   = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder
            .UseSqlite($"Data Source={sqlitePath}");

            using (var context = new DatabaseContext(optionsBuilder.Options))
            {
                var connection = context.Database.GetDbConnection();
                connection.Open();
                using (var command = connection.CreateCommand())
                {
                    command.CommandText = "PRAGMA journal_mode=WAL;";
                    command.ExecuteNonQuery();
                }
            }

            // game library dependency tree

            var gameRecordLibrary = new GameRecordLibrary(optionsBuilder);
            var gameLibrary       = new GameLibrary(gameRecordLibrary);
            var configStore       = new ConfigurationCollectionStore(optionsBuilder);

            var fileLibrary = new FileRecordLibrary(optionsBuilder);

            var appDataPath = physicalFs.ConvertPathFromInternal(contentDirectory.ApplicationData.FullName);
            var gameFs      = physicalFs.GetOrCreateSubFileSystem(appDataPath / "games");

            // Add default extensions
            gameLibrary.AddExtension <IGameFileExtensionProvider,
                                      IGameFileExtension>(new GameFileExtensionProvider(fileLibrary, gameFs));

            gameLibrary.AddExtension <IGameConfigurationExtensionProvider,
                                      IGameConfigurationExtension>(new GameConfigurationExtensionProvider(configStore));

            // register game library.
            serviceContainer.Get <IServiceRegistrationProvider>()
            .RegisterService <IGameLibrary>(gameLibrary);

            var pluginLibrary = new PluginConfigurationStore(optionsBuilder);

            // plugin config store

            serviceContainer.Get <IServiceRegistrationProvider>()
            .RegisterService <IPluginConfigurationStore>(pluginLibrary);

            // controller elements

            var inputStore = new ControllerElementMappingsStore(optionsBuilder);

            serviceContainer.Get <IServiceRegistrationProvider>()
            .RegisterService <IControllerElementMappingsStore>(inputStore);
        }
Example #5
0
        public void ConfigurationStore_CreateAndRetrieve_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var configStore = new ConfigurationCollectionStore(optionsBuilder);
            var gameGuid    = Guid.NewGuid();
            var config      = configStore
                              .CreateConfiguration <ExampleConfigurationCollection>("TestConfiguration");
            var retrieved = configStore.GetConfiguration <ExampleConfigurationCollection>
                                (config.ValueCollection.Guid);
        }
Example #6
0
        public void ConfigurationStore_Delete_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var configStore = new ConfigurationCollectionStore(optionsBuilder);
            var config      = configStore
                              .CreateConfiguration <ExampleConfigurationCollection>("TestConfiguration");
            // trigger an ensure of the ExampleConfiguration
            var getConfig = configStore.GetConfiguration <ExampleConfigurationCollection>(config.ValueCollection.Guid);

            Assert.NotNull(getConfig);
            configStore.DeleteConfiguration(config.ValueCollection.Guid);
            Assert.Null(configStore.GetConfiguration <ExampleConfigurationCollection>(config.ValueCollection.Guid));
        }
Example #7
0
        public void ConfigurationStore_CreateAndRetrieveEnsure_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var configStore = new ConfigurationCollectionStore(optionsBuilder);
            var gameGuid    = Guid.NewGuid();
            var config      = configStore
                              .CreateConfiguration <ExampleConfigurationCollection>("TestConfiguration");
            // trigger an ensure of the ExampleConfiguration
            var res = config.Configuration.ExampleConfiguration.FullscreenResolution;

            configStore.UpdateConfiguration(config);
            var retrieved = configStore.GetConfiguration <ExampleConfigurationCollection>
                                (config.ValueCollection.Guid);
        }
        public async Task ConfigurationStoreMultipleProfileIndividualAsync_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var store            = new ConfigurationCollectionStore(optionsBuilder);
            var configCollection = await store.CreateConfigurationAsync <ExampleConfigurationCollection>("Test");

            configCollection.Configuration.ExampleConfiguration.ISOPath0             = "TestEqual";
            configCollection.Configuration.ExampleConfiguration.FullscreenResolution =
                FullscreenResolution.Resolution1152X648;
            configCollection.Configuration.ExampleConfiguration.Fullscreen = false;

            var otherConfigCollection = store.CreateConfiguration <ExampleConfigurationCollection>("Test");

            otherConfigCollection.Configuration.ExampleConfiguration.ISOPath0             = "TestNotEqual";
            otherConfigCollection.Configuration.ExampleConfiguration.FullscreenResolution =
                FullscreenResolution.Resolution1280X1024;
            otherConfigCollection.Configuration.ExampleConfiguration.Fullscreen = true;

            await store.UpdateConfigurationAsync(configCollection);

            await store.UpdateConfigurationAsync(otherConfigCollection);

            var retrievedConfig =
                await store.GetConfigurationAsync <ExampleConfigurationCollection>(configCollection.ValueCollection.Guid);

            var newRetrievedConfig =
                await store.GetConfigurationAsync <ExampleConfigurationCollection>(otherConfigCollection.ValueCollection.Guid);

            Assert.NotNull(retrievedConfig);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.ISOPath0,
                         retrievedConfig.Configuration.ExampleConfiguration.ISOPath0);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.FullscreenResolution,
                         retrievedConfig.Configuration.ExampleConfiguration.FullscreenResolution);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.Fullscreen,
                         retrievedConfig.Configuration.ExampleConfiguration.Fullscreen);

            Assert.NotEqual(retrievedConfig.Configuration.ExampleConfiguration.FullscreenResolution,
                            newRetrievedConfig.Configuration.ExampleConfiguration.FullscreenResolution);
            Assert.NotEqual(retrievedConfig.Configuration.ExampleConfiguration.ISOPath0,
                            newRetrievedConfig.Configuration.ExampleConfiguration.ISOPath0);
            Assert.NotEqual(retrievedConfig.Configuration.ExampleConfiguration.Fullscreen,
                            newRetrievedConfig.Configuration.ExampleConfiguration.Fullscreen);
        }
Example #9
0
        public void ConfigurationStore_GetValue_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var configStore = new ConfigurationCollectionStore(optionsBuilder);
            var config      = configStore
                              .CreateConfiguration <ExampleConfigurationCollection>("TestConfiguration");
            var setValue = config.ValueCollection[config.Configuration.ExampleConfiguration.Descriptor,
                                                  nameof(config.Configuration.ExampleConfiguration.FullscreenResolution)];

            config.Configuration.ExampleConfiguration.FullscreenResolution
                = Configuration.FullscreenResolution.Resolution3840X2160;
            configStore.UpdateConfiguration(config);
            var getValue = configStore.GetValue(setValue.Guid);

            Assert.Equal(setValue.Value, (Configuration.FullscreenResolution)getValue.Value);
        }
        public void ConfigurationStoreGetDefault_Test()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var store            = new ConfigurationCollectionStore(optionsBuilder);
            var configCollection = store.CreateConfiguration <ExampleConfigurationCollection>("Test");
            var retrievedConfig  =
                store.GetConfiguration <ExampleConfigurationCollection>(configCollection.ValueCollection.Guid);

            Assert.NotNull(retrievedConfig);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.ISOPath0,
                         retrievedConfig.Configuration.ExampleConfiguration.ISOPath0);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.FullscreenResolution,
                         retrievedConfig.Configuration.ExampleConfiguration.FullscreenResolution);
            Assert.Equal(configCollection.Configuration.ExampleConfiguration.Fullscreen,
                         retrievedConfig.Configuration.ExampleConfiguration.Fullscreen);
        }
Example #11
0
        public async Task GameLibraryIntegrationConfigAsync_Test()
        {
            var path = new DirectoryInfo(Path.GetTempPath())
                       .CreateSubdirectory(Path.GetFileNameWithoutExtension(Path.GetTempFileName()));
            var fs  = new PhysicalFileSystem();
            var gfs = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(path.FullName));

            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var glib = new GameRecordLibrary(optionsBuilder);
            var ccs  = new ConfigurationCollectionStore(optionsBuilder);

            var gl = new GameLibrary(glib);

            gl.AddExtension <IGameConfigurationExtensionProvider, IGameConfigurationExtension>
                (new GameConfigurationExtensionProvider(ccs));
            var game = await gl.CreateGameAsync("NINTENDO_NES");

            var profile = await game.WithConfigurations()
                          .CreateNewProfileAsync <ExampleConfigurationCollection>("TestConfiguration", "test");

            var profileGuid = profile.CollectionGuid;

            Assert.NotNull(await game.WithConfigurations()
                           .GetProfileAsync <ExampleConfigurationCollection>("TestConfiguration", profileGuid));

            Assert.NotEmpty(game.WithConfigurations().GetProfileNames());

            profile.Configuration.ExampleConfiguration.FullscreenResolution =
                Configuration.FullscreenResolution.Resolution1600X1050;
            await gl.WithConfigurationLibrary().UpdateProfileAsync(profile);

            var newProfile = await game.WithConfigurations()
                             .GetProfileAsync <ExampleConfigurationCollection>("TestConfiguration", profileGuid);

            Assert.Equal(Configuration.FullscreenResolution.Resolution1600X1050,
                         newProfile.Configuration.ExampleConfiguration.FullscreenResolution);

            await game.WithConfigurations().DeleteProfileAsync("TestConfiguration", profileGuid);

            Assert.Empty(game.WithConfigurations().GetProfileNames());
        }
Example #12
0
        public async Task GameLibraryUnknownExtensionAsync_Test()
        {
            var path = new DirectoryInfo(Path.GetTempPath())
                       .CreateSubdirectory(Path.GetFileNameWithoutExtension(Path.GetTempFileName()));
            var fs  = new PhysicalFileSystem();
            var gfs = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(path.FullName));

            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var glib = new GameRecordLibrary(optionsBuilder);
            var ccs  = new ConfigurationCollectionStore(optionsBuilder);

            var gl = new GameLibrary(glib);

            Assert.Throws <KeyNotFoundException>(() => gl.GetExtension <IGameConfigurationExtensionProvider>());
            var game = await gl.CreateGameAsync("NINTENDO_NES");

            Assert.Throws <KeyNotFoundException>(() => game.GetExtension <IGameConfigurationExtension>());
        }
 public GameConfigurationExtensionProvider(ConfigurationCollectionStore collectionStore)
 {
     this.CollectionStore = collectionStore;
 }
Example #14
0
 public GameConfigurationExtension(IGameRecord gameRecord,
                                   ConfigurationCollectionStore collectionStore)
 {
     GameRecord = gameRecord;
     this.ConfigurationStore = collectionStore;
 }