blob: 53e251aa4d3c639be979e6135fb4e0bdf8d96b04 [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.view.cts;
import com.android.cts.view.R;
import dalvik.annotation.KnownFailure;
import org.xmlpull.v1.XmlPullParser;
import android.app.Activity;
import android.content.Context;
import android.test.ActivityInstrumentationTestCase;
import android.test.UiThreadTest;
import android.util.AttributeSet;
import android.util.Xml;
import android.view.View;
import android.view.ViewParent;
import android.view.ViewStub;
import android.view.ViewStub.OnInflateListener;
import android.widget.LinearLayout;
/**
* Test {@link ViewStub}.
*/
public class ViewStubTest extends ActivityInstrumentationTestCase<ViewStubCtsActivity> {
private Context mContext;
private Activity mActivity;
public ViewStubTest() {
super("com.android.cts.view", ViewStubCtsActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mContext = getInstrumentation().getContext();
mActivity = getActivity();
}
public void testConstructor() {
XmlPullParser parser = mActivity.getResources().getXml(R.layout.viewstub_layout);
AttributeSet attrs = Xml.asAttributeSet(parser);
assertNotNull(attrs);
new ViewStub(mContext);
new ViewStub(mContext, 10);
new ViewStub(mContext, attrs);
new ViewStub(mContext, attrs, 30);
}
public void testDraw() {
ViewStub viewStub = new ViewStub(mContext);
// if the function draw() does not throw any exception,
// we think it is right, because it's an empty method.
viewStub.draw(null);
}
@UiThreadTest
public void testSetVisibility() {
final ViewStub viewStub1 = (ViewStub) mActivity.findViewById(R.id.viewstub);
MockOnInflateListener listener = new MockOnInflateListener();
viewStub1.setOnInflateListener(listener);
assertFalse(listener.hasCalledOnInflate());
assertNotNull(viewStub1.getParent());
// set GONE
viewStub1.setVisibility(View.GONE);
assertEquals(View.GONE, viewStub1.getVisibility());
// does not call inflate
assertFalse(listener.hasCalledOnInflate());
assertNotNull(viewStub1.getParent());
// set VISIBLE
viewStub1.setVisibility(View.VISIBLE);
assertEquals(View.VISIBLE, viewStub1.getVisibility());
//assure the inflate is called
assertTrue(listener.hasCalledOnInflate());
assertNull(viewStub1.getParent());
// set INVISIBLE when parent is null
final ViewStub viewStub2 = new ViewStub(mContext);
assertNull(viewStub2.getParent());
try {
viewStub2.setVisibility(View.INVISIBLE);
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
}
assertEquals(View.INVISIBLE, viewStub2.getVisibility());
}
public void testAccessLayoutResource() {
ViewStub viewStub = new ViewStub(mContext);
viewStub.setLayoutResource(R.layout.viewstub_layout);
assertEquals(R.layout.viewstub_layout, viewStub.getLayoutResource());
viewStub.setLayoutResource(0);
assertEquals(0, viewStub.getLayoutResource());
viewStub.setLayoutResource(-1);
assertEquals(-1, viewStub.getLayoutResource());
}
public void testViewStubHasNoDimensions() {
ViewStub viewStub = new ViewStub(mContext);
viewStub.forceLayout();
viewStub.measure(200, 300);
assertEquals(0, viewStub.getMeasuredWidth());
assertEquals(0, viewStub.getMeasuredHeight());
viewStub.measure(100, 200);
assertEquals(0, viewStub.getMeasuredWidth());
assertEquals(0, viewStub.getMeasuredHeight());
}
@UiThreadTest
public void testSetOnInflateListener() {
final ViewStub viewStub = (ViewStub) mActivity.findViewById(R.id.viewstub);
final MockOnInflateListener listener = new MockOnInflateListener();
viewStub.setOnInflateListener(listener);
assertFalse(listener.hasCalledOnInflate());
viewStub.inflate();
assertTrue(listener.hasCalledOnInflate());
}
@UiThreadTest
public void testSetOnInflateListenerError() {
final ViewStub viewStub = (ViewStub) mActivity.findViewById(R.id.viewstub);
viewStub.setOnInflateListener(null);
try {
viewStub.inflate();
} catch (NullPointerException e) {
fail("should not throw NullPointerException");
}
}
public void testAccessInflatedId() {
ViewStub viewStub = new ViewStub(mContext);
assertEquals(0, viewStub.getInflatedId());
viewStub.setInflatedId(R.id.inflated_id);
assertEquals(R.id.inflated_id, viewStub.getInflatedId());
viewStub.setInflatedId(-1);
assertEquals(-1, viewStub.getInflatedId());
}
@UiThreadTest
public void testInflate() {
final ViewStub viewStub = (ViewStub) mActivity.findViewById(R.id.viewstub);
final ViewParent vsParent = viewStub.getParent();
final MockOnInflateListener listener = new MockOnInflateListener();
viewStub.setOnInflateListener(listener);
assertFalse(listener.hasCalledOnInflate());
assertNotNull(vsParent);
View view = viewStub.inflate();
assertNotNull(view);
assertTrue(view instanceof LinearLayout);
assertEquals(viewStub.getLayoutParams().width, view.getLayoutParams().width);
assertEquals(viewStub.getLayoutParams().height, view.getLayoutParams().height);
assertNull(viewStub.getParent());
assertSame(vsParent, view.getParent());
assertEquals(R.id.inflated_id, view.getId());
assertTrue(listener.hasCalledOnInflate());
}
public void testInflateError() {
final ViewStub viewStub = (ViewStub) mActivity.findViewById(R.id.viewstub);
// mLayoutResource is 0
viewStub.setLayoutResource(0);
try {
viewStub.inflate();
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
}
// parent is null
ViewStub stub = new ViewStub(mContext);
assertNull(stub.getParent());
try {
stub.inflate();
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
}
}
private class MockOnInflateListener implements OnInflateListener {
private boolean mCalledOnInflate = false;
public void onInflate(ViewStub stub, View inflated) {
mCalledOnInflate = true;
}
public boolean hasCalledOnInflate() {
return mCalledOnInflate;
}
public void reset() {
mCalledOnInflate = false;
}
}
}