private int ExecuteCore( RazorConfiguration configuration, string projectDirectory, string tagHelperManifest, List <string> sources, List <string> outputs, List <string> relativePaths) { tagHelperManifest = Path.Combine(projectDirectory, tagHelperManifest); var tagHelpers = GetTagHelpers(tagHelperManifest); var inputItems = GetInputItems(projectDirectory, sources, outputs, relativePaths); var compositeFileSystem = new CompositeRazorProjectFileSystem(new[] { GetVirtualRazorProjectSystem(inputItems), RazorProjectFileSystem.Create(projectDirectory), }); var engine = RazorProjectEngine.Create(configuration, compositeFileSystem, b => { b.Features.Add(new StaticTagHelperFeature() { TagHelpers = tagHelpers, }); }); var results = GenerateCode(engine, inputItems); var success = true; foreach (var result in results) { var errorCount = result.CSharpDocument.Diagnostics.Count; if (errorCount > 0) { success = false; for (var i = 0; i < errorCount; i++) { var error = result.CSharpDocument.Diagnostics[i]; Error.WriteLine(error.ToString()); // Only show the first 100 errors to prevent massive string allocations. if (i == 99) { Error.WriteLine($"And {errorCount - i + 1} more errors."); break; } } } else { // Only output the file if we generated it without errors. var outputFilePath = result.InputItem.OutputPath; File.WriteAllText(outputFilePath, result.CSharpDocument.GeneratedCode); } } return(success ? 0 : -1); }
private int ExecuteCore( string projectDirectory, string tagHelperManifest, List <string> sources, List <string> outputs, List <string> relativePaths) { tagHelperManifest = Path.Combine(projectDirectory, tagHelperManifest); var tagHelpers = GetTagHelpers(tagHelperManifest); var engine = RazorEngine.Create(b => { RazorExtensions.Register(b); b.Features.Add(new StaticTagHelperFeature() { TagHelpers = tagHelpers, }); }); var inputItems = GetInputItems(projectDirectory, sources, outputs, relativePaths); var compositeProject = new CompositeRazorProjectFileSystem( new[] { GetVirtualRazorProjectSystem(inputItems), RazorProjectFileSystem.Create(projectDirectory), }); var templateEngine = new MvcRazorTemplateEngine(engine, compositeProject); var results = GenerateCode(templateEngine, inputItems); var success = true; foreach (var result in results) { if (result.CSharpDocument.Diagnostics.Count > 0) { success = false; foreach (var error in result.CSharpDocument.Diagnostics) { Console.Error.WriteLine(error.ToString()); } } var outputFilePath = result.InputItem.OutputPath; File.WriteAllText(outputFilePath, result.CSharpDocument.GeneratedCode); } return(success ? 0 : -1); }
public void EnumerateItems_ReturnsEmptySequence_IfNoFileSystemReturnsResults() { // Arrange var basePath = "base-path"; var fileSystem1 = Mock.Of <RazorProjectFileSystem>( f => f.EnumerateItems(basePath) == Enumerable.Empty <RazorProjectItem>()); var fileSystem2 = Mock.Of <RazorProjectFileSystem>( f => f.EnumerateItems(basePath) == Enumerable.Empty <RazorProjectItem>()); var compositeRazorProjectFileSystem = new CompositeRazorProjectFileSystem(new[] { fileSystem1, fileSystem2 }); // Act var result = compositeRazorProjectFileSystem.EnumerateItems(basePath); // Assert Assert.Empty(result); }
public void EnumerateItems_ReturnsResultsFromAllFileSystems() { // Arrange var basePath = "base-path"; var file1 = new TestRazorProjectItem("file1"); var file2 = new TestRazorProjectItem("file2"); var file3 = new TestRazorProjectItem("file3"); var fileSystem1 = Mock.Of <RazorProjectFileSystem>( f => f.EnumerateItems(basePath) == new[] { file1 }); var fileSystem2 = Mock.Of <RazorProjectFileSystem>( f => f.EnumerateItems(basePath) == Enumerable.Empty <RazorProjectItem>()); var fileSystem3 = Mock.Of <RazorProjectFileSystem>( f => f.EnumerateItems(basePath) == new[] { file2, file3, }); var compositeRazorProjectFileSystem = new CompositeRazorProjectFileSystem(new[] { fileSystem1, fileSystem2, fileSystem3 }); // Act var result = compositeRazorProjectFileSystem.EnumerateItems(basePath); // Assert Assert.Equal(new[] { file1, file2, file3 }, result); }
public void GetItem_ReturnsFirstInstanceThatExists() { // Arrange var basePath = "base-path"; var filePath = "file-path"; var file1 = new NotFoundProjectItem(basePath, filePath, fileKind: null); var file2 = new TestRazorProjectItem(filePath); RazorProjectItem nullItem = null; var fileSystem1 = Mock.Of <RazorProjectFileSystem>( f => f.GetItem(filePath, null) == file1); var fileSystem2 = Mock.Of <RazorProjectFileSystem>( f => f.GetItem(filePath, null) == nullItem); var fileSystem3 = Mock.Of <RazorProjectFileSystem>( f => f.GetItem(filePath, null) == file2); var compositeRazorProjectFileSystem = new CompositeRazorProjectFileSystem(new[] { fileSystem1, fileSystem2, fileSystem3 }); // Act var result = compositeRazorProjectFileSystem.GetItem(filePath, fileKind: null); // Assert Assert.Same(file2, result); }
private int ExecuteCore( RazorConfiguration configuration, string projectDirectory, string tagHelperManifest, SourceItem[] sourceItems) { tagHelperManifest = Path.Combine(projectDirectory, tagHelperManifest); var tagHelpers = GetTagHelpers(tagHelperManifest); var compositeFileSystem = new CompositeRazorProjectFileSystem(new[] { GetVirtualRazorProjectSystem(sourceItems), RazorProjectFileSystem.Create(projectDirectory), }); var engine = RazorProjectEngine.Create(configuration, compositeFileSystem, b => { b.Features.Add(new StaticTagHelperFeature() { TagHelpers = tagHelpers, }); b.Features.Add(new InputDocumentKindClassifierPass(sourceItems)); if (GenerateDeclaration.HasValue()) { b.Features.Add(new SetSuppressPrimaryMethodBodyOptionFeature()); } }); var results = GenerateCode(engine, sourceItems); var success = true; foreach (var result in results) { var errorCount = result.CSharpDocument.Diagnostics.Count; if (errorCount > 0) { success = false; for (var i = 0; i < errorCount; i++) { var error = result.CSharpDocument.Diagnostics[i]; Error.WriteLine(error.ToString()); // Only show the first 100 errors to prevent massive string allocations. if (i == 99) { Error.WriteLine($"And {errorCount - i + 1} more errors."); break; } } } else { // Only output the file if we generated it without errors. var outputFilePath = result.InputItem.OutputPath; File.WriteAllText(outputFilePath, result.CSharpDocument.GeneratedCode); } } return(success ? ExitCodeSuccess : ExitCodeFailureRazorError); }
private int ExecuteCore( RazorConfiguration configuration, string projectDirectory, string tagHelperManifest, SourceItem[] sourceItems) { tagHelperManifest = Path.Combine(projectDirectory, tagHelperManifest); var tagHelpers = GetTagHelpers(tagHelperManifest); var compositeFileSystem = new CompositeRazorProjectFileSystem(new[] { GetVirtualRazorProjectSystem(sourceItems), RazorProjectFileSystem.Create(projectDirectory), }); var success = true; var engine = RazorProjectEngine.Create(configuration, compositeFileSystem, b => { b.Features.Add(new StaticTagHelperFeature() { TagHelpers = tagHelpers, }); b.Features.Add(new DefaultTypeNameFeature()); if (GenerateDeclaration.HasValue()) { b.Features.Add(new SetSuppressPrimaryMethodBodyOptionFeature()); } if (RootNamespace.HasValue()) { b.SetRootNamespace(RootNamespace.Value()); } if (CSharpLanguageVersion.HasValue()) { // Only set the C# language version if one was specified, otherwise it defaults to whatever // value was set in the corresponding RazorConfiguration's extensions. var rawLanguageVersion = CSharpLanguageVersion.Value(); if (LanguageVersionFacts.TryParse(rawLanguageVersion, out var csharpLanguageVersion)) { b.SetCSharpLanguageVersion(csharpLanguageVersion); } else { success = false; Error.WriteLine($"Unknown C# language version {rawLanguageVersion}."); } } }); var results = GenerateCode(engine, sourceItems); foreach (var result in results) { var errorCount = result.CSharpDocument.Diagnostics.Count; for (var i = 0; i < errorCount; i++) { var error = result.CSharpDocument.Diagnostics[i]; if (error.Severity == RazorDiagnosticSeverity.Error) { success = false; } if (i < 100) { Error.WriteLine(error.ToString()); // Only show the first 100 errors to prevent massive string allocations. if (i == 99) { Error.WriteLine($"And {errorCount - i + 1} more warnings/errors."); } } } if (success) { // Only output the file if we generated it without errors. var outputFilePath = result.InputItem.OutputPath; File.WriteAllText(outputFilePath, result.CSharpDocument.GeneratedCode); } } return(success ? ExitCodeSuccess : ExitCodeFailureRazorError); }