158 lines
5.6 KiB
Java
158 lines
5.6 KiB
Java
/*
|
|
* Copyright (C) 2008 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.commands.monkey;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Random;
|
|
|
|
/**
|
|
* Class for generating MonkeyEvents from multiple scripts.
|
|
*/
|
|
public class MonkeySourceRandomScript implements MonkeyEventSource {
|
|
/** The verbose level of the source (currently not used) */
|
|
private int mVerbose = 0;
|
|
|
|
/** The source for the setup script if it exists */
|
|
private MonkeySourceScript mSetupSource = null;
|
|
|
|
/** The list of MonkeySourceScript instances to be played in random order */
|
|
private ArrayList<MonkeySourceScript> mScriptSources = new ArrayList<MonkeySourceScript>();
|
|
|
|
/** The current source, set to the setup source and then a random script */
|
|
private MonkeySourceScript mCurrentSource = null;
|
|
|
|
/** The random number generator */
|
|
private Random mRandom;
|
|
|
|
private boolean mRandomizeScript = false;
|
|
|
|
private int mScriptCount = 0;
|
|
|
|
/**
|
|
* Creates a MonkeySourceRandomScript instance with an additional setup script.
|
|
*
|
|
* @param setupFileName The name of the setup script file on the device.
|
|
* @param scriptFileNames An ArrayList of the names of the script files to be run randomly.
|
|
* @param throttle The amount of time to sleep in ms between events.
|
|
* @param randomizeThrottle Whether to randomize throttle.
|
|
* @param random The random number generator.
|
|
*/
|
|
public MonkeySourceRandomScript(String setupFileName, ArrayList<String> scriptFileNames,
|
|
long throttle, boolean randomizeThrottle, Random random, long profileWaitTime,
|
|
long deviceSleepTime, boolean randomizeScript) {
|
|
if (setupFileName != null) {
|
|
mSetupSource = new MonkeySourceScript(random, setupFileName, throttle,
|
|
randomizeThrottle, profileWaitTime, deviceSleepTime);
|
|
mCurrentSource = mSetupSource;
|
|
}
|
|
|
|
for (String fileName: scriptFileNames) {
|
|
mScriptSources.add(new MonkeySourceScript(random, fileName, throttle,
|
|
randomizeThrottle, profileWaitTime, deviceSleepTime));
|
|
}
|
|
|
|
mRandom = random;
|
|
mRandomizeScript = randomizeScript;
|
|
}
|
|
|
|
/**
|
|
* Creates a MonkeySourceRandomScript instance without an additional setup script.
|
|
*
|
|
* @param scriptFileNames An ArrayList of the names of the script files to be run randomly.
|
|
* @param throttle The amount of time to sleep in ms between events.
|
|
* @param randomizeThrottle Whether to randomize throttle.
|
|
* @param random The random number generator.
|
|
*/
|
|
public MonkeySourceRandomScript(ArrayList<String> scriptFileNames, long throttle,
|
|
boolean randomizeThrottle, Random random, long profileWaitTime, long deviceSleepTime,
|
|
boolean randomizeScript) {
|
|
this(null, scriptFileNames, throttle, randomizeThrottle, random, profileWaitTime,
|
|
deviceSleepTime, randomizeScript);
|
|
}
|
|
|
|
/**
|
|
* Gets the next event from the current event source. If the event source is null, a new
|
|
* script event source is chosen randomly from the list of script sources and the next event is
|
|
* chosen from that.
|
|
*
|
|
* @return The first event in the event queue or null if the end of the file
|
|
* is reached or if an error is encountered reading the file.
|
|
*/
|
|
public MonkeyEvent getNextEvent() {
|
|
if (mCurrentSource == null) {
|
|
int numSources = mScriptSources.size();
|
|
if (numSources == 1) {
|
|
mCurrentSource = mScriptSources.get(0);
|
|
} else if (numSources > 1 ) {
|
|
if (mRandomizeScript) {
|
|
mCurrentSource = mScriptSources.get(mRandom.nextInt(numSources));
|
|
} else {
|
|
mCurrentSource = mScriptSources.get(mScriptCount % numSources);
|
|
mScriptCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (mCurrentSource != null) {
|
|
MonkeyEvent nextEvent = mCurrentSource.getNextEvent();
|
|
if (nextEvent == null) {
|
|
mCurrentSource = null;
|
|
}
|
|
return nextEvent;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Sets the verbosity for the source as well as all sub event sources.
|
|
*
|
|
* @param verbose The verbose level.
|
|
*/
|
|
public void setVerbose(int verbose) {
|
|
mVerbose = verbose;
|
|
|
|
if (mSetupSource != null) {
|
|
mSetupSource.setVerbose(verbose);
|
|
}
|
|
|
|
for (MonkeySourceScript source: mScriptSources) {
|
|
source.setVerbose(verbose);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validates that all the underlying event sources are valid
|
|
*
|
|
* @return True if all the script files are valid.
|
|
*
|
|
* @see MonkeySourceScript#validate()
|
|
*/
|
|
public boolean validate() {
|
|
if (mSetupSource != null && !mSetupSource.validate()) {
|
|
return false;
|
|
}
|
|
|
|
for (MonkeySourceScript source: mScriptSources) {
|
|
if (!source.validate()) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|