105 lines
3.6 KiB
Scheme
105 lines
3.6 KiB
Scheme
(use-modules (ice-9 match)
|
|
(srfi srfi-1)
|
|
(srfi srfi-13)
|
|
(srfi srfi-64)
|
|
(fruix packages freebsd)
|
|
(fruix system freebsd utils))
|
|
|
|
(define repo-root
|
|
(or (getenv "FRUIX_REPO_ROOT")
|
|
(error "FRUIX_REPO_ROOT is not set")))
|
|
|
|
(define guile-bin
|
|
(or (getenv "GUILE_BIN")
|
|
(error "GUILE_BIN is not set")))
|
|
|
|
(define fruix-script
|
|
(string-append repo-root "/scripts/fruix.scm"))
|
|
|
|
(define (cli-output . args)
|
|
(apply command-output guile-bin
|
|
(append '("--no-auto-compile" "-s")
|
|
(list fruix-script)
|
|
args)))
|
|
|
|
(define (output-lines text)
|
|
(filter (lambda (line) (not (string-null? line)))
|
|
(string-split text #\newline)))
|
|
|
|
(define (summary-line-name line)
|
|
(car (string-split line #\tab)))
|
|
|
|
(define (metadata-value text key)
|
|
(let ((prefix (string-append key "=")))
|
|
(let loop ((lines (output-lines text)))
|
|
(match lines
|
|
(() #f)
|
|
((line . rest)
|
|
(if (string-prefix? prefix line)
|
|
(substring line (string-length prefix))
|
|
(loop rest)))))))
|
|
|
|
(test-begin "package-cli")
|
|
|
|
(test-assert "find-freebsd-package locates nodejs"
|
|
(let ((package (find-freebsd-package "freebsd-nodejs")))
|
|
(and package
|
|
(string=? (freebsd-package-version package) "24.14.0_2"))))
|
|
|
|
(test-assert "search-freebsd-packages finds nodejs by name"
|
|
(member "freebsd-nodejs"
|
|
(map freebsd-package-name
|
|
(search-freebsd-packages "node"))))
|
|
|
|
(test-assert "search-freebsd-packages finds npm by text"
|
|
(member "freebsd-npm"
|
|
(map freebsd-package-name
|
|
(search-freebsd-packages "node"))))
|
|
|
|
(let ((list-output (cli-output "package" "list")))
|
|
(test-assert "package list prints nodejs"
|
|
(member "freebsd-nodejs"
|
|
(map summary-line-name (output-lines list-output))))
|
|
(test-assert "package list prints neovim"
|
|
(member "freebsd-neovim"
|
|
(map summary-line-name (output-lines list-output)))))
|
|
|
|
(let ((search-output (cli-output "package" "search" "node")))
|
|
(test-assert "package search prints nodejs"
|
|
(member "freebsd-nodejs"
|
|
(map summary-line-name (output-lines search-output))))
|
|
(test-assert "package search prints npm"
|
|
(member "freebsd-npm"
|
|
(map summary-line-name (output-lines search-output)))))
|
|
|
|
(let ((show-output (cli-output "package" "show" "freebsd-nodejs")))
|
|
(test-equal "package show reports name"
|
|
"freebsd-nodejs"
|
|
(metadata-value show-output "package_name"))
|
|
(test-equal "package show reports version"
|
|
"24.14.0_2"
|
|
(metadata-value show-output "package_version"))
|
|
(test-equal "package show reports build system"
|
|
"copy-build-system"
|
|
(metadata-value show-output "build_system"))
|
|
(test-assert "package show reports node binary target"
|
|
(string-contains (metadata-value show-output "install_targets") "bin/node")))
|
|
|
|
(let* ((store-dir (mktemp-directory "/tmp/fruix-package-cli-store.XXXXXX"))
|
|
(build-output (cli-output "package" "build" "freebsd-ripgrep" "--store" store-dir))
|
|
(store-path (metadata-value build-output "store_path")))
|
|
(test-equal "package build reports action"
|
|
"package-build"
|
|
(metadata-value build-output "action"))
|
|
(test-equal "package build reports package name"
|
|
"freebsd-ripgrep"
|
|
(metadata-value build-output "package_name"))
|
|
(test-assert "package build creates store path"
|
|
(file-exists? store-path))
|
|
(test-assert "package build stages rg binary"
|
|
(file-exists? (string-append store-path "/bin/rg")))
|
|
(test-assert "package build writes build info"
|
|
(file-exists? (string-append store-path "/.fruix-build-info.scm"))))
|
|
|
|
(test-end "package-cli")
|