测试keepScreenOn属性

时间:2015-08-31 02:50:18

标签: android robolectric android-testing android-espresso

鉴于我有一个简单的Android活动,其中包含以下视图代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:ignore="MergeRootFrame"
             android:keepScreenOn="true">

     <!-- more views -->

</FrameLayout>

然后:

如何测试此活动是否会启用此屏幕并阻止平板电脑进入睡眠状态?

旁注:

如果我在Activity(onCreate)中设置FLAG_KEEP_SCREEN_ON标志,如下所示:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

然后我可以通过这样的Robolectric轻松阅读:

public static int getWindowFlags(final Activity activity) throws Exception {
    Class clazz = Class.forName(Window.class.getName());
    Method m = clazz.getMethod("getForcedWindowFlags");

    m.setAccessible(true);

    return (int) m.invoke(activity.getWindow());
}

但是,当视图层次结构中的单个视图定义标志时,不会设置该标志。

我是否需要迭代所有视图,只是为了找到定义此视图的视图?

1 个答案:

答案 0 :(得分:0)

我在Robolectric的消息来源搜索了这面旗帜并没有找到任何东西。我为它创建了issue

您已经找到了解决方法 - 在这种情况下以编程方式设置它可以测试它。你可以不加思考地测试它:

assertThat( shadowWindow.getFlag( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON ), is( true ) );