Skip to main content

Eggplant Functional 22 Release Notes

The notes below provide descriptions of the new features and changes introduced with each release of Eggplant Functional. You are strongly encouraged to read about the relevant changes whenever you upgrade from an earlier version.

Potential compatibility issues are highlighted in RED.


Mac: macOS 12, macOS 11, macOS 10.15, macOS 10.14, macOS 10.13, macOS 10.12.

Windows: 64-bit distributions only. Windows 11, Windows 10, Windows 7, Windows Server 2022, Windows Server 2016, Windows Server 2012, Windows Server 2008.

Linux: 64-bit distributions only. Ubuntu 20. Ubuntu 16. Red Hat 7. CentOS 7.

Ports: TCP 5052-5054. For SUTs: RDP: 3389. VNC: 5900. WebDriver: 4444.


  • Apple M1 chip is now supported.
  • Red Hat 6 and CentOS 6 are no longer supported.
  • A bug exists in the MySQL Connector for ODBC 8.0 on Windows 10 systems that causes Eggplant Functional to crash when connecting to an ODBC database. The crash typically occurs when connecting for the second time. See the MySQL forums here for any updates on the status of this issue from MySQL. The only known workaround is to use the older version 5.3 connector instead.

22.2.0 (7 Jul 2022)​


  • Provides notification on first launch of Keysight Privacy policy and Opt-out option

    • Note the label change of the General preference from “Share Installation Details” to “Opt out of diagnostics and usage data collection
  • Improves on-line documentation experience with improved landing page, navigation, and search

SenseTalk Improvements​

  • Adds the ability to access and change the timeZone of a date/time value through several new properties: TimeZone to access or set the time zone identifier name (such as "America/New_York"); TimeZoneAbbreviation (or TimeZoneAbbrev or TimeZoneAbbr) to access or set the time zone abbreviation (such as "MDT"); and TimeZoneOffset to access or set the time zone offset from UTC of the date/time value.
put now into aTime

put aTime —> 2022-04-12 09:41:58 -0600

put aTime's timeZone —> America/Denver

put aTime's timeZoneOffset —> -6 hours

set aTime's timeZoneOffset to -2 hours

put aTime —> 2022-04-12 13:41:58 -0200

set aTime.timeZone to "GMT"

put aTime —> 2022-04-12 15:41:58 +0000
  • Adds a UTC time format (and long, short, and abbreviated variations), which returns the current time in the UTC time zone (Universal Coordinated Time). The word Zulu may also be used as a synonym for UTC (the term "zulu time" is common in certain military and aviation contexts):
put the UTC time -- 2022-04-11 15:18:29 +0000

put the long UTC time -- 2022-04-11 15:18:29.312 +0000

put the short zulu time -- 15:18 +0000

put the abbrev UTC time -- 15:18:29 +0000
  • Adds a military time format (and long, short, and abbreviated variations), which returns the current time in the UTC time zone (Universal Coordinated Time), using formats based on the U.S. military's Date Time Group formats (see wikipedia: Date-time Group):
put the military time -- 11 1518Z Apr 22

put the long military time -- 11 151829Z Apr 22

put the short military time -- 1518Z

put the abbrev military time -- 11 1518Z
  • Adds UTCTime (and synonym ZuluTime) as special dynamic predefined variables (similar to now) which return the current time in the UTC time zone, in the UTC time format.
put UTCTime —> 2022-04-11 15:18:29 +0000

put zuluTime —> 2022-04-11 15:18:29 +0000
  • Adds TimeZoneOffset as a synonym for the UTCOffset function and enhanced its functionality.

This function can now be called with up to 2 optional parameters. When called with no parameters, it returns the local offset from UTC time as before, except the offset is now returned with units of hours (rather than number of seconds, with no unit) to improve usability (Note: The SecondsFromGMT function still returns the seconds as a plain number, as before).

When called with either one or two parameters, one parameter can be a date (as before) or a time zone name or abbreviation. Or both a date and a time zone can be given (in either order), to determine the offset in that time zone on that particular date. A time zone can be given using its official id name (e.g. "America/Los_Angeles"), the time zone abbreviation ("PDT"), or any unique part of the name, ignoring spaces and special characters (e.g. "los angeles").

