#!/bin/bash

# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

TS_TOPDIR="${0%/*}/../.."
TS_DESC="line"

. $TS_TOPDIR/functions.sh
ts_init "$*"

ts_check_test_command "$TS_CMD_LINE"
ts_check_test_command "$TS_CMD_HEXDUMP"

ts_log '# usually behave like "head -n 1"'
printf "a\nb\n" |
	$TS_CMD_LINE >> $TS_OUTPUT 2>&1
echo "ret: $?" >> $TS_OUTPUT

ts_log '# never consume more than one line'
printf "1\n2\n" |
	($TS_CMD_LINE && $TS_CMD_LINE) >> $TS_OUTPUT 2>&1
echo "ret: $?" >> $TS_OUTPUT

ts_log '# add a newline'
printf "abc" |
	$TS_CMD_LINE >> $TS_OUTPUT 2>&1
echo "ret: $?" >> $TS_OUTPUT

ts_log '# print one newline on empty input'
printf "" |
	$TS_CMD_LINE >> $TS_OUTPUT 2>&1
echo "ret: $?" >> $TS_OUTPUT

ts_log '# add a newline, return 1 when EOF'
(printf "xyz" && cat </dev/null) |
	$TS_CMD_LINE >> $TS_OUTPUT 2>&1
echo "ret: $?" >> $TS_OUTPUT

ts_log '# print one newline on empty input, return 1 when EOF'
$TS_CMD_LINE </dev/null >> $TS_OUTPUT 2>&1
echo "ret: $?" >> $TS_OUTPUT

ts_log '# large line of zero bytes'
dd if=/dev/zero  bs=1k count=1k 2>/dev/null |
	$TS_CMD_LINE line | $TS_CMD_HEXDUMP -C >> $TS_OUTPUT 2>&1
echo "ret: $?" >> $TS_OUTPUT

ts_finalize
