1bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey/*
2bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * Copyright (C) 2016 The Android Open Source Project
3bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey *
4bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
5bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * you may not use this file except in compliance with the License.
6bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * You may obtain a copy of the License at
7bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey *
8bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey *
10bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * Unless required by applicable law or agreed to in writing, software
11bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * See the License for the specific language governing permissions and
14bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey * limitations under the License.
15bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey */
16bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
17bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkeypackage com.android.internal.util;
18bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
19bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkeyimport junit.framework.TestCase;
20bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
21bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkeypublic class ProgressReporterTest extends TestCase {
22bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    private ProgressReporter r;
23bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
24bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    @Override
25bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    protected void setUp() throws Exception {
26bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        super.setUp();
2784a4c971c484f05f2a2494d6353f36f4d954a5e0Jeff Sharkey        r = new ProgressReporter(0);
28bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    }
29bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
30bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    private void assertProgress(int expected) {
31bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertEquals(expected, r.getProgress());
32bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    }
33bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
34bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    private void assertRange(int start, int len) {
35bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        final int[] range = r.getSegmentRange();
36bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertEquals("start", start, range[0]);
37bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertEquals("len", len, range[1]);
38bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    }
39bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
40bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    public void testBasic() throws Exception {
41bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(0);
42bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
43bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.setProgress(20);
44bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(20);
45bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
46bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.setProgress(-20);
47bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(0);
48bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
49bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.setProgress(1024);
50bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(100);
51bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    }
52bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
53bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    public void testSegment() throws Exception {
54bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.setProgress(20);
55bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(20);
56bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
57bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        final int[] lastRange = r.startSegment(40);
58bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        {
59bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            assertProgress(20);
60bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
61bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            r.setProgress(50);
62bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            assertProgress(40);
63bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        }
64bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.endSegment(lastRange);
65bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(60);
66bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
67bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.setProgress(80);
68bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(80);
69bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    }
70bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
71bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    public void testSegmentOvershoot() throws Exception {
72bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.setProgress(20);
73bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(20);
74bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
75bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        final int[] lastRange = r.startSegment(40);
76bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        {
77bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            r.setProgress(-100, 2);
78bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            assertProgress(20);
79bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
80bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            r.setProgress(1, 2);
81bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            assertProgress(40);
82bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
83bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            r.setProgress(100, 2);
84bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            assertProgress(60);
85bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        }
86bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.endSegment(lastRange);
87bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(60);
88bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    }
89bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
90bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    public void testSegmentNested() throws Exception {
91bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.setProgress(20);
92bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(20);
93bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertRange(0, 100);
94bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
95bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        final int[] lastRange = r.startSegment(40);
96bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertRange(20, 40);
97bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        {
98bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            r.setProgress(50);
99bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            assertProgress(40);
100bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
101bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            final int[] lastRange2 = r.startSegment(25);
102bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            assertRange(40, 10);
103bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            {
104bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey                r.setProgress(0);
105bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey                assertProgress(40);
106bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
107bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey                r.setProgress(50);
108bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey                assertProgress(45);
109bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey
110bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey                r.setProgress(100);
111bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey                assertProgress(50);
112bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            }
113bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            r.endSegment(lastRange2);
114bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey            assertProgress(50);
115bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        }
116bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        r.endSegment(lastRange);
117bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey        assertProgress(60);
118bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey    }
119bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey}
120