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;
            }
        }
Ejemplo n.º 6
0
        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"));
        }
Ejemplo n.º 8
0
        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());
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
        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"));
            }
        }
Ejemplo n.º 28
0
        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"));
        }
Ejemplo n.º 31
0
        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"));
        }