#lang racket/base (require pkg/lib (prefix-in db: pkg/db) racket/file racket/format "shelly.rkt" "util.rkt") (pkg-tests (shelly-begin (initialize-catalogs) $ "raco pkg config --set catalogs http://localhost:9990" $ "racket -l racket/base -l pkg/lib -e '(pkg-config-catalogs)'" =stdout> "'(\"http://localhost:9990\")\n" $ "racket -l racket/base -l tests/pkg/test-catalogs-api -e '(test-api)'" =stderr> "" (define d (make-temporary-file "pkg-~a" 'directory)) (define db (build-path d "catalog.sqlite")) (define dir (build-path d "catalog")) (define dir2 (build-path d "catalog2")) $ (~a "raco pkg catalog-copy --from-config " (path->string db)) $ (~a "raco pkg config --set catalogs file://" (path->string db)) $ "raco pkg catalog-show pkg-test1" =stdout> #rx"Source: http://localhost:9999/pkg-test1.zip" (parameterize ([db:current-pkg-catalog-file db]) (db:set-pkgs! "local" (append (db:get-pkgs) (list (db:pkg "fish" "local" "nemo@sub" "http://localhost:9999/fish.zip" "123" "Not a whale")))) (db:set-pkg-modules! "fish" "local" "123" '((lib "fish/main.rkt") (lib "fish/food.rkt"))) (db:set-pkg-dependencies! "fish" "local" "123" '("ocean" ("water" "1.0") ("crash-helmet" #:platform windows)))) $ "raco pkg catalog-show fish" =stdout> #rx"Checksum: 123" $ "raco pkg catalog-show fish" =stdout> #rx"ocean" $ "raco pkg catalog-show fish" =stdout> #rx"water version 1.0" $ "raco pkg catalog-show fish" =stdout> #rx"crash-helmet on platform 'windows" $ "raco pkg catalog-show --modules fish" =stdout> #rx"fish/food" $ (~a "raco pkg catalog-copy " (path->string db) " " (path->string dir)) $ (~a "raco pkg config --set catalogs file://" (path->string dir)) $ "raco pkg catalog-show fish" =stdout> #rx"Checksum: 123" $ "raco pkg catalog-show --only-names fish" =stdout> #rx"fish" $ "raco pkg catalog-show --only-names --all" =stdout> #rx"fish" $ "raco pkg catalog-show --modules fish" =stdout> #rx"fish/food" $ "raco pkg catalog-show fish" =stdout> #rx"water version 1.0" (delete-file (build-path dir "pkgs")) (delete-file (build-path dir "pkgs-all")) $ "raco pkg catalog-show fish" =stdout> #rx"Checksum: 123" $ "raco pkg catalog-show --only-names fish" =stdout> #rx"^fish" $ "raco pkg catalog-show --only-names --all" =stdout> #rx"^fish" $ "raco pkg catalog-show --modules fish" =stdout> #rx"fish/food" $ "raco pkg catalog-show fish" =stdout> #rx"water version 1.0" (delete-file (build-path dir "pkg/fish")) $ "raco pkg catalog-show fish" =exit> 1 (define (try-merge dest) (shelly-begin $ (~a "raco pkg config --set catalogs file://" (path->string dest)) (make-directory* (build-path dir2 "pkg")) (define (add-whale! cksum) (call-with-output-file* (build-path dir2 "pkg" "whale") #:exists 'truncate (lambda (o) (write (hash 'name "whale" 'checksum cksum 'source "http://localhost:9999/whale.plt") o)))) (add-whale! "345") $ (~a "raco pkg catalog-show --catalog file://" (path->string dir2) " whale") =stdout> #rx"Checksum: 345" $ "raco pkg catalog-show whale" =exit> 1 $ (~a "raco pkg catalog-copy --merge " (path->string dir2) " " (path->string dest)) $ "raco pkg catalog-show whale" =stdout> #rx"Checksum: 345" (add-whale! "567") $ (~a "raco pkg catalog-copy --merge " (path->string dir2) " " (path->string dest)) $ "raco pkg catalog-show whale" =stdout> #rx"Checksum: 345" $ (~a "raco pkg catalog-copy --merge --override " (path->string dir2) " " (path->string dest)) $ "raco pkg catalog-show whale" =stdout> #rx"Checksum: 567")) (try-merge dir) (try-merge db) $ "raco pkg config --set catalogs http://localhost:9990" (delete-directory/files d)))