/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.android.glass.sample.timer;
import android.os.SystemClock;
import android.test.AndroidTestCase;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import java.util.concurrent.TimeUnit;
/**
* Unit tests for {@link SetTimerScrollAdapter}.
*/
public class SetTimerScrollAdapterTest extends AndroidTestCase {
private SetTimerScrollAdapter mAdapter;
@Override
protected void setUp() throws Exception {
super.setUp();
mAdapter = new SetTimerScrollAdapter(getContext());
}
public void testSetGetDurationMillis() {
long expectedDuration = TimeUnit.MINUTES.toMillis(30);
assertEquals(0, mAdapter.getDurationMillis());
mAdapter.setDurationMillis(expectedDuration);
assertEquals(expectedDuration, mAdapter.getDurationMillis());
}
public void testSetTimeComponent() {
long initialExpectedDuration = 0;
long firstExpectedDuration = TimeUnit.SECONDS.toMillis(30);
long secondExpectedDuration = TimeUnit.MINUTES.toMillis(2)
+ TimeUnit.SECONDS.toMillis(30);
long thirdExpectedDuration = TimeUnit.HOURS.toMillis(5)
+ TimeUnit.MINUTES.toMillis(2)
+ TimeUnit.SECONDS.toMillis(30);
assertEquals(initialExpectedDuration, mAdapter.getDurationMillis());
// Set seconds component to 30, total time is 00h00m30s.
mAdapter.setTimeComponent(SetTimerScrollAdapter.TimeComponents.SECONDS, 30);
assertEquals(firstExpectedDuration, mAdapter.getDurationMillis());
// Set minutes component to 2, total time is 00h02m30s.
mAdapter.setTimeComponent(SetTimerScrollAdapter.TimeComponents.MINUTES, 2);
assertEquals(secondExpectedDuration, mAdapter.getDurationMillis());
// Set hours component to 5, total time is 05h02m30s;
mAdapter.setTimeComponent(SetTimerScrollAdapter.TimeComponents.HOURS, 5);
assertEquals(thirdExpectedDuration, mAdapter.getDurationMillis());
}
public void testGetTimeComponent() {
long expectedHours = 5;
long expectedMinutes = 2;
long expectedSeconds = 30;
long duration = TimeUnit.HOURS.toMillis(expectedHours)
+ TimeUnit.MINUTES.toMillis(expectedMinutes)
+ TimeUnit.SECONDS.toMillis(expectedSeconds);
assertEquals(0, mAdapter.getDurationMillis());
assertEquals(0, mAdapter.getTimeComponent(SetTimerScrollAdapter.TimeComponents.HOURS));
assertEquals(0, mAdapter.getTimeComponent(SetTimerScrollAdapter.TimeComponents.MINUTES));
assertEquals(0, mAdapter.getTimeComponent(SetTimerScrollAdapter.TimeComponents.SECONDS));
mAdapter.setDurationMillis(duration);
assertEquals(
expectedHours,
mAdapter.getTimeComponent(SetTimerScrollAdapter.TimeComponents.HOURS));
assertEquals(
expectedMinutes,
mAdapter.getTimeComponent(SetTimerScrollAdapter.TimeComponents.MINUTES));
assertEquals(
expectedSeconds,
mAdapter.getTimeComponent(SetTimerScrollAdapter.TimeComponents.SECONDS));
}
public void testGetCount() {
assertEquals(3, mAdapter.getCount());
}
public void testGetItem() {
assertEquals(SetTimerScrollAdapter.TimeComponents.HOURS, mAdapter.getItem(0));
assertEquals(SetTimerScrollAdapter.TimeComponents.MINUTES, mAdapter.getItem(1));
assertEquals(SetTimerScrollAdapter.TimeComponents.SECONDS, mAdapter.getItem(2));
assertNull(mAdapter.getItem(4));
}
public void testGetViewHours() {
assertGetView(0, R.string.hours);
}
public void testGetViewMinutes() {
assertGetView(1, R.string.minutes);
}
public void testGetViewSeconds() {
assertGetView(2, R.string.seconds);
}
public void testGetPosition() {
assertEquals(0, mAdapter.getPosition(SetTimerScrollAdapter.TimeComponents.HOURS));
assertEquals(1, mAdapter.getPosition(SetTimerScrollAdapter.TimeComponents.MINUTES));
assertEquals(2, mAdapter.getPosition(SetTimerScrollAdapter.TimeComponents.SECONDS));
assertEquals(AdapterView.INVALID_POSITION, mAdapter.getPosition(this));
}
private void assertGetView(int position, int expectedLabel) {
long expectedHours = 5;
long expectedMinutes = 2;
long expectedSeconds = 30;
long duration = TimeUnit.HOURS.toMillis(expectedHours)
+ TimeUnit.MINUTES.toMillis(expectedMinutes)
+ TimeUnit.SECONDS.toMillis(expectedSeconds);
int colorGray = getContext().getResources().getColor(R.color.gray);
int colorWhite = getContext().getResources().getColor(R.color.white);
String label = getContext().getResources().getString(expectedLabel);
mAdapter.setDurationMillis(duration);
View view = mAdapter.getView(position, null, null);
assertNotNull(view);
TextView[] views = new TextView[] {
(TextView) view.findViewById(R.id.hours),
(TextView) view.findViewById(R.id.minutes),
(TextView) view.findViewById(R.id.seconds)
};
TextView tipView = (TextView) view.findViewById(R.id.tip);
assertEquals("05", views[0].getText());
assertEquals("02", views[1].getText());
assertEquals("30", views[2].getText());
for (int i = 0; i < 3; ++i) {
int textColor = views[i].getTextColors().getDefaultColor();
assertEquals(i == position ? colorWhite : colorGray, textColor);
}
assertNotNull(tipView);
assertEquals(label, tipView.getText());
}
}