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>()); }
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; } }
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; } }
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; } }