1 using Microsoft.Build.Framework;
2 using Microsoft.Build.Tasks;
3 using Microsoft.Build.Utilities;
4 using Xunit;
5 
6 namespace Microsoft.Build.UnitTests.ResolveAssemblyReference_Tests
7 {
8     /// <summary>
9     /// Unit tests for the ResolveAssemblyReference task.
10     /// </summary>
11     public sealed class ReferenceTests : ResolveAssemblyReferenceTestFixture
12     {
13         /// <summary>
14         /// Check to make sure if, the specific version metadata is set on a primary reference, that true is returned from CheckForSpecificMetadataOnParent
15         /// </summary>
16         [Fact]
CheckForSpecificMetadataOnParent()17         public void CheckForSpecificMetadataOnParent()
18         {
19             Reference reference = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
20             ITaskItem taskItem = new TaskItem("TestReference");
21             taskItem.SetMetadata("SpecificVersion", "true");
22             reference.MakePrimaryAssemblyReference(taskItem, true, ".dll");
23             Assert.True(reference.CheckForSpecificVersionMetadataOnParentsReference(false));
24         }
25 
26         /// <summary>
27         /// Check to make sure if, the specific version metadata is set on all primary references which a dependency depends on, that true is returned from CheckForSpecificMetadataOnParent
28         /// </summary>
29         [Fact]
CheckForSpecificMetadataOnParentAllParentsHaveMetadata()30         public void CheckForSpecificMetadataOnParentAllParentsHaveMetadata()
31         {
32             Reference primaryReference1 = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
33             ITaskItem taskItem = new TaskItem("TestPrimary1");
34             taskItem.SetMetadata("SpecificVersion", "true");
35             primaryReference1.MakePrimaryAssemblyReference(taskItem, true, ".dll");
36             primaryReference1.FullPath = "FullPath";
37 
38             Reference primaryReference2 = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
39             ITaskItem taskItem2 = new TaskItem("TestPrimary2");
40             taskItem2.SetMetadata("SpecificVersion", "true");
41             primaryReference2.MakePrimaryAssemblyReference(taskItem2, true, ".dll");
42             primaryReference2.FullPath = "FullPath";
43 
44             Reference dependentReference = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
45             dependentReference.FullPath = "FullPath";
46 
47             dependentReference.MakeDependentAssemblyReference(primaryReference1);
48             dependentReference.MakeDependentAssemblyReference(primaryReference2);
49 
50             Assert.True(dependentReference.CheckForSpecificVersionMetadataOnParentsReference(false));
51         }
52 
53         /// <summary>
54         /// Check to make sure if, the specific version metadata is set on some primary references which a dependency depends on, that false is returned from CheckForSpecificMetadataOnParent
55         /// </summary>
56         [Fact]
CheckForSpecificMetadataOnParentNotAllParentsHaveMetadata()57         public void CheckForSpecificMetadataOnParentNotAllParentsHaveMetadata()
58         {
59             Reference primaryReference1 = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
60             ITaskItem taskItem = new TaskItem("TestPrimary1");
61             taskItem.SetMetadata("SpecificVersion", "false");
62             primaryReference1.MakePrimaryAssemblyReference(taskItem, false, ".dll");
63             primaryReference1.FullPath = "FullPath";
64 
65             Reference primaryReference2 = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
66             ITaskItem taskItem2 = new TaskItem("TestPrimary2");
67             taskItem2.SetMetadata("SpecificVersion", "true");
68             primaryReference2.MakePrimaryAssemblyReference(taskItem2, true, ".dll");
69             primaryReference2.FullPath = "FullPath";
70 
71             Reference dependentReference = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
72             dependentReference.FullPath = "FullPath";
73 
74             dependentReference.MakeDependentAssemblyReference(primaryReference1);
75             dependentReference.MakeDependentAssemblyReference(primaryReference2);
76 
77             Assert.False(dependentReference.CheckForSpecificVersionMetadataOnParentsReference(false)); // "Expected check to return false but it returned true."
78         }
79 
80         /// <summary>
81         /// Check to make sure if, the specific version metadata is set on some primary references which a dependency depends on, that false is returned from CheckForSpecificMetadataOnParent
82         /// </summary>
83         [Fact]
CheckForSpecificMetadataOnParentNotAllParentsHaveMetadata2()84         public void CheckForSpecificMetadataOnParentNotAllParentsHaveMetadata2()
85         {
86             Reference primaryReference1 = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
87             ITaskItem taskItem = new TaskItem("TestPrimary1");
88             primaryReference1.MakePrimaryAssemblyReference(taskItem, false, ".dll");
89             primaryReference1.FullPath = "FullPath";
90 
91             Reference primaryReference2 = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
92             ITaskItem taskItem2 = new TaskItem("TestPrimary2");
93             taskItem2.SetMetadata("SpecificVersion", "true");
94             primaryReference2.MakePrimaryAssemblyReference(taskItem2, true, ".dll");
95             primaryReference2.FullPath = "FullPath";
96 
97             Reference dependentReference = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
98             dependentReference.FullPath = "FullPath";
99 
100             dependentReference.MakeDependentAssemblyReference(primaryReference1);
101             dependentReference.MakeDependentAssemblyReference(primaryReference2);
102 
103             Assert.False(dependentReference.CheckForSpecificVersionMetadataOnParentsReference(false)); // "Expected check to return false but it returned true."
104         }
105 
106         /// <summary>
107         /// Check to make sure if, the specific version metadata is set on some primary references which a dependency depends on, that true is returned from CheckForSpecificMetadataOnParent if the anyParentHasmetadata parameter is set to true.
108         /// </summary>
109         [Fact]
CheckForSpecificMetadataOnParentNotAllParentsHaveMetadata3()110         public void CheckForSpecificMetadataOnParentNotAllParentsHaveMetadata3()
111         {
112             Reference primaryReference1 = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
113             ITaskItem taskItem = new TaskItem("TestPrimary1");
114             taskItem.SetMetadata("SpecificVersion", "false");
115             primaryReference1.MakePrimaryAssemblyReference(taskItem, false, ".dll");
116             primaryReference1.FullPath = "FullPath";
117 
118             Reference primaryReference2 = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
119             ITaskItem taskItem2 = new TaskItem("TestPrimary2");
120             taskItem2.SetMetadata("SpecificVersion", "true");
121             primaryReference2.MakePrimaryAssemblyReference(taskItem2, true, ".dll");
122             primaryReference2.FullPath = "FullPath";
123 
124             Reference dependentReference = new Reference(isWinMDFile, fileExists, getRuntimeVersion);
125             dependentReference.FullPath = "FullPath";
126 
127             dependentReference.MakeDependentAssemblyReference(primaryReference1);
128             dependentReference.MakeDependentAssemblyReference(primaryReference2);
129 
130             Assert.True(dependentReference.CheckForSpecificVersionMetadataOnParentsReference(true)); // "Expected check to return false but it returned true."
131         }
132     }
133 }