Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorMatt Ward <matt.ward@xamarin.com>2017-07-28 17:49:16 +0300
committerMatt Ward <matt.ward@xamarin.com>2017-07-28 17:49:16 +0300
commit84e557b3b63087a5b936a6ebf74b0a3e16d6966c (patch)
tree532e12bec3aea0aa347fb6ccdbf659d4a6afb41c /main
parent1af8735d73a07bcfb602ac257384c0527981b3ea (diff)
[Ide] Fix failure to create CocoaApp project from New Project dialog
Fixed bug #58412 - Unable to create CocoaApp from recent templates https://bugzilla.xamarin.com/show_bug.cgi?id=58412 After creating a CocoaApp (Mac - App - General) that targets Mavericks if the CocoaApp project template was selected from the recent projects list in the New Project dialog the project would not be created if a later Mac OS was selected. In the IDE log an error would be reported: No template found matching condition 'Yosemite=false'. The problem was that the selected project template was part of a group but the group was not selected. When a different Mac OS was selected for the new project the condition applied would result in no template being found.
Diffstat (limited to 'main')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs7
-rw-r--r--main/tests/UnitTests/MonoDevelop.Ide.Templates/ProjectTemplateCategorizerTests.cs29
2 files changed, 36 insertions, 0 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs
index 2c1acc5cce..f5f888f330 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionTemplate.cs
@@ -114,14 +114,18 @@ namespace MonoDevelop.Ide.Templates
public void AddGroupTemplate (SolutionTemplate template)
{
groupedTemplates.Add (template);
+ template.Parent = this;
if (!availableLanguages.Contains (template.Language)) {
availableLanguages.Add (template.Language);
}
}
+ internal SolutionTemplate Parent { get; set; }
+
internal void ClearGroupedTemplates ()
{
+ Parent = null;
groupedTemplates.Clear ();
}
@@ -141,6 +145,9 @@ namespace MonoDevelop.Ide.Templates
return this;
}
+ if (Parent != null)
+ return Parent.GetTemplate (predicate);
+
return groupedTemplates.FirstOrDefault (template => predicate (template));
}
diff --git a/main/tests/UnitTests/MonoDevelop.Ide.Templates/ProjectTemplateCategorizerTests.cs b/main/tests/UnitTests/MonoDevelop.Ide.Templates/ProjectTemplateCategorizerTests.cs
index 1d4bbc6be3..9e7bdf795f 100644
--- a/main/tests/UnitTests/MonoDevelop.Ide.Templates/ProjectTemplateCategorizerTests.cs
+++ b/main/tests/UnitTests/MonoDevelop.Ide.Templates/ProjectTemplateCategorizerTests.cs
@@ -582,6 +582,35 @@ namespace MonoDevelop.Ide.Templates
});
Assert.AreEqual (2, templateCount);
}
+
+ [Test]
+ public void GetCategorizedTemplates_TwoTemplatesWithGroupCondition_CanGetTemplateMatchingConditionFromAnyGroupedTemplate ()
+ {
+ CreateCategories ("android", "app", "general");
+ CreateCategorizer ();
+ SolutionTemplate template1 = AddTemplate ("template-id1", "android/app/general");
+ template1.GroupId = "console";
+ template1.Language = "C#";
+ template1.Condition = "Device=IPhone";
+ SolutionTemplate template2 = AddTemplate ("template-id2", "android/app/general");
+ template2.GroupId = "console";
+ template2.Language = "C#";
+ template2.Condition = "Device=IPad";
+ ProjectCreateParameters ipadParameters = CreateParameters ("Device", "IPad");
+ ProjectCreateParameters iphoneParameters = CreateParameters ("Device", "IPhone");
+
+ CategorizeTemplates ();
+
+ TemplateCategory generalCategory = categorizedTemplates.First ().Categories.First ().Categories.First ();
+ SolutionTemplate firstTemplate = generalCategory.Templates.FirstOrDefault ();
+ SolutionTemplate matchedIPadTemplate = firstTemplate.GetTemplate ("C#", ipadParameters);
+ SolutionTemplate matchedIPhoneTemplate = firstTemplate.GetTemplate ("C#", iphoneParameters);
+
+ Assert.AreEqual (template2, matchedIPadTemplate);
+ Assert.AreEqual (template1, matchedIPhoneTemplate);
+ Assert.AreEqual (template2, matchedIPadTemplate.GetTemplate ("C#", ipadParameters));
+ Assert.AreEqual (template1, matchedIPadTemplate.GetTemplate ("C#", iphoneParameters));
+ }
}
}