コード例 #1
0
ファイル: OneEFWizardTests.cs プロジェクト: dotnet/ef6tools
        private static OneEFWizard CreateOneEFWizard(string itemPath, IEnumerable <EdmSchemaError> edmSchemaErrors, out Mock <IErrorListHelper> mockErrorListHelper, out Mock <ProjectItem> mockProjectItem)
        {
            var mockDte = new Mock <DTE>();

            mockDte.As <IOleServiceProvider>();
            var mockProject = new Mock <Project>();

            mockProject.Setup(p => p.DTE).Returns(mockDte.Object);

            var mockVsUtils = new Mock <IVsUtils>();

            mockErrorListHelper = new Mock <IErrorListHelper>();
            var errorCache = new ModelGenErrorCache();

            if (edmSchemaErrors != null)
            {
                errorCache.AddErrors(
                    itemPath,
                    edmSchemaErrors.ToList());
            }

            mockProjectItem = new Mock <ProjectItem>();
            mockProjectItem.Setup(p => p.get_FileNames(1)).Returns(itemPath);
            mockProjectItem.Setup(p => p.ContainingProject).Returns(mockProject.Object);

            return(new OneEFWizard(
                       vsUtils: mockVsUtils.Object, errorListHelper: mockErrorListHelper.Object, errorCache: errorCache));
        }
コード例 #2
0
            public void ProcessModel_calls_into_model_generation_extension_dispatcher()
            {
                var modelGenCache = new ModelGenErrorCache();
                var mockPackage   = new Mock <IEdmPackage>();

                mockPackage.Setup(p => p.ModelGenErrorCache).Returns(modelGenCache);

                PackageManager.Package = mockPackage.Object;

                var mockInitialContentsFactory = new Mock <IInitialModelContentsFactory>();

                mockInitialContentsFactory
                .Setup(f => f.GetInitialModelContents(It.IsAny <Version>()))
                .Returns(new InitialModelContentsFactory().GetInitialModelContents(EntityFrameworkVersion.Version3));

                var settings        = CreateMockModelBuilderSettings().Object;
                var mockHostContext = new Mock <VSModelBuilderEngineHostContext>(settings);

                var mockModelBuilderEngine = new Mock <EdmxModelBuilderEngine>(mockInitialContentsFactory.Object)
                {
                    CallBase = true
                };

                mockModelBuilderEngine
                .Setup(m => m.GenerateModels(It.IsAny <string>(), It.IsAny <ModelBuilderSettings>(), It.IsAny <List <EdmSchemaError> >()))
                .Returns(new DbModel(new DbProviderInfo("System.Data.SqlClient", "2008"), Mock.Of <DbProviderManifest>()));

                mockModelBuilderEngine.Object.GenerateModel(settings, Mock.Of <IVsUtils>(), mockHostContext.Object);

                mockHostContext.Verify(h => h.DispatchToModelGenerationExtensions(), Times.Once());
            }
コード例 #3
0
 // testing only
 internal OneEFWizard(ConfigFileUtils configFileUtils = null, IVsUtils vsUtils = null, IErrorListHelper errorListHelper = null, ModelGenErrorCache errorCache = null,
                      List <KeyValuePair <string, string> > generatedCode = null)
 {
     _configFileUtils = configFileUtils;
     _generatedCode   = generatedCode ?? new List <KeyValuePair <string, string> >();
     _vsUtils         = vsUtils;
     _errorListHelper = errorListHelper;
     _errorCache      = errorCache;
 }
コード例 #4
0
            public void ProcessModel_serializes_model_to_edmx_and_adds_designer_otions()
            {
                var modelGenCache = new ModelGenErrorCache();
                var mockPackage   = new Mock <IEdmPackage>();

                mockPackage.Setup(p => p.ModelGenErrorCache).Returns(modelGenCache);

                PackageManager.Package = mockPackage.Object;

                var mockInitialContentsFactory = new Mock <IInitialModelContentsFactory>();

                mockInitialContentsFactory
                .Setup(f => f.GetInitialModelContents(It.IsAny <Version>()))
                .Returns(new InitialModelContentsFactory().GetInitialModelContents(EntityFrameworkVersion.Version3));

                var settings = CreateMockModelBuilderSettings().Object;

                var mockModelBuilderEngine = new Mock <EdmxModelBuilderEngine>(mockInitialContentsFactory.Object)
                {
                    CallBase = true
                };

                mockModelBuilderEngine
                .Setup(m => m.GenerateModels(It.IsAny <string>(), It.IsAny <ModelBuilderSettings>(), It.IsAny <List <EdmSchemaError> >()))
                .Returns(new DbModel(new DbProviderInfo("System.Data.SqlClient", "2008"), Mock.Of <DbProviderManifest>()));

                mockModelBuilderEngine.Object.GenerateModel(settings, Mock.Of <IVsUtils>(), Mock.Of <ModelBuilderEngineHostContext>());

                var edmx = mockModelBuilderEngine.Object.Edmx;

                Assert.NotEmpty(
                    edmx
                    .Descendants().Where(e => e.Name.LocalName == "StorageModels")
                    .Elements().Where(e => e.Name.LocalName == "Schema"));

                Assert.NotEmpty(
                    edmx
                    .Descendants().Where(e => e.Name.LocalName == "ConceptualModels")
                    .Elements().Where(e => e.Name.LocalName == "Schema"));

                Assert.NotEmpty(
                    edmx
                    .Descendants().Where(e => e.Name.LocalName == "Mappings")
                    .Elements().Where(e => e.Name.LocalName == "Mapping"));

                Assert.Equal(
                    3,
                    edmx
                    .Descendants().Where(e => e.Name.LocalName == "DesignerInfoPropertySet")
                    .Elements().Count(e => e.Name.LocalName == "DesignerProperty"));
            }
