Repository: incubator-weex Updated Branches: refs/heads/0.12-dev c6349812e -> a67604ced
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java deleted file mode 100755 index 0e621c1..0000000 --- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java +++ /dev/null @@ -1,556 +0,0 @@ -/** - * - * Apache License - * Version 2.0, January 2004 - * http://www.apache.org/licenses/ - * - * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - * - * 1. Definitions. - * - * "License" shall mean the terms and conditions for use, reproduction, - * and distribution as defined by Sections 1 through 9 of this document. - * - * "Licensor" shall mean the copyright owner or entity authorized by - * the copyright owner that is granting the License. - * - * "Legal Entity" shall mean the union of the acting entity and all - * other entities that control, are controlled by, or are under common - * control with that entity. For the purposes of this definition, - * "control" means (i) the power, direct or indirect, to cause the - * direction or management of such entity, whether by contract or - * otherwise, or (ii) ownership of fifty percent (50%) or more of the - * outstanding shares, or (iii) beneficial ownership of such entity. - * - * "You" (or "Your") shall mean an individual or Legal Entity - * exercising permissions granted by this License. - * - * "Source" form shall mean the preferred form for making modifications, - * including but not limited to software source code, documentation - * source, and configuration files. - * - * "Object" form shall mean any form resulting from mechanical - * transformation or translation of a Source form, including but - * not limited to compiled object code, generated documentation, - * and conversions to other media types. - * - * "Work" shall mean the work of authorship, whether in Source or - * Object form, made available under the License, as indicated by a - * copyright notice that is included in or attached to the work - * (an example is provided in the Appendix below). - * - * "Derivative Works" shall mean any work, whether in Source or Object - * form, that is based on (or derived from) the Work and for which the - * editorial revisions, annotations, elaborations, or other modifications - * represent, as a whole, an original work of authorship. For the purposes - * of this License, Derivative Works shall not include works that remain - * separable from, or merely link (or bind by name) to the interfaces of, - * the Work and Derivative Works thereof. - * - * "Contribution" shall mean any work of authorship, including - * the original version of the Work and any modifications or additions - * to that Work or Derivative Works thereof, that is intentionally - * submitted to Licensor for inclusion in the Work by the copyright owner - * or by an individual or Legal Entity authorized to submit on behalf of - * the copyright owner. For the purposes of this definition, "submitted" - * means any form of electronic, verbal, or written communication sent - * to the Licensor or its representatives, including but not limited to - * communication on electronic mailing lists, source code control systems, - * and issue tracking systems that are managed by, or on behalf of, the - * Licensor for the purpose of discussing and improving the Work, but - * excluding communication that is conspicuously marked or otherwise - * designated in writing by the copyright owner as "Not a Contribution." - * - * "Contributor" shall mean Licensor and any individual or Legal Entity - * on behalf of whom a Contribution has been received by Licensor and - * subsequently incorporated within the Work. - * - * 2. Grant of Copyright License. Subject to the terms and conditions of - * this License, each Contributor hereby grants to You a perpetual, - * worldwide, non-exclusive, no-charge, royalty-free, irrevocable - * copyright license to reproduce, prepare Derivative Works of, - * publicly display, publicly perform, sublicense, and distribute the - * Work and such Derivative Works in Source or Object form. - * - * 3. Grant of Patent License. Subject to the terms and conditions of - * this License, each Contributor hereby grants to You a perpetual, - * worldwide, non-exclusive, no-charge, royalty-free, irrevocable - * (except as stated in this section) patent license to make, have made, - * use, offer to sell, sell, import, and otherwise transfer the Work, - * where such license applies only to those patent claims licensable - * by such Contributor that are necessarily infringed by their - * Contribution(s) alone or by combination of their Contribution(s) - * with the Work to which such Contribution(s) was submitted. If You - * institute patent litigation against any entity (including a - * cross-claim or counterclaim in a lawsuit) alleging that the Work - * or a Contribution incorporated within the Work constitutes direct - * or contributory patent infringement, then any patent licenses - * granted to You under this License for that Work shall terminate - * as of the date such litigation is filed. - * - * 4. Redistribution. You may reproduce and distribute copies of the - * Work or Derivative Works thereof in any medium, with or without - * modifications, and in Source or Object form, provided that You - * meet the following conditions: - * - * (a) You must give any other recipients of the Work or - * Derivative Works a copy of this License; and - * - * (b) You must cause any modified files to carry prominent notices - * stating that You changed the files; and - * - * (c) You must retain, in the Source form of any Derivative Works - * that You distribute, all copyright, patent, trademark, and - * attribution notices from the Source form of the Work, - * excluding those notices that do not pertain to any part of - * the Derivative Works; and - * - * (d) If the Work includes a "NOTICE" text file as part of its - * distribution, then any Derivative Works that You distribute must - * include a readable copy of the attribution notices contained - * within such NOTICE file, excluding those notices that do not - * pertain to any part of the Derivative Works, in at least one - * of the following places: within a NOTICE text file distributed - * as part of the Derivative Works; within the Source form or - * documentation, if provided along with the Derivative Works; or, - * within a display generated by the Derivative Works, if and - * wherever such third-party notices normally appear. The contents - * of the NOTICE file are for informational purposes only and - * do not modify the License. You may add Your own attribution - * notices within Derivative Works that You distribute, alongside - * or as an addendum to the NOTICE text from the Work, provided - * that such additional attribution notices cannot be construed - * as modifying the License. - * - * You may add Your own copyright statement to Your modifications and - * may provide additional or different license terms and conditions - * for use, reproduction, or distribution of Your modifications, or - * for any such Derivative Works as a whole, provided Your use, - * reproduction, and distribution of the Work otherwise complies with - * the conditions stated in this License. - * - * 5. Submission of Contributions. Unless You explicitly state otherwise, - * any Contribution intentionally submitted for inclusion in the Work - * by You to the Licensor shall be under the terms and conditions of - * this License, without any additional terms or conditions. - * Notwithstanding the above, nothing herein shall supersede or modify - * the terms of any separate license agreement you may have executed - * with Licensor regarding such Contributions. - * - * 6. Trademarks. This License does not grant permission to use the trade - * names, trademarks, service marks, or product names of the Licensor, - * except as required for reasonable and customary use in describing the - * origin of the Work and reproducing the content of the NOTICE file. - * - * 7. Disclaimer of Warranty. Unless required by applicable law or - * agreed to in writing, Licensor provides the Work (and each - * Contributor provides its Contributions) on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied, including, without limitation, any warranties or conditions - * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - * PARTICULAR PURPOSE. You are solely responsible for determining the - * appropriateness of using or redistributing the Work and assume any - * risks associated with Your exercise of permissions under this License. - * - * 8. Limitation of Liability. In no event and under no legal theory, - * whether in tort (including negligence), contract, or otherwise, - * unless required by applicable law (such as deliberate and grossly - * negligent acts) or agreed to in writing, shall any Contributor be - * liable to You for damages, including any direct, indirect, special, - * incidental, or consequential damages of any character arising as a - * result of this License or out of the use or inability to use the - * Work (including but not limited to damages for loss of goodwill, - * work stoppage, computer failure or malfunction, or any and all - * other commercial damages or losses), even if such Contributor - * has been advised of the possibility of such damages. - * - * 9. Accepting Warranty or Additional Liability. While redistributing - * the Work or Derivative Works thereof, You may choose to offer, - * and charge a fee for, acceptance of support, warranty, indemnity, - * or other liability obligations and/or rights consistent with this - * License. However, in accepting such obligations, You may act only - * on Your own behalf and on Your sole responsibility, not on behalf - * of any other Contributor, and only if You agree to indemnify, - * defend, and hold each Contributor harmless for any liability - * incurred by, or claims asserted against, such Contributor by reason - * of your accepting any such warranty or additional liability. - * - * END OF TERMS AND CONDITIONS - * - * APPENDIX: How to apply the Apache License to your work. - * - * To apply the Apache License to your work, attach the following - * boilerplate notice, with the fields enclosed by brackets "[]" - * replaced with your own identifying information. (Don't include - * the brackets!) The text should be enclosed in the appropriate - * comment syntax for the file format. We also recommend that a - * file or class name and description of purpose be included on the - * same "printed page" as the copyright notice for easier - * identification within third-party archives. - * - * Copyright 2016 Alibaba Group - * - * 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.taobao.weex.ui; - -import android.graphics.Rect; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.widget.ScrollView; - -import com.alibaba.fastjson.JSONObject; -import com.taobao.weex.WXEnvironment; -import com.taobao.weex.WXSDKInstance; -import com.taobao.weex.WXSDKManager; -import com.taobao.weex.bridge.JSCallback; -import com.taobao.weex.common.WXRenderStrategy; -import com.taobao.weex.dom.WXDomObject; -import com.taobao.weex.dom.flex.Spacing; -import com.taobao.weex.ui.animation.WXAnimationBean; -import com.taobao.weex.ui.animation.WXAnimationModule; -import com.taobao.weex.ui.component.Scrollable; -import com.taobao.weex.ui.component.WXComponent; -import com.taobao.weex.ui.component.WXComponentFactory; -import com.taobao.weex.ui.component.WXScroller; -import com.taobao.weex.ui.component.WXVContainer; -import com.taobao.weex.utils.WXLogUtils; -import com.taobao.weex.utils.WXViewUtils; - -import java.util.HashMap; -import java.util.Map; - -/** - * Class for rendering view. Method in this class should be run in main thread. - * This class is also <strong>not</storng> thread safe. - * This class is very similar to {@link com.taobao.weex.dom.WXDomStatement} - * @see com.taobao.weex.dom.WXDomStatement - */ -class WXRenderStatement { - - private Map<String, WXComponent> mRegistry; - private WXSDKInstance mWXSDKInstance; - /** - * The container for weex root view. - */ - - public WXRenderStatement(WXSDKInstance instance) { - mWXSDKInstance = instance; - mRegistry = new HashMap<>(); - } - - /** - * @see com.taobao.weex.dom.WXDomStatement#destroy() - */ - public void destroy() { - mWXSDKInstance = null; - mRegistry.clear(); - } - - public WXSDKInstance getWXSDKInstance() { - return mWXSDKInstance; - } - - /** - * create RootView ï¼every weex Instance View has a rootView; - * @see com.taobao.weex.dom.WXDomStatement#createBody(JSONObject) - */ - void createBody(WXComponent component) { - long start = System.currentTimeMillis(); - component.createView(); - if (WXEnvironment.isApkDebugable()) { - WXLogUtils.renderPerformanceLog("createView", (System.currentTimeMillis() - start)); - } - start = System.currentTimeMillis(); - component.applyLayoutAndEvent(component); - component.bindData(component); - - if (WXEnvironment.isApkDebugable()) { - WXLogUtils.renderPerformanceLog("bind", (System.currentTimeMillis() - start)); - } - - if (component instanceof WXScroller) { - WXScroller scroller = (WXScroller) component; - if (scroller.getInnerView() instanceof ScrollView) { - mWXSDKInstance.setRootScrollView((ScrollView) scroller.getInnerView()); - } - } - mWXSDKInstance.onRootCreated(component); - if (mWXSDKInstance.getRenderStrategy() != WXRenderStrategy.APPEND_ONCE) { - mWXSDKInstance.onCreateFinish(); - } - } - - WXComponent createBodyOnDomThread(WXDomObject dom) { - if (mWXSDKInstance == null) { - return null; - } - - WXComponent rootComp = generateComponentTree(dom, null); - return rootComp; - } - - /** - * set padding style of View - */ - void setPadding(String ref, Spacing padding, Spacing border) { - WXComponent component = mRegistry.get(ref); - if (component == null) { - return; - } - component.setPadding(padding, border); - } - - /** - * set layout information of View - */ - void setLayout(String ref, WXDomObject domObject) { - WXComponent component = mRegistry.get(ref); - if (component == null) { - return; - } - component.setLayout(domObject); - } - - /** - * set extra information of View - */ - void setExtra(String ref, Object extra) { - WXComponent component = mRegistry.get(ref); - if (component == null) { - return; - } - component.updateExtra(extra); - } - - /** - * @see com.taobao.weex.dom.WXDomStatement#addDom(JSONObject, String, int) - */ - void addComponent(WXDomObject dom, String parentRef, int index) { - WXVContainer parent = (WXVContainer) mRegistry.get(parentRef); - WXComponent component = generateComponentTree(dom, parent); - parent.addChild(component, index); - } - - @Nullable WXComponent createComponentOnDomThread(WXDomObject dom, String parentRef, int index) { - WXComponent comp = mRegistry.get(parentRef); - if(comp == null || !(comp instanceof WXVContainer)){ - return null; - } - return generateComponentTree(dom, (WXVContainer) comp); - } - - /** - * @see com.taobao.weex.dom.WXDomStatement#addDom(JSONObject, String, int) - */ - void addComponent(WXComponent component, String parentRef, int index) { - WXVContainer parent = (WXVContainer) mRegistry.get(parentRef); - if (parent == null || component == null) { - return; - } - - parent.addChild(component, index); - parent.createChildViewAt(index); - component.applyLayoutAndEvent(component); - component.bindData(component); - } - - /** - *@see com.taobao.weex.dom.WXDomStatement#removeDom(String) - */ - WXComponent removeComponent(String ref) { - WXComponent component = mRegistry.get(ref); - if (component == null || component.getParent() == null) { - return component; - } - WXVContainer parent = component.getParent(); - clearRegistryForComponent(component); - parent.remove(component,true); - mRegistry.remove(ref); - return component; - } - - public WXComponent getComponent(String ref) { - return mRegistry.get(ref); - } - - /** - * Clear registry information that current instance contains. - */ - private void clearRegistryForComponent(WXComponent component) { - WXComponent removedComponent = mRegistry.remove(component.getDomObject().getRef()); - if (removedComponent != null) { - removedComponent.removeAllEvent(); - removedComponent.removeStickyStyle(); - } - if (component instanceof WXVContainer) { - WXVContainer container = (WXVContainer) component; - int count = container.childCount(); - for (int i = count - 1; i >= 0; --i) { - clearRegistryForComponent(container.getChild(i)); - } - } - - } - - /** - * @see com.taobao.weex.dom.WXDomStatement#moveDom(String, String, int) - */ - void move(String ref, String parentRef, int index) { - WXComponent component = mRegistry.get(ref); - WXComponent newParent = mRegistry.get(parentRef); - if (component == null || component.getParent() == null - || newParent == null || !(newParent instanceof WXVContainer)) { - return; - } - WXVContainer oldParent = component.getParent(); - oldParent.remove(component,false); - ((WXVContainer) newParent).addChild(component, index); - } - - /** - * @see com.taobao.weex.dom.WXDomStatement#addEvent(String, String) - */ - void addEvent(String ref, String type) { - WXComponent component = mRegistry.get(ref); - if (component == null) { - return ; - } - component.addEvent(type); - } - - /** - * @see WXDomObject#removeEvent(String) - */ - void removeEvent(String ref, String type) { - WXComponent component = mRegistry.get(ref); - if (component == null) { - return ; - } - component.removeEvent(type); - } - - /** - * @see com.taobao.weex.dom.WXDomStatement#updateAttrs(String, JSONObject) - */ - void updateAttrs(String ref, Map<String, Object> attrs) { - WXComponent component = mRegistry.get(ref); - if (component == null) { - return; - } - - component.updateProperties(attrs); - } - - /** - * @see com.taobao.weex.dom.WXDomStatement#updateStyle(String, JSONObject) - */ - void updateStyle(String ref, Map<String, Object> style) { - WXComponent component = mRegistry.get(ref); - if (component == null) { - return; - } - - component.updateProperties(style); - } - - /** - * @see com.taobao.weex.dom.WXDomStatement#scrollToDom(String, JSONObject) - */ - void scrollTo(String ref, Map<String, Object> options) { - WXComponent component = mRegistry.get(ref); - if (component == null) { - return; - } - - Scrollable scroller = component.getParentScroller(); - if (scroller == null) { - return; - } - scroller.scrollTo(component,options); - } - - /** - * weex render finish - * @see com.taobao.weex.dom.WXDomStatement#createFinish() - */ - void createFinish(int width, int height) { - if (mWXSDKInstance.getRenderStrategy() == WXRenderStrategy.APPEND_ONCE) { - mWXSDKInstance.onCreateFinish(); - } - mWXSDKInstance.onRenderSuccess(width, height); - } - - /** - * weex refresh finish - * @see com.taobao.weex.dom.WXDomStatement#refreshFinish() - */ - void refreshFinish(int width, int height) { - mWXSDKInstance.onRefreshSuccess(width, height); - } - - /** - * weex refresh finish - * @see WXSDKInstance#onUpdateFinish() - */ - void updateFinish() { - mWXSDKInstance.onUpdateFinish(); - } - - - private WXComponent generateComponentTree(WXDomObject dom, WXVContainer parent) { - if (dom == null ) { - return null; - } - WXComponent component = WXComponentFactory.newInstance(mWXSDKInstance, dom,parent); - - mRegistry.put(dom.getRef(), component); - if (component instanceof WXVContainer) { - WXVContainer parentC = (WXVContainer) component; - int count = dom.childCount(); - WXDomObject child = null; - for (int i = 0; i < count; ++i) { - child = dom.getChild(i); - if (child != null) { - parentC.addChild(generateComponentTree(child, parentC)); - } - } - } - - return component; - } - - void startAnimation(@NonNull String ref, @NonNull WXAnimationBean animationBean, @Nullable String callBack) { - WXAnimationModule.startAnimation(mWXSDKInstance, mRegistry.get(ref), animationBean, callBack); - } - - public void getComponentSize(String ref, JSCallback callback) { - WXComponent component = mRegistry.get(ref); - Map<String, Object> options = new HashMap<>(); - if (component != null) { - Map<String, Float> size = new HashMap<>(); - Rect sizes = component.getComponentSize(); - size.put("width", WXViewUtils.getWebPxByWidth(sizes.width(),mWXSDKInstance.getInstanceViewPortWidth())); - size.put("height", WXViewUtils.getWebPxByWidth(sizes.height(),mWXSDKInstance.getInstanceViewPortWidth())); - size.put("bottom",WXViewUtils.getWebPxByWidth(sizes.bottom,mWXSDKInstance.getInstanceViewPortWidth())); - size.put("left",WXViewUtils.getWebPxByWidth(sizes.left,mWXSDKInstance.getInstanceViewPortWidth())); - size.put("right",WXViewUtils.getWebPxByWidth(sizes.right,mWXSDKInstance.getInstanceViewPortWidth())); - size.put("top",WXViewUtils.getWebPxByWidth(sizes.top,mWXSDKInstance.getInstanceViewPortWidth())); - options.put("size", size); - options.put("result", true); - } else { - options.put("errMsg", "Component does not exist"); - } - callback.invoke(options); - } -} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java index 9da8f4d..a06ae41 100755 --- a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java @@ -355,7 +355,7 @@ public class WXAnimationModule extends WXModule { @Override public void onAnimationEnd(Animator animation) { if (instance == null) { - WXLogUtils.e("WXRenderStatement-onAnimationEnd WXSDKInstance == null NPE"); + WXLogUtils.e("RenderActionContextImpl-onAnimationEnd WXSDKInstance == null NPE"); } else { WXSDKManager.getInstance().callback(instance.getInstanceId(), callBack, http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java index 3319414..8f00f38 100755 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java @@ -159,9 +159,11 @@ import com.taobao.weex.common.IWXObject; import com.taobao.weex.common.WXRuntimeException; import com.taobao.weex.dom.ImmutableDomObject; import com.taobao.weex.dom.WXDomHandler; +import com.taobao.weex.dom.WXDomManager; import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.dom.WXDomTask; import com.taobao.weex.dom.WXStyle; +import com.taobao.weex.dom.action.Actions; import com.taobao.weex.dom.flex.Spacing; import com.taobao.weex.ui.IFComponentHolder; import com.taobao.weex.ui.animation.WXAnimationModule; @@ -821,15 +823,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi * @param type */ protected void appendEventToDOM(String type){ - Message message = Message.obtain(); - WXDomTask task = new WXDomTask(); - task.instanceId = getInstanceId(); - task.args = new ArrayList<>(); - task.args.add(getRef()); - task.args.add(type); - message.obj = task; - message.what = WXDomHandler.MsgType.WX_DOM_ADD_EVENT; - WXSDKManager.getInstance().getWXDomManager().sendMessage(message); + WXSDKManager.getInstance().getWXDomManager().postAction(getInstanceId(), Actions.getAddEvent(getRef(),type),false); } /** http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java b/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java index 7819a8f..3e68d7c 100644 --- a/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java @@ -216,7 +216,7 @@ import static org.junit.Assert.*; public class WXSDKManagerTest { public static void setRenderManager(WXRenderManager rm){ - WXSDKManager.getInstance().mWXRenderManager = rm; + WXSDKManager.initInstance(rm); } public static void setInstance(WXSDKManager m){ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java index f5b557e..c0f1724 100644 --- a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java @@ -210,7 +210,10 @@ import com.taobao.weex.InitConfig; import com.taobao.weex.WXSDKEngine; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKInstanceTest; +import com.taobao.weex.WXSDKManager; +import com.taobao.weex.WXSDKManagerTest; import com.taobao.weex.bridge.WXBridgeManagerTest; +import com.taobao.weex.dom.action.TestActions; import com.taobao.weex.ui.WXRenderManager; import org.junit.After; @@ -231,7 +234,7 @@ import org.robolectric.shadows.ShadowLooper; @PowerMockIgnore( {"org.mockito.*", "org.robolectric.*", "android.*"}) public class WXDomStatementTest { - WXDomStatement stmt; + DOMActionContextImpl stmt; WXRenderManager rednerManager; WXSDKInstance instance; @@ -244,7 +247,8 @@ public class WXDomStatementTest { instance = WXSDKInstanceTest.createInstance(); rednerManager = new WXRenderManager(); rednerManager.registerInstance(instance);// - stmt = new WXDomStatement(instance.getInstanceId(),rednerManager ); + WXSDKManagerTest.setRenderManager(rednerManager); + stmt = new DOMActionContextImpl(instance.getInstanceId(),rednerManager ); } @After @@ -256,7 +260,51 @@ public class WXDomStatementTest { JSONObject body = new JSONObject(); body.put("type","div"); body.put("ref",WXDomObject.ROOT); - stmt.createBody(body); + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(), TestActions.body(body),true); + } + + void addDom(JSONObject obj,String parentRef,int index){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.addDom(obj,parentRef,index),false); + } + + void removeDom(String ref){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.remove(ref),false); + } + + void updateAttrs(String ref,JSONObject data){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.updateAttr(ref,data),false); + } + + void updateStyle(String ref,JSONObject data,boolean byPesudo){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.updateStyle(ref,data,byPesudo),false); + } + + void moveDom(String ref,String parent,int index){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.moveDom(ref,parent,index),false); + } + + private void scrollToDom(String s, JSONObject o) { + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.scrollTo(s,o),false); + } + + private void addEvent(String ref,String event){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.addEvent(ref,event),false); + } + + private void removeEvent(String ref,String event){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.removeEvent(ref,event),false); + } + + private void updateFinish(){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.updateFinish(),false); + } + + private void createFinish(){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.createFinish(),false); + } + + private void refreshFinish(){ + WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.refreshFinish(),false); } @Test @@ -268,7 +316,7 @@ public class WXDomStatementTest { root.add(new WXSwitchDomObject(),0); root.add(new TextAreaEditTextDomObject(),0); stmt.layout(root); - root.traverseTree(WXDomStatement.ApplyStyleConsumer.getInstance()); + root.traverseTree(ApplyStyleConsumer.getInstance()); } @Test @@ -286,7 +334,7 @@ public class WXDomStatementTest { obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); stmt.batch(); } @@ -298,14 +346,14 @@ public class WXDomStatementTest { obj = new JSONObject(); obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); obj = new JSONObject(); obj.put("type","div"); obj.put("ref","101"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); - stmt.moveDom("100",WXDomObject.ROOT,1); + moveDom("100",WXDomObject.ROOT,1); stmt.batch(); } @@ -316,14 +364,14 @@ public class WXDomStatementTest { obj = new JSONObject(); obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); obj = new JSONObject(); obj.put("type","div"); obj.put("ref","101"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); - stmt.removeDom("101"); + removeDom("101"); stmt.batch(); } @@ -335,11 +383,11 @@ public class WXDomStatementTest { obj = new JSONObject(); obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); - stmt.updateAttrs("100",new JSONObject()); - stmt.updateAttrs("100",null); + updateAttrs("100",new JSONObject()); + updateAttrs("100",null); stmt.batch(); } @@ -351,10 +399,10 @@ public class WXDomStatementTest { obj = new JSONObject(); obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); - stmt.updateStyle("100",new JSONObject(),false); - stmt.updateStyle("100",null,false); + updateStyle("100",new JSONObject(),false); + updateStyle("100",null,false); stmt.batch(); } @@ -366,10 +414,10 @@ public class WXDomStatementTest { obj = new JSONObject(); obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); - stmt.addEvent("100","click"); - stmt.addEvent("100",null); + addEvent("100","click"); + addEvent("100",null); stmt.batch(); } @@ -381,11 +429,11 @@ public class WXDomStatementTest { obj = new JSONObject(); obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); - stmt.removeEvent("100",null); - stmt.addEvent("100","click"); - stmt.removeEvent("100","click"); + removeEvent("100",null); + addEvent("100","click"); + removeEvent("100","click"); stmt.batch(); } @@ -397,16 +445,18 @@ public class WXDomStatementTest { obj = new JSONObject(); obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); - stmt.scrollToDom("100",null); + scrollToDom("100",null); stmt.batch(); } + + @Test public void testCreateFinish() throws Exception { createBody(); - stmt.createFinish(); + createFinish(); stmt.batch(); } @@ -414,7 +464,7 @@ public class WXDomStatementTest { @Test public void testRefreshFinish() throws Exception { createBody(); - stmt.refreshFinish(); + refreshFinish(); stmt.batch(); } @@ -423,7 +473,7 @@ public class WXDomStatementTest { public void testUpdateFinish() throws Exception { createBody(); - stmt.updateFinish(); + updateFinish(); stmt.batch(); } @@ -434,7 +484,7 @@ public class WXDomStatementTest { obj = new JSONObject(); obj.put("type","div"); obj.put("ref","100"); - stmt.addDom(obj,WXDomObject.ROOT,0); + addDom(obj,WXDomObject.ROOT,0); stmt.startAnimation("100","",null); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/test/java/com/taobao/weex/dom/action/TestActions.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/action/TestActions.java b/android/sdk/src/test/java/com/taobao/weex/dom/action/TestActions.java new file mode 100644 index 0000000..8e61b14 --- /dev/null +++ b/android/sdk/src/test/java/com/taobao/weex/dom/action/TestActions.java @@ -0,0 +1,59 @@ +package com.taobao.weex.dom.action; + +import com.alibaba.fastjson.JSONObject; +import com.taobao.weex.dom.DOMAction; + +/** + * Created by sospartan on 01/03/2017. + */ + +public class TestActions { + public static DOMAction body(JSONObject data){ + return new CreateBodyAction(data); + } + + + public static DOMAction addDom(JSONObject obj, String parentRef, int index) { + return new AddElementAction(obj,parentRef,index); + } + + public static DOMAction remove(String ref) { + return new RemoveElementAction(ref); + } + + public static DOMAction updateAttr(String ref, JSONObject data) { + return new UpdateAttributeAction(ref,data); + } + + public static DOMAction updateStyle(String ref, JSONObject data, boolean byPesudo) { + return new UpdateStyleAction(ref,data,byPesudo); + } + + public static DOMAction moveDom(String ref, String parent, int index) { + return new MoveElementAction(ref,parent,index); + } + + public static DOMAction scrollTo(String ref,JSONObject data){ + return new ScrollToElementAction(ref,data); + } + + public static DOMAction addEvent(String ref,String event){ + return new AddEventAction(ref,event); + } + + public static DOMAction removeEvent(String ref,String event){ + return new RemoveEventAction(ref,event); + } + + public static DOMAction createFinish(){ + return new CreateFinishAction(); + } + + public static DOMAction updateFinish(){ + return new UpdateFinishAction(); + } + + public static DOMAction refreshFinish(){ + return new RefreshFinishAction(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java index 1f9ac18..1b5fd66 100755 --- a/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java @@ -228,7 +228,7 @@ import org.robolectric.annotation.Config; @PrepareForTest({WXSoInstallMgrSdk.class, TextUtils.class,WXComponentFactory.class}) public class WXRenderStatementTest { - WXRenderStatement mWXRenderStatement; + RenderActionContextImpl mWXRenderStatement; @Before public void setUp() throws Exception { @@ -238,7 +238,7 @@ public class WXRenderStatementTest { PowerMockito.when(TextUtils.isEmpty("124")).thenReturn(true); PowerMockito.when(WXSoInstallMgrSdk.initSo(null, 1, null)).thenReturn(true); WXSDKInstance instance = Mockito.mock(WXSDKInstance.class); - mWXRenderStatement = new WXRenderStatement(instance); + mWXRenderStatement = new RenderActionContextImpl(instance); } public void testCreateBody() throws Exception { http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/test/pages/dom-operation.we ---------------------------------------------------------------------- diff --git a/test/pages/dom-operation.we b/test/pages/dom-operation.we index 5a7a18c..b339132 100644 --- a/test/pages/dom-operation.we +++ b/test/pages/dom-operation.we @@ -10,13 +10,15 @@ </div> <text onclick="onclick">display</text> <text onclick="onclick2">display</text> + <text onclick="onclick3">{{text}}</text> </div> </template> <script> module.exports = { data:{ display:false, - repeat_items:[1,2,3,4,5] + repeat_items:[1,2,3,4,5], + text:"display" }, methods:{ onclick:function(){ @@ -26,6 +28,7 @@ onclick2:function(){ this.display = false; this.repeat_items.pop(); + this.text = "finished" } } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/test/scripts/dom.test.js ---------------------------------------------------------------------- diff --git a/test/scripts/dom.test.js b/test/scripts/dom.test.js index d49f112..150445a 100644 --- a/test/scripts/dom.test.js +++ b/test/scripts/dom.test.js @@ -63,5 +63,14 @@ describe('weex mobile index', function () { }) }) + it('#3 Update DOM attr', ()=>{ + return driver + .elementByXPath("//div/text[3]") + .text() + .then((text)=>{ + assert.equal("finished",text); + }) + }) + });
