/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php * * 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.ide.eclipse.adt.internal.editors.layout.refactoring; import static com.android.SdkConstants.FQCN_GRID_LAYOUT; import static com.android.SdkConstants.FQCN_LINEAR_LAYOUT; import static com.android.SdkConstants.FQCN_RELATIVE_LAYOUT; import com.android.ide.eclipse.adt.internal.editors.layout.gle2.CanvasViewInfo; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.ltk.core.refactoring.Change; import org.w3c.dom.Element; import java.util.Collections; import java.util.List; @SuppressWarnings("javadoc") public class ChangeLayoutRefactoringTest extends RefactoringTest { public void testChangeLayout1a() throws Exception { // Test a basic layout which performs some nesting -- tests basic grid layout conversion checkRefactoring("sample1a.xml", true); } public void testChangeLayout1b() throws Exception { // Same as 1a, but with different formatting to look for edit handling to for example // remove a line that is made empty when its only attribute is removed checkRefactoring("sample1b.xml", true); } public void testChangeLayout2() throws Exception { // Test code which analyzes an embedded RelativeLayout checkRefactoring("sample2.xml", true); } public void testChangeLayout3() throws Exception { // Test handling of LinearLayout "weight" attributes on its children: the child with // weight > 0 should fill and subsequent children attach on the bottom/right checkRefactoring("sample3.xml", true); } public void testChangeLayout4() throws Exception { checkRefactoring("sample4.xml", true); } public void testChangeLayout5() throws Exception { // Test handling of LinearLayout "gravity" attributes on its children checkRefactoring("sample5.xml", true); } public void testChangeLayout6() throws Exception { // Check handling of the LinearLayout "baseline" attribute checkRefactoring("sample6.xml", true); } public void testGridLayout1() throws Exception { checkRefactoring(FQCN_GRID_LAYOUT, "sample1a.xml", true); } public void testGridLayout2() throws Exception { // Test code which analyzes an embedded RelativeLayout checkRefactoring(FQCN_GRID_LAYOUT, "sample2.xml", true); } public void testGridLayout5() throws Exception { // Test handling of LinearLayout "gravity" attributes on its children checkRefactoring(FQCN_GRID_LAYOUT, "sample5.xml", true); } public void testConvertToGrid() throws Exception { checkRefactoring(FQCN_GRID_LAYOUT, "sample9.xml", true); } public void testConvertFromGrid() throws Exception { checkRefactoring(FQCN_LINEAR_LAYOUT, "sample10.xml", true); } private void checkRefactoring(String basename, boolean flatten) throws Exception { checkRefactoring(FQCN_RELATIVE_LAYOUT, basename, flatten); } public void testInitialAttributes() throws Exception { checkRefactoring(FQCN_LINEAR_LAYOUT, "sample10.xml", true, "android:orientation=vertical"); } public void testInsertSpacer() throws Exception { checkRefactoring(FQCN_GRID_LAYOUT, "sample11.xml", true); } private void checkRefactoring(String newLayoutType, String basename, boolean flatten) throws Exception { checkRefactoring(newLayoutType, basename, flatten, null); } @Override protected int getMinSdk() { return 14; } private void checkRefactoring(String newLayoutType, String basename, boolean flatten, String initialAttributes) throws Exception { IFile file = getLayoutFile(getProject(), basename); TestContext info = setupTestContext(file, basename); TestLayoutEditorDelegate layoutEditor = info.mLayoutEditorDelegate; CanvasViewInfo rootView = info.mRootView; Element element = info.mElement; List<Element> selectedElements = Collections.singletonList(element); ChangeLayoutRefactoring refactoring = new ChangeLayoutRefactoring(selectedElements, layoutEditor); refactoring.setFlatten(flatten); refactoring.setType(newLayoutType); if (initialAttributes != null) { refactoring.setInitializedAttributes(initialAttributes); } refactoring.setRootView(rootView); List<Change> changes = refactoring.computeChanges(new NullProgressMonitor()); checkEdits(basename, changes); } }