public void Inherit_And_Modify_A_BaseView(ViewType viewType, bool attribute, string platformName)
        {
            var platform = GetPlatform(platformName);

            ModelViewInheritanceUpdater.Disabled = true;
            var models = GetModels(viewType, attribute, platform);

            var application = platform.NewApplication <ModelViewInheritanceModule>();
            var module      = CreateModelViewIneritanceModule(viewType, attribute, application, false);
            var testModule1 = new TestModule1 {
                DiffsStore = new StringModelStore(models[0])
            };
            var baseBoTypes = new[] { typeof(ABaseMvi), typeof(TagMvi) };
            var boTypes     = new[] { typeof(AMvi), typeof(FileMvi) };

            testModule1.AdditionalExportedTypes.AddRange(baseBoTypes);
            var testModule2 = new TestModule2 {
                DiffsStore = new StringModelStore(models[1])
            };

            testModule2.AdditionalExportedTypes.AddRange(boTypes);

            application.SetupDefaults(module, testModule1, testModule2,
                                      new TestModule3 {
                DiffsStore = new StringModelStore(models[2])
            });
            var inheritAndModifyBaseView = new InheritAndModifyBaseView(application, viewType, attribute);

            inheritAndModifyBaseView.Verify(application.Model);
            application.Dispose();
        }
        public void Inherit_And_Modify_A_BaseView(ViewType viewType, bool attribute)
        {
            ModelViewInheritanceUpdater.Disabled = true;
            var application = new XafApplicationMock().Object;
            var modelViewIneritanceModule = CreateModelViewIneritanceModule(viewType, attribute, application);
            var baseBoTypes = new[] { typeof(ABaseMvi), typeof(TagMvi) };
            var boTypes     = new[] { typeof(AMvi), typeof(FileMvi) };

            modelViewIneritanceModule.AdditionalExportedTypes.AddRange(baseBoTypes.Concat(boTypes));
            application.SetupDefaults(modelViewIneritanceModule);
            var inheritAndModifyBaseView = new InheritAndModifyBaseView(application, viewType, attribute);
            var models = inheritAndModifyBaseView.GetModels().ToArray();

            ModelViewInheritanceUpdater.Disabled = false;

            application = new XafApplicationMock().Object;
            modelViewIneritanceModule = CreateModelViewIneritanceModule(viewType, attribute, application);
            var testModule1 = new TestModule1 {
                DiffsStore = new StringModelStore(models[0])
            };

            testModule1.AdditionalExportedTypes.AddRange(baseBoTypes);
            var testModule2 = new TestModule2 {
                DiffsStore = new StringModelStore(models[1])
            };

            testModule2.AdditionalExportedTypes.AddRange(boTypes);

            application.SetupDefaults(modelViewIneritanceModule, testModule1, testModule2,
                                      new TestModule3 {
                DiffsStore = new StringModelStore(models[2])
            });

            inheritAndModifyBaseView.Verify(application.Model);
        }
        public void Inherit_And_Modify_A_BaseView(ViewType viewType, bool attribute, string platformName)
        {
            var platform    = GetPlatform(platformName);
            var application = platform.NewApplication <ModelViewInheritanceModule>();
            var module      = CreateModelViewInheritanceModule(viewType, attribute, application, false);
            var testModule1 = new TestModule1 {
                DiffsStore = new ResourcesModelStore(GetType().Assembly, "Model0")
            };
            var baseBoTypes = new[] { typeof(ABaseMvi), typeof(TagMvi) };
            var boTypes     = new[] { typeof(AMvi), typeof(FileMvi) };

            testModule1.AdditionalExportedTypes.AddRange(baseBoTypes);
            var testModule2 = new TestModule2 {
                DiffsStore = new ResourcesModelStore(GetType().Assembly, "Model1")
            };

            testModule2.AdditionalExportedTypes.AddRange(boTypes);

            application.SetupDefaults(module, testModule1, testModule2,
                                      new TestModule3 {
                DiffsStore = new ResourcesModelStore(GetType().Assembly, "Model2")
            });

            var modelClassB = application.Model.BOModel.GetClass(typeof(AMvi));
            var viewB       = viewType == ViewType.ListView? modelClassB.DefaultListView.AsObjectView:modelClassB.DefaultDetailView;

            viewB.Caption.ShouldBe("Changed");
            viewB.AllowDelete.ShouldBe(false);
            if (viewB is IModelListView modelListView)
            {
                modelListView.Columns[nameof(ABaseMvi.Description)].Caption.ShouldBe("New");
                modelListView.Columns[nameof(ABaseMvi.Name)].ShouldBeNull();
                modelListView.Columns[nameof(ABaseMvi.Oid)].Index.ShouldBe(100);
                ((IModelViewHiddenActions)modelListView).HiddenActions.Any().ShouldBeTrue();
            }
            else
            {
                var modelDetailView = ((IModelDetailView)viewB);
                modelDetailView.Layout.GetNodeByPath($"Main/SimpleEditors/{nameof(AMvi)}/{nameof(ABaseMvi.Name)}").ShouldBeNull();
                modelDetailView.Layout.GetNodeByPath($"Main/SimpleEditors/{nameof(ABaseMvi)}/{nameof(ABaseMvi.Description)}").ShouldNotBeNull();
                modelDetailView.Layout.GetNodeByPath("Main/Oid").ShouldNotBeNull();
                modelDetailView.Layout.GetNodeByPath("Main/Tags_Groups").ShouldBeNull();
                modelDetailView.Layout.GetNodeByPath("Main/Tabs/FileMvis/FileMvis").ShouldNotBeNull();
                modelDetailView.Layout.GetNodeByPath("Main/Tabs/Tags/Tags");
                modelDetailView.Layout.GetNode("Main").NodeCount.ShouldBe(3);
            }
            application.Dispose();
        }