/// <summary> /// Finds all expansions using the mapping provider /// </summary> private IEnumerable <NuGetFramework> ExpandInternal(NuGetFramework framework) { // check the framework directly, this includes profiles which the range doesn't return IEnumerable <NuGetFramework> directlyEquivalent = null; if (_mappings.TryGetEquivalentFrameworks(framework, out directlyEquivalent)) { foreach (var eqFw in directlyEquivalent) { yield return(eqFw); } } // 0.0 through the current framework FrameworkRange frameworkRange = new FrameworkRange( new NuGetFramework(framework.Framework, new Version(0, 0), framework.Profile, framework.Platform, framework.PlatformVersion), framework); IEnumerable <NuGetFramework> equivalent = null; if (_mappings.TryGetEquivalentFrameworks(frameworkRange, out equivalent)) { foreach (var eqFw in equivalent) { yield return(eqFw); } } // find all possible sub set frameworks if no profile is used if (!framework.HasProfile) { IEnumerable <string> subSetFrameworks = null; if (_mappings.TryGetSubSetFrameworks(framework.Framework, out subSetFrameworks)) { foreach (var subFramework in subSetFrameworks) { // clone the framework but use the sub framework instead yield return(new NuGetFramework(subFramework, framework.Version, framework.Profile, framework.Platform, framework.PlatformVersion)); } } } // explicit compatiblity mappings IEnumerable <FrameworkRange> ranges = null; if (_mappings.TryGetCompatibilityMappings(framework, out ranges)) { foreach (var range in ranges) { yield return(range.Min); if (!range.Min.Equals(range.Max)) { yield return(range.Max); } } } yield break; }
public bool TryGetEquivalentFrameworks(FrameworkRange range, out IEnumerable <NuGetFramework> frameworks) { if (range == null) { throw new ArgumentNullException("range"); } HashSet <NuGetFramework> relevant = new HashSet <NuGetFramework>(NuGetFramework.Comparer); foreach (var framework in _equivalentFrameworks.Keys.Where(f => range.Satisfies(f))) { relevant.Add(framework); } HashSet <NuGetFramework> results = new HashSet <NuGetFramework>(NuGetFramework.Comparer); foreach (var framework in relevant) { IEnumerable <NuGetFramework> values = null; if (TryGetEquivalentFrameworks(framework, out values)) { foreach (var val in values) { results.Add(val); } } } frameworks = results; return(results.Count > 0); }
public void FrameworkRange_BasicDoesNotSatisfy(string framework) { // Arrange var test = NuGetFramework.ParseFolder(framework); var range = new FrameworkRange(NuGetFramework.ParseFolder("net35"), NuGetFramework.ParseFolder("net451")); // Act & Assert Assert.False(range.Satisfies(test)); }
private static KeyValuePair <int, FrameworkRange> CreateStandardMapping( int profileNumber, NuGetFramework netStandard) { var range = new FrameworkRange( FrameworkConstants.CommonFrameworks.NetStandard10, netStandard); return(new KeyValuePair <int, FrameworkRange>(profileNumber, range)); }
public void FrameworkRange_BasicSatisfiesExclusive(string framework) { // Arrange var test = NuGetFramework.ParseFolder(framework); var range = new FrameworkRange( NuGetFramework.ParseFolder("net35"), NuGetFramework.ParseFolder("net451"), includeMin: false, includeMax: false); // Act & Assert Assert.True(range.Satisfies(test)); }
public void FrameworkRange_HashCodeDiffersOnExlusiveness() { // Arrange var range1 = new FrameworkRange( NuGetFramework.ParseFolder("net35"), NuGetFramework.ParseFolder("net451"), includeMin: false, includeMax: false); var range2 = new FrameworkRange( NuGetFramework.ParseFolder("net35"), NuGetFramework.ParseFolder("net451"), includeMin: true, includeMax: false); var range3 = new FrameworkRange( NuGetFramework.ParseFolder("net35"), NuGetFramework.ParseFolder("net451"), includeMin: true, includeMax: true); var range4 = new FrameworkRange( NuGetFramework.ParseFolder("net35"), NuGetFramework.ParseFolder("net451"), includeMin: false, includeMax: true); // Act // Find the unique set of hash codes var hashCodes = new HashSet <int>() { range1.GetHashCode(), range2.GetHashCode(), range3.GetHashCode(), range4.GetHashCode(), }; // Assert Assert.Equal(4, hashCodes.Count); Assert.NotEqual(range1, range2); Assert.NotEqual(range1, range3); Assert.NotEqual(range1, range4); Assert.NotEqual(range2, range4); Assert.NotEqual(range2, range3); Assert.NotEqual(range3, range4); }
/// <summary> /// Creates a one way compatibility mapping. /// Ex: net -supports-> native /// </summary> /// <param name="framework">Project framework</param> /// <param name="supportedFramework">Framework that is supported by the project framework</param> public OneWayCompatibilityMappingEntry(FrameworkRange targetFramework, FrameworkRange supportedFramework) { _targetFramework = targetFramework; _supportedFramework = supportedFramework; }