Search in sources :

Example 36 with WXComponent

use of com.taobao.weex.ui.component.WXComponent in project incubator-weex by apache.

the class StatementTest method testVFor.

@Test
public void testVFor() throws Exception {
    WXCell cell = createVForNode();
    int count = 3;
    Statements.doRender(cell, createContext(count));
    Assert.assertTrue(cell.getChildCount() == 1);
    WXDiv div = (WXDiv) cell.getChild(0);
    Assert.assertEquals(div.getChildCount(), count);
    Assert.assertNotNull(div.getChild(0).getDomObject());
    Assert.assertNotNull(((WXDomObject) div.getChild(0).getDomObject()).getAttrs().getStatement());
    Assert.assertNull(((WXDomObject) div.getChild(1).getDomObject()).getAttrs().getStatement());
    WXComponent childOne = div.getChild(0);
    WXComponent childTwo = div.getChild(1);
    WXComponent childThree = div.getChild(2);
    count = 4;
    Statements.doRender(cell, createContext(count));
    Assert.assertTrue(cell.getChildCount() == 1);
    div = (WXDiv) cell.getChild(0);
    Assert.assertTrue(div.getChildCount() == count);
    Assert.assertSame(childOne, div.getChild(0));
    Assert.assertSame(childTwo, div.getChild(1));
    Assert.assertSame(childThree, div.getChild(2));
    WXComponent childFour = div.getChild(3);
    count = 5;
    Statements.doRender(cell, createContext(count));
    Assert.assertTrue(cell.getChildCount() == 1);
    div = (WXDiv) cell.getChild(0);
    Assert.assertTrue(div.getChildCount() == count);
    Assert.assertSame(childOne, div.getChild(0));
    Assert.assertSame(childTwo, div.getChild(1));
    Assert.assertSame(childThree, div.getChild(2));
    Assert.assertSame(childFour, div.getChild(3));
    count = 3;
    Statements.doRender(cell, createContext(count));
    Assert.assertTrue(cell.getChildCount() == 1);
    div = (WXDiv) cell.getChild(0);
    Assert.assertTrue(div.getChildCount() == 5);
    Assert.assertSame(childOne, div.getChild(0));
    Assert.assertSame(childTwo, div.getChild(1));
    Assert.assertSame(childThree, div.getChild(2));
    for (int i = count; i < 5; i++) {
        Assert.assertTrue(div.getChild(i).isWaste());
    }
}
Also used : WXDiv(com.taobao.weex.ui.component.WXDiv) WXDomObject(com.taobao.weex.dom.WXDomObject) WXComponent(com.taobao.weex.ui.component.WXComponent) WXCell(com.taobao.weex.ui.component.list.WXCell) WXSDKInstanceTest(com.taobao.weex.WXSDKInstanceTest) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 37 with WXComponent

use of com.taobao.weex.ui.component.WXComponent in project incubator-weex by apache.

the class DefaultDragHelperTest method onDragEnd.

@Test
public void onDragEnd() throws Exception {
    WXComponent c = new WXCell(WXSDKInstanceTest.createInstance(), new TestDomObject(), null, false);
    mFakeDragHelper.onDragEnd(c, 1, 2);
    verify(mockedEventTrigger).triggerEvent(eq("dragend"), anyMap());
}
Also used : WXComponent(com.taobao.weex.ui.component.WXComponent) TestDomObject(com.taobao.weex.dom.TestDomObject) WXSDKInstanceTest(com.taobao.weex.WXSDKInstanceTest) WXDivTest(com.taobao.weex.ui.component.WXDivTest) Test(org.junit.Test) ComponentTest(com.taobao.weex.ui.component.ComponentTest)

Example 38 with WXComponent

use of com.taobao.weex.ui.component.WXComponent in project incubator-weex by apache.

the class WXListComponentTest method testScrollTo.

@Test
public void testScrollTo() throws Exception {
    WXComponent child = WXDivTest.create(component);
    ComponentTest.create(child);
    component.addChild(child);
    child = WXHeaderTest.create(component);
    ComponentTest.create(child);
    component.addChild(child);
    Map<String, Object> options = new HashMap<>(2);
    options.put("offset", 10);
    options.put("animated", false);
    component.scrollTo(child, options);
}
Also used : WXComponent(com.taobao.weex.ui.component.WXComponent) HashMap(java.util.HashMap) WXDomObject(com.taobao.weex.dom.WXDomObject) WXListDomObject(com.taobao.weex.dom.WXListDomObject) Test(org.junit.Test) ComponentTest(com.taobao.weex.ui.component.ComponentTest) WXSDKInstanceTest(com.taobao.weex.WXSDKInstanceTest) WXHeaderTest(com.taobao.weex.ui.component.WXHeaderTest) WXDivTest(com.taobao.weex.ui.component.WXDivTest)

