Core Data Types of SilkTest
-
Upload
api-3698888 -
Category
Documents
-
view
1.798 -
download
0
Transcript of Core Data Types of SilkTest
(¯`•._.•[Jagan’s]•._.•´¯)
************************************************************************
SILK TEST 7.5 ************************************************************************ The following topics are discussed in this document.
1. Types of TestCases 2. Types of Testing 3. Client/server testing challenges 4. Networking protocols used by SilkTest 5. Parallel processing statements and how they work 6. Core Data Types in Silk Test
************************************************************************ 1. Types of testcases There are two basic types of testcases:
• Level 1 tests, often called smoke tests or object tests, verify that an application’s
GUI objects function properly. For example, they verify that text fields can accept
keystrokes and check boxes can display a check mark.
• Level 2 tests verify an application feature. For example, they verify that an
application’s searching capability can correctly find different types of search
patterns.
You typically run Level 1 tests when you receive a new build of your application, and do
not run Level 2 tests until your Level 1 tests achieve a specific pass/fail ratio. The reason
for this is that unless your application’s graphical user interface works, you cannot
actually test the application itself.
************************************************************************ 2. Types of Testing
Functional testing
Before you test the multi-user aspects of a client/server application, you should verify the
functional operation of a single instance of the application. This is the same kind of
testing that you would do for a non-distributed application.
Once you have written scripts to test all the operations of the application as it runs on one
platform, you can modify the scripts as needed for all other platforms on which the
(¯`•._.•[Jagan’s]•._.•´¯)
application runs. Testing multiple platforms thus becomes almost trivial. Moreover, many
of the tests you script for functional testing can become the basis of your other types of
testing. For example, you can easily modify the functional tests (or a subset of them) to
use in load testing.
Configuration testing
A client/server application typically runs on multiple different platforms and utilizes a
server that runs on one or more different platforms. A complete testing program needs to
verify that every possible client platform can operate with every possible server platform.
This implies the following combinations of tests:
• Test the client application and the server application when they are running on the
same machine—if that is a valid operational mode for the application. This testing
must be repeated for each platform that can execute in that mode.
• Test with the client and server on separate machines. This testing should be
repeated for all different platform combinations of server and client
Concurrency testing
Test two clients using the same server. This is a variation of functional testing that
verifies that the server can properly handle simultaneous requests from two clients. The
simplest form of concurrency testing just verifies that two clients can make multiple non-
conflicting server requests during the same period of time. This is a very basic sanity test
for a client/server application.
To test for problems with concurrent access to the same database record, you need to
write specific scripts that synchronize two clients to make requests of the same records in
your server’s database(s) at the same time. Your goal is to encounter faulty read/write
locks, software deadlocks, or other concurrency problems.
Stress testing
Stress testing verifies that running a particular command or set of commands a large
number of times does not break the software. For example, stress testing discovers a
failure to release resources. This is no different than stress testing for a non-distributed
application, but as with functional testing, you need to discover whether the application
functions properly with a remote server under stress conditions. You can do this type of
stress testing with a single client.
You can create stress tests by repeating the same commands a large number of times.
Usually, the 4Test code looks like this:
for i = 1 to 50
DoSomeCommands ()
(¯`•._.•[Jagan’s]•._.•´¯)
For example, you can stress-test remote logins or you can stress-test all application
operations that allocate significant amounts of memory (to see if they release that
memory). One simple form of stress testing is to set up your functional tests to repeat
indefinitely and then run them night and day over a two- to four-day period.
Load testing
Load testing verifies that running a large number of concurrent clients does not break the
server or client software. For example, load testing discovers deadlocks and problems
with queues. SilkTest’s unique architecture provides built-in load testing. You can
implement your functional tests using multi-application techniques and then, after
completing functional testing on a single machine, you can run them on multiple targets.
Unlike simulated load testing tools, SilkTest allows you to create a real-life scenario that
can determine the actual impact of multi-machine operation on your application, the
server, the network, and all related elements.
There are two variations of load testing:
1. Peak load (sometimes called stress testing in the client/server environment)
Peak load testing Peak load testing is placing a load on the server for a short time to emulate the
heaviest demand that would be generated at peak user times—for example, credit
card verification between noon and 1 PM on Christmas Eve. This type of test
requires a significant number of client systems. If you submit complex
transactions to the server from each client in your test network, using minimal
user setup, you can emulate the typical load of a much larger number of clients.
Your testbed may not have sufficient machines to place a heavy load on your
server system — even if your clients are submitting requests at top speed. In this
case it may be worthwhile to reconfigure your equipment so that your server is
less powerful. An inadequate server configuration should enable you to test the
server’s management of peak server conditions.
2. Volume
Volume testing Volume testing is placing a heavy load on the server, with a high volume of data
transfers, for 24 to 48 hours. One way to implement this is to use one set of clients
to generate large amounts of new data and another set to verify the data (and
delete data to keep the size of the database at an appropriate level). You would
need to synchronize the verification scripts to wait for the generation scripts. The
4Test script language makes this easy. You would not normally need a very large
testbed to drive this type of server load, but again, if you under-configure your
(¯`•._.•[Jagan’s]•._.•´¯)
server you will probably be able to exercise the sections of the software that
handle the outer limits of data capacity.
Performance testing
We believe that the most accurate determination of a system’
s performance is achieved by actually testing the system in a real-world environment,
rather than through simulation. However, if it is impractical to test the full scope of the
system (500 users, for instance), you will typically have a better understanding of the
load on your system at this usage level by projecting the actual system performance based
on the real-world testing of a subset of systems. Typically, the performance trend is
reached long before all users have been added, and the mathematical projection is a
simple one:
Increase the rate of server requests submitted until the trend is isolated and then project
the remainder. From the response times at different request rates, you can calculate the
expected performance for different numbers of users submitting requests at a normal rate.
The result of this method is frequently more accurate than simulation can provide,
because a simulation cannot produce the same complex interactions as these scenarios.
Although you probably cannot establish a 500-user testbed that runs a realistic workload
(which might average two server requests per client per hour), you can design an artificial
workload that submits sequential requests as fast as the response to the previous request
is received. If you cannot generate a sufficient load using SilkTest’s GUI-driving scripts,
use the Extension Kit (EK) to drive the application’s API directly. Using either method,
you can drive the server with different rates of received requests and chart the response
times for different numbers of representative users. You can then repeat the test with a
more (or less) powerful server. See the Extension Kit Guide for more information.
************************************************************************
3. Client/server testing challenges
SilkTest provides powerful support for testing client/server applications and/ or databases
in a networked environment. Testing multiple remote applications raises the level of
complexity of QA engineering above that required for stand-alone application testing.
Here are just a few of the testing methodology challenges raised by client/server testing:
• Managing simultaneous automatic regression tests on different configurations
and/or platforms.
• Ensuring the reproducibility of client/server tests that modify a server database.
• Verifying the server operations of a client application’s independently, without
relying on the application under test.
• Testing the concurrency features of a client/server application.
(¯`•._.•[Jagan’s]•._.•´¯)
• Testing the intercommunication capabilities of networked applications.
• Closing down multiple failed applications and bringing them back to a particular
base state (recovery control).
• Testing the functioning of the server application when driven at peak request rates
and at maximum data rates (peak load and volume testing).
• Automated regression testing of multi-tier client/server architectures.
************************************************************************
4. Networking protocols used by SilkTest
SilkTest runs on many platforms, but only three different protocols are used. This means
that a SilkTest script on one platform can drive the Agent on a target platform, as long as
both the host and Agent platforms are running an appropriate protocol for the platform
and both are running the same protocol (regardless of the protocols used by the
applications under test). The table lists the protocols available for each platform.
Platform TCP/IP NetBIOS/ NetBEUI Windows • •
Solaris •
SunOS •
HP-UX •
AIX •
IRIX •
Suppose you are running SilkTest under Windows 95 and testing an application that
requires TCP/IP communications in order to communicate with a server on a Sun Sparc
station. SilkTest’s Windows machine can run NetBIOS for the host and the application’s
Windows machine must then run NetBIOS for the Agent as well as TCP/IP for the
application under test. Running NetBIOS will have no impact on your TCP/ IP
connections but will allow SilkTest to communicate with the Agent. Alternatively, since
the application is already running TCP/IP, you can choose to use TCP/IP for SilkTest and
its Agents as well.
There is no limit on the protocol or API that an application under test may use. Just make
sure that the protocol required by SilkTest and the protocol required by your application
are running at the same time.
************************************************************************
5. Parallel processing statements and how they work
(¯`•._.•[Jagan’s]•._.•´¯)
You create and manage multiple threads using combinations of the 4Test statements
parallel, spawn, rendezvous, and critical .
In 4Test, all running threads (those not blocked) have the same priority with respect to
one another. 4Test executes one instruction for a thread, then passes control to the next
thread. The first thread called is the first run, and so on.
All threads run to completion unless they are deadlocked. 4Test will detect a script
deadlock and raise an exception. Note that the 4Test exit statement terminates all threads
immediately when it is executed by one thread.
parallel statement
A parallel statement spawns a statement for each machine specified and blocks the
calling thread until the threads it spawns have all completed. It condenses the actions of
spawn and rendezvous and can make code more readable.
The parallel statement executes a single statement for each thread. Thus if you wish to
run complete tests in parallel threads, use the invocation of a test function (which may
execute many statements) with the parallel statement, or use a block of statements with
spawn and rendezvous.
To use the parallel statement, you have to specify the machines for which threads are to
be started. You can follow the parallel keyword with a list of statements, each of which
specifies a different Agent name. For example:
parallel
DoSomething ("Client1")
DoSomething ("Client2")
The DoSomething function then typically issues a SetMachine(sMachine) call to direct
its machine operations to the proper Agent.
spawn statement
A spawn statement begins execution of the specified statement or block of statements in a
new thread. Since the purpose of spawn is to initiate concurrent test operations on
multiple machines, the structure of a block of spawned code is typically:
· A SetMachine command, which directs subsequent machine operations to the
specified Agent.
· A set of machine operations to drive the application.
· A verification of the results of the machine operations.
You can use spawn to start a single thread for one machine, and then use successive
spawn statements to start threads for other machines being tested. SilkTest scans for all
(¯`•._.•[Jagan’s]•._.•´¯)
spawn statements preceding a rendezvous statement and starts all the threads at the same
time. However, the typical use of spawn is in a loop, as follows:
for each sMachine in lsMachine
spawn // start thread for each sMachine
SetMachine (sMachine)
DoSomething ()
rendezvous
The above example could achieve the same result when written as follows:
for each sMachine in lsMachine
spawn
[sMachine]DoSomething ()
Rendezvous
rendezvous statement
A rendezvous statement blocks execution of the calling thread until all threads that were
spawned by the calling thread have completed. When the last child thread exits, it
unblocks the parent thread. The rendezvous statement is unnecessary if it is the last
statement at the end of the testcase. If the calling thread has no child threads, rendezvous
does nothing.
critical statement
A critical statement guarantees that no other thread will execute until the specified
statement or indented block of code has executed and passed control to the next statement
at the level of the critical statement. Only one thread can have critical status at any time.
************************************************************************
6. CORE DATA TYPES
AGENTOPTION data type
Agent options control various aspects of agent operations. When you want to get or set
the value of an agent option, you use the appropriate constant from the AGENTOPTION
data type to identify the option. For example, the option value identified by
OPT_KEYBOARD_DELAY specifies the time the agent waits between each keystroke
submitted from a script. You can access the values of options by passing the constants
defined for this data type to the GetOption method and SetOption method of the
AgentClass class. For information about specific options, see Agent options.
4Test defines this enumerated data type as follows:
(¯`•._.•[Jagan’s]•._.•´¯)
type AGENTOPTION is enum
OPT_BITMAP_MATCH_COUNT
OPT_BITMAP_MATCH_INTERVAL
OPT_BITMAP_MATCH_TIMEOUT
OPT_BITMAP_PIXEL_TOLERANCE
OPT_CLASS_MAP
OPT_COMPATIBLE_TAGS
OPT_COMPRESS_WHITESPACE
OPT_CLOSE_CONFIRM_BUTTONS
OPT_CLOSE_DIALOG_KEYS
OPT_CLOSE_WINDOW_BUTTONS
OPT_CLOSE_WINDOW_MENUS
OPT_DEBUG
OPT_FORCE_MODAL_UPDATES
OPT_KEYBOARD_DELAY
OPT_KEYBOARD_LAYOUT
OPT_MATCH_ITEM_CASE
OPT_MENU_INVOKE_POPUP
OPT_MENU_PICK_BEFORE_GET
OPT_MENU_PICK_WITH_KEYS
OPT_MOUSE_DELAY
OPT_POWER_BUILDER
OPT_RADIO_LIST
OPT_REL1_CLASS_LIBRARY
OPT_REQUIRE_ACTIVE
OPT_TEXT_NEW_LINE
OPT_TRANSLATE_TABLE
OPT_TRAP_FAULTS
OPT_TRAP_FAULTS_FLAGS
OPT_TRIM_ITEM_SPACE
OPT_VERIFY_ACTIVE
OPT_VERIFY_COORD
OPT_VERIFY_CTRLTYPE
OPT_VERIFY_ENABLED
OPT_VERIFY_EXPOSED
OPT_VERIFY_RESPONDING
OPT_VERIFY_UNIQUE
OPT_VISUAL_BASIC
OPT_WINDOW_MOVE_TOLERANCE
OPT_WINDOW_RETRY
OPT_WINDOW_SIZE_TOLERANCE
OPT_WINDOW_TIMEOUT
AGENTSWITCH data type
(¯`•._.•[Jagan’s]•._.•´¯)
4Test defines this enumerated data type as follows:
type AGENTSWITCH is enum
[ ] AS_SHOW_ALL_CLASSES
[ ] AS_SHOW_ALL_METHODS
ANYTYPE data type Description
A variable of type ANYTYPE stores data of any type, including user-defined types.
Note Be careful when you give a variable type ANYTYPE, because 4Test does not
perform compile-time type checking on it. However, type checking does occur at
runtime.
APPID data type Description
An identification code that uniquely identifies a process.
4Test defines this alias data type as follows:
type APPID is INTEGER
ARRAY data type Description
Used to declare an array variable.
Syntax 1
ARRAY [dimension] [, dimension ]... OF data-type array-id
Syntax 2
data-type array-id [dimension] [, dimension]...
Syntax 3
ARRAY [dimension] OF ARRAY [dimension] OF data-type array-id
Variable Description
dimension An INTEGER expression that specifies the size of the array. The
expression is evaluated at runtime.
data-type The data type you want the elements in the array to have.
(¯`•._.•[Jagan’s]•._.•´¯)
array-id An identifier that specifies the name of the array.
Notes
Often you need to group several pieces of data together. 4Test uses the ARRAY and
LIST compound data types to do this. Use the ARRAY data type to group together data
values, all of which must have the same type. Specify the type and number of elements
when you declare the array.
Arrays are made up of elements that are grouped in a hierarchy. Each level of the
hierarchy is called a dimension. Each dimension holds a fixed number of either elements
or sub-arrays. The leaf nodes of the hierarchy, which are in the last dimension specified,
contain elements; the other dimensions hold sub-arrays. Consider the following array
specification:
ARRAY[2][3][4] OF INTEGER MyArray
In this array there are two sub-arrays at level one, three sub-arrays at level two, and 4
elements in each of the level two sub-arrays. Since each of the level-one sub-arrays
contains three sub-arrays, and each of these six level-two sub-arrays contains four
elements, MyArray contains 24 elements.
Array size must be between 1 and 2147483647 (MAXINT).
To refer to an element in a one-dimensional array, use the array name and an expression
in square brackets that evaluates to the position of the element in the array.
To refer to an element in a multi-dimensional array, use the array name followed by two
or more expressions in brackets.
· The last expression refers to the element.
· The preceding expressions refer to the arrays and subarrays containing the
element.
· A reference to an array must account for each of the specified dimensions.
For example, array2[2,10,5] refers to an element in a three-dimensional array.
Alternatively, array2[2][10][5] refers to the same element. 4Test treats each dimension of
a multi-dimensional array as a subarray of the larger array.
You can initialize an array using the LIST constructor ({}). When you use braces in a
declaration of an array object, 4Test implicitly casts the generated list as an array. You
cannot modify an existing array using braces—you can only initialize a new array.
Examples
ARRAY[50] OF STRING array1
ARRAY[20][20][20] OF INTEGER array2
testcase array_example ()
// 39th element in one-dimensional array
(¯`•._.•[Jagan’s]•._.•´¯)
array1[39] = "alphabet soup"
// 5th element in 10th second-plane sub-array of 2nd
// first-plane sub-array of 3-dimensional array
array2[2, 10, 5] = 99
// these two statements access the same element
array2[2, 4, 2] = 5
Print (array2[2][4][2]) //prints 5
// initialize an array, starting with element 1
// and overwriting any elements previously set
array1 = {...}
"foo"
"bar"
// an alternative initialization
array1 = {"foo", "bar"}
BOOLEAN data type
Description
A variable of type BOOLEAN stores either TRUE or FALSE.
BROWSERLOCATION data type
BROWSERLOCATION is the alias data type for the string or window that identifies a
browser page. 4Test defines this data type as follows:
type BROWSERLOCATION is STRING, WINDOW
BROWSERTYPE data type
Description
SilkTest supports different Web browsers and uses "browser specifiers" so that you can
explicitly specify a particular browser in a script. The following table lists the most
commonly used browser specifiers. Consult the release notes for information about
additional supported browsers.
For the full list of browser specifiers see the 4test.inc file in your
<SilkTestInstallDirectory> and search for the word "browsertype".
Browser specifier Browser AOL_IE embedded IE browser for America Online
explorer4 Internet Explorer 4.0
(¯`•._.•[Jagan’s]•._.•´¯)
explorer5 Internet Explorer 5.x for Virtual Object extension
explorer5_DOM Internet Explorer 5.x for DOM extension
explorer6 Internet Explorer 6 VO
explorer6_DOM Internet Explorer 6.x DOM
explorer4up Internet Explorer 4.x and up for VO: explorer4, explorer5,
explorer6
explorer_DOM Internet Explorer for the DOM: explorer5_DOM, explorer6_DOM
explorer5s Internet Explorer 5.x and up (both DOM and VO): explorer5,
explorer5_DOM, explorer6, explorer6_DOM
explorer Internet Explorer: explorer3, explorer4, explorer5,
explorer5_DOM, explorer6, explorer6_DOM
netscape4 Netscape Navigator 4
netscape7_DOM Netscape Navigator 7 DOM
netscape6_DOM Netscape Navigator 6 DOM
netscape4x Netscape Navigator 4 and up: netscape4, netscape6_DOM,
netscape7_DOM
netscape Netscape: netscape3, netscape4, netscape6_DOM,
netscape7_DOM
Notes
You can use a browser specifier in a script in two ways:
· You can use a browser specifier in a script or include file to indicate that a
particular line applies only to particular browsers.
· You can pass a browser specifier to the SetBrowserType or
SetDefaultBrowserType function to specify a browser that you want your test to run
against. (You cannot use the browser specifiers explorer and netscape this way.)
You set the browser in the Runtime Options dialog or by calling the SetBrowserType or
SetDefaultBrowserType function, each of which takes an argument of type
BROWSERTYPE. If you don’
t set a browser type explicitly in a script, SilkTest will use the browser specified in the
Runtime Options dialog.
If you try to use a browser specifier instead of a GUI specifier to specify a window,
SilkTest will generate an error. The primary use of browser specifiers is to address
differences in window declarations between different browsers. Each Agent connection
maintains its own browser type, allowing different threads to interact with different
browsers.
Syntax
A browser specifier has the following syntax:
[[browser-type [, browser-type]...] | [! browser-type]]
For example, you can specify one or more browser types separated by commas, such as:
(¯`•._.•[Jagan’s]•._.•´¯)
netscape4, explorer4
You can also specify all but one browser, such as the following, which indicates that
what follows applies to all browsers except Internet Explorer 3:
! explorer3
Example 1
In the following code fragment, netscape and explorer browser specifiers are used to
indicate that the tag for the BrowserAuthentication window differs in the two browsers.
Note that browser specifiers can be used in conjunction with GUI specifiers as well.
window DialogBox BrowserAuthentication
netscape tag "Username and Password Required"
explorer, msw98 tag "Enter Network Password"
explorer, mswnt tag "Authentication"
explorer, mswdos tag "Basic Authentication"
Example 2
The testcase in the next example (GetItemCount) takes an argument of type
BROWSERTYPE, allowing you to pass browser specifiers at runtime. (The testcase uses
the recovery system and assumes that wMainWindow is set to the GMO Web
application's Welcome page, whose identifier is GMO.)
This example uses the main function to pass the arguments. For more information on
passing data to a testcase, see the chapter on generalizing testcases.
main ()
LIST OF BROWSERTYPE lbtType
BROWSERTYPE btType
lbtType = {explorer4, netscape4}
for each btType in lbtType
GetItemCount (btType)
testcase GetItemCount (BROWSERTYPE btType)
GMO.About.Click ()
INTEGER iCount
iCount = AboutPage.UsedList.GetItemCount ()
Print (btType)
Print ("Item count: {iCount}")
// Results:
// Testcase GetItemCount (explorer4) - Passed
(¯`•._.•[Jagan’s]•._.•´¯)
// Internet Explorer 4.0
// Item count: 9
// Testcase GetItemCount (netscape4) - Passed
// Netscape Navigator 4.0
// Item count: 9
Note In the preceding testcase, you don’t have to call SetBrowserType to set the
browser type. That’s because if a BROWSERTYPE argument is passed to a testcase, the
recovery system automatically calls SetBrowserType with the argument.
CALL data type
One entry in a CALL_LIST datatype. 4Test defines this enumerated data type as follows:
type CALL is record
STRING sFunction
STRING sModule
INTEGER iLine
CALL_LIST data type
The data type returned by the ExceptCalls function. 4Test defines this alias data type as
follows:
type CALL_LIST is LIST OF CALL
COLOR data type
Describes the RGB values of a color, as returned by the GetBackgroundColor method.
4Test defines this enumerated data type as follows:
type COLOR is record
INTEGER red
INTEGER green
INTEGER blue
CURSOR data type
A data type that identifies the kind of cursor represented by an instance of the
CursorClass class. 4Test defines this alias data type as follows:
type CURSOR is STRING
DATACLASS data type
Description
(¯`•._.•[Jagan’s]•._.•´¯)
The legal values of the DATACLASS type are the names of all the 4Test classes,
including user-defined classes-for example, MainWin, ChildWin, and CursorClass.
Identifiers in window class declarations and the return value from the ClassOf function
are both of type DATACLASS.
DATASETSIZES data type
Description
Describes the units for a byte-based size value, such as for disk free space or file size.
The unit specifier is an optional parameter for the SYS_GetFreeDiskSpace function and
SYS_GetDirContents functions. 4Test defines this enumerated data type as follows:
type DATASETSIZES is enum
DS_BYTES
DS_KILOBYTES
DS_MEGABYTES
DS_GIGABYTES
DS_TERABYTES
corresponding to bytes, kilobytes, megabytes, gigabytes and terabytes.
DATATYPE data type
Description
The legal values of the DATATYPE type are the names of data types, for example
INTEGER and BOOLEAN. The return value from the TypeOf function is of type
DATATYPE.
DATETIME data type
Description
A variable of type DATETIME stores a date plus a time calculated to microseconds. The
DATETIME data type represents values from 4713 B.C.E. (B.C.) to 19999 C.E. (A.D.).
Notes
You can use relational operators between two variables of type DATETIME. You can
cast a variable of type DATETIME to or from a type DATE or a type TIME by means of
explicit type casting. You can implicitly cast a STRING as a DATETIME as described in
the table below.
(¯`•._.•[Jagan’s]•._.•´¯)
You can generate a DATETIME constant by specifying a date and time as a string and
then casting the string as a DATETIME data type. The string must have the following
format:
YYYY-MM-DD HH:MM:SS.MSMSMS.
Rules covering type casting
The following tables describes the rules for type casting:
Cast Rules DATETIME to DATE The time information is lost. Use explicit type casting
([DATE])
DATETIME to TIME The date information is lost. Use explicit type casting
([TIME])
DATE to DATETIME The time is set to midnight. Use explicit type casting
([DATETIME])
TIME to DATETIME The date is set to the current date. Use explicit type casting
([DATETIME])
STRING to DATETIME The string must have the ISO format: YYYY-MM-DD
HH:MM:SS.MSMSMSYou can truncate the string at any
point, as long as the last field is complete. Use implicit type
casting (DATETIME)
Example
The example below is artificially contrived to show the following:
· The creation of a DateTime constant by implicitly casting a string as a
DATETIME.
· The conversion, by explicit casting, of the DATETIME to a DATE (this drops the
time portion of the DATETIME).
· The explicit casting of the DATE value to a DATETIME (so that it can be
formatted) and the formatting of the DATETIME.
· Printing the formatted DATETIME. Note that the time value changes to midnight.
Rules govern the various ways in which you can convert dates and times using casting.
DATETIME GrandOpening = "2003-01-02 09:00"
DATE OpenDate = [DATE] GrandOpening
STRING sOpening
sOpening = FormatDateTime ([DATETIME] OpenDate,
"mmmm, d, yyyy hh:nn AM/PM")
// Print: "Grand Opening on January 2, 2003 12:00 AM."
(¯`•._.•[Jagan’s]•._.•´¯)
Print ("Grand Opening on {sOpening}.")
DATETIMEPART data type
Description
4Test defines this enumerated data type as follows:
type DATETIMEPART is enum
DTP_YEAR
DTP_MONTH
DTP_DAY
DTP_DAYOFYEAR
DTP_DAYOFWEEK
DTP_HOUR
DTP_MINUTE
DTP_SECOND
DTP_MICROSEC
EKSERVICE data type
4Test defines this enumerated data type as follows:
type EKSERVICE is enum
[ ] EKS_CB
[ ] EKS_CHK
[ ] EKS_LB
[ ] EKS_LV
[ ] EKS_PL
[ ] EKS_PB
[ ] EKS_PGL
[ ] EKS_PROP
[ ] EKS_RB
[ ] EKS_SCL
[ ] EKS_TBL
[ ] EKS_TF
[ ] EKS_TV
[ ] EKS_UD
[ ] EKS_UWIN
[ ] EKS_WIN
EXCEPTION data type
4Test defines this enumerated data type as follows:
type EXCEPTION is enum
(¯`•._.•[Jagan’s]•._.•´¯)
[ ] // 4TEST
[ ]
[ ] E_ABORT = -10100
[ ] E_ACCESS = -10200
[ ] E_AGENT = -10300
[ ] E_ARRAY_SIZE = -10400
[ ] E_ASSERT_FAILED = -10500
[ ] E_ASSIGN = -10600
[ ] E_BAD_ARG = -10700
[ ] E_BAD_INDEX = -10800
[ ] E_BUSY = -10900
[ ] E_CLASS_MISMATCH = -11000
[ ] E_CONST = -11100
[ ] E_DATABASE = -11200
[ ] E_DEADLOCK = -11300
[ ] E_DISABLED = -11400
[ ] E_DIVIDE_BY_ZERO = -11500
[ ] E_FILE = -11600
[ ] E_HALT_THREAD = -11700
[ ] E_HANDLE = -11800
[ ] E_INCOMPAT_TYPES = -11900
[ ] E_INTERNAL = -12000
[ ] E_LIST_FULL = -12100
[ ] E_NO_LIST_OPEN = -12200
[ ] E_NO_RETVAL = -12300
[ ] E_NULL = -12400
[ ] E_NUM_ARGS = -12500
[ ] E_OUT_OF_MEMORY = -12600
[ ] E_SEMAPHORE = -12700
[ ] E_STR_OVERFLOW = -12800
[ ] E_SYNTAX = -12900
[ ] E_SYSTEM = -13000
[ ] E_TIMER = -13100
[ ] E_TYPE_MISMATCH = -13200
[ ] E_UNDEFINED = -13300
[ ] E_UNSUPPORTED = -13400
[ ] E_VAR_EXPECTED = -13500
[ ] E_VAR_NOT_SET = -13600
[ ] E_VERIFY = -13700
[ ] E_WINDOW_TAG = -13800
[ ] E_ZERO_STEP = -13900
[ ] E_PARENT_HALTED = -14000
[ ] E_SIBLING_HALTED = -14100
(¯`•._.•[Jagan’s]•._.•´¯)
[ ] E_AGENT_GUI_MISMATCH = -14200
[ ]
[ ] // 4TEST AGENT
[ ] E_APP_FAULT = -20000
[ ] E_APP_NOT_RESPONDING = -20100
[ ] E_APPID_INVALID = -20200
[ ] E_BITMAP_NOT_STABLE = -20300
[ ] E_BITMAP_REGION_INVALID = -20400
[ ] E_BITMAPS_ALMOST_MATCH = -20500
[ ] E_BITMAPS_DIFFERENT = -20600
[ ] E_BITMAPS_DIFF_COLORTABLE = -20700
[ ] E_BITMAPS_DIFF_DEPTH = -20800
[ ] E_BITMAPS_DIFF_EMPTY = -20900
[ ] E_BITMAPS_DIFF_HEIGHT = -21000
[ ] E_BITMAPS_DIFF_PLANES = -21100
[ ] E_BITMAPS_DIFF_SIZE = -21200
[ ] E_BITMAPS_DIFF_WIDTH = -21300
[ ] E_CANT_CAPTURE_BITMAP = -21400
[ ] E_CANT_CLEAR_SELECTION = -21500
[ ] E_CANT_CLOSE_WINDOW = -21600
[ ] E_CANT_CONVERT_RESOURCE = -21700
[ ] E_CANT_EXIT_APP = -21800
[ ] E_CANT_EXTEND_SELECTION = -21900
[ ] E_CANT_LOAD_DLL = -22000
[ ] E_CANT_MAXIMIZE_WINDOW = -22100
[ ] E_CANT_MINIMIZE_WINDOW = -22200
[ ] E_CANT_MOVE_WINDOW = -22300
[ ] E_CANT_RESTORE_WINDOW = -22400
[ ] E_CANT_SET_ACTIVE = -22500
[ ] E_CANT_SET_FOCUS = -22600
[ ] E_CANT_SIZE_WINDOW = -22700
[ ] E_CANT_START_APP = -22800
[ ] E_CANT_TRANSLATE_KEYS = -22900
[ ] E_CANT_TRANSLATE_TEXT = -23000
[ ] E_COL_COUNT_INVALID = -23100
[ ] E_COL_NUM_INVALID = -23200
[ ] E_COL_START_EXCEEDS_END = -23300
[ ] E_CONNECTION_REFUSED = -23400
[ ] E_CONTROL_NOT_RESPONDING = -23500
[ ] E_COORD_OFF_SCREEN = -23600
[ ] E_COORD_OUTSIDE_WINDOW = -23700
[ ] E_CURSOR_TIMEOUT = -23800
[ ] E_DELAY_INVALID = -23900
(¯`•._.•[Jagan’s]•._.•´¯)
[ ] E_FUNCTION_NOT_FOUND = -24000
[ ] E_FUNCTION_NOT_REGISTERED = -24100
[ ] E_GUIFUNC_ID_INVALID = -24200
[ ] E_ITEM_NOT_FOUND = -24300
[ ] E_ITEM_NOT_VISIBLE = -24400
[ ] E_ITEM_INDEX_INVALID = -24500
[ ] E_INVALID_REQUEST = -24600
[ ] E_KEY_COUNT_INVALID = -24700
[ ] E_KEY_NAME_INVALID = -24800
[ ] E_KEY_SYNTAX_ERROR = -24900
[ ] E_LINE_COUNT_INVALID = -25000
[ ] E_LINE_NUM_INVALID = -25100
[ ] E_LINE_START_EXCEEDS_END = -25200
[ ] E_MOUSE_BUTTON_INVALID = -25300
[ ] E_NO_ACTIVE_WINDOW = -25400
[ ] E_NO_DEFAULT_PUSHBUTTON = -25500
[ ] E_NO_FOCUS_WINDOW = -25600
[ ] E_OPTION_CLASSMAP_INVALID = -25700
[ ] E_OPTION_EVTSTR_LENGTH = -25800
[ ] E_OPTION_NAME_INVALID = -25900
[ ] E_OPTION_TOO_MANY_TAGS = -26000
[ ] E_OPTION_TYPE_MISMATCH = -26100
[ ] E_OPTION_VALUE_INVALID = -26200
[ ] E_POS_INVALID = -26300
[ ] E_POS_NOT_REACHABLE = -26400
[ ] E_PROPERTY_INDEX_INVALID = -26500
[ ] E_PROPERTY_IS_NULL = -26600
[ ] E_PROPERTY_NOT_FOUND = -26700
[ ] E_PROPERTY_READ_ONLY = -26800
[ ] E_PROPERTY_TYPE_MISMATCH = -26900
[ ] E_RESOURCE_NOT_FOUND = -27000
[ ] E_SBAR_HAS_NO_THUMB = -27100
[ ] E_TAG_SYNTAX_ERROR = -27200
[ ] E_TRAP_NOT_SET = -27300
[ ] E_WINDOW_INDEX_INVALID = -27400
[ ] E_WINDOW_NOT_ACTIVE = -27500
[ ] E_WINDOW_NOT_ENABLED = -27600
[ ] E_WINDOW_NOT_EXPOSED = -27700
[ ] E_WINDOW_NOT_FOUND = -27800
[ ] E_WINDOW_NOT_UNIQUE = -27900
[ ] E_WINDOW_SIZE_INVALID = -28000
[ ] E_WINDOW_TYPE_MISMATCH = -28100
[ ]
(¯`•._.•[Jagan’s]•._.•´¯)
[ ] E_COLUMN_INDEX_INVALID = -28200
[ ] E_COLUMN_NOT_FOUND = -28201
[ ] E_ITEM_CANT_COLLAPSE = -28300
[ ] E_ITEM_CANT_EXPAND = -28400
[ ] E_KEY_STRING_TOO_LONG = -28500
[ ]
[ ] /*** THESE ARE FOR HANDLING OLE2/VB CALLS ***/
[ ]
[ ] E_AXEXT_NOT_RESPONDING = -28600
[ ] E_OBJ_CALL_FAILED = -28700
[ ] E_OBJ_NOT_FOUND = -28800
[ ] E_ARG_TYPE_MISMATCH = -28900
[ ] E_BAD_ARG_COUNT = -29000
[ ] E_ARG_VAL_OUT_OF_RANGE = -29100
[ ] E_APP_NOT_READY = -29200
[ ] E_CANT_SCROLL_INTO_VIEW = -29300
[ ] E_ALREADY_DRAGGING = -29400
[ ] E_NOT_DRAGGING = -29500
[ ]
[ ] E_DLL_EXCEPTION = -29800
[ ]
[ ] E_ROW_INDEX_INVALID = -30000
[ ] E_TBL_HAS_NO_ROW_HDR = -30100
[ ] E_TBL_HAS_NO_COL_HDR = -30200
[ ] E_TBL_SINGLE_CELL_ONLY = -30300
[ ] E_UD_HAS_NO_RANGE = -30400
[ ] E_ROW_NOT_TOP = -30500
[ ] E_COLUMN_NOT_LEFT = -30600
[ ]
[ ] E_VO_COLUMN_INVALID = -50100
[ ] E_VO_COUNT_INVALID = -50200
[ ] E_VO_ITEM_INDEX_INVALID = -50300
[ ] E_VO_ITEM_NOT_FOUND = -50400
[ ] E_VO_LINE_INVALID = -50500
[ ] E_VO_PROPERTY_NOT_FOUND = -50600
[ ] E_VO_REGION_INVALID = -50700
[ ] E_VO_ROW_INVALID = -50800
[ ] E_VO_STATUS_NOT_FOUND = -50900
[ ] E_VO_TYPE_MISMATCH = -51000
FILEINFO data type
(¯`•._.•[Jagan’s]•._.•´¯)
Describes a particular file by providing its attributes. 4Test defines this record data type
as follows:
type FILEINFO is record
string sName
boolean bIsDir
number iSize
integer iAttributes
datetime dtLastModifyTime
datetime dtCreationTime
Where:
· sName is a string specifying the file name
· bIsDir is a boolean indicating whether the file is a true file or a directory
· iSize is an number specifying the file’s size
· iAttributes is an integer specifying the attributes of the file
· dtLastModifyTime is of the datetime data type and specifies the date and time that
the file was last modified
· dtCreationTime is of the datetime data type and specifies the date and time that
the file was created
Attributes
The file attributes that you can determine with FILEINFO are:
FILE_ATTRIBUTE_ARCHIVE FILE_ATTRIBUTE_OFFLINE
FILE_ATTRIBUTE_COMPRESSED FILE_ATTRIBUTE_READONLY
FILE_ATTRIBUTE_DIRECTORY FILE_ATTRIBUTE_REPARSE_POINT
FILE_ATTRIBUTE_HIDDEN FILE_ATTRIBUTE_SPARSE_FILE
FILE_ATTRIBUTE_ENCRYPTED FILE_ATTRIBUTE_SYSTEM
FILE_ATTRIBUTE_NORMAL FILE_ATTRIBUTE_TEMPORARY
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
Note To determine a file attribute, you must use a binary AND comparison with the file
attribute. If the comparison returns that same file attribute, then the attribute exists.
FILEINFO_LIST data type
A list containing instances of the FILEINFO data type. 4Test defines this alias data type
as follows:
(¯`•._.•[Jagan’s]•._.•´¯)
type FILEINFO_LIST is list of FILEINFO
FILEMODE data type
Describes the file mode for a file. The file mode is a required parameter for the FileOpen
function. 4Test defines this enumerated data type as follows:
type FILEMODE is enum
FM_READ
FM_WRITE
FM_UPDATE
FM_APPEND
Each field is defined as follows:
FM_READ Opens the file for reading. SilkTest raises the exception E_FILE if
the file does not exist.
FM_WRITE Opens the file for writing. If the file does not exist, it is created. If
the file exists, it is truncated to zero (0) bytes.
FM_UPDATE Similar to FM_WRITE, except that it does not truncate the file. By
default, it denies write access to other users. The file pointer is
positioned at the beginning of the file.
FM_APPEND Opens the file for appending. If the file does not exist, it is created.
If the file exists, the file pointer is positioned at the last line of the
file. By default, it does not deny write access to other users.
FILEPOS data type
Describes how the FileSetPointer function should set the read/write position in an open
file. 4Test defines this enumerated data type as follows:
type FILEPOS is enum
FP_START
FP_END
FP_RELATIVE
FILESHARE data type
Describes the file-sharing behavior of a file. The file-sharing behavior is an optional
parameter for the FileOpen function, IniFileOpen function, and ListWrite function. 4Test
defines this enumerated data type as follows:
type FILESHARE is enum
NULL
FS_DENY_NONE
FS_DENY_WRITE
(¯`•._.•[Jagan’s]•._.•´¯)
FS_EXCLUSIVE
Each field is defined as follows:
NULL (default) Previous file-sharing behavior. For example, if the file was last
opened with a fsShare value of FS_DENY_WRITE, then the next file open will have this
value as well.
FS_DENY_NONE Others have read/write access.
FS_DENY_WRITE Others have read access.
FS_EXCLUSIVE Others have no access.
FILETYPE data type
Describes the file type of a file. The file type is an optional parameter for the FileOpen
and IniFileOpen functions. It is available only with SilkTest International. 4Test defines
this enumerated data type as follows:
type FILETYPE is enum
FT_ANSI
FT_UNICODE
FT_UTF8
Each field is defined as follows:
FT_ANSI Creates a new file in ANSI format.
FT_UNICODE Creates a new file in UNICODE format.
FT_UTF8 Creates a new file in UTF-8 format.
FONTSTYLE data type
FONTSTYLE identifies the style of a font. 4Test defines this set data type as follows:
type FONTSTYLE is set
FS_BOLD
FS_ITALIC
FS_STRUCKOUT
FS_UNDERLINE
FUZZYVERIFY data type
FUZZYVERIFY identifies the values that the optional argument to VerifyProperties can
have. It is used in fuzzy verification. 4Test defines this data type as follows:
type FUZZYVERIFY is BOOLEAN, DATACLASS, LIST OF DATACLASS
(¯`•._.•[Jagan’s]•._.•´¯)
GETWINDOWFLAG data type
4Test defines this enumerated data type as follows:
type GETWINDOWFLAG is enum
[ ] GW_HWNDFIRST = 0
[ ] GW_HWNDLAST = 1
[ ] GW_HWNDNEXT = 2
[ ] GW_HWNDPREV = 3
[ ] GW_OWNER = 4
[ ] GW_CHILD = 5
HANDLE data type
Description
Certain functions, such as TimerCreate and FileOpen, create and return values of type
HANDLE. You can only store or reassign these return values; you cannot directly create
values of type HANDLE. A handle is an identification code provided for certain types of
object so that you can pass it to a function that needs to know which object to manipulate.
For example,
hTimer = TimerCreate() // Create a timer
TimerStart (hTimer) // Start the timer just created
HDATABASE data type
The handle that identifies a database. 4Test defines this alias data type as follows:
type HDATABASE is HANDLE
HDRIVER data type
The handle for a driver. A driver handle provides you with a means to identify, and
therefore to access, a specific driver. 4Test defines this alias data type as follows:
type HDRIVER is HANDLE
HEAPSTATS data type
4Test defines this record data type as follows:
type HEAPSTATS is record
[ ] INTEGER iHeapSize
[ ] INTEGER iHeapCommitted
[ ] INTEGER iHeapAllocated
(¯`•._.•[Jagan’s]•._.•´¯)
[ ] INTEGER iHeapFree
[ ] INTEGER iHeapOverhead
HFILE data type
The handle for an open file. A file handle provides you with a means to identify, and
therefore to access, a specific file. The FileOpen function returns an HFILE that you can
then pass to such functions as FileReadLine to identify a particular open file that
FileReadLine is to read. 4Test defines this alias data type as follows:
type HFILE is HANDLE
HINIFILE data type
The handle for an open .ini file. A file handle provides you with a means to identify, and
therefore to access, a specific file. A .ini file is an initialization file. SilkTest stores test
attributes and their values in the initialization file called testplan.ini. The IniFileOpen
function returns an HINIFILE that you can then pass to such functions as IniFileSetValue
to identify the initialization file in which to set a value. 4Test defines this alias data type
as follows:
type HINIFILE is HANDLE
HMACHINE data type
The handle for a machine that is connected to the 4Test Agent. The Connect function
returns an HMACHINE when it completes successfully. 4Test defines this alias data type
as follows:
type HMACHINE is HANDLE
When a function requires a machine handle for an input parameter, you can substitute the
string form of the machine name instead of the handle form. For example:
SetMachineData ("Client3", "StateData", sTestState)
HSQL data type
4Test defines this alias data type as follows:
type HSQL is HANDLE
HTIMER data type
(¯`•._.•[Jagan’s]•._.•´¯)
The handle that identifies a 4Test timer. The TimerCreate function returns an HTIMER.
4Test defines this alias data type as follows:
type HTIMER is HANDLE
INTEGER data type
Description
A variable of type INTEGER stores integral values. On all platforms, an INTEGER is 32-
bits.
LBSTYLE data type
LBSTYLE describes the style of a list box: single, extended, or multiple. 4Test defines
this enumerated data type as follows:
type LBSTYLE is enum
LBS_SINGLE
LBS_EXTEND
LBS_MULTIPLE
LINKTESTERINFO data type
Specifies data passed to the Link Tester tool. 4Test defines this record datatype as
follows:
type LINKTESTERINFO is record
STRING sBaseURL
STRING sIncludeDomains
INTEGER iDepth
LISTCOLUMN data type
LISTCOLUMN identifies a column in a table and is defined as follows:
type LISTCOLUMN is INTEGER, STRING
The interpretation of a value of type LISTCOLUMN depends on whether the type is an
integer or a string.
An integer value specifies the 1-based index of the column.
A string value specifies the name of the column. The string can contain wildcard
characters. (You can also specify the index of the column as a string, in the form "#n"
where n is the numerical index of the column.)
LISTITEM data type
(¯`•._.•[Jagan’s]•._.•´¯)
LISTITEM identifies a particular item in a list that is implemented by a control such as a
ListBox, ComboBox, or ListView. It is defined as follows:
type LISTITEM is INTEGER, STRING
The interpretation of a value of type LISTITEM depends on whether the type is an
integer or a string.
An integer value specifies the 1-based index of the item.
A string value specifies the name of the item. The string can contain wildcard characters.
(You can also specify the index of the item as a string, in the form "#n" where n is the
numerical index of the item.)
LOCALECATEGORY data type
4Test defines this enumerated data type as follows:
type LOCALECATEGORY is enum
[ ] LC_ALL
[ ] LC_COLLATE
[ ] LC_CTYPE
[ ] LC_MONETARY
[ ] LC_NUMERIC
[ ] LC_TIME
LONG data type
Description
Use a variable of type LONG to store integers which require four bytes, for example, a
return value from a Microsoft Windows Dynamic Link Library (DLL).
LVSTYLE data type
LVSTYLE describes the style of a listview: single, extended, or multiple. 4Test defines
this enumerated data type as follows:
type LVSTYLE is enum
LVS_SINGLE
LVS_EXTEND
LVS_MULTIPLE
LVVIEW data type
(¯`•._.•[Jagan’s]•._.•´¯)
This data type stores information about the multiple ways to view a elaborated list box
control: large and small rearrangeable icons, normal text, and a detail, or report, view.
4Test defines this enumerated data type as follows:
type LVVIEW is enum
LVV_ICON
LVV_SMALL_ICON
LVV_LIST
LVV_DETAILS
MEMINFO data type
MEMINFO describes the Windows NT performance counters: a process's working set;
the largest address in a process's virtual address space; the number of bytes of writeable,
committed memory in a process's address space; and the number of bytes of private
(unshared) memory in a process's address space. 4Test defines this enumerated data type
as follows:
type MEMINFO is enum
WORKING_SET
VIRTUAL_SIZE
PRIVATE_READWRITE
PRIVATE_BYTES
MULTITAG_ITEM data type
4Test defines this enumerated data type as follows:
type MULTITAG_ITEM is enum
[ ] TAG_CAPTION
[ ] TAG_PRIOR_LABEL
[ ] TAG_INDEX
[ ] TAG_WINDOW_ID
[ ] TAG_LOCATION
MULTITAG_LIST data type
4Test defines this alias data type as follows:
type MULTITAG_LIST is LIST OF MULTITAG_ITEM
NUMBER data type
Description
(¯`•._.•[Jagan’s]•._.•´¯)
A variable of type NUMBER stores either integers or real numbers. Use a variable of this
type only when its value can be either integer or real.
Variables of type NUMBER can have a value from 2.0 – 32. If the value is outside the
range, the data type returns a value of zero.
PINTERFACE data type
Certain properties and methods have a pointer to an ActiveX interface as their return
type, for example, a pointer to an IDispatch interface. Such a pointer is represented in
4Test as a PINTERFACE type.
4Test defines this alias data type as follows:
type PINTERFACE is LONG
The interface pointed to cannot be called directly from SilkTest; however, the pointer can
be processed further by passing it to a method or property that accepts a pointer.
POINT data type
Position coordinates typically used to specify a screen or window location. 4Test defines
this record data type as follows:
type POINT is record
INTEGER x
INTEGER y
RECT data type
The information necessary to specify a rectangle relative to a window, the entire screen,
or some other coordinate space. 4Test defines this record data type as follows:
type RECT is record
INTEGER xPos
INTEGER yPos
INTEGER xSize
INTEGER ySize
The following table explains the fields.
Field Description
xPos The x-coordinate of the top-left corner. INTEGER.
yPos The y-coordinate of the top-left corner. INTEGER.
xSize The width (in pixels) of the capture region. INTEGER.
ySize The height (in pixels) of the capture region.
SBRANGE data type
(¯`•._.•[Jagan’s]•._.•´¯)
Holds the minimum and maximum values to which a ScrollBar or UpDown object can be
set. 4Test defines this record data type as follows:
type SBRANGE is record
INTEGER iMin
INTEGER iMax
SCLRANGE data type
Holds the minimum and maximum values to which a Scale object can be set. 4Test
defines this record data type as follows:
type SCLRANGE is record
NUMBER nMin
NUMBER nMax
SIZE datatype Description
The dimensions of an object, without regard to position. 4Test defines this record data
type as follows
[+] type SIZE is record
[ ] INTEGER iWidth
[ ] INTEGER iHeight
STRING data type Description
A variable of type STRING stores character strings. You define a string by enclosing it in
either single (') or double quotation marks (").
For the range of valid values, see Data type ranges.
To sort lists of strings and compare strings by ASCII value, add the line AsciiSort=TRUE
in the [Runtime] section of the partner.ini file. This setting also affects the comparison of
strings, not just sorting of lists of strings.
WINATTR data type
4Test defines this record data type as follows:
type WINATTR is record
[ ] STRING sName
[ ] STRING sVerifyMethod
[ ] STRING sGetMethod
(¯`•._.•[Jagan’s]•._.•´¯)
TIME data type
Description
A variable of type TIME holds values for a hours, minutes, seconds, and microseconds.
WINATTR_LIST
4Test defines this record data type as follows:
type WINATTR_LIST is LIST OF WINATTR
WINDOW data type
Description
You can declare a variable of type WINDOW to store a window identifier and then
reference the window using the variable name, instead of using the window identifier as
specified in the window's declaration.
Examples
// The window declaration
window MainWin Notepad
...
// code in the testcase
WINDOW w
w = Notepad
w.File.Open.Pick ()
WINDOWDEFINEDHOW data type
Use WindowDefinedHow as optional parameter for the IsDefined method to see how a
particular string definition has been defined: as a method, not as a method but as some
other definition, or to find out if the string is defined in the DATACLASS at all.
4Test defines this enumerated data type as follows:
type WINDOWDEFINEDHOW is enum
DEFINED_ANY
DEFINED_METHOD
DEFINED_NOT_METHOD
Each field is defined as follows:
· DEFINED_ANY returns true if the string is defined.
· DEFINED_METHOD returns true if the string is defined as a method.
(¯`•._.•[Jagan’s]•._.•´¯)
· DEFINED_NOT_METHOD returns true if the string is defined but not as a
method (for example, it might be defined as a property or member) and false if the string
is defined as a method.
WININFO data type
4Test defines this record data type as follows:
type WININFO is record
[ ] WINDOW w
[ ] BOOLEAN bEnabled
[ ] BOOLEAN bChecked
WINPROP data type
4Test defines this record data type as follows:
type WINPROP is record
WINDOW w
INTEGER iLevel
LIST OF PROPINFO lPropInfo
WINPROPLIST data type
4Test defines this list data type as follows:
type WINPROPLIST is LIST OF WINPROP
WINPROPTREE data type
The data type used to store the names and values of the properties of a window and that
window’s child windows. 4Test defines this data structure as follows:
type WINPROPTREE is record
STRING sWindow
LIST OF PROPINFO lPropInfo
LIST OF WINPROPTREE lChildren
WINSTATE data type
The data type returned by the GetState function to report the current state of a
MoveableWin object. 4Test defines this enumerated data type as follows:
type WINSTATE is enum
WS_NORMAL
(¯`•._.•[Jagan’s]•._.•´¯)
WS_MAXIMIZED
WS_MINIMIZED
WNDTAG data type
The data type of the WndTag property, which is the window tag of a window. 4Test
defines this alias data type as follows:
type WNDTAG is STRING
************************************************************************