1 /* 2 * Copyright (C) 2020 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 package com.android.settings.slices; 17 18 import static com.google.common.truth.Truth.assertThat; 19 20 import android.content.ContentResolver; 21 import android.content.Context; 22 import android.content.Intent; 23 import android.content.IntentFilter; 24 import android.net.Uri; 25 import android.provider.SettingsSlicesContract; 26 27 import androidx.slice.Slice; 28 import androidx.test.core.app.ApplicationProvider; 29 import androidx.test.ext.junit.runners.AndroidJUnit4; 30 31 import org.junit.Before; 32 import org.junit.Test; 33 import org.junit.runner.RunWith; 34 35 @RunWith(AndroidJUnit4.class) 36 public class SpecialCaseSliceManagerTest { 37 38 private static final String FAKE_PARAMETER_KEY = "fake_parameter_key"; 39 private static final String FAKE_PARAMETER_VALUE = "fake_value"; 40 41 private Context mContext; 42 43 @Before setUp()44 public void setUp() { 45 mContext = ApplicationProvider.getApplicationContext(); 46 CustomSliceRegistry.sUriToSlice.clear(); 47 CustomSliceRegistry.sUriToSlice.put(FakeSliceable.URI, FakeSliceable.class); 48 } 49 50 @Test getSliceableFromUri_returnsCorrectObject()51 public void getSliceableFromUri_returnsCorrectObject() { 52 final CustomSliceable sliceable = CustomSliceable.createInstance( 53 mContext, CustomSliceRegistry.getSliceClassByUri(FakeSliceable.URI)); 54 55 assertThat(sliceable).isInstanceOf(FakeSliceable.class); 56 } 57 58 @Test getSliceableFromUriWithParameter_returnsCorrectObject()59 public void getSliceableFromUriWithParameter_returnsCorrectObject() { 60 final Uri parameterUri = FakeSliceable.URI 61 .buildUpon() 62 .clearQuery() 63 .appendQueryParameter(FAKE_PARAMETER_KEY, FAKE_PARAMETER_VALUE) 64 .build(); 65 66 final CustomSliceable sliceable = CustomSliceable.createInstance( 67 mContext, CustomSliceRegistry.getSliceClassByUri(parameterUri)); 68 69 assertThat(sliceable).isInstanceOf(FakeSliceable.class); 70 } 71 72 @Test isValidUri_validUri_returnsTrue()73 public void isValidUri_validUri_returnsTrue() { 74 final boolean isValidUri = CustomSliceRegistry.isValidUri(FakeSliceable.URI); 75 76 assertThat(isValidUri).isTrue(); 77 } 78 79 @Test isValidUri_invalidUri_returnsFalse()80 public void isValidUri_invalidUri_returnsFalse() { 81 final boolean isValidUri = CustomSliceRegistry.isValidUri(null); 82 83 assertThat(isValidUri).isFalse(); 84 } 85 86 @Test isValidAction_validActions_returnsTrue()87 public void isValidAction_validActions_returnsTrue() { 88 final boolean isValidAction = 89 CustomSliceRegistry.isValidAction(FakeSliceable.URI.toString()); 90 91 assertThat(isValidAction).isTrue(); 92 } 93 94 @Test isValidAction_invalidAction_returnsFalse()95 public void isValidAction_invalidAction_returnsFalse() { 96 final boolean isValidAction = CustomSliceRegistry.isValidAction("action"); 97 98 assertThat(isValidAction).isFalse(); 99 } 100 101 static class FakeSliceable implements CustomSliceable { 102 103 static final String KEY = "magic key of khazad dum"; 104 105 static final Uri URI = new Uri.Builder() 106 .scheme(ContentResolver.SCHEME_CONTENT) 107 .authority(SettingsSliceProvider.SLICE_AUTHORITY) 108 .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) 109 .appendPath(KEY) 110 .build(); 111 112 static final Slice SLICE = new Slice.Builder(URI).build(); 113 114 static boolean sBackingData = false; 115 116 final Context mContext; 117 FakeSliceable(Context context)118 public FakeSliceable(Context context) { 119 mContext = context; 120 } 121 122 @Override getSlice()123 public Slice getSlice() { 124 return SLICE; 125 } 126 127 @Override getUri()128 public Uri getUri() { 129 return URI; 130 } 131 132 @Override onNotifyChange(Intent intent)133 public void onNotifyChange(Intent intent) { 134 sBackingData = !sBackingData; 135 } 136 137 @Override getIntentFilter()138 public IntentFilter getIntentFilter() { 139 return new IntentFilter(); 140 } 141 142 @Override getIntent()143 public Intent getIntent() { 144 return null; 145 } 146 147 @Override getSliceHighlightMenuRes()148 public int getSliceHighlightMenuRes() { 149 return NO_RES; 150 } 151 } 152 } 153