Exemple #1
0
        public void TestRunStartedOverridePrompt()
        {
            const string targetDirectory  = @"c:\TargetDirectory";
            const string packagesPath     = @"packages\";
            const string thisTemplatePath =
                @"c:\ProjectTemplates\CSharp\Google Cloud Platform\1033\Gcp\Gcp.AspNet.vstemplate";
            var result = new TemplateChooserViewModelResult(
                "overrideProjectId", FrameworkType.NetCore, AspNetVersion.AspNetCore11, AppType.WebApi);
            const string expectedTargetTemplatePath = @"c:\ProjectTemplates\CSharp\WebApi\1033\1.1\1.1.vstemplate";

            _replacements[ReplacementsKeys.SolutionDirectoryKey]    = targetDirectory;
            _replacements[ReplacementsKeys.DestinationDirectoryKey] = targetDirectory;
            _replacements.Add(ReplacementsKeys.TemplateChooserResultKey, JsonConvert.SerializeObject(result));
            try
            {
                _objectUnderTest.RunStarted(
                    _dteMock.Object, _replacements, WizardRunKind.AsNewProject, new object[] { thisTemplatePath });
            }
            catch (WizardCancelledException)
            {
                _promptUserMock.Verify(p => p(It.IsAny <string>(), It.IsAny <TemplateType>()), Times.Never);
                _expectedCustomParams[ReplacementsKeys.PackagesPathKey] = packagesPath;
                _solutionMock.Verify(
                    s => s.AddNewProjectFromTemplate(
                        expectedTargetTemplatePath, It.Is <Array>(a => AreExpectedCustomParams(a)), null,
                        targetDirectory, It.IsAny <string>(), null, out _newHierarchy),
                    Times.Once);
                throw;
            }
        }
        public void BeforeEach()
        {
            _replacements = new Dictionary <string, string>
            {
                { ReplacementsKeys.ProjectNameKey, DefaultProjectName },
                { ReplacementsKeys.DestinationDirectoryKey, DefaultDestinationDirectory },
                { ReplacementsKeys.SolutionDirectoryKey, DefaultSolutionDirectory }
            };
            _customParams = new object[]
            {
                DefaultSelectorTemplatePath
            };
            _promptResult = new TemplateChooserViewModelResult(
                DefaultProjectId, DefaultFrameworkType, AspNetVersion.AspNetCore10, DefaultAppType);

            _promptUserMock = new Mock <Func <string, TemplateChooserViewModelResult> >();
            _promptUserMock.Setup(p => p(It.IsAny <string>())).Returns(() => _promptResult);
            _cleanupDirectoriesMock = new Mock <Action <Dictionary <string, string> > >();

            _objectUnderTest = new GoogleProjectTemplateSelectorWizard
            {
                CleanupDirectories = _cleanupDirectoriesMock.Object,
                PromptUser         = _promptUserMock.Object
            };

            _dteMock = new Mock <DTE>();
            Guid guidService = typeof(SVsSolution).GUID;
            Guid uuid        = typeof(IUnknown).GUID;

            _newHierarchy = Mock.Of <IVsHierarchy>();
            _solutionMock = new Mock <IVsSolution6>();
            _solutionMock.Setup(
                s => s.AddNewProjectFromTemplate(
                    It.IsAny <string>(), It.IsAny <Array>(), It.IsAny <string>(), It.IsAny <string>(),
                    It.IsAny <string>(), It.IsAny <IVsHierarchy>(), out _newHierarchy))
            .Returns(VSConstants.S_OK);
            IntPtr mockedSolutionPtr = Marshal.GetIUnknownForObject(_solutionMock.Object);

            _dteMock.As <IServiceProvider>().Setup(
                sp => sp.QueryService(ref guidService, ref uuid, out mockedSolutionPtr));

            _newCustomParams =
                new Dictionary <string, string>
            {
                { ReplacementsKeys.GcpProjectIdKey, DefaultProjectId },
                { ReplacementsKeys.SolutionDirectoryKey, DefaultSolutionDirectory },
                { ReplacementsKeys.PackagesPathKey, @"..\packages\" }
            };
        }
        private static object[] GetNewCustomParams(
            IReadOnlyDictionary <string, string> replacements,
            IEnumerable customParams,
            TemplateChooserViewModelResult result)
        {
            string solutionDirectory    = replacements[ReplacementsKeys.SolutionDirectoryKey];
            string projectDirectory     = replacements[ReplacementsKeys.DestinationDirectoryKey];
            string packageDirectory     = Path.Combine(solutionDirectory, "packages");
            string relativePackagesPath = PathUtils.GetRelativePath(projectDirectory, packageDirectory);

            var additionalCustomParams = new List <string>
            {
                $"{ReplacementsKeys.GcpProjectIdKey}={result.GcpProjectId}",
                $"{ReplacementsKeys.SolutionDirectoryKey}={solutionDirectory}",
                $"{ReplacementsKeys.PackagesPathKey}={relativePackagesPath}"
            };

            // TODO(jimwp): Find the latest framework version using IVsFrameworkMultiTargeting.
            if (result.SelectedVersion.IsCore)
            {
                switch (result.SelectedFramework)
                {
                case FrameworkType.NetFramework:
                    const string targetFramework = "net461";
                    additionalCustomParams.Add($"netcoreapp{result.SelectedVersion.Version}={targetFramework}");
                    break;

                case FrameworkType.NetCore:
                    // Do nothing.
                    break;

                case FrameworkType.None:
                    throw new InvalidOperationException(
                              $"{nameof(result.SelectedFramework)} must be one either " +
                              $"{FrameworkType.NetCore} or {FrameworkType.NetFramework}.");

                default:
                    throw new InvalidOperationException(
                              $"Invalid {nameof(FrameworkType)}: {result.SelectedFramework}");
                }
            }

            return(customParams.Cast <string>().Concat(additionalCustomParams).ToArray <object>());
        }
Exemple #4
0
 public void TestRunStartedUnknownFrameworkType()
 {
     _promptResult = new TemplateChooserViewModelResult(
         DefaultProjectId, (FrameworkType)(-1), AspNetVersion.AspNetCore10, AppType.Mvc);
     try
     {
         _objectUnderTest.RunStarted(_dteMock.Object, _replacements, WizardRunKind.AsNewProject, _customParams);
     }
     catch (InvalidOperationException)
     {
         _cleanupDirectoriesMock.Verify(d => d(It.IsAny <Dictionary <string, string> >()), Times.Once);
         _solutionMock.Verify(
             s => s.AddNewProjectFromTemplate(
                 It.IsAny <string>(), It.IsAny <Array>(), It.IsAny <string>(),
                 It.IsAny <string>(), It.IsAny <string>(), It.IsAny <IVsHierarchy>(), out _newHierarchy),
             Times.Never);
         throw;
     }
 }
Exemple #5
0
 public void TestBackout()
 {
     _promptResult = null;
     try
     {
         _objectUnderTest.RunStarted(
             _dteMock.Object, _replacements, WizardRunKind.AsNewProject, _customParams);
     }
     catch (WizardBackoutException)
     {
         _cleanupDirectoriesMock.Verify(d => d(_replacements), Times.Once);
         _solutionMock.Verify(
             s => s.AddNewProjectFromTemplate(
                 It.IsAny <string>(), It.IsAny <Array>(), It.IsAny <string>(),
                 It.IsAny <string>(), It.IsAny <string>(), It.IsAny <IVsHierarchy>(), out _newHierarchy),
             Times.Never);
         throw;
     }
 }
 public void TestRunStartedAspCoreNetFramework()
 {
     _promptResult = new TemplateChooserViewModelResult(
         DefaultProjectId, FrameworkType.NetFramework, AspNetVersion.AspNetCore10, DefaultAppType);
     try
     {
         _objectUnderTest.RunStarted(_dteMock.Object, _replacements, WizardRunKind.AsNewProject, _customParams);
     }
     catch (WizardCancelledException)
     {
         _promptUserMock.Verify(p => p(DefaultProjectName), Times.Once);
         _promptUserMock.Verify(p => p(It.IsNotIn(DefaultProjectName)), Times.Never);
         _cleanupDirectoriesMock.Verify(d => d(It.IsAny <Dictionary <string, string> >()), Times.Never);
         _newCustomParams["netcoreapp1.0"] = "net461";
         _solutionMock.Verify(
             s => s.AddNewProjectFromTemplate(
                 s_defaultTargetTemplatePath, It.Is <Array>(a => TestCustomParams(a)), null,
                 DefaultDestinationDirectory, DefaultProjectName, It.IsAny <IVsHierarchy>(), out _newHierarchy),
             Times.Once);
         throw;
     }
 }
Exemple #7
0
        public void TestAspCoreNetFrameworkTemplatePath()
        {
            _promptResult = new TemplateChooserViewModelResult(
                DefaultProjectId, FrameworkType.NetFramework, AspNetVersion.AspNetCore10, AppType.Mvc);
            const string sourceTemplatePath =
                @"c:\ProjectTemplates\CSharp\Google Cloud Platform\1033\Gcp\Gcp.AspNetCore.vstemplate";
            const string expectedTargetTemplatePath = @"c:\ProjectTemplates\CSharp\Mvc\1033\1.0\1.0.vstemplate";

            try
            {
                _objectUnderTest.RunStarted(
                    _dteMock.Object, _replacements, WizardRunKind.AsNewProject,
                    new object[] { sourceTemplatePath });
            }
            catch (WizardCancelledException)
            {
                _solutionMock.Verify(
                    s => s.AddNewProjectFromTemplate(
                        expectedTargetTemplatePath, It.IsAny <Array>(), It.IsAny <string>(), It.IsAny <string>(),
                        It.IsAny <string>(), It.IsAny <IVsHierarchy>(), out _newHierarchy), Times.Once);
                throw;
            }
        }