Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/Build.UnitTests/Graph/GraphLoadedFromSolution_tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -581,8 +581,8 @@ public void SolutionEdgesShouldNotOverwriteMultitargetingEdges()
Projects = new Dictionary<string, string>
{
{"1", GraphTestingUtilities.CreateProjectFile(_env, 1, new[] {2}).Path},
{"2", GraphTestingUtilities.CreateProjectFile(_env, 2, extraContent: MultitargetingSpecification).Path},
{"3", GraphTestingUtilities.CreateProjectFile(_env, 3, new[] {4}, extraContent: MultitargetingSpecification).Path},
{"2", GraphTestingUtilities.CreateProjectFile(_env, 2, extraContent: MultitargetingSpecificationPropertyGroup).Path},
{"3", GraphTestingUtilities.CreateProjectFile(_env, 3, new[] {4}, extraContent: MultitargetingSpecificationPropertyGroup).Path},
{"4", GraphTestingUtilities.CreateProjectFile(_env, 4).Path}
},
SolutionDependencies = new[] {("1", "2"), ("3", "4")}
Expand Down Expand Up @@ -687,10 +687,10 @@ private void AssertSolutionBasedGraph(
if (projectConfigurations == null || graphFromSolution.ProjectNodes.All(n => n.ProjectReferences.Count == 0))
{
graphFromSolution.GraphRoots.Select(GetProjectPath)
.ShouldBeEquivalentTo(graph.GraphRoots.Select(GetProjectPath));
.ShouldBeSameIgnoringOrder(graph.GraphRoots.Select(GetProjectPath));

graphFromSolution.ProjectNodes.Select(GetProjectPath)
.ShouldBeEquivalentTo(graph.ProjectNodes.Select(GetProjectPath));
.ShouldBeSameIgnoringOrder(graph.ProjectNodes.Select(GetProjectPath));
}

var expectedCurrentConfiguration = currentSolutionConfiguration ?? solutionConfigurations.First();
Expand Down
53 changes: 45 additions & 8 deletions src/Build.UnitTests/Graph/GraphTestingUtilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,30 @@ internal static class GraphTestingUtilities
public static readonly ImmutableDictionary<string, string> EmptyGlobalProperties = new Dictionary<string, string> {{PropertyNames.IsGraphBuild, "true"}}.ToImmutableDictionary();

public static readonly string InnerBuildPropertyName = "InnerBuild";
public static readonly string InnerBuildPropertiesName = "InnerBuildProperties";

public static readonly string MultitargetingSpecification = $@"<PropertyGroup>
public static readonly string MultitargetingSpecificationPropertyGroup = $@"<PropertyGroup>
<InnerBuildProperty>{InnerBuildPropertyName}</InnerBuildProperty>
<InnerBuildPropertyValues>InnerBuildProperties</InnerBuildPropertyValues>
<InnerBuildProperties>a;b</InnerBuildProperties>
<InnerBuildPropertyValues>{InnerBuildPropertiesName}</InnerBuildPropertyValues>
<{InnerBuildPropertiesName}>a;b</{InnerBuildPropertiesName}>
</PropertyGroup>";
public static readonly string HardCodedInnerBuildWithMultitargetingSpecification = $@"<PropertyGroup>
<InnerBuildProperty>{InnerBuildPropertyName}</InnerBuildProperty>
<InnerBuildPropertyValues>{InnerBuildPropertiesName}</InnerBuildPropertyValues>
<{InnerBuildPropertyName}>a</{InnerBuildPropertyName}>
</PropertyGroup>";

public static readonly string EnableTransitiveProjectReferencesPropertyGroup = @"<PropertyGroup>
<AddTransitiveProjectReferencesInStaticGraph>true</AddTransitiveProjectReferencesInStaticGraph>
</PropertyGroup>";

public static void AssertOuterBuildAsNonRoot(
ProjectGraphNode outerBuild,
ProjectGraph graph,
Dictionary<string, string> additionalGlobalProperties = null,
int expectedInnerBuildCount = 2)
{
additionalGlobalProperties = additionalGlobalProperties ?? new Dictionary<string, string>();
additionalGlobalProperties ??= new Dictionary<string, string>();

AssertOuterBuildEvaluation(outerBuild, additionalGlobalProperties);

Expand All @@ -54,7 +64,7 @@ public static void AssertOuterBuildAsNonRoot(
innerBuild.ReferencingProjects.ShouldContain(outerBuildReferencer);
innerBuild.ReferencingProjects.ShouldNotContain(outerBuild);

graph.TestOnly_Edges.TestOnly_HasEdge((outerBuild, innerBuild)).ShouldBeFalse();
graph.TestOnly_Edges.HasEdge((outerBuild, innerBuild)).ShouldBeFalse();

var edgeToOuterBuild = graph.TestOnly_Edges[(outerBuildReferencer, outerBuild)];
var edgeToInnerBuild = graph.TestOnly_Edges[(outerBuildReferencer, innerBuild)];
Expand All @@ -69,7 +79,7 @@ public static void AssertNonMultitargetingNode(ProjectGraphNode node, Dictionary
additionalGlobalProperties = additionalGlobalProperties ?? new Dictionary<string, string>();

IsNotMultitargeting(node).ShouldBeTrue();
node.ProjectInstance.GlobalProperties.ShouldBeEquivalentTo(EmptyGlobalProperties.AddRange(additionalGlobalProperties));
node.ProjectInstance.GlobalProperties.ShouldBeSameIgnoringOrder(EmptyGlobalProperties.AddRange(additionalGlobalProperties));
node.ProjectInstance.GetProperty(InnerBuildPropertyName).ShouldBeNull();
}

Expand All @@ -81,7 +91,7 @@ public static void AssertOuterBuildEvaluation(ProjectGraphNode outerBuild, Dicti
IsInnerBuild(outerBuild).ShouldBeFalse();

outerBuild.ProjectInstance.GetProperty(InnerBuildPropertyName).ShouldBeNull();
outerBuild.ProjectInstance.GlobalProperties.ShouldBeEquivalentTo(EmptyGlobalProperties.AddRange(additionalGlobalProperties));
outerBuild.ProjectInstance.GlobalProperties.ShouldBeSameIgnoringOrder(EmptyGlobalProperties.AddRange(additionalGlobalProperties));
}

public static void AssertInnerBuildEvaluation(
Expand All @@ -100,7 +110,7 @@ public static void AssertInnerBuildEvaluation(

if (InnerBuildPropertyIsSetViaGlobalProperty)
{
innerBuild.ProjectInstance.GlobalProperties.ShouldBeEquivalentTo(
innerBuild.ProjectInstance.GlobalProperties.ShouldBeSameIgnoringOrder(
EmptyGlobalProperties
.Add(InnerBuildPropertyName, innerBuildPropertyValue)
.AddRange(additionalGlobalProperties));
Expand Down Expand Up @@ -205,5 +215,32 @@ internal static TransientTestFile CreateProjectFile(
defaultTargets ?? "Build",
extraContent);
}

internal static IEnumerable<ProjectGraphNode> ComputeClosure(ProjectGraphNode node)
{
foreach (var reference in node.ProjectReferences)
{
yield return reference;

foreach (var closureReference in ComputeClosure(reference))
{
yield return closureReference;
}
}
}

internal static void AssertReferencesIgnoringOrder(this ProjectGraph graph, Dictionary<int, int[]> expectedReferencesForNode)
{
foreach (var kvp in expectedReferencesForNode)
{
var node = GetFirstNodeWithProjectNumber(graph, kvp.Key);
node.AssertReferencesIgnoringOrder(kvp.Value);
}
}

internal static void AssertReferencesIgnoringOrder(this ProjectGraphNode node, int[] expectedReferences)
{
node.ProjectReferences.Select(GetProjectNumber).ShouldBeSameIgnoringOrder(expectedReferences);
}
}
}
2 changes: 1 addition & 1 deletion src/Build.UnitTests/Graph/ParallelWorkSet_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ private void TestParallelWorkSet(ParallelWorkSetTestCase tt)

_workSet.WaitForAllWorkAndComplete();
_workSet.IsCompleted.ShouldBeTrue();
_workSet.CompletedWork.ShouldBeEquivalentTo((IReadOnlyCollection<KeyValuePair<string, string>>) tt.ExpectedCompletedWork);
_workSet.CompletedWork.ShouldBeSameIgnoringOrder((IReadOnlyCollection<KeyValuePair<string, string>>) tt.ExpectedCompletedWork);
}
}
}
Loading