put the timeZoneOffset —> -6 hours (the offset in the local time zone on the current date)

put UTCOffset("paris") —> 2 hours (the offset in the given time zone on the current date)

put timeZoneOffset("New York", "2022-02-22") —> -5 hours

Bug Fixes and Improvements​

  • Provides Proxy Pac support for Windows

  • Improves error handling when attempting to generate CaptureScreen images with an invalid name

  • Creates a full file path when creating a CaptureScreen Image if the folder does not already exist

  • Enhances logging of Eggplant Functional sessions in Eggplant DAI

  • Improves the precision of some unit conversion calculations

  • Allows short month as a valid token in date formats, as documented

  • Fixes a problem with the run command loading a script in a subfolder improperly, interfering with later access

22.1.0 (25 Apr 2022)​

SenseTalk Improvements​

  • Adds unit format strings, which control the display and formatting of units for numeric values, such as time intervals, length or distance, mass or weight. For example:

    • Display a duration in minutes as a number of hours and days like this:
    put 4485 mins with format "[days] days, [hours] hours, and [min] minutes" —> 3 days, 2 hours, and 45 minutes

  • Display a duration in seconds as hours, minutes, and seconds like this:
    put 521957 seconds format "[hrs 00]:[mins 00]:[secs 00]" —> 144:59:17

You can use unit format strings with the:

  • format operator: with format, using format, format

  • format property of a variable

  • formattedUnits function

  • the unitFormats global variable.

    For example:

    put 35 ounces using format"[lb] lb [oz] oz" —> 2 lb 3 oz
  • Adds the formattedUnits function. Apply a unit format to a numeric value with a compatible unit type and return the formatted value. For example:
    put formattedUnits("[feet] @, [inches] @", 22 in) —> 1 foot 10 inches
  • Adds the splitUnits function. Convert a numeric value of a certain unit type into a list of compatible units that add up to the original value. The resulting values may be somewhat less than the original value if the conversion results in an amount that is smaller than the final unit type.
    put splitUnits(22 in, "yd","ft","in") —> 0 yards, 1 foot, 10 inches
  • Adds the unitFormats global property. Set a property list to hold the default unit formats for one or more types of units. The keys of the unitFormats must be valid unit types returned by the unitTypes function. The corresponding value for each unit type must be a unit format string.
    set the unitFormats.mass to "[lbs?] @ [oz.] @"
put 67 ounces—> 4 lbs 3 oz

  • Enhances the unitNames function to accept a parameter.
    • Set the parameter to "all", or no parameter, to return a list of all unit names that SenseTalk recognizes.
    • Set the parameter to the name of a unit type to return a list of units of that type. For example:
        put unitNames("speed") —> ["knot","mph","mps","kph","knots"]

  • Enhances the unitTypes function to accept a parameter.

    • Set the parameter to "all", or no parameter, to return all unit type names that SenseTalk recognizes, including synonyms.
    • Set the parameter to "standard" to return all standard unit type names that SenseTalk recognizes, excluding synonyms.
  • Enhances the unitType function to always return the standard unit type for the unit name of a numeric value. You can also return the standard name for any given unit type. For example:

put the unitType of "weight" —> mass
  • Use the add, subtract, multiply, and divide commands with two expressions rather than an expression and a container. The resulting value of the operation is stored in the variable it.
    divide 12 by 3
put it —> 4

