public void TestInitializationFromScratch() { CoreServices.Init(); App.Init(); Assert.AreEqual(homePath, App.Current.HomeDir); Assert.AreEqual(homePath, App.Current.ConfigDir); Assert.AreEqual(homePath, Directory.GetParent(App.Current.DBDir).ToString()); Assert.AreEqual(homePath, Directory.GetParent(App.Current.PlayListDir).ToString()); Assert.AreEqual(homePath, Directory.GetParent(App.Current.SnapshotsDir).ToString()); Assert.AreEqual(homePath, Directory.GetParent(App.Current.VideosDir).ToString()); AddinsManager.Initialize(App.Current.PluginsConfigDir, App.Current.PluginsDir); App.Current.DrawingToolkit = drawingToolkitMock.Object; App.Current.MultimediaToolkit = multimediaToolkitMock.Object; App.Current.GUIToolkit = guiToolkitMock.Object; App.Current.LicenseManager = mockLicenseManager.Object; App.Current.LicenseLimitationsService = mockLicenseLimitationService.Object; App.Current.PreviewService = new Mock <IPreviewService> ().Object; CoreServices.Start(App.Current.GUIToolkit, App.Current.MultimediaToolkit); // Check database dirs Assert.AreEqual(Path.Combine(homePath, "db"), Directory.GetParent(App.Current.TeamsDir).ToString()); Assert.AreEqual(Path.Combine(homePath, "db"), Directory.GetParent(App.Current.AnalysisDir).ToString()); Assert.AreEqual(1, App.Current.DatabaseManager.Databases.Count); // Check templates and db are initialized Assert.AreEqual(2, App.Current.TeamTemplatesProvider.Templates.Count); Assert.AreEqual(1, App.Current.CategoriesTemplatesProvider.Templates.Count); Assert.AreEqual(0, App.Current.DatabaseManager.ActiveDB.Count <LMProject> ()); CoreServices.Stop(); // Simulate an application restart CoreServices.Init(); CoreServices.Start(App.Current.GUIToolkit, App.Current.MultimediaToolkit); Assert.AreEqual(2, App.Current.TeamTemplatesProvider.Templates.Count); Assert.AreEqual(1, App.Current.CategoriesTemplatesProvider.Templates.Count); Assert.AreEqual(0, App.Current.DatabaseManager.ActiveDB.Count <LMProject> ()); }
public async Task TestGameAnalysis() { Guid projectID; App.Init(); CoreServices.Init(); App.Current.DependencyRegistry.Register <VAS.DB.IFileStorage, FileStorage> (0); AddinsManager.Initialize(App.Current.PluginsConfigDir, App.Current.PluginsDir); App.Current.DrawingToolkit = drawingToolkitMock.Object; App.Current.MultimediaToolkit = multimediaToolkitMock.Object; App.Current.GUIToolkit = guiToolkitMock.Object; App.Current.Dialogs = mockDialogs.Object; App.Current.Config.AutoSave = true; App.Current.LicenseManager = mockLicenseManager.Object; App.Current.LicenseLimitationsService = mockLicenseLimitationService.Object; App.Current.PreviewService = new Mock <IPreviewService> ().Object; CoreServices.Start(App.Current.GUIToolkit, App.Current.MultimediaToolkit); // Start importing templates App.Current.TeamTemplatesProvider.Save( App.Current.TeamTemplatesProvider.LoadFile(Utils.SaveResource("spain.ltt", tmpPath))); App.Current.TeamTemplatesProvider.Save( App.Current.TeamTemplatesProvider.LoadFile(Utils.SaveResource("france.ltt", tmpPath))); App.Current.CategoriesTemplatesProvider.Save( App.Current.CategoriesTemplatesProvider.LoadFile(Utils.SaveResource("basket.lct", tmpPath))); Assert.AreEqual(4, App.Current.TeamTemplatesProvider.Templates.Count); Assert.AreEqual(2, App.Current.CategoriesTemplatesProvider.Templates.Count); // Create a new project and open it LMProject p = CreateProject(); projectID = p.ID; LMProjectAnalysisVM viewModel; viewModel = new LMProjectAnalysisVM(); IVideoPlayerController playerController = new Mock <IVideoPlayerController> ().Object; viewModel.Project = new LMProjectVM { Model = p }; viewModel.VideoPlayer = new VideoPlayerVM { Player = playerController }; eventsController.SetViewModel(viewModel); // Do controllers start in here since the EventBroker is instantiante again in the test await eventsController.Start(); toolsManager.Start(); App.Current.DatabaseManager.ActiveDB.Store <LMProject> (p, true); // Tag some events Assert.AreEqual(0, p.Timeline.Count); AddEvent(p, 5, 3000, 3050, 3025); Assert.AreEqual(1, p.Timeline.Count); LMProject savedP = App.Current.DatabaseManager.ActiveDB.Retrieve <LMProject> (p.ID); Assert.AreEqual(1, savedP.Timeline.Count); AddEvent(p, 6, 3000, 3050, 3025); AddEvent(p, 7, 3000, 3050, 3025); AddEvent(p, 8, 3000, 3050, 3025); AddEvent(p, 5, 3000, 3050, 3025); Assert.AreEqual(5, p.Timeline.Count); savedP = App.Current.DatabaseManager.ActiveDB.Retrieve <LMProject> (p.ID); Assert.AreEqual(5, savedP.Timeline.Count); // Delete some events var events = new List <TimelineEvent> { p.Timeline [0], p.Timeline [1] }; await App.Current.EventsBroker.Publish <EventsDeletedEvent> ( new EventsDeletedEvent { TimelineEvents = events.Select(e => new TimelineEventVM() { Model = e }) } ); Assert.AreEqual(3, p.Timeline.Count); savedP = App.Current.DatabaseManager.ActiveDB.Retrieve <LMProject> (p.ID); Assert.AreEqual(3, savedP.Timeline.Count); // Now create a new LMProject with the same templates LMProject newProject = CreateProject(); viewModel.Project.Model = newProject; App.Current.DatabaseManager.ActiveDB.Store <LMProject> (newProject); Assert.AreEqual(2, App.Current.DatabaseManager.ActiveDB.Count <LMProject> ()); // Add some events and than remove it from the DB AddEvent(newProject, 6, 3000, 3050, 3025); AddEvent(newProject, 7, 3000, 3050, 3025); AddEvent(newProject, 8, 3000, 3050, 3025); AddEvent(newProject, 5, 3000, 3050, 3025); App.Current.DatabaseManager.ActiveDB.Delete <LMProject> (newProject); // Reopen the old project savedP = App.Current.DatabaseManager.ActiveDB.RetrieveAll <LMProject> ().FirstOrDefault(pr => pr.ID == projectID); viewModel.Project.Model = savedP; await App.Current.EventsBroker.Publish <SaveProjectEvent> ( new SaveProjectEvent { Project = savedP, ProjectType = ProjectType.FileProject } ); // Export this project to a new file savedP = App.Current.DatabaseManager.ActiveDB.Retrieve <LMProject> (projectID); Assert.AreEqual(3, savedP.Timeline.Count); Assert.AreEqual(12, savedP.LocalTeamTemplate.List.Count); Assert.AreEqual(12, savedP.VisitorTeamTemplate.List.Count); string tmpFile = Path.Combine(tmpPath, "longomatch.lgm"); mockDialogs.Setup(g => g.SaveFile(It.IsAny <string> (), It.IsAny <string> (), It.IsAny <string> (), It.IsAny <string> (), It.IsAny <string []> ())).Returns(tmpFile); await App.Current.EventsBroker.Publish <ExportProjectEvent> (new ExportProjectEvent { Project = p }); Assert.IsTrue(File.Exists(tmpFile)); savedP = Project.Import(tmpFile) as LMProject; Assert.IsNotNull(savedP); // Import a new project LongoMatchImporter importPlugin = new LongoMatchImporter(); ProjectImporter importer = new ProjectImporter { Description = importPlugin.Description + " test ", ImportFunction = new Func <Project> (importPlugin.ImportProject), FilterName = importPlugin.FilterName, Extensions = importPlugin.FilterExtensions, NeedsEdition = importPlugin.NeedsEdition, CanOverwrite = importPlugin.CanOverwrite, }; CoreServices.toolsManager.ProjectImporters.Add(importer); string projectPath = Utils.SaveResource("spain_france_test.lgm", tmpPath); mockDialogs.Setup(g => g.ChooseOption( It.IsAny <Dictionary <string, object> > (), It.IsAny <string> (), It.IsAny <object> ())). Returns(Task.Factory.StartNew(() => (object)importer) ); mockDialogs.Setup(g => g.OpenFile(It.IsAny <string> (), It.IsAny <string> (), It.IsAny <string> (), It.IsAny <string> (), It.IsAny <string []> ())).Returns(projectPath); await App.Current.EventsBroker.Publish <ImportProjectEvent> (new ImportProjectEvent()); Assert.AreEqual(2, App.Current.DatabaseManager.ActiveDB.Count <LMProject> ()); LMProject importedProject = App.Current.DatabaseManager.ActiveDB.RetrieveAll <LMProject> (). SortByCreationDate(true).ToList() [0]; Assert.IsNotNull(importedProject); Assert.AreNotEqual(importedProject.ID, p.ID); int eventsCount = p.Timeline.Count; AddEvent(p, 2, 3000, 3050, 3025); AddEvent(p, 3, 3000, 3050, 3025); savedP = App.Current.DatabaseManager.ActiveDB.Retrieve <LMProject> (p.ID); Assert.AreEqual(eventsCount + 2, savedP.Timeline.Count); await eventsController.Stop(); toolsManager.Stop(); }
public static void Main(string[] args) { CoreServices.Init(); InitGtk(); /* Init GStreamer */ GStreamer.Init(); //if (!GStreamer.CheckInstallation ()) // return; GLib.ExceptionManager.UnhandledException += new GLib.UnhandledExceptionHandler(OnException); Version version = Assembly.GetExecutingAssembly().GetName().Version; try { AddinsManager.Initialize(Config.PluginsConfigDir, Config.PluginsDir); AddinsManager.LoadConfigModifierAddins(); Config.DrawingToolkit = new CairoBackend(); Config.EventsBroker = new EventsBroker(); Config.MultimediaToolkit = new MultimediaToolkit(); Config.GUIToolkit = new GUIToolkit(version); bool haveCodecs = AddinsManager.RegisterGStreamerPlugins(); AddinsManager.LoadExportProjectAddins(Config.GUIToolkit.MainController); AddinsManager.LoadMultimediaBackendsAddins(Config.MultimediaToolkit); AddinsManager.LoadUIBackendsAddins(Config.GUIToolkit); AddinsManager.LoadServicesAddins(); Config.GUIToolkit.Register <IPlayerView, PlayerView> (0); if (!haveCodecs) { CodecsChoiceDialog ccd = new CodecsChoiceDialog(); int response = ccd.Run(); if (response == (int)ResponseType.Accept) { try { System.Diagnostics.Process.Start(Constants.WEBSITE); } catch { } } ccd.Destroy(); } try { CoreServices.Start(Config.GUIToolkit, Config.MultimediaToolkit); } catch (DBLockedException locked) { string msg = Catalog.GetString("The database seems to be locked by another instance and " + "the application will be closed."); Config.GUIToolkit.ErrorMessage(msg); Log.Exception(locked); return; } AddinsManager.LoadDashboards(Config.CategoriesTemplatesProvider); AddinsManager.LoadImportProjectAddins(CoreServices.ProjectsImporter); ConfigureOSXApp(); Application.Run(); } catch (AddinRequestShutdownException arse) { // Abort gracefully } catch (Exception ex) { ProcessExecutionError(ex); } finally { try { AddinsManager.ShutdownMultimediaBackends(); } catch { } } }