示例#1
0
        private void Initialize()
        {
            if (_providers.Count > 0)
            {
                return;
            }

            var packageInfoFactory = new NpmPackageInfoFactory();
            var packageSearch      = new NpmPackageSearch();

            IEnumerable <IProviderFactory> factories = new IProviderFactory[] {
                new FileSystemProviderFactory(),
                new CdnjsProviderFactory(),
                new UnpkgProviderFactory(packageSearch, packageInfoFactory),
                new JsDelivrProviderFactory(packageSearch, packageInfoFactory),
            };

            foreach (IProviderFactory factory in factories)
            {
                if (factory != null)
                {
                    _providers.Add(factory.CreateProvider(_hostInteraction));
                }
            }
        }
示例#2
0
        private void Initialize()
        {
            if (_providers.Count > 0)
            {
                return;
            }

            var packageInfoFactory = new NpmPackageInfoFactory(WebRequestHandler.Instance);
            var packageSearch      = new NpmPackageSearch(WebRequestHandler.Instance);

            IEnumerable <IProviderFactory> factories = new IProviderFactory[] {
                new UnpkgProviderFactory(packageSearch, packageInfoFactory),
                new JsDelivrProviderFactory(packageSearch, packageInfoFactory),
                new FileSystemProviderFactory(),
                new CdnjsProviderFactory(),
            };

            foreach (IProviderFactory factory in factories)
            {
                if (factory != null)
                {
                    var provider = factory.CreateProvider(_hostInteraction);
                    if (!string.IsNullOrEmpty(provider.Id))
                    {
                        _providers.Add(provider);
                    }
                }
            }
        }
示例#3
0
        public async Task NpmPackageSearch_GetPackageNamesAsync_NullOrEmptyOrUnmatchedPackage(string searchItem, int expectedCount)
        {
            CancellationToken token = CancellationToken.None;

            IEnumerable <string> packages = await NpmPackageSearch.GetPackageNamesAsync(searchItem, token);

            Assert.AreEqual(expectedCount, packages.Count());
        }
示例#4
0
        public async Task NpmPackageSearch_GetPackageNamesAsync_ScopedPackage()
        {
            string            searchItem = "@angular/";
            CancellationToken token      = CancellationToken.None;

            IEnumerable <string> packages = await NpmPackageSearch.GetPackageNamesAsync(searchItem, token);

            Assert.IsTrue(packages.Count() > 0);
        }
示例#5
0
        public async Task NpmPackageSearch_GetPackageNamesAsync_NullSearchItem_DoesNotMakeWebRequest()
        {
            var mockRequestHandler = new Mock <IWebRequestHandler>();
            var sut = new NpmPackageSearch(mockRequestHandler.Object);

            IEnumerable <NpmPackageInfo> packages = await sut.GetPackageNamesAsync(null, CancellationToken.None);

            mockRequestHandler.Verify(x => x.GetStreamAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Never);
        }
示例#6
0
        public async Task NpmPackageSearch_GetPackageInfoAsync_ScopedPackage()
        {
            string            searchItem = "@angular/cli";
            CancellationToken token      = CancellationToken.None;

            NpmPackageInfo packageInfo = await NpmPackageSearch.GetPackageInfoAsync(searchItem, token);

            Assert.IsTrue(packageInfo.Versions != null);
            Assert.IsTrue(packageInfo.Versions.Count() > 0);
        }
示例#7
0
        public async Task NpmPackageSearch_GetPackageNamesAsync_UnScopedPackage()
        {
            string            searchItem = "jquery";
            CancellationToken token      = CancellationToken.None;

            IEnumerable <string> packages = await NpmPackageSearch.GetPackageNamesAsync(searchItem, token);

            Assert.AreEqual(100, packages.Count());
            Assert.AreEqual("jquery", packages.FirstOrDefault());
        }
示例#8
0
        public DependenciesFactory()
        {
            var packageSearch      = new NpmPackageSearch(WebRequestHandler.Instance);
            var packageInfoFactory = new NpmPackageInfoFactory(WebRequestHandler.Instance);

            ProviderFactories = new IProviderFactory[] {
                new FileSystemProviderFactory(),
                new CdnjsProviderFactory(),
                new UnpkgProviderFactory(packageSearch, packageInfoFactory),
                new JsDelivrProviderFactory(packageSearch, packageInfoFactory),
            };
        }
