public async Task CompileAsync_ReturnsResultWithExpirationToken() { // Arrange var path = "/file/does-not-exist"; var fileProvider = new TestFileProvider(); var viewCompiler = GetViewCompiler(fileProvider); // Act var result1 = await viewCompiler.CompileAsync(path); var result2 = await viewCompiler.CompileAsync(path); // Assert Assert.Same(result1, result2); Assert.Null(result1.Item); Assert.Collection( result1.ExpirationTokens, token => Assert.Equal(fileProvider.GetChangeToken(path), token)); }
public async Task CompileAsync_ReturnsResultWithNullAttribute_IfFileIsNotFoundInFileSystem() { // Arrange var path = "/file/does-not-exist"; var fileProvider = new TestFileProvider(); var viewCompiler = GetViewCompiler(fileProvider); // Act var result1 = await viewCompiler.CompileAsync(path); var result2 = await viewCompiler.CompileAsync(path); // Assert Assert.Same(result1, result2); Assert.Null(result1.Item); var token = Assert.Single(result1.ExpirationTokens); Assert.Same(fileProvider.GetChangeToken(path), token); }
public async Task CompileAsync_PrecompiledViewWithChecksum_CanRecompileWhenViewImportChanges() { // Arrange var path = "/Views/Home/Index.cshtml"; var importPath = "/Views/_ViewImports.cshtml"; var fileProvider = new TestFileProvider(); fileProvider.AddFile(path, "some content"); var importFile = fileProvider.AddFile(importPath, "some import"); var expected2 = new CompiledViewDescriptor(); var precompiledView = new CompiledViewDescriptor { RelativePath = path, Item = new TestRazorCompiledItem(typeof(string), "mvc.1.0.view", path, new object[] { new RazorSourceChecksumAttribute("SHA1", GetChecksum("some content"), path), new RazorSourceChecksumAttribute("SHA1", GetChecksum("some import"), importPath), }), }; var viewCompiler = GetViewCompiler(fileProvider, precompiledViews: new[] { precompiledView }); // Act - 1 var result = await viewCompiler.CompileAsync(path); // Assert - 1 Assert.Same(precompiledView.Item, result.Item); // Act - 2 importFile.Content = "different content"; fileProvider.GetChangeToken(importPath).HasChanged = true; viewCompiler.Compile = _ => expected2; result = await viewCompiler.CompileAsync(path); // Assert - 2 Assert.Same(expected2, result); }
public async Task CompileAsync_PrecompiledViewWithoutChecksumForMainSource_DoesNotSupportRecompilation() { // Arrange var path = "/Views/Home/Index.cshtml"; var fileProvider = new TestFileProvider(); fileProvider.AddFile(path, "some content"); var precompiledView = new CompiledViewDescriptor { RelativePath = path, Item = new TestRazorCompiledItem(typeof(string), "mvc.1.0.view", path, new object[] { new RazorSourceChecksumAttribute("sha1", GetChecksum("some content"), "/Views/Home/Index.cshtml"), }), ExpirationTokens = new[] { fileProvider.Watch("/Views/Home/Index.cshtml") } }; var viewCompiler = GetViewCompiler(fileProvider, precompiledViews: new[] { precompiledView }); // Act - 1 var result = await viewCompiler.CompileAsync(path); // Assert - 1 Assert.Same(precompiledView.Item, result.Item); // Act - 2 fileProvider.Watch(path); fileProvider.GetChangeToken(path).HasChanged = true; result = await viewCompiler.CompileAsync(path); // Assert - 2 Assert.Same(precompiledView.Item, result.Item); // This view doesn't have checksums so it can't be recompiled. // NB: This is from the original tests and is no longer true // Assert.Null(result.ExpirationTokens); }