コード例 #5
0
        public void GenerateModel_writes_errors_returned_from_ProcessModel()
        {
            var modelGenCache = new ModelGenErrorCache();
            var mockPackage   = new Mock <IEdmPackage>();

            mockPackage.Setup(p => p.ModelGenErrorCache).Returns(modelGenCache);

            PackageManager.Package = mockPackage.Object;
            var mockHostContext          = new Mock <ModelBuilderEngineHostContext>();
            var mockModelBuilderSettings = CreateMockModelBuilderSettings();
            var mockModelBuilderEngine   = new Mock <ModelBuilderEngine> {
                CallBase = true
            };

            var error = new EdmSchemaError("testError", 42, EdmSchemaErrorSeverity.Warning);

            mockModelBuilderEngine
            .Setup(m => m.GenerateModels(It.IsAny <string>(), It.IsAny <ModelBuilderSettings>(), It.IsAny <List <EdmSchemaError> >()))
            .Returns(new DbModel(new DbProviderInfo("System.Data.SqlClient", "2008"), Mock.Of <DbProviderManifest>()));

            mockModelBuilderEngine
            .Protected()
            .Setup(
                "ProcessModel",
                ItExpr.IsAny <DbModel>(), ItExpr.IsAny <string>(), ItExpr.IsAny <ModelBuilderSettings>(),
                ItExpr.IsAny <ModelBuilderEngineHostContext>(), ItExpr.IsAny <List <EdmSchemaError> >())
            .Callback(
                (DbModel model, string storeModelNamespace, ModelBuilderSettings settings,
                 ModelBuilderEngineHostContext hostContext, List <EdmSchemaError> errors) => errors.Add(error));

            mockModelBuilderEngine.Object.GenerateModel(mockModelBuilderSettings.Object, Mock.Of <IVsUtils>(), mockHostContext.Object);

            mockModelBuilderEngine
            .Verify(m => m.GenerateModels(
                        It.IsAny <string>(), It.IsAny <ModelBuilderSettings>(), It.IsAny <List <EdmSchemaError> >()), Times.Once());

            mockHostContext.Verify(h => h.LogMessage(It.IsAny <string>()), Times.Exactly(3));
            mockHostContext
            .Verify(h => h.LogMessage(It.IsRegex(Resources.Engine_ModelGenErrors.Substring(1, 20))), Times.Once());
            mockHostContext
            .Verify(h => h.LogMessage(It.IsRegex(Resources.Engine_ModelGenException)), Times.Never());

            Assert.Same(error, modelGenCache.GetErrors(mockModelBuilderSettings.Object.ModelPath).Single());
        }
コード例 #6
0
        public void GetModelGenErrors_returns_errors_stored_in_ModelGenCache()
        {
            var modelGenCache = new ModelGenErrorCache();
            var errors        = new List <EdmSchemaError>(new[] { new EdmSchemaError("test", 42, EdmSchemaErrorSeverity.Error) });

            modelGenCache.AddErrors(@"C:\temp.edmx", errors);

            var mockPackage = new Mock <IEdmPackage>();

            mockPackage.Setup(p => p.ModelGenErrorCache).Returns(modelGenCache);
            PackageManager.Package = mockPackage.Object;

            var modelManager  = new Mock <ModelManager>(null, null).Object;
            var modelProvider = new Mock <XmlModelProvider>().Object;

            using (var vsArtifact = new VSArtifact(modelManager, new Uri(@"C:\temp.edmx"), modelProvider))
            {
                Assert.Same(errors, vsArtifact.GetModelGenErrors());
            }
        }
