1111using Microsoft . VisualStudio . TestTools . UnitTesting ;
1212using DotVVM . Framework . Testing ;
1313using DotVVM . Framework . Compilation . Styles ;
14+ using DotVVM . AutoUI ;
1415
1516namespace DotVVM . Framework . Tests . ControlTests
1617{
@@ -20,6 +21,8 @@ public class ResourceDataContextTests
2021 static readonly ControlTestHelper cth = new ControlTestHelper ( config : config => {
2122 _ = Controls . Repeater . RenderAsNamedTemplateProperty ;
2223 config . Styles . Register < Repeater > ( ) . SetProperty ( r => r . RenderAsNamedTemplate , false , StyleOverrideOptions . Ignore ) ;
24+ } , services : s => {
25+ s . AddAutoUI ( ) ;
2326 } ) ;
2427 OutputChecker check = new OutputChecker ( "testoutputs" ) ;
2528
@@ -177,6 +180,70 @@ public async Task GridView()
177180 check . CheckString ( r . FormattedHtml , fileExtension : "html" ) ;
178181 }
179182
183+ [ TestMethod ]
184+ public async Task EmptyData ( )
185+ {
186+ var r = await cth . RunPage ( typeof ( TestViewModel ) , @"
187+ <!-- no header row -->
188+ <dot:GridView DataSource={resource: EmptyDataSet} ShowHeaderWhenNoData=false>
189+ <dot:GridViewTextColumn HeaderText=Id ValueBinding={resource: Id} />
190+ <dot:GridViewTemplateColumn HeaderText=Name>
191+ {{resource: Name}}
192+ </dot:GridViewTemplateColumn>
193+ </dot:GridView>
194+
195+ <!-- with empty table -->
196+ <dot:GridView DataSource={resource: EmptyDataSet} ShowHeaderWhenNoData=true>
197+ <dot:GridViewTextColumn HeaderText=Id ValueBinding={resource: Id} />
198+ <dot:GridViewTemplateColumn HeaderText=Name>
199+ {{resource: Name}}
200+ </dot:GridViewTemplateColumn>
201+ </dot:GridView>
202+
203+
204+ <!-- Repeater without wrapper tag -->
205+ <dot:Repeater DataSource={resource: EmptyArray} RenderWrapperTag=false>
206+ <EmptyDataTemplate> empty data template </EmptyDataTemplate>
207+
208+ This would be here if any data was present
209+ </dot:Repeater>
210+
211+ <!-- Repeater with wrapper tag -->
212+ <dot:Repeater DataSource={resource: EmptyArray} WrapperTagName=div>
213+ <EmptyDataTemplate> empty data template </EmptyDataTemplate>
214+
215+ This would be here if any data was present
216+ </dot:Repeater>
217+
218+ <dot:EmptyData DataSource={resource: EmptyArray} RenderWrapperTag=false>
219+ dot:EmptyData
220+ </dot:EmptyData>
221+
222+ <dot:EmptyData DataSource={resource: EmptyDataSet} WrapperTagName=div>
223+ dot:EmptyData
224+ </dot:EmptyData>
225+
226+ <dot:EmptyData DataSource={resource: Customers} WrapperTagName=div>
227+ not shown
228+ </dot:EmptyData>
229+
230+ " ) ;
231+ check . CheckString ( r . FormattedHtml , fileExtension : "html" ) ;
232+ }
233+
234+ [ TestMethod ]
235+ public async Task AutoGrid ( )
236+ {
237+ var r = await cth . RunPage ( typeof ( TestViewModel ) , @"
238+ <!-- no header row -->
239+ <dot:GridView DataSource={resource: Customers}>
240+ <auto:GridViewColumns />
241+ </dot:GridView>
242+
243+ " ) ;
244+ check . CheckString ( r . FormattedHtml , fileExtension : "html" ) ;
245+ }
246+
180247
181248 public class TestViewModel : DotvvmViewModelBase
182249 {
@@ -207,11 +274,15 @@ public class TestViewModel: DotvvmViewModelBase
207274
208275 public UploadedFilesCollection Files { get ; set ; } = new UploadedFilesCollection ( ) ;
209276
277+ public GridViewDataSet < CustomerData > EmptyDataSet { get ; set ; } = new ( ) ;
278+ public CustomerData [ ] EmptyArray { get ; set ; } = [ ] ;
279+
210280 public record CustomerData (
211281 int Id ,
212282 [ property: Required ]
213283 string Name ,
214284 // software for running MLM 😂
285+ [ property: Display ( AutoGenerateField = false ) ]
215286 List < CustomerData > NextLevelCustomers
216287 ) ;
217288
0 commit comments