95 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Makefile
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Makefile
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | ||
| # Copyright (c) 2024 DTB <trinity@trinity.moe>
 | ||
| # Copyright (c) 2024–2025 Emma Tebibyte <emma@tebibyte.media>
 | ||
| # SPDX-License-Identifier: FSFAP
 | ||
| #
 | ||
| # Copying and distribution of this file, with or without modification, are
 | ||
| # permitted in any medium without royalty provided the copyright notice and this
 | ||
| # notice are preserved.  This file is offered as-is, without any warranty.
 | ||
| 
 | ||
| .PRAGMA: command_comment
 | ||
| 
 | ||
| .PHONY: npc_tests
 | ||
| npc_tests: npc_help npc_args npc_ascii
 | ||
| 
 | ||
| .PHONY: npc_help
 | ||
| npc_help: $(BIN)/npc
 | ||
| 	! $(BIN)/npc -h
 | ||
| 
 | ||
| .PHONY: npc_args
 | ||
| # arg parsing
 | ||
| npc_args:
 | ||
| 	$(BIN)/npc -e </dev/null
 | ||
| 	$(BIN)/npc -t </dev/null
 | ||
| 	$(BIN)/npc -et </dev/null
 | ||
| 	! $(BIN)/npc -et 5 </dev/null
 | ||
| 
 | ||
| .PHONY: npc_ascii
 | ||
| # Test 0x00 to 0x7f in input; in other words, the full 7b ASCII range.
 | ||
| npc_ascii: npc_ascii_controls npc_ascii_uppers # npc_ascii_symbols \
 | ||
| #	npc_ascii_lowers
 | ||
| 
 | ||
| .PHONY: npc_ascii_controls
 | ||
| # (control characters)
 | ||
| npc_ascii_controls:
 | ||
| 	# The following test prints the bytes 0x00 (inclusive) through 0x20
 | ||
| 	# (exclusive) and pipes them through npc(1). npc(1) should then replace all
 | ||
| 	# non-printing, non-space (in the isspace(3p) sense) characters with their
 | ||
| 	# graphical carat-char counterparts (see the npc(1) man page). The head(1p)
 | ||
| 	# invocation then strips off everything past the first line (or past the
 | ||
| 	# first newline byte, 0x0A) and xargs(1p) is used to test(1p) the output
 | ||
| 	# against the known good answer.
 | ||
| 
 | ||
| 	# Immediately before that newline, 0x09 is printed - in ASCII, the
 | ||
| 	# horizontal tab. If xargs' -I option is used, tr(1p) should used to delete
 | ||
| 	# that tab. If the tab is left as part of input, OpenBSD's xargs(1)
 | ||
| 	# implementation has been observed to strip it along with the other
 | ||
| 	# trailing whitespace (the newline), but Busybox's and GNU's xargs(1)
 | ||
| 	# implementations have been observed to leave the tab in. All three
 | ||
| 	# implementations strip off the trailing tab if `-I` is not used. The POSIX
 | ||
| 	# specification for `-I` is ambiguous as to which behavior is correct.
 | ||
| 	# This comment is the result of much bewilderment and debugging.
 | ||
| 
 | ||
| 	# ASCII 0x00 to 0x0a (before the newline, due to xargs(1p) issues)
 | ||
| 	awk 'BEGIN{ for (i = 0; i < 32; ++i) printf("%c", i); }' \
 | ||
| 		| $(BIN)/npc \
 | ||
| 		| head -n 1 \
 | ||
| 		| xargs test "^@^A^B^C^D^E^F^G^H" =
 | ||
| 
 | ||
| 	# ASCII 0x0a (otherwise the head|tail sequence won't work) to 0x1f
 | ||
| 	awk 'BEGIN{ for (i = 0; i < 32; ++i) printf("%c", i); print }' \
 | ||
| 		| $(BIN)/npc \
 | ||
| 		| head -n 2 \
 | ||
| 		| tail -n 1 \
 | ||
| 		| xargs -I out test "^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^^_"
 | ||
| 
 | ||
| # This test is broken on Linux and will need closer inspection along with GNU
 | ||
| # xargs(1).
 | ||
| # .PHONY: npc_ascii_symbols
 | ||
| # # ASCII 0x1f to 0x3f (^_ and symbols)
 | ||
| # npc_ascii_symbols:
 | ||
| # 	# shell quoting olympics
 | ||
| # 	c="$(awk 'BEGIN{ for (i = 31; i < 64; ++i) printf("%c", i); print }')"
 | ||
| # 
 | ||
| # 	printf '%s\n' "$c" | $(BIN)/npc \
 | ||
| # 		| sed -e s"/\'/\\\'/g" -e 's/"/\\"/g' \
 | ||
| # 		| tr -d '\n' \
 | ||
| # 		| xargs -I out test "^_ !\"#$$%&\'()*+,-./0123456789:;<=>?" = out
 | ||
| 
 | ||
| .PHONY: npc_ascii_uppers
 | ||
| # ASCII 0x40 to 0x5f (uppercases)
 | ||
| npc_ascii_uppers:
 | ||
| 	awk 'BEGIN{ for (i = 64; i < 96; ++i) printf("%c", i); print }' \
 | ||
| 		| $(BIN)/npc \
 | ||
| 		| sed 's/\\/\\\\/' \
 | ||
| 		| xargs -I out test @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ = out
 | ||
| 
 | ||
| # This test is broken and will need closer inspection along with the npc(1)
 | ||
| # source.
 | ||
| # .PHONY: npc_ascii_lowers
 | ||
| # # ASCII 0x60 to 0x7f (lowercases)
 | ||
| # npc_ascii_lowers:
 | ||
| # 	awk 'BEGIN{ for (i = 96; i < 128; ++i) printf("%c", i); print }' \
 | ||
| # 		| $(BIN)/npc \
 | ||
| # 		| xargs -I out test "\`abcdefghijklmnopqrstuvwxyz{|}~^?" = out
 |