1a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar/* 2a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * Copyright 2017 The Android Open Source Project 3a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * 4a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * Licensed under the Apache License, Version 2.0 (the "License"); 5a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * you may not use this file except in compliance with the License. 6a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * You may obtain a copy of the License at 7a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * 8a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * http://www.apache.org/licenses/LICENSE-2.0 9a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * 10a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * Unless required by applicable law or agreed to in writing, software 11a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * distributed under the License is distributed on an "AS IS" BASIS, 12a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * See the License for the specific language governing permissions and 14a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar * limitations under the License. 15a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar */ 16a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 17564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariapackage androidx.work.impl.constraints.controllers; 18a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 19a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagarimport static org.hamcrest.CoreMatchers.is; 20a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagarimport static org.hamcrest.MatcherAssert.assertThat; 2191d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarinimport static org.mockito.ArgumentMatchers.eq; 22a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagarimport static org.mockito.Mockito.mock; 23a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagarimport static org.mockito.Mockito.times; 24a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagarimport static org.mockito.Mockito.verify; 25a10969c4800ce698191b23836df2b31c2663c17dJan Clarinimport static org.mockito.Mockito.verifyZeroInteractions; 26a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 27a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagarimport android.support.annotation.NonNull; 289598ea6e2427580e555919657530dc18d237c962Rahul Ravikumarimport android.support.test.filters.SdkSuppress; 29a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagarimport android.support.test.filters.SmallTest; 30a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagarimport android.support.test.runner.AndroidJUnit4; 31a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 32564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.Constraints; 337031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarimport androidx.work.OneTimeWorkRequest; 34564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.WorkManagerTest; 35564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.impl.constraints.trackers.ConstraintTracker; 36564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.impl.model.WorkSpec; 37564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.worker.TestWorker; 38564e43098c323d1a90be53c190b8fdbdde973505Sumir Kataria 39b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Katariaimport org.junit.Before; 40b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Katariaimport org.junit.Test; 41b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Katariaimport org.junit.runner.RunWith; 42b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria 43b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Katariaimport java.util.Collections; 44b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Katariaimport java.util.List; 45b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria 46a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar@RunWith(AndroidJUnit4.class) 479598ea6e2427580e555919657530dc18d237c962Rahul Ravikumar@SdkSuppress(minSdkVersion = 23) 481cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Katariapublic class ConstraintControllerTest extends WorkManagerTest { 49a10969c4800ce698191b23836df2b31c2663c17dJan Clarin private TestDeviceIdleConstraintController mTestIdleController; 50a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar private ConstraintTracker<Boolean> mMockTracker = mock(ConstraintTracker.class); 51a10969c4800ce698191b23836df2b31c2663c17dJan Clarin private ConstraintController.OnConstraintUpdatedCallback mCallback = 52a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mock(ConstraintController.OnConstraintUpdatedCallback.class); 53a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 54a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Before 55a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar public void setUp() { 56a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController = new TestDeviceIdleConstraintController(mMockTracker, mCallback); 57a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 58a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 59a10969c4800ce698191b23836df2b31c2663c17dJan Clarin private WorkSpec createTestWorkSpec(Constraints constraints) { 607031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar return getWorkSpec(new OneTimeWorkRequest.Builder(TestWorker.class) 6162a7e773945d980084dfc5d00c724de2e27dc22dSumir Kataria .setConstraints(constraints) 621cd0e4eb391fb7e7d5ac60433f705496a9390384Sumir Kataria .build()); 63a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 64a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 65a10969c4800ce698191b23836df2b31c2663c17dJan Clarin private WorkSpec createTestConstraintWorkSpec() { 66a10969c4800ce698191b23836df2b31c2663c17dJan Clarin Constraints mConstraintsWithTestConstraint = new Constraints.Builder() 67a10969c4800ce698191b23836df2b31c2663c17dJan Clarin .setRequiresDeviceIdle(true) 68a10969c4800ce698191b23836df2b31c2663c17dJan Clarin .build(); 69a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 70a10969c4800ce698191b23836df2b31c2663c17dJan Clarin return createTestWorkSpec(mConstraintsWithTestConstraint); 71a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 72a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 73a10969c4800ce698191b23836df2b31c2663c17dJan Clarin private WorkSpec createNoConstraintWorkSpec() { 74d677da54eeaecdff79fb012ec96852f53437542fXyan Bhatnagar return createTestWorkSpec(Constraints.NONE); 75a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 76a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 77a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 78a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 79a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testReplace_empty() { 80a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(Collections.<WorkSpec>emptyList()); 81a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verify(mMockTracker).removeListener(mTestIdleController); 82a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verifyZeroInteractions(mCallback); 83a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 84a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 85a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @Test 86a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @SmallTest 87a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testReplace_workSpecNoConstraints() { 88a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecNoConstraints = createNoConstraintWorkSpec(); 89a10969c4800ce698191b23836df2b31c2663c17dJan Clarin List<WorkSpec> workSpecs = Collections.singletonList(workSpecNoConstraints); 90a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(workSpecs); 91a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verify(mMockTracker).removeListener(mTestIdleController); 92a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verifyZeroInteractions(mCallback); 93a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 94a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 95a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @Test 96a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @SmallTest 97a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testReplace_workSpecWithConstraint_constrained() { 98a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 99b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria List<String> expectedWorkIds = Collections.singletonList(workSpecWithConstraint.id); 100a10969c4800ce698191b23836df2b31c2663c17dJan Clarin List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint); 10191d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin 10291d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin mTestIdleController.setDeviceActive(); 103a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(workSpecs); 104a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verify(mMockTracker).addListener(mTestIdleController); 10591d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin verify(mCallback).onConstraintNotMet(eq(expectedWorkIds)); 106a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 107a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 108a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 109a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 110a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testReplace_workSpecWithConstraint_unconstrained() { 111a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 112b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria List<String> expectedWorkIds = Collections.singletonList(workSpecWithConstraint.id); 113a10969c4800ce698191b23836df2b31c2663c17dJan Clarin List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint); 11491d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin 11591d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin mTestIdleController.setDeviceIdle(); 116a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(workSpecs); 117a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verify(mMockTracker).addListener(mTestIdleController); 11891d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin verify(mCallback).onConstraintMet(eq(expectedWorkIds)); 119a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 120a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 121a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 122a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 123a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testReplace_workSpecWithConstraint_constraintNotSet() { 12491d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 125b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria List<String> expectedWorkIds = Collections.singletonList(workSpecWithConstraint.id); 12691d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint); 12791d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin 128a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(workSpecs); 12991d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin verify(mCallback).onConstraintNotMet(expectedWorkIds); 130a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 131a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 132a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 133a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 134a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testReset_alreadyNoMatchingWorkSpecs() { 135a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.reset(); 136a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verifyZeroInteractions(mMockTracker); 137a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 138a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 139a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @Test 140a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @SmallTest 141a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testReset_withMatchingWorkSpecs() { 142a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 143a10969c4800ce698191b23836df2b31c2663c17dJan Clarin List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint); 144a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(workSpecs); 145a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 146a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.reset(); 147a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verify(mMockTracker).removeListener(mTestIdleController); 148a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 149a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 150a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @Test 151a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @SmallTest 152a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testOnConstraintChanged_noMatchingWorkSpecs() { 153a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.onConstraintChanged(true); 154a10969c4800ce698191b23836df2b31c2663c17dJan Clarin verifyZeroInteractions(mCallback); 155a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 156a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 157a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @Test 158a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @SmallTest 159a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testOnConstraintChanged_toConstrained_withMatchingWorkSpecs() { 160a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 161b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria List<String> expectedWorkIds = Collections.singletonList(workSpecWithConstraint.id); 162a10969c4800ce698191b23836df2b31c2663c17dJan Clarin List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint); 163a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(workSpecs); 16491d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin verify(mCallback).onConstraintNotMet(expectedWorkIds); 165a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 166a10969c4800ce698191b23836df2b31c2663c17dJan Clarin final boolean deviceIdle = false; 167a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.onConstraintChanged(deviceIdle); 16891d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin verify(mCallback, times(2)).onConstraintNotMet(expectedWorkIds); 169a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 170a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 171a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 172a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 173a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testOnConstraintChanged_toUnconstrained_withMatchingWorkSpecs() { 174a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 175b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria List<String> expectedWorkIds = Collections.singletonList(workSpecWithConstraint.id); 176a10969c4800ce698191b23836df2b31c2663c17dJan Clarin List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint); 177a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(workSpecs); 178a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 179a10969c4800ce698191b23836df2b31c2663c17dJan Clarin final boolean deviceIdle = true; 180a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.onConstraintChanged(deviceIdle); 18191d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin verify(mCallback).onConstraintMet(expectedWorkIds); 182a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 183a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 184a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 185a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 186a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testIsWorkSpecConstrained_noMatchingWorkSpecs() { 187a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecNoConstraints = createNoConstraintWorkSpec(); 188a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(Collections.singletonList(workSpecNoConstraints)); 189b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria assertThat(mTestIdleController.isWorkSpecConstrained(workSpecNoConstraints.id), 19091d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin is(false)); 191a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 192a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 193a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 194a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 195a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testIsWorkSpecConstrained_constraintNotSet() { 196a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 197a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(Collections.singletonList(workSpecWithConstraint)); 198b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria assertThat(mTestIdleController.isWorkSpecConstrained(workSpecWithConstraint.id), 19991d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin is(false)); 200a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 201a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 202a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 203a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 204a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testIsWorkSpecConstrained_constrained_withMatchingWorkSpecs() { 205a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.setDeviceActive(); 206a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 207a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 208a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(Collections.singletonList(workSpecWithConstraint)); 209b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria assertThat(mTestIdleController.isWorkSpecConstrained(workSpecWithConstraint.id), 21091d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin is(true)); 211a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 212a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 213a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Test 214a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @SmallTest 215a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testIsWorkSpecConstrained_constrained_noMatchingWorkSpecs() { 216a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.setDeviceActive(); 217a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 218a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecNoConstraints = createNoConstraintWorkSpec(); 219a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(Collections.singletonList(workSpecNoConstraints)); 220b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria assertThat(mTestIdleController.isWorkSpecConstrained(workSpecNoConstraints.id), 22191d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin is(false)); 222a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 223a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 224a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @Test 225a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @SmallTest 226a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testIsWorkSpecConstrained_unconstrained_withMatchingWorkSpecs() { 227a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.setDeviceIdle(); 228a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 229a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec(); 230a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(Collections.singletonList(workSpecWithConstraint)); 231b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria assertThat(mTestIdleController.isWorkSpecConstrained(workSpecWithConstraint.id), 23291d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin is(false)); 233a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 234a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 235a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @Test 236a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @SmallTest 237a10969c4800ce698191b23836df2b31c2663c17dJan Clarin public void testIsWorkSpecConstrained_unconstrained_noMatchingWorkSpecs() { 238a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.setDeviceIdle(); 239a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 240a10969c4800ce698191b23836df2b31c2663c17dJan Clarin WorkSpec workSpecNoConstraints = createNoConstraintWorkSpec(); 241a10969c4800ce698191b23836df2b31c2663c17dJan Clarin mTestIdleController.replace(Collections.singletonList(workSpecNoConstraints)); 242b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria assertThat(mTestIdleController.isWorkSpecConstrained(workSpecNoConstraints.id), 24391d49d0a3eecc54aa2b0ad7c7164f9041b94c942Jan Clarin is(false)); 244a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 245a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 246a10969c4800ce698191b23836df2b31c2663c17dJan Clarin private static class TestDeviceIdleConstraintController extends ConstraintController<Boolean> { 247a10969c4800ce698191b23836df2b31c2663c17dJan Clarin TestDeviceIdleConstraintController(ConstraintTracker<Boolean> tracker, 248a10969c4800ce698191b23836df2b31c2663c17dJan Clarin OnConstraintUpdatedCallback callback) { 249a10969c4800ce698191b23836df2b31c2663c17dJan Clarin super(tracker, callback); 250a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 251a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 252a10969c4800ce698191b23836df2b31c2663c17dJan Clarin @Override 253a10969c4800ce698191b23836df2b31c2663c17dJan Clarin boolean hasConstraint(@NonNull WorkSpec workSpec) { 254b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria return workSpec.constraints.requiresDeviceIdle(); 255a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 256a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar 257a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar @Override 258a10969c4800ce698191b23836df2b31c2663c17dJan Clarin boolean isConstrained(@NonNull Boolean isDeviceIdle) { 259a10969c4800ce698191b23836df2b31c2663c17dJan Clarin return !isDeviceIdle; 260a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 261a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 262a10969c4800ce698191b23836df2b31c2663c17dJan Clarin void setDeviceActive() { 263a10969c4800ce698191b23836df2b31c2663c17dJan Clarin onConstraintChanged(false); 264a10969c4800ce698191b23836df2b31c2663c17dJan Clarin } 265a10969c4800ce698191b23836df2b31c2663c17dJan Clarin 266a10969c4800ce698191b23836df2b31c2663c17dJan Clarin void setDeviceIdle() { 267a10969c4800ce698191b23836df2b31c2663c17dJan Clarin onConstraintChanged(true); 268a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 269a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar } 270a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar} 271