#------------------------------------------------------------------------------
# System data
#

# test run info
shells="/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh"
tests=" shflags_test_defines.sh shflags_test_parsing.sh shflags_test_private.sh shflags_test_public.sh"

# system info
$ date
Sat Nov 15 00:06:53 GMT 2008
$ uname -mprsv
SunOS 5.11 snv_77 i86pc i386


#------------------------------------------------------------------------------
# Running the test suite with /bin/sh
#
shell name: sh
shell version: unknown

--- Executing the 'defines' test suite ---
testFlagsDefine
testBoolean
testFloat
testInteger
testString
testShortNameLength

Ran 6 tests.

OK

--- Executing the 'parsing' test suite ---
test:WARN Standard version of getopt found. Some tests will be skipped.
testStandardGetopt
testEnhancedGetopt
testValidBooleanShort
testValidBooleanLong
testValidFloats
testInvalidFloats
testValidIntegers
testInvalidIntegers
testValidStrings
ASSERT:FLAGS (string with spaces) returned a non-zero result (2)
ASSERT:string (string with spaces) test failed. expected:<string with spaces> but was:<single_word>
>>> STDERR
flags:FATAL the available getopt does not support spaces in options
>>> end output
testMultipleFlags
testSingleNonFlagArg
testMultipleNonFlagArgs
testMultipleNonFlagStringArgsWithSpaces

Ran 13 tests.

FAILED (failures=2,skipped=92)

--- Executing the 'private' test suite ---
testGetFlagInfo
testItemInList
testScreenColumns
testValidateBoolean
testValidateFloat
testValidateInteger

Ran 6 tests.

OK

--- Executing the 'public' test suite ---
test:WARN Standard version of getopt found. Enhanced tests will be skipped.
testHelp
testStandardHelpOutput
testEnhancedHelpOutput
testNoHelp

Ran 4 tests.

OK (skipped=6)


#------------------------------------------------------------------------------
# Running the test suite with /bin/bash
#
shell name: bash
shell version: 3.2.25(1)-release

--- Executing the 'defines' test suite ---
testFlagsDefine
testBoolean
testFloat
testInteger
testString
testShortNameLength

Ran 6 tests.

OK

--- Executing the 'parsing' test suite ---
test:WARN Standard version of getopt found. Some tests will be skipped.
testStandardGetopt
testEnhancedGetopt
testValidBooleanShort
testValidBooleanLong
testValidFloats
testInvalidFloats
testValidIntegers
testInvalidIntegers
testValidStrings
ASSERT:FLAGS (string with spaces) returned a non-zero result (2)
ASSERT:string (string with spaces) test failed. expected:<string with spaces> but was:<single_word>
>>> STDERR
flags:FATAL the available getopt does not support spaces in options
>>> end output
testMultipleFlags
testSingleNonFlagArg
testMultipleNonFlagArgs
testMultipleNonFlagStringArgsWithSpaces

Ran 13 tests.

FAILED (failures=2,skipped=92)

--- Executing the 'private' test suite ---
testGetFlagInfo
testItemInList
testScreenColumns
testValidateBoolean
testValidateFloat
testValidateInteger

Ran 6 tests.

OK

--- Executing the 'public' test suite ---
test:WARN Standard version of getopt found. Enhanced tests will be skipped.
testHelp
testStandardHelpOutput
testEnhancedHelpOutput
testNoHelp

Ran 4 tests.

OK (skipped=6)



#------------------------------------------------------------------------------
# Running the test suite with /bin/ksh
#
shell name: ksh
shell version: M-11/16/88i

--- Executing the 'defines' test suite ---
testFlagsDefine
testBoolean
testFloat
testInteger
testString
testShortNameLength

Ran 6 tests.

OK

--- Executing the 'parsing' test suite ---
test:WARN Standard version of getopt found. Some tests will be skipped.
testStandardGetopt
testEnhancedGetopt
testValidBooleanShort
testValidBooleanLong
testValidFloats
testInvalidFloats
testValidIntegers
testInvalidIntegers
testValidStrings
ASSERT:FLAGS (string with spaces) returned a non-zero result (2)
ASSERT:string (string with spaces) test failed. expected:<string with spaces> but was:<single_word>
>>> STDERR
flags:FATAL the available getopt does not support spaces in options
>>> end output
testMultipleFlags
testSingleNonFlagArg
testMultipleNonFlagArgs
testMultipleNonFlagStringArgsWithSpaces

Ran 13 tests.

FAILED (failures=2,skipped=92)

--- Executing the 'private' test suite ---
testGetFlagInfo
testItemInList
testScreenColumns
testValidateBoolean
testValidateFloat
testValidateInteger

Ran 6 tests.

OK

--- Executing the 'public' test suite ---
test:WARN Standard version of getopt found. Enhanced tests will be skipped.
testHelp
testStandardHelpOutput
testEnhancedHelpOutput
testNoHelp

Ran 4 tests.

OK (skipped=6)



#------------------------------------------------------------------------------
# Running the test suite with /bin/zsh
#
shell name: zsh
shell version: 4.3.4

--- Executing the 'defines' test suite ---
testFlagsDefine
testBoolean
testFloat
testInteger
testString
testShortNameLength

Ran 6 tests.

OK

--- Executing the 'parsing' test suite ---
test:WARN Standard version of getopt found. Some tests will be skipped.
testStandardGetopt
testEnhancedGetopt
testValidBooleanShort
testValidBooleanLong
testValidFloats
testInvalidFloats
testValidIntegers
testInvalidIntegers
testValidStrings
ASSERT:FLAGS (string with spaces) returned a non-zero result (2)
ASSERT:string (string with spaces) test failed. expected:<string with spaces> but was:<single_word>
>>> STDERR
flags:FATAL the available getopt does not support spaces in options
>>> end output
testMultipleFlags
testSingleNonFlagArg
testMultipleNonFlagArgs
testMultipleNonFlagStringArgsWithSpaces

Ran 13 tests.

FAILED (failures=2,skipped=92)

--- Executing the 'private' test suite ---
testGetFlagInfo
testItemInList
testScreenColumns
testValidateBoolean
testValidateFloat
testValidateInteger

Ran 6 tests.

OK

--- Executing the 'public' test suite ---
test:WARN Standard version of getopt found. Enhanced tests will be skipped.
testHelp
testStandardHelpOutput
testEnhancedHelpOutput
testNoHelp

Ran 4 tests.

OK (skipped=6)
