[build-path-prefix-map-spec] 02/50: Basic tests on splitting-by-character

Ximin Luo infinity0 at debian.org
Fri Mar 10 15:17:17 UTC 2017


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch master
in repository build-path-prefix-map-spec.

commit 59300a2b8ea8622ac37317f486bae6868231267d
Author: Ximin Luo <infinity0 at debian.org>
Date:   Wed Jan 11 17:00:14 2017 +0100

    Basic tests on splitting-by-character
---
 2sep.mk               |  9 +++++
 newline.sh => 2sep.sh |  3 +-
 char.mk               |  9 +++++
 newline.sh => char.sh |  3 +-
 newline.mk            |  0
 newline.sh            |  0
 results.html          | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++
 test-all.sh           | 75 +++++++++++++++++++++++++++++++++++++++
 8 files changed, 193 insertions(+), 4 deletions(-)

diff --git a/2sep.mk b/2sep.mk
new file mode 100755
index 0000000..d55c866
--- /dev/null
+++ b/2sep.mk
@@ -0,0 +1,9 @@
+#!/usr/bin/make -f
+
+# Setting the variable
+
+export override SOURCE_PREFIX_MAP := $(if $(SOURCE_PREFIX_MAP),$(SOURCE_PREFIX_MAP)
,)ab
+print-%:; @echo "$($*)"
+default: print-SOURCE_PREFIX_MAP
+
+# We don't expect Makefiles to have to read or apply the variable.
diff --git a/newline.sh b/2sep.sh
old mode 100644
new mode 100755
similarity index 96%
copy from newline.sh
copy to 2sep.sh
index d2d1732..7e791a4
--- a/newline.sh
+++ b/2sep.sh
@@ -2,8 +2,7 @@
 
 # Setting the variable
 
-export SOURCE_PREFIX_MAP="${SOURCE_PREFIX_MAP:+$SOURCE_PREFIX_MAP
-}a=b"
+export SOURCE_PREFIX_MAP="${SOURCE_PREFIX_MAP:+$SOURCE_PREFIX_MAP
}ab"
 echo "$SOURCE_PREFIX_MAP"
 
 # We don't expect shell scripts to have to read or apply the variable.
diff --git a/char.mk b/char.mk
new file mode 100755
index 0000000..4f24e74
--- /dev/null
+++ b/char.mk
@@ -0,0 +1,9 @@
+#!/usr/bin/make -f
+
+# Setting the variable
+
+export override SOURCE_PREFIX_MAP := $(if $(SOURCE_PREFIX_MAP),$(SOURCE_PREFIX_MAP)$(SEP),)a=b
+print-%:; @echo "$($*)"
+default: print-SOURCE_PREFIX_MAP
+
+# We don't expect Makefiles to have to read or apply the variable.
diff --git a/newline.sh b/char.sh
old mode 100644
new mode 100755
similarity index 94%
copy from newline.sh
copy to char.sh
index d2d1732..a2d08dd
--- a/newline.sh
+++ b/char.sh
@@ -2,8 +2,7 @@
 
 # Setting the variable
 
-export SOURCE_PREFIX_MAP="${SOURCE_PREFIX_MAP:+$SOURCE_PREFIX_MAP
-}a=b"
+export SOURCE_PREFIX_MAP="${SOURCE_PREFIX_MAP:+$SOURCE_PREFIX_MAP$SEP}a=b"
 echo "$SOURCE_PREFIX_MAP"
 
 # We don't expect shell scripts to have to read or apply the variable.