Example 39 with WXComponent

use of com.taobao.weex.ui.component.WXComponent in project incubator-weex by apache.

the class WXListComponentTest method testAppear.

@Test
public void testAppear() throws Exception {
    WXComponent child = WXDivTest.create(component);
    ComponentTest.create(child);
    component.addChild(child);
    component.bindAppearEvent(child);
    component.notifyAppearStateChange(0, 0, 0, 10);
}
Also used : WXComponent(com.taobao.weex.ui.component.WXComponent) Test(org.junit.Test) ComponentTest(com.taobao.weex.ui.component.ComponentTest) WXSDKInstanceTest(com.taobao.weex.WXSDKInstanceTest) WXHeaderTest(com.taobao.weex.ui.component.WXHeaderTest) WXDivTest(com.taobao.weex.ui.component.WXDivTest)

Example 40 with WXComponent

use of com.taobao.weex.ui.component.WXComponent in project incubator-weex by apache.

the class Statements method doRenderComponent.

/**
 *  @param component component with v-for statement, v-if statement and bind attrs
 *  @param context   execute context
 *  render component in context, the function do the following  work.
 *  execute component's v-for statement, v-if statement in context,
 *  and rebuild component's tree with the statement, v-for reuse component execute by pre render.
 *  if executed, component will be removed, don't remove, just mark it waste;
 *  may be next render it can be used.
 *  after statement has executed, render component's binding attrs in context and bind it to component.
 */
