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());
}
}
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());
}
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);
}
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);
}
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;
}
Aggregations