public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProject"), new MockProject("secondProject") { RootPath = "second:\\root" } ).Build(); var mockFileSystem = new Mock <IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "requestedTemplate", Project = "secondProject" }.GetResults <string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("second:\\root\\someFolder\\someFile.ext", "Fixed string output from template")); Assert.IsNotNull(solutionManager.GetProject("secondProject").GetProjectItem("someFolder\\someFile.ext")); }
public void ShouldReturnNothingForUnknownProjectTypes() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("myProj") { Kind = "someUnknownProjectKind" } ).Build(); // Act var result = new GetProjectLanguageCmdlet(solutionManager).GetResults<string>(); // Assert Assert.AreEqual(0, result.Count()); }
public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProj") { Kind = VsConstants.CsharpProjectTypeGuid }, new MockProject("secondProj") { Kind = VsConstants.VbProjectTypeGuid } ).Build(); // Act var result = new GetProjectLanguageCmdlet(solutionManager) { Project = "secondProj" }.GetResults<string>(); // Assert Assert.AreEqual("vb", result.Single()); }
public void ShouldReturnNothingIfFolderNotFound() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder", new MockItem("someFile.ext")) )).Build(); // Act var results = new GetProjectItemCmdlet(solutionManager) { Path = "nonExistent\\someFile.ext" }.GetResults<ProjectItem>(); // Assert Assert.AreEqual(0, results.Count()); }
private static string RunTemplateRenderingTest(string exampleTemplateName, Hashtable model, IEnumerable <Assembly> projectAssemblyReferences = null, string expectedOutputExtension = null) { // Arrange: Project containing a single folder var solutionManager = new MockSolutionManagerBuilder(new MockProject(new MockFolder("someFolder")) { RootPath = "z:\\proj", References = projectAssemblyReferences != null ? projectAssemblyReferences.Select(x => x.Location) : new string[] { } }).Build(); // Arrange: Filesystem that has template and captures attempt to write rendered output to disk var requestedOutputPath = "someFolder\\nonExistentFolder\\file.ext"; var expectedOutputPathWithExtension = requestedOutputPath; if (!string.IsNullOrEmpty(expectedOutputExtension)) { expectedOutputPathWithExtension += "." + expectedOutputExtension; } var mockFileSystem = new Mock <IFileSystem>().WithExampleTemplate("requestedTemplate", exampleTemplateName); string templateOutput = null; mockFileSystem.Setup(x => x.WriteAllText("z:\\proj\\" + expectedOutputPathWithExtension, It.IsAny <string>())) .Callback <string, string>((filename, writtenText) => { templateOutput = writtenText; }); // Act: Invoke the template try { var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = requestedOutputPath, Template = "requestedTemplate", Model = model }.GetResults <string>(); // Assert Assert.AreEqual(expectedOutputPathWithExtension, results.Single()); Assert.IsNotNull(solutionManager.DefaultProject.GetProjectItem(expectedOutputPathWithExtension)); return(templateOutput); } catch (InvalidOperationException ex) { // If it was a template rendering error, throw a more descriptive exception var templateErrors = ex.Data["CmdletOutput"] as IList <object>; if ((templateErrors != null) && (templateErrors.Any()) && (templateErrors.First() is IEnumerable <CompilerError>)) { throw new InvalidOperationException("Template rendering error: " + string.Join(Environment.NewLine, ((IEnumerable <CompilerError>)templateErrors.First()).Select(x => x.ToString()))); } throw; } }
public void ShouldReturnNothingIfFolderNotFound() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder", new MockItem("someFile.ext")) )).Build(); // Act var results = new GetProjectItemCmdlet(solutionManager) { Path = "nonExistent\\someFile.ext" }.GetResults <ProjectItem>(); // Assert Assert.AreEqual(0, results.Count()); }
public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProj"), new MockProject("secondProj", new MockItem("someFile")) ).Build(); // Act var results = new GetProjectFolderCmdlet(solutionManager, null) { Path = "", Project = "secondProj" }.GetResults<ProjectItems>(); // Assert Assert.IsNotNull(results.Single().Item("someFile")); }
public void ShouldReturnNothingForUnknownProjectTypes() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("myProj") { Kind = "someUnknownProjectKind" } ).Build(); // Act var result = new GetProjectLanguageCmdlet(solutionManager).GetResults <string>(); // Assert Assert.AreEqual(0, result.Count()); }
public void ShouldSkipRenderingIfPhysicalFileAlreadyExistsAndForceIsOff() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate") .WithFile("z:\\proj\\someFolder\\someFile.ext"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { Template = "requestedTemplate", OutputPath = "someFolder\\someFile.ext" }.GetResults<string>(); // Assert Assert.AreEqual(0, results.Count()); // Did not write any files }
public void ShouldReturnNoItemsIfFolderDoesNotExist() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder", new MockFolder("childFolder", new MockItem("someFile")) ) )).Build(); // Act var results = new GetProjectFolderCmdlet(solutionManager, null) { Path = "someFolder\\nonExistent\\anotherNonExistent" }.GetResults<ProjectItems>(); // Assert Assert.AreEqual(0, results.Count()); }
public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProj"), new MockProject("secondProj", new MockItem("someFile")) ).Build(); // Act var results = new GetProjectFolderCmdlet(solutionManager, null) { Path = "", Project = "secondProj" }.GetResults <ProjectItems>(); // Assert Assert.IsNotNull(results.Single().Item("someFile")); }
public void ShouldReturnExistingItem() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder", new MockFolder("childFolder", new MockItem("someFile.ext")) ) )).Build(); // Act var results = new GetProjectItemCmdlet(solutionManager) { Path = "someFolder\\childFolder\\someFile.ext" }.GetResults<ProjectItem>(); // Assert Assert.AreEqual("someFile.ext", results.Single().Name); }
public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProj"), new MockProject("secondProj", new MockItem("someFile.ext")) ).Build(); // Act var results = new GetProjectItemCmdlet(solutionManager) { Path = "someFile.ext", Project = "secondProj" }.GetResults<ProjectItem>(); // Assert Assert.AreEqual("someFile.ext", results.Single().Name); }
public void ShouldBeAbleToGetOutputAsStringIfNoOutputPathIsSpecified() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject()).Build(); var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", "simpleTemplate"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { Model = new Hashtable { { "Name", "Bert" }, { "Values", new [] { 1, 2, 3, 4 }} }, Template = "requestedTemplate" }.GetResults<string>(); // Assert Assert.AreEqual("The name is Bert. There are 4 values.", results.Single()); }
public void ShouldReturnExistingItem() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder", new MockFolder("childFolder", new MockItem("someFile.ext")) ) )).Build(); // Act var results = new GetProjectItemCmdlet(solutionManager) { Path = "someFolder\\childFolder\\someFile.ext" }.GetResults <ProjectItem>(); // Assert Assert.AreEqual("someFile.ext", results.Single().Name); }
public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProj"), new MockProject("secondProj", new MockItem("someFile.ext")) ).Build(); // Act var results = new GetProjectItemCmdlet(solutionManager) { Path = "someFile.ext", Project = "secondProj" }.GetResults <ProjectItem>(); // Assert Assert.AreEqual("someFile.ext", results.Single().Name); }
public void ShouldReturnNoItemsIfFolderDoesNotExist() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder", new MockFolder("childFolder", new MockItem("someFile")) ) )).Build(); // Act var results = new GetProjectFolderCmdlet(solutionManager, null) { Path = "someFolder\\nonExistent\\anotherNonExistent" }.GetResults <ProjectItems>(); // Assert Assert.AreEqual(0, results.Count()); }
public void ShouldSkipRenderingIfPhysicalFileAlreadyExistsAndForceIsOff() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock <IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate") .WithFile("z:\\proj\\someFolder\\someFile.ext"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { Template = "requestedTemplate", OutputPath = "someFolder\\someFile.ext" }.GetResults <string>(); // Assert Assert.AreEqual(0, results.Count()); // Did not write any files }
public void ShouldCreateFolderChainIfRequested() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder") ) { RootPath = "proj:\\root" }).Build(); var mockFileSystem = new Mock<IFileSystem>(); // Act var results = new GetProjectFolderCmdlet(solutionManager, mockFileSystem.Object) { Path = "someFolder\\newFolder\\anotherNewFolder", Create = new SwitchParameter(true) }.GetResults<ProjectItems>(); // Assert Assert.AreEqual(1, results.Count()); Assert.AreEqual("anotherNewFolder", ((ProjectItem)results.Single().Parent).Name); mockFileSystem.Verify(x => x.CreateDirectory("proj:\\root\\someFolder\\newFolder\\anotherNewFolder")); }
public void ShouldBeAbleToGetOutputAsStringIfNoOutputPathIsSpecified() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject()).Build(); var mockFileSystem = new Mock <IFileSystem>().WithExampleTemplate("requestedTemplate", "simpleTemplate"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { Model = new Hashtable { { "Name", "Bert" }, { "Values", new [] { 1, 2, 3, 4 } } }, Template = "requestedTemplate" }.GetResults <string>(); // Assert Assert.AreEqual("The name is Bert. There are 4 values.", results.Single()); }
public void ShouldBeAbleToLocateProjectRelativeTemplates() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject( new MockFolder("myTemplates", new MockItem("someTemplate.ext.t4")) ) { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock<IFileSystem>().WithTextFile("z:\\proj\\myTemplates\\someTemplate.ext.t4", "My project-relative template contents"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "myTemplates\\someTemplate.ext.t4" }.GetResults<string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("z:\\proj\\someFolder\\someFile.ext", "My project-relative template contents")); Assert.IsNotNull(solutionManager.DefaultProject.GetProjectItem("someFolder\\someFile.ext")); }
public void ShouldPerformRenderingIfPhysicalFileExistsAndIsReferencedByProjectAndForceIsOn() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject( new MockFolder("someFolder", new MockItem("someFile.ext")) ) { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate") .WithFile("z:\\proj\\someFolder\\someFile.ext"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "requestedTemplate", Force = new SwitchParameter(true) }.GetResults<string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("z:\\proj\\someFolder\\someFile.ext", "Fixed string output from template")); }
public void ShouldReturnLanguageForKnownProjectTypes() { var testCases = new Dictionary<string, string> { { VsConstants.CsharpProjectTypeGuid, "cs" }, { VsConstants.VbProjectTypeGuid, "vb" }, }; foreach (var testCase in testCases) { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("myProj") { Kind = testCase.Key } ).Build(); // Act var result = new GetProjectLanguageCmdlet(solutionManager).GetResults<string>(); // Assert Assert.AreEqual(testCase.Value, result.Single()); } }
public void ShouldReturnFolderItemsIfFolderExists() { // Try both with and without trailing slash foreach (var path in new[] { "someFolder\\childFolder", "someFolder\\childFolder\\" }) { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder", new MockFolder("childFolder", new MockItem("someFile")) ) )).Build(); // Act var results = new GetProjectFolderCmdlet(solutionManager, null) { Path = path }.GetResults<ProjectItems>(); // Assert Assert.IsNotNull(results.Single().Item("someFile")); } }
public void ShouldPerformRenderingIfPhysicalFileDoesNotExistButIsReferencedByProject() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject( new MockFolder("someFolder", new MockItem("someFile.ext")) ) { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock <IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "requestedTemplate", }.GetResults <string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("z:\\proj\\someFolder\\someFile.ext", "Fixed string output from template")); }
public void ShouldPerformRenderingIfPhysicalFileExistsAndIsNotReferencedByProjectAndForceIsOn() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock <IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate") .WithFile("z:\\proj\\someFolder\\someFile.ext"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "requestedTemplate", Force = new SwitchParameter(true) }.GetResults <string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("z:\\proj\\someFolder\\someFile.ext", "Fixed string output from template")); Assert.IsNotNull(solutionManager.DefaultProject.GetProjectItem("someFolder\\someFile.ext")); }
public void ShouldReturnFolderItemsIfFolderExists() { // Try both with and without trailing slash foreach (var path in new[] { "someFolder\\childFolder", "someFolder\\childFolder\\" }) { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder", new MockFolder("childFolder", new MockItem("someFile")) ) )).Build(); // Act var results = new GetProjectFolderCmdlet(solutionManager, null) { Path = path }.GetResults <ProjectItems>(); // Assert Assert.IsNotNull(results.Single().Item("someFile")); } }
public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProj") { Kind = VsConstants.CsharpProjectTypeGuid }, new MockProject("secondProj") { Kind = VsConstants.VbProjectTypeGuid } ).Build(); // Act var result = new GetProjectLanguageCmdlet(solutionManager) { Project = "secondProj" }.GetResults <string>(); // Assert Assert.AreEqual("vb", result.Single()); }
public void ShouldBeAbleToLocateProjectRelativeTemplates() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject( new MockFolder("myTemplates", new MockItem("someTemplate.ext.t4")) ) { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock <IFileSystem>().WithTextFile("z:\\proj\\myTemplates\\someTemplate.ext.t4", "My project-relative template contents"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "myTemplates\\someTemplate.ext.t4" }.GetResults <string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("z:\\proj\\someFolder\\someFile.ext", "My project-relative template contents")); Assert.IsNotNull(solutionManager.DefaultProject.GetProjectItem("someFolder\\someFile.ext")); }
public void ShouldCreateFolderChainIfRequested() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject("myProj", new MockFolder("someFolder") ) { RootPath = "proj:\\root" }).Build(); var mockFileSystem = new Mock <IFileSystem>(); // Act var results = new GetProjectFolderCmdlet(solutionManager, mockFileSystem.Object) { Path = "someFolder\\newFolder\\anotherNewFolder", Create = new SwitchParameter(true) }.GetResults <ProjectItems>(); // Assert Assert.AreEqual(1, results.Count()); Assert.AreEqual("anotherNewFolder", ((ProjectItem)results.Single().Parent).Name); mockFileSystem.Verify(x => x.CreateDirectory("proj:\\root\\someFolder\\newFolder\\anotherNewFolder")); }
public void ShouldReturnLanguageForKnownProjectTypes() { var testCases = new Dictionary <string, string> { { VsConstants.CsharpProjectTypeGuid, "cs" }, { VsConstants.VbProjectTypeGuid, "vb" }, }; foreach (var testCase in testCases) { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("myProj") { Kind = testCase.Key } ).Build(); // Act var result = new GetProjectLanguageCmdlet(solutionManager).GetResults <string>(); // Assert Assert.AreEqual(testCase.Value, result.Single()); } }
private static string RunTemplateRenderingTest(string exampleTemplateName, Hashtable model, IEnumerable<Assembly> projectAssemblyReferences = null, string expectedOutputExtension = null) { // Arrange: Project containing a single folder var solutionManager = new MockSolutionManagerBuilder(new MockProject(new MockFolder("someFolder")) { RootPath = "z:\\proj", References = projectAssemblyReferences != null ? projectAssemblyReferences.Select(x => x.Location) : new string[] { } }).Build(); // Arrange: Filesystem that has template and captures attempt to write rendered output to disk var requestedOutputPath = "someFolder\\nonExistentFolder\\file.ext"; var expectedOutputPathWithExtension = requestedOutputPath; if (!string.IsNullOrEmpty(expectedOutputExtension)) expectedOutputPathWithExtension += "." + expectedOutputExtension; var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", exampleTemplateName); string templateOutput = null; mockFileSystem.Setup(x => x.WriteAllText("z:\\proj\\" + expectedOutputPathWithExtension, It.IsAny<string>())) .Callback<string, string>((filename, writtenText) => { templateOutput = writtenText; }); // Act: Invoke the template try { var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = requestedOutputPath, Template = "requestedTemplate", Model = model }.GetResults<string>(); // Assert Assert.AreEqual(expectedOutputPathWithExtension, results.Single()); Assert.IsNotNull(solutionManager.DefaultProject.GetProjectItem(expectedOutputPathWithExtension)); return templateOutput; } catch (InvalidOperationException ex) { // If it was a template rendering error, throw a more descriptive exception var templateErrors = ex.Data["CmdletOutput"] as IList<object>; if ((templateErrors != null) && (templateErrors.Any()) && (templateErrors.First() is IEnumerable<CompilerError>)) throw new InvalidOperationException("Template rendering error: " + string.Join(Environment.NewLine, ((IEnumerable<CompilerError>)templateErrors.First()).Select(x => x.ToString()))); throw; } }
public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProject"), new MockProject("secondProject") { RootPath = "second:\\root" } ).Build(); var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "requestedTemplate", Project = "secondProject" }.GetResults<string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("second:\\root\\someFolder\\someFile.ext", "Fixed string output from template")); Assert.IsNotNull(solutionManager.GetProject("secondProject").GetProjectItem("someFolder\\someFile.ext")); }