blob: 78ff11208913d3c260346b3c01f4d59aba7bdcc1 [file] [log] [blame]
/*
* Copyright 2018 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 androidx.core.view;
import static org.junit.Assert.assertEquals;
import android.os.Build;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import android.view.ViewGroup;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
@SmallTest
public class MarginLayoutParamsCompatTest {
@Test
public void testLayoutDirection() {
ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
assertEquals("Default LTR layout direction", ViewCompat.LAYOUT_DIRECTION_LTR,
MarginLayoutParamsCompat.getLayoutDirection(mlp));
MarginLayoutParamsCompat.setLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
if (Build.VERSION.SDK_INT >= 17) {
assertEquals("RTL layout direction", ViewCompat.LAYOUT_DIRECTION_RTL,
MarginLayoutParamsCompat.getLayoutDirection(mlp));
} else {
assertEquals("Still LTR layout direction on older devices",
ViewCompat.LAYOUT_DIRECTION_LTR,
MarginLayoutParamsCompat.getLayoutDirection(mlp));
}
MarginLayoutParamsCompat.setLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_LTR);
assertEquals("Back to LTR layout direction", ViewCompat.LAYOUT_DIRECTION_LTR,
MarginLayoutParamsCompat.getLayoutDirection(mlp));
}
@Test
public void testMappingOldMarginsToNewMarginsLtr() {
ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
mlp.leftMargin = 50;
mlp.rightMargin = 80;
assertEquals("Mapping left to start under LTR", 50,
MarginLayoutParamsCompat.getMarginStart(mlp));
assertEquals("Mapping right to end under LTR", 80,
MarginLayoutParamsCompat.getMarginEnd(mlp));
}
@Test
public void testMappingOldMarginsToNewMarginsRtl() {
ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
mlp.leftMargin = 50;
mlp.rightMargin = 80;
MarginLayoutParamsCompat.setLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
if (Build.VERSION.SDK_INT >= 17) {
assertEquals("Mapping right to start under RTL", 80,
MarginLayoutParamsCompat.getMarginStart(mlp));
assertEquals("Mapping left to end under RTL", 50,
MarginLayoutParamsCompat.getMarginEnd(mlp));
} else {
assertEquals("Mapping left to start under RTL on older devices", 50,
MarginLayoutParamsCompat.getMarginStart(mlp));
assertEquals("Mapping right to end under RTL on older devices", 80,
MarginLayoutParamsCompat.getMarginEnd(mlp));
}
}
@Test
public void testMappingNewMarginsToNewMarginsLtr() {
ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
MarginLayoutParamsCompat.setMarginStart(mlp, 50);
assertEquals("Resolved start margin under LTR", 50,
MarginLayoutParamsCompat.getMarginStart(mlp));
// Check that initial end / right margins are still 0
assertEquals("Default end margin under LTR", 0,
MarginLayoutParamsCompat.getMarginEnd(mlp));
MarginLayoutParamsCompat.setMarginEnd(mlp, 80);
assertEquals("Resolved end margin under LTR", 80,
MarginLayoutParamsCompat.getMarginEnd(mlp));
// Check that start / left margins are still the same
assertEquals("Keeping start margin under LTR", 50,
MarginLayoutParamsCompat.getMarginStart(mlp));
}
@Test
public void testMappingNewMarginsToNewMarginsRtl() {
ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
// Note that unlike the test that checks mapping of left/right to start/end and has
// to do platform-specific checks, the checks in this test are platform-agnostic,
// relying on the relevant MarginLayoutParamsCompat to do the right mapping internally.
MarginLayoutParamsCompat.setLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
MarginLayoutParamsCompat.setMarginStart(mlp, 50);
assertEquals("Resolved start margin under RTL", 50,
MarginLayoutParamsCompat.getMarginStart(mlp));
// Check that initial end / right margins are still 0
assertEquals("Default end margin under RTL", 0,
MarginLayoutParamsCompat.getMarginEnd(mlp));
MarginLayoutParamsCompat.setMarginEnd(mlp, 80);
assertEquals("Resolved end margin under RTL", 80,
MarginLayoutParamsCompat.getMarginEnd(mlp));
// Check that start / left margins are still the same
assertEquals("Keeping start margin under RTL", 50,
MarginLayoutParamsCompat.getMarginStart(mlp));
}
@Test
public void testResolveMarginsLtr() {
ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
MarginLayoutParamsCompat.setMarginStart(mlp, 50);
MarginLayoutParamsCompat.resolveLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_LTR);
// While there's no guarantee that left/right margin fields have been set / resolved
// prior to the resolveLayoutDirection call, they should be now
assertEquals("Resolved left margin field under LTR", 50, mlp.leftMargin);
assertEquals("Default right margin field under LTR", 0, mlp.rightMargin);
MarginLayoutParamsCompat.setMarginEnd(mlp, 80);
MarginLayoutParamsCompat.resolveLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_LTR);
assertEquals("Resolved right margin field under LTR", 80, mlp.rightMargin);
assertEquals("Keeping left margin field under LTR", 50, mlp.leftMargin);
}
@Test
public void testResolveMarginsRtl() {
ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
MarginLayoutParamsCompat.setMarginStart(mlp, 50);
MarginLayoutParamsCompat.resolveLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
// While there's no guarantee that left/right margin fields have been set / resolved
// prior to the resolveLayoutDirection call, they should be now
if (Build.VERSION.SDK_INT >= 17) {
assertEquals("Default left margin field under RTL", 0, mlp.leftMargin);
assertEquals("Resolved right margin field under RTL", 50, mlp.rightMargin);
} else {
assertEquals("Resolved left margin field under RTL on older devices",
50, mlp.leftMargin);
assertEquals("Default right margin field under RTL on older devices",
0, mlp.rightMargin);
}
MarginLayoutParamsCompat.setMarginEnd(mlp, 80);
MarginLayoutParamsCompat.resolveLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
if (Build.VERSION.SDK_INT >= 17) {
assertEquals("Resolved left margin field under RTL", 80, mlp.leftMargin);
assertEquals("Keeping right margin field under RTL", 50, mlp.rightMargin);
} else {
assertEquals("Resolved right margin field under RTL on older devices",
80, mlp.rightMargin);
assertEquals("Keeping left margin field under RTL on older devices",
50, mlp.leftMargin);
}
}
}