Skip to content

Commit

Permalink
[xharness] Disable default inclusion behavior for the introspection .…
Browse files Browse the repository at this point in the history
…NET tests. (#9137)

It gets too annoying to keep track of which files are where with the project
cloning we're doing, if files are implicitly included.
  • Loading branch information
rolfbjarne authored and mandel-macaque committed Oct 5, 2020
1 parent 7455ff8 commit 8a00bf2
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 44 deletions.
90 changes: 46 additions & 44 deletions tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/TestProject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,50 +95,52 @@ public async Task CreateCopyAsync (ILog log, IProcessManager processManager, ITe
doc.ResolveAllPaths (original_path);

if (doc.IsDotNetProject ()) {
// Many types of files below the csproj directory are included by default,
// which means that we have to include them manually in the cloned csproj,
// because the cloned project is stored in a very different directory.
var test_dir = System.IO.Path.GetDirectoryName (original_path);

// Get all the files in the project directory from git
using var process = new Process ();
process.StartInfo.FileName = "git";
process.StartInfo.Arguments = "ls-files";
process.StartInfo.WorkingDirectory = test_dir;
var stdout = new MemoryLog () { Timestamp = false };
var result = await processManager.RunAsync (process, log, stdout, stdout, timeout: TimeSpan.FromSeconds (15));
if (!result.Succeeded)
throw new Exception ($"Failed to list the files in the directory {test_dir} (TimedOut: {result.TimedOut} ExitCode: {result.ExitCode}):\n{stdout}");

var files = stdout.ToString ().Split ('\n');
foreach (var file in files) {
var ext = System.IO.Path.GetExtension (file);
var full_path = System.IO.Path.Combine (test_dir, file);
var windows_file = full_path.Replace ('/', '\\');

if (file.Contains (".xcasset")) {
doc.AddInclude ("ImageAsset", file, windows_file, true);
continue;
}

switch (ext.ToLowerInvariant ()) {
case ".cs":
doc.AddInclude ("Compile", file, windows_file, true);
break;
case ".plist":
doc.AddInclude ("None", file, windows_file, true);
break;
case ".storyboard":
doc.AddInclude ("InterfaceDefinition", file, windows_file, true);
break;
case ".gitignore":
case ".csproj":
case ".props": // Directory.Build.props
case "": // Makefile
break; // ignore these files
default:
Console.WriteLine ($"Unknown file: {file} (extension: {ext}). There might be a default inclusion behavior for this file.");
break;
if (doc.GetEnableDefaultItems () != false) {
// Many types of files below the csproj directory are included by default,
// which means that we have to include them manually in the cloned csproj,
// because the cloned project is stored in a very different directory.
var test_dir = System.IO.Path.GetDirectoryName (original_path);

// Get all the files in the project directory from git
using var process = new Process ();
process.StartInfo.FileName = "git";
process.StartInfo.Arguments = "ls-files";
process.StartInfo.WorkingDirectory = test_dir;
var stdout = new MemoryLog () { Timestamp = false };
var result = await processManager.RunAsync (process, log, stdout, stdout, timeout: TimeSpan.FromSeconds (15));
if (!result.Succeeded)
throw new Exception ($"Failed to list the files in the directory {test_dir} (TimedOut: {result.TimedOut} ExitCode: {result.ExitCode}):\n{stdout}");

var files = stdout.ToString ().Split ('\n');
foreach (var file in files) {
var ext = System.IO.Path.GetExtension (file);
var full_path = System.IO.Path.Combine (test_dir, file);
var windows_file = full_path.Replace ('/', '\\');

if (file.Contains (".xcasset")) {
doc.AddInclude ("ImageAsset", file, windows_file, true);
continue;
}

switch (ext.ToLowerInvariant ()) {
case ".cs":
doc.AddInclude ("Compile", file, windows_file, true);
break;
case ".plist":
doc.AddInclude ("None", file, windows_file, true);
break;
case ".storyboard":
doc.AddInclude ("InterfaceDefinition", file, windows_file, true);
break;
case ".gitignore":
case ".csproj":
case ".props": // Directory.Build.props
case "": // Makefile
break; // ignore these files
default:
Console.WriteLine ($"Unknown file: {file} (extension: {ext}). There might be a default inclusion behavior for this file.");
break;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,14 @@ public static bool IsDotNetProject (this XmlDocument csproj)
return attrib != null;
}

public static bool? GetEnableDefaultItems (this XmlDocument csproj)
{
var node = csproj.SelectSingleNode ($"/*/*/*[local-name() = 'EnableDefaultItems']");
if (node == null)
return null;
return string.Equals (node.InnerText, "true", StringComparison.OrdinalIgnoreCase);
}

static XmlNode GetInfoPListNode (this XmlDocument csproj, bool throw_if_not_found = false)
{
var logicalNames = csproj.SelectNodes ("//*[local-name() = 'LogicalName']");
Expand Down

0 comments on commit 8a00bf2

Please sign in to comment.