Ejemplo n.º 1
0
        public void GetCompilationFailedResult_ReadsContentFromSourceDocuments()
        {
            // Arrange
            var viewPath    = "/Views/Home/Index.cshtml";
            var fileContent =
                @"
@if (User.IsAdmin)
{
    <span>
}
</span>";

            var razorEngine  = RazorEngine.Create();
            var fileProvider = new TestFileProvider();

            fileProvider.AddFile(viewPath, fileContent);
            var accessor = Mock.Of <IRazorViewEngineFileProviderAccessor>(a => a.FileProvider == fileProvider);

            var fileSystem     = new FileProviderRazorProjectFileSystem(accessor, _hostingEnvironment);
            var templateEngine = new MvcRazorTemplateEngine(razorEngine, fileSystem);

            var codeDocument = templateEngine.CreateCodeDocument(viewPath);

            // Act
            var csharpDocument    = templateEngine.GenerateCode(codeDocument);
            var compilationResult = CompilationFailedExceptionFactory.Create(codeDocument, csharpDocument.Diagnostics);

            // Assert
            var failure = Assert.Single(compilationResult.CompilationFailures);

            Assert.Equal(fileContent, failure.SourceFileContent);
        }
Ejemplo n.º 2
0
        public void GetCompilationFailedResult_ReadsRazorErrorsFromPage()
        {
            // Arrange
            var viewPath    = "/Views/Home/Index.cshtml";
            var razorEngine = RazorEngine.Create();

            var fileProvider = new TestFileProvider();

            fileProvider.AddFile(viewPath, "<span name=\"@(User.Id\">");
            var accessor = Mock.Of <IRazorViewEngineFileProviderAccessor>(a => a.FileProvider == fileProvider);

            var fileSystem = new FileProviderRazorProjectFileSystem(accessor, _hostingEnvironment);

            var templateEngine = new MvcRazorTemplateEngine(razorEngine, fileSystem);
            var codeDocument   = templateEngine.CreateCodeDocument(viewPath);

            // Act
            var csharpDocument    = templateEngine.GenerateCode(codeDocument);
            var compilationResult = CompilationFailedExceptionFactory.Create(codeDocument, csharpDocument.Diagnostics);

            // Assert
            var failure = Assert.Single(compilationResult.CompilationFailures);

            Assert.Equal(Path.Combine("Views", "Home", "Index.cshtml"), failure.SourceFilePath);
            Assert.Collection(failure.Messages,
                              message => Assert.StartsWith(
                                  @"Unterminated string literal.",
                                  message.Message),
                              message => Assert.StartsWith(
                                  @"The explicit expression block is missing a closing "")"" character.",
                                  message.Message));
        }
Ejemplo n.º 3
0
        public void GetCompilationFailedResult_UsesPhysicalPath()
        {
            // Arrange
            var viewPath     = "/Views/Home/Index.cshtml";
            var physicalPath = @"x:\myapp\views\home\index.cshtml";

            var fileProvider = new TestFileProvider();
            var file         = fileProvider.AddFile(viewPath, "<span name=\"@(User.Id\">");

            file.PhysicalPath = physicalPath;
            var accessor = Mock.Of <IRazorViewEngineFileProviderAccessor>(a => a.FileProvider == fileProvider);

            var razorEngine    = RazorEngine.Create();
            var fileSystem     = new FileProviderRazorProjectFileSystem(accessor, _hostingEnvironment);
            var templateEngine = new MvcRazorTemplateEngine(razorEngine, fileSystem);

            var codeDocument = templateEngine.CreateCodeDocument(viewPath);

            // Act
            var csharpDocument    = templateEngine.GenerateCode(codeDocument);
            var compilationResult = CompilationFailedExceptionFactory.Create(codeDocument, csharpDocument.Diagnostics);

            // Assert
            var failure = Assert.Single(compilationResult.CompilationFailures);

            Assert.Equal(physicalPath, failure.SourceFilePath);
        }
