diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 23 | ||||
-rw-r--r-- | doc/papo.en.3js.in | 0 | ||||
-rw-r--r-- | package.json | 4 | ||||
-rw-r--r-- | src/api.js | 18 | ||||
-rwxr-xr-x | src/cli.js | 2 | ||||
-rw-r--r-- | src/utils.js | 43 | ||||
-rwxr-xr-x | tests/assert-deps.sh | 10 | ||||
-rwxr-xr-x | tests/assert-install.sh | 35 | ||||
-rw-r--r-- | tools/lib.sh (renamed from tests/lib.sh) | 0 | ||||
-rwxr-xr-x | tools/manpages.sh | 2 |
11 files changed, 120 insertions, 18 deletions
@@ -1 +1,2 @@ /doc/*.[0-9] +/src/index.js @@ -10,7 +10,7 @@ TRANSLATIONS = PREFIX = /usr BINDIR = $(PREFIX)/bin LIBDIR = $(PREFIX)/lib -JSLIBDIR = $(LIBDIR)/node_modules/$(NAME) +JSLIBDIR = $(LIBDIR)/node/$(NAME) SHAREDIR = $(PREFIX)/share LOCALEDIR = $(SHAREDIR)/locale MANDIR = $(SHAREDIR)/man @@ -40,6 +40,7 @@ manpages.en.in = \ doc/$(NAME).CHANGELOG.en.7.in \ doc/$(NAME).TODOs.en.7.in \ doc/$(NAME).en.1.in \ + doc/$(NAME).en.3js.in \ doc/$(NAME).tutorial.en.7.in \ doc/$(NAME).recipes.en.7.in \ doc/$(NAME).why.en.7.in @@ -61,7 +62,8 @@ sources = \ derived-assets = \ - $(manpages) \ + $(manpages) \ + src/index.js \ @@ -72,6 +74,9 @@ all: $(derived-assets) $(manpages): Makefile +src/index.js: + ln -fs api.js $@ + .SUFFIXES: .js .js-t @@ -83,10 +88,11 @@ check-t: $(tests.js-t) assert-tests = \ - tests/assert-deps.sh \ + tests/assert-deps.sh \ + tests/assert-install.sh \ $(assert-tests): ALWAYS - sh $@ + +sh $@ check-asserts: $(assert-tests) @@ -108,10 +114,9 @@ clean: install: all mkdir -p \ '$(DESTDIR)$(BINDIR)' \ - '$(DESTDIR)$(JSLIBDIR)'/src - cp package.json '$(DESTDIR)$(JSLIBDIR)' - cp src/*.js '$(DESTDIR)$(JSLIBDIR)'/src - ln -frs '$(DESTDIR)$(JSLIBDIR)'/src/cli.js '$(DESTDIR)$(BINDIR)'/$(NAME) + '$(DESTDIR)$(JSLIBDIR)' + cp src/*.js '$(DESTDIR)$(JSLIBDIR)' + ln -fs '$(DESTDIR)$(JSLIBDIR)'/cli.js '$(DESTDIR)$(BINDIR)'/$(NAME) sh tools/manpages.sh -ip '$(DESTDIR)$(MANDIR)' $(manpages) ## Uninstalls from $(DESTDIR)$(PREFIX). This is a perfect mirror @@ -130,7 +135,7 @@ run-ircd: run-web: $(JSIMPL) src/server/web.js server -l http://localhost:3003 -## Run the web and IRC server locally +## Run the web and IRC server locally. run: $(MAKE) run-ircd & $(MAKE) run-web & wait diff --git a/doc/papo.en.3js.in b/doc/papo.en.3js.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/doc/papo.en.3js.in diff --git a/package.json b/package.json deleted file mode 100644 index 583bc1b..0000000 --- a/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "src/api.js", - "type": "module" -} @@ -1,3 +1,17 @@ -export const main = async () => { - console.log({ argv: process.argv }); +const { eq } = require("./utils.js"); + +const main = async () => { + if (process.argv.length !== 2) { + console.log("papo 1970-01-01 0.1.0"); + return; + } + + console.log({ + argv: process.argv, + eq: eq({a: 1}, {a: 1}), + }); +}; + +module.exports = { + main, }; @@ -1,4 +1,4 @@ #!/usr/bin/env node -import { main } from "papo"; +const { main } = require("papo"); (async () => await main())(); diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..1877a58 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,43 @@ +const eq = (a, b) => { + if (a === b) { + return true; + } + + if (a === null || b === null) { + return false; + } + + if (typeof a != "object" || typeof b != "object") { + return false; + } + + if (Array.isArray(a) !== Array.isArray(b)) { + return false; + } + + if (Object.keys(a).length !== Object.keys(b).length) { + return false; + } + + for (const k in a) { + if (!b.hasOwnProperty(k)) { + return false; + } + if (!eq(a[k], b[k])) { + return false; + } + } + return true; +}; + +const keys = (ks, obj) => + ks.reduce( + (ret, k) => + obj.hasOwnProperty(k) ? {...ret, [k]: obj[k]} : ret, + {}, + ); + +module.exports = { + eq, + keys, +}; diff --git a/tests/assert-deps.sh b/tests/assert-deps.sh index b125a7c..e358abd 100755 --- a/tests/assert-deps.sh +++ b/tests/assert-deps.sh @@ -1,9 +1,17 @@ #!/bin/sh set -eu +if [ ! -e .git ]; then + echo "Not in a Git repository, skipping \"$0\"." >&2 + exit +fi + +. tools/lib.sh + F="$(mkstemp)" trap 'rm -f "$F"' EXIT + awk ' $0 == "sources.js = \\" { sources = 1; next } $0 == "tests.js = \\" { tests = 1; next } @@ -28,6 +36,6 @@ awk ' } ' Makefile | LANG=POSIX.UTF-8 sort > "$F" -find src/*.js tests/js/*.js | +git ls-files src/*.js tests/js/*.js | LANG=POSIX.UTF-8 sort | diff -U10 "$F" - diff --git a/tests/assert-install.sh b/tests/assert-install.sh new file mode 100755 index 0000000..f2696bc --- /dev/null +++ b/tests/assert-install.sh @@ -0,0 +1,35 @@ +#!/bin/sh +set -eu + +. tools/lib.sh + +D="$(mkdtemp)" +trap 'rm -rf "$D"' EXIT + + +make -s DESTDIR="$D" install +PATH="$D/usr/bin:$PATH" +NODE_PATH="$D/usr/lib/node:$NODE_PATH" + +{ + printf 'Assert that the papo(3js) library is installed correctly...' + node -e 'require("papo");' + printf ' OK.\n' + + printf 'Assert that the papo(1) command is installed correctly...' + papo -V | grep -q '^papo ' + printf ' OK.\n' + + make -s DESTDIR="$D" uninstall + printf 'Assert that the papo(1) command is installed correctly...' + if [ "$(find "$D" -not -type d | wc -l)" != 0 ]; then + printf ' ERR.\n' + cat <<-EOF + Leftover files not removed by "make uninstall": + + $(find "$D" -not -type d) + EOF + exit 1 + fi + printf ' OK.\n' +} >&2 diff --git a/tests/lib.sh b/tools/lib.sh index 9d183f9..9d183f9 100644 --- a/tests/lib.sh +++ b/tools/lib.sh diff --git a/tools/manpages.sh b/tools/manpages.sh index 959b1c2..755ff77 100755 --- a/tools/manpages.sh +++ b/tools/manpages.sh @@ -1,7 +1,7 @@ #!/bin/sh set -eu -. tests/lib.sh +. tools/lib.sh usage() { |