From 5495834ca375186912eeed40c7c8ce96254c36b3 Mon Sep 17 00:00:00 2001 From: Martin Becze Date: Mon, 16 Dec 2019 17:46:47 -0500 Subject: [PATCH v5 3/4] guix: tests: added tests for recursive-import-semver * guix/tests/import-utils.scm: tests for recursive-import-semver --- tests/import-utils.scm | 177 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 175 insertions(+), 2 deletions(-) diff --git a/tests/import-utils.scm b/tests/import-utils.scm index 87dda3238f..2ee81386ec 100644 --- a/tests/import-utils.scm +++ b/tests/import-utils.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2017 Ricardo Wurmus ;;; Copyright © 2016 Ben Woodcroft +;;; Copyright © 2016 Martin Becze ;;; ;;; This file is part of GNU Guix. ;;; @@ -24,8 +25,10 @@ #:use-module (guix packages) #:use-module (guix build-system) #:use-module (gnu packages) - #:use-module (srfi srfi-64) - #:use-module (ice-9 match)) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-64)) (test-begin "import-utils") @@ -141,4 +144,174 @@ ("license" . #f)))) (package-native-inputs (alist->package meta)))) +(define-record-type + (make-metadata name versions) + metadata? + (name metadata-name) + (versions metadata-versions)) + +(define-record-type + (make-package version dependencies) + package? + (version package-version) + (dependencies package-dependencies)) + +(define-record-type + (make-dependency name range) + dependency? + (name dependency-name) + (range dependency-range)) + +(define (metadata-semver-versions metadata) + (map (lambda (p) + (package-version p)) + (metadata-versions metadata))) + +(define (metadata->package metadata version) + (find + (lambda (package) + (equal? (package-version package) version)) + (metadata-versions metadata))) + +(define (make-sexp metadata package dependencies) + `(package + (name ,(guix-name (metadata-name metadata))) + (version ,(package-version package)) + (dependcies ,(map + (match-lambda ((public-name dep) + (list (guix-name (dependency-name dep)) public-name))) + dependencies)))) + +(define (guix-name name) + (string-append "test-" name)) + +(define packages + `(("no-deps" . (("1.0.0" . ()) ("0.1.0" . ()))) + ("one-dep" . (("1.0.0" . (("no-deps" "^1.0"))) + ("0.1.0" . (("no-deps" "^0.1.0"))))) + ("shared-dep" . (("1.0.0" . (("one-dep" "^0.1.0") + ("no-deps" "*"))))) + ("recursive" . (("1.0.0" . (("recursive" "=1.0.0"))))) + ("already-packaged" . (("1.0.0" . (("rust" "~1.28"))))))) + +(define (name->metadata name) + (let ((versions (assoc-ref packages name))) + (make-metadata name + (map + (match-lambda + ((version . deps) + (make-package version + (map + (lambda (name-range) + (apply make-dependency name-range)) + deps)))) + versions)))) + +(define* (test-recursive-importer name version #:optional (guix-name guix-name)) + (recursive-import-semver #:name name + #:range version + #:name->metadata name->metadata + #:metadata->package metadata->package + #:metadata-versions metadata-semver-versions + #:package-dependencies package-dependencies + #:dependency-name dependency-name + #:dependency-range dependency-range + #:guix-name guix-name + #:make-sexp make-sexp)) + +(test-equal "recursive import test with no dependencies" + `((define-public test-no-deps-1.0.0 + (package + (name "test-no-deps") + (version "1.0.0") + (dependcies ())))) + (test-recursive-importer "no-deps" "1.0.0")) + +(test-equal "recursive import test with one dependencies" + `((define-public test-no-deps-1.0.0 + (package + (name "test-no-deps") + (version "1.0.0") + (dependcies ()))) + (define-public test-one-dep-1.0.0 + (package + (name "test-one-dep") + (version "1.0.0") + (dependcies (("test-no-deps" "test-no-deps-1.0.0")))))) + (test-recursive-importer "one-dep" "1.0.0")) + +(test-equal "recursive import test with recursuve dependencies" + `((define-public test-recursive-1.0.0 + (package + (name "test-recursive") + (version "1.0.0") + (dependcies (("test-recursive" "test-recursive-1.0.0")))))) + (test-recursive-importer "recursive" "1.0.0")) + +(test-equal "recursive import test with no dependencies using an old version" + `((define-public test-no-deps-0.1.0 + (package + (name "test-no-deps") + (version "0.1.0") + (dependcies ())))) + (test-recursive-importer "no-deps" "0.1.0")) + +(test-equal "recursive import test with one dependencies unsing an old version" + `((define-public test-no-deps-0.1.0 + (package + (name "test-no-deps") + (version "0.1.0") + (dependcies ()))) + (define-public test-one-dep-0.1.0 + (package + (name "test-one-dep") + (version "0.1.0") + (dependcies (("test-no-deps" "test-no-deps-0.1.0")))))) + (test-recursive-importer "one-dep" "0.1.0")) + +(test-equal "recursive import test with a version range" + `((define-public test-no-deps-1.0.0 + (package + (name "test-no-deps") + (version "1.0.0") + (dependcies ()))) + (define-public test-one-dep-1.0.0 + (package + (name "test-one-dep") + (version "1.0.0") + (dependcies (("test-no-deps" "test-no-deps-1.0.0")))))) + (test-recursive-importer "one-dep" "*")) + +(test-equal "recursive import test with with dependency that is already in the repo" + `((define-public test-already-packaged-1.0.0 + (package (name "test-already-packaged") + (version "1.0.0") + (dependcies + (("test-rust" "rust-1.28.0")))))) + (test-recursive-importer "already-packaged" "1.0.0" identity)) + +(test-equal "shared dependencies" + `((define-public test-no-deps-1.0.0 + (package + (name "test-no-deps") + (version "1.0.0") + (dependcies ()))) + (define-public test-no-deps-0.1.0 + (package + (name "test-no-deps") + (version "0.1.0") + (dependcies ()))) + (define-public test-one-dep-0.1.0 + (package + (name "test-one-dep") + (version "0.1.0") + (dependcies (("test-no-deps" "test-no-deps-0.1.0"))))) + (define-public test-shared-dep-1.0.0 + (package + (name "test-shared-dep") + (version "1.0.0") + (dependcies (("test-one-dep" "test-one-dep-0.1.0") + ("test-no-deps" "test-no-deps-1.0.0")))))) + (test-recursive-importer "shared-dep" "1.0.0")) + (test-end "import-utils") -- 2.24.1