Ejemplo n.º 4
0
        public void GetCompilationFailedResult_ReadsContentFromSourceDocuments()
        {
            // Arrange
            var viewPath    = "/Views/Home/Index.cshtml";
            var fileContent =
                @"
@if (User.IsAdmin)
{
    <span>
}
</span>";

            var razorEngine = RazorEngine.Create();
            var fileSystem  = new VirtualRazorProjectFileSystem();

            fileSystem.Add(new TestRazorProjectItem(viewPath, fileContent));
            var templateEngine = new MvcRazorTemplateEngine(razorEngine, fileSystem);

            var codeDocument = templateEngine.CreateCodeDocument(viewPath);

            // Act
            var csharpDocument    = templateEngine.GenerateCode(codeDocument);
            var compilationResult = CompilationFailedExceptionFactory.Create(codeDocument, csharpDocument.Diagnostics);

            // Assert
            var failure = Assert.Single(compilationResult.CompilationFailures);

            Assert.Equal(fileContent, failure.SourceFileContent);
        }
Ejemplo n.º 5
0
        public void GetCompilationFailedResult_ReadsRazorErrorsFromPage()
        {
            // Arrange
            var viewPath    = "/Views/Home/Index.cshtml";
            var razorEngine = RazorEngine.Create();

            var fileSystem = new VirtualRazorProjectFileSystem();

            fileSystem.Add(new TestRazorProjectItem(viewPath, "<span name=\"@(User.Id\">"));

            var templateEngine = new MvcRazorTemplateEngine(razorEngine, fileSystem);
            var codeDocument   = templateEngine.CreateCodeDocument(viewPath);

            // Act
            var csharpDocument    = templateEngine.GenerateCode(codeDocument);
            var compilationResult = CompilationFailedExceptionFactory.Create(codeDocument, csharpDocument.Diagnostics);

            // Assert
            var failure = Assert.Single(compilationResult.CompilationFailures);

            Assert.Equal(viewPath, failure.SourceFilePath);
            Assert.Collection(failure.Messages,
                              message => Assert.StartsWith(
                                  @"Unterminated string literal.",
                                  message.Message),
                              message => Assert.StartsWith(
                                  @"The explicit expression block is missing a closing "")"" character.",
                                  message.Message));
        }
Ejemplo n.º 6
0
        public void GetCompilationFailedResult_ReadsContentFromImports()
        {
            // Arrange
            var viewPath        = "/Views/Home/Index.cshtml";
            var importsFilePath = @"x:\views\_MyImports.cshtml";
            var fileContent     = "@ ";
            var importsContent  = "@(abc";

            var fileProvider = new TestFileProvider();

            fileProvider.AddFile(viewPath, fileContent);
            var importsFile = fileProvider.AddFile("/Views/_MyImports.cshtml", importsContent);

            importsFile.PhysicalPath = importsFilePath;
            var accessor = Mock.Of <IRazorViewEngineFileProviderAccessor>(a => a.FileProvider == fileProvider);

            var razorEngine    = RazorEngine.Create();
            var fileSystem     = new FileProviderRazorProjectFileSystem(accessor, _hostingEnvironment);
            var templateEngine = new MvcRazorTemplateEngine(razorEngine, fileSystem)
            {
                Options =
                {
                    ImportsFileName = "_MyImports.cshtml",
                }
            };
            var codeDocument = templateEngine.CreateCodeDocument(viewPath);

            // Act
            var csharpDocument    = templateEngine.GenerateCode(codeDocument);
            var compilationResult = CompilationFailedExceptionFactory.Create(codeDocument, csharpDocument.Diagnostics);

            // Assert
            Assert.Collection(
                compilationResult.CompilationFailures,
                failure =>
            {
                Assert.Equal(Path.Combine("Views", "Home", "Index.cshtml"), failure.SourceFilePath);
                Assert.Collection(failure.Messages,
                                  message =>
                {
                    Assert.Equal(@"A space or line break was encountered after the ""@"" character.  Only valid identifiers, keywords, comments, ""("" and ""{"" are valid at the start of a code block and they must occur immediately following ""@"" with no space in between.",
                                 message.Message);
                });
            },
                failure =>
            {
                Assert.Equal(importsFilePath, failure.SourceFilePath);
                Assert.Collection(failure.Messages,
                                  message =>
                {
                    Assert.Equal(@"The explicit expression block is missing a closing "")"" character.  Make sure you have a matching "")"" character for all the ""("" characters within this block, and that none of the "")"" characters are being interpreted as markup.",
                                 message.Message);
                });
            });
        }
