Esempio n. 1
0
        /// <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;
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
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));
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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;
 }