diff --git a/tests/xharness/BCLTestImportTargetFactory.cs b/tests/xharness/BCLTestImportTargetFactory.cs
index 441d2ce4d6ea..e937c594d1e9 100644
--- a/tests/xharness/BCLTestImportTargetFactory.cs
+++ b/tests/xharness/BCLTestImportTargetFactory.cs
@@ -287,8 +287,8 @@ public BCLTestImportTargetFactory (string outputDirectory, string monoRootPath)
/// has its own details.
/// The dir where the projects will be saved.
///
- public Task GenerateTestProjectsAsync (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform)
- => TemplatedProject.GenerateTestProjectsAsync (projects, platform);
+ public GeneratedProjects GenerateTestProjects (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform)
+ => TemplatedProject.GenerateTestProjects (projects, platform);
List<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> GetProjectDefinitions (ProjectsDefinitions definitions, Platform platform)
{
@@ -318,35 +318,34 @@ public Task GenerateTestProjectsAsync (IEnumerable<(string Na
return testProjects;
}
- async Task Platforms, string Failure, double TimeoutMultiplier)>> GenerateAlliOSTestProjectsAsync ()
+ List<(string Name, string Path, bool XUnit, string ExtraArgs, List Platforms, string Failure, double TimeoutMultiplier, Task GenerationCompleted)> GenerateAlliOSTestProjects ()
{
- var projectPaths = new List<(string Name, string Path, bool XUnit, string ExtraArgs, List Platforms, string Failure, double TimeoutMultiplier)> ();
- var projects = new Dictionary Platforms, string Failure, double TimeoutMultiplier)> ();
+ var projectPaths = new List<(string Name, string Path, bool XUnit, string ExtraArgs, List Platforms, string Failure, double TimeoutMultiplier, Task GenerationCompleted)> ();
+ var projects = new Dictionary Platforms, string Failure, double TimeoutMultiplier, Task GenerationCompleted)> ();
foreach (var platform in new [] { Platform.iOS, Platform.TvOS, Platform.WatchOS }) {
- var generated = await GenerateTestProjectsAsync (GetProjectDefinitions (commoniOSTestProjects, platform), platform);
+ var generated = GenerateTestProjects (GetProjectDefinitions (commoniOSTestProjects, platform), platform);
foreach (var tp in generated) {
if (!projects.ContainsKey (tp.Name)) {
- projects [tp.Name] = (tp.Path, tp.XUnit, tp.ExtraArgs, new List { platform }, tp.Failure, tp.TimeoutMultiplier);
+ projects [tp.Name] = (tp.Path, tp.XUnit, tp.ExtraArgs, new List { platform }, tp.Failure, tp.TimeoutMultiplier, tp.GenerationCompleted);
} else {
var project = projects [tp.Name];
project.Platforms.Add (platform);
project.TimeoutMultiplier += (tp.TimeoutMultiplier - 1);
+ project.GenerationCompleted = Task.WhenAll (project.GenerationCompleted, tp.GenerationCompleted);
}
}
} // foreach platform
// return the grouped projects
- foreach (var name in projects.Keys) {
- projectPaths.Add ((name, projects [name].Path, projects [name].XUnit, projects [name].ExtraArgs, projects [name].Platforms, projects [name].Failure, projects [name].TimeoutMultiplier));
+ foreach (var kvp in projects) {
+ var name = kvp.Key;
+ var proj = kvp.Value;
+ projectPaths.Add ((kvp.Key, proj.Path, proj.XUnit, proj.ExtraArgs, proj.Platforms, proj.Failure, proj.TimeoutMultiplier, proj.GenerationCompleted));
}
return projectPaths;
}
- public List<(string Name, string Path, bool XUnit, string ExtraArgs, List Platforms, string Failure, double TimeoutMultiplier)> GenerateAlliOSTestProjects () => GenerateAlliOSTestProjectsAsync ().Result;
-
- public Task GenerateAllMacTestProjectsAsync (Platform platform) => GenerateTestProjectsAsync (GetProjectDefinitions (macTestProjects, platform), platform);
-
- public GeneratedProjects GenerateAllMacTestProjects (Platform platform) => GenerateAllMacTestProjectsAsync (platform).Result;
+ public GeneratedProjects GenerateAllMacTestProjects (Platform platform) => GenerateTestProjects (GetProjectDefinitions (macTestProjects, platform), platform);
// Map from the projects understood from the test importer to those that AppRunner and friends understand:
public List GetiOSBclTargets ()
@@ -356,7 +355,7 @@ public List GetiOSBclTargets ()
foreach (var tp in GenerateAlliOSTestProjects ()) {
var prefix = tp.XUnit ? "xUnit" : "NUnit";
var finalName = tp.Name.StartsWith ("mscorlib", StringComparison.Ordinal) ? tp.Name : $"[{prefix}] Mono {tp.Name}"; // mscorlib is our special test
- result.Add (new iOSTestProject (tp.Path) {
+ var proj = new iOSTestProject (tp.Path) {
Name = finalName,
SkipiOSVariation = !tp.Platforms.Contains (Platform.iOS),
SkiptvOSVariation = !tp.Platforms.Contains (Platform.TvOS),
@@ -366,7 +365,12 @@ public List GetiOSBclTargets ()
RestoreNugetsInProject = true,
MTouchExtraArgs = tp.ExtraArgs,
TimeoutMultiplier = tp.TimeoutMultiplier,
- });
+ };
+ proj.Dependency = async () => {
+ await tp.GenerationCompleted;
+ proj.FailureMessage = tp.Failure;
+ };
+ result.Add (proj);
}
return result;
}
@@ -382,14 +386,19 @@ public List GetMacBclTargets (MacFlavors flavor)
foreach (var tp in GenerateAllMacTestProjects (platform)) {
var prefix = tp.XUnit ? "xUnit" : "NUnit";
var finalName = tp.Name.StartsWith ("mscorlib", StringComparison.Ordinal) ? tp.Name : $"[{prefix}] Mono {tp.Name}"; // mscorlib is our special test
- result.Add (new MacTestProject (tp.Path, targetFrameworkFlavor: flavor) {
+ var proj = new MacTestProject (tp.Path, targetFrameworkFlavor: flavor) {
Name = finalName,
Platform = "AnyCPU",
IsExecutableProject = true,
FailureMessage = tp.Failure,
RestoreNugetsInProject = true,
MTouchExtraArgs = tp.ExtraArgs,
- });
+ };
+ proj.Dependency = async () => {
+ await tp.GenerationCompleted;
+ proj.FailureMessage = tp.Failure;
+ };
+ result.Add (proj);
}
return result;
}
diff --git a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestImporter/Templates/ITemplatedProject.cs b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestImporter/Templates/ITemplatedProject.cs
index b0f874f446c5..5b930005c408 100644
--- a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestImporter/Templates/ITemplatedProject.cs
+++ b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestImporter/Templates/ITemplatedProject.cs
@@ -4,8 +4,17 @@
namespace Microsoft.DotNet.XHarness.iOS.Shared.TestImporter.Templates {
+ public class GeneratedProject {
+ public string Name;
+ public string Path;
+ public bool XUnit;
+ public string ExtraArgs;
+ public string Failure;
+ public double TimeoutMultiplier;
+ public Task GenerationCompleted;
+ }
// less typing
- public class GeneratedProjects : List<(string Name, string Path, bool XUnit, string ExtraArgs, string Failure, double TimeoutMultiplier)> {
+ public class GeneratedProjects : List {
}
// interface that represent a project that is created from a template.
@@ -28,6 +37,6 @@ public interface ITemplatedProject {
/// has its own details.
/// The dir where the projects will be saved.
///
- Task GenerateTestProjectsAsync (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform);
+ GeneratedProjects GenerateTestProjects (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform);
}
}
diff --git a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestImporter/Templates/Managed/XamariniOSTemplate.cs b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestImporter/Templates/Managed/XamariniOSTemplate.cs
index 8835d6294763..8afe595c2402 100644
--- a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestImporter/Templates/Managed/XamariniOSTemplate.cs
+++ b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestImporter/Templates/Managed/XamariniOSTemplate.cs
@@ -379,28 +379,28 @@ string GenerateIncludeFilesNode (string projectName, (string FailureMessage, Lis
return contentFiles.ToString ();
}
- public async Task GenerateTestProjectsAsync (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform)
+ public GeneratedProjects GenerateTestProjects (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform)
{
// generate the template c# code before we create the diff projects
GenerateSource (Path.Combine (OutputDirectoryPath, "templates"));
var result = new GeneratedProjects ();
switch (platform) {
case Platform.WatchOS:
- result = await GenerateWatchOSTestProjectsAsync (projects);
+ result = GenerateWatchOSTestProjects (projects);
break;
case Platform.iOS:
case Platform.TvOS:
- result = await GenerateiOSTestProjectsAsync (projects, platform);
+ result = GenerateiOSTestProjects (projects, platform);
break;
case Platform.MacOSFull:
case Platform.MacOSModern:
- result = await GenerateMacTestProjectsAsync (projects, platform);
+ result = GenerateMacTestProjects (projects, platform);
break;
}
return result;
}
- #region Watch Porjects generation
+ #region Watch Projects generation
string GenerateWatchProject (string projectName, string template, string infoPlistPath)
{
@@ -447,7 +447,7 @@ string GenerateWatchExtension (string projectName, string template, string infoP
}
// internal implementations that generate each of the diff projects
- async Task GenerateWatchOSTestProjectsAsync (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects)
+ GeneratedProjects GenerateWatchOSTestProjects (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects)
{
var projectPaths = new GeneratedProjects ();
foreach (var def in projects) {
@@ -462,65 +462,74 @@ async Task GenerateWatchOSTestProjectsAsync (IEnumerable<(str
if (!projectDefinition.Validate ())
throw new InvalidOperationException ("xUnit and NUnit assemblies cannot be mixed in a test project.");
+ var gp = new GeneratedProject ();
var generatedCodeDir = Path.Combine (GeneratedCodePathRoot, projectDefinition.Name, "watch");
if (!Directory.Exists (generatedCodeDir)) {
Directory.CreateDirectory (generatedCodeDir);
}
var registerTypePath = Path.Combine (generatedCodeDir, "RegisterType.cs");
- string failure = null;
- string rootProjectPath = GetProjectPath (projectDefinition.Name, Platform.WatchOS); ;
- try {
- // create the plist for each of the apps
- var projectData = new Dictionary ();
- foreach (var appType in new [] { WatchAppType.Extension, WatchAppType.App }) {
- (string plist, string project) data;
- var plist = InfoPlistGenerator.GenerateCode (GetPlistTemplate (appType), projectDefinition.Name);
- data.plist = GetPListPath (generatedCodeDir, appType);
- using (var file = new StreamWriter (data.plist, false)) { // false is do not append
- await file.WriteAsync (plist);
+ gp.Name = projectDefinition.Name;
+ gp.Path = GetProjectPath (projectDefinition.Name, Platform.WatchOS);
+ gp.XUnit = projectDefinition.IsXUnit;
+ gp.ExtraArgs = projectDefinition.ExtraArgs;
+ gp.TimeoutMultiplier = def.TimeoutMultiplier;
+ var task = Task.Run (async () => {
+ try {
+ // create the plist for each of the apps
+ var projectData = new Dictionary ();
+ foreach (var appType in new [] { WatchAppType.Extension, WatchAppType.App }) {
+ (string plist, string project) data;
+ var plist = InfoPlistGenerator.GenerateCode (GetPlistTemplate (appType), projectDefinition.Name);
+ data.plist = GetPListPath (generatedCodeDir, appType);
+ using (var file = new StreamWriter (data.plist, false)) { // false is do not append
+ await file.WriteAsync (plist);
+ }
+
+ string generatedProject;
+ switch (appType) {
+ case WatchAppType.App:
+ generatedProject = GenerateWatchApp (projectDefinition.Name, GetProjectTemplate (appType), data.plist);
+ break;
+ default:
+ var info = projectDefinition.GetAssemblyInclusionInformation (Platform.WatchOS);
+ generatedProject = GenerateWatchExtension (projectDefinition.Name, GetProjectTemplate (appType), data.plist, registerTypePath, info);
+ gp.Failure ??= info.FailureMessage;
+ break;
+ }
+ data.project = GetProjectPath (projectDefinition.Name, appType);
+ using (var file = new StreamWriter (data.project, false)) { // false is do not append
+ await file.WriteAsync (generatedProject);
+ }
+
+ projectData [appType] = data;
+ } // foreach app type
+
+ var rootPlist = InfoPlistGenerator.GenerateCode (GetPlistTemplate (Platform.WatchOS), projectDefinition.Name);
+ var infoPlistPath = GetPListPath (generatedCodeDir, Platform.WatchOS);
+ using (var file = new StreamWriter (infoPlistPath, false)) { // false is do not append
+ await file.WriteAsync (rootPlist);
}
- string generatedProject;
- switch (appType) {
- case WatchAppType.App:
- generatedProject = GenerateWatchApp (projectDefinition.Name, GetProjectTemplate (appType), data.plist);
- break;
- default:
- var info = projectDefinition.GetAssemblyInclusionInformation (Platform.WatchOS);
- generatedProject = GenerateWatchExtension (projectDefinition.Name, GetProjectTemplate (appType), data.plist, registerTypePath, info);
- failure ??= info.FailureMessage;
- break;
+ using (var file = new StreamWriter (gp.Path, false)) { // false is do not append
+ var template = GetProjectTemplate (Platform.WatchOS);
+ var generatedRootProject = GenerateWatchProject (def.Name, template, infoPlistPath);
+ await file.WriteAsync (generatedRootProject);
}
- data.project = GetProjectPath (projectDefinition.Name, appType);
- using (var file = new StreamWriter (data.project, false)) { // false is do not append
- await file.WriteAsync (generatedProject);
+ var typesPerAssembly = projectDefinition.GetTypeForAssemblies (AssemblyLocator.GetAssembliesRootLocation (Platform.iOS), Platform.WatchOS);
+ var registerCode = RegisterTypeGenerator.GenerateCode (typesPerAssembly, projectDefinition.IsXUnit, GetRegisterTypeTemplate ());
+ using (var file = new StreamWriter (registerTypePath, false)) { // false is do not append
+ await file.WriteAsync (registerCode);
}
- projectData [appType] = data;
- } // foreach app type
-
- var rootPlist = InfoPlistGenerator.GenerateCode (GetPlistTemplate (Platform.WatchOS), projectDefinition.Name);
- var infoPlistPath = GetPListPath (generatedCodeDir, Platform.WatchOS);
- using (var file = new StreamWriter (infoPlistPath, false)) { // false is do not append
- await file.WriteAsync (rootPlist);
- }
- using (var file = new StreamWriter (rootProjectPath, false)) { // false is do not append
- var template = GetProjectTemplate (Platform.WatchOS);
- var generatedRootProject = GenerateWatchProject (def.Name, template, infoPlistPath);
- await file.WriteAsync (generatedRootProject);
- }
- var typesPerAssembly = projectDefinition.GetTypeForAssemblies (AssemblyLocator.GetAssembliesRootLocation (Platform.iOS), Platform.WatchOS);
- var registerCode = RegisterTypeGenerator.GenerateCode (typesPerAssembly, projectDefinition.IsXUnit, GetRegisterTypeTemplate ());
- using (var file = new StreamWriter (registerTypePath, false)) { // false is do not append
- await file.WriteAsync (registerCode);
+ gp.Failure ??= typesPerAssembly.FailureMessage;
+ } catch (Exception e) {
+ gp.Failure = e.Message;
}
+ });
+ gp.GenerationCompleted = task;
- failure ??= typesPerAssembly.FailureMessage;
- } catch (Exception e) {
- failure = e.Message;
- }
// we have the 3 projects we depend on, we need the root one, the one that will be used by harness
- projectPaths.Add ((projectDefinition.Name, rootProjectPath, projectDefinition.IsXUnit, projectDefinition.ExtraArgs, failure, def.TimeoutMultiplier));
+ projectPaths.Add (gp);
} // foreach project
return projectPaths;
@@ -568,7 +577,7 @@ string Generate (string projectName, string registerPath, (string FailureMessage
return result;
}
- async Task GenerateiOSTestProjectsAsync (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform)
+ GeneratedProjects GenerateiOSTestProjects (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform)
{
if (platform == Platform.WatchOS)
throw new ArgumentException (nameof (platform));
@@ -592,32 +601,39 @@ async Task GenerateiOSTestProjectsAsync (IEnumerable<(string
var registerTypePath = Path.Combine (generatedCodeDir, "RegisterType.cs");
string projectPath = GetProjectPath (projectDefinition.Name, platform);
- string failure = null;
- try {
- var plist = InfoPlistGenerator.GenerateCode (GetPlistTemplate (platform), projectDefinition.Name);
- var infoPlistPath = GetPListPath (generatedCodeDir, platform);
- using (var file = new StreamWriter (infoPlistPath, false)) { // false is do not append
- await file.WriteAsync (plist);
- }
+ var gp = new GeneratedProject ();
+ gp.Name = projectDefinition.Name;
+ gp.Path = projectPath;
+ gp.XUnit = projectDefinition.IsXUnit;
+ gp.ExtraArgs = projectDefinition.ExtraArgs;
+ gp.TimeoutMultiplier = def.TimeoutMultiplier;
+ gp.GenerationCompleted = Task.Run (async () => {
+ try {
+ var plist = InfoPlistGenerator.GenerateCode (GetPlistTemplate (platform), projectDefinition.Name);
+ var infoPlistPath = GetPListPath (generatedCodeDir, platform);
+ using (var file = new StreamWriter (infoPlistPath, false)) { // false is do not append
+ await file.WriteAsync (plist);
+ }
- var info = projectDefinition.GetAssemblyInclusionInformation (platform);
- var generatedProject = Generate (projectDefinition.Name, registerTypePath, info, GetProjectTemplate (platform), infoPlistPath, platform);
- using (var file = new StreamWriter (projectPath, false)) { // false is do not append
- await file.WriteAsync (generatedProject);
- }
- var typesPerAssembly = projectDefinition.GetTypeForAssemblies (AssemblyLocator.GetAssembliesRootLocation (platform), platform);
- var registerCode = RegisterTypeGenerator.GenerateCode (typesPerAssembly, projectDefinition.IsXUnit, GetRegisterTypeTemplate ());
+ var info = projectDefinition.GetAssemblyInclusionInformation (platform);
+ var generatedProject = Generate (projectDefinition.Name, registerTypePath, info, GetProjectTemplate (platform), infoPlistPath, platform);
+ using (var file = new StreamWriter (projectPath, false)) { // false is do not append
+ await file.WriteAsync (generatedProject);
+ }
+ var typesPerAssembly = projectDefinition.GetTypeForAssemblies (AssemblyLocator.GetAssembliesRootLocation (platform), platform);
+ var registerCode = RegisterTypeGenerator.GenerateCode (typesPerAssembly, projectDefinition.IsXUnit, GetRegisterTypeTemplate ());
- using (var file = new StreamWriter (registerTypePath, false)) { // false is do not append
- await file.WriteAsync (registerCode);
- }
+ using (var file = new StreamWriter (registerTypePath, false)) { // false is do not append
+ await file.WriteAsync (registerCode);
+ }
- failure = failure ?? info.FailureMessage;
- failure = failure ?? typesPerAssembly.FailureMessage;
- } catch (Exception e) {
- failure = e.Message;
- }
- projectPaths.Add ((projectDefinition.Name, projectPath, projectDefinition.IsXUnit, projectDefinition.ExtraArgs, failure, def.TimeoutMultiplier));
+ gp.Failure ??= info.FailureMessage;
+ gp.Failure ??= typesPerAssembly.FailureMessage;
+ } catch (Exception e) {
+ gp.Failure = e.Message;
+ }
+ });
+ projectPaths.Add (gp);
} // foreach project
return projectPaths;
@@ -667,7 +683,7 @@ string GenerateMac (string projectName, string registerPath, (string FailureMess
return result;
}
- async Task GenerateMacTestProjectsAsync (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform)
+ GeneratedProjects GenerateMacTestProjects (IEnumerable<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> projects, Platform platform)
{
var projectPaths = new GeneratedProjects ();
foreach (var def in projects) {
@@ -684,32 +700,40 @@ async Task GenerateMacTestProjectsAsync (IEnumerable<(string
Directory.CreateDirectory (generatedCodeDir);
var registerTypePath = Path.Combine (generatedCodeDir, "RegisterType-mac.cs");
- var typesPerAssembly = projectDefinition.GetTypeForAssemblies (AssemblyLocator.GetAssembliesRootLocation (platform), platform);
- var registerCode = RegisterTypeGenerator.GenerateCode (typesPerAssembly, projectDefinition.IsXUnit, GetRegisterTypeTemplate ());
-
- using (var file = new StreamWriter (registerTypePath, false)) { // false is do not append
- await file.WriteAsync (registerCode);
- }
var projectPath = GetProjectPath (projectDefinition.Name, platform);
- string failure = null;
- try {
- var plist = InfoPlistGenerator.GenerateCode (GetPlistTemplate (platform), projectDefinition.Name);
- var infoPlistPath = GetPListPath (generatedCodeDir, platform);
- using (var file = new StreamWriter (infoPlistPath, false)) { // false is do not append
- await file.WriteAsync (plist);
- }
+ var gp = new GeneratedProject ();
+ gp.Name = projectDefinition.Name;
+ gp.Path = projectPath;
+ gp.XUnit = projectDefinition.IsXUnit;
+ gp.ExtraArgs = projectDefinition.ExtraArgs;
+ gp.TimeoutMultiplier = def.TimeoutMultiplier;
+ gp.GenerationCompleted = Task.Run (async () => {
+ try {
+ var typesPerAssembly = projectDefinition.GetTypeForAssemblies (AssemblyLocator.GetAssembliesRootLocation (platform), platform);
+ var registerCode = RegisterTypeGenerator.GenerateCode (typesPerAssembly, projectDefinition.IsXUnit, GetRegisterTypeTemplate ());
+
+ using (var file = new StreamWriter (registerTypePath, false)) { // false is do not append
+ await file.WriteAsync (registerCode);
+ }
- var info = projectDefinition.GetAssemblyInclusionInformation (platform);
- var generatedProject = GenerateMac (projectDefinition.Name, registerTypePath, info, GetProjectTemplate (platform), infoPlistPath, platform);
- using (var file = new StreamWriter (projectPath, false)) { // false is do not append
- await file.WriteAsync (generatedProject);
+ var plist = InfoPlistGenerator.GenerateCode (GetPlistTemplate (platform), projectDefinition.Name);
+ var infoPlistPath = GetPListPath (generatedCodeDir, platform);
+ using (var file = new StreamWriter (infoPlistPath, false)) { // false is do not append
+ await file.WriteAsync (plist);
+ }
+
+ var info = projectDefinition.GetAssemblyInclusionInformation (platform);
+ var generatedProject = GenerateMac (projectDefinition.Name, registerTypePath, info, GetProjectTemplate (platform), infoPlistPath, platform);
+ using (var file = new StreamWriter (projectPath, false)) { // false is do not append
+ await file.WriteAsync (generatedProject);
+ }
+ gp.Failure ??= info.FailureMessage;
+ gp.Failure ??= typesPerAssembly.FailureMessage;
+ } catch (Exception e) {
+ gp.Failure = e.Message;
}
- failure = failure ?? info.FailureMessage;
- failure = failure ?? typesPerAssembly.FailureMessage;
- } catch (Exception e) {
- failure = e.Message;
- }
- projectPaths.Add ((projectDefinition.Name, projectPath, projectDefinition.IsXUnit, projectDefinition.ExtraArgs, failure, def.TimeoutMultiplier));
+ });
+ projectPaths.Add (gp);
}
return projectPaths;
diff --git a/tests/xharness/Xharness.Tests/Tests/BCLTestImportTargetFactoryTest.cs b/tests/xharness/Xharness.Tests/Tests/BCLTestImportTargetFactoryTest.cs
index 23bd0adb526f..e598e0023edf 100644
--- a/tests/xharness/Xharness.Tests/Tests/BCLTestImportTargetFactoryTest.cs
+++ b/tests/xharness/Xharness.Tests/Tests/BCLTestImportTargetFactoryTest.cs
@@ -82,22 +82,22 @@ public void MacMonoSDKPathSetterTest ()
}
[Test]
- public async Task GenerateTestProjectsAsyncTest ()
+ public void GenerateTestProjectsAsyncTest ()
{
var projects = new GeneratedProjects () {
- ( Name: "First project", Path: "", XUnit: false, ExtraArgs: "", Failure: "", TimeoutMultiplier: 1),
- ( Name: "Second project", Path: "", XUnit: true, ExtraArgs: "", Failure: "", TimeoutMultiplier: 1),
+ new GeneratedProject { Name = "First project", Path = "", XUnit = false, ExtraArgs = "", Failure = "", TimeoutMultiplier = 1, GenerationCompleted = Task.CompletedTask, },
+ new GeneratedProject { Name = "Second project", Path = "", XUnit = true, ExtraArgs = "", Failure = "", TimeoutMultiplier = 1, GenerationCompleted = Task.CompletedTask, },
};
var infos = new List<(string Name, string [] Assemblies, string ExtraArgs, double TimeoutMultiplier)> {
( Name: "First project", Assemblies: new string [] { }, ExtraArgs: "", TimeoutMultiplier: 1),
( Name: "Second project", Assemblies: new string [] { }, ExtraArgs: "", TimeoutMultiplier: 1),
};
- template.Setup (t => t.GenerateTestProjectsAsync (It.IsAny> (), It.IsAny ())).Returns (() => {
- return Task.FromResult (projects);
+ template.Setup (t => t.GenerateTestProjects (It.IsAny> (), It.IsAny ())).Returns (() => {
+ return projects;
});
- var result = await generator.GenerateTestProjectsAsync (infos, Platform.iOS);
+ var result = generator.GenerateTestProjects (infos, Platform.iOS);
Assert.AreEqual (projects.Count, result.Count);
- template.Verify (t => t.GenerateTestProjectsAsync (It.IsAny> (), It.IsAny ()));
+ template.Verify (t => t.GenerateTestProjects (It.IsAny> (), It.IsAny ()));
}
}
}