blob: 2c4c798aadf58c05eac9c6aaed0ecc9dfc6e5781 [file] [log] [blame]
/*
* Copyright (C) 2012 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.widget.cts;
import android.test.ActivityInstrumentationTestCase2;
import android.test.UiThreadTest;
import android.view.ViewGroup;
import android.widget.*;
import com.android.cts.stub.R;
import static android.view.View.LAYOUT_DIRECTION_LTR;
import static android.view.View.LAYOUT_DIRECTION_RTL;
import static android.view.View.LAYOUT_DIRECTION_INHERIT;
import static android.view.View.LAYOUT_DIRECTION_LOCALE;
public class LayoutDirectionTest extends ActivityInstrumentationTestCase2<LayoutDirectionStubActivity> {
public LayoutDirectionTest() {
super(LayoutDirectionStubActivity.class);
}
private void checkDefaultDirectionForOneLayoutWithCode(ViewGroup vg) {
assertEquals(LAYOUT_DIRECTION_INHERIT, vg.getLayoutDirection());
assertEquals(LAYOUT_DIRECTION_LTR, vg.getResolvedLayoutDirection());
}
@UiThreadTest
public void testLayoutDirectionDefaults() {
checkDefaultDirectionForOneLayoutWithCode(new LinearLayout(getActivity()));
checkDefaultDirectionForOneLayoutWithCode(new FrameLayout(getActivity()));
checkDefaultDirectionForOneLayoutWithCode(new TableLayout(getActivity()));
checkDefaultDirectionForOneLayoutWithCode(new RelativeLayout(getActivity()));
checkDefaultDirectionForOneLayoutWithCode(new GridLayout(getActivity()));
}
private void checkDirectionForOneLayoutWithCode(ViewGroup vg) {
vg.setLayoutDirection(LAYOUT_DIRECTION_LTR);
assertEquals(LAYOUT_DIRECTION_LTR, vg.getLayoutDirection());
assertEquals(LAYOUT_DIRECTION_LTR, vg.getResolvedLayoutDirection());
vg.setLayoutDirection(LAYOUT_DIRECTION_RTL);
assertEquals(LAYOUT_DIRECTION_RTL, vg.getLayoutDirection());
assertEquals(LAYOUT_DIRECTION_RTL, vg.getResolvedLayoutDirection());
vg.setLayoutDirection(LAYOUT_DIRECTION_LOCALE);
assertEquals(LAYOUT_DIRECTION_LOCALE, vg.getLayoutDirection());
// running with English locale
assertEquals(LAYOUT_DIRECTION_LTR, vg.getResolvedLayoutDirection());
vg.setLayoutDirection(LAYOUT_DIRECTION_INHERIT);
assertEquals(LAYOUT_DIRECTION_INHERIT, vg.getLayoutDirection());
// default is LTR
assertEquals(LAYOUT_DIRECTION_LTR, vg.getResolvedLayoutDirection());
}
@UiThreadTest
public void testDirectionForAllLayoutsWithCode() {
checkDirectionForOneLayoutWithCode(new LinearLayout(getActivity()));
checkDirectionForOneLayoutWithCode(new FrameLayout(getActivity()));
checkDirectionForOneLayoutWithCode(new TableLayout(getActivity()));
checkDirectionForOneLayoutWithCode(new RelativeLayout(getActivity()));
checkDirectionForOneLayoutWithCode(new GridLayout(getActivity()));
}
private void checkDirectionInheritanceForOneLayoutWithCode(ViewGroup parent) {
LinearLayout child = new LinearLayout(getActivity());
child.setLayoutDirection(LAYOUT_DIRECTION_INHERIT);
parent.addView(child);
// Parent is LTR
parent.setLayoutDirection(LAYOUT_DIRECTION_LTR);
assertEquals(LAYOUT_DIRECTION_LTR, parent.getLayoutDirection());
assertEquals(LAYOUT_DIRECTION_LTR, parent.getResolvedLayoutDirection());
assertEquals(LAYOUT_DIRECTION_INHERIT, child.getLayoutDirection());
assertEquals(LAYOUT_DIRECTION_LTR, child.getResolvedLayoutDirection());
// Parent is RTL
parent.setLayoutDirection(LAYOUT_DIRECTION_RTL);
assertEquals(LAYOUT_DIRECTION_RTL, parent.getLayoutDirection());
assertEquals(LAYOUT_DIRECTION_RTL, parent.getResolvedLayoutDirection());
assertEquals(LAYOUT_DIRECTION_INHERIT, child.getLayoutDirection());
assertEquals(LAYOUT_DIRECTION_RTL, child.getResolvedLayoutDirection());
}
@UiThreadTest
public void testDirectionInheritanceForAllLayoutsWithCode() {
checkDirectionInheritanceForOneLayoutWithCode(new LinearLayout(getActivity()));
checkDirectionInheritanceForOneLayoutWithCode(new FrameLayout(getActivity()));
checkDirectionInheritanceForOneLayoutWithCode(new TableLayout(getActivity()));
checkDirectionInheritanceForOneLayoutWithCode(new RelativeLayout(getActivity()));
checkDirectionInheritanceForOneLayoutWithCode(new GridLayout(getActivity()));
}
private void checkDirectionForOneLayoutFromXml(int parentId, int parentDir, int parentResDir,
int child1Id, int child1Dir, int child1ResDir,
int child2Id, int child2Dir, int child2ResDir,
int child3Id, int child3Dir, int child3ResDir,
int child4Id, int child4Dir, int child4ResDir) {
ViewGroup ll = (ViewGroup) getActivity().findViewById(parentId);
assertEquals(parentDir, ll.getLayoutDirection());
assertEquals(parentResDir, ll.getResolvedLayoutDirection());
ViewGroup child1 = (ViewGroup) getActivity().findViewById(child1Id);
assertEquals(child1Dir, child1.getLayoutDirection());
assertEquals(child1ResDir, child1.getResolvedLayoutDirection());
ViewGroup child2 = (ViewGroup) getActivity().findViewById(child2Id);
assertEquals(child2Dir, child2.getLayoutDirection());
assertEquals(child2ResDir, child2.getResolvedLayoutDirection());
ViewGroup child3 = (ViewGroup) getActivity().findViewById(child3Id);
assertEquals(child3Dir, child3.getLayoutDirection());
assertEquals(child3ResDir, child3.getResolvedLayoutDirection());
ViewGroup child4 = (ViewGroup) getActivity().findViewById(child4Id);
assertEquals(child4Dir, child4.getLayoutDirection());
assertEquals(child4ResDir, child4.getResolvedLayoutDirection());
}
@UiThreadTest
public void testDirectionFromXml() {
// We only test LinearLayout as the others would be the same (they extend ViewGroup / View)
checkDirectionForOneLayoutFromXml(
R.id.layout_linearlayout_ltr, LAYOUT_DIRECTION_LTR, LAYOUT_DIRECTION_LTR,
R.id.layout_linearlayout_ltr_child_1, LAYOUT_DIRECTION_LTR, LAYOUT_DIRECTION_LTR,
R.id.layout_linearlayout_ltr_child_2, LAYOUT_DIRECTION_RTL, LAYOUT_DIRECTION_RTL,
// parent is LTR
R.id.layout_linearlayout_ltr_child_3, LAYOUT_DIRECTION_INHERIT, LAYOUT_DIRECTION_LTR,
// running with English locale
R.id.layout_linearlayout_ltr_child_4, LAYOUT_DIRECTION_LOCALE, LAYOUT_DIRECTION_LTR);
checkDirectionForOneLayoutFromXml(
R.id.layout_linearlayout_rtl, LAYOUT_DIRECTION_RTL, LAYOUT_DIRECTION_RTL,
R.id.layout_linearlayout_rtl_child_1, LAYOUT_DIRECTION_LTR, LAYOUT_DIRECTION_LTR,
R.id.layout_linearlayout_rtl_child_2, LAYOUT_DIRECTION_RTL, LAYOUT_DIRECTION_RTL,
// parent is RTL
R.id.layout_linearlayout_rtl_child_3, LAYOUT_DIRECTION_INHERIT, LAYOUT_DIRECTION_RTL,
// running with English locale
R.id.layout_linearlayout_rtl_child_4, LAYOUT_DIRECTION_LOCALE, LAYOUT_DIRECTION_LTR);
checkDirectionForOneLayoutFromXml(
// default is LTR
R.id.layout_linearlayout_inherit, LAYOUT_DIRECTION_INHERIT, LAYOUT_DIRECTION_LTR,
R.id.layout_linearlayout_inherit_child_1, LAYOUT_DIRECTION_LTR, LAYOUT_DIRECTION_LTR,
R.id.layout_linearlayout_inherit_child_2, LAYOUT_DIRECTION_RTL, LAYOUT_DIRECTION_RTL,
// parent is LTR
R.id.layout_linearlayout_inherit_child_3, LAYOUT_DIRECTION_INHERIT, LAYOUT_DIRECTION_LTR,
// running with English locale
R.id.layout_linearlayout_inherit_child_4, LAYOUT_DIRECTION_LOCALE, LAYOUT_DIRECTION_LTR);
checkDirectionForOneLayoutFromXml(
// running with English locale
R.id.layout_linearlayout_locale, LAYOUT_DIRECTION_LOCALE, LAYOUT_DIRECTION_LTR,
R.id.layout_linearlayout_locale_child_1, LAYOUT_DIRECTION_LTR, LAYOUT_DIRECTION_LTR,
R.id.layout_linearlayout_locale_child_2, LAYOUT_DIRECTION_RTL, LAYOUT_DIRECTION_RTL,
// parent is LTR
R.id.layout_linearlayout_locale_child_3, LAYOUT_DIRECTION_INHERIT, LAYOUT_DIRECTION_LTR,
// running with English locale
R.id.layout_linearlayout_locale_child_4, LAYOUT_DIRECTION_LOCALE, LAYOUT_DIRECTION_LTR);
}
}