示例#9
0
        public async Task NpmPackageSearch_GetPackageNamesAsync_ResponseContainsNoObjects_ReturnEmptyListOfPackages()
        {
            string noHitsResponse     = @"{""objects"":[],""total"":0}";
            var    mockRequestHandler = new Mock <IWebRequestHandler>();

            mockRequestHandler.Setup(m => m.GetStreamAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult <Stream>(new MemoryStream(Encoding.Default.GetBytes(noHitsResponse))));
            var sut = new NpmPackageSearch(mockRequestHandler.Object);

            IEnumerable <NpmPackageInfo> packages = await sut.GetPackageNamesAsync("searchTerm", CancellationToken.None);

            Assert.IsFalse(packages.Any());
        }
示例#10
0
        public void Setup()
        {
            string cacheFolder = Environment.ExpandEnvironmentVariables(@"%localappdata%\Microsoft\Library\");

            _projectFolder = Path.Combine(Path.GetTempPath(), "LibraryManager");

            var hostInteraction = new HostInteraction(_projectFolder, cacheFolder);

            var npmPackageSearch   = new NpmPackageSearch();
            var packageInfoFactory = new NpmPackageInfoFactory();

            var dependencies = new Dependencies(hostInteraction, new UnpkgProviderFactory(npmPackageSearch, packageInfoFactory));

            _provider = dependencies.GetProvider("unpkg");

            LibraryIdToNameAndVersionConverter.Instance.Reinitialize(dependencies);
            Directory.CreateDirectory(_projectFolder);
        }
示例#11
0
        public async Task NpmPackageSearch_GetPackageNamesAsync_ScopedPackage()
        {
            // this is a mockup of the response from the npms.io search
            string response = @"{
    ""results"": [
        {
            ""package"": {
                ""name"": ""firstResult"",
                ""scope"": ""unscoped"",
                ""version"": ""1.0.1"",
                ""description"": ""a package"",
            }
            },
        {
            ""package"": {
                ""name"": ""secondResult"",
                ""scope"": ""unscoped"",
                ""version"": ""2.2.0"",
                ""description"": ""another package""
                }
            }
    ],
    ""total"": 2
}";

            var mockRequestHandler = new Mock <IWebRequestHandler>();

            mockRequestHandler.Setup(m => m.GetStreamAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult <Stream>(new MemoryStream(Encoding.Default.GetBytes(response))));
            var sut = new NpmPackageSearch(mockRequestHandler.Object);

            IEnumerable <NpmPackageInfo> result = await sut.GetPackageNamesAsync("@searchTerm/", CancellationToken.None);

            CollectionAssert.AreEquivalent(new[] { "firstResult", "secondResult" },
                                           result.Select(p => p.Name).ToList());
        }
示例#12
0
        public async Task <CompletionSet> GetLibraryCompletionSetAsync(string libraryNameStart, int caretPosition)
        {
            var completions = new List <CompletionItem>();

            var completionSet = new CompletionSet
            {
                Start       = 0,
                Length      = 0,
                Completions = completions
            };

            if (string.IsNullOrEmpty(libraryNameStart))
            {
                // no point in doing the rest of the work, we know it's going to be an empty completion set anyway
                return(completionSet);
            }

            completionSet.Length = libraryNameStart.Length;

            (string name, string version) = _libraryNamingScheme.GetLibraryNameAndVersion(libraryNameStart);

            try
            {
                // library name completion
                if (caretPosition < name.Length + 1)
                {
                    if (IsGitHub(libraryNameStart))
                    {
                        return(completionSet);
                    }

                    IEnumerable <string> packageNames = await NpmPackageSearch.GetPackageNamesAsync(libraryNameStart, CancellationToken.None);

                    foreach (string packageName in packageNames)
                    {
                        var completionItem = new CompletionItem
                        {
                            DisplayText   = packageName,
                            InsertionText = packageName
                        };

                        completions.Add(completionItem);
                    }
                }

                // library version completion
                else
                {
                    completionSet.Start  = name.Length + 1;
                    completionSet.Length = version.Length;

                    IEnumerable <string> versions;

                    if (IsGitHub(name))
                    {
                        versions = await GetGithubLibraryVersionsAsync(name);
                    }
                    else
                    {
                        var libGroup = new JsDelivrLibraryGroup(name);
                        versions = await libGroup.GetLibraryVersions(CancellationToken.None);
                    }

                    foreach (string v in versions)
                    {
                        var completionItem = new CompletionItem
                        {
                            DisplayText   = v,
                            InsertionText = _libraryNamingScheme.GetLibraryId(name, v),
                        };

                        completions.Add(completionItem);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Log(ex.ToString(), LogLevel.Error);
            }

            return(completionSet);
        }