/* * Copyright (C) 2011 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.tools.lint.checks; import static com.android.tools.lint.checks.GridLayoutDetector.getNewValue; import static com.android.tools.lint.checks.GridLayoutDetector.getOldValue; import static com.android.tools.lint.detector.api.TextFormat.TEXT; import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.Location; import com.android.tools.lint.detector.api.Severity; @SuppressWarnings("javadoc") public class GridLayoutDetectorTest extends AbstractCheckTest { @Override protected Detector getDetector() { return new GridLayoutDetector(); } public void testGridLayout1() throws Exception { assertEquals( "res/layout/gridlayout.xml:36: Error: Column attribute (3) exceeds declared grid column count (2) [GridLayout]\n" + " android:layout_column=\"3\"\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~\n" + "1 errors, 0 warnings\n" + "", lintFiles("res/layout/gridlayout.xml")); } public void testGridLayout2() throws Exception { assertEquals("" + "res/layout/layout.xml:9: Error: Wrong namespace; with v7 GridLayout you should use myns:orientation [GridLayout]\n" + " android:orientation=\"horizontal\">\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + "res/layout/layout.xml:14: Error: Wrong namespace; with v7 GridLayout you should use myns:layout_row [GridLayout]\n" + " android:layout_row=\"2\"\n" + " ~~~~~~~~~~~~~~~~~~~~~~\n" + "2 errors, 0 warnings\n", lintFiles("res/layout/gridlayout2.xml=>res/layout/layout.xml")); } public void testGridLayout3() throws Exception { assertEquals("" + "res/layout/layout.xml:12: Error: Wrong namespace; with v7 GridLayout you should use app:layout_row " + "(and add xmlns:app=\"http://schemas.android.com/apk/res-auto\" to your root element.) [GridLayout]\n" + " android:layout_row=\"2\" />\n" + " ~~~~~~~~~~~~~~~~~~~~~~\n" + "1 errors, 0 warnings\n", lintFiles("res/layout/gridlayout3.xml=>res/layout/layout.xml")); } public void testGridLayout4() throws Exception { assertEquals("" + "res/layout/layout.xml:6: Error: Wrong namespace; with v7 GridLayout you should use app:orientation (and add xmlns:app=\"http://schemas.android.com/apk/res-auto\" to your root element.) [GridLayout]\n" + " android:orientation=\"horizontal\">\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + "res/layout/layout.xml:12: Error: Wrong namespace; with v7 GridLayout you should use app:layout_columnWeight (and add xmlns:app=\"http://schemas.android.com/apk/res-auto\" to your root element.) [GridLayout]\n" + " android:layout_columnWeight=\"2\"\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + "res/layout/layout.xml:13: Error: Wrong namespace; with v7 GridLayout you should use app:layout_gravity (and add xmlns:app=\"http://schemas.android.com/apk/res-auto\" to your root element.) [GridLayout]\n" + " android:layout_gravity=\"fill\"\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + "res/layout/layout.xml:20: Error: Wrong namespace; with v7 GridLayout you should use app:layout_gravity (and add xmlns:app=\"http://schemas.android.com/apk/res-auto\" to your root element.) [GridLayout]\n" + " android:layout_gravity=\"fill\"\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + "res/layout/layout.xml:22: Error: Wrong namespace; with v7 GridLayout you should use app:layout_columnWeight (and add xmlns:app=\"http://schemas.android.com/apk/res-auto\" to your root element.) [GridLayout]\n" + " android:layout_columnWeight=\"1\"\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + "5 errors, 0 warnings\n", lintFiles("res/layout/gridlayout4.xml=>res/layout/layout.xml")); } public void testGetOldValue() { assertEquals("android:layout_row", getOldValue("Wrong namespace; with v7 GridLayout you should use app:layout_row", TEXT)); assertEquals("android:layout_row", getOldValue("Wrong namespace; with v7 GridLayout you should use app:layout_row " + "(and add xmlns:app=\"http://schemas.android.com/apk/res-auto\" to " + "your root element.)", TEXT)); } public void testGetNewValue() { assertNotNull("app:layout_row", getNewValue("Wrong namespace; with v7 GridLayout you should use app:layout_row", TEXT)); assertNotNull("app:layout_row", getNewValue("Wrong namespace; with v7 GridLayout you should use app:layout_row" + "(and add xmlns:app=\"http://schemas.android.com/apk/res-auto\" to " + "your root element.)", TEXT)); } @Override protected void checkReportedError(@NonNull Context context, @NonNull Issue issue, @NonNull Severity severity, @Nullable Location location, @NonNull String message) { if (message.contains("with v7 GridLayout")) { assertNotNull(message, getOldValue(message, TEXT)); assertNotNull(message, getNewValue(message, TEXT)); } } }