#!/bin/sh

# SUSv3 compliant uniq tests.
# Copyright 2005 by Rob Landley <rob@landley.net>
# Licensed under GPL v2, see file LICENSE for details.

# AUDIT: Full SUSv3 coverage (except internationalization).

. testing.sh

# testing "test name" "options" "expected result" "file input" "stdin"
#   file input will be file called "input"
#   test can create a file "actual" instead of writing to stdout

# Test exit status

testing "uniq (exit with error)" "uniq nonexistent 2> /dev/null || echo yes" \
	"yes\n" "" ""
testing "uniq (exit success)" "uniq /dev/null && echo yes" "yes\n" "" ""

# Test various data sources and destinations

testing "uniq (default to stdin)" "uniq" "one\ntwo\nthree\n" "" \
	"one\ntwo\ntwo\nthree\nthree\nthree\n"
testing "uniq - (specify stdin)" "uniq -" "one\ntwo\nthree\n" "" \
	"one\ntwo\ntwo\nthree\nthree\nthree\n"
testing "uniq input (specify file)" "uniq input" "one\ntwo\nthree\n" \
	"one\ntwo\ntwo\nthree\nthree\nthree\n" ""

testing "uniq input outfile (two files)" "uniq input actual > /dev/null" \
	"one\ntwo\nthree\n" "one\ntwo\ntwo\nthree\nthree\nthree\n" ""
testing "uniq (stdin) outfile" "uniq - actual" \
	"one\ntwo\nthree\n" "" "one\ntwo\ntwo\nthree\nthree\nthree\n"
# Note: SUSv3 doesn't seem to require support for "-" output, but we do anyway.
testing "uniq input - (specify stdout)" "uniq input -" \
	"one\ntwo\nthree\n" "one\ntwo\ntwo\nthree\nthree\nthree\n" ""


#-f skip fields
#-s skip chars
#-c occurrences
#-d dups only
#-u 

# Test various command line options

# Leading whitespace is a minor technical violation of the spec,
# but since gnu does it...
testing "uniq -c (occurrence count)" "uniq -c | sed 's/^[ \t]*//'" \
	"1 one\n2 two\n3 three\n" "" \
	"one\ntwo\ntwo\nthree\nthree\nthree\n"
testing "uniq -d (dups only) " "uniq -d" "two\nthree\n" "" \
	"one\ntwo\ntwo\nthree\nthree\nthree\n"

testing "uniq -f -s (skip fields and chars)" "uniq -f2 -s 3" \
"cc	dd	ee8
aa	bb	cc9
" "" \
"cc	dd	ee8
bb	cc	dd8
aa	bb	cc9
"

# -d is "Suppress the writing fo lines that are not repeated in the input."
# -u is "Suppress the writing of lines that are repeated in the input."
# Therefore, together this means they should produce no output.
testing "uniq -u and -d produce no output" "uniq -d -u" "" "" \
	"one\ntwo\ntwo\nthree\nthree\nthree\n"

exit $FAILCOUNT
