Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }