public class JSAFSDriver extends DefaultDriver implements ITestRecordStackable
JSAFSDriver jsafs = new JSAFSDriver("JSAFS");
jsafs.run();
//do whatever you want with and without SAFS...
jsafs.processCommand(AbstractCommand, String);
jsafs.shutdown();
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
ADVANCED_RUNTIME_ID |
static java.lang.String |
ADVANCED_RUNTIME_LEVEL |
static java.lang.String |
ADVANCED_RUNTIME_PACKAGEROOT |
static java.lang.String |
ADVANCED_RUNTIME_TABLE |
static boolean |
AUTO_RESOLVE_TESTRECORD |
java.lang.String |
SEPARATOR
"," The default separator that will be used when issuing SAFS commands.
|
StatusCounter |
statuscounter |
boolean |
systemExitOnShutdown
When SAFS Monitor usage is enabled (useSAFSMonitor=true), and the JSAFSDriver has detected the test
or a user has initiated a JSAFSDriver shutdown through this mechanism, the default implementation of
the JSAFSDriver
processCommand(AbstractCommand, String) is to initiate System finalization
followed by a System exit--a complete shutdown of the JVM running the tests. |
TestRecordHelper |
testRecordHelper |
protected ITestRecordStackable |
testrecordStackable
The ITestRecordStackable used to store 'Test Record' in a FILO.
|
cycleLog, cycleStack, engineObjects, enginePreference, engines, safsmonitor, status, stepLog, stepStack, suiteLog, suiteStack, useSAFSMonitor
autoitcomponent, benchSource, configInfo, core, counterInfo, counts, cycleflowcontrol, cycleLinkedFac, cycleLogMode, cycleLogName, cycleSeparator, cycleSuffix, datapoolSource, debug, difSource, driverConfigPath, driverName, driverRootDir, exitCycle, exitSuite, expressionsOn, input, ipcommands, locator, logLevel, logs, logsSource, maps, millisBetweenRecords, perTableFlowControl, projectConfigPath, projectRootDir, statuscounts, stepflowcontrol, stepLinkedFac, stepLogMode, stepLogName, stepSeparator, stepSuffix, suiteflowcontrol, suiteLinkedFac, suiteLogMode, suiteLogName, suiteSeparator, suiteSuffix, testLevel, testName, testSource, tidcommands, tidcomponent, vars, verifySource
DRIVER_CONTROL_POF_VAR, DRIVER_CONTROL_POW_VAR, DRIVER_CONTROL_VAR
Constructor and Description |
---|
JSAFSDriver(java.lang.String drivername) |
Modifier and Type | Method and Description |
---|---|
java.lang.String |
checkSAFSMonitorStatus()
Programmatically conform to user-initiated PAUSE, RUN, STEP, STEP RETRY input from SAFS Monitor.
|
void |
closeMap(java.lang.String mapname)
Convenience routine to close an App Map.
|
void |
delayBetweenRecords()
Try to delay a certain time
AbstractDriver.getMillisBetweenRecords() between the executions.Normally, it is called after the execution of a command. |
boolean |
getAutomaticResolve() |
CountStatusInterface |
getCounterStatus(java.lang.String counterId)
Retrieve a CounterStatusInterface object containing the current counts for the specified Counter.
|
static java.lang.StackTraceElement |
getFirstNonSAFSStackTraceElement()
Examine the calling Thread's Stack Trace and return the first StackTraceElement that is NOT from
the org.safs...
|
java.lang.String |
getMappedValue(java.lang.String mapid,
java.lang.String section,
java.lang.String item)
Convenience routine to lookup the mapped value stored in the App Map chain.
|
java.lang.String |
getVariable(java.lang.String varname)
Convenience routine to retrieve the value of a SAFS Variable stored in SAFSVARS.
|
TestRecordHelper |
initTestRecordData(TestRecordHelper store)
Convienience (re)initializer for a TestRecordHelper.
|
void |
logFAILED(java.lang.String message,
java.lang.String description)
Convenience routine to log FAILED message to the active SAFS log.
|
void |
logGENERIC(java.lang.String message,
java.lang.String description)
Convenience routine to log GENERIC message to the active SAFS log.
|
void |
logPASSED(java.lang.String message,
java.lang.String description)
Convenience routine to log PASSED message to the active SAFS log.
|
void |
logWARNING(java.lang.String message,
java.lang.String description)
Convenience routine to log WARNING message to the active SAFS log.
|
static void |
main(java.lang.String[] args)
Self-Test some JSAFSDriver functionality.
|
void |
openMap(java.lang.String mapname)
Convenience routine to open an App Map.
|
TestRecordData |
popTestRecord()
Retrieve the Test-Record from the the Stack after the execution of a keyword.
|
TestRecordHelper |
processCommand(AbstractCommand command)
Execute the desired AbstractCommand using the default field separator for the record.
|
TestRecordHelper |
processCommand(AbstractCommand command,
java.lang.String separator)
This method can process DriverCommand or ComponentFunction just as runDriverCommand()
or runComponentFunction(), further more it includes the functionality of SAFSMonitor
so users can interctively PAUSE, STEP, DEBUG their script and SHUTDOWN the engine hook.
|
protected TestRecordHelper |
processCommandDirect(AbstractCommand command,
java.lang.String separator)
Execute the desired AbstractCommand using the specified field separator for the record.
|
protected long |
processComponentFunction()
Note: Before calling this method,
you must call setGlobalTestRecordHelper(AbstractCommand, String, String) Execute the desired ComponentFunction using the specified field separator for the record. |
protected long |
processDriverCommand()
Note: Before calling this method,
you must call setGlobalTestRecordHelper(AbstractCommand, String, String) Execute the desired DriverCommand using the specified field separator for the record. |
java.lang.String |
processExpression(java.lang.String expression)
Convenience routine to retrieve the value resulting from
a standard SAFS Expression,
The routine provides support identical to SAFS InputRecord expression processing. |
protected java.lang.String |
processExpression(java.lang.String testRecord,
java.lang.String separator)
This method is used to resolve the expressions within a test record,
something like ^var=Text or ^varPrefix & ^varSuffix will be processed
by the VariableService, some works like assignment of variable will
be done during that period.
|
protected StatusInterface |
processTest()
Required abstract method is never really called since we have overridden
run() |
void |
pushTestRecord(TestRecordData trd)
Push the current 'test record' into the Stack before the execution of a keyword.
|
boolean |
reinstateShutdownHook() |
boolean |
removeShutdownHook() |
java.lang.String |
resolveExpression(java.lang.String expression)
Resolve an expression, which is an ONE-FIELD expression.
|
protected java.lang.String |
resolveExpression(java.lang.String expressions,
java.lang.String separator)
Resolve a set of expressions delimited by separator.
|
static java.lang.String |
resolveExpression(java.lang.String testRecord,
java.lang.String separator,
VarsInterface varService)
Resolve the testRecord for supported "numeric/string expressions" and "DDVariable".
If AbstractDriver.isExpressionsEnabled() is false, then "numeric/string expressions" will not
be resolved; But the "DDVariable" will be always evaluated.The input record fields are delimited by the provided separator, and each field is separately processed for expressions. Note: How the wrapping-double-quotes are handled after evaluation? |
protected long |
routeToEngines(TestRecordHelper trd,
boolean sendAll)
Route the input record to one or more engines, or all engines.
|
protected long |
routeToPreferredEngines(TestRecordHelper trd)
Route the input record to preferred engines only in the order of preference.
|
void |
run()
Called to initialize the JSAFSDriver and make it ready for use.
|
TestRecordHelper |
runComponentFunction(ComponentFunction command)
Execute the desired ComponentFunction using the default field separator for the record.
|
TestRecordHelper |
runComponentFunction(ComponentFunction command,
java.lang.String separator)
Execute the desired ComponentFunction using the specified field separator for the record.
|
protected TestRecordHelper |
runComponentFunctionDirect(ComponentFunction command,
java.lang.String separator)
Deprecated.
call
processCommandDirect(AbstractCommand, String) instead |
TestRecordHelper |
runDriverCommand(DriverCommand command)
Execute the desired DriverCommand using the default field separator for the record.
|
TestRecordHelper |
runDriverCommand(DriverCommand command,
java.lang.String separator)
Execute the desired DriverCommand using the specified field separator for the record.
This implementation tries following engines in this order: |
protected TestRecordHelper |
runDriverCommandDirect(DriverCommand command,
java.lang.String separator)
Deprecated.
call
processCommandDirect(AbstractCommand, String) instead |
void |
setAutomaticResolve(boolean automaticResolve) |
protected void |
setGlobalTestRecordHelper(AbstractCommand command,
java.lang.String separator,
java.lang.String record)
Note: Before calling method processDriverCommand() and processComponentFunction()
you MUST call this method to initialize the global variable testRecordHelper. |
void |
setVariable(java.lang.String varname,
java.lang.String value)
Convenience routine to set the value of a SAFS Variable stored in SAFSVARS.
|
void |
shutdown()
Used to shutdown the the driver and, potentially, all of SAFS once testing is complete.
|
protected void |
validateTestParameters()
Try to set the test parameters in the super class method.
Then set the separator SEPARATOR according to current test level. |
clearEnginePreferences, closeTestLogs, endEnginePreference, getEngineInterface, getEnginePreferences, getEngines, getFullEngineClass, getGenericInterface, getLogID, getPreferredEngine, getPreferredEngineIndex, getTestLevelSeparator, hasEnginePreferences, initializeMiscConfigInfo, initializePresetVariables, initializeRuntimeEngines, initializeRuntimeInterface, initLog, insertConfigureInterfaceSource, isPreferredEngine, isPreferredEngine, isUseSAFSMonitor, launchSAFSMonitor, openTestLogs, parseLogMode, setUseSAFSMonitor, shutdownRuntimeEngines, shutdownRuntimeInterface, startEnginePreference, validateLogParameters
addConfigureInterfaceSource, addStatusCounts, getAutoItComponentSupport, getBenchDir, getConfigureInterface, getConfigureLocator, getCoreInterface, getCountersInterface, getCycleLogMode, getCycleLogName, getCycleSeparator, getCycleSuffix, getDatapoolDir, getDebugInterface, getDifDir, getDriverName, getDriverRootDir, getFlowControlInterface, getInputInterface, getIPDriverCommands, getLogLevel, getLogsDir, getLogsInterface, getMapsInterface, getMillisBetweenRecords, getParameterValue, getProjectDirectoryInfo, getProjectRootDir, getRootDirectoryInfo, getRootVerifyDir, getStatusInterface, getStepLogMode, getStepLogName, getStepSeparator, getStepSuffix, getSuiteLogMode, getSuiteLogName, getSuiteSeparator, getSuiteSuffix, getTestDir, getTestLevel, getTestName, getTIDDriverCommands, getTIDGUIlessComponentSupport, getVarsInterface, incrementGeneralStatus, incrementTestStatus, isExitCycle, isExitSuite, isExpressionsEnabled, isModifiedConfig, isModifiedRoot, isPerTableFlowControl, logMessage, processEmbeddedVariable, resetModifiedProperties, setBenchDir, setDatapoolDir, setDifDir, setExitCycle, setExitSuite, setExpressionsEnabled, setLogsDir, setMillisBetweenRecords, setPerTableFlowControl, setProjectRootDir, setRootVerifyDir, setTestDir, validateRootConfigureParameters
public static final java.lang.String ADVANCED_RUNTIME_ID
public static final java.lang.String ADVANCED_RUNTIME_TABLE
public static final java.lang.String ADVANCED_RUNTIME_LEVEL
public static final java.lang.String ADVANCED_RUNTIME_PACKAGEROOT
public StatusCounter statuscounter
public TestRecordHelper testRecordHelper
protected ITestRecordStackable testrecordStackable
public boolean systemExitOnShutdown
processCommand(AbstractCommand, String)
is to initiate System finalization
followed by a System exit--a complete shutdown of the JVM running the tests.
If the developer does NOT want a such a complete shutdown to occur upon a JSAFSDriver shutdown, then
this field should be set to 'false'.
The default setting is 'true'.
public java.lang.String SEPARATOR
public static boolean AUTO_RESOLVE_TESTRECORD
public boolean removeShutdownHook()
public boolean reinstateShutdownHook()
public boolean getAutomaticResolve()
public void setAutomaticResolve(boolean automaticResolve)
public void logGENERIC(java.lang.String message, java.lang.String description)
message
- String messagedescription
- String (optional) for more detailed info. Can be null.AbstractDriver.logMessage(String, String, int)
public void logPASSED(java.lang.String message, java.lang.String description)
message
- String messagedescription
- String (optional) for more detailed info. Can be null.AbstractDriver.logMessage(String, String, int)
public void logFAILED(java.lang.String message, java.lang.String description)
message
- String messagedescription
- String (optional) for more detailed info. Can be null.AbstractDriver.logMessage(String, String, int)
public void logWARNING(java.lang.String message, java.lang.String description)
message
- String messagedescription
- String (optional) for more detailed info. Can be null.AbstractDriver.logMessage(String, String, int)
public java.lang.String getVariable(java.lang.String varname)
varname
- AbstractDriver.getVarsInterface()
public void setVariable(java.lang.String varname, java.lang.String value)
varname
- -- Name of variable to set.value
- to store for varname.AbstractDriver.getVarsInterface()
public void openMap(java.lang.String mapname) throws java.lang.IllegalArgumentException
mapname
- -- Name of app map to open and add to any app map chain. The
exact same mapname (not case-sensitive) must be used to closeAppMap.java.lang.IllegalArgumentException
- if mapname is null or cannot be resolved to
a valid App Map filepath by the driver.#closeAppMap(String)
,
SAFSMAPS.openMap(org.safs.tools.input.UniqueMapInterface)
public void closeMap(java.lang.String mapname) throws java.lang.IllegalArgumentException
mapname
- -- Name of app map to close and remove from any app map chain.
The name used must be the same name used in the openMap call or the SetApplicationMap
Driver Command. The mapname, however, is not case-sensitive.java.lang.IllegalArgumentException
- if mapname is null or cannot be resolved to
a valid App Map filepath by the driver.#openAppMap(String)
,
SAFSMAPS.closeMap(org.safs.tools.UniqueIDInterface)
public java.lang.String processExpression(java.lang.String expression)
AbstractDriver.isExpressionsEnabled()
is false, the expression will be returned directly.expression
- -- a standard SAFS expression to process.AbstractDriver.getVarsInterface()
,
AbstractDriver.isExpressionsEnabled()
,
resolveExpression(String)
protected java.lang.String processExpression(java.lang.String testRecord, java.lang.String separator)
TestRecordData.getTrimmedUnquotedInputRecordToken(int)
to get each field.testRecord
- a normal test record stringseparator
- the separator used in the test recordpublic java.lang.String resolveExpression(java.lang.String expression)
AbstractDriver.isExpressionsEnabled()
is true, the expression will be resolved as "numeric/string expression".AbstractDriver.isExpressionsEnabled()
is, the expression will be resolved as "DDVariable"AbstractDriver.isExpressionsEnabled()
is false, the result is "3+5", and variable "var" contains string "3+5"AbstractDriver.isExpressionsEnabled()
is true, the result is "8", and variable "var" contains string "8"AbstractDriver.isExpressionsEnabled()
is false, the result is string "3+5".AbstractDriver.isExpressionsEnabled()
is true, the result is string "8".expression
- String, the expression to be resolved.protected java.lang.String resolveExpression(java.lang.String expressions, java.lang.String separator)
resolveExpression(String, String, VarsInterface)
.expressions
- String, a set of expression delimited by separator, such as "expression1, expression2, expression3"separator
- String, the separator used to delimit expressionsresolveExpression(String, String, VarsInterface)
public static java.lang.String resolveExpression(java.lang.String testRecord, java.lang.String separator, VarsInterface varService)
AbstractDriver.isExpressionsEnabled()
is false, then "numeric/string expressions" will not
be resolved; But the "DDVariable" will be always evaluated.After evaluation, each field will be double-quoted, but sometimes we don't want that wrapping double quote. Below is the strategy to handle the wrapping double quotes in the evaluated result. If testRecord contains more than one field, the wrapping double quote will be kept for each field. If testRecord contains only one field, if the original field is double-quoted, then do NOT remove the wrapping double quote otherwise (single-field and not-double-quoted) , remove the wrapping double quoteNote: How the double-quoted field is handled?
If the field has already been double-quoted, it will NOT be trimmed and evaluated (which means untouched).
For example, String result = resolveExpression("\" 3+5 \",\" > \",\"9-3 \"", ",");
Whether AbstractDriver.isExpressionsEnabled()
is true or false, the result is always string "" 3+5 "," > ","9-3 "", each field remains untouched.
Note: How AbstractDriver.isExpressionsEnabled()
affects the result?
Only whenNote: How non-double-quoted field is handled?AbstractDriver.isExpressionsEnabled()
is true, each field will be resolved as "numeric/string expressions". No mater whatAbstractDriver.isExpressionsEnabled()
is, each field will be resolved as "DDVariable". For example, String result = resolveExpression("^var=3+5", ","); IfAbstractDriver.isExpressionsEnabled()
is false, the result is "3+5", and variable "var" contains string "3+5" IfAbstractDriver.isExpressionsEnabled()
is true, the result is "8", and variable "var" contains string "8"
Each field will be TRIMMED and then evaluated, the evaluated value will be WRAPPED in DOUBLE-QUOTE to return. For example, String result = resolveExpression(" 3+5 , > ,9-3 ", ","); IfAbstractDriver.isExpressionsEnabled()
is false, the result is string ""3+5",">","9-3"", each field has been wrapped in double quote. IfAbstractDriver.isExpressionsEnabled()
is true, the result is string ""8",">","6"", each field has been wrapped in double quote.
testRecord
- String, the test record. It can contain more than one field,
these fields are delimited by a separator indicated by the 2th parameter 'separator'.separator
- String, the separator to split the testRecordvarService
- VarsInterface, the variable service instance used to resolve testRecordAbstractDriver.isExpressionsEnabled()
public java.lang.String getMappedValue(java.lang.String mapid, java.lang.String section, java.lang.String item)
mapid
- -- Name\ID of the Map to use for the lookup. Use null for Default Map.section
- -- Name of the Section in the Map for the lookup. Use null for Default Section [ApplicationConstants].item
- -- Name of the Item to lookup in the define Map Section.AbstractDriver.getMapsInterface()
public TestRecordHelper initTestRecordData(TestRecordHelper store)
runDriverCommand(DriverCommand)
and runComponentFunction(ComponentFunction)
.
Instantiates and\or reinits a TestRecordHelper
and initializes key properties:
DriverConstant.STATUS_SCRIPT_NOT_EXECUTED
store
- - A TestRecordHelper to reinitialize or null to get a new one initialized.TestRecordData.reinit();
protected void validateTestParameters()
SEPARATOR
according to current test level.validateTestParameters
in class DefaultDriver
DefaultDriver.validateTestParameters()
protected void setGlobalTestRecordHelper(AbstractCommand command, java.lang.String separator, java.lang.String record)
command
- An instance of AbstractCommand which is abstract, so it is indeedseparator
- The separator used to create test-record from AbstractCommand.record
- If it is null, a test-record generated from AbstractCommand protected long processDriverCommand()
setGlobalTestRecordHelper(AbstractCommand, String, String)
protected long processComponentFunction()
setGlobalTestRecordHelper(AbstractCommand, String, String)
public CountStatusInterface getCounterStatus(java.lang.String counterId)
counterId
- -- the Id of the Counter from which to get status counts.public java.lang.String checkSAFSMonitorStatus() throws SAFSException
This method is used to check for and comply with user input to SAFS Monitor, but cannot provide PAUSE_ON_FAILURE support.
The PAUSE and other features are only checked if DefaultDriver.useSAFSMonitor
is 'true'.
A given status will perform the following functions:
SAFSException
- if SHUTDOWN_HOOK was detected. This routine only throws the Exception.
It does not attempt a JVM shutdown.public TestRecordHelper processCommand(AbstractCommand command, java.lang.String separator)
This method will automatically be called from runDriverCommand or runComponentFunction
if DefaultDriver.useSAFSMonitor
=true -- which it is by default. If the developer wants to
disable this feature the developer should set useSAFSMonitor to 'false'.
If this method detects a user initiated shutdown request via SAFS Monitor, or if the
running test initiates the same type of shutdown request, this method will initiate a
full JVM finalization and System.exit if systemExitOnShutdown
=true -- which
it is by default. If the developer wants to disable the automatic JVM finalization and
shutdown feature then the developer should set systemExitOnShutdown to 'false'.
command
- An instance of AbstractCommand which is abstract, so it isseparator
- The separator used to create test-record from AbstractCommand.TestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
DefaultDriver.useSAFSMonitor
,
systemExitOnShutdown
,
runDriverCommand(DriverCommand)
,
runComponentFunction(ComponentFunction)
public TestRecordHelper processCommand(AbstractCommand command)
processCommand(AbstractCommand, String)
.command
- AbstractCommand command to executeTestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
protected TestRecordHelper processCommandDirect(AbstractCommand command, java.lang.String separator)
command
- AbstractCommand command to executeseparator
- for test record fieldsTestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
protected TestRecordHelper runDriverCommandDirect(DriverCommand command, java.lang.String separator)
processCommandDirect(AbstractCommand, String)
insteadcommand
- separator
- TestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
public TestRecordHelper runDriverCommand(DriverCommand command, java.lang.String separator)
command
- separator
- TestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
public TestRecordHelper runDriverCommand(DriverCommand command)
runDriverCommand(DriverCommand, String)
command
- TestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
protected TestRecordHelper runComponentFunctionDirect(ComponentFunction command, java.lang.String separator)
processCommandDirect(AbstractCommand, String)
insteadcommand
- ComponentFunction command to executeseparator
- for test record fieldsTestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
public TestRecordHelper runComponentFunction(ComponentFunction command, java.lang.String separator)
command
- ComponentFunction command to executeseparator
- for test record fieldsTestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
public void delayBetweenRecords()
AbstractDriver.getMillisBetweenRecords()
between the executions.public TestRecordHelper runComponentFunction(ComponentFunction command)
runComponentFunction(ComponentFunction, String)
.command
- ComponentFunction command to executeTestRecordData.getStatusCode()
and
TestRecordData.getStatusInfo()
protected long routeToPreferredEngines(TestRecordHelper trd)
protected long routeToEngines(TestRecordHelper trd, boolean sendAll)
If 'sendAll' is TRUE, it means the record needs to be processed by EVERY engine, regardless of the response from any one engine. For example, if the driver must tell each engine to clear a cache, or something.
if 'sendAll' is FALSE, we will not route to any engine that is 'preferred' because all 'preferred' engines should have already been tried.
public void run()
processTest()
.
Thus, the driver is ready to use for ad-hoc calls to SAFS.
The driver must be shutdown()
when testing is completed.
Invokes:
AbstractDriver.validateRootConfigureParameters(boolean)
DefaultDriver.validateLogParameters()
DefaultDriver.initializeRuntimeInterface()
DefaultDriver.launchSAFSMonitor()
DefaultDriver.initializePresetVariables()
DefaultDriver.initializeMiscConfigInfo()
DefaultDriver.initializeRuntimeEngines()
DefaultDriver.openTestLogs()
initialize statuscounter
run
in class DefaultDriver
SAFSDRIVER.main(String[])
public void shutdown()
Invokes:
DefaultDriver.closeTestLogs()
DefaultDriver.shutdownRuntimeEngines()
DefaultDriver.shutdownRuntimeInterface()
SAFSMonitorFrame.dispose()
protected StatusInterface processTest()
run()
processTest
in class AbstractDriver
statuscounter
SAFSDRIVER.processTest()
public static java.lang.StackTraceElement getFirstNonSAFSStackTraceElement()
public void pushTestRecord(TestRecordData trd)
Push the current 'test record' into the Stack before the execution of a keyword. This should be called after the 'test record' is properly set.
pushTestRecord
in interface ITestRecordStackable
trd
- TestRecordData, the test record to push into a stackprocessCommand(AbstractCommand, String)
,
processCommandDirect(AbstractCommand, String)
,
popTestRecord()
public TestRecordData popTestRecord()
After execution of a keyword, pop the test record from Stack and return is as the result. Replace the class field 'Test Record' by that popped from the stack if they are not same.
popTestRecord
in interface ITestRecordStackable
processCommand(AbstractCommand, String)
,
processCommandDirect(AbstractCommand, String)
,
#pushTestRecord()
public static void main(java.lang.String[] args)
java -Dsafs.project.config="C:\SAFS\Project\tidtest.ini"
-Dmain_map="NLSBridgeTest.MAP"
-Dlocalized="NLSBridgeTest_en.MAP" or -Dlocalized="NLSBridgeTest_ja.MAP"
-ea
org.safs.tools.drivers.JSAFSDriver
args
- Copyright © SAS Institute. All Rights Reserved.