| /* |
| * 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; |
| } |
| } |
| } |