blob: abd4680a0067df8005aeeea45d120ee5d62b314e [file] [log] [blame]
/*
* Copyright (C) 2011 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.android.contacts.detail;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
import com.android.contacts.util.StreamItemEntry;
import com.android.contacts.util.StreamItemEntryBuilder;
import com.google.common.collect.Lists;
import java.util.ArrayList;
// TODO: We should have tests for action, but that requires a mock sync-adapter that specifies
// an action or doesn't
// TODO Add test for photo click
/**
* Unit tests for {@link StreamItemAdapter}.
*/
@SmallTest
public class StreamItemAdapterTest extends AndroidTestCase {
private StreamItemAdapter mAdapter;
private FakeOnClickListener mListener;
private FakeOnClickListener mPhotoListener;
private View mView;
@Override
protected void setUp() throws Exception {
super.setUp();
mListener = new FakeOnClickListener();
mAdapter = new StreamItemAdapter(getContext(), mListener, mPhotoListener);
}
@Override
protected void tearDown() throws Exception {
mAdapter = null;
mListener = null;
super.tearDown();
}
public void testGetCount_Empty() {
mAdapter.setStreamItems(createStreamItemList(0));
// The header and title are gone when there are no stream items.
assertEquals(0, mAdapter.getCount());
}
public void testGetCount_NonEmpty() {
mAdapter.setStreamItems(createStreamItemList(3));
// There is one extra view: the header.
assertEquals(4, mAdapter.getCount());
}
public void testGetView_Header() {
// Just check that we can inflate it correctly.
mView = mAdapter.getView(0, null, null);
}
/** Counter used by {@link #createStreamItemEntryBuilder()} to create unique builders. */
private int mCreateStreamItemEntryBuilderCounter = 0;
/** Returns a stream item builder with basic information in it. */
private StreamItemEntryBuilder createStreamItemEntryBuilder() {
return new StreamItemEntryBuilder().setText(
"text #" + mCreateStreamItemEntryBuilderCounter++);
}
/** Creates a list containing the given number of {@link StreamItemEntry}s. */
private ArrayList<StreamItemEntry> createStreamItemList(int count) {
ArrayList<StreamItemEntry> list = Lists.newArrayList();
for (int index = 0; index < count; ++index) {
list.add(createStreamItemEntryBuilder().build(getContext()));
}
return list;
}
/** Checks that the stream item view has a click listener. */
private void assertStreamItemViewHasOnClickListener() {
assertFalse("listener should have not been invoked yet", mListener.clicked);
mView.performClick();
assertTrue("listener should have been invoked", mListener.clicked);
}
/** Checks that the stream item view does not have a click listener. */
private void assertStreamItemViewHasNoOnClickListener() {
assertFalse("listener should have not been invoked yet", mListener.clicked);
mView.performClick();
assertFalse("listener should have not been invoked", mListener.clicked);
}
/** Checks that the stream item view is clickable. */
private void assertStreamItemViewFocusable() {
assertNotNull("should have a stream item", mView);
assertTrue("should be focusable", mView.isFocusable());
}
/** Asserts that there is a stream item but it is not clickable. */
private void assertStreamItemViewNotFocusable() {
assertNotNull("should have a stream item", mView);
assertFalse("should not be focusable", mView.isFocusable());
}
/** Checks that the stream item view has the given stream item as its tag. */
private void assertStreamItemViewHasTag(StreamItemEntry streamItem) {
Object tag = mView.getTag();
assertNotNull("should have a tag", tag);
assertTrue("should be a StreamItemEntry", tag instanceof StreamItemEntry);
StreamItemEntry streamItemTag = (StreamItemEntry) tag;
// The streamItem itself should be in the tag.
assertSame(streamItem, streamItemTag);
}
/** Checks that the stream item view has the given stream item as its tag. */
private void assertStreamItemViewHasNoTag() {
Object tag = mView.getTag();
assertNull("should not have a tag", tag);
}
/**
* Simple fake implementation of {@link View.OnClickListener} which sets a member variable to
* true when clicked.
*/
private final class FakeOnClickListener implements View.OnClickListener {
public boolean clicked = false;
@Override
public void onClick(View view) {
clicked = true;
}
}
}