/* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.drawee.view; import com.facebook.drawee.view.AspectRatioMeasure; import com.facebook.testing.robolectric.v2.WithTestDefaultsRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.*; import static android.view.View.MeasureSpec.*; import static android.view.ViewGroup.LayoutParams; import static android.view.ViewGroup.LayoutParams.*; @RunWith(WithTestDefaultsRunner.class) public class AspectRatioMeasureTest { AspectRatioMeasure.Spec mSpec = new AspectRatioMeasure.Spec(); @Before public void setUp() { } @Test public void testAspectRatio() { // width mSpec.width = makeMeasureSpec(410, UNSPECIFIED); mSpec.height = makeMeasureSpec(310, EXACTLY); LayoutParams layoutParams1 = new LayoutParams(WRAP_CONTENT, MATCH_PARENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 1.5f, layoutParams1, 10, 10); assertEquals(makeMeasureSpec(460, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(310, EXACTLY), mSpec.height); // height mSpec.width = makeMeasureSpec(410, EXACTLY); mSpec.height = makeMeasureSpec(310, UNSPECIFIED); LayoutParams layoutParams2 = new LayoutParams(MATCH_PARENT, WRAP_CONTENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 2f, layoutParams2, 10, 10); assertEquals(makeMeasureSpec(410, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(210, EXACTLY), mSpec.height); } @Test public void testNoAspectRatio() { // width mSpec.width = makeMeasureSpec(410, UNSPECIFIED); mSpec.height = makeMeasureSpec(310, EXACTLY); LayoutParams layoutParams1 = new LayoutParams(WRAP_CONTENT, MATCH_PARENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 0, layoutParams1, 10, 10); assertEquals(makeMeasureSpec(410, UNSPECIFIED), mSpec.width); assertEquals(makeMeasureSpec(310, EXACTLY), mSpec.height); // height mSpec.width = makeMeasureSpec(410, EXACTLY); mSpec.height = makeMeasureSpec(310, UNSPECIFIED); LayoutParams layoutParams2 = new LayoutParams(MATCH_PARENT, WRAP_CONTENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 0, layoutParams2, 10, 10); assertEquals(makeMeasureSpec(410, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(310, UNSPECIFIED), mSpec.height); } @Test public void testAtMost() { // width exceeded mSpec.width = makeMeasureSpec(410, AT_MOST); mSpec.height = makeMeasureSpec(310, EXACTLY); LayoutParams layoutParams1 = new LayoutParams(WRAP_CONTENT, MATCH_PARENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 1.5f, layoutParams1, 10, 10); assertEquals(makeMeasureSpec(410, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(310, EXACTLY), mSpec.height); // width within limits mSpec.width = makeMeasureSpec(510, AT_MOST); mSpec.height = makeMeasureSpec(310, EXACTLY); LayoutParams layoutParams2 = new LayoutParams(WRAP_CONTENT, MATCH_PARENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 1.5f, layoutParams2, 10, 10); assertEquals(makeMeasureSpec(460, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(310, EXACTLY), mSpec.height); // height exceeded mSpec.width = makeMeasureSpec(410, EXACTLY); mSpec.height = makeMeasureSpec(110, AT_MOST); LayoutParams layoutParams3 = new LayoutParams(MATCH_PARENT, WRAP_CONTENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 2f, layoutParams3, 10, 10); assertEquals(makeMeasureSpec(410, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(110, EXACTLY), mSpec.height); // height within limits mSpec.width = makeMeasureSpec(410, EXACTLY); mSpec.height = makeMeasureSpec(310, AT_MOST); LayoutParams layoutParams4 = new LayoutParams(MATCH_PARENT, WRAP_CONTENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 2f, layoutParams4, 10, 10); assertEquals(makeMeasureSpec(410, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(210, EXACTLY), mSpec.height); } @Test public void testExactly() { // width mSpec.width = makeMeasureSpec(410, EXACTLY); mSpec.height = makeMeasureSpec(310, EXACTLY); LayoutParams layoutParams1 = new LayoutParams(WRAP_CONTENT, MATCH_PARENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 1.5f, layoutParams1, 10, 10); assertEquals(makeMeasureSpec(410, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(310, EXACTLY), mSpec.height); // height mSpec.width = makeMeasureSpec(410, EXACTLY); mSpec.height = makeMeasureSpec(310, EXACTLY); LayoutParams layoutParams2 = new LayoutParams(MATCH_PARENT, WRAP_CONTENT); AspectRatioMeasure.updateMeasureSpec(mSpec, 2f, layoutParams2, 10, 10); assertEquals(makeMeasureSpec(410, EXACTLY), mSpec.width); assertEquals(makeMeasureSpec(310, EXACTLY), mSpec.height); } }