/// <summary>
        /// Rather than directly creating the project, ask VS to initate the process of
        /// creating an aggregated project in case we are flavored. We will be called
        /// on the IVsAggregatableProjectFactory to do the real project creation.
        /// </summary>
        /// <param name="fileName">Project file</param>
        /// <param name="location">Path of the project</param>
        /// <param name="name">Project Name</param>
        /// <param name="flags">Creation flags</param>
        /// <param name="projectGuid">Guid of the project</param>
        /// <param name="project">Project that end up being created by this method</param>
        /// <param name="canceled">Was the project creation canceled</param>
        protected override void CreateProject(string fileName, string location, string name, uint flags, ref Guid projectGuid, out IntPtr project, out int canceled)
        {
            project  = IntPtr.Zero;
            canceled = 0;

            // Get the list of GUIDs from the project/template
            string guidsList = this.ProjectTypeGuids(fileName);

            // Launch the aggregate creation process (we should be called back on our IVsAggregatableProjectFactoryCorrected implementation)
            IVsCreateAggregateProject aggregateProjectFactory = (IVsCreateAggregateProject)this.Site.GetService(typeof(SVsCreateAggregateProject));
            int hr = aggregateProjectFactory.CreateAggregateProject(guidsList, fileName, location, name, flags, ref projectGuid, out project);

            if (hr == VSConstants.E_ABORT)
            {
                canceled = 1;
            }
            ErrorHandler.ThrowOnFailure(hr);

            // This needs to be done after the aggregation is completed (to avoid creating a non-aggregated CCW) and as a result we have to go through the interface
            IProjectEventsProvider eventsProvider = (IProjectEventsProvider)Marshal.GetTypedObjectForIUnknown(project, typeof(IProjectEventsProvider));

            eventsProvider.ProjectEventsProvider = this.GetProjectEventsProvider();

            this.buildProject = null;
        }
        public void SetNullSource()
        {
            ProjectTestClass       project       = new ProjectTestClass(new ProjectTestPackage());
            IProjectEventsProvider eventProvider = project as IProjectEventsProvider;

            Assert.IsNotNull(eventProvider, "Project class does not implements IProjectEventsProvider.");
            eventProvider.ProjectEventsProvider = null;
            project.Close();
        }
 public void SetOpenStatusTest()
 {
     using (ProjectEventsSource eventSource = new ProjectEventsSource())
     {
         ProjectTestClass       project       = new ProjectTestClass(new ProjectTestPackage());
         IProjectEventsProvider eventProvider = project as IProjectEventsProvider;
         Assert.IsNotNull(eventProvider, "Project class does not implements IProjectEventsProvider.");
         Assert.IsFalse(IsProjectOpened(project), "Project is opened right after its creation.");
         eventProvider.ProjectEventsProvider = eventSource;
         eventSource.SignalOpenStatus(true);
         Assert.IsTrue(IsProjectOpened(project), "Project is not opened after the AfterProjectFileOpened is signaled.");
         project.Close();
     }
 }
 public void SetMultipleSource()
 {
     using (ProjectEventsSource firstSource = new ProjectEventsSource())
     {
         using (ProjectEventsSource secondSource = new ProjectEventsSource())
         {
             ProjectTestClass       project       = new ProjectTestClass(new ProjectTestPackage());
             IProjectEventsProvider eventProvider = project as IProjectEventsProvider;
             Assert.IsNotNull(eventProvider, "Project class does not implements IProjectEventsProvider.");
             eventProvider.ProjectEventsProvider = firstSource;
             eventProvider.ProjectEventsProvider = secondSource;
             Assert.IsFalse(IsProjectOpened(project));
             firstSource.SignalOpenStatus(true);
             Assert.IsFalse(IsProjectOpened(project));
             secondSource.SignalOpenStatus(true);
             Assert.IsTrue(IsProjectOpened(project));
             project.Close();
         }
     }
 }