1215 lines
25 KiB
Plaintext
1215 lines
25 KiB
Plaintext
'FTESTUtl.inc - definitions for Fast Test Utility routines
|
|
'
|
|
' Copyright (c) 1991-1992, Microsoft Corporation. All rights reserved.
|
|
'
|
|
'Purpose:
|
|
' This file defines the utility functions of the Fast Test functionality
|
|
'
|
|
'NOTES:
|
|
' See FASTTEST.INC for description of the Error catching that is coded
|
|
' throughout this module.
|
|
|
|
|
|
'**********************************************************
|
|
'***************** File Subroutines ***********************
|
|
'**********************************************************
|
|
|
|
|
|
'
|
|
' XFileExists(stFileSpec$)
|
|
'
|
|
' Description:
|
|
' Checks that stFileSpec$ exists.
|
|
' logs a failure if it can't find it (them; accept wildcards)
|
|
'
|
|
' Parameters:
|
|
' stFileSpec$ - file specification
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XFileExists "*.bak"
|
|
'
|
|
'
|
|
SUB XFileExists(stFileSpec$) STATIC
|
|
IF NOT EXISTS(stFileSpec$) THEN
|
|
XLogFailure stFileSpec$ + " doesn't exist"
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' XFileNotExists(stFileSpec$)
|
|
'
|
|
' Description:
|
|
' Checks that stFileSpec$ doesn't exist.
|
|
' logs a failure if it finds it (them; accepts wildcards)
|
|
'
|
|
' Parameters:
|
|
' stFileSpec$ - file specification
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XFileNotExists "*.bak"
|
|
'
|
|
'
|
|
SUB XFileNotExists(stFileSpec$) STATIC
|
|
IF EXISTS(stFileSpec$) THEN
|
|
XLogFailure stFileSpec$ + " exists"
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' BFileExists(stFileSpec$)
|
|
'
|
|
' Description:
|
|
' Checks if stFileSpec$ exists
|
|
'
|
|
' Parameters:
|
|
' stFileSpec$ - file specification
|
|
'
|
|
' Returns:
|
|
' TRUE if it exists, FALSE if not
|
|
'
|
|
'
|
|
'
|
|
FUNCTION BFileExists%(stFileSpec$) STATIC
|
|
BFileExists = EXISTS(stFileSpec$)
|
|
END FUNCTION
|
|
|
|
|
|
'
|
|
' XFileCmp(stFileSpec1$,stFileSpec2$)
|
|
'
|
|
' Description:
|
|
' Compares two files, line by line
|
|
' Logs a Failure if the files don't exist or are different
|
|
'
|
|
' Parameters:
|
|
' stFileSpec1$,stFileSpec2 - file specifications
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XFileCmp "Foo.dat","foo.bsl"
|
|
'
|
|
'
|
|
'
|
|
SUB XFileCmp(stFileSpec1$,stFileSpec2$) STATIC
|
|
DIM fh1% ' file handle of first file
|
|
DIM fh2% ' file handle of second file
|
|
DIM line1$ ' line from first file
|
|
DIM line2$ ' line from second file
|
|
DIM done ' flag to stop looping
|
|
DIM diff ' flag to indicate if files compare
|
|
|
|
gErrorType = ET_NEXT
|
|
fh1% = FREEFILE
|
|
OPEN stFileSpec1$ FOR INPUT AS #fh1%
|
|
fh2% = FREEFILE
|
|
OPEN stFileSpec2$ FOR INPUT AS #fh2%
|
|
|
|
IF gfError THEN
|
|
XLogFailure "Could not open files for XFileCmp"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
|
|
|
|
done = FALSE
|
|
diff = FALSE
|
|
|
|
IF EOF(fh1%) AND EOF(fh2%) THEN
|
|
done = TRUE
|
|
|
|
ELSEIF EOF(fh1%) OR EOF(fh2%) THEN
|
|
diff = TRUE
|
|
done = TRUE
|
|
END IF
|
|
|
|
|
|
WHILE NOT done
|
|
|
|
LINE INPUT #fh1%,line1$
|
|
LINE INPUT #fh2%,line2$
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XFileCmp INPUT or EOF errors"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
|
|
|
|
IF line1$ <> line2$ THEN
|
|
done = TRUE
|
|
diff = TRUE
|
|
END IF
|
|
|
|
IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
|
|
done = TRUE
|
|
END IF
|
|
|
|
IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
|
|
diff = TRUE
|
|
done = TRUE
|
|
END IF
|
|
|
|
WEND
|
|
|
|
CLOSE #fh1%
|
|
CLOSE #fh2%
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XFileCmp CLOSE errors"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
|
|
gErrorType = ET_NOTHING
|
|
|
|
IF diff THEN
|
|
XLogFailure "Files " + stFileSpec1$ + "," + stFileSpec2$ + " don't compare"
|
|
END IF
|
|
|
|
END SUB
|
|
|
|
'
|
|
' XFileNotCmp(stFileSpec1$,stFileSpec2$)
|
|
'
|
|
' Description:
|
|
' Compares two files, line by line
|
|
' Logs a Failure if the files don't exist or are same
|
|
'
|
|
' Parameters:
|
|
' stFileSpec1$,stFileSpec2 - file specifications
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XFileNotCmp "Foo.dat","foo.bsl"
|
|
'
|
|
'
|
|
'
|
|
SUB XFileNotCmp(stFileSpec1$,stFileSpec2$) STATIC
|
|
DIM fh1% ' file handle of first file
|
|
DIM fh2% ' file handle of second file
|
|
DIM line1$ ' line from first file
|
|
DIM line2$ ' line from second file
|
|
DIM done ' flag to stop looping
|
|
DIM diff ' flag to indicate if files compare
|
|
|
|
gErrorType = ET_NEXT
|
|
|
|
fh1% = FREEFILE
|
|
OPEN stFileSpec1$ FOR INPUT AS #fh1%
|
|
fh2% = FREEFILE
|
|
OPEN stFileSpec2$ FOR INPUT AS #fh2%
|
|
|
|
IF gfError THEN
|
|
XLogFailure "Could not open files for XFileNotCmp"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
|
|
done = FALSE
|
|
diff = FALSE
|
|
|
|
IF EOF(fh1%) AND EOF(fh2%) THEN
|
|
done = TRUE
|
|
END IF
|
|
|
|
IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
|
|
diff = TRUE
|
|
done = TRUE
|
|
END IF
|
|
|
|
WHILE NOT done
|
|
|
|
LINE INPUT #fh1%,line1$
|
|
LINE INPUT #fh2%,line2$
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XFileNotCmp INPUT or EOF errors"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
|
|
IF line1$ <> line2$ THEN
|
|
done = TRUE
|
|
diff = TRUE
|
|
END IF
|
|
|
|
IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
|
|
done = TRUE
|
|
END IF
|
|
|
|
IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
|
|
diff = TRUE
|
|
done = TRUE
|
|
END IF
|
|
|
|
WEND
|
|
|
|
CLOSE #fh1%
|
|
CLOSE #fh2%
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XFileNotCmp CLOSE errors"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
|
|
gErrorType = ET_NOTHING
|
|
|
|
IF NOT diff THEN
|
|
XLogFailure "Files " + stFileSpec1$ + "," + stFileSpec2$ + " do compare"
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' BFileCmp%(stFileSpec1$,stFileSpec2$)
|
|
'
|
|
' Description:
|
|
' Compares two files, line by line
|
|
' Logs a Failure if the files don't exist
|
|
'
|
|
' Parameters:
|
|
' stFileSpec1$,stFileSpec2 - file specifications
|
|
'
|
|
' Returns:
|
|
' FALSE IF XFileCmp would detect an error
|
|
'
|
|
' Example:
|
|
' x% = BFileCmp "Foo.dat","foo.bsl"
|
|
'
|
|
'
|
|
'
|
|
FUNCTION BFileCmp%(stFileSpec1$,stFileSpec2$) STATIC
|
|
DIM fh1%
|
|
DIM fh2%
|
|
DIM line1$
|
|
DIM line2$
|
|
DIM done
|
|
DIM diff
|
|
|
|
gErrorType = ET_NEXT
|
|
fh1% = FREEFILE
|
|
OPEN stFileSpec1$ FOR INPUT AS #fh1%
|
|
fh2% = FREEFILE
|
|
OPEN stFileSpec2$ FOR INPUT AS #fh2%
|
|
|
|
IF gfError THEN
|
|
BFileCmp = FALSE
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT FUNCTION
|
|
END IF
|
|
|
|
done = FALSE
|
|
diff = FALSE
|
|
|
|
IF EOF(fh1%) AND EOF(fh2%) THEN
|
|
done = TRUE
|
|
END IF
|
|
|
|
IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
|
|
diff = TRUE
|
|
done = TRUE
|
|
END IF
|
|
|
|
WHILE NOT done
|
|
|
|
LINE INPUT #fh1%,line1$
|
|
LINE INPUT #fh2%,line2$
|
|
|
|
IF gfError THEN
|
|
BFileCmp = FALSE
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT FUNCTION
|
|
END IF
|
|
|
|
IF line1$ <> line2$ THEN
|
|
done = TRUE
|
|
diff = TRUE
|
|
END IF
|
|
|
|
IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
|
|
done = TRUE
|
|
END IF
|
|
|
|
IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
|
|
diff = TRUE
|
|
done = TRUE
|
|
END IF
|
|
|
|
WEND
|
|
|
|
CLOSE #fh1%
|
|
CLOSE #fh2%
|
|
|
|
IF gfError THEN
|
|
BFileCmp = FALSE
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT FUNCTION
|
|
END IF
|
|
|
|
BFileCmp = NOT diff ' IF different a log failure would normally happen
|
|
|
|
END FUNCTION
|
|
|
|
|
|
'
|
|
' XDeleteFile(stFileSpec$)
|
|
'
|
|
' Description:
|
|
' Will delete stFileSpec$ if it, they, exists.
|
|
' logs a failure if it can't delete them or if the file(s)
|
|
' doesn't exist
|
|
'
|
|
' Parameters:
|
|
' stFileSpec$ - file specification
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XDeleteFile "*.bak"
|
|
'
|
|
'
|
|
SUB XDeleteFile(stFileSpec$) STATIC
|
|
IF EXISTS(stFileSpec$) THEN
|
|
gErrorType = ET_NEXT
|
|
KILL stFileSpec$
|
|
IF gfError THEN
|
|
XLogFailure "XDeleteFile " + stFileSpec$ + " could NOT be deleted"
|
|
gfError = FALSE
|
|
END IF
|
|
gErrorType = ET_NOTHING
|
|
ELSE
|
|
XLogFailure "XDeleteFile " + stFileSpec$ + " NOT deleted (doesn't exist)."
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' XDeleteFileIfExists(stFileSpec$)
|
|
'
|
|
' Description:
|
|
' Will delete stFileSpec$ if it, they, exists.
|
|
' logs a failure if it can't delete them but doesn't if the file(s)
|
|
' doesn't exist
|
|
'
|
|
' Parameters:
|
|
' stFileSpec$ - file specification
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XDeleteFileIfExists "*.bak"
|
|
'
|
|
'
|
|
SUB XDeleteFileIfExists(stFileSpec$) STATIC
|
|
IF EXISTS(stFileSpec$) THEN
|
|
gErrorType = ET_NEXT
|
|
KILL stFileSpec$
|
|
IF gfError THEN
|
|
XLogFailure "XDeleteFileIfExists " + stFileSpec$ + " could NOT be deleted"
|
|
gfError = FALSE
|
|
END IF
|
|
gErrorType = ET_NOTHING
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' XCreateFile(stFileSpec$,s$)
|
|
'
|
|
' Description:
|
|
' Will Create stFileSpec$ and put string in it
|
|
' logs a failure if it can't Create it
|
|
'
|
|
' Parameters:
|
|
' stFileSpec$ - file specification
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XCreateFile "foo.dat","Hello world"
|
|
'
|
|
'
|
|
'
|
|
|
|
SUB XCreateFile(stFileSpec$,s$) STATIC
|
|
DIM fh%
|
|
gErrorType = ET_NEXT
|
|
fh% = FREEFILE
|
|
|
|
OPEN stFileSpec$ FOR OUTPUT AS #fh%
|
|
|
|
PRINT #fh%,s$ ' put the string in the file
|
|
|
|
CLOSE #fh%
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XCreateFile encountered runtime errors"
|
|
gfError = FALSE
|
|
END IF
|
|
gErrorType = ET_NOTHING
|
|
|
|
END SUB
|
|
|
|
'
|
|
' XAppendFile(stFileSpec$,s$)
|
|
'
|
|
' Description:
|
|
' Will Append stFileSpec$ and put string in it
|
|
' logs a failure if it can't Append it
|
|
'
|
|
' Parameters:
|
|
' stFileSpec$ - file specification
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XAppendFile "foo.dat","Hello world"
|
|
'
|
|
'
|
|
'
|
|
|
|
SUB XAppendFile(stFileSpec$,s$) STATIC
|
|
DIM fh%
|
|
|
|
gErrorType = ET_NEXT
|
|
|
|
fh% = FREEFILE
|
|
|
|
OPEN stFileSpec$ FOR APPEND AS #fh%
|
|
|
|
PRINT #fh%,s$ ' put the string in the file
|
|
|
|
CLOSE #fh%
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XAppendFile encountered runtime errors"
|
|
gfError = FALSE
|
|
END IF
|
|
gErrorType = ET_NOTHING
|
|
|
|
END SUB
|
|
|
|
|
|
'
|
|
' XWaitMessageFile(s$,Message$,WaitTime%)
|
|
'
|
|
' Description:
|
|
' Wait for file to exist, only wait up to given time,
|
|
' check if string is in file (if string is non-empty)
|
|
' logs a failure if the files doesn't exist, or when
|
|
' it does and the string isn't in it.
|
|
'
|
|
' Parameters:
|
|
' s$ - file specification
|
|
' Message$ - the string to look for
|
|
' WaitTime% - the longest to wait
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XWaitMessageFile "foo.dat","Hello world",20
|
|
'
|
|
'
|
|
'
|
|
|
|
SUB XWaitMessageFile(s$,Message$, WaitTime%) STATIC
|
|
|
|
DIM fDone% ' flag to stop looping
|
|
DIM fFound% ' flag to indicate if file found
|
|
DIM lineIn$ ' line from file
|
|
DIM inret% ' return from INSTR
|
|
DIM fh% ' File handle
|
|
|
|
fDone = FALSE
|
|
fFound = FALSE
|
|
|
|
WHILE NOT fDone
|
|
|
|
IF EXISTS(s$) THEN
|
|
fDone = TRUE
|
|
fFound = TRUE
|
|
ELSE
|
|
SLEEP 1
|
|
|
|
WaitTime% = WaitTime% - 1
|
|
IF WaitTime% <= 0 THEN
|
|
fDone = TRUE
|
|
END IF
|
|
END IF
|
|
WEND
|
|
|
|
IF NOT fFound% THEN
|
|
XLogFailure "FAIL """ + s$ + """ Message File not found"
|
|
ELSE
|
|
|
|
IF Message$ = "" THEN
|
|
' don't bother searching if no string given
|
|
EXIT SUB
|
|
END IF
|
|
|
|
fDone = FALSE
|
|
fFOUND = FALSE
|
|
|
|
gErrorType = ET_NEXT
|
|
|
|
fh% = FREEFILE
|
|
|
|
OPEN s$ FOR INPUT AS # fh%
|
|
|
|
IF EOF(fh%) THEN
|
|
fDone% = TRUE
|
|
END IF
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XWaitMessageFile encountered runtime error during OPEN"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
|
|
WHILE NOT fDone%
|
|
|
|
LINE INPUT # fh%, lineIn$
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XWaitMessageFile encountered runtime error during INPUT"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
|
|
inret% = INSTR(lineIn$,Message$)
|
|
|
|
IF inret% <> 0 THEN
|
|
fFound% = TRUE
|
|
fDone = TRUE
|
|
END IF
|
|
|
|
IF EOF(fh%) THEN
|
|
fDone% = TRUE
|
|
END IF
|
|
WEND
|
|
|
|
CLOSE # fh%
|
|
|
|
IF gfError THEN
|
|
XLogFailure "XWaitMessageFile encountered runtime error during CLOSE"
|
|
gErrorType = ET_NOTHING
|
|
gfError = FALSE
|
|
EXIT SUB
|
|
END IF
|
|
gErrorType = ET_NOTHING
|
|
|
|
IF NOT fFound% THEN
|
|
XLogFailure "FAIL, found """ + s$ + """ Message File, """ + Message$ + """ not in it"
|
|
END IF
|
|
END IF
|
|
END SUB
|
|
|
|
'**********************************************************
|
|
'***************** Directory Subroutines ******************
|
|
'**********************************************************
|
|
|
|
'
|
|
' XCWDCmp(s$)
|
|
'
|
|
' Description:
|
|
' Compare the current working directory and log error if it
|
|
' doesn't match the expected value
|
|
'
|
|
' Parameters:
|
|
' s$ - the expected value for the current directory
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XCWDCmp "c:\tests"
|
|
'
|
|
|
|
SUB XCWDCmp(s$) STATIC
|
|
|
|
IF BCWDCmp(s$) = 0 THEN
|
|
XLogFailure "Current working directory (" + UCASE$(CURDIR$) + ") doesn't match " + UCASE$(s$)
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' XCWDNotCmp(s$)
|
|
'
|
|
' Description:
|
|
' Compare the current working directory and log error if it
|
|
' does match the given value
|
|
'
|
|
' Parameters:
|
|
' s$ - the value for the directory that isn't expected
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XCWDNotCmp "c:\tests"
|
|
'
|
|
|
|
SUB XCWDNotCmp(s$) STATIC
|
|
|
|
IF UCASE$(CURDIR$) = UCASE$(s$) THEN
|
|
XLogFailure "Current working directory (" + UCASE$(CURDIR$) + ") matches " + UCASE$(s$)
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' BCWDCmp(s$)
|
|
'
|
|
' Description:
|
|
' return compare of the current working directory and the expected value
|
|
'
|
|
' Parameters:
|
|
' s$ - the expected value for the current directory
|
|
'
|
|
' Returns:
|
|
' TRUE if matches, FALSE if doesn't
|
|
'
|
|
' Example:
|
|
' flag% = BCWDCmp("c:\tests")
|
|
'
|
|
|
|
FUNCTION BCWDCmp%(s$) STATIC
|
|
|
|
BCWDCmp = UCASE$(CURDIR$) = UCASE$(s$)
|
|
|
|
END FUNCTION
|
|
|
|
'
|
|
' XDriveCmp(s$)
|
|
'
|
|
' Description:
|
|
' Compare the current working drive and log error if it
|
|
' doesn't match the expected value
|
|
'
|
|
' Parameters:
|
|
' s$ - the expected value for the current drive
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XDriveCmp "c:"
|
|
'
|
|
|
|
SUB XDriveCmp(s$) STATIC
|
|
|
|
IF BDriveCmp%(s$) = 0 THEN
|
|
XLogFailure "Current working Drive (" + MID$(UCASE$(CURDIR$),1,2) + ") doesn't match " + UCASE$(s$)
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' XDriveNotCmp(s$)
|
|
'
|
|
' Description:
|
|
' Compare the current working drive and log error if it
|
|
' does match the given value
|
|
'
|
|
' Parameters:
|
|
' s$ - the expected value for the current drive
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XDriveNotCmp "c:"
|
|
'
|
|
SUB XDriveNotCmp(s$) STATIC
|
|
|
|
IF MID$(UCASE$(CURDIR$),1,2) = UCASE$(s$) THEN
|
|
XLogFailure "Current working Drive (" + MID$(UCASE$(CURDIR$),1,2) + ") matches " + s$
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' BDriveCmp(s$)
|
|
'
|
|
' Description:
|
|
' return compare the current working drive and the expected value
|
|
'
|
|
' Parameters:
|
|
' s$ - the expected value for the current drive
|
|
'
|
|
' Returns:
|
|
' TRUE if matches, FALSE if doesn't
|
|
'
|
|
' Example:
|
|
' flag% = BDriveCmp("c:")
|
|
'
|
|
|
|
FUNCTION BDriveCmp%(s$) STATIC
|
|
|
|
BDriveCmp = MID$(UCASE$(CURDIR$),1,2) = UCASE$(s$)
|
|
|
|
END FUNCTION
|
|
|
|
'
|
|
' XChangeCWD(s$)
|
|
'
|
|
' Description:
|
|
' Change to given working directory, log failure if doesn't succeed
|
|
'
|
|
' Parameters:
|
|
' s$ - directory to change to
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XChangeCWD "\tmp"
|
|
'
|
|
'
|
|
SUB XChangeCWD(s$) STATIC
|
|
gErrorType = ET_NEXT
|
|
CHDIR s$
|
|
IF gfError THEN
|
|
XLogFailure "XChangeCWD could not change directory"
|
|
gfError = FALSE
|
|
END IF
|
|
gErrorType = ET_NOTHING
|
|
END SUB
|
|
|
|
'
|
|
' XCreateDir(s$)
|
|
'
|
|
' Description:
|
|
' Create the given directory, log failure if doesn't succeed
|
|
'
|
|
' Parameters:
|
|
' s$ - directory to create
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XCreateDir "\tmpdir"
|
|
'
|
|
'
|
|
SUB XCreateDir(s$) STATIC
|
|
gErrorType = ET_NEXT
|
|
MKDIR s$
|
|
IF gfError THEN
|
|
XLogFailure "XCreateDir could not create directory"
|
|
gfError = FALSE
|
|
END IF
|
|
gErrorType = ET_NOTHING
|
|
END SUB
|
|
|
|
'
|
|
' XChangeDrive(s$)
|
|
'
|
|
' Description:
|
|
' Change the current working drive, log failure if doesn't succeed
|
|
'
|
|
' Parameters:
|
|
' s$ - drive to change to
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XChangeDrive "c:"
|
|
'
|
|
'
|
|
SUB XChangeDrive(s$) STATIC
|
|
gErrorType = ET_NEXT
|
|
CHDRIVE s$
|
|
IF gfError THEN
|
|
XLogFailure "XChangeDrive could not change drive"
|
|
gfError = FALSE
|
|
END IF
|
|
gErrorType = ET_NOTHING
|
|
END SUB
|
|
|
|
'**********************************************************
|
|
'***************** Program Subroutines ********************
|
|
'**********************************************************
|
|
|
|
|
|
|
|
'
|
|
' HStartApp%(stAppName$)
|
|
'
|
|
' Description:
|
|
' Starts app AppName and returns the handle to the App
|
|
'
|
|
' Parameters:
|
|
' stAppName$ - name of app to WinExec and get handle to
|
|
'
|
|
' Returns:
|
|
' handle to application started
|
|
'
|
|
' Example:
|
|
' hWinHelp% = HStartApp("winhelp.exe")
|
|
'
|
|
'
|
|
FUNCTION HStartApp%(stAppName$) STATIC
|
|
DIM Bogus%, hwndActive%, hwndNewApp%
|
|
DIM lpszTemp$
|
|
|
|
' Get the current foreground window
|
|
hwndActive = GetForegroundWindow ()
|
|
|
|
Bogus% = WinExec (stAppName$, SW_SHOWNORMAL)
|
|
lpszTemp$ = "WinExec error with " + stAppName$ + " :"
|
|
|
|
' WinExec defines SOME of the values between 0 and 32
|
|
' as errors... any return value greater than 32
|
|
' should be considered a success!
|
|
SELECT CASE Bogus%
|
|
CASE 0
|
|
XLogFailure lpszTemp$ + "Out of memory - exiting"
|
|
|
|
CASE 2
|
|
XLogFailure lpszTemp$ + "File not found"
|
|
End
|
|
CASE 3
|
|
XLogFailure lpszTemp$ + "Path not found"
|
|
|
|
CASE 5
|
|
XLogFailure lpszTemp$ + "Attempt to dynamically link to a task"
|
|
|
|
CASE 6
|
|
XLogFailure lpszTemp$ + "Library requires separate data segments"
|
|
|
|
CASE 10
|
|
XLogFailure lpszTemp$ + "Incorrect Windows version"
|
|
|
|
CASE 11
|
|
XLogFailure lpszTemp$ + "Invalid EXE file"
|
|
|
|
CASE 12
|
|
XLogFailure lpszTemp$ + "OS/2 application"
|
|
|
|
CASE 13
|
|
XLogFailure lpszTemp$ + "DOS 4.0 application"
|
|
|
|
CASE 14
|
|
XLogFailure lpszTemp$ + "Unknown EXE type"
|
|
|
|
CASE 15
|
|
XLogFailure lpszTemp$ + "Must run in real mode Windows"
|
|
|
|
CASE 16
|
|
XLogFailure lpszTemp$ + "Cannot run more than one instance"
|
|
|
|
CASE 17
|
|
XLogFailure lpszTemp$ + "Large-frame EMS allows only one instance"
|
|
|
|
CASE 18
|
|
XLogFailure lpszTemp$ + "Must run in standard or enhanced mode Windows"
|
|
|
|
CASE 0 TO 32
|
|
XLogFailure lpszTemp$ + "Unknown Error in WinExec"
|
|
|
|
END SELECT
|
|
|
|
' Wait until the old foreground window is no longer the foreground wnd
|
|
while hwndActive = GetForegroundWindow
|
|
sleep 1
|
|
wend
|
|
|
|
HStartApp = GetForegroundWindow ()
|
|
END FUNCTION
|
|
|
|
'
|
|
' XStartApp(stAppName$)
|
|
'
|
|
' Description:
|
|
' Starts app AppName and sets handle to ghAppHwnd.
|
|
' if we get a null handle, THEN we end the script here.
|
|
'
|
|
' Parameters:
|
|
' stAppName$ - name of app to WinExec
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XStartApp "winhelp.exe"
|
|
'
|
|
'
|
|
SUB XStartApp(stAppName$, stClassname$) STATIC
|
|
DIM logstr$
|
|
'ghAppHwnd is a global
|
|
ghAppHwnd = HStartApp(stAppName$)
|
|
IF (ghAppHwnd = 0) THEN
|
|
'we didn't get a handle
|
|
XLogFailure "Unable to start app " + stAppName$
|
|
ELSEIF stClassname$ <> "" THEN
|
|
gsAppClassname = stClassname$ ' remember it for later
|
|
IF FindWindow(stClassname$,NULL) = 0 THEN
|
|
' The app isn't around
|
|
logstr$ = "The app " + stAppName$ + " started but didn't stay OR..."
|
|
logstr$ = logstr$ + CRLF$ + "the given class name ("
|
|
logstr$ = logstr$ + stClassname$ + ") is incorrect"
|
|
XLogFailure logstr$
|
|
END IF
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' XSetCleanup(sCleanup$)
|
|
'
|
|
' Description:
|
|
' Stores a user defined DoKeys string to be used to exit the
|
|
' application automatically. If set to an empty string,
|
|
' nothing will be sent with DoKeys but there will still be
|
|
' a log failure if the application is still running when the
|
|
' script ends (no check is done if there wasn't a classname
|
|
' supplied with XStartApp
|
|
'
|
|
' Parameters:
|
|
' sCleanup$ - the string to use with DoKeys to end the app
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XSetCleanup "{esc 5}%vx"
|
|
'
|
|
'
|
|
SUB XSetCleanup (sCleanup$) STATIC
|
|
gsCleanup$ = sCleanup$
|
|
END SUB
|
|
|
|
' This routine is not intended to be called in the user script.
|
|
' This routine is executed when the script finishes with an END
|
|
' statement. Its purpose is to find the application started with
|
|
' XStartapp using the classname supplied there. if it exists,
|
|
' and the gsCleanup string is nonempty, the gsCleanup string will
|
|
' be played. This may still not get rid of the app for various
|
|
' reasons: maybe it is prompting to save a file, or it won't exit
|
|
' a dialog...
|
|
|
|
SUB XDoCleanup STATIC
|
|
DIM logstr$
|
|
IF gsCleanup$ <> "" AND gsAppClassname$ <> "" AND FindWindow(gsAppClassname$,NULL) <> 0 THEN
|
|
DoKeys gsCleanup$
|
|
END IF
|
|
IF gsAppClassname$ <> "" AND FindWindow(gsAppClassname$,NULL) <> 0 THEN
|
|
logstr$ = "The app with class name " + gsAppClassname$ + " was not"
|
|
logstr$ = logstr$ + CRLF$ + "halted by the cleanup string " + gsCleanup$
|
|
XLogFailure logstr$
|
|
END IF
|
|
|
|
END SUB
|
|
|
|
|
|
|
|
'**********************************************************
|
|
'***************** Mouse Subroutines **********************
|
|
'**********************************************************
|
|
|
|
' The mouse routines use the VK_LBUTTON, VK_RBUTTON, VK_MBUTTON
|
|
' constants to determine which button to use (or LBUTTON, MBUTTON or RBUTTON
|
|
' as defined in fasttest.inc
|
|
|
|
|
|
'
|
|
' XMoveMouse(x%,y%)
|
|
'
|
|
' Description:
|
|
' Moves the mouse pointer to specified absolute screen coordinates
|
|
'
|
|
' Parameters:
|
|
' x%,y% - x and y coordinates to move to
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XMoveMouse 100,120
|
|
'
|
|
'
|
|
|
|
SUB XMoveMouse (x%, y%) STATIC
|
|
|
|
QueMouseMove x%,y%
|
|
QueFlush FALSE
|
|
END SUB
|
|
|
|
|
|
'
|
|
' XClickMouse(button%,x%,y%)
|
|
'
|
|
' Description:
|
|
' Clicks the mouse pointer to specified absolute screen coordinates
|
|
'
|
|
' Parameters:
|
|
' button% - which button to click
|
|
' x%,y% - x and y coordinates to move to
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XClickMouse LBUTTON,100,120
|
|
'
|
|
'
|
|
|
|
SUB XClickMouse(button%, x%, y%) STATIC
|
|
|
|
QueMouseDn button%,x%,y%
|
|
QueMouseUp button%,x%,y%
|
|
QueFlush FALSE
|
|
|
|
END SUB
|
|
|
|
'
|
|
' XDblClickMouse(button%,x%,y%)
|
|
'
|
|
' Description:
|
|
' Clicks the mouse pointer to specified absolute screen coordinates
|
|
'
|
|
' Parameters:
|
|
' button% - which button to double click
|
|
' x%,y% - x and y coordinates to move to
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XDblClickMouse LBUTTON,100,120
|
|
'
|
|
'
|
|
SUB XDblClickMouse(button%, x%, y%) STATIC
|
|
|
|
QueMouseDblClk button%,x%,y%
|
|
QueFlush FALSE
|
|
|
|
END SUB
|
|
|
|
'
|
|
' XDragMouse (button%, Begx%, Begy%, Endx%, Endy%)
|
|
'
|
|
' Description:
|
|
' Drags the mouse pointer to specified absolute screen coordinates
|
|
'
|
|
' Parameters:
|
|
' button% - which button to use for dragging
|
|
' Begx%,Begy% - x and y coordinates to Drag from
|
|
' Endx%,Endy% - x and y coordinates to Drag to
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XDragMouse LBUTTON,100,120, 200,220
|
|
'
|
|
'
|
|
SUB XDragMouse (button%, Begx%, Begy%, Endx%, Endy%) STATIC
|
|
|
|
QueMouseDn button%,Begx%,Begy%
|
|
QueMouseMove Endx%,Endy%
|
|
QueMouseUp button%,Endx%,Endy%
|
|
QueFlush FALSE
|
|
END SUB
|
|
|
|
|
|
|
|
|
|
'**********************************************************
|
|
'***************** ClipBoard Subroutines ******************
|
|
'**********************************************************
|
|
|
|
|
|
'
|
|
' XClipBoardCmp(s$)
|
|
'
|
|
' Description:
|
|
' Compare given string to what is in the clipboard, log failure
|
|
' if they don't match
|
|
'
|
|
' Parameters:
|
|
' s$ - string to compare
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XClipBoardCmp "07734"
|
|
'
|
|
'
|
|
SUB XClipBoardCmp (s$) STATIC
|
|
|
|
IF s$ <> CLIPBOARD$ THEN
|
|
XLogFailure "String does not match clipboard"
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' XClipBoardNotCmp(s$)
|
|
'
|
|
' Description:
|
|
' Compare given string to what is in the clipboard, log failure
|
|
' if they match
|
|
'
|
|
' Parameters:
|
|
' s$ - string to compare
|
|
'
|
|
' Returns:
|
|
' nothing
|
|
'
|
|
' Example:
|
|
' XClipBoardNotCmp "07734"
|
|
'
|
|
'
|
|
SUB XClipBoardNotCmp (s$) STATIC
|
|
|
|
IF s$ = CLIPBOARD$ THEN
|
|
XLogFailure "String does match clipboard"
|
|
END IF
|
|
END SUB
|
|
|
|
'
|
|
' BClipBoardCmp(s$)
|
|
'
|
|
' Description:
|
|
' Compare given string to what is in the clipboard, log failure
|
|
' if they don't match
|
|
'
|
|
' Parameters:
|
|
' s$ - string to compare
|
|
'
|
|
' Returns:
|
|
' TRUE if matches, FALSE if doesn't
|
|
'
|
|
' Example:
|
|
' flag% = BClipBoardCmp "07734"
|
|
'
|
|
'
|
|
FUNCTION BClipBoardCmp (s$) STATIC
|
|
|
|
BClipBoardCmp = s$ = CLIPBOARD$
|
|
END FUNCTION
|
|
|