# This shell script compile, run and verify Nit program files
# Set lang do default to avoid failed tests because of locale
-export LANG=C
-export LC_ALL=C
+export LANG=C.UTF-8
+
+# Explore candidates for LC_ALL
+#
+# If C.UTF-8, the most agnostic UTF-8 locale is supported, we
+# use it, otherwise we default to the UTF-8 system locale, and
+# if unavailable, we default on C.
+#
+# Note that C however is not guaranteed to be UTF-8, and
+# some tests may fail when relying on Unicode semantics.
+locale_candidate=C.UTF-8
+if ! locale -a 2>/dev/null | grep -q C.UTF-8; then
+ locale_candidate="$(locale -a | grep -i utf8 | head -n1)"
+ if [ -z "$locale_candidate" ]; then
+ locale_candidate=C
+ fi
+fi
+export LC_ALL="$locale_candidate"
+
+if uname | grep Darwin 1>/dev/null 2>&1; then
+ export LANG=en_US.UTF-8
+ export LC_ALL=en_US.UTF-8
+fi
+
export NIT_TESTING=true
# Use the pid as a collision prevention
export NIT_TESTING_ID=$$
export NIT_SRAND=0
+# Identify this as a tests.sh test to differentiate from a nitunit test
+export NIT_TESTING_TESTS_SH=true
+
unset NIT_DIR
# Get the first Java lib available
if which_java=$(which javac 2>/dev/null); then
- JAVA_HOME=$(dirname $(dirname $(readlink -f "$which_java")))
+
+ if sh -c "readlink -f ." 1>/dev/null 2>&1; then
+ READLINK="readlink -f"
+ else
+ # Darwin?
+ READLINK="readlink"
+ fi
+ JAVA_HOME=$(dirname $(dirname $($READLINK "$which_java")))
shopt -s nullglob
paths=`echo $JAVA_HOME/jre/lib/*/{client,server}/libjvm.so`
- paths=($paths)
- JNI_LIB_PATH=`dirname ${paths[0]}`
+ if [ -n "$paths" ]; then
+ paths=($paths)
+ JNI_LIB_PATH=`dirname ${paths[0]}`
+ fi
shopt -u nullglob
fi
echo >>$xml "<testcase classname='`xmlesc "$3"`' name='`xmlesc "$2"`' `timestamp`><skipped/></testcase>"
return 0
fi
+ if test -n "GITLAB_CI" && echo "$1" | grep -f "gitlab_ci.skip" >/dev/null 2>&1; then
+ echo "=> $2: [skip gitlab ci]"
+ echo >>$xml "<testcase classname='`xmlesc "$3"`' name='`xmlesc "$2"`' `timestamp`><skipped/></testcase>"
+ return 0
+ fi
# Skip by OS
local os_skip_file=$UNAME.skip
esac
savdirs="sav/`$HOSTNAME` sav/$UNAME sav/$engine $savdirs sav/"
+test -n "$GITLAB_CI" && savdirs="sav/gitlab_ci $savdirs"
# The default nitc compiler
[ -z "$NITC" ] && find_nitc
echo 0.0 > "$ff.time.out"
elif [ -n "$isinteractive" ]; then
cat > "$ff.bin" <<END
-exec $NITC --no-color --no-prompt $OPT $includes < $(printf '%q' "$i") "\$@"
+exec $NITC --no-color --no-prompt --source-name $(printf '%q' "$i") $OPT $includes < $(printf '%q' "$i") "\$@"
END
chmod +x "$ff.bin"
> "$ff.cmp.err"
if [ -f "$ff.write" ]; then
cat -- "$ff.write" >> "$ff.res"
elif [ -d "$ff.write" ]; then
- LANG=C /bin/ls -F "$ff.write" >> "$ff.res"
+ /bin/ls -F "$ff.write" >> "$ff.res"
fi
cp -- "$ff.res" "$ff.res2"
cat -- "$ff.cmp.err" "$ff.err" "$ff.res2" > "$ff.res"
if [ -f "$fff.write" ]; then
cat -- "$fff.write" >> "$fff.res"
elif [ -d "$fff.write" ]; then
- LANG=C /bin/ls -F -- "$fff.write" >> "$fff.res"
+ /bin/ls -F -- "$fff.write" >> "$fff.res"
fi
if [ -s "$fff.err" ]; then
cp -- "$fff.res" "$fff.res2"