public void MetadataReferenceCache_ReturnsCachedVersion()
        {
            // Arrange
            var version1 = "3.2.1";
            var version2 = "3.2.1";

            var cache = new MetadataReferenceCache();

            // Act
            var cachedVersion1 = cache.GetVersion(version1);
            var cachedVersion2 = cache.GetVersion(version2);

            // Assert
            Assert.Equal(version1, version2);
            Assert.Same(cachedVersion1, cachedVersion2);
        }
        public void MetadataReferenceCache_ReturnsCachedParsedVersion()
        {
            // Arrange
            var version        = new NuGetVersion(3, 2, 1);
            var versionString1 = version.ToString();
            var versionString2 = version.ToString();

            var cache = new MetadataReferenceCache();

            // Act
            var cachedVersion1 = cache.GetVersion(versionString1);
            var cachedVersion2 = cache.GetVersion(versionString2);

            // Assert
            Assert.Equal(versionString1, versionString2);
            Assert.NotSame(versionString1, versionString2);
            Assert.Same(cachedVersion1, cachedVersion2);
        }
        public void MetadataReferenceCache_ReturnsNonNormalizedVersion()
        {
            // Arrange
            var version1 = "1.0";
            var version2 = "1.0.0";
            var version3 = "1.0.0.0";

            var cache = new MetadataReferenceCache();

            // Act
            var cachedVersion1 = cache.GetVersion(version1);
            var cachedVersion2 = cache.GetVersion(version2);
            var cachedVersion3 = cache.GetVersion(version3);

            // Assert
            Assert.Equal("1.0", cachedVersion1.ToString());
            Assert.Equal("1.0.0", cachedVersion2.ToString());
            Assert.Equal("1.0.0.0", cachedVersion3.ToString());
        }
        public void MetadataReferenceCache_ParsesVersion()
        {
            // Arrange
            var version = new NuGetVersion(3, 2, 1);

            var cache = new MetadataReferenceCache();

            // Act
            var cachedVersion = cache.GetVersion(version.ToString());

            // Assert
            Assert.Equal(version, cachedVersion);
        }
예제 #5
0
        private static V2FeedPackageInfo ParsePackage(XElement element, MetadataReferenceCache metadataCache)
        {
            var properties   = element.Element(_xnameProperties);
            var idElement    = properties.Element(_xnameId);
            var titleElement = element.Element(_xnameTitle);

            // If 'Id' element exist, use its value as accurate package Id
            // Otherwise, use the value of 'title' if it exist
            // Use the given Id as final fallback if all elements above don't exist
            string       identityId    = metadataCache.GetString(idElement?.Value ?? titleElement?.Value);
            string       versionString = properties.Element(_xnameVersion).Value;
            NuGetVersion version       = metadataCache.GetVersion(metadataCache.GetString(versionString));
            string       downloadUrl   = metadataCache.GetString(element.Element(_xnameContent).Attribute("src").Value);

            string title          = metadataCache.GetString(titleElement?.Value);
            string summary        = metadataCache.GetString(GetString(element, _xnameSummary));
            string description    = metadataCache.GetString(GetString(properties, _xnameDescription));
            string iconUrl        = metadataCache.GetString(GetString(properties, _xnameIconUrl));
            string licenseUrl     = metadataCache.GetString(GetString(properties, _xnameLicenseUrl));
            string projectUrl     = metadataCache.GetString(GetString(properties, _xnameProjectUrl));
            string reportAbuseUrl = metadataCache.GetString(GetString(properties, _xnameReportAbuseUrl));
            string tags           = metadataCache.GetString(GetString(properties, _xnameTags));
            string dependencies   = metadataCache.GetString(GetString(properties, _xnameDependencies));

            string downloadCount            = metadataCache.GetString(GetString(properties, _xnameDownloadCount));
            bool   requireLicenseAcceptance = StringComparer.OrdinalIgnoreCase.Equals(bool.TrueString, GetString(properties, _xnameRequireLicenseAcceptance));

            string packageHash          = metadataCache.GetString(GetString(properties, _xnamePackageHash));
            string packageHashAlgorithm = metadataCache.GetString(GetString(properties, _xnamePackageHashAlgorithm));

            NuGetVersion minClientVersion = null;

            var minClientVersionString = GetString(properties, _xnameMinClientVersion);

            if (!string.IsNullOrEmpty(minClientVersionString))
            {
                if (NuGetVersion.TryParse(minClientVersionString, out minClientVersion))
                {
                    minClientVersion = metadataCache.GetVersion(minClientVersionString);
                }
            }

            DateTimeOffset?created    = GetDate(properties, _xnameCreated);
            DateTimeOffset?lastEdited = GetDate(properties, _xnameLastEdited);
            DateTimeOffset?published  = GetDate(properties, _xnamePublished);

            IEnumerable <string> owners  = null;
            IEnumerable <string> authors = null;

            var authorNode = element.Element(_xnameAuthor);

            if (authorNode != null)
            {
                authors = authorNode.Elements(_xnameName).Select(e => metadataCache.GetString(e.Value));
            }

            return(new V2FeedPackageInfo(new PackageIdentity(identityId, version), title, summary, description, authors,
                                         owners, iconUrl, licenseUrl, projectUrl, reportAbuseUrl, tags, created, lastEdited, published,
                                         dependencies, requireLicenseAcceptance, downloadUrl, downloadCount, packageHash, packageHashAlgorithm,
                                         minClientVersion));
        }