blob: 8a0ae9190a8cbcea8ac3f4b87ce59543a27c82df [file] [log] [blame]
Leif Wilden5eb77482018-01-23 23:54:05 +00001/*
2 * Copyright (C) 2016 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 */
16package com.android.settingslib.core.instrumentation;
17
Fan Zhang99d042d2018-11-12 00:57:37 -080018import static com.google.common.truth.Truth.assertThat;
19
Leif Wilden5eb77482018-01-23 23:54:05 +000020import static org.mockito.Mockito.verify;
21import static org.mockito.Mockito.verifyNoMoreInteractions;
Leif Wilden5eb77482018-01-23 23:54:05 +000022
Fan Zhang99d042d2018-11-12 00:57:37 -080023import android.app.Activity;
24import android.app.settings.SettingsEnums;
Leif Wilden5eb77482018-01-23 23:54:05 +000025import android.content.ComponentName;
26import android.content.Context;
27import android.content.Intent;
Leif Wilden5eb77482018-01-23 23:54:05 +000028
29import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Leif Wilden5eb77482018-01-23 23:54:05 +000030
31import org.junit.Before;
32import org.junit.Test;
33import org.junit.runner.RunWith;
Leif Wilden5eb77482018-01-23 23:54:05 +000034import org.mockito.Mock;
35import org.mockito.MockitoAnnotations;
Fan Zhang99d042d2018-11-12 00:57:37 -080036import org.robolectric.Robolectric;
James Lemieuxec3ad9e2018-11-28 17:49:14 -080037import org.robolectric.RobolectricTestRunner;
Leif Wilden5eb77482018-01-23 23:54:05 +000038import org.robolectric.RuntimeEnvironment;
Leif Wilden5eb77482018-01-23 23:54:05 +000039import org.robolectric.util.ReflectionHelpers;
40
41import java.util.ArrayList;
42import java.util.List;
43
James Lemieuxec3ad9e2018-11-28 17:49:14 -080044@RunWith(RobolectricTestRunner.class)
Leif Wilden5eb77482018-01-23 23:54:05 +000045public class MetricsFeatureProviderTest {
Fan Zhang793cbdd2018-10-23 13:20:57 -070046 @Mock
47 private LogWriter mLogWriter;
Leif Wilden5eb77482018-01-23 23:54:05 +000048
49 private Context mContext;
50 private MetricsFeatureProvider mProvider;
51
Leif Wilden5eb77482018-01-23 23:54:05 +000052 @Before
53 public void setUp() {
54 MockitoAnnotations.initMocks(this);
55 mContext = RuntimeEnvironment.application;
56 mProvider = new MetricsFeatureProvider();
57 List<LogWriter> writers = new ArrayList<>();
Fan Zhang793cbdd2018-10-23 13:20:57 -070058 writers.add(mLogWriter);
Leif Wilden5eb77482018-01-23 23:54:05 +000059 ReflectionHelpers.setField(mProvider, "mLoggerWriters", writers);
Leif Wilden5eb77482018-01-23 23:54:05 +000060 }
61
62 @Test
63 public void logDashboardStartIntent_intentEmpty_shouldNotLog() {
64 mProvider.logDashboardStartIntent(mContext, null /* intent */,
65 MetricsEvent.SETTINGS_GESTURES);
66
Fan Zhang793cbdd2018-10-23 13:20:57 -070067 verifyNoMoreInteractions(mLogWriter);
Leif Wilden5eb77482018-01-23 23:54:05 +000068 }
69
70 @Test
71 public void logDashboardStartIntent_intentHasNoComponent_shouldLog() {
72 final Intent intent = new Intent(Intent.ACTION_ASSIST);
73
74 mProvider.logDashboardStartIntent(mContext, intent, MetricsEvent.SETTINGS_GESTURES);
75
Fan Zhang793cbdd2018-10-23 13:20:57 -070076 verify(mLogWriter).action(
Fan Zhangf63a61d2018-11-12 23:34:32 -080077 MetricsEvent.SETTINGS_GESTURES,
78 MetricsEvent.ACTION_SETTINGS_TILE_CLICK,
79 SettingsEnums.PAGE_UNKNOWN,
80 Intent.ACTION_ASSIST,
81 0);
Leif Wilden5eb77482018-01-23 23:54:05 +000082 }
83
84 @Test
85 public void logDashboardStartIntent_intentIsExternal_shouldLog() {
86 final Intent intent = new Intent().setComponent(new ComponentName("pkg", "cls"));
87
88 mProvider.logDashboardStartIntent(mContext, intent, MetricsEvent.SETTINGS_GESTURES);
89
Fan Zhang793cbdd2018-10-23 13:20:57 -070090 verify(mLogWriter).action(
Fan Zhangf63a61d2018-11-12 23:34:32 -080091 MetricsEvent.SETTINGS_GESTURES,
92 MetricsEvent.ACTION_SETTINGS_TILE_CLICK,
93 SettingsEnums.PAGE_UNKNOWN,
94 "pkg/cls",
95 0);
Leif Wilden5eb77482018-01-23 23:54:05 +000096 }
Fan Zhang99d042d2018-11-12 00:57:37 -080097
98 @Test
99 public void getAttribution_noActivity_shouldReturnUnknown() {
100 assertThat(mProvider.getAttribution(null /* activity */))
101 .isEqualTo(SettingsEnums.PAGE_UNKNOWN);
102 }
103
104 @Test
105 public void getAttribution_notSet_shouldReturnUnknown() {
106 final Activity activity = Robolectric.setupActivity(Activity.class);
107
108 assertThat(mProvider.getAttribution(activity))
109 .isEqualTo(SettingsEnums.PAGE_UNKNOWN);
110 }
111
112 @Test
113 public void getAttribution_set_shouldReturnAttribution() {
114 final Intent intent = new Intent()
115 .putExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, 100);
116
117 final Activity activity = Robolectric.buildActivity(Activity.class, intent).create().get();
118
119 assertThat(mProvider.getAttribution(activity)).isEqualTo(100);
120 }
Leif Wilden5eb77482018-01-23 23:54:05 +0000121}