[Test]
public void TaskOutputsToLoggers ()
{
- string project_xml = @"<Project DefaultTargets='Foo;Bar' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
- <Import Project='$(MSBuildToolsPath)\Microsoft.Common.targets' />
+ string project_xml = @"<Project DefaultTargets='Foo' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+ <Import Project='$(MSBuildToolsPath)\Microsoft.CSharp.targets' />
<Target Name='Foo'>
<ItemGroup>
<Foo Condition='$(X)' Include='foo.txt' />
</Project>";
var xml = XmlReader.Create (new StringReader (project_xml));
var root = ProjectRootElement.Create (xml);
+ root.FullPath = "BuildSubmissionTest.TaskOutputsToLoggers.proj";
var proj = new ProjectInstance (root);
+ Assert.AreEqual ("$(X)", root.Targets.First ().ItemGroups.First ().Items.First ().Condition, "#0");
var sw = new StringWriter ();
- Assert.IsFalse (proj.Build (new ILogger [] {new ConsoleLogger (default (LoggerVerbosity), msg => sw.Write (msg), null, null)}), "#1");
+ Assert.IsFalse (proj.Build (new ILogger [] {new ConsoleLogger (LoggerVerbosity.Diagnostic, sw.WriteLine, null, null)}), "#1");
Assert.IsTrue (sw.ToString ().Contains ("$(X)"), "#2");
}
[Test]
public void EndBuildWaitsForSubmissionCompletion ()
{
- // Windows does not have useful sleep or alternative, so skip it
- bool is_windows = true;
- switch (Environment.OSVersion.Platform) {
- case PlatformID.Unix:
- case PlatformID.MacOSX:
- is_windows = false;
- break;
- }
string project_xml = string.Format (@"<Project DefaultTargets='Wait1Sec' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
<Target Name='Wait1Sec'>
<Exec Command='{0}' />
</Target>
-</Project>", is_windows ? "powershell -command \"Start-Sleep -s 1\"" : "/bin/sleep 1");
+</Project>", Environment.OSVersion.Platform == PlatformID.Win32NT ? "powershell -command \"Start-Sleep -s 1\"" : "/bin/sleep 1");
var xml = XmlReader.Create (new StringReader (project_xml));
var root = ProjectRootElement.Create (xml);
+ root.FullPath = "BuildSubmissionTest.EndBuildWaitsForSubmissionCompletion.proj";
var proj = new ProjectInstance (root);
var bm = new BuildManager ();
bm.BeginBuild (new BuildParameters ());
- DateTime waitDone = DateTime.MinValue;
- DateTime beforeExec = DateTime.Now;
+ var waitDone = TimeSpan.MinValue;
+ var sw = System.Diagnostics.Stopwatch.StartNew ();
var sub = bm.PendBuildRequest (new BuildRequestData (proj, new string [] { "Wait1Sec" }));
- sub.ExecuteAsync (delegate { waitDone = DateTime.Now; }, null);
+ sub.ExecuteAsync (cb => waitDone = sw.Elapsed, null);
bm.EndBuild ();
- Assert.IsTrue (sub.BuildResult.OverallResult == BuildResultCode.Success, "#1");
- DateTime endBuildDone = DateTime.Now;
- Assert.IsTrue (endBuildDone - beforeExec >= TimeSpan.FromSeconds (1), "#2");
- Assert.IsTrue (endBuildDone > waitDone, "#3");
+ Assert.AreEqual (BuildResultCode.Success, sub.BuildResult.OverallResult, "#1");
+ var endBuildDone = sw.Elapsed;
+ AssertHelper.GreaterOrEqual (endBuildDone, TimeSpan.FromSeconds (1), "#2");
+ AssertHelper.GreaterOrEqual (waitDone, TimeSpan.FromSeconds (1), "#3");
+ AssertHelper.GreaterOrEqual (endBuildDone, waitDone, "#4");
+ AssertHelper.LessOrEqual (endBuildDone, TimeSpan.FromSeconds (2), "#5");
+ AssertHelper.LessOrEqual (waitDone, TimeSpan.FromSeconds (2), "#6");
+ }
+
+ [Test]
+ public void BuildParameterLoggersExplicitlyRequired ()
+ {
+ string project_xml = @"<Project DefaultTargets='Foo' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+ <Import Project='$(MSBuildToolsPath)\Microsoft.CSharp.targets' />
+ <Target Name='Foo'>
+ <ItemGroup>
+ <Foo Condition='$(X)' Include='foo.txt' />
+ </ItemGroup>
+ </Target>
+</Project>";
+ var xml = XmlReader.Create (new StringReader (project_xml));
+ var root = ProjectRootElement.Create (xml);
+ root.FullPath = "BuildSubmissionTest.BuildParameterLoggersExplicitlyRequired.proj";
+ var pc = new ProjectCollection ();
+ var sw = new StringWriter ();
+ pc.RegisterLogger (new ConsoleLogger (LoggerVerbosity.Diagnostic, sw.WriteLine, null, null));
+ var proj = new ProjectInstance (root);
+ var bm = new BuildManager ();
+ var bp = new BuildParameters (pc);
+ var br = new BuildRequestData (proj, new string [] {"Foo"});
+ Assert.AreEqual (BuildResultCode.Failure, bm.Build (bp, br).OverallResult, "#1");
+ // the logger is *ignored*
+ Assert.IsFalse (sw.ToString ().Contains ("$(X)"), "#2");
+ }
+
+ [Test]
+ public void ProjectInstanceBuildLoggersExplicitlyRequired ()
+ {
+ string project_xml = @"<Project DefaultTargets='Foo' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+ <Import Project='$(MSBuildToolsPath)\Microsoft.CSharp.targets' />
+ <Target Name='Foo'>
+ <ItemGroup>
+ <Foo Condition='$(X)' Include='foo.txt' />
+ </ItemGroup>
+ </Target>
+</Project>";
+ var xml = XmlReader.Create (new StringReader (project_xml));
+ var root = ProjectRootElement.Create (xml);
+ root.FullPath = "BuildSubmissionTest.TaskOutputsToLoggers.proj";
+ var pc = new ProjectCollection ();
+ var sw = new StringWriter ();
+ pc.RegisterLogger (new ConsoleLogger (LoggerVerbosity.Diagnostic, sw.WriteLine, null, null));
+ var proj = new ProjectInstance (root);
+ Assert.IsFalse (proj.Build (), "#1");
+ // the logger is *ignored* again
+ Assert.IsFalse (sw.ToString ().Contains ("$(X)"), "#2");
}
}
}