// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // #nullable disable using System; using System.Composition; using System.Linq; using System.Reflection; using Microsoft.SqlTools.Extensibility; using Microsoft.SqlTools.ServiceLayer.Formatter; using NUnit.Framework; namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Extensibility { public class ExtensionTests { [Test] public void CreateAssemblyStoreShouldFindTypesInAssembly() { // Given a store for MyExportType ExtensionStore store = ExtensionStore.CreateAssemblyStore(GetType().GetTypeInfo().Assembly); // Then should get any export for this type and subtypes Assert.AreEqual(2, store.GetExports().Count()); // But for a different type, expect throw as the store only contains MyExportType Assert.Throws(() => store.GetExports().Count()); } [Test] public void CreateDefaultLoaderShouldFindTypesOnlyInMainAssembly() { // Given a store created using CreateDefaultLoader // Then not should find exports from a different assembly ExtensionStore store = ExtensionStore.CreateDefaultLoader(); Assert.AreEqual(0, store.GetExports().Count()); // And should not find exports that are defined in the ServiceLayer assembly store = ExtensionStore.CreateDefaultLoader(); Assert.That(store.GetExports(), Is.Empty); } [Test] public void CreateDefaultServiceProviderShouldFindTypesInAllKnownAssemblies() { // Given a default ExtensionServiceProvider // Then we should not find exports from a test assembly ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider(); Assert.That(serviceProvider.GetServices(), Is.Empty); // But should find exports that are defined in the main assembly Assert.That(serviceProvider.GetServices(), Is.Not.Empty); } // [Test] public void CreateStoreForCurrentDirectoryShouldFindExportsInDirectory() { // Given stores created for types in different assemblies ExtensionStore myStore = ExtensionStore.CreateStoreForCurrentDirectory(); ExtensionStore querierStore = ExtensionStore.CreateStoreForCurrentDirectory(); // When I query exports // Then exports for all assemblies should be found Assert.AreEqual(2, myStore.GetExports().Count()); Assert.That(querierStore.GetExports(), Is.Not.Empty); } } // Note: in order for the MEF lookup to succeed, one class must have [Export(typeof(MyExportType))] public class MyExportType { } public class MyExportSubType : MyExportType { } public class MyOtherType { } }