1#!/usr/bin/env monkeyrunner
2# Copyright 2010, The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16import sys
17from com.android.monkeyrunner import MonkeyRunner
18
19# The format of the file we are parsing is very carfeully constructed.
20# Each line corresponds to a single command.  The line is split into 2
21# parts with a | character.  Text to the left of the pipe denotes
22# which command to run.  The text to the right of the pipe is a python
23# dictionary (it can be evaled into existence) that specifies the
24# arguments for the command.  In most cases, this directly maps to the
25# keyword argument dictionary that could be passed to the underlying
26# command.
27
28# Lookup table to map command strings to functions that implement that
29# command.
30CMD_MAP = {
31    'TOUCH': lambda dev, arg: dev.touch(**arg),
32    'DRAG': lambda dev, arg: dev.drag(**arg),
33    'PRESS': lambda dev, arg: dev.press(**arg),
34    'TYPE': lambda dev, arg: dev.type(**arg),
35    'WAIT': lambda dev, arg: MonkeyRunner.sleep(**arg)
36    }
37
38# Process a single file for the specified device.
39def process_file(fp, device):
40    for line in fp:
41        (cmd, rest) = line.split('|')
42        try:
43            # Parse the pydict
44            rest = eval(rest)
45        except:
46            print 'unable to parse options'
47            continue
48
49        if cmd not in CMD_MAP:
50            print 'unknown command: ' + cmd
51            continue
52
53        CMD_MAP[cmd](device, rest)
54
55
56def main():
57    file = sys.argv[1]
58    fp = open(file, 'r')
59
60    device = MonkeyRunner.waitForConnection()
61
62    process_file(fp, device)
63    fp.close();
64
65
66if __name__ == '__main__':
67    main()
68
69
70
71