1 // Copyright 2020 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.base.supplier; 6 7 import static org.junit.Assert.assertEquals; 8 import static org.junit.Assert.assertNull; 9 import static org.mockito.Mockito.verify; 10 11 import org.junit.Before; 12 import org.junit.Test; 13 import org.junit.runner.RunWith; 14 import org.mockito.MockitoAnnotations; 15 import org.mockito.Spy; 16 import org.robolectric.annotation.Config; 17 import org.robolectric.annotation.LooperMode; 18 import org.robolectric.shadows.ShadowProcess; 19 20 import org.chromium.base.Callback; 21 import org.chromium.base.test.BaseRobolectricTestRunner; 22 23 /** Unit tests for {@link OneshotSupplierImpl}. */ 24 @RunWith(BaseRobolectricTestRunner.class) 25 @Config(shadows = {ShadowProcess.class}) 26 @LooperMode(LooperMode.Mode.LEGACY) 27 public class OneshotSupplierImplTest { 28 private OneshotSupplierImpl<String> mSupplier = new OneshotSupplierImpl<>(); 29 30 @Spy private Callback<String> mCallback1; 31 @Spy private Callback<String> mCallback2; 32 33 @Before setup()34 public void setup() { 35 MockitoAnnotations.initMocks(this); 36 } 37 38 @Test testSet()39 public void testSet() { 40 assertNull(mSupplier.onAvailable(mCallback1)); 41 assertNull(mSupplier.onAvailable(mCallback2)); 42 mSupplier.set("answer"); 43 44 verify(mCallback1).onResult("answer"); 45 verify(mCallback2).onResult("answer"); 46 } 47 48 @Test testSetBeforeAddObserver()49 public void testSetBeforeAddObserver() { 50 mSupplier.set("answer"); 51 52 assertEquals("answer", mSupplier.onAvailable(mCallback1)); 53 assertEquals("answer", mSupplier.onAvailable(mCallback2)); 54 55 verify(mCallback1).onResult("answer"); 56 verify(mCallback2).onResult("answer"); 57 } 58 59 @Test testInterleaved()60 public void testInterleaved() { 61 assertNull(mSupplier.onAvailable(mCallback1)); 62 mSupplier.set("answer"); 63 assertEquals("answer", mSupplier.onAvailable(mCallback2)); 64 65 verify(mCallback1).onResult("answer"); 66 verify(mCallback2).onResult("answer"); 67 } 68 69 @Test testGet()70 public void testGet() { 71 assertNull(mSupplier.get()); 72 mSupplier.set("answer"); 73 assertEquals("answer", mSupplier.get()); 74 } 75 } 76