Skip to content

Commit 228caa1

Browse files
plumbing taskenvironment through execution (#12842)
rework of #12608 after merging #12651 fixes #11829, #11830 #12850 #12802 ### Context ### Changes Made 1. refactor communicationutilities to support the taskenvironmentdrivers 2. propagate taskenvironment throughout execution 3. enlightening intrinsic tasks ### Testing simple sample projects using the intrinsictasks build ### Notes "normal tasks" will be enlightened in subsequent PRs included the intrinsic tasks in this PR so it's integration testable --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 0e2b347 commit 228caa1

26 files changed

Lines changed: 424 additions & 227 deletions

src/Build.UnitTests/BackEnd/AssemblyTaskFactory_Tests.cs

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ public class AssemblyTaskFactory_Tests
3939
/// </summary>
4040
private LoadedType _loadedType;
4141

42+
/// <summary>
43+
/// Creates a stub TaskEnvironment for testing.
44+
/// </summary>
45+
private static TaskEnvironment CreateStubTaskEnvironment() => TaskEnvironmentHelper.CreateForTest();
46+
4247
/// <summary>
4348
/// Initialize a task factory
4449
/// </summary>
@@ -245,7 +250,8 @@ public void VerifyGoodTaskInstantiation()
245250
#endif
246251
false,
247252
scheduledNodeId: 1,
248-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
253+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
254+
CreateStubTaskEnvironment());
249255
createdTask.ShouldNotBeNull();
250256
createdTask.ShouldNotBeOfType<TaskHostTask>();
251257
}
@@ -276,7 +282,8 @@ public void VerifyMatchingTaskParametersDontLaunchTaskHost1()
276282
#endif
277283
false,
278284
scheduledNodeId: 1,
279-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
285+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
286+
CreateStubTaskEnvironment());
280287
Assert.NotNull(createdTask);
281288
Assert.False(createdTask is TaskHostTask);
282289
}
@@ -307,7 +314,8 @@ public void VerifyMatchingTaskParametersDontLaunchTaskHost2()
307314
#endif
308315
false,
309316
scheduledNodeId: 1,
310-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
317+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
318+
CreateStubTaskEnvironment());
311319
Assert.NotNull(createdTask);
312320
Assert.False(createdTask is TaskHostTask);
313321
}
@@ -340,7 +348,8 @@ public void VerifyMatchingUsingTaskParametersDontLaunchTaskHost1()
340348
#endif
341349
false,
342350
scheduledNodeId: 1,
343-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
351+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
352+
CreateStubTaskEnvironment());
344353
Assert.NotNull(createdTask);
345354
Assert.False(createdTask is TaskHostTask);
346355
}
@@ -373,7 +382,8 @@ public void VerifyMatchingUsingTaskParametersDontLaunchTaskHost2()
373382
#endif
374383
false,
375384
scheduledNodeId: 1,
376-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
385+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
386+
CreateStubTaskEnvironment());
377387
Assert.NotNull(createdTask);
378388
Assert.False(createdTask is TaskHostTask);
379389
}
@@ -408,7 +418,8 @@ public void VerifyMatchingParametersDontLaunchTaskHost()
408418
#endif
409419
false,
410420
scheduledNodeId: 1,
411-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
421+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
422+
CreateStubTaskEnvironment());
412423
Assert.NotNull(createdTask);
413424
Assert.False(createdTask is TaskHostTask);
414425
}
@@ -441,7 +452,8 @@ public void VerifyNonmatchingUsingTaskParametersLaunchTaskHost()
441452
#endif
442453
false,
443454
scheduledNodeId: 1,
444-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
455+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
456+
CreateStubTaskEnvironment());
445457
Assert.NotNull(createdTask);
446458
Assert.IsType<TaskHostTask>(createdTask);
447459
}
@@ -472,7 +484,8 @@ public void VerifyNonmatchingTaskParametersLaunchTaskHost()
472484
#endif
473485
false,
474486
scheduledNodeId: 1,
475-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
487+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
488+
CreateStubTaskEnvironment());
476489
Assert.NotNull(createdTask);
477490
Assert.IsType<TaskHostTask>(createdTask);
478491
}
@@ -507,7 +520,8 @@ public void VerifyNonmatchingParametersLaunchTaskHost()
507520
#endif
508521
false,
509522
scheduledNodeId: 1,
510-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
523+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
524+
CreateStubTaskEnvironment());
511525
Assert.NotNull(createdTask);
512526
Assert.IsType<TaskHostTask>(createdTask);
513527
}
@@ -538,7 +552,8 @@ public void VerifyExplicitlyLaunchTaskHost()
538552
#endif
539553
false,
540554
scheduledNodeId: 1,
541-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
555+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
556+
CreateStubTaskEnvironment());
542557
Assert.NotNull(createdTask);
543558
Assert.IsType<TaskHostTask>(createdTask);
544559
}
@@ -571,7 +586,8 @@ public void VerifyExplicitlyLaunchTaskHostEvenIfParametersMatch1()
571586
#endif
572587
false,
573588
scheduledNodeId: 1,
574-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
589+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
590+
CreateStubTaskEnvironment());
575591
Assert.NotNull(createdTask);
576592
Assert.IsType<TaskHostTask>(createdTask);
577593
}
@@ -604,7 +620,8 @@ public void VerifyExplicitlyLaunchTaskHostEvenIfParametersMatch2()
604620
#endif
605621
false,
606622
scheduledNodeId: 1,
607-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
623+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
624+
CreateStubTaskEnvironment());
608625
Assert.NotNull(createdTask);
609626
Assert.IsType<TaskHostTask>(createdTask);
610627
}
@@ -638,7 +655,8 @@ public void VerifySameFactoryCanGenerateDifferentTaskInstances()
638655
#endif
639656
false,
640657
scheduledNodeId: 1,
641-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
658+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
659+
CreateStubTaskEnvironment());
642660
Assert.NotNull(createdTask);
643661
Assert.IsNotType<TaskHostTask>(createdTask);
644662
}
@@ -661,7 +679,8 @@ public void VerifySameFactoryCanGenerateDifferentTaskInstances()
661679
#endif
662680
false,
663681
scheduledNodeId: 1,
664-
(string propName) => ProjectPropertyInstance.Create("test", "test"));
682+
(string propName) => ProjectPropertyInstance.Create("test", "test"),
683+
CreateStubTaskEnvironment());
665684
Assert.NotNull(createdTask);
666685
Assert.IsType<TaskHostTask>(createdTask);
667686
}

