1 /*
<lambda>null2 * Copyright 2023 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 */
16
17 package com.android.commands.monkey
18
19 import android.view.MotionEvent.ACTION_DOWN
20 import android.view.MotionEvent.ACTION_MOVE
21 import android.view.MotionEvent.ACTION_POINTER_DOWN
22 import android.view.MotionEvent.ACTION_POINTER_INDEX_SHIFT
23 import android.view.MotionEvent.ACTION_POINTER_UP
24 import android.view.MotionEvent.ACTION_UP
25
26 import java.io.BufferedWriter
27 import java.io.FileWriter
28 import java.io.File
29 import java.util.Random
30
31 import org.junit.Assert.assertEquals
32 import org.junit.Assert.assertNotNull
33 import org.junit.Assert.assertNull
34
35 import org.junit.Test
36
37 private fun receiveEvent(script: MonkeySourceScript, type: Int): MonkeyEvent {
38 val event = script.getNextEvent()
39 assertNotNull("Should receive a valid event", event)
40 assertEquals("Wrong event type", type, event.getEventType())
41 return event
42 }
43
assertTouchEventnull44 private fun assertTouchEvent(script: MonkeySourceScript, action: Int) {
45 val motionEvent = receiveEvent(script, MonkeyEvent.EVENT_TYPE_TOUCH) as MonkeyMotionEvent
46 assertEquals(action, motionEvent.action)
47 }
48
49 /**
50 * Test for class MonkeySourceScript
51 */
52 class MonkeySourceScriptTest {
53 companion object {
54 const val ACTION_POINTER_1_DOWN = ACTION_POINTER_DOWN.or(1.shl(ACTION_POINTER_INDEX_SHIFT))
55 const val ACTION_POINTER_1_UP = ACTION_POINTER_UP.or(1.shl(ACTION_POINTER_INDEX_SHIFT))
56 }
57
58 /**
59 * Send a PinchZoom command and check the resulting event stream.
60 * Since ACTION_UP is a throttlable event, an event with TYPE_THROTTLE is expected at the end.
61 */
62 @Test
pinchZoomnull63 fun pinchZoom() {
64 val file = File.createTempFile("pinch_zoom", null)
65 val fileName = file.absolutePath
66 BufferedWriter(FileWriter(fileName)).use { writer ->
67 writer.write("start data >>\n")
68 writer.write("PinchZoom(100,100,200,200,50,50,10,10,5)\n")
69 }
70
71 val script = MonkeySourceScript(Random(), fileName, 0, false, 0, 0)
72
73 assertTouchEvent(script, ACTION_DOWN)
74 assertTouchEvent(script, ACTION_POINTER_1_DOWN)
75 assertTouchEvent(script, ACTION_MOVE)
76 assertTouchEvent(script, ACTION_MOVE)
77 assertTouchEvent(script, ACTION_MOVE)
78 assertTouchEvent(script, ACTION_MOVE)
79 assertTouchEvent(script, ACTION_MOVE)
80 assertTouchEvent(script, ACTION_POINTER_1_UP)
81 assertTouchEvent(script, ACTION_UP)
82 receiveEvent(script, MonkeyEvent.EVENT_TYPE_THROTTLE)
83 assertNull(script.getNextEvent())
84
85 file.deleteOnExit()
86 }
87
88 /**
89 * Send two PressAndHold commands in a row and ensure that the injected stream is consistent.
90 */
91 @Test
pressAndHoldTwicenull92 fun pressAndHoldTwice() {
93 val file = File.createTempFile("press_and_hold_twice", null)
94 val fileName = file.absolutePath
95 BufferedWriter(FileWriter(fileName)).use { writer ->
96 writer.write("start data >>\n")
97 writer.write("PressAndHold(100,100,10)\n")
98 writer.write("PressAndHold(200,200,10)\n")
99 }
100
101 val script = MonkeySourceScript(Random(), fileName, 0, false, 0, 0)
102
103 assertTouchEvent(script, ACTION_DOWN)
104 receiveEvent(script, MonkeyEvent.EVENT_TYPE_THROTTLE)
105 receiveEvent(script, MonkeyEvent.EVENT_TYPE_THROTTLE)
106 assertTouchEvent(script, ACTION_UP)
107 receiveEvent(script, MonkeyEvent.EVENT_TYPE_THROTTLE)
108
109 assertTouchEvent(script, ACTION_DOWN)
110 receiveEvent(script, MonkeyEvent.EVENT_TYPE_THROTTLE)
111 receiveEvent(script, MonkeyEvent.EVENT_TYPE_THROTTLE)
112 assertTouchEvent(script, ACTION_UP)
113 receiveEvent(script, MonkeyEvent.EVENT_TYPE_THROTTLE)
114 assertNull(script.getNextEvent())
115
116 file.deleteOnExit()
117 }
118 }
119