diff options
author | Guang Zhu <guangzhu@google.com> | 2014-12-11 15:12:30 -0800 |
---|---|---|
committer | Guang Zhu <guangzhu@google.com> | 2014-12-12 17:31:38 -0800 |
commit | 18b892c723e812a7e111f102d2b0c0782b116bb6 (patch) | |
tree | ab7f42c778169da272b503d308c2cc712effef2b /cmds/uiautomator/instrumentation | |
parent | 1f28a6a571a9b4ff78d85e2b62a30d77ce986d7b (diff) | |
download | frameworks_base-18b892c723e812a7e111f102d2b0c0782b116bb6.zip frameworks_base-18b892c723e812a7e111f102d2b0c0782b116bb6.tar.gz frameworks_base-18b892c723e812a7e111f102d2b0c0782b116bb6.tar.bz2 |
shell based UI Automator source move
frameworks/testing/uiautomator -> frameworks/base/cmds/uiautomator
(samples, utils sub folders exlcuded)
frameworks/testing/uiautomator/utils -> frameworks/base/tests/utils
no source files changed, only one line makefile update (for
UI Automator API check)
Bug: 18708851
Change-Id: I396bd386d3d55a52df18af183685daf80caa9f73
Diffstat (limited to 'cmds/uiautomator/instrumentation')
6 files changed, 345 insertions, 0 deletions
diff --git a/cmds/uiautomator/instrumentation/Android.mk b/cmds/uiautomator/instrumentation/Android.mk new file mode 100644 index 0000000..0c93b4c --- /dev/null +++ b/cmds/uiautomator/instrumentation/Android.mk @@ -0,0 +1,29 @@ +# +# Copyright (C) 2012 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. +# + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests +LOCAL_SRC_FILES := $(call all-java-files-under, testrunner-src) \ + $(call all-java-files-under, ../library/core-src) +LOCAL_JAVA_LIBRARIES := android.test.runner +LOCAL_MODULE := uiautomator-instrumentation +# TODO: change this to 18 when it's available +LOCAL_SDK_VERSION := current + +include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/core/InstrumentationUiAutomatorBridge.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/core/InstrumentationUiAutomatorBridge.java new file mode 100644 index 0000000..1d4fb93 --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/core/InstrumentationUiAutomatorBridge.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013 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.uiautomator.core; + +import android.app.Service; +import android.app.UiAutomation; +import android.content.Context; +import android.os.PowerManager; +import android.view.Display; +import android.view.ViewConfiguration; +import android.view.WindowManager; + +/** + * @hide + */ +public class InstrumentationUiAutomatorBridge extends UiAutomatorBridge { + + private final Context mContext; + + public InstrumentationUiAutomatorBridge(Context context, UiAutomation uiAutomation) { + super(uiAutomation); + mContext = context; + } + + public Display getDefaultDisplay() { + WindowManager windowManager = (WindowManager) + mContext.getSystemService(Service.WINDOW_SERVICE); + return windowManager.getDefaultDisplay(); + } + + @Override + public int getRotation() { + return getDefaultDisplay().getRotation(); + } + + @Override + public boolean isScreenOn() { + PowerManager pm = (PowerManager) + mContext.getSystemService(Service.POWER_SERVICE); + return pm.isScreenOn(); + } + + public long getSystemLongPressTime() { + return ViewConfiguration.getLongPressTimeout(); + } +} diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java new file mode 100644 index 0000000..f0c60d2 --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2012 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.uiautomator.testrunner; + +import android.os.Bundle; + +/** + * Provides auxiliary support for running test cases + * + * @since API Level 16 + */ +public interface IAutomationSupport { + + /** + * Allows the running test cases to send out interim status + * + * @param resultCode + * @param status status report, consisting of key value pairs + * @since API Level 16 + */ + public void sendStatus(int resultCode, Bundle status); + +} diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/InstrumentationAutomationSupport.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/InstrumentationAutomationSupport.java new file mode 100644 index 0000000..a70586e --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/InstrumentationAutomationSupport.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2013 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.uiautomator.testrunner; + +import android.app.Instrumentation; +import android.os.Bundle; + +/** + * A wrapper around {@link Instrumentation} to provide sendStatus function + * + * Provided for backwards compatibility purpose. New code should use + * {@link Instrumentation#sendStatus(int, Bundle)} instead. + * + */ +class InstrumentationAutomationSupport implements IAutomationSupport { + + private Instrumentation mInstrumentation; + + InstrumentationAutomationSupport(Instrumentation instrumentation) { + mInstrumentation = instrumentation; + } + + @Override + public void sendStatus(int resultCode, Bundle status) { + mInstrumentation.sendStatus(resultCode, status); + } +} diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorInstrumentationTestRunner.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorInstrumentationTestRunner.java new file mode 100644 index 0000000..ae763f2 --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorInstrumentationTestRunner.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2013 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.uiautomator.testrunner; + +import android.test.AndroidTestRunner; +import android.test.InstrumentationTestRunner; + +import com.android.uiautomator.core.Tracer; + +import junit.framework.AssertionFailedError; +import junit.framework.Test; +import junit.framework.TestListener; + +/** + * Test runner for {@link UiAutomatorTestCase}s. Such tests are executed + * on the device and have access to an applications context. + */ +public class UiAutomatorInstrumentationTestRunner extends InstrumentationTestRunner { + + @Override + public void onStart() { + // process runner arguments before test starts + String traceType = getArguments().getString("traceOutputMode"); + if(traceType != null) { + Tracer.Mode mode = Tracer.Mode.valueOf(Tracer.Mode.class, traceType); + if (mode == Tracer.Mode.FILE || mode == Tracer.Mode.ALL) { + String filename = getArguments().getString("traceLogFilename"); + if (filename == null) { + throw new RuntimeException("Name of log file not specified. " + + "Please specify it using traceLogFilename parameter"); + } + Tracer.getInstance().setOutputFilename(filename); + } + Tracer.getInstance().setOutputMode(mode); + } + super.onStart(); + } + + @Override + protected AndroidTestRunner getAndroidTestRunner() { + AndroidTestRunner testRunner = super.getAndroidTestRunner(); + testRunner.addTestListener(new TestListener() { + @Override + public void startTest(Test test) { + if (test instanceof UiAutomatorTestCase) { + ((UiAutomatorTestCase)test).initialize(getArguments()); + } + } + + @Override + public void endTest(Test test) { + } + + @Override + public void addFailure(Test test, AssertionFailedError e) { + } + + @Override + public void addError(Test test, Throwable t) { + } + }); + return testRunner; + } +} diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java new file mode 100644 index 0000000..b5f21c9 --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2013 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.uiautomator.testrunner; + +import android.app.Instrumentation; +import android.os.Bundle; +import android.os.SystemClock; +import android.test.InstrumentationTestCase; + +import com.android.uiautomator.core.InstrumentationUiAutomatorBridge; +import com.android.uiautomator.core.UiDevice; + +/** + * UI Automator test case that is executed on the device. + */ +public class UiAutomatorTestCase extends InstrumentationTestCase { + + private Bundle mParams; + private IAutomationSupport mAutomationSupport; + + /** + * Get current instance of {@link UiDevice}. Works similar to calling the static + * {@link UiDevice#getInstance()} from anywhere in the test classes. + * @since API Level 16 + */ + public UiDevice getUiDevice() { + return UiDevice.getInstance(); + } + + /** + * Get command line parameters. On the command line when passing <code>-e key value</code> + * pairs, the {@link Bundle} will have the key value pairs conveniently available to the + * tests. + * @since API Level 16 + */ + public Bundle getParams() { + return mParams; + } + + void setAutomationSupport(IAutomationSupport automationSupport) { + mAutomationSupport = automationSupport; + } + + /** + * Provides support for running tests to report interim status + * + * @return IAutomationSupport + * @since API Level 16 + * @deprecated Use {@link Instrumentation#sendStatus(int, Bundle)} instead + */ + public IAutomationSupport getAutomationSupport() { + if (mAutomationSupport == null) { + mAutomationSupport = new InstrumentationAutomationSupport(getInstrumentation()); + } + return mAutomationSupport; + } + + /** + * Initializes this test case. + * + * @param params Instrumentation arguments. + */ + void initialize(Bundle params) { + mParams = params; + + // check if this is a monkey test mode + String monkeyVal = mParams.getString("monkey"); + if (monkeyVal != null) { + // only if the monkey key is specified, we alter the state of monkey + // else we should leave things as they are. + getInstrumentation().getUiAutomation().setRunAsMonkey(Boolean.valueOf(monkeyVal)); + } + + UiDevice.getInstance().initialize(new InstrumentationUiAutomatorBridge( + getInstrumentation().getContext(), + getInstrumentation().getUiAutomation())); + } + + /** + * Calls {@link SystemClock#sleep(long)} to sleep + * @param ms is in milliseconds. + * @since API Level 16 + */ + public void sleep(long ms) { + SystemClock.sleep(ms); + } +} |