src/Build.UnitTests/BackEnd/BuildRequestEntry_Tests.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@ public class BuildRequestEntry_Tests
1616
{
1717
private int _nodeRequestId;
1818

19+
/// <summary>
20+
/// Creates a stub TaskEnvironment for testing purposes.
21+
/// </summary>
22+
private static TaskEnvironment CreateStubTaskEnvironment() => TaskEnvironmentHelper.CreateForTest();
23+
1924
[Fact]
2025
public void TestConstructorGood()
2126
{
2227
BuildRequest request = CreateNewBuildRequest(1, Array.Empty<string>());
2328
BuildRequestData data = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
2429
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data, "2.0");
25-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
30+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
2631

2732
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
2833
Assert.Equal(entry.Request, request);
@@ -33,7 +38,7 @@ public void TestConstructorBad()
3338
{
3439
Assert.Throws<ArgumentNullException>(() =>
3540
{
36-
BuildRequestEntry entry = new BuildRequestEntry(null!, null!);
41+
BuildRequestEntry entry = new BuildRequestEntry(null!, null!, null!);
3742
});
3843
}
3944
[Fact]
@@ -42,7 +47,7 @@ public void TestSimpleStateProgression()
4247
// Start in Ready
4348
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
4449
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null), "2.0");
45-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
50+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
4651
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
4752
Assert.Equal(entry.Request, request);
4853
Assert.Null(entry.Result);
@@ -91,7 +96,7 @@ public void TestResolveConfiguration()
9196
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
9297
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
9398
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
94-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
99+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
95100

96101
entry.Continue();
97102
Assert.Equal(BuildRequestEntryState.Active, entry.State);
@@ -113,7 +118,7 @@ public void TestMultipleWaitingRequests()
113118
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
114119
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
115120
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
116-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
121+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
117122

118123
entry.Continue();
119124
Assert.Equal(BuildRequestEntryState.Active, entry.State);
@@ -142,7 +147,7 @@ public void TestMixedWaitingRequests()
142147
{
143148
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
144149
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null), "2.0");
145-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
150+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
146151
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
147152

148153
entry.Continue();
@@ -180,7 +185,7 @@ public void TestNoReadyToWaiting()
180185
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
181186
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
182187
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
183-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
188+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
184189
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
185190

