| /* |
| * Copyright (C) 2014 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.intellij.android.designer.model; |
| |
| import com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel; |
| import com.intellij.android.designer.designSurface.LayoutEditorTestBase; |
| |
| /** |
| * <p> |
| * TODO: |
| * <ul> |
| * <li>Test show included in</li> |
| * <li>Test merge cookies</li> |
| * <li>Test properties</li> |
| * <li>Test that the various keyed fields are available (module providers, tree decorators, etc)</li> |
| * <li>Test consistency (that parent and children pointers etc) all agree after a sync, that properties are always |
| * loaded and the layout params are consistent with the parent</li> |
| * <li>Test that when we switch between merge and non-merge roots, we properly update the model</li> |
| * <li>Test included rendering</li> |
| * <li>Test layout interactions</li> |
| * <li>Test resizing</li> |
| * <li>Test configuration changes</li> |
| * <li>Test model conversion coordinates</li> |
| * <li>Test zooming and painting!</li> |
| * </ul> |
| */ |
| public class RadModelBuilderTest extends LayoutEditorTestBase { |
| // Test that the model is updated correctly after edits |
| public void testAddComponent() throws Exception { |
| AndroidDesignerEditorPanel editor = createLayoutEditor(getTestFile("simple2.xml")); |
| RadViewComponent rootComponent = editor.getRootViewComponent(); |
| assertNotNull(rootComponent); |
| assertEquals("Device Screen\n" + |
| " LinearLayout (vertical)\n" + |
| " Button - \"My Button\"\n" + |
| " TextView - \"My TextView\"", |
| printTree(rootComponent, false)); |
| assertEquals("RadViewComponent{tag=<LinearLayout>, bounds=[0,0:768x1280}\n" + |
| " RadViewContainer{tag=<LinearLayout>, bounds=[0,100:768x1084}\n" + |
| " RadViewComponent{tag=<Button>, bounds=[0,100:768x200}\n" + |
| " RadViewComponent{tag=<TextView>, bounds=[0,300:400x220}", |
| printTree(rootComponent, true)); |
| |
| final RadViewComponent parent = (RadViewComponent)rootComponent.getChildren().get(0); |
| |
| RadViewComponent editText = addComponent(editor, parent, null, "EditText"); |
| setProperty(editor, editText, "text", "New Text Value"); |
| // Set size to predictable size to prevent test instability due to platform variations in font size and text layout |
| setProperty(editor, editText, "layout:width", "400px"); |
| setProperty(editor, editText, "layout:height", "200px"); |
| |
| editor.requestImmediateRender(); |
| |
| assertEquals("Device Screen\n" + |
| " LinearLayout (vertical)\n" + |
| " Button - \"My Button\"\n" + |
| " TextView - \"My TextView\"\n" + |
| " editText - \"New Text Value\"", |
| printTree(rootComponent, false) |
| ); |
| assertEquals("RadViewComponent{tag=<LinearLayout>, bounds=[0,0:768x1280}\n" + |
| " RadViewContainer{tag=<LinearLayout>, bounds=[0,100:768x1084}\n" + |
| " RadViewComponent{tag=<Button>, bounds=[0,100:768x200}\n" + |
| " RadViewComponent{tag=<TextView>, bounds=[0,300:400x220}\n" + |
| " RadViewComponent{tag=<EditText>, id=@+id/editText, bounds=[0,520:400x200}", |
| printTree(rootComponent, true)); |
| |
| // Also make sure the various state getters work correctly: |
| assertSame(editor, RadModelBuilder.getDesigner(editText)); |
| assertSame(editor.getModule(), RadModelBuilder.getModule(editText)); |
| assertSame(editor.getProject(), RadModelBuilder.getProject(editText)); |
| assertSame(editor.getTreeDecorator(), RadModelBuilder.getTreeDecorator(editText)); |
| assertSame(editor.getXmlFile(), RadModelBuilder.getXmlFile(editText)); |
| } |
| } |