Overview¶
The following shows how to alter the Qt process' environment to hook up Java sub-processes started afterwards.
Python¶
import os.path
def main():
# Lets use Squish for Qt's addressbook example as AUT:
ctx_qt = startApplication("addressbook")
# Must be provided by the user:
squish_for_java_dir = "C:/Users/myuser/squish-6.0.2-java"
undo_info = prepare_java_subprocess_hook_up(squish_for_java_dir)
# Do something in Qt AUT that starts a Java sub-process:
start_java_subprocess(squish_for_java_dir)
# Undo the changes to the process environment:
undo_prepare_java_subprocess_hook_up(undo_info)
# Synchronize for the hook up of the/a new
# (sub)process:
waitForApplicationLaunch()
# Verify that a second AUT is hooked up now:
test.compare(
2,
len(applicationContextList()),
"Expected app ctx count: 2; actual: %s" % len(applicationContextList()))
def start_java_subprocess(squish_for_java_dir):
# This is faking the start of a Java application
# through the current Qt AUT:
p = QProcess()
p.setProgram("C:/Program Files (x86)/Java/jre/bin/java")
p.setArguments(QString("-jar " + squish_for_java_dir + "/examples/java/addressbook/AddressBookSwing.jar").split(QString(" ")))
p.start()
def prepare_java_subprocess_hook_up(squish_for_java_dir):
path_env_var_backup = qgetenv("PATH")
path, _java_options = get_squish_java_path_and__java_options(
squish_for_java_dir,
str(qgetenv("PATH")),
os.path.expandvars("$TEMP"))
qputenv("PATH", path)
qputenv("_JAVA_OPTIONS", _java_options)
# Optional, to make it attachable:
#qputenv("SQUISH_ATTACHABLE_PORT"), "4444")
return path_env_var_backup
def undo_prepare_java_subprocess_hook_up(path_env_var_backup):
# Restore PATH:
qputenv("PATH", path_env_var_backup)
# Invalidate _JAVA_OPTIONS:
qputenv("_JAVA_OPTIONS", "")
def get_squish_java_path_and__java_options(squish_java_path, path, user_temp_path):
squish_bin = os.path.join(squish_java_path, "bin")
squish_lib = os.path.join(squish_java_path, "lib")
path = squish_bin + os.pathsep + squish_lib + os.pathsep + str(path)
_java_options = '"-Xbootclasspath/p:%(squish_java_path)s/lib/squishrt.jar"'
_java_options += ' "-Dsquish.wrapper=%(squish_java_path)s/bin/squishjavawrapper.dll"'
_java_options += ' "-javaagent:%(squish_java_path)s/lib/squishagent.jar=%(squish_java_path)s/lib"'
_java_options += ' "-Xverify:none"'
_java_options += ' "-Dsquish.tmpdir=%(user_temp_path)s/frogtemp"'
_java_options += ' "-DSQUISH_LOG_HOOKUP=1"'
_java_options += ' "-Dsquish.bcel=%(squish_java_path)s/lib/bcel.jar"'
_java_options += ' "-Djava.security.policy=file:%(user_temp_path)s/frogtemp/squish.policy"'
_java_options = _java_options % {"squish_java_path": squish_java_path, "user_temp_path": user_temp_path}
return path, _java_options