| /* |
| * 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 org.xmlpull.v1.XmlPullParser; |
| |
| import android.app.Activity; |
| import android.content.Context; |
| import android.graphics.Canvas; |
| 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; |
| |
| import com.android.cts.stub.R; |
| |
| import dalvik.annotation.TestTargets; |
| import dalvik.annotation.TestLevel; |
| import dalvik.annotation.TestTargetNew; |
| import dalvik.annotation.TestTargetClass; |
| import dalvik.annotation.ToBeFixed; |
| |
| /** |
| * Test {@link ViewStub}. |
| */ |
| @TestTargetClass(ViewStub.class) |
| public class ViewStubTest extends ActivityInstrumentationTestCase<ViewStubStubActivity> { |
| private Context mContext; |
| private Activity mActivity; |
| |
| public ViewStubTest() { |
| super("com.android.cts.stub", ViewStubStubActivity.class); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| mContext = getInstrumentation().getContext(); |
| mActivity = getActivity(); |
| } |
| |
| @TestTargets({ |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test constructor(s) of {@link ViewStub}", |
| method = "ViewStub", |
| args = {android.content.Context.class} |
| ), |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test constructor(s) of {@link ViewStub}", |
| method = "ViewStub", |
| args = {android.content.Context.class, android.util.AttributeSet.class} |
| ), |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test constructor(s) of {@link ViewStub}", |
| method = "ViewStub", |
| args = {android.content.Context.class, android.util.AttributeSet.class, int.class} |
| ), |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test constructor(s) of {@link ViewStub}", |
| method = "ViewStub", |
| args = {android.content.Context.class, int.class} |
| ) |
| }) |
| @ToBeFixed(bug="1371108", explanation="constructor ViewStub#ViewStub(Context, AttributeSet)" + |
| "and ViewStub#ViewStub(Context, AttributeSet, int)" + |
| " should check whether the input Context is null") |
| 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); |
| |
| // test the exceptional conditions |
| new ViewStub(null, -1); |
| |
| new ViewStub(null); |
| |
| try { |
| new ViewStub(null, null); |
| fail("should throw NullPointerException"); |
| } catch (NullPointerException e) { |
| } |
| |
| try { |
| new ViewStub(null, null, -1); |
| fail("should throw NullPointerException"); |
| } catch (NullPointerException e) { |
| } |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#draw(Canvas)}", |
| method = "draw", |
| args = {android.graphics.Canvas.class} |
| ) |
| 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); |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#dispatchDraw(Canvas)}", |
| method = "dispatchDraw", |
| args = {android.graphics.Canvas.class} |
| ) |
| @ToBeFixed(bug="1391590", explanation=" ViewStub is final class and dispatchDraw(Canvas)" + |
| " is protected method, we can not do unit test for this method") |
| public void testDispatchDraw() { |
| // empty method |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#setVisibility(int)}", |
| method = "setVisibility", |
| args = {int.class} |
| ) |
| @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()); |
| } |
| |
| @TestTargets({ |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#getLayoutResource()} and {@link ViewStub#setLayoutResource(int)}", |
| method = "getLayoutResource", |
| args = {} |
| ), |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#getLayoutResource()} and {@link ViewStub#setLayoutResource(int)}", |
| method = "setLayoutResource", |
| args = {int.class} |
| ) |
| }) |
| 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()); |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#onMeasure(int, int)}", |
| method = "onMeasure", |
| args = {int.class, int.class} |
| ) |
| 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()); |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#setOnInflateListener(OnInflateListener)}", |
| method = "setOnInflateListener", |
| args = {android.view.ViewStub.OnInflateListener.class} |
| ) |
| @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()); |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test abnormal condition of {@link ViewStub#setOnInflateListener(OnInflateListener)}", |
| method = "setOnInflateListener", |
| args = {android.view.ViewStub.OnInflateListener.class} |
| ) |
| @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"); |
| } |
| } |
| |
| @TestTargets({ |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#getInflatedId()} and {@link ViewStub#setInflatedId(int)}", |
| method = "getInflatedId", |
| args = {} |
| ), |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#getInflatedId()} and {@link ViewStub#setInflatedId(int)}", |
| method = "setInflatedId", |
| args = {int.class} |
| ) |
| }) |
| 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()); |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test {@link ViewStub#inflate()}", |
| method = "inflate", |
| args = {} |
| ) |
| @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()); |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.TODO, |
| notes = "Test abnormal condition of {@link ViewStub#inflate()}", |
| method = "inflate", |
| args = {} |
| ) |
| @ToBeFixed(bug="", explanation="should add javadoc for ViewStub#inflate(): it will" + |
| " throw IllegalArgumentException when resource is invalid and " + |
| " throw IllegalStateException when parent is null") |
| 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; |
| } |
| } |
| } |