1
1
// Copyright (c) .NET Foundation. All rights reserved.
2
2
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3
3
4
+ using Microsoft . AspNetCore . Mvc . Razor ;
4
5
using Microsoft . AspNetCore . Mvc . Razor . Internal ;
6
+ using Microsoft . AspNetCore . Razor . Language ;
5
7
using Microsoft . Extensions . FileProviders ;
8
+ using Microsoft . Extensions . Primitives ;
6
9
using Moq ;
7
10
using Xunit ;
8
11
@@ -14,13 +17,16 @@ public class PageActionDescriptorChangeProviderTest
14
17
public void GetChangeToken_WatchesAllCshtmlFilesUnderFileSystemRoot ( )
15
18
{
16
19
// Arrange
17
- var options = new TestOptionsManager < RazorPagesOptions > ( ) ;
18
20
var fileProvider = new Mock < IFileProvider > ( ) ;
21
+ var templateEngine = new RazorTemplateEngine (
22
+ RazorEngine . Create ( ) ,
23
+ new FileProviderRazorProject ( fileProvider . Object ) ) ;
24
+ var options = new TestOptionsManager < RazorPagesOptions > ( ) ;
19
25
var fileProviderAccessor = new Mock < IRazorViewEngineFileProviderAccessor > ( ) ;
20
26
fileProviderAccessor
21
27
. Setup ( f => f . FileProvider )
22
28
. Returns ( fileProvider . Object ) ;
23
- var changeProvider = new PageActionDescriptorChangeProvider ( fileProviderAccessor . Object , options ) ;
29
+ var changeProvider = new PageActionDescriptorChangeProvider ( templateEngine , fileProviderAccessor . Object , options ) ;
24
30
25
31
// Act
26
32
var changeToken = changeProvider . GetChangeToken ( ) ;
@@ -35,20 +41,48 @@ public void GetChangeToken_WatchesAllCshtmlFilesUnderFileSystemRoot()
35
41
public void GetChangeToken_WatchesAllCshtmlFilesUnderSpecifiedRootDirectory ( string rootDirectory )
36
42
{
37
43
// Arrange
44
+ var fileProvider = new Mock < IFileProvider > ( ) ;
45
+ var templateEngine = new RazorTemplateEngine (
46
+ RazorEngine . Create ( ) ,
47
+ new FileProviderRazorProject ( fileProvider . Object ) ) ;
38
48
var options = new TestOptionsManager < RazorPagesOptions > ( ) ;
39
49
options . Value . RootDirectory = rootDirectory ;
40
- var fileProvider = new Mock < IFileProvider > ( ) ;
41
50
var fileProviderAccessor = new Mock < IRazorViewEngineFileProviderAccessor > ( ) ;
42
51
fileProviderAccessor
43
52
. Setup ( f => f . FileProvider )
44
53
. Returns ( fileProvider . Object ) ;
45
- var changeProvider = new PageActionDescriptorChangeProvider ( fileProviderAccessor . Object , options ) ;
54
+ var changeProvider = new PageActionDescriptorChangeProvider ( templateEngine , fileProviderAccessor . Object , options ) ;
46
55
47
56
// Act
48
57
var changeToken = changeProvider . GetChangeToken ( ) ;
49
58
50
59
// Assert
51
60
fileProvider . Verify ( f => f . Watch ( "/pages-base-dir/**/*.cshtml" ) ) ;
52
61
}
62
+
63
+ [ Fact ]
64
+ public void GetChangeToken_WatchesViewImportsOutsidePagesRoot ( )
65
+ {
66
+ // Arrange
67
+ var fileProvider = new TestFileProvider ( ) ;
68
+ var templateEngine = new RazorTemplateEngine (
69
+ RazorEngine . Create ( ) ,
70
+ new FileProviderRazorProject ( fileProvider ) ) ;
71
+ templateEngine . Options . ImportsFileName = "_ViewImports.cshtml" ;
72
+ var options = new TestOptionsManager < RazorPagesOptions > ( ) ;
73
+ options . Value . RootDirectory = "/dir1/dir2" ;
74
+ var fileProviderAccessor = new Mock < IRazorViewEngineFileProviderAccessor > ( ) ;
75
+ fileProviderAccessor
76
+ . Setup ( f => f . FileProvider )
77
+ . Returns ( fileProvider ) ;
78
+ var changeProvider = new PageActionDescriptorChangeProvider ( templateEngine , fileProviderAccessor . Object , options ) ;
79
+
80
+ // Act & Assert
81
+ var compositeChangeToken = Assert . IsType < CompositeChangeToken > ( changeProvider . GetChangeToken ( ) ) ;
82
+ Assert . Collection ( compositeChangeToken . ChangeTokens ,
83
+ changeToken => Assert . Same ( fileProvider . GetChangeToken ( "/dir1/_ViewImports.cshtml" ) , changeToken ) ,
84
+ changeToken => Assert . Same ( fileProvider . GetChangeToken ( "/_ViewImports.cshtml" ) , changeToken ) ,
85
+ changeToken => Assert . Same ( fileProvider . GetChangeToken ( "/dir1/dir2/**/*.cshtml" ) , changeToken ) ) ;
86
+ }
53
87
}
54
88
}
0 commit comments