• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 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.assertFalse;
9 import static org.junit.Assert.assertTrue;
10 import static org.mockito.Mockito.times;
11 import static org.mockito.Mockito.verify;
12 
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.mockito.MockitoAnnotations;
17 import org.mockito.Spy;
18 import org.robolectric.annotation.Config;
19 import org.robolectric.annotation.LooperMode;
20 import org.robolectric.shadows.ShadowProcess;
21 
22 import org.chromium.base.Callback;
23 import org.chromium.base.test.BaseRobolectricTestRunner;
24 
25 /** Unit tests for {@link LazyOneshotSupplierImpl}. */
26 @RunWith(BaseRobolectricTestRunner.class)
27 @Config(shadows = {ShadowProcess.class})
28 @LooperMode(LooperMode.Mode.LEGACY)
29 public class LazyOneshotSupplierImplTest {
30     @Spy
31     private LazyOneshotSupplierImpl<String> mSupplier =
32             new LazyOneshotSupplierImpl<>() {
33                 @Override
34                 public void doSet() {
35                     set("answer");
36                 }
37             };
38 
39     @Spy private Callback<String> mCallback1;
40     @Spy private Callback<String> mCallback2;
41 
42     @Before
setup()43     public void setup() {
44         MockitoAnnotations.initMocks(this);
45     }
46 
47     @Test
testSetBeforeDoSet()48     public void testSetBeforeDoSet() {
49         assertFalse(mSupplier.hasValue());
50         mSupplier.set("answer");
51 
52         mSupplier.onAvailable(mCallback1);
53         mSupplier.onAvailable(mCallback2);
54 
55         assertTrue(mSupplier.hasValue());
56         verify(mCallback1).onResult("answer");
57         verify(mCallback2).onResult("answer");
58         verify(mSupplier, times(0)).doSet();
59     }
60 
61     @Test
testDoSetCalledOnce()62     public void testDoSetCalledOnce() {
63         mSupplier.onAvailable(mCallback1);
64         verify(mSupplier, times(0)).doSet();
65 
66         assertEquals("answer", mSupplier.get());
67         assertEquals("answer", mSupplier.get());
68 
69         verify(mCallback1).onResult("answer");
70         verify(mSupplier).doSet();
71     }
72 }
73