コード例 #7
0
        protected override void Initialize()
        {
            base.Initialize();

            // for command line builds we only have a minimal set of functionality to only support building
            if (IsBuildingFromCommandLine)
            {
                InitializeForCommandLineBuilds();
            }
            else
            {
                // HACK HACK -- find a better place to do this.
                EFModelErrorTaskNavigator.DslDesignerOnNavigate = DSLDesignerNavigationHelper.NavigateTo;
                // --

                HostContext.Instance.LogUpdateModelWizardErrorAction = ErrorListHelper.LogUpdateModelWizardError;
                PackageManager.Package = this;
                _dispatcher            = Dispatcher.CurrentDispatcher;

                // make sure that we can load the XML Editor package
                var vsShell = (IVsShell)GetService(typeof(SVsShell));
                if (vsShell != null)
                {
                    var        editorPackageGuid = CommonPackageConstants.xmlEditorPackageGuid;
                    IVsPackage editorPackage;
                    NativeMethods.ThrowOnFailure(vsShell.LoadPackage(ref editorPackageGuid, out editorPackage));
                }

                _documentFrameMgr         = new EntityDesignDocumentFrameMgr(PackageManager.Package);
                _modelChangeEventListener = new ModelChangeEventListener();
                _guidsCache         = new AggregateProjectTypeGuidCache();
                _modelGenErrorCache = new ModelGenErrorCache();
                _connectionManager  = new ConnectionManager();

                AddToolWindow(typeof(MappingDetailsWindow));

                // Register for VS Events
                ErrorListHelper.RegisterForNotifications();

                // Add the handler to show our Explorer. This is for the top-level 'Entity Data Model Browser' command that is added to the
                // 'View' main menu. This is different from the 'Model Browser' command on the designer context menu.
                _viewExplorerCmd = AddCommand(
                    ShowExplorerWindow, ShowExplorerWindow_BeforeQueryStatus, MicrosoftDataEntityDesignCommands.ViewExplorer);

                // Add the handler to show our MappingDesigner. This is for the top-level 'Entity Data Model Mapping Details' command that is added
                // to the 'View' main menu. This is different from the 'Mapping Details' command on the designer context menu.
                _viewMappingCmd = AddCommand(
                    ShowMappingDetailsWindow, ShowMappingDetailsWindow_BeforeQueryStatus, MicrosoftDataEntityDesignCommands.ViewMapping);

                // Subscribe to Project's target framework retargeting
                var projectRetargetingService = GetService(typeof(SVsTrackProjectRetargeting)) as IVsTrackProjectRetargeting;
                Debug.Assert(null != projectRetargetingService, "TrackProjectRetargeting service is null");
                _trackProjectRetargetingEventsCookie = 0;
                if (projectRetargetingService != null)
                {
                    projectRetargetingService.AdviseTrackProjectRetargetingEvents(this, out _trackProjectRetargetingEventsCookie);
                }

                // There is no SQL CE support dev12 onward, so removing the references

#if (VS11)
                // Subscribe to the SQL CE and SqlDatabaseFile upgrade services
                var sqlCeUpgradeService = GetGlobalService(typeof(IVsSqlCeUpgradeService)) as IVsSqlCeUpgradeService;
#endif

                var sqlDatabaseFileUpgradeService =
                    GetGlobalService(typeof(IVsSqlDatabaseFileUpgradeService)) as IVsSqlDatabaseFileUpgradeService;

#if (VS12ORNEWER)
                if (sqlDatabaseFileUpgradeService == null)
#else
                if (sqlCeUpgradeService == null ||
                    sqlDatabaseFileUpgradeService == null)
#endif
                {
                    // attempt to start IVsSqlCeUpgradeService and IVsSqlDatabaseFileUpgradeService
                    BootstrapVSDesigner();

#if (VS11)
                    if (sqlCeUpgradeService == null)
                    {
                        sqlCeUpgradeService = GetGlobalService(typeof(IVsSqlCeUpgradeService)) as IVsSqlCeUpgradeService;
                    }
#endif

                    if (sqlDatabaseFileUpgradeService == null)
                    {
                        sqlDatabaseFileUpgradeService =
                            GetGlobalService(typeof(IVsSqlDatabaseFileUpgradeService)) as IVsSqlDatabaseFileUpgradeService;
                    }
                }

#if (VS11)
                Debug.Assert(null != sqlCeUpgradeService, "sqlCeUpgradeService service is null");
                if (sqlCeUpgradeService != null)
                {
                    sqlCeUpgradeService.OnUpgradeProject += EdmUtils.SqlCeUpgradeService_OnUpgradeProject;
                }
#endif

                Debug.Assert(null != sqlDatabaseFileUpgradeService, "sqlDatabaseFileUpgradeService service is null");
                if (sqlDatabaseFileUpgradeService != null)
                {
                    sqlDatabaseFileUpgradeService.OnUpgradeProject += EdmUtils.SqlDatabaseFileUpgradeService_OnUpgradeProject;
                }
            }
        }
コード例 #8
0
 /// <summary>
 /// This API supports the Entity Framework infrastructure and is not intended to be used directly from your code.
 /// </summary>
 public OneEFWizard()
 {
     _vsUtils         = new VsUtilsWrapper();
     _errorListHelper = new ErrorListHelperWrapper();
     _errorCache      = PackageManager.Package.ModelGenErrorCache;
 }