diff --git a/newline.mk b/newline.mk
old mode 100644
new mode 100755
diff --git a/newline.sh b/newline.sh
old mode 100644
new mode 100755
diff --git a/results.html b/results.html
new file mode 100644
index 0000000..aa348ed
--- /dev/null
+++ b/results.html
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>results</title><style>pre { border:1px solid black; }</style></head><body><p>Try c+p the below into a text editor and/ or into <a href="https://validator.w3.org/#validate_by_input">W3C Markup Validator</a>.</p><div>
+testing newline
+<pre>
+++ ./newline.sh
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./newline.sh
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
+a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
+a=b'
+++ ./newline.mk
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./newline.mk
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
+a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
+a=b'
+</pre>
+testing tab
+<pre>
+++ ./char.sh
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.sh
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y	a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y	a=b'
+++ ./char.mk
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.mk
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y	a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y	a=b'
+</pre>
+testing record-separator 0x1E
+<pre>
+++ ./char.sh
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.sh
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b'
+++ ./char.mk
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.mk
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b'
+</pre>
+testing 2-separators 0x1E and 0x1F
+<pre>
+++ ./2sep.sh
++ test $'a\037b' = $'a\037b'
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}y'
+++ ./2sep.sh
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}y
ab' = '/lol/wtf=bbq/project std::ftw???\latex{evil}y
ab'
+++ ./2sep.mk
++ test $'a\037b' = $'a\037b'
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}y'
+++ ./2sep.mk
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}y
ab' = '/lol/wtf=bbq/project std::ftw???\latex{evil}y
ab'
+</pre>
+testing form-feed
+<pre>
+++ ./char.sh
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.sh
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b'
+++ ./char.mk
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.mk
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b'
+</pre>
+testing vtab
+<pre>
+++ ./char.sh
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.sh
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b'
+++ ./char.mk
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.mk
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b'
+</pre>
+testing next-line 0x85
+<pre>
+++ ./char.sh
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.sh
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b'
+++ ./char.mk
++ test a=b = a=b
+++ SOURCE_PREFIX_MAP='/lol/wtf=bbq/project std::ftw???\latex{evil}=y'
+++ ./char.mk
++ test '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b' = '/lol/wtf=bbq/project std::ftw???\latex{evil}=y
a=b'
+</pre>
+</div></body></html>
diff --git a/test-all.sh b/test-all.sh
new file mode 100755
index 0000000..a7efab5
--- /dev/null
+++ b/test-all.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+# See also
+# https://www.w3.org/International/questions/qa-controls
+# https://www.w3.org/TR/html5/syntax.html#character-references
+# https://validator.w3.org/
+
+set -e
+set -o pipefail # and this is why we need bash
+
+r1="a=b"
+r2="/lol/wtf=bbq/project std::ftw???\latex{evil}=y"
+check1() {
+	local sep="$1"; shift
+	set -x
+	test "$r1" = "$("$@")"
+	test "$r2$sep$r1" = "$(SOURCE_PREFIX_MAP=$r2 "$@")"
+	{ set +x; } 2>/dev/null
+}
+
+checkall() {
+	echo >&2 ">>>> testing $1"
+	for i in sh mk; do
+		check1 "$2" ./"$3.$i"
+	done
+    echo >&2 "<<<< end testing"
+}
+
+to_html() {
+	echo '<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>results</title><style>pre { border:1px solid black; }</style></head><body><p>Try c+p the below into a text editor and/ or into <a href="https://validator.w3.org/#validate_by_input">W3C Markup Validator</a>.</p><div>'
+	sed -e 's,^>>>> \(.*\),\1\n<pre>,g' \
+	    -e 's,^<<<< .*,</pre>,g'
+#	    -e 's/
/\&#x1E;/g' \
+#	    -e 's//\&#x1F;/g' \
+#	    -e 's/
/\&#x0B;/g' \
+#	    -e 's/
/\&#x0C;/g' \
+#	    -e 's/
/\&#x85;/g'
+	echo "</div></body></html>"
+}
+
+{
+# Very awkward to use in Makefile
+checkall "newline" "
+" newline
+
+# Miight conflict with other uses
+# Slight abuse-of-purpose
+SEP="	" checkall "tab" "	" char
+
+# not commonly-used, never see this in a file path
+# fits the "intended purpose" of the character
+# Not valid HTML5 or XML 1.0
+SEP="
" checkall "record-separator 0x1E" "
" char
+
+# Not valid HTML5 or XML 1.0
+# However this usage matches the "purpose" of the characters and is more flexible than "="
+r1="ab" \
+r2="/lol/wtf=bbq/project std::ftw???\latex{evil}y" \
+checkall "2-separators 0x1E and 0x1F" "
" 2sep
+
+# Valid HTML5, but invalid XML 1.0 (but valid XML 1.1)
+# Abuse-of-purpose
+SEP="
" checkall "form-feed" "
" char
+
+# Invalid in HTML and XML, but "seems like" newline
+SEP="
" checkall "vtab" "
" char
+
+# Downside are that this is encoding-dependent and may copy-paste incorrectly
+# It is acceptable in XML 1.0/1.1
+SEP="
" checkall "next-line 0x85" "
" char
+
+} 2>&1 | tee /dev/stderr | to_html > results.html
+
+echo >&2 "===="
+echo >&2 "tests succeeded, html log available in results.html"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/build-path-prefix-map-spec.git



More information about the Reproducible-commits mailing list