Ejemplo n.º 7
0
        public void GetCompilationFailedResult_ReadsContentFromImports()
        {
            // Arrange
            var viewPath       = "/Views/Home/Index.cshtml";
            var importsPath    = "/Views/_MyImports.cshtml";
            var fileContent    = "@ ";
            var importsContent = "@(abc";

            var fileSystem = new VirtualRazorProjectFileSystem();

            fileSystem.Add(new TestRazorProjectItem(viewPath, fileContent));
            fileSystem.Add(new TestRazorProjectItem("/Views/_MyImports.cshtml", importsContent));

            var razorEngine    = RazorProjectEngine.Create(RazorConfiguration.Default, fileSystem).Engine;
            var templateEngine = new MvcRazorTemplateEngine(razorEngine, fileSystem)
            {
                Options =
                {
                    ImportsFileName = "_MyImports.cshtml",
                }
            };
            var codeDocument = templateEngine.CreateCodeDocument(viewPath);

            // Act
            var csharpDocument    = templateEngine.GenerateCode(codeDocument);
            var compilationResult = CompilationFailedExceptionFactory.Create(codeDocument, csharpDocument.Diagnostics);

            // Assert
            Assert.Collection(
                compilationResult.CompilationFailures,
                failure =>
            {
                Assert.Equal(viewPath, failure.SourceFilePath);
                Assert.Collection(failure.Messages,
                                  message =>
                {
                    Assert.Equal(@"A space or line break was encountered after the ""@"" character.  Only valid identifiers, keywords, comments, ""("" and ""{"" are valid at the start of a code block and they must occur immediately following ""@"" with no space in between.",
                                 message.Message);
                });
            },
                failure =>
            {
                Assert.Equal(importsPath, failure.SourceFilePath);
                Assert.Collection(failure.Messages,
                                  message =>
                {
                    Assert.Equal(@"The explicit expression block is missing a closing "")"" character.  Make sure you have a matching "")"" character for all the ""("" characters within this block, and that none of the "")"" characters are being interpreted as markup.",
                                 message.Message);
                });
            });
        }
Ejemplo n.º 8
0
        public void GetCompilationFailedResult_UsesPhysicalPath()
        {
            // Arrange
            var viewPath     = "/Views/Home/Index.cshtml";
            var physicalPath = @"x:\myapp\views\home\index.cshtml";

            var fileSystem = new VirtualRazorProjectFileSystem();

            fileSystem.Add(new TestRazorProjectItem(viewPath, "<span name=\"@(User.Id\">", physicalPath: physicalPath));

            var razorEngine    = RazorEngine.Create();
            var templateEngine = new MvcRazorTemplateEngine(razorEngine, fileSystem);

            var codeDocument = templateEngine.CreateCodeDocument(viewPath);

            // Act
            var csharpDocument    = templateEngine.GenerateCode(codeDocument);
            var compilationResult = CompilationFailedExceptionFactory.Create(codeDocument, csharpDocument.Diagnostics);

            // Assert
            var failure = Assert.Single(compilationResult.CompilationFailures);

            Assert.Equal(physicalPath, failure.SourceFilePath);
        }