Bug Fixes and Improvements​

  • Improves script performance across all scripts with significant improvements for certain operations, such as updating the values of properties in property lists.
  • Improves the stability of test executions in Eggplant DAI.
  • Improves general stability and performance.
  • Introduces improvements to logging to help debugging.
  •  Adds support for a keyboard shortcut for Save All:
    • Windows: Ctrl+Alt+S
    • Macintosh: Cmd+Opt+S
    • Linux: Ctrl+Alt+S.
  • In SenseTalk:
    • The put command now functions correctly with the multiple assignment of variables.
    • The add function now throws consistent exceptions.
    • The archive and unarchive functions now correctly archive a number format or unit format along with the numerical value.
  • Adds several Date and Time commands to the SenseTalk Language Browser.
  • Breakpoints are now honored in a script that starts with a comment section.
  • Movies now stop recording when a script execution is aborted or fails with an exception.
  • Addresses crashing when code that contains a malformed imagelocation format is executed.
  • Provides unique temporary file locations for the OCR files of every Eggplant Functional instance that is running.
  • RLM realm licenses are now correctly reported in the license panel when using the .opt file.
  • runscript.bat now handles the Git status correctly in all situations.
  • Eggplant Functional no longer hangs or crashes when using roaming RLM licenses under certain circumstances.
  • Accurately reports the result file location in the output log file.
  • RLM Server can now run on Macintosh Catalina and later versions.
  • Labelling in the OCR Tuner now correctly reads "multi-column" rather than "multi-line" text.
  • Auto Update for images no longer creates long file names when Save as new Image Rep is selected.
  • File > New Helper Suite now opens the New Test Suite dialog box as expected.
  • When an image replaces a deleted image collection, that image now opens successfully.
  • Under certain circumstances, Eggplant Functional is now able to lock the suiteinfo file.
  • In most cases, _registerNewObject and _unregisterNewObject messages are no longer written to logs.
  • Interface tabs now display correctly in red/brown when running Eggplant Functional on Macintosh Big Sur and Monterey versions.
  • Fixes a problem with archiving large integers.

22.0.0 (26 Nov 2021)​


  • Adds the capability to program and control Keysight test and measurement devices with SenseTalk, using:

    • The Virtual Instrument Software Architecture (VISA) protocol to connect to a device

    • Standard Commands for Programmable Instruments (SCPI) to control and obtain information from the device.

      This functionality is only available for supported Windows versions through the ST_VISA Xmodule included with SenseTalk. Keysight IO Libraries must also be installed on the machine.

SenseTalk Improvements​

  • Adds VISA and SCPI functionality for connecting to and controlling test and measurement devices, including the following functions:
    • VisaDevice: Obtains a connection to the device.
    • VisaAddresses: Obtains a list of known device addresses.
    • ST_VISA_Version: Gets information about the current version of the Xmodule that is installed with SenseTalk.

When a VisaDevice connection is obtained, two-way communication to control and obtain information from the device is available through a number of SCPI-based commands and functions.

  • Adds the assertionPassedDelegate and the assertionFailedDelegate global properties. Use these properties for setting objects to receive assertionPassed or assertionFailed messages when an assert command is executed. When a delegate object is set, one of the following handlers is implemented for the messages:

    • to handle assertionPassed

    • to handle assertionFailed

      Both handlers receive a first parameter, which is the message text that describes the assertion. The handler for a failed assertion can also receive a second parameter, which is the name of the assertion behavior that was invoked:

    • error

    • warning

    • exception

    • pause

      Use the handlers for tasks such as logging or analyzing the assertions from test executions.

  • Adds support for octal and binary numbers:

    • Octal (base 8) numbers are expressed as 0o (zero then the letter 'O')
    • Binary (base 2) numbers are expressed as 0b followed by one or more zeros or ones.
    set mask to 0o377
put 0b1101 —> 13

  • Adds support for displaying numbers in octal or binary format. Either:
    • Convert a number to as octal or as binary formats
    • Set the numberFormat to "octal" or "binary".
put 255 as octal —> 0o377
put 42 as binary —> 0b101010
put 13 into aNum
put aNum —> 13
set the numberFormat to "octal"
put aNum —> 0o15
set aNum's format to "binary 6"
put aNum —> 0b001101
multiply aNum by 2
put aNum —> 0b011010
delete aNum.format -- go back to using the numberFormat
put aNum —>0o32
set the numberFormat to "0.0#####"
put aNum —> 26.0

You can also specify the number of digits to display, e.g. "binary 6" displays 6 binary digits.

  • Adds support for bitwise operators:
    • bitAnd (bitwise AND)
    • bitOr (bitwise OR)
    • bitXor (bitwise XOR)
    • bitNot (bitwise NOT)
    • bitShift left and bitShift right (shifts bits left or right)
set the numberFormat to "binary 8"
set the bitLength to 8
put bitNot 0b00010101 —> 0b11101010
put 0b00010101 bitAnd 0b00111100 —> 0b00010100
put 0b00010101 bitOr 0b00111100 —> 0b00111101
put 0b00010101 bitShift left 2 —> 0b01010100
  • Adds the bitLength global property to control the number of bits used by bitwise operators.
    • By default, the bitLength is 64, which treats numbers as 64-bit signed integers for purposes of bit operations.
    • Setting the bitLength to anything less than 64 treats the results of bit operations as unsigned integers.
