/* * Copyright (C) 2015 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.messaging.ui; import android.content.Context; import android.net.Uri; import android.test.suitebuilder.annotation.MediumTest; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.android.messaging.FakeFactory; import com.android.messaging.datamodel.data.MessagePartData; import java.util.Arrays; import java.util.Collections; @MediumTest public class MultiAttachmentLayoutTest extends ViewTest { @Override protected void setUp() throws Exception { super.setUp(); final Context context = getInstrumentation().getTargetContext(); FakeFactory.register(context); } @Override protected MultiAttachmentLayout getView() { if (mView == null) { // View creation deferred (typically until test time) so that factory/appcontext is // ready. mView = new MultiAttachmentLayout(getActivity(), null); mView.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); } return mView; } protected void verifyContent( final MultiAttachmentLayout view, final int imageCount, final int plusCount) { final int count = view.getChildCount(); int actualImageCount = 0; final boolean needPlusText = plusCount > 0; boolean hasPlusText = false; for (int i = 0; i < count; i++) { final View child = view.getChildAt(i); if (child instanceof AsyncImageView) { actualImageCount++; } else if (child instanceof TextView) { assertTrue(plusCount > 0); assertTrue(((TextView) child).getText().toString().contains("" + plusCount)); hasPlusText = true; } else { // Nothing other than image and overflow text view should appear in this layout. fail("unexpected view in layout. view = " + child); } } assertEquals(imageCount, actualImageCount); assertEquals(needPlusText, hasPlusText); } public void testBindTwoAttachments() { final MultiAttachmentLayout view = getView(); final MessagePartData testAttachment1 = MessagePartData.createMediaMessagePart( "image/jpeg", Uri.parse("content://uri1"), 100, 100); final MessagePartData testAttachment2 = MessagePartData.createMediaMessagePart( "image/jpeg", Uri.parse("content://uri2"), 100, 100); view.bindAttachments(createAttachmentList(testAttachment1, testAttachment2), null /* transitionRect */, 2); verifyContent(view, 2, 0); } public void testBindFiveAttachments() { final MultiAttachmentLayout view = getView(); final MessagePartData testAttachment1 = MessagePartData.createMediaMessagePart( "image/jpeg", Uri.parse("content://uri1"), 100, 100); final MessagePartData testAttachment2 = MessagePartData.createMediaMessagePart( "image/jpeg", Uri.parse("content://uri2"), 100, 100); final MessagePartData testAttachment3 = MessagePartData.createMediaMessagePart( "image/jpeg", Uri.parse("content://uri3"), 100, 100); final MessagePartData testAttachment4 = MessagePartData.createMediaMessagePart( "image/jpeg", Uri.parse("content://uri4"), 100, 100); final MessagePartData testAttachment5 = MessagePartData.createMediaMessagePart( "image/jpeg", Uri.parse("content://uri5"), 100, 100); view.bindAttachments(createAttachmentList(testAttachment1, testAttachment2, testAttachment3, testAttachment4, testAttachment5), null /* transitionRect */, 5); verifyContent(view, 4, 1); } public void testBindTwice() { // Put the above two tests together so we can simulate binding twice. testBindTwoAttachments(); testBindFiveAttachments(); } private Iterable createAttachmentList(final MessagePartData... attachments) { return Collections.unmodifiableList(Arrays.asList(attachments)); } @Override protected int getLayoutIdForView() { return 0; // We construct the view with getView(). } }