http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java index 876d61a..1e74e7a 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java @@ -21,9 +21,6 @@ package com.taobao.weex.ui.component; import android.view.View; import com.taobao.weex.WXSDKInstance; -import com.taobao.weex.dom.TestDomObject; -import com.taobao.weex.dom.WXDomObject; -import junit.framework.TestFailure; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; @@ -52,10 +49,10 @@ public class ComponentTest { parent.createChildViewAt(-1); } - comp.setLayout(domObject); + comp.setLayout(comp); - domObject = new TestDomObject(); - comp.updateDom(domObject); +// domObject = new TestDomObject(); +// comp.updateDom(domObject); comp.applyLayoutAndEvent(comp); addEvent(comp);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java index 9d9fd90..8a40791 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java @@ -21,7 +21,6 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import com.taobao.weex.ui.view.WXEditText; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/PriorityQueueTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/PriorityQueueTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/PriorityQueueTest.java deleted file mode 100644 index 805d13c..0000000 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/PriorityQueueTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.component; - -import junit.framework.TestCase; - -import org.junit.Test; - -import java.util.Comparator; -import java.util.PriorityQueue; - -/** - * Created by furture on 2018/1/3. - */ - -public class PriorityQueueTest extends TestCase { - - - @Test - public void testPriority(){ - PriorityQueue<Integer> embeds = new PriorityQueue<>(8, new Comparator<Integer>() { - @Override - public int compare(Integer o1, Integer o2) { - return o1 - o2; - } - }); - - - embeds.add(10); - embeds.add(9); - embeds.offer(1); - - embeds.offer(2); - embeds.add(11); - - System.out.println(embeds.peek() + " " + embeds.size()); - - System.out.println(embeds.poll() + " " + embeds.size()); - } -} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java index 283b573..1ac43e6 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java @@ -18,11 +18,7 @@ */ package com.taobao.weex.ui.component; -import android.view.View; import com.taobao.weex.WXSDKInstance; -import com.taobao.weex.dom.WXDomObject; - -import java.lang.reflect.InvocationTargetException; /** * Created by sospartan on 7/27/16. http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java index 15953a8..8ea91f1 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java @@ -20,7 +20,7 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.common.Constants; -import com.taobao.weex.ui.view.border.BorderDrawable; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java index 480d5a6..310af8e 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java @@ -18,16 +18,11 @@ */ package com.taobao.weex.ui.component; -import static org.junit.Assert.assertEquals; - import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKInstanceTest; -import com.taobao.weex.dom.TestDomObject; -import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.dom.WXEvent; -import com.taobao.weex.dom.flex.Spacing; -import com.taobao.weex.ui.flat.FlatGUIContext; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -36,6 +31,8 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import static org.junit.Assert.*; + /** * Created by gulin on 16/2/24. */ @@ -61,7 +58,6 @@ public class WXDivTest { public void setUp() throws Exception { WXSDKInstance instance = Mockito.mock(WXSDKInstance.class); Mockito.when(instance.getContext()).thenReturn(RuntimeEnvironment.application); - Mockito.when(instance.getFlatUIContext()).thenReturn(new FlatGUIContext()); WXDomObject divDom = new WXDomObject(); WXDomObject spy = Mockito.spy(divDom); @@ -77,7 +73,6 @@ public class WXDivTest { public void testAddChild(){ WXSDKInstance instance = Mockito.mock(WXSDKInstance.class); Mockito.when(instance.getContext()).thenReturn(RuntimeEnvironment.application); - Mockito.when(instance.getFlatUIContext()).thenReturn(new FlatGUIContext()); WXDomObject testDom = Mockito.mock(WXDomObject.class); Mockito.when(testDom.getPadding()).thenReturn(new Spacing()); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java index cb88a66..752b425 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java @@ -20,20 +20,16 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXEnvironment; -import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.TestDomObject; + import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import static org.junit.Assert.*; - /** * Created by sospartan on 26/09/2016. */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java index 213119b..740f7c4 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java @@ -19,14 +19,10 @@ package com.taobao.weex.ui.component; import com.taobao.weex.WXSDKInstanceTest; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; -import com.taobao.weex.ui.component.list.WXListComponent; import java.lang.reflect.InvocationTargetException; -import static org.junit.Assert.*; - /** * Created by sospartan on 8/29/16. */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java index 1c05647..9999f71 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java @@ -32,9 +32,7 @@ import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.common.Constants; import com.taobao.weex.common.WXImageSharpen; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.dom.WXAttr; -import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.ui.view.WXImageView; import com.taobao.weex.ui.view.border.BorderDrawable; import org.junit.Before; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java index c244031..59d803e 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java @@ -21,7 +21,6 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import org.junit.After; import org.junit.Before; @@ -33,8 +32,6 @@ import org.robolectric.annotation.Config; import java.lang.reflect.InvocationTargetException; -import static org.junit.Assert.*; - /** * Created by sospartan on 28/09/2016. */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java index 505c45e..99ca151 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java @@ -21,7 +21,6 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import org.junit.After; import org.junit.Before; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java index bf0bed7..185ab2e 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java @@ -18,11 +18,8 @@ */ package com.taobao.weex.ui.component; -import android.view.ViewGroup; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; -import com.taobao.weex.dom.TestDomObject; -import com.taobao.weex.dom.WXScrollerDomObject; import com.taobao.weex.ui.view.WXScrollView; import org.junit.After; import org.junit.Before; @@ -32,8 +29,6 @@ import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import static org.junit.Assert.*; - /** * Created by sospartan on 8/25/16. */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java index 30c202d..0f18fa5 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java @@ -20,7 +20,6 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import org.junit.After; import org.junit.Before; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java index 995289f..697d3b4 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java @@ -20,7 +20,6 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import org.junit.After; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java index 178ba55..63f8d6a 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java @@ -21,7 +21,6 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import com.taobao.weex.ui.view.WXSwitchView; @@ -36,8 +35,6 @@ import org.robolectric.annotation.Config; import java.lang.reflect.InvocationTargetException; -import static org.junit.Assert.*; - /** * Created by sospartan on 28/09/2016. */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java index 3b6700f..c311ffb 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java @@ -18,23 +18,12 @@ */ package com.taobao.weex.ui.component; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXEnvironment; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.TestDomObject; -import com.taobao.weex.dom.WXDomObject; -import com.taobao.weex.dom.WXTextDomObject; -import com.taobao.weex.dom.flex.Spacing; import com.taobao.weex.ui.SimpleComponentHolder; -import com.taobao.weex.ui.flat.FlatGUIContext; -import java.util.HashMap; -import java.util.Map; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -43,6 +32,14 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + /** * Created by gulin on 16/2/4. */ @@ -59,7 +56,6 @@ public class WXTextTest { WXEnvironment.sApplication = RuntimeEnvironment.application; WXSDKInstance instance = Mockito.mock(WXSDKInstance.class); Mockito.when(instance.getContext()).thenReturn(RuntimeEnvironment.application); - Mockito.when(instance.getFlatUIContext()).thenReturn(new FlatGUIContext()); mParentDomObj = Mockito.spy(new WXDomObject()); Mockito.when(mParentDomObj.getPadding()).thenReturn(new Spacing()); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java index 5f24838..d01caa5 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java @@ -21,21 +21,17 @@ package com.taobao.weex.ui.component; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.lang.reflect.InvocationTargetException; -import static org.junit.Assert.*; - /** * Created by sospartan on 8/10/16. */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java index 56b0b72..53d1773 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java @@ -22,7 +22,6 @@ import android.view.View; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.TestDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import com.taobao.weex.ui.view.IWebView; import org.junit.After; @@ -37,8 +36,6 @@ import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; -import static org.junit.Assert.*; - /** * Created by sospartan on 28/09/2016. */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/BindingValueTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/BindingValueTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/BindingValueTest.java deleted file mode 100644 index 162877e..0000000 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/BindingValueTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.component.binding; - -import com.alibaba.fastjson.JSONObject; -import com.taobao.weex.el.parse.Parser; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import java.util.Stack; - -/** - * Created by furture on 2017/8/22. - */ - -public class BindingValueTest extends TestCase { - - public void testBindingValue(){ - System.out.println(Parser.parse("true ? item.name : false").execute(createContext())); - Assert.assertEquals(getValue("true ? true : false", createContext()), true); - Assert.assertEquals(getValue("true ? item.name : false", createContext()), "hello world"); - Assert.assertEquals(getValue("false ? item.name : false", createContext()), false); - Assert.assertEquals(getValue("item.name ? item.name : false", createContext()), "hello world"); - Assert.assertEquals(getValue("item.name > 0 ? item.name : false", createContext()), false); - Assert.assertEquals(getValue("? item.name : false", createContext()), false); - } - - - public void testDebug(){ - System.out.println(Parser.parse("true ? item.name : false")); - Assert.assertTrue(getValue("false ? item.name : false", createContext()).toString().equals("false")); - } - - - private Object getValue(String expression, Stack context){ - return Parser.parse(expression).execute(context); - } - - private Stack createContext(){ - JSONObject data = new JSONObject(); - data.put("item", new JSONObject()); - data.getJSONObject("item").put("name", "hello world"); - - Stack context = new Stack(); - context.push(data); - return context; - } -} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java deleted file mode 100644 index 2233acc..0000000 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.component.binding; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.taobao.weappplus_sdk.BuildConfig; -import com.taobao.weex.WXSDKInstance; -import com.taobao.weex.WXSDKInstanceTest; -import com.taobao.weex.dom.TestDomObject; -import com.taobao.weex.dom.WXCellDomObject; -import com.taobao.weex.dom.WXDomObject; -import com.taobao.weex.dom.WXEvent; -import com.taobao.weex.dom.WXTextDomObject; -import com.taobao.weex.dom.binding.ELUtils; -import com.taobao.weex.dom.binding.WXStatement; -import com.taobao.weex.dom.flex.Spacing; -import com.taobao.weex.el.parse.ArrayStack; -import com.taobao.weex.ui.component.WXComponent; -import com.taobao.weex.ui.component.WXComponentFactory; -import com.taobao.weex.ui.component.WXDiv; -import com.taobao.weex.ui.component.WXText; -import com.taobao.weex.ui.component.list.WXCell; -import com.taobao.weex.ui.component.list.template.CellRenderContext; - -import junit.framework.Assert; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.rule.PowerMockRule; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by furture on 2017/8/18. - */ -@RunWith(RobolectricTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 19) -@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" }) -@PrepareForTest(WXComponentFactory.class) -public class StatementTest { - - - @Rule - public PowerMockRule rule = new PowerMockRule(); - - @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()); - } - } - - - - - @Before - public void setUp() throws Exception { - WXSDKInstance instance = Mockito.mock(WXSDKInstance.class); - Mockito.when(instance.getContext()).thenReturn(RuntimeEnvironment.application); - WXDomObject divDom = new WXDomObject(); - WXDomObject spy = Mockito.spy(divDom); - Mockito.when(spy.getPadding()).thenReturn(new Spacing()); - Mockito.when(spy.getEvents()).thenReturn(new WXEvent()); - Mockito.when(spy.clone()).thenReturn(divDom); - TestDomObject.setRef(divDom,"1"); - - } - - - private WXCell createVForNode() throws Exception { - WXCell cell = new WXCell(WXSDKInstanceTest.createInstance(),new WXCellDomObject(), null, false); - final WXDiv div = new WXDiv(WXSDKInstanceTest.createInstance(), new WXDomObject(), cell); - cell.addChild(div); - WXText text = new WXText(WXSDKInstanceTest.createInstance(), new WXTextDomObject(), div); - WXStatement statement = new WXStatement(); - statement.put("[[repeat]]", - ELUtils.vforBlock( - JSON.parse("{\n" + - " '@expression': 'dataList',\n" + - " '@index': 'index',\n" + - " '@alias': 'item'\n" + - " }"))); - WXDomObject domObject = (WXDomObject) text.getDomObject(); - domObject.getAttrs().setStatement(statement); - div.addChild(text); - - PowerMockito.mockStatic(WXComponentFactory.class, new Answer() { - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - WXText renderNode = new WXText(WXSDKInstanceTest.createInstance(), new WXTextDomObject(), div); - return renderNode; - } - }); - return cell; - } - - private CellRenderContext createContext(int count){ - JSONObject data = new JSONObject(); - data.put("item", new JSONObject()); - data.getJSONObject("item").put("name", "hello world"); - List<String> datas = new ArrayList<>(); - for(int i=0; i<count; i++){ - datas.add("hello" + count); - } - data.getJSONObject("item").put("list", datas); - data.put("dataList", datas); - ArrayStack context = new ArrayStack(); - context.push(data); - CellRenderContext cellRenderContext = new CellRenderContext(); - cellRenderContext.stack = context; - return cellRenderContext; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/list/DefaultDragHelperTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/list/DefaultDragHelperTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/list/DefaultDragHelperTest.java index 7ffeb99..474bdcf 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/list/DefaultDragHelperTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/list/DefaultDragHelperTest.java @@ -20,9 +20,6 @@ package com.taobao.weex.ui.component.list; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; -import com.taobao.weex.dom.TestDomObject; -import com.taobao.weex.dom.WXDomObject; -import com.taobao.weex.dom.WXListDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import com.taobao.weex.ui.component.ComponentTest; import com.taobao.weex.ui.component.WXComponent; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java index 82cda73..feb2b05 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java @@ -20,9 +20,6 @@ package com.taobao.weex.ui.component.list; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; -import com.taobao.weex.common.Constants; -import com.taobao.weex.dom.WXDomObject; -import com.taobao.weex.dom.WXListDomObject; import com.taobao.weex.ui.SimpleComponentHolder; import com.taobao.weex.ui.component.ComponentTest; import com.taobao.weex.ui.component.WXComponent; @@ -114,7 +111,7 @@ public class WXListComponentTest { ComponentTest.create(div); WXDomObject dom = new WXListDomObject(); - dom.getAttrs().put(Constants.Name.TRANSFORM,"scale(0.9,0.8);translate(10,20);opacity(0.5);rotate(100)"); + dom.getAttrs().put(WXListComponent.TRANSFORM,"scale(0.9,0.8);translate(10,20);opacity(0.5);rotate(100)"); component = create(div,dom); ComponentTest.create(component); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java index a916bb5..17d3fba 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java @@ -18,7 +18,6 @@ */ package com.taobao.weex.ui.module; -import com.alibaba.fastjson.JSON; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXSDKInstanceTest; import com.taobao.weex.bridge.JSCallback; @@ -57,25 +56,25 @@ public class WXModalUIModuleTest { @Test public void testToast() throws Exception { - module.toast(JSON.parseObject("{}")); + module.toast("{}"); } @Test public void testAlert() throws Exception { JSCallback callback = Mockito.mock(JSCallback.class); - module.alert(JSON.parseObject("{}"),callback); + module.alert("{}",callback); } @Test public void testConfirm() throws Exception { JSCallback callback = Mockito.mock(JSCallback.class); - module.confirm(JSON.parseObject("{}"),callback); + module.confirm("{}",callback); } @Test public void testPrompt() throws Exception { JSCallback callback = Mockito.mock(JSCallback.class); - module.prompt(JSON.parseObject("{}"),callback); + module.prompt("{}",callback); } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java index f4331b0..7fe508c 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java @@ -18,8 +18,6 @@ */ package com.taobao.weex.ui.module; -import static android.R.attr.end; -import static android.R.attr.start; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.any; @@ -63,7 +61,6 @@ public class WXTimerModuleTest { public final static int DELAY = 50; public final static int IMMEDIATELY = 0; public final static int INVALID_DELAY = -50; - public final static float FLOAT_DELAY = 20.6f; @Rule public PowerMockRule rule = new PowerMockRule(); @@ -87,26 +84,7 @@ public class WXTimerModuleTest { @Test public void testSetTimeoutDelay() throws Exception { module.setTimeout(VALID_FUNC_ID, DELAY); - long start, end, duration; - start = mLooper.getScheduler().getCurrentTime(); - mLooper.runOneTask(); - end = mLooper.getScheduler().getCurrentTime(); - duration = end - start; - - assertThat(duration, is((long) DELAY)); - Mockito.verify(module, times(1)).handleMessage(any(Message.class)); - } - - @Test - public void testSetTimeoutDelay2() throws Exception { - module.setTimeout(VALID_FUNC_ID, FLOAT_DELAY); - long start, end, duration; - start = mLooper.getScheduler().getCurrentTime(); - mLooper.runOneTask(); - end = mLooper.getScheduler().getCurrentTime(); - duration = end - start; - - assertThat(duration, is((long) FLOAT_DELAY)); + mLooper.idle(DELAY); Mockito.verify(module, times(1)).handleMessage(any(Message.class)); } @@ -186,23 +164,6 @@ public class WXTimerModuleTest { } @Test - public void testSetIntervalDelay2() { - long start, end, duration; - module.setInterval(VALID_FUNC_ID, FLOAT_DELAY); - - start = mLooper.getScheduler().getCurrentTime(); - mLooper.runOneTask(); - end = mLooper.getScheduler().getCurrentTime(); - duration = end - start; - - assertThat(duration, is((long) FLOAT_DELAY)); - - mLooper.runOneTask(); - mLooper.runOneTask(); - Mockito.verify(module, times(3)).handleMessage(any(Message.class)); - } - - @Test public void testClearTimeout() throws Exception { module.setTimeout(VALID_FUNC_ID, DELAY); module.clearTimeout(VALID_FUNC_ID); @@ -219,7 +180,7 @@ public class WXTimerModuleTest { } @Test - public void testClearTimeout2(){ + public void setClearTimeout2(){ module.setTimeout(NO_CACHING_FUNC_ID, DELAY); module.clearTimeout(NO_CACHING_FUNC_ID); mLooper.idle(DELAY, TimeUnit.MILLISECONDS); @@ -227,7 +188,7 @@ public class WXTimerModuleTest { } @Test - public void testClearInterval2(){ + public void setClearInterval2(){ module.setInterval(NO_CACHING_FUNC_ID, DELAY); module.clearInterval(NO_CACHING_FUNC_ID); mLooper.idle(DELAY, TimeUnit.MILLISECONDS); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java index 85089fe..49caafa 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java @@ -24,7 +24,6 @@ import android.graphics.Color; import android.graphics.PixelFormat; import android.graphics.Rect; -import com.taobao.weex.dom.flex.Spacing; import com.taobao.weex.utils.WXResourceUtils; import org.junit.Before; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java index 88c533a..125f9d1 100644 --- a/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java @@ -18,13 +18,11 @@ */ package com.taobao.weex.ui.view.gesture; -import android.provider.Settings; import android.view.MotionEvent; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.TestActivity; import com.taobao.weex.ui.component.ComponentTest; import com.taobao.weex.ui.component.WXComponent; -import com.taobao.weex.ui.component.WXDiv; import com.taobao.weex.ui.component.WXDivTest; import org.junit.Before; import org.junit.Test; @@ -32,11 +30,8 @@ import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import static org.junit.Assert.*; - /** * Created by sospartan on 27/09/2016. */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/utils/WXExceptionUtilsTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXExceptionUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXExceptionUtilsTest.java deleted file mode 100644 index 8709304..0000000 --- a/android/sdk/src/test/java/com/taobao/weex/utils/WXExceptionUtilsTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.utils; - -import com.taobao.weappplus_sdk.BuildConfig; -import com.taobao.weex.WXEnvironment; -import com.taobao.weex.common.WXErrorCode; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.rule.PowerMockRule; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - -import java.util.HashMap; -import java.util.Map; - -import static org.junit.Assert.*; - -/** - * Created by atomtong on 2017/10/19. - */ -@RunWith(RobolectricTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 19) -@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" }) -@PrepareForTest({WXEnvironment.class}) - -public class WXExceptionUtilsTest { - static class Exp extends WXExceptionUtils{}; - - @Rule - public PowerMockRule rule = new PowerMockRule(); - - @Before - public void setUp() throws Exception { - PowerMockito.mockStatic(WXEnvironment.class); - PowerMockito.when(WXEnvironment.isApkDebugable()).thenReturn(true); - } - - @Test - public void testExpCommitNull(){ - Exp.commitCriticalExceptionRT(null,null,null,null,null); - } - - @Test - public void testExpCommitString(){ - Map testMap = new HashMap<String, String>(); - testMap.put("weexUrl","weexurltest"); - testMap.put("bundleUrl","bundleUrltest"); - Exp.commitCriticalExceptionRT("1", WXErrorCode.WX_ERR_TEST,"test","test",testMap); - Exp.commitCriticalExceptionRT("1",WXErrorCode.WX_ERR_TEST,"test","test",null); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java index 5a7e9ce..64a0720 100644 --- a/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java @@ -20,8 +20,6 @@ package com.taobao.weex.utils; import com.taobao.weappplus_sdk.BuildConfig; import java.io.File; - -import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -64,11 +62,4 @@ public class WXFileUtilsTest { public void testSaveFile() throws Exception { WXFileUtils.saveFile("build/test","test".getBytes(),RuntimeEnvironment.application); } - - - @Test - public void testMd5(){ - Assert.assertEquals("77963b7a931377ad4ab5ad6a9cd718aa", WXFileUtils.md5("ddd")); - Assert.assertEquals("d5Y7epMTd61Kta1qnNcYqg==", WXFileUtils.base64Md5("ddd")); - } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java index e249c1c..ece6e0e 100644 --- a/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java @@ -20,7 +20,6 @@ package com.taobao.weex.utils; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXEnvironment; - import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -47,6 +46,7 @@ public class WXLogUtilsTest { @Before public void setUp() throws Exception { + WXLogUtils.isShowLineNumber = true; PowerMockito.mockStatic(WXEnvironment.class); PowerMockito.when(WXEnvironment.isApkDebugable()).thenReturn(true); } @@ -92,17 +92,4 @@ public class WXLogUtilsTest { Log.e("tag",new Throwable("test")); } - @Test - public void testLogLevel() throws Exception { - WXEnvironment.sLogLevel = LogLevel.DEBUG; - Log.d("LogLevel.DEBUG", "test debug"); - Log.w("LogLevel.DEBUG", "test warning"); - Log.e("LogLevel.DEBUG", "test error"); - - WXEnvironment.sLogLevel = LogLevel.WARN; - - Log.d("LogLevel.WARN", "test debug"); - Log.w("LogLevel.WARN", "test warning"); - Log.e("LogLevel.WARN", "test error"); - } - } +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java index 58cfc46..18df379 100644 --- a/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java @@ -47,14 +47,9 @@ public class WXReflectionUtilsTest { @Test public void testParseArgument() throws Exception { - - Object value = WXReflectionUtils.parseArgument(String.class,"dkdkdkdk"); assertTrue(value instanceof String); - value = WXReflectionUtils.parseArgument(int.class,123444); - assertTrue(value instanceof Integer); - value = WXReflectionUtils.parseArgument(long.class,"123444"); assertTrue(value instanceof Long); @@ -75,10 +70,6 @@ public class WXReflectionUtilsTest { JSONObject j = new JSONObject(); j.put("a","b"); j.put("c",23); - - value = WXReflectionUtils.parseArgument(Map.class,j); - assertTrue(value == j); - value = WXReflectionUtils.parseArgument(String.class,j); assertTrue(value instanceof String); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java index 5b6d273..e981c69 100644 --- a/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java @@ -19,7 +19,6 @@ package com.taobao.weex.utils; import android.text.TextUtils; -import android.util.Log; import com.taobao.weappplus_sdk.BuildConfig; import com.taobao.weex.WXEnvironment; @@ -50,7 +49,7 @@ import static org.mockito.Matchers.any; @RunWith(PowerMockRunner.class) @Config(constants = BuildConfig.class, sdk = 19) @PowerMockIgnore( {"org.mockito.*", "org.robolectric.*", "android.*"}) -@PrepareForTest( {WXEnvironment.class, WXViewUtils.class, WXSDKInstance.class, TextUtils.class, Log.class, WXUtils.class, WXLogUtils.class}) +@PrepareForTest( {WXEnvironment.class, WXViewUtils.class, WXSDKInstance.class, TextUtils.class}) public class WXUtilsTest extends TestCase { public static final float TEST_DENSITY = 3.0f; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/wson/AnnoTest.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/wson/AnnoTest.java b/android/sdk/src/test/java/com/taobao/weex/wson/AnnoTest.java deleted file mode 100644 index 1dce185..0000000 --- a/android/sdk/src/test/java/com/taobao/weex/wson/AnnoTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.wson; - -import com.alibaba.fastjson.JSON; - -import junit.framework.TestCase; - -import org.junit.Assert; - -/** - * Created by furture on 2018/3/9. - */ - -public class AnnoTest extends TestCase { - - public void testAnno(){ - Person person = new Person(); - person.id = "3333"; - for(int i=0; i<10; i++) { - Assert.assertEquals(JSON.toJSONString(person), - JSON.toJSONString(Wson.parse(Wson.toWson(person)))); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/test/java/com/taobao/weex/wson/Person.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/test/java/com/taobao/weex/wson/Person.java b/android/sdk/src/test/java/com/taobao/weex/wson/Person.java deleted file mode 100644 index 8c9fd7b..0000000 --- a/android/sdk/src/test/java/com/taobao/weex/wson/Person.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.wson; - -import com.alibaba.fastjson.annotation.JSONField; - -/** - * Created by furture on 2018/3/9. - */ - -public class Person { - @JSONField(name = "uid") - public String id = "3333"; -} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/.clang-format ---------------------------------------------------------------------- diff --git a/weex_core/.clang-format b/weex_core/.clang-format new file mode 100644 index 0000000..0cd3e32 --- /dev/null +++ b/weex_core/.clang-format @@ -0,0 +1,2 @@ +{BasedOnStyle: WebKit} + http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/.gitignore ---------------------------------------------------------------------- diff --git a/weex_core/.gitignore b/weex_core/.gitignore new file mode 100644 index 0000000..ba15c87 --- /dev/null +++ b/weex_core/.gitignore @@ -0,0 +1,5 @@ +*.pyc +build32/ +build64/ +cmake-build-debug +cscope.out http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/weex_core/CMakeLists.txt b/weex_core/CMakeLists.txt new file mode 100644 index 0000000..83d128e --- /dev/null +++ b/weex_core/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.4.1) +project(weexv8) +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") +#include(Android) +add_subdirectory(Source) http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/weex_core/Source/CMakeLists.txt b/weex_core/Source/CMakeLists.txt new file mode 100644 index 0000000..92ce3ae --- /dev/null +++ b/weex_core/Source/CMakeLists.txt @@ -0,0 +1,91 @@ +cmake_minimum_required(VERSION 3.4.1) + +add_compile_options(-std=c++11) +add_compile_options(-fexceptions) + +add_definitions(-DOS_ANDROID=1) +add_definitions(-DGNU_SUPPORT=1) +add_definitions(-DJSONCPP_NO_LOCALE_SUPPORT=1) +add_definitions(-DDEBUG=1) + +add_definitions(-DRENDER_LOG=0) +add_definitions(-DPERFORMANCE_LOG=0) +add_definitions(-DLAYOUT_LOG=0) +add_definitions(-DJSAPI_LOG=0) +add_definitions(-DDOM_PARSER_LOG=0) + +## add_subdirectory for subdirectory has a CMakeLists.txt +add_subdirectory(${CMAKE_SOURCE_DIR}/Source/IPC) + +## include_directories for include head file +## include_directories(${CMAKE_SOURCE_DIR}/Source/IPC) + + +add_library(weexjsc SHARED + + ./base/fpconv.cpp + ./android/jniprebuild/jni_load.cc + ./android/base/jni/android_jni.cpp + ./android/base/jni/scoped_java_ref.cpp + ./android/base/base64/base64.cpp + ./android/base/base64/modp_base64/modp_b64.cc + ./android/base/string/scoped_jstring.cpp + ./android/base/string/scoped_jstring_utf8.cpp + ./android/bridge/impl/bridge_impl_android.cpp + ./android/bridge/impl/weexcore_impl_android.cpp + ./android/bridge/impl/measure_mode_impl_android.cpp + ./android/bridge/impl/content_box_measurement_impl_android.cpp + + ./android/jsengine/multiprocess/WeexJSConnection.cpp + ./android/jsengine/multiprocess/WeexProxy.cpp + ./android/jsengine/multiprocess/ExtendJSApi.cpp + + ./core/render/manager/render_manager.cpp + ./core/render/page/render_page.cpp + ./core/render/node/render_object.cpp + ./core/render/node/factory/render_creator.cpp + ./core/render/action/render_action_add_event.cpp + ./core/render/action/render_action_remove_event.cpp + ./core/render/action/render_action_add_element.cpp + ./core/render/action/render_action_remove_element.cpp + ./core/render/action/render_action_move_element.cpp + ./core/render/action/render_action_createbody.cpp + ./core/render/action/render_action_createfinish.cpp + ./core/render/action/render_action_layout.cpp + ./core/render/action/render_action_update_attr.cpp + ./core/render/action/render_action_update_style.cpp + + ./core/parser/dom_parser.cpp + + ./core/layout/layout.cpp + ./core/layout/style.cpp + + ./core/css/css_value_getter.cpp + + ./core/config/core_environment.cpp + ./core/moniter/render_performance.cpp + ) + + # set(weexjsc_LIBRARY_TYPE SHARED) + + # set_target_properties(weexjsc + # PROPERTIES + # LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}//weexjsc_version_script.txt -Wl,--no-undefined -Wl,-soname,libweexjsc.so" + # ) + + # add_custom_command( + # TARGET weexjsc + # POST_BUILD + # COMMAND ${CMAKE_STRIP} $<TARGET_FILE:weexjsc> -o ${CMAKE_SOURCE_DIR}/libweexjsc.so + # VERBATIM + # ) + + target_include_directories(weexjsc + PUBLIC + .) + + target_link_libraries(weexjsc + android + IPC + log + z) http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/Buffering/IPCBuffer.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/Buffering/IPCBuffer.h b/weex_core/Source/IPC/Buffering/IPCBuffer.h new file mode 100644 index 0000000..29b8cc9 --- /dev/null +++ b/weex_core/Source/IPC/Buffering/IPCBuffer.h @@ -0,0 +1,13 @@ +#ifndef IPCBUFFER_H +#define IPCBUFFER_H +#include <stddef.h> + +// A buffer starts with msg. +class IPCBuffer { +public: + virtual ~IPCBuffer() = default; + virtual const void* get() = 0; + virtual size_t length() = 0; +}; + +#endif /* IPCBUFFER_H */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/CMakeLists.txt b/weex_core/Source/IPC/CMakeLists.txt new file mode 100644 index 0000000..6087009 --- /dev/null +++ b/weex_core/Source/IPC/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 2.8.12) + +add_library(IPC +STATIC +./Serializing/IPCSerializer.cpp +./IPCResult.cpp +./IPCSender.cpp +./IPCException.cpp +./IPCCommunicator.cpp +./IPCHandler.cpp +./IPCListener.cpp +./IPCFutexPageQueue.cpp +./IPCFutexPageQueue.cpp +./ashmem.c +./IPCCheck.cpp) + +#target_link_libraries(IPC +#JavaScriptCore) + +target_include_directories(IPC +PUBLIC +.) http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCArguments.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCArguments.h b/weex_core/Source/IPC/IPCArguments.h new file mode 100644 index 0000000..4c1f9c3 --- /dev/null +++ b/weex_core/Source/IPC/IPCArguments.h @@ -0,0 +1,30 @@ +#ifndef IPCARGUMENTS_H +#define IPCARGUMENTS_H +#include "IPCType.h" + +struct IPCString; +struct IPCByteArray; +class IPCArguments { +public: + virtual ~IPCArguments() = default; + template <typename T> + T get(int index) + { + return *static_cast<const T*>(getData(index)); + } + + const IPCString* getString(int index) + { + return static_cast<const IPCString*>(getData(index)); + } + + const IPCByteArray* getByteArray(int index) + { + return static_cast<const IPCByteArray*>(getData(index)); + } + + virtual const void* getData(int index) = 0; + virtual IPCType getType(int index) = 0; + virtual size_t getCount() = 0; +}; +#endif /* IPCARGUMENTS_H */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCByteArray.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCByteArray.h b/weex_core/Source/IPC/IPCByteArray.h new file mode 100644 index 0000000..77eaf6f --- /dev/null +++ b/weex_core/Source/IPC/IPCByteArray.h @@ -0,0 +1,8 @@ +#ifndef IPCBYTEARRAY_H +#define IPCBYTEARRAY_H +#include <stddef.h> +struct IPCByteArray { + uint32_t length; + char content[1]; +}; +#endif /* IPCBYTEARRAY_H */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCCheck.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCCheck.cpp b/weex_core/Source/IPC/IPCCheck.cpp new file mode 100644 index 0000000..bb449e4 --- /dev/null +++ b/weex_core/Source/IPC/IPCCheck.cpp @@ -0,0 +1,17 @@ +#if !defined(NDEBUG) +#include "IPCCheck.h" +#include <android/log.h> +#define TAG "linzj_IPC" + +void reportCheckFailed(const char* msg, const char* file, int line) +{ + __android_log_print(ANDROID_LOG_ERROR, TAG, msg, file, line); + __builtin_trap(); +} + +void reportUnreachable(const char* file, int line) +{ + __android_log_print(ANDROID_LOG_ERROR, TAG, "unreachable statement reached %s %d", file, line); + __builtin_trap(); +} +#endif http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCCheck.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCCheck.h b/weex_core/Source/IPC/IPCCheck.h new file mode 100644 index 0000000..f3bc54a --- /dev/null +++ b/weex_core/Source/IPC/IPCCheck.h @@ -0,0 +1,16 @@ +#ifndef IPCCHECK_H +#define IPCCHECK_H +#include <stdlib.h> +#if defined(NDEBUG) +#define IPC_DCHECK(b) +#define IPC_UNREACHABLE() abort() +#else +void reportCheckFailed(const char* msg, const char* file, int line); +void reportUnreachable(const char* file, int line); +#define IPC_DCHECK(b) \ + if (!(b)) { \ + reportCheckFailed("CHECK FAILED: " #b " at line %s %d", __FILE__, __LINE__); \ + } +#define IPC_UNREACHABLE() reportUnreachable(__FILE__, __LINE__); +#endif +#endif /* IPCCHECK_H */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCCommunicator.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCCommunicator.cpp b/weex_core/Source/IPC/IPCCommunicator.cpp new file mode 100644 index 0000000..dada499 --- /dev/null +++ b/weex_core/Source/IPC/IPCCommunicator.cpp @@ -0,0 +1,363 @@ +#include "IPCCommunicator.h" + +#include "Buffering/IPCBuffer.h" +#include "IPCArguments.h" +#include "IPCByteArray.h" +#include "IPCCheck.h" +#include "IPCException.h" +#include "IPCFutexPageQueue.h" +#include "IPCLog.h" +#include "IPCResult.h" +#include "IPCString.h" +#include "Serializing/IPCSerializer.h" +#include "futex.h" +#include <errno.h> +#include <string.h> +#include <unistd.h> +#include <vector> + +namespace { +class BufferAssembler + : public IPCResult, + public IPCArguments { +public: + void readFromBuffer(const char*); + void readTypes(const char*&); + void readData(const char*&); + // IPCResult + const void* getData() override; + IPCType getType() override; + const uint16_t* getStringContent() override; + size_t getStringLength() override; + const char* getByteArrayContent() override; + size_t getByteArrayLength() override; + + // IPCArguments + const void* getData(int index) override; + IPCType getType(int index) override; + size_t getCount() override; + +private: + std::vector<uint32_t> m_types; + std::vector<std::unique_ptr<char[]>> m_datas; +}; + +void BufferAssembler::readFromBuffer(const char* blob) +{ + readTypes(blob); + readData(blob); +} + +void BufferAssembler::readTypes(const char*& blob) +{ + while (true) { + uint32_t type; + type = *reinterpret_cast<const uint32_t*>(blob); + blob += sizeof(uint32_t); + if (type == static_cast<uint32_t>(IPCType::END)) + break; + m_types.emplace_back(type); + } +} + +void BufferAssembler::readData(const char*& blob) +{ + for (uint32_t type : m_types) { + switch (static_cast<IPCType>(type)) { + case IPCType::INT32: { + int32_t n; + memcpy(&n, blob, sizeof(n)); + blob += sizeof(n); + std::unique_ptr<char[]> data(new char[sizeof(n)]); + *reinterpret_cast<int32_t*>(data.get()) = n; + m_datas.emplace_back(std::move(data)); + } break; + case IPCType::INT64: { + int64_t n; + memcpy(&n, blob, sizeof(n)); + blob += sizeof(n); + std::unique_ptr<char[]> data(new char[sizeof(n)]); + *reinterpret_cast<int64_t*>(data.get()) = n; + m_datas.emplace_back(std::move(data)); + } break; + case IPCType::FLOAT: { + float n; + memcpy(&n, blob, sizeof(n)); + blob += sizeof(n); + std::unique_ptr<char[]> data(new char[sizeof(n)]); + *reinterpret_cast<float*>(data.get()) = n; + m_datas.emplace_back(std::move(data)); + } break; + case IPCType::DOUBLE: { + double n; + memcpy(&n, blob, sizeof(n)); + blob += sizeof(n); + std::unique_ptr<char[]> data(new char[sizeof(n)]); + *reinterpret_cast<double*>(data.get()) = n; + m_datas.emplace_back(std::move(data)); + } break; + case IPCType::JSONSTRING: + case IPCType::STRING: { + uint32_t n; + memcpy(&n, blob, sizeof(n)); + blob += sizeof(n); + size_t byteLength = n * sizeof(uint16_t); + std::unique_ptr<char[]> data(new char[byteLength + sizeof(IPCString)]); + IPCString* s = reinterpret_cast<IPCString*>(data.get()); + s->length = n; + memcpy(s->content, blob, byteLength); + blob += byteLength; + m_datas.emplace_back(std::move(data)); + } break; + case IPCType::BYTEARRAY: { + uint32_t n; + memcpy(&n, blob, sizeof(n)); + blob += sizeof(n); + size_t byteLength = n; + std::unique_ptr<char[]> data(new char[byteLength + sizeof(IPCByteArray)]); + IPCByteArray* s = reinterpret_cast<IPCByteArray*>(data.get()); + s->length = n; + memcpy(s->content, blob, byteLength); + blob += byteLength; + s->content[byteLength] = '\0'; + m_datas.emplace_back(std::move(data)); + } break; + case IPCType::JSUNDEFINED: + case IPCType::VOID: + m_datas.emplace_back(); + break; + case IPCType::END: + default: + IPC_UNREACHABLE(); + } + } +} + +// IPCResult +const void* BufferAssembler::getData() +{ + return getData(0); +} + +IPCType BufferAssembler::getType() +{ + return getType(0); +} + +const uint16_t* BufferAssembler::getStringContent() +{ + IPC_DCHECK((getType(0) == IPCType::STRING) || (getType(0) == IPCType::JSONSTRING)); + const IPCString* s = reinterpret_cast<const IPCString*>(getData(0)); + return s->content; +} + +size_t BufferAssembler::getStringLength() +{ + IPC_DCHECK((getType(0) == IPCType::STRING) || (getType(0) == IPCType::JSONSTRING)); + const IPCString* s = reinterpret_cast<const IPCString*>(getData(0)); + return s->length; +} + +const char* BufferAssembler::getByteArrayContent() +{ + IPC_DCHECK(getType(0) == IPCType::BYTEARRAY); + const IPCByteArray* s = reinterpret_cast<const IPCByteArray*>(getData(0)); + return s->content; +} + +size_t BufferAssembler::getByteArrayLength() +{ + IPC_DCHECK(getType(0) == IPCType::BYTEARRAY); + const IPCByteArray* s = reinterpret_cast<const IPCByteArray*>(getData(0)); + return s->length; +} + +// IPCArguments +const void* BufferAssembler::getData(int index) +{ + return m_datas.at(index).get(); +} + +IPCType BufferAssembler::getType(int index) +{ + return static_cast<IPCType>(m_types.at(index)); +} + +size_t BufferAssembler::getCount() +{ + return m_types.size(); +} +} + +IPCCommunicator::IPCCommunicator(IPCFutexPageQueue* futexPageQueue) + : m_futexPageQueue(futexPageQueue) +{ +} + +IPCCommunicator::~IPCCommunicator() +{ +} + +std::unique_ptr<IPCResult> IPCCommunicator::assembleResult() +{ + std::unique_ptr<BufferAssembler> bufferAssembler(new BufferAssembler()); + bufferAssembler->readFromBuffer(getBlob()); + return std::unique_ptr<IPCResult>(bufferAssembler.release()); +} + +std::unique_ptr<IPCArguments> IPCCommunicator::assembleArguments() +{ + std::unique_ptr<BufferAssembler> bufferAssembler(new BufferAssembler()); + bufferAssembler->readFromBuffer(getBlob()); + return std::unique_ptr<IPCArguments>(bufferAssembler.release()); +} + +std::unique_ptr<IPCBuffer> IPCCommunicator::generateResultBuffer(IPCResult* result) +{ + std::unique_ptr<IPCSerializer> serializer = createIPCSerializer(); + serializer->setMsg(MSG_END); + switch (result->getType()) { + case IPCType::INT32: + serializer->add(result->get<int32_t>()); + break; + case IPCType::INT64: + serializer->add(result->get<int64_t>()); + break; + case IPCType::FLOAT: + serializer->add(result->get<float>()); + break; + case IPCType::DOUBLE: + serializer->add(result->get<double>()); + break; + case IPCType::BYTEARRAY: + serializer->add(result->getByteArrayContent(), result->getByteArrayLength()); + break; + case IPCType::CHARARRAY: + serializer->add(static_cast<const char*>(result->getData()), result->getStringLength()); + break; + case IPCType::JSONSTRING: + serializer->addJSON(result->getStringContent(), result->getStringLength()); + break; + case IPCType::STRING: + serializer->add(result->getStringContent(), result->getStringLength()); + break; + case IPCType::JSUNDEFINED: + serializer->addJSUndefined(); + break; + case IPCType::VOID: + serializer->addVoid(); + break; + default: + IPC_UNREACHABLE(); + } + return serializer->finish(); +} + +void IPCCommunicator::doSendBufferOnly(IPCBuffer* buffer) +{ + const char* data = static_cast<const char*>(buffer->get()); + uint32_t length = buffer->length(); + doSendBufferOnly(data, length); +} + +uint32_t IPCCommunicator::doReadPackage() +{ + uint32_t msg; + uint32_t length; + m_futexPageQueue->lockReadPage(); + void* sharedMemory = m_futexPageQueue->getCurrentReadPage(); + length = static_cast<uint32_t*>(sharedMemory)[0]; + uint32_t availableSize = m_futexPageQueue->getPageSize() - sizeof(uint32_t); + if (length < 2 * sizeof(uint32_t)) { + releaseBlob(); + throw IPCException("Not a vaild msg"); + } + if (length > availableSize) { + m_package.reset(new char[length]); + doRecvBufferOnly(m_package.get(), length); + return *reinterpret_cast<uint32_t*>(m_package.get()); + } + return static_cast<uint32_t*>(sharedMemory)[1]; +} + +void IPCCommunicator::doSendBufferOnly(const void* _data, size_t length) +{ + const char* data = static_cast<const char*>(_data); + size_t pageSize = m_futexPageQueue->getPageSize(); + ssize_t byteTransfered; + uint32_t* dstLength = static_cast<uint32_t*>(m_futexPageQueue->getCurrentWritePage()); + // special handle the first part, which need a size + // as header. + dstLength[0] = length; + + IPC_LOGD("send bytes: length: %zu", length); + byteTransfered = std::min(length, pageSize - sizeof(uint32_t)); + memcpy(dstLength + 1, data, byteTransfered); + m_futexPageQueue->stepWrite(); + // multiple page package + if (length > byteTransfered) { + data += byteTransfered; + length -= byteTransfered; + IPC_LOGD("sent bytes: remaining length: %zu, transfered: %zu", length, byteTransfered); + + while (length > 0) { + byteTransfered = doSendBufferPage(data, length, pageSize); + data += byteTransfered; + length -= byteTransfered; + IPC_LOGD("sent bytes: remaining length: %zu, transfered: %zu", length, byteTransfered); + } + } +} + +void IPCCommunicator::doRecvBufferOnly(void* _data, size_t length) +{ + char* data = static_cast<char*>(_data); + size_t pageSize = m_futexPageQueue->getPageSize(); + bool firstRun = true; + IPC_LOGD("recv bytes: length: %zu", length); + while (true) { + ssize_t byteTransfered; + byteTransfered = std::min(length, pageSize); + const void* src = m_futexPageQueue->getCurrentReadPage(); + // skip the package size. + // package starts with msg. + if (firstRun) { + src = static_cast<const char*>(src) + sizeof(uint32_t); + byteTransfered -= sizeof(uint32_t); + } + memcpy(data, src, byteTransfered); + data += byteTransfered; + length -= byteTransfered; + IPC_LOGD("recv bytes: remaining length: %zu, transfered: %zu", length, byteTransfered); + if (length > 0) { + firstRun = false; + m_futexPageQueue->unlockReadPageAndStep(); + m_futexPageQueue->lockReadPage(); + } else { + break; + } + } +} + +const char* IPCCommunicator::getBlob() +{ + if (m_package.get()) + return m_package.get() + sizeof(uint32_t); + return static_cast<const char*>(m_futexPageQueue->getCurrentReadPage()) + sizeof(uint32_t) * 2; +} + +void IPCCommunicator::releaseBlob() +{ + m_package.reset(); + m_futexPageQueue->unlockReadPageAndStep(); +} + +size_t IPCCommunicator::doSendBufferPage(const void* data, size_t length, size_t pageSize) +{ + ssize_t byteTransfered; + byteTransfered = std::min(length, pageSize); + void* dst = m_futexPageQueue->getCurrentWritePage(); + memcpy(dst, data, byteTransfered); + m_futexPageQueue->stepWrite(); + return byteTransfered; +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCCommunicator.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCCommunicator.h b/weex_core/Source/IPC/IPCCommunicator.h new file mode 100644 index 0000000..69e63b2 --- /dev/null +++ b/weex_core/Source/IPC/IPCCommunicator.h @@ -0,0 +1,30 @@ +#ifndef IPCCOMMUNICATOR_H +#define IPCCOMMUNICATOR_H +#include <memory> + +class IPCResult; +class IPCArguments; +class IPCBuffer; +class IPCFutexPageQueue; +class IPCCommunicator { +protected: + explicit IPCCommunicator(IPCFutexPageQueue* futexPageQueue); + virtual ~IPCCommunicator(); + + std::unique_ptr<IPCResult> assembleResult(); + std::unique_ptr<IPCArguments> assembleArguments(); + std::unique_ptr<IPCBuffer> generateResultBuffer(IPCResult*); + void doSendBufferOnly(IPCBuffer* buffer); + uint32_t doReadPackage(); + const char* getBlob(); + void releaseBlob(); + +private: + void doSendBufferOnly(const void* data, size_t s); + size_t doSendBufferPage(const void* data, size_t s, size_t pageSize); + void doRecvBufferOnly(void* data, size_t s); + std::unique_ptr<char[]> m_package; + // weakref to a IPCFutexPageQueue object. + IPCFutexPageQueue* m_futexPageQueue; +}; +#endif /* IPCCOMMUNICATOR_H */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCException.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCException.cpp b/weex_core/Source/IPC/IPCException.cpp new file mode 100644 index 0000000..a3441b5 --- /dev/null +++ b/weex_core/Source/IPC/IPCException.cpp @@ -0,0 +1,32 @@ +#include "IPCException.h" +#include <stdarg.h> +#include <string> + +struct IPCException::IPCExceptionImpl { + std::string str; +}; + +IPCException::IPCException(const char* fmt, ...) + : m_impl(new IPCExceptionImpl) +{ + va_list ap; + char buffer[256]; + va_start(ap, fmt); + vsnprintf(buffer, 256, fmt, ap); + va_end(ap); + m_impl->str.assign(buffer); +} + +IPCException::~IPCException() +{ +} + +IPCException::IPCException(IPCException&& ex) +{ + m_impl = std::move(ex.m_impl); +} + +const char* IPCException::msg() const +{ + return m_impl->str.c_str(); +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCException.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCException.h b/weex_core/Source/IPC/IPCException.h new file mode 100644 index 0000000..8dc633d --- /dev/null +++ b/weex_core/Source/IPC/IPCException.h @@ -0,0 +1,16 @@ +#ifndef IPCEXCEPTION_H +#define IPCEXCEPTION_H +#include <memory> + +class IPCException { +public: + IPCException(const char* fmt, ...); + ~IPCException(); + IPCException(IPCException&& ex); + const char* msg() const; + +private: + struct IPCExceptionImpl; + std::unique_ptr<IPCExceptionImpl> m_impl; +}; +#endif /* IPCEXCEPTION_H */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCFutexPageQueue.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCFutexPageQueue.cpp b/weex_core/Source/IPC/IPCFutexPageQueue.cpp new file mode 100644 index 0000000..f2423fc --- /dev/null +++ b/weex_core/Source/IPC/IPCFutexPageQueue.cpp @@ -0,0 +1,191 @@ +#include "IPCFutexPageQueue.h" +#include "IPCCheck.h" +#include "IPCException.h" +#include "IPCLog.h" +#include "IPCType.h" +#include "futex.h" +#include <errno.h> +#include <sched.h> +#include <string.h> +#include <sys/mman.h> +#include <time.h> +#include <unistd.h> + +IPCFutexPageQueue::IPCFutexPageQueue(void* sharedMemory, size_t s, size_t id) + : m_currentWrite(id) + , m_currentRead(id ^ 1) + , m_pageSize(s / m_pagesCount) + , m_sharedMemory(sharedMemory) + , m_tid(gettid()) +{ + IPC_DCHECK(s == ipc_size); + IPC_LOGD("id: %zu", id); + for (int i = m_currentWrite; i < m_pagesCount; i += 2) { + uint32_t* data = static_cast<uint32_t*>(getPage(i)); + data[1] |= m_finishTag; + } + lock(m_currentWrite, true); +} + +IPCFutexPageQueue::~IPCFutexPageQueue() +{ + // build a terminate msg. + uint32_t* data = static_cast<uint32_t*>(getPage(m_currentWrite)); + data[1] = sizeof(uint32_t) * 2; + data[2] = MSG_TERMINATE; + data[3] = static_cast<uint32_t>(IPCType::END); + try { + unlock(m_currentWrite); + } catch (IPCException& e) { + IPC_LOGE("%s", e.msg()); + } + munmap(m_sharedMemory, m_pageSize << 2); +} + +void IPCFutexPageQueue::stepWrite() +{ + IPC_LOGD("stepWrite"); + clearFinishedTag(); + size_t current = m_currentWrite; + m_currentWrite = step(m_currentWrite); + lock(m_currentWrite, true); + unlock(current); +} + +void IPCFutexPageQueue::unlock(size_t id) +{ + IPC_LOGD("unlock: %zu", id); + volatile uint32_t* pageStart = static_cast<volatile uint32_t*>(getPage(id)); + + uint32_t l = m_tid; + if (__atomic_compare_exchange_n(pageStart, &l, 0, + false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) { + return; + } + if ((l & FUTEX_WAITERS) != 0) { + int futexReturn = __futex(pageStart, FUTEX_UNLOCK_PI, 0, nullptr); + if (futexReturn == -1) { + throw IPCException("failed to futex unlock %s", strerror(errno)); + } + return; + } else if ((l & FUTEX_TID_MASK) != m_tid) { + throw IPCException("l is not equal to tid: %d %d", l, m_tid); + } + throw IPCException("expected lock value"); +} + +void IPCFutexPageQueue::lock(size_t id, bool checkFinish) +{ + volatile uint32_t* pageStart = static_cast<volatile uint32_t*>(getPage(id)); + uint32_t l = m_tid; + uint32_t expected = 0; + IPC_LOGD("lock: %zu", id); + // wait for the finished tag; + if (checkFinish) { + while (true) { + uint32_t finishedTag = pageStart[1]; + if (finishedTag == m_finishTag) { + break; + } + struct timespec waitTime = { m_timeoutSec, 0 }; + int futexReturn = __futex(pageStart + 1, FUTEX_WAIT, 0, &waitTime); + if (futexReturn == -1) { + int myerrno = errno; + if (myerrno == EINTR) + continue; + else if (myerrno == ETIMEDOUT) { + throw IPCException("IPCFutexPageQueue::lock timeout when waiting for finished"); + } else if (myerrno == EAGAIN) { + // become m_finishTag when enter the linux kernel. + break; + } else { + throw IPCException("IPCException::lock waiting for finished tag %u: %s", pageStart[1], strerror(myerrno)); + } + } + break; + } + } + if (__atomic_compare_exchange_n(pageStart, &expected, l, + false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) { + return; + } + errno = 0; + while (true) { + int futexReturn = __futex(pageStart, FUTEX_LOCK_PI, 1, nullptr); + if (futexReturn == -1 && errno != EINTR) { + + volatile uint32_t* pageStart0 = static_cast<volatile uint32_t*>(getPage(0)); + volatile uint32_t* pageStart1 = static_cast<volatile uint32_t*>(getPage(1)); + volatile uint32_t* pageStart2 = static_cast<volatile uint32_t*>(getPage(2)); + volatile uint32_t* pageStart3 = static_cast<volatile uint32_t*>(getPage(3)); + throw IPCException("futex lock pi failed: %s, %x %x (%x %x %x %x)", strerror(errno), *pageStart, m_tid, *pageStart0, *pageStart1, *pageStart2, *pageStart3); + } + if (futexReturn == -1) + continue; + break; + } + l = *pageStart; + if ((l & FUTEX_OWNER_DIED)) { + unlock(id); + throw IPCException("original owner has die"); + } +} + +void* IPCFutexPageQueue::getPage(size_t id) +{ + size_t offset = id * m_pageSize; + return static_cast<char*>(m_sharedMemory) + offset; +} + +void IPCFutexPageQueue::lockReadPage() +{ + IPC_LOGD("lockReadPage"); + uint32_t* pageStart = static_cast<uint32_t*>(getPage(m_currentRead)); + if (!*pageStart) { + // this page should be locked. + } + lock(m_currentRead, false); +} + +void IPCFutexPageQueue::unlockReadPageAndStep() +{ + IPC_LOGD("unlockReadPageAndStep"); + setFinishedTag(); + unlock(m_currentRead); + m_currentRead = step(m_currentRead); +} + +void IPCFutexPageQueue::spinWaitPeer() +{ + volatile uint32_t* pageStart = static_cast<volatile uint32_t*>(getPage(m_currentRead)); + struct timespec start; + clock_gettime(CLOCK_MONOTONIC, &start); + while (!*pageStart) { + sched_yield(); + struct timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + if ((now.tv_sec - start.tv_sec) > m_timeoutSec) + throw IPCException("spinWaitPeer timeout"); + } +} + +void IPCFutexPageQueue::setFinishedTag() +{ + uint32_t* pageStart = static_cast<uint32_t*>(getPage(m_currentRead)); + uint32_t expected = 0; + if (__atomic_compare_exchange_n(pageStart + 1, &expected, m_finishTag, + false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) { + IPC_LOGD("setFinishedTag:waking writer"); + __futex(pageStart + 1, FUTEX_WAKE, 1, nullptr); + return; + } else { + IPC_LOGD("setFinishedTag unexpected value: %u", expected); + } +} + +void IPCFutexPageQueue::clearFinishedTag() +{ + uint32_t* pageRead = static_cast<uint32_t*>(getPage(m_currentWrite)); + pageRead[1] = 0; + __atomic_thread_fence(__ATOMIC_SEQ_CST); +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCFutexPageQueue.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCFutexPageQueue.h b/weex_core/Source/IPC/IPCFutexPageQueue.h new file mode 100644 index 0000000..da474eb --- /dev/null +++ b/weex_core/Source/IPC/IPCFutexPageQueue.h @@ -0,0 +1,48 @@ +#ifndef IPCFUTEXPAGEQUEUE_H +#define IPCFUTEXPAGEQUEUE_H + +#include <stdint.h> + +// shared memory page layout: +// futex uint32_t +// state word uint32_t +// package size uint32_t +// msg type uint32_t +// types[] uint32_t[] +// +// data whatever types indicate +// A page queue is composed of m_pagesCount pages +// and will use repeatedly. +class IPCFutexPageQueue { +public: + IPCFutexPageQueue(void* sharedMemory, size_t s, size_t id); + ~IPCFutexPageQueue(); + void stepWrite(); + void lockReadPage(); + void unlockReadPageAndStep(); + void spinWaitPeer(); + inline void* getCurrentReadPage() { return sizeof(uint32_t) * 2 + static_cast<char*>(getPage(m_currentRead)); } + inline void* getCurrentWritePage() { return sizeof(uint32_t) * 2 + static_cast<char*>(getPage(m_currentWrite)); } + inline size_t getPageSize() const { return m_pageSize - sizeof(uint32_t) * 2; } + + static const size_t ipc_size = 4 * 1024 * 1024; + +private: + void unlock(size_t id); + void lock(size_t id, bool checkFinish); + void* getPage(size_t id); + inline size_t step(size_t s) { return (s + 2) & (m_pagesCount - 1); } + void setFinishedTag(); + void clearFinishedTag(); + + size_t m_currentWrite; + size_t m_currentRead; + size_t m_pageSize; + void* m_sharedMemory; + int m_tid; + static const uint32_t m_finishTag = static_cast<uint32_t>(1); + static const size_t m_pagesCount = 16; + static const int m_timeoutSec = 32; +}; + +#endif /* IPCFUTEXPAGEQUEUE_H */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/weex_core/Source/IPC/IPCHandler.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/IPC/IPCHandler.cpp b/weex_core/Source/IPC/IPCHandler.cpp new file mode 100644 index 0000000..6c11b06 --- /dev/null +++ b/weex_core/Source/IPC/IPCHandler.cpp @@ -0,0 +1,36 @@ +#include "IPCHandler.h" +#include "IPCLog.h" +#include "IPCResult.h" +#include <unordered_map> + +namespace { +class IPCHandlerImpl : public IPCHandler { +public: + std::unique_ptr<IPCResult> handle(uint32_t msg, IPCArguments*) override; + void registerHandler(int msg, const std::function<std::unique_ptr<IPCResult>(IPCArguments*)>& handler) override; + +private: + typedef std::unordered_map<int, std::function<std::unique_ptr<IPCResult>(IPCArguments*)>> MapType; + MapType m_map; +}; + +std::unique_ptr<IPCResult> IPCHandlerImpl::handle(uint32_t msg, IPCArguments* arguments) +{ + auto it = m_map.find(msg); + if (it == m_map.end()) { + IPC_LOGE("unable to find msg: %d", msg); + return createVoidResult(); + } + return it->second(arguments); +} + +void IPCHandlerImpl::registerHandler(int msg, const std::function<std::unique_ptr<IPCResult>(IPCArguments*)>& handler) +{ + m_map.insert(MapType::value_type(msg, handler)); +} +} + +std::unique_ptr<IPCHandler> createIPCHandler() +{ + return std::unique_ptr<IPCHandler>(new IPCHandlerImpl); +}
