Files
fruix/tests/package-cli.scm
2026-04-08 23:17:47 +02:00

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")