public async Task InitTest() { var assmBuilder1 = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(Guid.NewGuid().ToString()), AssemblyBuilderAccess.RunAndCollect); var moduleBuilder1 = assmBuilder1.DefineDynamicModule(Guid.NewGuid().ToString()); var typeBuilder1 = moduleBuilder1.DefineType("Plugin1", TypeAttributes.Public); typeBuilder1.AddInterfaceImplementation(typeof(IPlugin)); typeBuilder1.SetParent(typeof(PluginMock1)); var p1 = typeBuilder1.CreateType(); var assm1 = moduleBuilder1.Assembly; var assmBuffer1 = new Lokad.ILPack.AssemblyGenerator().GenerateAssemblyBytes(assm1); var mgr = new PluginsManager(new Configuration() { Plugins = new List <string>() }, new Mock <IDocifyApplication>().Object); await mgr.LoadPlugins(new PluginInfoMock[] { new PluginInfoMock("plg1", new FileMock(Location.FromPath("Plugin1Mock.dll"), assmBuffer1)), }.ToAsyncEnumerable()); var res = mgr.GetType().GetField("m_Plugins", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(mgr) as IEnumerable <IPluginBase>; Assert.AreEqual(1, res.Count()); Assert.IsInstanceOf(typeof(IPlugin), res.First()); Assert.AreEqual(p1.FullName, res.First().GetType().FullName); Assert.IsNotNull((res.First() as PluginMock1).App); }
public async Task LoadSettingsTest() { var assmBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(Guid.NewGuid().ToString()), AssemblyBuilderAccess.RunAndCollect); var moduleBuilder = assmBuilder.DefineDynamicModule(Guid.NewGuid().ToString()); var typeBuilder = moduleBuilder.DefineType("Plugin1", TypeAttributes.Public); typeBuilder.AddInterfaceImplementation(typeof(IPlugin <MockSettings1>)); typeBuilder.SetParent(typeof(PluginMock <MockSettings1>)); typeBuilder.CreateType(); var assm = moduleBuilder.Assembly; var assmBuffer = new Lokad.ILPack.AssemblyGenerator().GenerateAssemblyBytes(assm); var conf = new MetadataSerializer().Deserialize <Configuration>("^plg1:\r\n prop-two: 0.1\r\n prp3:\r\n - A\r\n - B"); conf.Plugins = new List <string>(new string[] { "plg1" }); var mgr = new PluginsManager(conf, new Mock <IDocifyApplication>().Object); await mgr.LoadPlugins(new PluginInfoMock[] { new PluginInfoMock("plg1", new FileMock(Location.FromPath("mockplugins.dll"), assmBuffer)) }.ToAsyncEnumerable()); var res = mgr.GetType().GetField("m_Plugins", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(mgr) as IEnumerable <IPluginBase>; var plg = res.OfType <PluginMock <MockSettings1> >().FirstOrDefault(); Assert.IsNotNull(plg); Assert.IsNotNull(plg.Settings); Assert.IsNotNull(plg.App); Assert.AreEqual("A", plg.Settings.Prp1); Assert.AreEqual(0.1, plg.Settings.PropTwo); Assert.That(new string[] { "A", "B" }.SequenceEqual(plg.Settings.Prp3)); }