The notes below provide descriptions of the new features and changes introduced with each release of eggPlant. 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 OS X 10.7, 10.8, 10.9, 10.10
- Windows 7, 8, Server 2008, Server 2012
- Linux 32-bit Debian and RedHat based on glib 2.11 and above
64-bit distributions must have supported versions of all dependent 32-bit libraries.
Notes For Cross Platform Users:
eggPlant for Linux and Windows contains almost all of the functionality available in eggPlant for Mac. Excluded features are listed at the bottom of the release notes.
List of Release Notes
Following is a list of the release notes provided below:
- New SenseTalk Browser that includes descriptions, templates, and documentation links for common scripting terms.
- Auto-completion of punctuation, control structures, and SenseTalk language elements in the script editor.
- Capability to create custom code Snippets as part of the SenseTalk Browser.
- Variable Watcher allows you to view and edit variable values during script execution.
- Table tests now support Data Driven execution to iterate over values stored in a CSV table.
- Ability to refactor scripts by extracting sections of code into a new script.
- Windows RDP now uses significantly less CPU on Windows.
- Values specified in Connect commands or by using command-line arguments now take precedence over existing values in the Connection List.
- Built-in Android Server 2.6 is included in eggPlant Functional 15.20. iOS Gateway 2.6 is forthcoming.
- Added options for Mobile VNC connections to scale the remote screen size down. Optionally allows scaled screens to be blended (for compatibility with older VNC servers). Note: Requires iOS Gateway 2.6 or Android Server 2.6.
- Added Reboot command for mobile connections. Note: Requires iOS Gateway 2.6 or Android Server 2.6.
- Added KillApp command to terminate mobile apps. Note: Requires iOS Gateway 2.6 or Android Server 2.6.
- Added SUTinfo() function for Android devices. SUTinfo returns a property list of information about a connected Android device. Properties include: type, device_os_version, and device. Note: Requires Android Server 2.6.
User Interface Improvements
- The Run window now has a Variable Watcher in which you can watch variable values while a script is running. Options include the scope of variables shown and the frequency of variable updates (continuously or only when the script is paused).
- You can now click script and image names to edit them inline on Windows, rather than having to use the Rename menu item.
- The Ad Hoc Do Box (AHDB) in the Run window will now expand when multiple lines of text are entered into it.
- In the Scripts list, you can enable a color indicator to show which scripts are enabled for Table Actions.
- Tables can now specify an optional CSV Data File. When specified, the table actions will be repeated for each row in the file. The first row must contain column headers. Values for each column can be used in the Arguments or Expected Value field by using $HEADER_NAME.
- Tables can now specify the return value from previous lines for use in Arguments or Expected Value fields. You can refer to the results of particular lines with #LINE_NUMBER, or use #prev for the immediately preceding line.
- Auto-completion of punctuation, control structures, and SenseTalk language elements in the script editor. Options include parentheses, quotes, commas, curly braces, square brackets, if statements, repeat statements, handlers, script names, local variables, image names, and SenseTalk keywords.
- The answer command has been extended with from list, multiple, and default answer options. Example:
answer "What would you like to drink?" from list ("Coffee", "Tea", "Cocoa", "Water”) allow multiple default “Coffee”
- Capability to refactor script by extracting sections of code into a new script. To extract code to a new script, select the code, right click, and select Extract New Script in the drow-down list.
- Added an assert command. When an assert command is executed, eggPlant logs success, failure, warning, or an exception. To improve readability, you can insert the word “that” into an assert command. Example:
assert that x > 10
Several properties govern the behavior of the assert command:
- The assertionBehavior property currently defaults to Exception. It can also be set to Error, Warning, or Pause to establish the default behavior for any assert commands that don't specify a behavior. When the behavior is "Pause", a logWarning occurs and the script will pause in the debugger on the line following the assert command.
- The assertionPassCount, the assertionFailCount, the assertionErrorCount, the assertionWarningCount, and the assertionExceptionCount are global counters that are incremented as appropriate each time an assert command is executed. Each failure will increment both the assertionFailCount and also one of the error, warning, or exception counters.
- The assertionsEnabled property defaults to True. If set to False, assert commands are ignored and never executed.
- For Linux: Image names are now treated as case-insensitive when used in standard eggPlant image commands. Local file operations will still defer to the case behavior of the local file system.
- Fixed some issues where a screen size change would not be properly detected at the script level.
- Fixed some problems where the connection list did not update with connections made from scripts.
- Fixed some problems getting a range exception when working in the connection list.
- Fixed a problem with the Bonjour discovery preference not being honored.
- Fixed a problem where RDP connections couldn’t be re-established after the connection was closed externally.
- Fixed a problem making some RDP connections from the command line.
- Added support for WindowsAltKey to RDP connections.
- Fix mapping of F11 for RDP connections.
- Corrected an issue where local Android device names and serial numbers could fail to display correctly.
- Properly display names of eggCloud devices.
- Fixed a problem with reservations from eggCloud reporting the wrong time.
- Resolved an issue with very slow start-ups when the configured eggCloud server couldn’t be reached.
- Fixed a problem where connecting to an eggCloud SUT using a rule would sometimes connect to the wrong SUT.
- Fixed a crash that could occur when closing a suite while a Table Test was running.
- Fixed several formatting issues in the Tables with values overflowing their cells.
- Fixed a problem where Tables could become disassociated with the scripts they were calling.
- Fixed a problem with TypeText HomeButton.
- The RemoteWorkInterval will now be checked before Pinches take place.
- Attempting to copy files to/from a SUT will now throw an error if there is no connection.
- Dramatically improved memory usage with OCR commands.
- Fixed an occasional timing issue when specifying ValidWords for an OCR search.
- Better error messages when attempting to perform an invalid OCR operation.
- Fixed a problem where very long return values (e.g. from a URL read) would not be displayed properly on Windows.
- Deleting all logs for a script will now remove the script in the Results list.
- Much better recording of Drag and Drop events in Turbo Capture mode on Windows and Linux.
- Fixed a problem opening results in other Suites from Schedules.
- Fixed a problem where aborted Schedules would show scripts with a success status.
- Fixed a problem where tolerant images would display as if they had the Pulsing search type selected.
- Fixed a problem where the hot spot would be re-set to the middle when an image was recaptured using the Update Image Panel.
- Images fixed using the Discrepancy Search in the Update Image Panel will now use absolute pixel values rather than a percentage.
- Fixed a problem saving recaptured images to a helper suite from the Update Image Panel.
- Fixed a problem where the last line of a script was ignored by the Trace feature.
- Cleaned up many formatting issues in the Preference Panes.
- Added a Copy To Clipboard button for the Host ID in the license panels.
- Fixed a problem on some Linux distributions where external files and URL resources wouldn’t open properly.
- Fixed an issue where special CLI licenses were sometimes prioritized ahead of GUI licenses.
- Fixed a problem with reconnecting to remotely terminated RDP sessions.
- Fixed a problem with random numbers in scripts on Windows.
- Added support for ZLIB compression to the built-in Android VNC server.
- Added scaling support to the built-in Android VNC server. Users can specify scaling in their Connect command by passing "--scale-screen RATIO" in the AdditionalArgs argument.
- Fixed a problem in the built-in Android VNC server that occurred when connecting and disconnecting repeatedly.
- Added a GUI control in preferences to select the version of ADB.
- Improvements to automatically deployed VNC server for Android.
- Fixed a condition in the Connection List that could result in connecting to the wrong SUT.
- Fixed a problem connecting to Android devices where the connection was prematurely closed by the host.
- Dramatically improved the Suite Search field on Windows when many images are present in the Suite.
- Fixed a problem with ad hoc eggCloud reservations not extending automatically.
- Changed Windows to not stop the ADB server to facilitate testing multiple simultaneous devices. (Not recommended with ADB 1.0.31.)
- Added logic to work with a wider selection of Android devices across multiple versions of ADB. By default, ADB version 1.0.31 is used.
- You can switch to the newer version of ADB (not compatible with some older devices) by issuing this command:
defaults write Eggplant ADBVersion "1.0.32" (Mac/Linux)
defaults.bat write Eggplant ADBVersion "1.0.32" (Windows)
- eggPlant Functional now includes a built in VNC server for Android devices. It will be installed when connecting to devices if a VNC server is not already present.
- Improved integration with eggCloud servers.
User Interface Improvements
- Improvements to the Table GUI and placeholder tokens.
- Dramatically improved performance of Find and Replace on Windows.
- Added the ability to use domain\username with RDP.
- Fixed a crash when RDP connections fail unexpectedly.
- Corrected a problem launching eggOn app for Android via USB.
- Addressed an issue connecting to multiple Android servers that were using the same port.
- Made ranges evaluate correctly when different units were used for the endpoints.
- Fixed a problem where predefined variables would not act as empty when they were modified.
- Normalized the line ending when reading text at a point and at a rectangle.
- Fixed a problem archiving property keys with non-identifier characters.
- Corrected an issue where licenses were not released when eggPlant Functional was run from the command line or terminated abruptly.
- Fixed problems where the RunHistory.xml file could become corrupted.
- Fixed problems with eggPlant Functional responding sluggishly/not responding.
- Fixed a problem reading non-ASCII characters from databases.
- Provide feedback if Bonjour/Zeroconf is not enabled.
- Fixed a hang when a connection drops during a CaptureScreen.
- Cleared an exception that could occur with Show Image Usage.
- Fixed a condition that could occur when using the ValidWords property on a text image search.
- No longer update the SuiteInfo file if we haven’t modified script metadata.
- New commands to copy files and upload applications to mobile servers.
- Support for Pinch gestures in iOS Gateway.
- New commands to set iOS Device Orientation.
- Added VNC Server Discovery for servers that advertise via Bonjour/
zeroconf. (Previously Mac only)
User Interface Improvements
- Added the ability to specify the resolution of an RDP session in the connect interface.
- Added a checkbox to "Save Password" when making a connection.
- Tables now allow you to define ACTIONS from scripts with spaces in their name.
- Prevent saving scripts and images with invalid characters in the name (like Colon or Quote).
- Added the ability to specify an eggCloud port number in the preferences.
- Vertical and horizontal Toolbar settings are now saved between sessions.
- Added the commands for PinchOut/PinchIn to invoke zooming on a multitouch
device. You can specify just a point, a point and a distance, or two points. Please see the documentation for a full description.
//Zoom in on an image with default duration (2 seconds):
// Zoom out from a point for 300 pixels:
PinchIn (At:(500, 500), Distance:300)
// Zoom in using two image points
PinchOut (At:"LEFT_SIDE", To:"RIGHT_SIDE")
- Added commands to RotateLeft, RotateRight, SetDeviceOrientation and GetDeviceOrientation(). These commands give you full control over mobile device orientation. Please see the documentation for a full description.
- Added the ability to copy files to/from the iOS Gateway. Use the copy file … to … syntax with sut: before the filename to indicate a remote file.
copy file "/Users/jonathan/MyFile.txt" to "sut:/tmp/MyFile.txt"
- Added the ability to install and sign applications to iOS Gateway controlled SUTs. Use the InstallApp command, which takes the ApplicationPath key as a reference for the file to install. It can begin with sut: to specify a file on the iOS Gateway machine. Optionally you can also specify a mobile provision file with ProvisionPath to use to resign the application. Again you can use sut: to specify a file on the iOS Gateway machine. Finally, CertificateName must be a valid Certificate Name that has been stored in the keychain on the iOS Gateway machine.
installApp (applicationPath:"/Users/paul/Desktop/YetAnotherSampleApp.ipa", provisionPath:"sut:/Users/paul/Library/MobileDevice/Provisioning Profiles/0c7acd92-b4fc-4295-9938-58b759287d3f.mobileprovision", certificateName:"iPhone Developer: Paul Landers(7JZCTVR53Z)")
- Added new archive() and unarchive() functions which can be used to produce an archival text representation of any SenseTalk value and to efficiently restore the equivalent value from such an archive. The archive format spreads list values and property-list properties across multiple lines, making it more human-readable than the format produced by the
standardFormat function (which is always on a single line), and the unarchive function is more efficient than the value function at reading it again (although value() can also be used to restore a value from the archive format).
put archive of complexData into file “/tmp/archive.txt”
put unarchive of file “/tmp/archive.txt” into restoredData
- Improved performance of the put … after command when used to append text or data to a file.
The units property of a value may now be set to a complex unit. Previously, only a simple unit was supported:
put 8 into bar
set bar’s units to “ft”-- this worked previously
set bar’s units to “cubic ft / second”-- this works now
- Added a new ‘units(expr)’ syntax for units. This allows a variable or expression to supply the units for a value.
set measure to “ft”
set length to 5 units(measure)-- sets length to 5 ft
- Fixed a problem with setting and retrieving built-in properties (such as
format or units) of a property in a property list.
set invoice to (number:1, date:the date)
put the format of invoice.date-- to show value, not format
set the format of invoice.date to “%Y %A %d”
- Improved the formattedTime() function to be able to interpret its second parameter correctly as a date/time if it is given in the format shown by the format string, even though it is not one of the usual formats included in the timeInputFormat global property.
set displayDate to formattedTime(“%A %B %d”, “Friday April 3”)
- Fixed several memory problems related to the Update Image Panel that could lead to crashes and unexpected behavior.
- Fixed crashes on Windows when using RDP from CLI without the user having a proper %HOMEPATH% (i.e. Jenkins)
- Fixed several inconsistencies with the Team License Server reporting of
which licenses are in use.
- Fixed a problem with how renamed scripts were handled by the Tables and Results system of the Suite.
- Fixed a problem with Clipboard sharing in Live mode using eggMan.
- Fixed errors caused when passing whitespace or empty values as ValidWords of an OCR search.
- Fixed a problem where negative values for the repositionPoint were not properly honored.
- Updated ADB to use the newest version.
- Fixed a problem with incorrect content-length specifications from eggDrive with non-ASCII characters.
- Fixed a problem where you could start a recording while a script was running.
- Fixed a crash when inserting text before and after a string at the same time.
- Added some improvements for Text-Image-Generation to handle the the Error: No Error exception.
- Fixed some problems Removing All Breakpints.
- Fixed a problem with any predefined variable whose value is a list or a property list not being correctly treated as a list or as a property list in some contexts.
- Fixed a problem calling ScriptResults when the script was called from a Table.
- Fixed the standardFormat for data, color, and date/time values.
- Fixed the join command and joined by operator to correctly treat a range as a list and join its values.
User Interface Improvements
- Added the ability to reorder actions in Tables for keyword-driven testing.
- Added the ability to drag-and-drop images into Tables.
- You can type the name of a script to select it within a suite.
- Fixed a problem where the last line of a script was not traced.
- The in option of the read command can now also be specified as timeout, timeout in, or time out after.
- Fixed the sin(), cos(), and tan() functions to properly handle parameter values in rotational units other than radians. Updated the atan() function to return a value with units of radians (which can easily be converted to degrees or other units of rotation).
put sin(90 degrees) — 1
put atan(1) as deg — 45 degrees
- Fixed the diskSpace() function, the size property of a file or folder, and the memorySize and physicalMemory properties returned by the systemInfo() function to return values with units of bytes (which can easily be converted to gigabytes or other units of dataSize).
- Fixed a bug with the URLDecode() function that would hang or throw an exception if called with a string containing a percent sign (%) not followed by two hexadecimal digits.
- Fixed a bug that would throw an exception for some forms of the delete command that resulted in an empty string. For example,
put "a" into foo
delete "a" in foo
— this worked fine.
put "a" into foo
delete the first "a" in foo
— this would throw an exception.
- Added boxListFormat, jsonListFormat, and standardListFormat predefined variables, which can be used to conveniently set the listFormat.
- Fixed a problem with RedHat 6 package.
- Fixed a problem that would cause eggPlant Functional to run out of memory with
large Turbo Capture sessions.
- Fixed a crashing issue that could occur when interacting with scripts
or schedules in a suite.
- Fixed a number of problems where Undo could cause a crash.
- Fixed a problem where quitting cleanly after reading text using
- Fixed a persistent memory leak when eggPlant Functional was running in drive
- Fixed a problem calling a script as the first action in a Table from the
- Fixed an occasional hang on Linux when running scripts.
- Fixed an exception editing script info.
- Cleaned up some fatal exceptions when the Global Results Directory
did not exist.
- The UI no longer prompts for a password when a script fails to
- Dragging a script into a Table will no longer open it in the GUI.
- Fixed a hang in specific circumstances using URLDecode.
- Fixed several cases of "NSCharacterConversion" exceptions.
- Fixed forms of the delete command that threw exceptions.
- Fixed several issues with Chinese UI screens.
- Added Type property to ConnectionInfo() to be able to identify RDP connections in scripts.
- Fixed hangs in some situations when making RDP connections on a Windows machine.
- Fixed crashes when reconnecting to the same RDP connection repeatedly.
- Improved Clipboard support for RDP sessions on Windows and Linux.
User Interface Improvements
- Improved argument handling when hitting Tab while working in Tables.
- Improved the formatting of the Actual Value when receiving multiline
- Fixed some focus issues with the Turbo Capture image rectangle.
- Fixed a problem picking Table Actions from helper suites on
- Automatic Image Naming preferences is now also honored in Turbo
- Fixed performance problem with Table image selector for suites with
thousands of images.
- Improved behavior when updating the final image in a Turbo Capture session.
- Fixed some issues changing script and table names.
- Added the ability to delete a table from the UI.
- Improved the OCR ValidPattern to automatically include other marks in the pattern (like percent symbol: %).
- Dramatically improved execution time on scripts that had thousands of posted results.
- Fixed a problem where minutes were treated as seconds.
- Fixed a problem where username and password in a property list
were not always honored for RDP connections.
- Added canceling an OCR search on Windows and Linux.
- Fixed a problem where eggPlant Functional could hang when terminating a
- Added ChinesePRC and ChineseTaiwan to the Language List.
- Fixed occasional hang running scripts on Linux with Run Window up
- Fixed a problem where CaptureScreen could return an image from a prior connection immediately after making a new connection.
- Fixed a problem where the Capture Screen UI would offer to save images as .suite files.
- Fixed a related problem where moving UP to the suite level in the
Capture Screen UI would select the local suite folder and close the window.
- New Tables feature for keyword-driven testing
- Turbo Capture mode for script recording
- Added support for Microsoft RDP connections
- Upgraded OCR Engine
eggPlant Functional 15 for Linux requires RedHat Version 6+
Using the new Tables section of the Suite, you can now create a straightforward workflow by selecting commands and functions from a list.
- The most common eggPlant Functional primitives are already included.
- You can add your own scripts to the list by specifying the calling arguments and return value (for verify actions) in the Script Info section (Use the "i" button in the Script Editor).
- In the Table, select an action and then use Tab to move between arguments and expected values.
- For verify actions (functions), you can specify an expected value to be compared to the returned value.
- The expected value can be any SenseTalk expression.
- See the latest results for each line as you run the test; for past runs, you'll find results in the Results tab.
You can now generate scripts using the new Turbo Capture feature, interacting with the SUT in live mode and then naming your images afterwards.
- Get started by hitting the Start Session button on your toolbar or by selecting Start a Turbo Capture Session on the Control menu.
- Interact with your SUT in live mode to perform a sequence of steps, and then End Session when you are finished.
- Note: If you want to record a mouse move (without a click) tap the Shift key.
- Name your session, if you want, and then use the Open Session button to review your workflow and begin naming and adjusting your images.
- You can stop at any time and return later; your progress is saved automatically.
- When you are finished, hit the Generate Script button to record all the images and create your script.
RDP Connection Support
Now you can make connections to computers using Microsoft’s Remote Desktop Protocol (RDP).
- When adding a connection, select RDP as your connection type, add your Windows username and password.
Upgraded OCR Engine
We’ve upgraded to the very latest ABBYY version 11 on ALL platforms. This means that OCR will now behave the same between eggPlant platforms.
- The new engine is much more accurate when reading text, but this may result in it reading things slightly differently than it did in version 14.
- A new ValidWords property has been added, which can be set to either a list of words or a string containing words separated by whitespace. When ValidWords is used, the OCR engine will attempt to read everything as one of the specified words.
- During an OCR search, setting the new ValidWords property with a value of * (asterisk) will only recognize words that are part of the target phrase.
- We have added the ability to read rotated and upside-down text by specifying a TextRotation property with the value of Clockwise, CounterClockwise, or UpsideDown.
- You can now specify a regular expression to be used when doing a ReadText command by adding a ValidPattern property. The ValidPattern property should be set to a regular expression to be used for matching each word.
You can now customize what languages are shown in the OCR panels from the Text Preferences.
- When using a list or range as an iterator, in addition to using NextValue to retrieve the next sequential value, the new CurrentValue property gives access to the current value without advancing the CurrentIndex. The CurrentValue property is also a container, acting similar to a reference to that value, allowing you to replace or modify that value in the list.
- A repeat with each can now assign multiple loop variables on each iteration, from a source iterator that supplies a list of values.
- repeat with each (x,y,z) in ((12,22,14),(6,9,18),(15,3,44))
- The same rules used for multiple assignment are applied, so variables can be omitted for values that you don't care about, and excess values are ignored unless the final variable name is followed by an ellipsis (...) to collect them as a list.
- A property list can now be used as an iterator. When iterating in a repeat loop, it supplies each key and its value as a list of two items. (Note: To preserve compatibility with previous behavior, the repeat must specify a list of loop variables for this process to work.) An object that defines its own iteration (i.e., an object with an objectType of "iterator") will use its own iteration as before; other objects will now iterate over the (key,value) pairs for their properties.
- set people to (Marty:12, June:16, Aaron:6, Grace:11)
- repeat with each (name,age) in people
- put name && "is" && age && "years old"
- end repeat
- When iterating over the properties of a property list outside of a repeat loop, nextKey can be used to retrieve the next key, nextValue to retrieve the next value, or nextKeyValue to retrieve the next (key,value) pair. CurrentKey, currentValue, and currentKeyValue can be used to obtain the corresponding value for the current property without advancing the iteration.
- A start iteration command has been added to start or restart the iteration of any iterator. This is the only way to begin iteration again for a property list. It can also be used to start iteration for lists, ranges, and chunks, or you can achieve the same result for those types by setting their currentIndex to 0.
- Mixed fractions like "6 5/8" are now supported provided there is a single space character between the whole number and the fraction and no spaces around the '/' character. Simple fractions with units, of the form "3/4 ft", are now processed by the compiler as a single number (rather than 2 numbers and a division operator) provided the fraction is directly written with numbers (not variables or other expressions) and is followed by a unit name.
- Added support for special symbols ≤, ≥, +, +, ➕, −, ×, ÷, √, and ≠ as operators in expressions. Also, the letter X can now be used as a multiplication operator.
- Added support for using ! before a quoted string as a shorthand for calling the merge function.
- put !"The month is now [[the monthName]]" -- "The month is now September"
- Added the ability to include some additional characters in identifiers (variable names and handler names) in addition to the alphanumeric characters and underscores that were previously allowed.
- Added as words, as a word, as hex, as hexadecimal as equivalents for the corresponding format operators (format "words" or format "hex"). For as words, capitalization follows that of the word "words".
- Added highestValue(), largestValue(), and lowestValue(), smallestValue() as synonyms for the maximum() and minimum() functions, respectively, and added natural language syntax for them.
- Added but at least, but no less than, but at most, and but no more than operators to simplify the task of limiting a number to a minimum or maximum value. (Internally, these operators call the largestValue or smallestValue functions).
- Added from now as a synonym for the hence operator.
- Added a repeated operator to create a string of text repeated a given number of times, up to a specified length, or to create a repeated list:
- put "$" repeated 12 times -- "$$$$$$$$$$$$"
- put "Hello" repeated to length 12 -- "HelloHelloHe"
- For a list of repeated items, use as (a) list or (a) list of with repeated:
- put "$" repeated 6 times as a list -- ("$","$","$","$","$","$")
- Added a number of operator for multiplication or repetition. (Note: This syntax requires a literal number before the word of, not a variable.) This is particularly useful for fractions of numbers and units. If the value is a number or a list, it is multiplied by the number. Otherwise, the number of operator will cause it to be repeated like the repeated operator.
- Changed the standardFormat function. It now records numbers without quotation marks, and uses scientific notation when appropriate to accurately represent the value, without using the numberFormat. Numbers with units will include the unit name. Strings are now quoted using the "@" quoting style, with embedded backslash escape sequences as needed.
- Added LightSpeed and googol as predefined variables.
- Added predefined variables heavyCheckMark, xMark, and heavyXMark in the Common symbols category.
- Allow before or after in addition to from in the seek command.
- An em dash character (—) can now be used to start a comment, since some text editors automatically replace two dashes (--) with an em dash.
- Added support for considering case / ignoring case in the intersection, union, excludeItems and uniqueItems functions. These functions now follow the current setting of the caseSensitive property by default (previously they were always case-sensitive).
- A range expression can now be written using "down to" in addition to "to" and "..".
- Strings containing numbers in scientific/exponential notation are now recognized as numbers.
- The word by can now be used before the step value in a repeat loop (in addition to step or step by).
- The maximum and minimum functions now return empty, not zero, when called with an empty parameter (or with any list containing no numbers).
- Fixed a tiny bug that would allow two @ signs before a string literal. Only one is allowed.
- Fixed an error that would allow "database" to mean "new database" -- the word "new" is now required.
- Fixed a bug with « » quotation marks, which were omitting the first character inside the quotes.
- Fixed addition/subtraction of a number and a single-item list containing a number to always result in a simple number, not a list.
- Fixed multiplication of a number and a single-number list to always result in a single-number list (scalar multiplication of a number and a list).
- Fixed an obscure bug with setting a property of a list item of a non-existent property of an empty variable.
- Fixed an issue with predefined variables not being recognized as having a value in certain contexts.
- Improved error message for some cases where a command is called with a range.
Scripting Units Support
- Added units support. Numeric values may now include a unit name to identify the type of value. SenseTalk is aware of the relationships between different units and automatically converts to compatible units as needed during calculations or when requested.
- Many unit types are recognized, and more will be added in the future. The unitTypes() function gives a list of all of the different categories, including synonyms in some cases:
- put the unitTypes
- Many unit names are recognized for each type, including singular, plural, and abbreviated names for many units. The complete list of unit names is given by the unitNames() function (there are thousands of unit names).
- To use units, simply include a unit name after a number or variable name within an expression:
- put 3 feet into counterHeight
- add z grams to totalWeight
- Derived units like area and volume can be expressed in several ways:
- set surface to 9 cm^2 -- 9 square centimeters
- set area to 2 yds*ft -- 6 square feet
- set base to 5 sq in -- 5 square inches
- set vol to 3 cu yds -- 3 cubic yards
- A value can be converted from one unit to another (compatible) unit by specifying as followed by the other unit name:
- put 1 gallon as liters -- 3.785412 liters
- The mathematical operators and functions all maintain and/or convert units as appropriate, to the extent possible. For example, the following addition first converts 8 inches into centimeters before adding:
- put 8 inches + 3 cm — 23.32 centimeters
- A value may be tested to see if it is of a particular unit type using the is a operator:
- put 4 cm is a distance — True
- put 9 ounces is a duration — False
- Two global properties control the behavior of the units system. The unitsEnabled is now set to True by default to enable the use and display of units. Setting it to false will cause unit names to be ignored and treat all numeric values as plain numbers.
- The strictUnits property is also set to True by default. This setting preserves the integrity of calculations, throwing an exception for any calculation involving incompatible units, including addition, subtraction or comparisons between plain numbers and those with unit values. Set it to false to provide more lenient behavior, which will not throw exceptions but may cause values to lose their unit association in some situations.
- We now back record helper suites so you can see which other suites are "helping."
- Opening logs that are in a helper suite will no longer raise an exception.
- Nonexistent suites will no longer show up in the Open Recents menu.
- Fixed an occasional hang when running a script from Command Line.
- Fixed a number of license messages that were unclear when no GUI license is found.
- Added a LogWarning when an Ask/Answer panel is called while running from in command line mode.
- Added the ability to duplicate a Schedule.
- When pasting "fancy" quotes from external sources into a script we will now convert them to standard ASCII quotes to prevent parsing and compiling problems.
- Fixed an occasional crash when connecting to a SUT.
- Added a feature to temporarily freeze the remote screen to simplify capturing images of transient UI elements.
- Fixed an occasional hang when running a script from Command Line.
- Added keyboard shortcuts to switch between open tabs in a suite:
- Command+Shift+[ and Command+Shift+] on Mac
- Control+Shift+[ and Control+Shift+] on Windows/Linux
- Fixed a problem where Function key shortcuts didn’t show in the menus.
- Now includes CaptureScreen among the list of "interesting" log lines when filtering.
- On Mac 10.9 and 10.10, we have modified eggPlant Functional to not AppNap. This power-saving feature caused disruptions to eggPlant Functional’s background running scripts when it was hidden/off-screen.
- Fixed a rare crash when launching a VNC server on Android over USB.
- Applying an image "Fix" from the results will reflect that change on any open copies of the image.
- When selecting an image from the screen during Update Image, the replacement image will no longer grow by 2 pixels in both dimensions.
- Fixed a problem with mousing over strings that corresponded to Windows named ports (like PRN or COM1).
- Fixed some problems with Copy/Paste throwing NSRange exceptions.
- Fixed some exceptions that could happen when customizing the Remote Window Toolbar.