set the bitLength to 32
  • Adds bit expressions and functions to give access to or to set an individual bit within a number:

    • bit 1 is the furthest right bit in the number in binary format, bit 2 is the next left, and so on.
    • Bits up to bit 64 are available, or you can access the value that the bitLength is set to.
    • Each bit is 0 or 1, and is also treated as a boolean (True or False) when testing bits. You can also set the boolean values for a bit to True or False, Yes or No, On or Off, and 0 or 1.
    set the numberFormat to "binary 8"
set controlByte to 0b00001110
put bit 1 of controlByte —> 0
put bit 2 of controlByte —> 1
set bit 7 of controlByte to On
set bit 3 of controlByte to 0
put controlByte —>0b01001010
  • Adds turn on and turn off commands as a convenient, readable way to set properties or other values to On or Off. For example:
    turn on the caseSensitive -- sets the caseSensitive property to true
turn the caseSensitive off -- sets the caseSensitive property to false
turn on bit 4 of powerFlags
  • Adds a sourceExpression or sourceExpr property. This property gets its value from the text of the expression which created that value.
    set timePattern to <1 to 2 digits, ":", 2 digits>
puttimePattern's sourceExpr —> <1 to 2 digits, ":", 2 digits>
put timePattern's regex —> \d{1,2}:\d{2}

In addition, you can use the regex property to hold the value of the corresponding regular expression text.

Bug Fixes and Improvements​

  •  Improves the parsing of hexadecimal numbers in SenseTalk:
    • Positive numbers up to 0x20000000000000, the highest integer SenseTalk can represent precisely, which is equal to 2^53
    • 64-bit negative numbers in two's complement, from 0xFFFF_FFFF_FFFF_FFFF (-1) to 0xFFE0_0000_0000_0000 (-(2^53)).
  • Removes an arbitrary limit of 4,000 characters on ODBC commands. There is now no absolute limit.
  • The words up and down are no longer treated as constants in SenseTalk. This means that you can use them as variable names, if required.
  • Adds support for a leading + sign with SenseTalk expressions.
  • Addresses a timeout error in FEDrive when you run a snippet with a shell command with the DAI agent in Run mode.
  • Verified support for WebDriver with Microsoft Edge using Selenium Standalone Server version 4.0.0.
  • Global variables are now passed in and out correctly when using the Extract New Script feature.
  • Spaces are now recognized in search parameters for the OCRSearch diagnostic search.
  • Writes a log statement when you use the Rectangle property with the CaptureScreen command.
  • Addresses crashing in unique workflow scenarios.
  • The Username on the Add/Edit Connection panel is no longer disabled when selecting a type of WebDriver.
  • Improves the clipboard behavior for testing with iOS Gateway and iOS 14.5 and above.
  • Recognizes spaces in the path to the Suites root folder after an upgrade to Eggplant Functional 21.3.1 and Eggplant DAI 5.3.
  • Resolves an error that occurred when incorrect SUT connection details were used for a test execution in Eggplant DAI.
  • Eggplant Fusion Engine no longer generates large log files when executing tests from Eggplant DAI.
  • Improves error codes and logging in Eggplant Fusion Engine when running test executions in Eggplant DAI.
  • Provides enhanced security for connections from Eggplant Fusion Engine to the Eggplant DAI server.
  • Mac Only: Establishes successful Remote Desktop Protocol (RDP) connections from Eggplant DAI in Design mode to Eggplant Fusion Engine.
  • Writes a log statement when Eggplant Fusion Engine is launched in Eggplant DAI.
  • Resolves an exception that occurred when clicking exit fullscreen with the TypeText panel displayed.
  • Resolves an NSInvalidArgumentException and crashes when using incorrect values for the SearchRectangle property.
  • Resolves a crash that occurred when dragging new elements to customize the toolbar in the Viewer window.
  • Addresses an issue that occurred when editing API tests outside of the Eggplant Functional Studio editor.
  • Adds support for socially responsible technical nomenclature as part of Keysight’s Social Responsibility initiative.
  • Adds improvements for general stability and performance.