~ruther/guix-local

a96524cc7d302ad6a8f2cd2e970a148b360f629a — David Thompson 10 years ago 385a44b
import: gem: Fix minor bug and add unit test.

* guix/import/gem.scm (make-gem-sexp): Properly handle an empty list of
  licenses.  When rendering a list of licenses, cons 'list onto the front of
  the expression.
* tests/gem.scm: New file.
* Makefile.am (SCM_TESTS): Add it.
3 files changed, 86 insertions(+), 2 deletions(-)

M Makefile.am
M guix/import/gem.scm
A tests/gem.scm
M Makefile.am => Makefile.am +2 -1
@@ 231,7 231,8 @@ MODULES +=					\

SCM_TESTS += 					\
  tests/pypi.scm				\
  tests/cpan.scm
  tests/cpan.scm				\
  tests/gem.scm

endif


M guix/import/gem.scm => guix/import/gem.scm +2 -1
@@ 105,8 105,9 @@ VERSION, HASH, HOME-PAGE, DESCRIPTION, DEPENDENCIES, and LICENSES."
     (description ,description)
     (home-page ,home-page)
     (license ,(match licenses
                 (() #f)
                 ((license) (license->symbol license))
                 (_ (map license->symbol licenses))))))
                 (_ `(list ,@(map license->symbol licenses)))))))

(define* (gem->guix-package package-name #:optional version)
  "Fetch the metadata for PACKAGE-NAME from rubygems.org, and return the

A tests/gem.scm => tests/gem.scm +82 -0
@@ 0,0 1,82 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;;
;;; 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 <http://www.gnu.org/licenses/>.

(define-module (test-gem)
  #:use-module (guix import gem)
  #:use-module (guix base32)
  #:use-module (guix hash)
  #:use-module (guix tests)
  #:use-module ((guix build utils) #:select (delete-file-recursively))
  #:use-module (srfi srfi-64)
  #:use-module (ice-9 match))

(define test-json
  "{
  \"name\": \"foo\",
  \"version\": \"1.0.0\",
  \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\",
  \"info\": \"A cool gem\",
  \"homepage_uri\": \"https://example.com\",
  \"dependencies\": {
    \"runtime\": [
      { \"name\": \"bundler\" },
      { \"name\": \"bar\" }
    ]
  },
  \"licenses\": [\"MIT\", \"Apache 2.0\"]
}")

(test-begin "gem")

(test-assert "gem->guix-package"
  ;; Replace network resources with sample data.
  (mock ((guix import utils) url-fetch
         (lambda (url file-name)
           (match url
             ("https://rubygems.org/api/v1/gems/foo.json"
              (with-output-to-file file-name
                (lambda ()
                  (display test-json))))
             (_ (error "Unexpected URL: " url)))))
    (match (gem->guix-package "foo")
      (('package
         ('name "ruby-foo")
         ('version "1.0.0")
         ('source ('origin
                    ('method 'url-fetch)
                    ('uri ('rubygems-uri "foo" 'version))
                    ('sha256
                     ('base32
                      "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
         ('build-system 'ruby-build-system)
         ('propagated-inputs
          ('quasiquote
           (("bundler" ('unquote 'bundler))
            ("ruby-bar" ('unquote 'ruby-bar)))))
         ('synopsis "A cool gem")
         ('description "A cool gem")
         ('home-page "https://example.com")
         ('license ('list 'expat 'asl2.0)))
       #t)
      (x
       (pk 'fail x #f)))))

(test-end "gem")


(exit (= (test-runner-fail-count (test-runner-current)) 0))