blob: 1ce2844dc2d8c8bbfb505850007402a7a66a6fea [file] [log] [blame]
/*
* Copyright (C) 2008 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 android.widget.cts;
import android.app.Activity;
import android.app.Instrumentation;
import android.content.Context;
import android.os.Parcelable;
import android.test.ActivityInstrumentationTestCase2;
import android.util.AttributeSet;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
/**
* Test {@link TimePicker}.
*/
public class TimePickerTest extends ActivityInstrumentationTestCase2<CtsActivity> {
private TimePicker mTimePicker;
private Activity mActivity;
private Context mContext;
private Instrumentation mInstrumentation;
public TimePickerTest() {
super("com.android.cts.widget", CtsActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mInstrumentation = getInstrumentation();
mContext = mInstrumentation.getTargetContext();
mActivity = getActivity();
}
public void testConstructors() {
AttributeSet attrs =
mContext.getResources().getLayout(com.android.cts.widget.R.layout.timepicker);
assertNotNull(attrs);
new TimePicker(mContext);
try {
new TimePicker(null);
fail("did not throw NullPointerException when param context is null.");
} catch (NullPointerException e) {
// expected
}
new TimePicker(mContext, attrs);
try {
new TimePicker(null, attrs);
fail("did not throw NullPointerException when param context is null.");
} catch (NullPointerException e) {
// expected
}
new TimePicker(mContext, null);
new TimePicker(mContext, attrs, 0);
try {
new TimePicker(null, attrs, 0);
fail("did not throw NullPointerException when param context is null.");
} catch (NullPointerException e) {
// expected
}
new TimePicker(mContext, null, 0);
new TimePicker(mContext, attrs, 0);
new TimePicker(mContext, attrs, Integer.MIN_VALUE);
}
public void testSetEnabled() {
mTimePicker = new TimePicker(mContext);
assertTrue(mTimePicker.isEnabled());
mTimePicker.setEnabled(false);
assertFalse(mTimePicker.isEnabled());
mTimePicker.setEnabled(true);
assertTrue(mTimePicker.isEnabled());
}
public void testSetOnTimeChangedListener() {
int initialHour = 13;
int initialMinute = 50;
mTimePicker = new TimePicker(mContext);
MockOnTimeChangeListener listener = new MockOnTimeChangeListener();
mTimePicker.setOnTimeChangedListener(listener);
mTimePicker.setCurrentHour(Integer.valueOf(initialHour));
mTimePicker.setCurrentMinute(Integer.valueOf(initialMinute));
assertEquals(initialHour, listener.getNotifiedHourOfDay());
assertEquals(initialMinute, listener.getNotifiedMinute());
// set the same hour as current
listener.reset();
mTimePicker.setCurrentHour(Integer.valueOf(initialHour));
assertFalse(listener.hasCalledOnTimeChanged());
mTimePicker.setCurrentHour(Integer.valueOf(initialHour + 1));
assertTrue(listener.hasCalledOnTimeChanged());
assertEquals(initialHour + 1, listener.getNotifiedHourOfDay());
assertEquals(initialMinute, listener.getNotifiedMinute());
assertSame(mTimePicker, listener.getNotifiedView());
// set the same minute as current
listener.reset();
mTimePicker.setCurrentMinute(initialMinute);
assertFalse(listener.hasCalledOnTimeChanged());
listener.reset();
mTimePicker.setCurrentMinute(initialMinute + 1);
assertTrue(listener.hasCalledOnTimeChanged());
assertEquals(initialHour + 1, listener.getNotifiedHourOfDay());
assertEquals(initialMinute + 1, listener.getNotifiedMinute());
assertSame(mTimePicker, listener.getNotifiedView());
// change time picker mode
listener.reset();
mTimePicker.setIs24HourView( !mTimePicker.is24HourView() );
assertFalse(listener.hasCalledOnTimeChanged());
}
public void testAccessCurrentHour() {
mTimePicker = new TimePicker(mContext);
// AM/PM mode
mTimePicker.setIs24HourView(false);
mTimePicker.setCurrentHour(0);
assertEquals(Integer.valueOf(0), mTimePicker.getCurrentHour());
mTimePicker.setCurrentHour(12);
assertEquals(Integer.valueOf(12), mTimePicker.getCurrentHour());
mTimePicker.setCurrentHour(13);
assertEquals(Integer.valueOf(13), mTimePicker.getCurrentHour());
mTimePicker.setCurrentHour(23);
assertEquals(Integer.valueOf(23), mTimePicker.getCurrentHour());
// for 24 hour mode
mTimePicker.setIs24HourView(true);
mTimePicker.setCurrentHour(0);
assertEquals(Integer.valueOf(0), mTimePicker.getCurrentHour());
mTimePicker.setCurrentHour(13);
assertEquals(Integer.valueOf(13), mTimePicker.getCurrentHour());
mTimePicker.setCurrentHour(23);
assertEquals(Integer.valueOf(23), mTimePicker.getCurrentHour());
}
public void testAccessHour() {
mTimePicker = new TimePicker(mContext);
// AM/PM mode
mTimePicker.setIs24HourView(false);
mTimePicker.setHour(0);
assertEquals(0, mTimePicker.getHour());
mTimePicker.setHour(12);
assertEquals(12, mTimePicker.getHour());
mTimePicker.setHour(13);
assertEquals(13, mTimePicker.getHour());
mTimePicker.setHour(23);
assertEquals(23, mTimePicker.getHour());
// for 24 hour mode
mTimePicker.setIs24HourView(true);
mTimePicker.setHour(0);
assertEquals(0, mTimePicker.getHour());
mTimePicker.setHour(13);
assertEquals(13, mTimePicker.getHour());
mTimePicker.setHour(23);
assertEquals(23, mTimePicker.getHour());
}
public void testAccessIs24HourView() {
mTimePicker = new TimePicker(mContext);
assertFalse(mTimePicker.is24HourView());
mTimePicker.setIs24HourView(true);
assertTrue(mTimePicker.is24HourView());
mTimePicker.setIs24HourView(false);
assertFalse(mTimePicker.is24HourView());
}
public void testAccessCurrentMinute() {
mTimePicker = new TimePicker(mContext);
mTimePicker.setCurrentMinute(0);
assertEquals(Integer.valueOf(0), mTimePicker.getCurrentMinute());
mTimePicker.setCurrentMinute(12);
assertEquals(Integer.valueOf(12), mTimePicker.getCurrentMinute());
mTimePicker.setCurrentMinute(33);
assertEquals(Integer.valueOf(33), mTimePicker.getCurrentMinute());
mTimePicker.setCurrentMinute(59);
assertEquals(Integer.valueOf(59), mTimePicker.getCurrentMinute());
}
public void testAccessMinute() {
mTimePicker = new TimePicker(mContext);
mTimePicker.setMinute(0);
assertEquals(0, mTimePicker.getMinute());
mTimePicker.setMinute(12);
assertEquals(12, mTimePicker.getMinute());
mTimePicker.setMinute(33);
assertEquals(33, mTimePicker.getMinute());
mTimePicker.setMinute(59);
assertEquals(59, mTimePicker.getMinute());
}
public void testGetBaseline() {
mTimePicker = new TimePicker(mContext);
assertEquals(-1, mTimePicker.getBaseline());
}
public void testOnSaveInstanceStateAndOnRestoreInstanceState() {
MyTimePicker source = new MyTimePicker(mContext);
MyTimePicker dest = new MyTimePicker(mContext);
int expectHour = (dest.getCurrentHour() + 10) % 24;
int expectMinute = (dest.getCurrentMinute() + 10) % 60;
source.setCurrentHour(expectHour);
source.setCurrentMinute(expectMinute);
Parcelable p = source.onSaveInstanceState();
dest.onRestoreInstanceState(p);
assertEquals(Integer.valueOf(expectHour), dest.getCurrentHour());
assertEquals(Integer.valueOf(expectMinute), dest.getCurrentMinute());
}
private class MockOnTimeChangeListener implements OnTimeChangedListener {
private TimePicker mNotifiedView;
private boolean mHasCalledOnTimeChanged;
private int mNotifiedHourOfDay;
private int mNotifiedMinute;;
public boolean hasCalledOnTimeChanged() {
return mHasCalledOnTimeChanged;
}
public TimePicker getNotifiedView() {
return mNotifiedView;
}
public int getNotifiedHourOfDay() {
return mNotifiedHourOfDay;
}
public int getNotifiedMinute() {
return mNotifiedMinute;
}
public void reset() {
mNotifiedView = null;
mNotifiedHourOfDay = 0;
mNotifiedMinute = 0;
mHasCalledOnTimeChanged = false;
}
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
mNotifiedView = view;
mNotifiedHourOfDay = hourOfDay;
mNotifiedMinute = minute;
mHasCalledOnTimeChanged = true;
}
}
private class MyTimePicker extends TimePicker {
public MyTimePicker(Context context) {
super(context);
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
super.onRestoreInstanceState(state);
}
@Override
protected Parcelable onSaveInstanceState() {
return super.onSaveInstanceState();
}
}
}