diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs index 3342a115e1..7ad0763107 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs @@ -149,12 +149,13 @@ namespace ICSharpCode.AspNet.Mvc OnPropertyChanged(viewModel => viewModel.IsAspxViewEngineSelected); OnPropertyChanged(viewModel => viewModel.IsRazorViewEngineSelected); OnPropertyChanged(viewModel => viewModel.MasterPageFile); - OnPropertyChanged(viewModel => viewModel.ViewTemplates); } void AddViewTemplates() { viewTemplates = GetViewTemplates(); + OnPropertyChanged(viewModel => viewModel.ViewTemplates); + SelectDefaultViewTemplate(); } List GetViewTemplates() @@ -169,13 +170,29 @@ namespace ICSharpCode.AspNet.Mvc .ToList(); } + void SelectDefaultViewTemplate() + { + SelectedViewTemplate = GetEmptyViewTemplate(); + if (SelectedViewTemplate == null) { + SelectedViewTemplate = viewTemplates.FirstOrDefault(); + } + } + + MvcViewTextTemplate GetEmptyViewTemplate() + { + return viewTemplates.Find(t => t.IsEmptyTemplate()); + } + public IEnumerable ViewTemplates { get { return viewTemplates; } } public MvcViewTextTemplate SelectedViewTemplate { get { return selectedViewTemplate; } - set { selectedViewTemplate = value; } + set { + selectedViewTemplate = value; + OnPropertyChanged(viewModel => viewModel.SelectedViewTemplate); + } } public bool IsRazorViewEngineSelected { get; private set; } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewTextTemplate.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewTextTemplate.cs index 6aeab3fa5b..0d407a7c3d 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewTextTemplate.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewTextTemplate.cs @@ -21,5 +21,10 @@ namespace ICSharpCode.AspNet.Mvc public string Name { get; set; } public string FileName { get; set; } + + public bool IsEmptyTemplate() + { + return "Empty".Equals(Name, StringComparison.InvariantCultureIgnoreCase); + } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs index 62c9188142..3d3805bbbc 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs @@ -1130,5 +1130,62 @@ namespace AspNet.Mvc.Tests Assert.IsTrue(fired); } + + [Test] + public void SelectedViewTemplate_RazorViewEngineSelectedWhenThreeRazorViewTemplatesExist_EmptyTemplateSelectedByDefault() + { + CreateViewModel(); + var templateA = new MvcViewTextTemplate(@"d:\razor\A.tt"); + fakeTextTemplateRepository.ViewTextTemplates.Add(templateA); + var emptyTemplate = new MvcViewTextTemplate(@"d:\razor\Empty.tt"); + fakeTextTemplateRepository.ViewTextTemplates.Add(emptyTemplate); + var templateZ = new MvcViewTextTemplate(@"d:\razor\Z.tt"); + fakeTextTemplateRepository.ViewTextTemplates.Add(templateZ); + SelectRazorViewEngine(); + + MvcViewTextTemplate selectedTemplate = viewModel.SelectedViewTemplate; + + Assert.AreEqual(emptyTemplate, selectedTemplate); + } + + [Test] + public void SelectedViewTemplate_RazorViewEngineSelectedWhenTemplateNameIsInUpperCase_EmptyTemplateSelectedByDefault() + { + CreateViewModel(); + var templateA = new MvcViewTextTemplate(@"d:\razor\A.tt"); + fakeTextTemplateRepository.ViewTextTemplates.Add(templateA); + var emptyTemplate = new MvcViewTextTemplate(@"d:\razor\EMPTY.TT"); + fakeTextTemplateRepository.ViewTextTemplates.Add(emptyTemplate); + SelectRazorViewEngine(); + + MvcViewTextTemplate selectedTemplate = viewModel.SelectedViewTemplate; + + Assert.AreEqual(emptyTemplate, selectedTemplate); + } + + [Test] + public void SelectedViewTemplate_RazorViewEngineSelectedAndNoEmptyTemplate_FirstTemplateSelectedByDefault() + { + CreateViewModel(); + var templateA = new MvcViewTextTemplate(@"d:\razor\A.tt"); + fakeTextTemplateRepository.ViewTextTemplates.Add(templateA); + SelectRazorViewEngine(); + + MvcViewTextTemplate selectedTemplate = viewModel.SelectedViewTemplate; + + Assert.AreEqual(templateA, selectedTemplate); + } + + [Test] + public void SelectedViewEngine_RazorViewEngineSelected_SelectedViewTemplatePropertyChangedEventIsFired() + { + CreateViewModel(); + MonitorPropertyChangedEvents(); + SelectRazorViewEngine(); + + bool fired = propertyChangedEvents.Contains("SelectedViewTemplate"); + + Assert.IsTrue(fired); + } } }