// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // using System; using System.Composition; using System.Linq; using System.Reflection; using Microsoft.SqlTools.Extensibility; using Microsoft.SqlTools.ServiceLayer.Formatter; using Xunit; namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Extensibility { public class ExtensionTests { [Fact] 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.Equal(2, store.GetExports().Count()); // But for a different type, expect throw as the store only contains MyExportType Assert.Throws(() => store.GetExports().Count()); } [Fact] public void CreateDefaultLoaderShouldFindTypesOnlyInMainAssembly() { // Given a store created using CreateDefaultLoader // Then not should find exports from a different assembly ExtensionStore store = ExtensionStore.CreateDefaultLoader(); Assert.Equal(0, store.GetExports().Count()); // And should not find exports that are defined in the ServiceLayer assembly store = ExtensionStore.CreateDefaultLoader(); Assert.Empty(store.GetExports()); } [Fact] public void CreateDefaultServiceProviderShouldFindTypesInAllKnownAssemblies() { // Given a default ExtensionServiceProvider // Then we should not find exports from a test assembly ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider(); Assert.Empty(serviceProvider.GetServices()); // But should find exports that are defined in the main assembly Assert.NotEmpty(serviceProvider.GetServices()); } [Fact] 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.Equal(2, myStore.GetExports().Count()); Assert.NotEmpty(querierStore.GetExports()); } } // 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 { } }