;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 David Thompson ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2019 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (test-pypi) #:use-module (guix import pypi) #:use-module (guix base32) #:use-module (guix memoization) #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module (guix build-system python) #:use-module ((guix build utils) #:select (delete-file-recursively which mkdir-p)) #:use-module (srfi srfi-64) #:use-module (ice-9 match)) (define test-json "{ \"info\": { \"version\": \"1.0.0\", \"name\": \"foo\", \"license\": \"GNU LGPL\", \"summary\": \"summary\", \"home_page\": \"http://example.com\", \"classifiers\": [], \"download_url\": \"\" }, \"urls\": [], \"releases\": { \"1.0.0\": [ { \"url\": \"https://example.com/foo-1.0.0.egg\", \"packagetype\": \"bdist_egg\" }, { \"url\": \"https://example.com/foo-1.0.0.tar.gz\", \"packagetype\": \"sdist\" }, { \"url\": \"https://example.com/foo-1.0.0-py2.py3-none-any.whl\", \"packagetype\": \"bdist_wheel\" } ] } }") (define test-source-hash "") (define test-specifications '("Fizzy [foo, bar]" "PickyThing<1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1" "SomethingWithMarker[foo]>1.0;python_version<\"2.7\"" "requests [security,tests] >= 2.8.1, == 2.8.* ; python_version < \"2.7\"" "pip @ https://github.com/pypa/pip/archive/1.3.1.zip#\ sha1=da9234ee9982d4bbb3c72346a6de940a148ea686")) (define test-requires.txt "\ # A comment # A comment after a space foo ~= 3 bar != 2 [test] pytest (>=2.5.0) ") ;; Beaker contains only optional dependencies. (define test-requires.txt-beaker "\ [crypto] pycryptopp>=0.5.12 [cryptography] cryptography [testsuite] Mock coverage ") (define test-metadata "\ Classifier: Programming Language :: Python :: 3.7 Requires-Dist: baz ~= 3 Requires-Dist: bar != 2 Provides-Extra: test Requires-Dist: pytest (>=2.5.0) ; extra == 'test' ") (define test-metadata-with-extras " Classifier: Programming Language :: Python :: 3.7 Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* Requires-Dist: wrapt (<2,>=1) Requires-Dist: bar Provides-Extra: dev Requires-Dist: tox ; extra == 'dev' Requires-Dist: bumpversion (<1) ; extra == 'dev' ") ;;; Provides-Extra can appear before Requires-Dist. (define test-metadata-with-extras-jedi "\ Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* Provides-Extra: testing Requires-Dist: parso (>=0.3.0) Provides-Extra: testing Requires-Dist: pytest (>=3.1.0); extra == 'testing' ") (test-begin "pypi") (test-equal "guix-package->pypi-name, old URL style" "psutil" (guix-package->pypi-name (dummy-package "foo" (source (dummy-origin (uri "https://pypi.org/packages/source/p/psutil/psutil-4.3.0.tar.gz")))))) (test-equal "guix-package->pypi-name, new URL style" "certbot" (guix-package->pypi-name (dummy-package "foo" (source (dummy-origin (uri "https://pypi.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz")))))) (test-equal "guix-package->pypi-name, several URLs" "cram" (guix-package->pypi-name (dummy-package "foo" (source (dummy-origin (uri (list "https://bitheap.org/cram/cram-0.7.tar.gz" (pypi-uri "cram" "0.7")))))))) (test-equal "specification->requirement-name" '("Fizzy" "PickyThing" "SomethingWithMarke