186191
BuildRequest waitingRequest1 = CreateNewBuildRequest(2, new string[1] { "bar" });
@@ -196,7 +201,7 @@ public void TestNoReadyToComplete()
196201
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
197202
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
198203
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
199-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
204+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
200205
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
201206

202207
BuildResult requiredResult = new BuildResult(request);
@@ -213,7 +218,7 @@ public void TestNoWaitingToComplete()
213218
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
214219
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
215220
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
216-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
221+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
217222
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
218223

219224
entry.Continue();
@@ -236,7 +241,7 @@ public void TestNoCompleteToWaiting()
236241
{
237242
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
238243
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null), "2.0");
239-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
244+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
240245
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
241246

242247
entry.Continue();
@@ -256,7 +261,7 @@ public void TestResultsWithNoMatch1()
256261
{
257262
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
258263
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null), "2.0");
259-
BuildRequestEntry entry = new BuildRequestEntry(request, config);
264+
BuildRequestEntry entry = new BuildRequestEntry(request, config, CreateStubTaskEnvironment());
260265
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
261266

262267
entry.Continue();

src/Build.UnitTests/BackEnd/IntrinsicTask_Tests.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3898,6 +3898,11 @@ public void FilterItemPreviouslyModified6()
38983898

38993899
#region Helpers
39003900

3901+
/// <summary>
3902+
/// Creates a stub TaskEnvironment for testing that uses the current process environment.
3903+
/// </summary>
3904+
private static TaskEnvironment CreateStubTaskEnvironment() => TaskEnvironmentHelper.CreateForTest();
3905+
39013906
private static PropertyDictionary<ProjectPropertyInstance> GeneratePropertyGroup()
39023907
{
39033908
PropertyDictionary<ProjectPropertyInstance> properties = new PropertyDictionary<ProjectPropertyInstance>();
@@ -3954,7 +3959,7 @@ private static IntrinsicTask CreateIntrinsicTask(string content)
39543959
ProjectTargetInstanceChild targetChild = projectInstance.Targets["t"].Children.First();
39553960

39563961
NodeLoggingContext nodeContext = new NodeLoggingContext(new MockLoggingService(), 1, false);
3957-
BuildRequestEntry entry = new BuildRequestEntry(new BuildRequest(1 /* submissionId */, 0, 1, new string[] { "t" }, null, BuildEventContext.Invalid, null), new BuildRequestConfiguration(1, new BuildRequestData("projectFile", new Dictionary<string, string>(), "3.5", Array.Empty<string>(), null), "2.0"));
3962+
BuildRequestEntry entry = new BuildRequestEntry(new BuildRequest(1 /* submissionId */, 0, 1, new string[] { "t" }, null, BuildEventContext.Invalid, null), new BuildRequestConfiguration(1, new BuildRequestData("projectFile", new Dictionary<string, string>(), "3.5", Array.Empty<string>(), null), "2.0"), CreateStubTaskEnvironment());
39583963
entry.RequestConfiguration.Project = projectInstance;
39593964
IntrinsicTask task = IntrinsicTask.InstantiateTask(
39603965
targetChild,
@@ -3989,7 +3994,7 @@ internal static void AssertItemEvaluationFromTarget(string projectContents, stri
39893994
var targetChild = projectInstance.Targets["t"].Children.First();
39903995

39913996
var nodeContext = new NodeLoggingContext(new MockLoggingService(), 1, false);
3992-
var entry = new BuildRequestEntry(new BuildRequest(1 /* submissionId */, 0, 1, new string[] { targetName }, null, BuildEventContext.Invalid, null), new BuildRequestConfiguration(1, new BuildRequestData("projectFile", new Dictionary<string, string>(), "3.5", Array.Empty<string>(), null), "2.0"));
3997+
var entry = new BuildRequestEntry(new BuildRequest(1 /* submissionId */, 0, 1, new string[] { targetName }, null, BuildEventContext.Invalid, null), new BuildRequestConfiguration(1, new BuildRequestData("projectFile", new Dictionary<string, string>(), "3.5", Array.Empty<string>(), null), "2.0"), CreateStubTaskEnvironment());
39933998
entry.RequestConfiguration.Project = projectInstance;
39943999
var task = IntrinsicTask.InstantiateTask(
39954000
targetChild,

0 commit comments

Comments
 (0)