-
Notifications
You must be signed in to change notification settings - Fork 1k
/
GivenUnresolvedSDKProjectItemsAndImplicitPackages.cs
114 lines (101 loc) · 4.18 KB
/
GivenUnresolvedSDKProjectItemsAndImplicitPackages.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using FluentAssertions;
using Microsoft.Build.Framework;
using Xunit;
namespace Microsoft.NET.Build.Tasks.UnitTests
{
public class GivenUnresolvedSDKProjectItemsAndImplicitPackages
{
[Fact]
public void ItShouldCombineSdkReferencesWithImplicitPackageReferences()
{
// Arrange
var sdkReference1 = new MockTaskItem(
itemSpec: "SdkReference1",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.Version, "2.0.1" }
});
var sdkReference2 = new MockTaskItem(
itemSpec: "SdkReference2",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.Version, "1.0.1" }
});
var packageReference1 = new MockTaskItem(
itemSpec: "PackageReference1",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.IsImplicitlyDefined, "True" },
{ MetadataKeys.SDKPackageItemSpec, "" },
{ MetadataKeys.Name, "PackageReference1" }
});
var packageReference2 = new MockTaskItem(
itemSpec: "PackageReference2",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.IsImplicitlyDefined, "aaa" },
{ MetadataKeys.Version, "3.0.1" }
});
var packageReference3 = new MockTaskItem(
itemSpec: "PackageReference3",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.IsImplicitlyDefined, "False" },
{ MetadataKeys.Version, "1.0.1" }
});
var defaultImplicitPackage1 = new MockTaskItem(
itemSpec: "DefaultImplicitPackage1",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.SDKPackageItemSpec, "" },
{ MetadataKeys.Name, "DefaultImplicitPackage1" },
{ MetadataKeys.Version, "1.2.3" }
});
var task = new CollectSDKReferencesDesignTime
{
SdkReferences = new[]
{
sdkReference1,
sdkReference2
},
PackageReferences = new ITaskItem[]
{
packageReference1,
packageReference2,
packageReference3,
defaultImplicitPackage1
},
DefaultImplicitPackages = "DefaultImplicitPackage1;SomeOtherImplicitPackage"
};
// Act
var result = task.Execute();
// Assert
result.Should().BeTrue();
task.SDKReferencesDesignTime.Count().Should().Be(4);
VerifyTaskItem(sdkReference1, task.SDKReferencesDesignTime[0]);
VerifyTaskItem(sdkReference2, task.SDKReferencesDesignTime[1]);
VerifyTaskItem(packageReference1, task.SDKReferencesDesignTime[2], true);
VerifyTaskItem(defaultImplicitPackage1, task.SDKReferencesDesignTime[3], true);
}
private void VerifyTaskItem(ITaskItem input, ITaskItem output, bool checkImplicit = false)
{
// remove unnecessary metadata to keep only ones that would be in result task items
var removeMetadata = new[] { MetadataKeys.IsImplicitlyDefined };
foreach (var rm in removeMetadata)
{
input.RemoveMetadata(rm);
}
input.ItemSpec.Should().Be(output.ItemSpec);
foreach (var metadata in input.MetadataNames)
{
input.GetMetadata(metadata.ToString()).Should().Be(output.GetMetadata(metadata.ToString()));
}
if (checkImplicit)
{
output.GetMetadata(MetadataKeys.IsImplicitlyDefined).Should().Be("True");
}
}
}
}