/* * Copyright (c) 2017-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.litho.utils; import android.view.View.MeasureSpec; import com.facebook.litho.Size; import com.facebook.litho.SizeSpec; import com.facebook.litho.testing.testrunner.ComponentsTestRunner; import org.junit.Test; import org.junit.runner.RunWith; import static com.facebook.litho.SizeSpec.AT_MOST; import static com.facebook.litho.SizeSpec.EXACTLY; import static com.facebook.litho.SizeSpec.UNSPECIFIED; import static org.junit.Assert.assertEquals; @RunWith(ComponentsTestRunner.class) public class MeasureUtilsTest { @Test public void testWidthExactlyHeightAtMost() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(10, EXACTLY), SizeSpec.makeSizeSpec(30, AT_MOST), 0.5f, size); assertEquals(10, size.width); assertEquals(20, size.height); } @Test public void testWidthExactlyHeightUnspecified() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(10, EXACTLY), SizeSpec.makeSizeSpec(0, UNSPECIFIED), 0.5f, size); assertEquals(10, size.width); assertEquals(20, size.height); } @Test public void testWidthAtMostHeightExactly() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(30, AT_MOST), SizeSpec.makeSizeSpec(10, EXACTLY), 2f, size); assertEquals(20, size.width); assertEquals(10, size.height); } @Test public void testWidthUnspecifiedHeightExactly() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(0, UNSPECIFIED), SizeSpec.makeSizeSpec(10, EXACTLY), 2f, size); assertEquals(20, size.width); assertEquals(10, size.height); } @Test public void testWidthAtMostHeightAtMostWidthSmaller() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(10, AT_MOST), SizeSpec.makeSizeSpec(20, AT_MOST), 0.5f, size); assertEquals(10, size.width); assertEquals(20, size.height); } @Test public void testWidthAtMostHeightAtMostHeightSmaller() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(20, AT_MOST), SizeSpec.makeSizeSpec(10, AT_MOST), 2f, size); assertEquals(20, size.width); assertEquals(10, size.height); } @Test public void testWidthAtMostHeightUnspecified() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(20, AT_MOST), SizeSpec.makeSizeSpec(0, UNSPECIFIED), 1f, size); assertEquals(20, size.width); assertEquals(20, size.height); } @Test public void testWidthUnspecifiedHeightAtMost() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(0, UNSPECIFIED), SizeSpec.makeSizeSpec(20, AT_MOST), 1f, size); assertEquals(20, size.width); assertEquals(20, size.height); } @Test public void testWithInstrinsicSize() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(0, UNSPECIFIED), SizeSpec.makeSizeSpec(20, AT_MOST), 10, 10, 1f, size); assertEquals(10, size.width); assertEquals(10, size.height); } @Test public void testWidthExactlyHeightAtMostEqual() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(20, EXACTLY), SizeSpec.makeSizeSpec(20, AT_MOST), 1, size); assertEquals(20, size.width); assertEquals(20, size.height); } @Test public void testWidthAtMostHeightExactlyEqual() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(20, AT_MOST), SizeSpec.makeSizeSpec(20, EXACTLY), 1, size); assertEquals(20, size.width); assertEquals(20, size.height); } @Test public void testWidthUnspecifiedHeightUnspecified() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(0, UNSPECIFIED), SizeSpec.makeSizeSpec(0, UNSPECIFIED), 10, size); assertEquals(0, size.width); assertEquals(0, size.height); } @Test public void testWidthExactlyHeightTooSmall() { final Size size = new Size(); MeasureUtils.measureWithAspectRatio( SizeSpec.makeSizeSpec(10, EXACTLY), SizeSpec.makeSizeSpec(20, AT_MOST), 0.1f, size); assertEquals(10, size.width); assertEquals(20, size.height); } @Test public void testWidthUnspecifiedHeightUnspecifiedEqual() { final Size size = new Size(); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(0, UNSPECIFIED), SizeSpec.makeSizeSpec(0, UNSPECIFIED), size); assertEquals(0, size.width); assertEquals(0, size.height); } @Test public void testWidthAtMostHeightAtMostEqual() { final Size size = new Size(); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(20, AT_MOST), SizeSpec.makeSizeSpec(10, AT_MOST), size); assertEquals(10, size.width); assertEquals(10, size.height); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(20, AT_MOST), SizeSpec.makeSizeSpec(30, AT_MOST), size); assertEquals(20, size.width); assertEquals(20, size.height); } @Test public void textAtMostUnspecifiedEqual() { final Size size = new Size(); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(20, AT_MOST), SizeSpec.makeSizeSpec(10, UNSPECIFIED), size); assertEquals(20, size.width); assertEquals(20, size.height); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(10, UNSPECIFIED), SizeSpec.makeSizeSpec(30, AT_MOST), size); assertEquals(30, size.width); assertEquals(30, size.height); } @Test public void testExactlyUnspecifiedEqual() { final Size size = new Size(); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(20, EXACTLY), SizeSpec.makeSizeSpec(10, UNSPECIFIED), size); assertEquals(20, size.width); assertEquals(20, size.height); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(20, UNSPECIFIED), SizeSpec.makeSizeSpec(10, EXACTLY), size); assertEquals(10, size.width); assertEquals(10, size.height); } @Test public void testExactlyAtMostSmallerEqual() { final Size size = new Size(); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(20, EXACTLY), SizeSpec.makeSizeSpec(10, AT_MOST), size); assertEquals(20, size.width); assertEquals(10, size.height); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(10, AT_MOST), SizeSpec.makeSizeSpec(20, EXACTLY), size); assertEquals(10, size.width); assertEquals(20, size.height); } @Test public void testExactlyAtMostLargerEqual() { final Size size = new Size(); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(20, EXACTLY), SizeSpec.makeSizeSpec(30, AT_MOST), size); assertEquals(20, size.width); assertEquals(20, size.height); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(30, AT_MOST), SizeSpec.makeSizeSpec(20, EXACTLY), size); assertEquals(20, size.width); assertEquals(20, size.height); } @Test public void textExactWidthExactHeightEqual() { final Size size = new Size(); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(20, EXACTLY), SizeSpec.makeSizeSpec(10, EXACTLY), size); assertEquals(20, size.width); assertEquals(10, size.height); MeasureUtils.measureWithEqualDimens( SizeSpec.makeSizeSpec(30, EXACTLY), SizeSpec.makeSizeSpec(30, EXACTLY), size); assertEquals(30, size.width); assertEquals(30, size.height); } @Test public void testGetViewMeasureSpecExactly() { assertEquals( MeasureUtils.getViewMeasureSpec(MeasureSpec.makeMeasureSpec(10, MeasureSpec.EXACTLY)), MeasureUtils.getViewMeasureSpec(SizeSpec.makeSizeSpec(10, SizeSpec.EXACTLY))); } @Test public void testGetViewMeasureSpecAtMost() { assertEquals( MeasureUtils.getViewMeasureSpec(MeasureSpec.makeMeasureSpec(10, MeasureSpec.AT_MOST)), MeasureUtils.getViewMeasureSpec(SizeSpec.makeSizeSpec(10, SizeSpec.AT_MOST))); } @Test public void testGetViewMeasureSpecUnspecified() { assertEquals( MeasureUtils.getViewMeasureSpec(MeasureSpec.makeMeasureSpec(10, MeasureSpec.UNSPECIFIED)), MeasureUtils.getViewMeasureSpec(SizeSpec.makeSizeSpec(10, SizeSpec.UNSPECIFIED))); } @Test public void testMeasureWithDesiredSizeAndExactlySpec() { final Size size = new Size(); MeasureUtils.measureWithDesiredPx( SizeSpec.makeSizeSpec(50, EXACTLY), SizeSpec.makeSizeSpec(30, EXACTLY), 80, 20, size); assertEquals(50, size.width); assertEquals(30, size.height); } @Test public void testMeasureWithDesiredSizeAndLargerAtMostSpec() { final Size size = new Size(); MeasureUtils.measureWithDesiredPx( SizeSpec.makeSizeSpec(81, AT_MOST), SizeSpec.makeSizeSpec(21, AT_MOST), 80, 20, size); assertEquals(80, size.width); assertEquals(20, size.height); } @Test public void testMeasureWithDesiredSizeAndSmallerAtMostSpec() { final Size size = new Size(); MeasureUtils.measureWithDesiredPx( SizeSpec.makeSizeSpec(79, AT_MOST), SizeSpec.makeSizeSpec(19, EXACTLY), 80, 20, size); assertEquals(79, size.width); assertEquals(19, size.height); } @Test public void testMeasureWithDesiredSizeAndUnspecifiedSpec() { final Size size = new Size(); MeasureUtils.measureWithDesiredPx( SizeSpec.makeSizeSpec(0, UNSPECIFIED), SizeSpec.makeSizeSpec(0, UNSPECIFIED), 80, 20, size); assertEquals(80, size.width); assertEquals(20, size.height); } }