private static final int doRenderComponent(WXComponent component, CellRenderContext context, List<WXComponent> updates) {
    WXVContainer parent = component.getParent();
    WXDomObject domObject = (WXDomObject) component.getDomObject();
    WXAttr attrs = domObject.getAttrs();
    WXStatement statement = attrs.getStatement();
    if (statement != null) {
        WXDomObject parentDomObject = (WXDomObject) parent.getDomObject();
        Token vif = null;
        JSONObject vfor = null;
        if (statement.get(WXStatement.WX_IF) instanceof Token) {
            vif = (Token) statement.get(WXStatement.WX_IF);
        }
        if (statement.get(WXStatement.WX_FOR) instanceof JSONObject) {
            vfor = (JSONObject) statement.get(WXStatement.WX_FOR);
        }
        // execute v-for content
        if (vfor != null) {
            int renderIndex = parent.indexOf(component);
            if (vfor.get(WXStatement.WX_FOR_LIST) instanceof Token) {
                Token listBlock = (Token) vfor.get(WXStatement.WX_FOR_LIST);
                String indexKey = vfor.getString(WXStatement.WX_FOR_INDEX);
                String itemKey = vfor.getString(WXStatement.WX_FOR_ITEM);
                Object data = null;
                if (listBlock != null) {
                    data = listBlock.execute(context.stack);
                }
                if ((data instanceof List || data instanceof Map)) {
                    Collection collection = null;
                    Map map = null;
                    if (data instanceof List) {
                        collection = (List) data;
                    } else {
                        map = (Map) data;
                        collection = map.keySet();
                    }
                    Map<String, Object> loop = new HashMap<>();
                    int index = 0;
                    for (Object item : collection) {
                        Object key = null;
                        Object value = item;
                        if (map == null) {
                            key = index;
                            value = item;
                        } else {
                            key = item;
                            value = map.get(item);
                        }
                        if (indexKey != null) {
                            loop.put(indexKey, key);
                        }
                        if (itemKey != null) {
                            loop.put(itemKey, value);
                        } else {
                            context.stack.push(value);
                        }
                        if (loop.size() > 0) {
                            context.stack.push(loop);
                        }
                        if (vif != null) {
                            if (!Operators.isTrue(vif.execute(context.stack))) {
                                continue;
                            }
                        }
                        // find resuable renderNode
                        WXComponent renderNode = null;
                        if (renderIndex < parent.getChildCount()) {
                            renderNode = parent.getChild(renderIndex);
                            // check is same statment, if true, it is usabled.
                            if (!isCreateFromNodeStatement(renderNode, component)) {
                                renderNode = null;
                            }
                            if (renderNode != null) {
                                if (renderNode.isWaste()) {
                                    renderNode.setWaste(false);
                                }
                            }
                        }
                        // none resuable render node, create node, add to parent, but clear node's statement
                        if (renderNode == null) {
                            long start = System.currentTimeMillis();
                            renderNode = copyComponentTree(component, parent);
                            renderNode.setWaste(false);
                            WXDomObject renderNodeDomObject = (WXDomObject) renderNode.getDomObject();
                            if (renderNodeDomObject.getAttrs().getStatement() != null) {
                                renderNodeDomObject.getAttrs().getStatement().remove(WXStatement.WX_FOR);
                                // clear node's statement
                                renderNodeDomObject.getAttrs().getStatement().remove(WXStatement.WX_IF);
                            }
                            parentDomObject.add(renderNodeDomObject, renderIndex);
                            parent.addChild(renderNode, renderIndex);
                            updates.add(renderNode);
                            if (WXEnvironment.isApkDebugable()) {
                                WXLogUtils.d(WXRecyclerTemplateList.TAG, Thread.currentThread().getName() + renderNode.getRef() + renderNode.getDomObject().getType() + "statements copy component tree used " + (System.currentTimeMillis() - start));
                            }
                        }
                        doBindingAttrsEventAndRenderChildNode(renderNode, (WXDomObject) renderNode.getDomObject(), context, updates);
                        renderIndex++;
                        if (loop.size() > 0) {
                            context.stack.push(loop);
                        }
                        if (itemKey == null) {
                            context.stack.pop();
                        }
                    }
                }
            } else {
                WXLogUtils.e(WXRecyclerTemplateList.TAG, vfor.toJSONString() + " not call vfor block, for pre compile");
            }
            // after v-for execute, remove component created pre v-for.
            for (; renderIndex < parent.getChildCount(); renderIndex++) {
                WXComponent wasteNode = parent.getChild(renderIndex);
                if (!isCreateFromNodeStatement(wasteNode, component)) {
                    break;
                }
                wasteNode.setWaste(true);
            }
            return renderIndex - parent.indexOf(component);
        }
        // execute v-if context
        if (vif != null) {
            if (!Operators.isTrue(vif.execute(context.stack))) {
                component.setWaste(true);
                return 1;
            } else {
                component.setWaste(false);
            }
        }
    }
    doBindingAttrsEventAndRenderChildNode(component, domObject, context, updates);
    return 1;
}
Also used : WXComponent(com.taobao.weex.ui.component.WXComponent) HashMap(java.util.HashMap) Token(com.taobao.weex.el.parse.Token) WXStatement(com.taobao.weex.dom.binding.WXStatement) WXVContainer(com.taobao.weex.ui.component.WXVContainer) WXDomObject(com.taobao.weex.dom.WXDomObject) JSONObject(com.alibaba.fastjson.JSONObject) Collection(java.util.Collection) WXDomObject(com.taobao.weex.dom.WXDomObject) JSONObject(com.alibaba.fastjson.JSONObject) ArrayList(java.util.ArrayList) WXRecyclerTemplateList(com.taobao.weex.ui.component.list.template.WXRecyclerTemplateList) List(java.util.List) HashMap(java.util.HashMap) ArrayMap(android.support.v4.util.ArrayMap) Map(java.util.Map) WXAttr(com.taobao.weex.dom.WXAttr)

Aggregations

WXComponent (com.taobao.weex.ui.component.WXComponent)101 Point (android.graphics.Point)21 WXDomObject (com.taobao.weex.dom.WXDomObject)20 WXVContainer (com.taobao.weex.ui.component.WXVContainer)19 HashMap (java.util.HashMap)13 View (android.view.View)9 WXSDKInstanceTest (com.taobao.weex.WXSDKInstanceTest)9 WXRecyclerView (com.taobao.weex.ui.view.listview.WXRecyclerView)9 Map (java.util.Map)9 Test (org.junit.Test)9 ArrayMap (android.support.v4.util.ArrayMap)8 RecyclerView (android.support.v7.widget.RecyclerView)8 JSONObject (com.alibaba.fastjson.JSONObject)8 WXSDKInstance (com.taobao.weex.WXSDKInstance)8 ComponentTest (com.taobao.weex.ui.component.ComponentTest)8 WXDivTest (com.taobao.weex.ui.component.WXDivTest)8 Scrollable (com.taobao.weex.ui.component.Scrollable)6 WXBaseRefresh (com.taobao.weex.ui.component.WXBaseRefresh)6 WXHeaderTest (com.taobao.weex.ui.component.WXHeaderTest)6 AppearanceHelper (com.taobao.weex.ui.component.AppearanceHelper)5