public async Task Initialize() { CancellationTokenSource cts = new CancellationTokenSource(); MethodInfo testMethod = GetType().GetRuntimeMethod( TestContext.TestName, new Type[0] ); var specAttr = testMethod.GetCustomAttribute <DetailsForAttribute>(); var dataAttr = testMethod.GetCustomAttribute <TestDataAttribute>(); Assert.IsTrue(specAttr != null || dataAttr != null); try { Utils.DatabaseInfo databaseInfo = await Utils.GetDatabaseInfoForTest(TestContext); KdbxReader reader = new KdbxReader(); using (IRandomAccessStream stream = await databaseInfo.Database.AsIStorageFile.OpenReadAsync()) { Assert.IsFalse((await reader.ReadHeaderAsync(stream, cts.Token)).IsError); KdbxDecryptionResult decryption = await reader.DecryptFileAsync(stream, databaseInfo.Password, databaseInfo.Keyfile, cts.Token); Assert.IsFalse(decryption.Result.IsError); this.document = decryption.GetDocument(); if (specAttr != null && (dataAttr == null || !dataAttr.SkipInitialization)) { IDatabaseNavigationViewModel navVm = new DatabaseNavigationViewModel(); navVm.SetGroup(this.document.Root.DatabaseGroup); IDatabasePersistenceService persistenceService = new DummyPersistenceService(); this.instantiationTime = DateTime.Now; if (specAttr.IsNew) { this.expectedParent = this.document.Root.DatabaseGroup; this.viewModel = GetNewViewModel(navVm, persistenceService, this.document, this.expectedParent); } else { this.expectedParent = this.document.Root.DatabaseGroup; this.viewModel = GetExistingViewModel( navVm, persistenceService, this.document, specAttr.IsOpenedReadOnly ); } } else { this.expectedParent = null; Assert.IsTrue(dataAttr.SkipInitialization); } } } catch (InvalidOperationException) { } }
private async Task RaiseDocumentReady(KdbxDocument document, IDatabaseCandidate candidate) { DebugHelper.Assert(HasGoodHeader); if (!HasGoodHeader) { throw new InvalidOperationException("Document cannot be ready, because the KdbxReader does not have good HeaderData."); } IDatabasePersistenceService persistenceService; if (IsSampleFile) { persistenceService = new DummyPersistenceService(); } else { IKdbxWriter writer = this.kdbxReader.GetWriter(); persistenceService = new DefaultFilePersistenceService( writer, writer, candidate, this.syncContext, await candidate.File.CheckWritableAsync() ); } DocumentReady?.Invoke( this, new DocumentReadyEventArgs( document, candidate, persistenceService, this.kdbxReader.HeaderData.GenerateRng(), this.keyChangeVmFactory ) ); }