public async Task GetContent(Type type, bool found) { var attr1 = new ExportDocumentControllerExtensionAttribute { FileExtension = ".test" }; try { ProducerExtension.ResetCounters(); IdeServices.DocumentControllerService.RegisterControllerExtension(attr1, typeof(ProducerExtension)); using (var controller = new TestControllerWithExtension()) { await controller.Initialize(new FileDescriptor ("foo.test", null, null)); if (found) { Assert.IsNotNull(controller.GetContent(type)); } else { Assert.IsNull(controller.GetContent(type)); } } } finally { IdeServices.DocumentControllerService.UnregisterControllerExtension(attr1); } }
public async Task OwnerActivationDeactivation() { var attr1 = new ExportDocumentControllerExtensionAttribute { FileExtension = ".test" }; try { ProducerExtension.ResetCounters(); IdeServices.DocumentControllerService.RegisterControllerExtension(attr1, typeof(OwnerConditionedExtension)); using (var controller = new TestControllerWithExtension()) { await controller.Initialize(new FileDescriptor ("foo.test", null, new MyWorkspaceObject())); Assert.IsNotNull(controller.GetContent <OwnerConditionedExtension> ()); Assert.AreEqual(1, OwnerConditionedExtension.LiveExtensions.Count); controller.Owner = null; Assert.IsNull(controller.GetContent <OwnerConditionedExtension> ()); Assert.AreEqual(0, OwnerConditionedExtension.LiveExtensions.Count); controller.Owner = new MyWorkspaceObject(); Assert.IsNotNull(controller.GetContent <OwnerConditionedExtension> ()); Assert.AreEqual(1, OwnerConditionedExtension.LiveExtensions.Count); } } finally { IdeServices.DocumentControllerService.UnregisterControllerExtension(attr1); } }
public async Task FileExtensionActivationDeactivation() { var attr1 = new ExportDocumentControllerExtensionAttribute { FileExtension = ".test" }; try { ProducerExtension.ResetCounters(); IdeServices.DocumentControllerService.RegisterControllerExtension(attr1, typeof(ProducerExtension)); using (var controller = new TestControllerWithExtension()) { await controller.Initialize(new FileDescriptor ("foo.bar", null, null)); Assert.AreEqual(0, ProducerExtension.InstancesCreated); controller.FilePath = "foo.test"; Assert.AreEqual(1, ProducerExtension.InstancesCreated); Assert.AreEqual(0, ProducerExtension.InstancesDisposed); Assert.IsNotNull(controller.GetContent <ProducerExtension> ()); controller.FilePath = "foo.var"; Assert.AreEqual(1, ProducerExtension.InstancesCreated); Assert.AreEqual(1, ProducerExtension.InstancesDisposed); Assert.IsNull(controller.GetContent <ProducerExtension> ()); } } finally { IdeServices.DocumentControllerService.UnregisterControllerExtension(attr1); } }
public async Task OwnerChangedNotification() { var attr1 = new ExportDocumentControllerExtensionAttribute { FileExtension = ".test" }; try { ProducerExtension.ResetCounters(); IdeServices.DocumentControllerService.RegisterControllerExtension(attr1, typeof(ProducerExtension)); using (var controller = new TestControllerWithExtension()) { var owner = new MyWorkspaceObject(); await controller.Initialize(new FileDescriptor ("foo.test", null, owner)); var ext = controller.GetContent <ProducerExtension> (); Assert.IsNotNull(ext); Assert.AreSame(owner, ext.KnownOwner); var owner2 = new MyWorkspaceObject(); controller.Owner = owner2; Assert.AreSame(owner2, ext.KnownOwner); } } finally { IdeServices.DocumentControllerService.UnregisterControllerExtension(attr1); } }
public async Task ExtensionDependingOnExtension() { var attr1 = new ExportDocumentControllerExtensionAttribute { FileExtension = ".test" }; var attr2 = new ExportDocumentControllerExtensionAttribute { FileExtension = "*" }; try { ProducerExtension.ResetCounters(); IdeServices.DocumentControllerService.RegisterControllerExtension(attr1, typeof(ProducerExtension)); IdeServices.DocumentControllerService.RegisterControllerExtension(attr2, typeof(ConsumerExtension)); using (var controller = new TestControllerWithExtension()) { await controller.Initialize(new FileDescriptor ("foo.test", null, null)); Assert.AreEqual(1, ProducerExtension.InstancesCreated); Assert.AreEqual(0, ProducerExtension.InstancesDisposed); Assert.AreEqual(2, ConsumerExtension.InstancesCreated); Assert.AreEqual(1, ConsumerExtension.InstancesDisposed); Assert.IsNotNull(controller.GetContent <ProducerExtension> ()); Assert.IsNotNull(controller.GetContent <ConsumerExtension> ()); // If Producer extension is removed, consumer should also be removed controller.FilePath = "foo.txt"; Assert.IsNull(controller.GetContent <ProducerExtension> ()); Assert.IsNull(controller.GetContent <ConsumerExtension> ()); Assert.AreEqual(1, ProducerExtension.InstancesDisposed); Assert.AreEqual(0, ConsumerExtension.LiveExtensions.Count); } Assert.AreEqual(0, ProducerExtension.LiveExtensions.Count); Assert.AreEqual(0, ConsumerExtension.LiveExtensions.Count); } finally { IdeServices.DocumentControllerService.UnregisterControllerExtension(attr1); IdeServices.DocumentControllerService.UnregisterControllerExtension(attr2); } }
public async Task FileAttributeFilters(ExportDocumentControllerExtensionAttribute attribute, bool matches) { try { ProducerExtension.ResetCounters(); IdeServices.DocumentControllerService.RegisterControllerExtension(attribute, typeof(ProducerExtension)); using (var controller = new TestControllerWithExtension()) { await controller.Initialize(new FileDescriptor ("foo.test", "application/test", null)); var ext = controller.GetContent <ProducerExtension> (); if (matches) { Assert.IsNotNull(ext); } else { Assert.IsNull(ext); } } } finally { IdeServices.DocumentControllerService.UnregisterControllerExtension(attribute); } }
public async Task KeepExtensionInstanceOnRefresh() { // When reloading extensions, if an extension still applies it should be reused, not re-created var attr1 = new ExportDocumentControllerExtensionAttribute { FileExtension = ".test1, .test2" }; var attr2 = new ExportDocumentControllerExtensionAttribute { FileExtension = ".test1" }; var attr3 = new ExportDocumentControllerExtensionAttribute { FileExtension = ".test2" }; try { TestExtension <Test1> .ResetCounters(); TestExtension <Test2> .ResetCounters(); TestExtension <Test3> .ResetCounters(); IdeServices.DocumentControllerService.RegisterControllerExtension(attr1, typeof(TestExtension <Test1>)); IdeServices.DocumentControllerService.RegisterControllerExtension(attr2, typeof(TestExtension <Test2>)); IdeServices.DocumentControllerService.RegisterControllerExtension(attr3, typeof(TestExtension <Test3>)); using (var controller = new TestControllerWithExtension()) { await controller.Initialize(new FileDescriptor ("foo.test1", null, null)); var instance = controller.GetContent <TestExtension <Test1> > (); Assert.IsNotNull(instance); Assert.AreEqual(1, TestExtension <Test1> .LiveExtensions.Count()); Assert.IsNotNull(controller.GetContent <TestExtension <Test2> > ()); Assert.AreEqual(1, TestExtension <Test2> .LiveExtensions.Count()); Assert.IsNull(controller.GetContent <TestExtension <Test3> > ()); Assert.AreEqual(0, TestExtension <Test3> .LiveExtensions.Count()); controller.FilePath = "foo.test2"; Assert.AreSame(instance, controller.GetContent <TestExtension <Test1> > ()); Assert.AreEqual(1, TestExtension <Test1> .LiveExtensions.Count()); Assert.IsNull(controller.GetContent <TestExtension <Test2> > ()); Assert.AreEqual(0, TestExtension <Test2> .LiveExtensions.Count()); Assert.IsNotNull(controller.GetContent <TestExtension <Test3> > ()); Assert.AreEqual(1, TestExtension <Test3> .LiveExtensions.Count()); controller.FilePath = "foo.test1"; Assert.AreSame(instance, controller.GetContent <TestExtension <Test1> > ()); Assert.AreEqual(1, TestExtension <Test1> .LiveExtensions.Count()); Assert.IsNotNull(controller.GetContent <TestExtension <Test2> > ()); Assert.AreEqual(1, TestExtension <Test2> .LiveExtensions.Count()); Assert.IsNull(controller.GetContent <TestExtension <Test3> > ()); Assert.AreEqual(0, TestExtension <Test3> .LiveExtensions.Count()); } } finally { IdeServices.DocumentControllerService.UnregisterControllerExtension(attr1); IdeServices.DocumentControllerService.UnregisterControllerExtension(attr2); IdeServices.DocumentControllerService.UnregisterControllerExtension(attr3); } }