1 // Copyright 2019 The Chromium Authors. All rights reserved.
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.chrome.browser.tasks;
6 
7 import static org.junit.Assert.assertEquals;
8 
9 import org.junit.Before;
10 import org.junit.Test;
11 import org.junit.runner.RunWith;
12 import org.robolectric.annotation.Config;
13 
14 import org.chromium.base.test.BaseRobolectricTestRunner;
15 
16 /** Unit tests for JourneyManager. */
17 @RunWith(BaseRobolectricTestRunner.class)
18 @Config(manifest = Config.NONE)
19 public final class EngagementTimeUtilTest {
20     private static final long TEST_ELAPSED_MS = 5000L;
21 
22     private MockEngagementTimeUtil mEngagementTimeUtil;
23 
24     @Before
setUp()25     public void setUp() {
26         mEngagementTimeUtil = new MockEngagementTimeUtil();
27     }
28 
29     @Test
timeSinceLastEngagement_shouldReportElapsedTimeSinceLastEngagement()30     public void timeSinceLastEngagement_shouldReportElapsedTimeSinceLastEngagement() {
31         long currentTimeMillis = System.currentTimeMillis();
32         mEngagementTimeUtil.setCurrentTime(currentTimeMillis);
33         assertEquals(TEST_ELAPSED_MS,
34                 mEngagementTimeUtil.timeSinceLastEngagement(currentTimeMillis - TEST_ELAPSED_MS));
35     }
36 
37     @Test
timeSinceLastEngagement_shouldReportInvalidIfNegative()38     public void timeSinceLastEngagement_shouldReportInvalidIfNegative() {
39         long currentTimeMillis = System.currentTimeMillis();
40         mEngagementTimeUtil.setCurrentTime(currentTimeMillis);
41         assertEquals(-1,
42                 mEngagementTimeUtil.timeSinceLastEngagement(
43                         System.currentTimeMillis() + TEST_ELAPSED_MS));
44     }
45 
46     @Test
timeSinceLastEngagement_shouldReportElapsedTimeBetweenTimestamps()47     public void timeSinceLastEngagement_shouldReportElapsedTimeBetweenTimestamps() {
48         long currentTimeMillis = System.currentTimeMillis();
49         mEngagementTimeUtil.setCurrentTime(currentTimeMillis);
50         assertEquals(TEST_ELAPSED_MS,
51                 mEngagementTimeUtil.timeSinceLastEngagement(
52                         currentTimeMillis - (2L * TEST_ELAPSED_MS),
53                         currentTimeMillis - TEST_ELAPSED_MS));
54     }
55 
56     private static class MockEngagementTimeUtil extends EngagementTimeUtil {
57         private long mCurrentTime = System.currentTimeMillis();
58 
setCurrentTime(long currentTime)59         public void setCurrentTime(long currentTime) {
60             mCurrentTime = currentTime;
61         }
62 
63         // EngagementTimeUtil implementation.
64         @Override
currentTime()65         public long currentTime() {
66             return mCurrentTime;
67         }
68     }
69 }
70