@@ -81,6 +81,75 @@ public async Task StartAsync_AutoLoadsTemplatesFromDirectory()
8181 Assert . Equal ( "Welcome squid" , result ) ;
8282 }
8383
84+ [ Fact ]
85+ public async Task Include_ResolvesRegisteredTemplate ( )
86+ {
87+ using var temp = new TempDirectory ( ) ;
88+ var renderer = NewRenderer ( temp . Path ) ;
89+ renderer . Register ( "partials/header" , "HEADER" ) ;
90+ renderer . Register ( "page" , "{{ include 'partials/header' }} BODY" ) ;
91+
92+ var result = await renderer . RenderByNameAsync ( "page" , null ) ;
93+
94+ Assert . Equal ( "HEADER BODY" , result ) ;
95+ }
96+
97+ [ Fact ]
98+ public async Task Include_FromInlineTemplate_Works ( )
99+ {
100+ using var temp = new TempDirectory ( ) ;
101+ var renderer = NewRenderer ( temp . Path ) ;
102+ renderer . Register ( "partials/header" , "HEADER" ) ;
103+
104+ var result = await renderer . RenderAsync ( "{{ include 'partials/header' }}!" , null ) ;
105+
106+ Assert . Equal ( "HEADER!" , result ) ;
107+ }
108+
109+ [ Fact ]
110+ public async Task Include_WithModel_BindsModel ( )
111+ {
112+ using var temp = new TempDirectory ( ) ;
113+ var renderer = NewRenderer ( temp . Path ) ;
114+ renderer . Register ( "partials/hello" , "Hi {{ user.name }}" ) ;
115+ renderer . Register ( "page" , "{{ include 'partials/hello' }}" ) ;
116+
117+ var result = await renderer . RenderByNameAsync ( "page" , new { User = new { Name = "squid" } } ) ;
118+
119+ Assert . Equal ( "Hi squid" , result ) ;
120+ }
121+
122+ [ Fact ]
123+ public async Task Include_MissingTemplate_Throws ( )
124+ {
125+ using var temp = new TempDirectory ( ) ;
126+ var renderer = NewRenderer ( temp . Path ) ;
127+
128+ await Assert . ThrowsAsync < TemplateException > (
129+ async ( ) => await renderer . RenderAsync ( "{{ include 'nope' }}" , null )
130+ ) ;
131+ }
132+
133+ [ Fact ]
134+ public async Task Include_AutoLoadedFromDisk_Works ( )
135+ {
136+ using var temp = new TempDirectory ( ) ;
137+ var templatesDir = Path . Combine ( temp . Path , "templates" ) ;
138+ Directory . CreateDirectory ( Path . Combine ( templatesDir , "partials" ) ) ;
139+ await File . WriteAllTextAsync ( Path . Combine ( templatesDir , "partials" , "header.tmpl" ) , "HEADER" ) ;
140+ await File . WriteAllTextAsync (
141+ Path . Combine ( templatesDir , "page.tmpl" ) ,
142+ "{{ include 'partials/header' }} BODY"
143+ ) ;
144+
145+ var renderer = NewRenderer ( temp . Path ) ;
146+ await renderer . StartAsync ( ) ;
147+
148+ var result = await renderer . RenderByNameAsync ( "page" , null ) ;
149+
150+ Assert . Equal ( "HEADER BODY" , result ) ;
151+ }
152+
84153 private static ScribanTemplateRenderer NewRenderer ( string root )
85154 => new ( new ( root , [ ] ) ) ;
86155}
0 commit comments