You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ac...@apache.org on 2017/08/10 05:59:01 UTC

[04/14] incubator-weex git commit: * [test] add new script

* [test] add new script


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/ee0bc569
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/ee0bc569
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/ee0bc569

Branch: refs/heads/0.16-dev
Commit: ee0bc56995ea1bede3b13c3766844c981b7c74cf
Parents: d965147
Author: gurisxie <27...@qq.com>
Authored: Wed Aug 9 13:57:47 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Aug 9 13:57:47 2017 +0800

----------------------------------------------------------------------
 test/pages/components/iconfont.vue              |  71 ++++++++++
 test/pages/components/input-event.vue           |  65 ++++++++++
 test/pages/components/refresh-loading.vue       | 115 +++++++++++++++++
 test/pages/components/switch-event.vue          |  60 +++++++++
 test/pages/components/web-event.vue             |  56 ++++++++
 test/pages/modules/animation-translate.vue      | 129 +++++++++++++++++++
 test/pages/modules/clipboard-event.vue          |  57 ++++++++
 test/pages/modules/downgrade-event.vue          |  74 +++++++++++
 test/pages/modules/gesture-longpress.vue        |  75 +++++++++++
 test/pages/modules/modal-event.vue              |  61 +++++++++
 test/pages/modules/picker-event.vue             |  63 +++++++++
 test/pages/modules/storage-event.vue            |  59 +++++++++
 test/pages/modules/stream-result.vue            |  85 ++++++++++++
 test/run.sh                                     |  28 +++-
 test/scripts/components/iconfont.test.js        |  34 +++++
 test/scripts/components/input-event.test.js     |  38 ++++++
 test/scripts/components/refresh-loading.test.js |  38 ++++++
 test/scripts/components/switch-event.test.js    |  38 ++++++
 test/scripts/components/web-event.test.js       |  30 +++++
 .../scripts/modules/animation-translate.test.js |  40 ++++++
 test/scripts/modules/clipboard-event.test.js    |  35 +++++
 test/scripts/modules/downgrade-event.test.js    |  30 +++++
 test/scripts/modules/gesture-longpress.test.js  |  37 ++++++
 test/scripts/modules/modal-event.test.js        |  32 +++++
 test/scripts/modules/picker-event.test.js       |  35 +++++
 test/scripts/modules/storage-event.test.js      |  36 ++++++
 test/scripts/modules/stream-result.test.js      |  34 +++++
 test/scripts/util.js                            |  38 ++++++
 test/scripts/zcover-generate.js                 |  32 +++++
 29 files changed, 1520 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/components/iconfont.vue
----------------------------------------------------------------------
diff --git a/test/pages/components/iconfont.vue b/test/pages/components/iconfont.vue
new file mode 100644
index 0000000..e7b6737
--- /dev/null
+++ b/test/pages/components/iconfont.vue
@@ -0,0 +1,71 @@
+<template>
+  <div>
+    <panel title = 'iconfont' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="change" @click.native="change"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text :style="{'font-size':'30px','font-family':fontF}">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+	var he = require('he');
+  module.exports = {
+    data : {
+    	fontF:'iconfont2',
+      resultTxt:''
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    mounted: function () {
+			var dom = weex.requireModule('dom');
+			//目前支持ttf、woff文件,不支持svg、eot类型
+			dom.addRule('fontFace', {
+				'fontFamily': "iconfont2",
+				'src': "url('http://at.alicdn.com/t/font_1469606063_76593.ttf')"
+			});
+			dom.addRule('fontFace', {
+				'fontFamily': "iconfont3",
+				'src': "url('http://at.alicdn.com/t/font_1469606522_9417143.woff')"
+			});
+			this.resultTxt=he.decode('http ttf: &#xe606;&#xe605;&#xe603;&#xe602;&#xe601;&#xe600;')
+		},
+    methods : {
+      change:function() {
+      	this.fontF='iconfont3';
+        this.resultTxt = he.decode('http woff: &#xe606;&#xe605;&#xe604;&#xe603;&#xe602;&#xe601;&#xe600;') 
+      },
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+  .input{
+    width: 500px;
+    height:100px;
+    border-width: 1px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/components/input-event.vue
----------------------------------------------------------------------
diff --git a/test/pages/components/input-event.vue b/test/pages/components/input-event.vue
new file mode 100644
index 0000000..2135963
--- /dev/null
+++ b/test/pages/components/input-event.vue
@@ -0,0 +1,65 @@
+<template>
+  <div>
+    <panel title = 'input-event' :padding-body='0'>
+      <div>
+        <input class="input mr-base" type="text" placeholder="onchange" @change="eventChange"></input>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  module.exports = {
+    data : {
+      width : '',
+      height: '',
+      resultTxt:''
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      eventInput:function (e) {
+        this.resultTxt='input:' + e.value
+      },
+      eventChange:function(e){
+        this.resultTxt='change:'+ e.value 
+      },  
+      eventFocus:function (e) {
+        this.resultTxt='focus:'+ e.value 
+      }, 
+      eventBlur:function (e) {
+        this.resultTxt='blur:'+ e.value 
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+  .input{
+    width: 500px;
+    height:100px;
+    border-width: 1px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/components/refresh-loading.vue
----------------------------------------------------------------------
diff --git a/test/pages/components/refresh-loading.vue b/test/pages/components/refresh-loading.vue
new file mode 100644
index 0000000..940297c
--- /dev/null
+++ b/test/pages/components/refresh-loading.vue
@@ -0,0 +1,115 @@
+<template>
+  <div>
+    <panel title = 'refresh-loading' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="hideRefresh" @click.native="hideRefresh"></button>
+        <button class='mr-base' type="info" size="middle" value="hideLoading" @click.native="hideLoading"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">refresh:{{refreshDisplay}}</text>
+        <text style="font-size:30px">loading:{{loadingDisplay}}</text>
+      </panel>
+    </panel>
+    <list>
+      <refresh  class="refresh" :display="refreshDisplay" @refresh="onrefresh">
+        <loading-indicator class="indicator"></loading-indicator>
+        <text class="refresh-txt">↓ 下拉刷新</text>
+      </refresh>
+  
+      <cell v-for="(k,v) in cells" style="height:100">
+        <text class="txt">{{k}}-{{v}}</text>
+      </cell>
+  
+      <loading class="refresh" :display="loadingDisplay" @loading="onloading">
+        <loading-indicator class="indicator"></loading-indicator>
+        <text class="refresh-txt">↑ 上拉加载</text>
+      </loading>
+    </list>
+
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 图片加载后调用load事件及native高宽
+
+测试方式:
+  * 校验第一张图片的native高宽
+  * 切换图片后,校验第二张图片的native高宽
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  module.exports = {
+    data : {
+      width : '',
+      height: '',
+      refreshDisplay: 'hide',
+      loadingDisplay: 'hide',
+      cells: [0,1,2,3,4,5,6,7,8,9],
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      onrefresh: function(e) {
+        // show refresh
+        this.refreshDisplay = 'show';
+      },
+      hideRefresh: function(e) {
+        // hide refresh
+        if (this.refreshDisplay !== 'hide') {
+          this.refreshDisplay = 'hide';
+        }
+      },
+
+      onloading: function() {
+        // show
+        this.loadingDisplay = 'show';
+        
+      },
+      hideLoading:function() {
+        if (this.loadingDisplay !== 'hide') {
+          this.loadingDisplay = 'hide';
+        }
+      },
+    }
+  }
+</script>
+
+<style scoped>
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+  .refresh{
+    flex-direction:row;
+    justify-content:center;
+    align-items: center;
+    width:750;
+    height: 100;
+    border-width:3;
+    background-color: #33b5e5;
+  }
+  .refresh-txt {
+    font-size: 30;
+    color: #FFFF00;
+    text-align: center;
+  }
+  .indicator{
+    height: 50;
+    width: 50;
+    color: #889967;
+  }
+  .txt {
+    font-size:40;
+    height:100;
+    padding:30;
+    border-width:1;
+    border-style:dotted;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/components/switch-event.vue
----------------------------------------------------------------------
diff --git a/test/pages/components/switch-event.vue b/test/pages/components/switch-event.vue
new file mode 100644
index 0000000..a14991f
--- /dev/null
+++ b/test/pages/components/switch-event.vue
@@ -0,0 +1,60 @@
+<template>
+  <div>
+    <panel title = 'switch-event' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <switch class="origin mr-base" @change="change"></switch>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  module.exports = {
+    data : {
+      width : '',
+      height: '',
+      resultTxt:''
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      click:function() {
+        this.resultTxt = 'click response' 
+      },
+      change:function(e) {
+        this.resultTxt = 'change response:' + e.value
+      },
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+  .input{
+    width: 500px;
+    height:100px;
+    border-width: 1px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/components/web-event.vue
----------------------------------------------------------------------
diff --git a/test/pages/components/web-event.vue b/test/pages/components/web-event.vue
new file mode 100644
index 0000000..9de03f8
--- /dev/null
+++ b/test/pages/components/web-event.vue
@@ -0,0 +1,56 @@
+<template>
+  <div>
+    <panel title = 'web-event' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <web class="mr-base web" :src = "src"  @pagestart = "pagestartEvt" @pagefinish = "pagefinishEvt" @error = "errorEvt"></web> 
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  module.exports = {
+    data : {
+      src:'http://h5.m.taobao.com',
+      resultTxt:''
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      pagefinishEvt:function(e){
+        this.resultTxt = 'page finish'
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+  .web{
+    width: 500px;
+    height:300px;
+    border-width: 1px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/modules/animation-translate.vue
----------------------------------------------------------------------
diff --git a/test/pages/modules/animation-translate.vue b/test/pages/modules/animation-translate.vue
new file mode 100644
index 0000000..f490bf8
--- /dev/null
+++ b/test/pages/modules/animation-translate.vue
@@ -0,0 +1,129 @@
+<template>
+  <div>
+    <panel title = 'animation-translate' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="translate" @click.native="translate"></button>
+        <button class='mr-base' type="info" size="middle" value="translateX" @click.native="translateX"></button>
+        <button class='mr-base' type="info" size="middle" value="translateY" @click.native="translateY"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+        <text style="font-size:30px">top:{{top}}</text>
+        <text style="font-size:30px">left:{{left}}</text>
+      </panel>
+    </panel>
+    <div ref="block" class="block" :style="{'transform-origin':transformOrigin}">
+        <text class="font" :value = 'testValue'></text>
+    </div>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  const animation = weex.requireModule('animation');
+  const dom = weex.requireModule('dom');
+
+  module.exports = {
+    data : {
+      resultTxt:'',
+      top:'',
+      left:'',
+      transformOrigin: 'center center',
+      current_rotate: 0,
+      current_scale: 1,
+      current_color: '#FF0000',
+      current_opacity: 1,
+      current_translate: '',
+      current_translateX:'',
+      current_translateY:'',
+      current_transform: '',
+      isStop: true,
+      testValue:"test"
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      anim: function (styles, timingFunction, duration, callback) {
+        animation.transition(this.$refs.block, {
+              styles: styles,
+              timingFunction: timingFunction,
+              duration: duration
+          }, callback);
+      },
+      
+      translate: function (e) {
+        this.resultTxt=''
+          this.current_translate = this.current_translate ? '' : 'translate(50%, 50%)';
+          this.anim({
+              transform: this.current_translate
+          }, 'linear', 500, ()=>{
+            this.resultTxt='translate结束'
+            dom.getComponentRect(this.$refs.block, option => {
+              console.log('getComponentRect:', option)
+              this.top = option.size.top;
+              this.left = option.size.left;
+            })
+          });
+      },
+      translateX: function (e) {
+        this.resultTxt=''
+          this.current_translateX = this.current_translateX ? '' : 'translateX(-400px)';
+          this.anim({
+              transform: this.current_translateX
+          }, 'linear', 500, ()=>{
+            this.resultTxt='translateX结束'
+            dom.getComponentRect(this.$refs.block, option => {
+              console.log('getComponentRect:', option)
+              this.top = option.size.top;
+              this.left = option.size.left;
+            })
+          });
+      },
+      translateY: function (e) {
+        this.resultTxt=''
+          this.current_translateY = this.current_translateY ? '' : 'translateY(-125px)';
+          this.anim({
+              transform: this.current_translateY
+          }, 'linear', 500, ()=>{
+            this.resultTxt='translateY结束'
+            dom.getComponentRect(this.$refs.block, option => {
+              console.log('getComponentRect:', option)
+              this.top = option.size.top;
+              this.left = option.size.left;
+            })
+          });
+      },
+    }
+  }
+</script>
+
+<style scoped>
+  .block {
+        position: absolute;
+        width: 300;
+        height: 300;
+        top: 350;
+        left: 250;
+        bottom:250;
+        background-color: #FF0000;
+    }
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/modules/clipboard-event.vue
----------------------------------------------------------------------
diff --git a/test/pages/modules/clipboard-event.vue b/test/pages/modules/clipboard-event.vue
new file mode 100644
index 0000000..865daee
--- /dev/null
+++ b/test/pages/modules/clipboard-event.vue
@@ -0,0 +1,57 @@
+<template>
+  <div>
+    <panel title = 'clipboard-event' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="setItem" @click.native="setItem"></button>
+        <button class='mr-base' type="info" size="middle" value="getItem" @click.native="getItem"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  var clipboard = weex.requireModule("clipboard");
+  module.exports = {
+    data : {
+      resultTxt:'',
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      setItem:function() {
+        clipboard.setString('clipboard-value');
+      },
+      getItem:function() {
+        clipboard.getString((e)=>{
+          this.resultTxt = e.data;
+        });
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/modules/downgrade-event.vue
----------------------------------------------------------------------
diff --git a/test/pages/modules/downgrade-event.vue b/test/pages/modules/downgrade-event.vue
new file mode 100644
index 0000000..4669d96
--- /dev/null
+++ b/test/pages/modules/downgrade-event.vue
@@ -0,0 +1,74 @@
+<template>
+  <div>
+    <panel title = 'clipboard-event' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="setItem" @click.native="setItem"></button>
+        <button class='mr-base' type="info" size="middle" value="getItem" @click.native="getItem"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  import Downgrade from '@weex-project/downgrade'
+
+  Downgrade.condition({
+    ios: {
+        osVersion: '>1.0',
+        appVersion: '>1.0.0',
+        weexVersion: '>1',
+        deviceModel: ['iPhone5,1']
+    },
+    android: {
+        osVersion: '>1.0',
+        appVersion: '>1.0.0',
+        weexVersion: '>1',
+        deviceModel: ['G-2PW2100']
+    }
+  });
+
+  var clipboard = weex.requireModule("clipboard");
+  module.exports = {
+    data : {
+      resultTxt:'',
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      setItem:function() {
+        clipboard.setString('clipboard-value');
+      },
+      getItem:function() {
+        clipboard.getString((e)=>{
+          this.resultTxt = e.data;
+        });
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/modules/gesture-longpress.vue
----------------------------------------------------------------------
diff --git a/test/pages/modules/gesture-longpress.vue b/test/pages/modules/gesture-longpress.vue
new file mode 100644
index 0000000..adb88d5
--- /dev/null
+++ b/test/pages/modules/gesture-longpress.vue
@@ -0,0 +1,75 @@
+<template>
+  <div>
+    <panel title = 'gesture-longpress' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="longpress" @longpress.native="longpress"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text test-id='result' style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  var clipboard = weex.requireModule("clipboard");
+  module.exports = {
+    data : {
+      resultTxt:'',
+      screenX:'',
+      screenY:'',
+      identifier:'',
+      pageX:'',
+      pageY:''
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      longpress:function(e) {
+        if(typeof window != 'undefined')
+        {
+          this.screenY=e.touch.screenY;
+          this.identifier=e.touch.identifier;
+          this.screenX=e.touch.screenX;
+          this.pageY=e.touch.pageY;
+          this.pageX=e.touch.pageX;
+
+        }
+        else
+        {
+          var dict= e.changedTouches[0];
+          this.screenY=dict.screenY;
+          this.identifier=dict.identifier;
+          this.screenX=dict.screenX;
+          this.pageY=dict.pageY;
+          this.pageX=dict.pageX;
+          this.resultTxt = JSON.stringify(dict)
+        }
+
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/modules/modal-event.vue
----------------------------------------------------------------------
diff --git a/test/pages/modules/modal-event.vue b/test/pages/modules/modal-event.vue
new file mode 100644
index 0000000..eed3612
--- /dev/null
+++ b/test/pages/modules/modal-event.vue
@@ -0,0 +1,61 @@
+<template>
+  <div>
+    <panel title = 'modal-event' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="alertClick" @click.native="alertClick"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  var GET_URL = 'http://httpbin.org/get';
+  var modal = weex.requireModule("modal");
+  module.exports = {
+    data : {
+      resultTxt:'',
+      sendtype:'json',
+      detail:''
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      alertClick:function() {
+        var params = {
+          'message':'message',
+          'okTitle':'OK',
+        }
+        modal.alert(params,()=>{
+          this.resultTxt = 'alert success';
+        })
+      },
+      
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/modules/picker-event.vue
----------------------------------------------------------------------
diff --git a/test/pages/modules/picker-event.vue b/test/pages/modules/picker-event.vue
new file mode 100644
index 0000000..9e08ff9
--- /dev/null
+++ b/test/pages/modules/picker-event.vue
@@ -0,0 +1,63 @@
+<template>
+  <div>
+    <panel title = 'picker-event' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="showPicker" @click.native="showPicker"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  var GET_URL = 'http://httpbin.org/get';
+  var picker = weex.requireModule("picker");
+  module.exports = {
+    data : {
+      resultTxt:'',
+      sendtype:'json',
+      detail:''
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      showPicker:function() {
+        var params =  {
+            'value':'2018-01-01',
+            'max':'2020-01-01',
+            'min':'2010-01-01',
+        }
+        picker.pickDate(params,  (ret) => {
+          if(ret.result == 'success') {
+              this.resultTxt = ret.data;
+          }
+        });
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/modules/storage-event.vue
----------------------------------------------------------------------
diff --git a/test/pages/modules/storage-event.vue b/test/pages/modules/storage-event.vue
new file mode 100644
index 0000000..85b6861
--- /dev/null
+++ b/test/pages/modules/storage-event.vue
@@ -0,0 +1,59 @@
+<template>
+  <div>
+    <panel title = 'storage-event' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="setItem" @click.native="setItem"></button>
+        <button class='mr-base' type="info" size="middle" value="getItem" @click.native="getItem"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  var storage = weex.requireModule("storage");
+  module.exports = {
+    data : {
+      resultTxt:'',
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      setItem:function() {
+        storage.setItem('key', 'value', ()=>{
+          this.resultTxt = 'setItem success';
+        });
+      },
+      getItem:function() {
+        storage.getItem('key', (e)=>{
+          this.resultTxt = 'getItem:'+e.data;
+        });
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/pages/modules/stream-result.vue
----------------------------------------------------------------------
diff --git a/test/pages/modules/stream-result.vue b/test/pages/modules/stream-result.vue
new file mode 100644
index 0000000..6df7d03
--- /dev/null
+++ b/test/pages/modules/stream-result.vue
@@ -0,0 +1,85 @@
+<template>
+  <div>
+    <panel title = 'stream-result' :padding-body='0'>
+      <div style='flex-direction:row'> 
+        <button class='mr-base' type="info" size="middle" value="streamGet" @click.native="streamGet"></button>
+      </div>
+      <panel title='校验结果:'>
+        <text style="font-size:30px">{{resultTxt}}</text>
+        <text style="font-size:30px">{{detail}}</text>
+      </panel>
+    </panel>
+    <wxc-desc>
+      <text class='desc'>
+测试点:
+  * 
+
+测试方式:
+  * 
+  * 
+      </text>
+    </wxc-desc>
+  </div>
+</template>
+<script>
+  var GET_URL = 'http://httpbin.org/get';
+  var stream = weex.requireModule("stream");
+  module.exports = {
+    data : {
+      resultTxt:'',
+      sendtype:'json',
+      detail:''
+    },
+    components: {
+      "wxc-desc":require('../include/wxc-desc.vue'),
+      panel: require('../include/panel.vue'),
+      button: require('../include/button.vue'),
+    },
+    methods : {
+      streamGet:function() {
+        this.streamFetch("GET",GET_URL);
+      },
+      streamFetch:function(stype,surl){
+        var me = this;
+        if(this.sendtype=="jsonp"){
+          surl=this.JSONP_URL;
+        }
+        stream.fetch({
+          method: stype,
+          url: surl,
+          type:this.sendtype,
+          timeout : 10000
+        }, function(ret) {
+          nativeLog(JSON.stringify(ret)+ typeof(ret.data));
+          if(stype=="HEAD"){
+              console.log('get:'+ret);
+              me.resultTxt = 'response:success'
+              me.detail = ret.statusText;
+          }else{
+            if(!ret.ok){
+              me.resultTxt = 'response:failed';
+              me.detail = (typeof(ret.data)!='undefined'?JSON.stringify(ret.data):"");
+            }else{
+              me.resultTxt = 'response:success';
+              me.detail = "data type:"+ typeof(ret.data) + ";  " +JSON.stringify(ret.data);
+            }
+          }
+        },function(response){
+          console.log('get in progress:'+JSON.stringify(response));
+          me.resultTxt = JSON.stringify(response);
+        });
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .origin{background-color: #FFFFDF;width: 200;height: 50;}
+  .mr-base{
+    margin: 10px;
+  }
+  .desc{
+    color:#aa0000;
+    font-size: 30px;
+  }
+</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/run.sh
----------------------------------------------------------------------
diff --git a/test/run.sh b/test/run.sh
index edeb4a2..8284fad 100755
--- a/test/run.sh
+++ b/test/run.sh
@@ -32,10 +32,13 @@ function buildiOS {
     builddir=$(pwd)'/ios/playground'
     current_dir=$PWD
     cd $builddir
-    product=$(PWD)'/build/Debug-iphoneos/WeexDemo.app'
-
+    
     pod update
-    [ -f product ] && rm -rf product
+    if [ $needCoverage = "cover" ] && [ -d "./XcodeCoverage/" ]; then
+        ./XcodeCoverage/podsGcovConfig
+    fi
+    product=$(PWD)'/build/Debug-iphonesimulator/'
+    [ -f $product ] && rm -rf $product
     
     xcodebuild clean build -quiet -workspace WeexDemo.xcworkspace -sdk iphonesimulator -scheme Pods-WeexDemo SYMROOT=$(PWD)/build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
     xcodebuild clean build -quiet -workspace WeexDemo.xcworkspace -sdk iphonesimulator -scheme WeexSDK SYMROOT=$(PWD)/build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
@@ -46,16 +49,28 @@ function buildiOS {
 
 }
 
+function coverageGenerate {
+    current_dir=$PWD
+    xcodeCover="${current_dir}/ios/playground/XcodeCoverage"
+    if [ -d $xcodeCover ]; then
+        cd $xcodeCover
+        ./getcov -o . -p WeexSDK -x
+    fi
+}
+
 function runiOS {
     echo 'Run in iOS...'
     echo $1
-    buildiOS
+    buildiOS $2
     echo 'killAll Simulator......'
     killAll Simulator || echo 'killall failed'
     # ps -ef
     startMacacaServer
     startWeexServer
     platform=ios ./node_modules/mocha/bin/mocha  $1 -f '@ignore-ios' -i --recursive --bail --verbose
+    if [ $needCoverage = "cover" ]; then
+        coverageGenerate
+    fi
 }
 
 function runWeb {
@@ -71,6 +86,8 @@ function killserver {
 
 platform_android='android'
 platform=${1:-$platform_android}
+coverage_status='noCover'
+needCoverage=${2:-$coverage_status}
  
 killserver
 #run tests
@@ -80,6 +97,7 @@ elif [ $platform = 'web' ];
 then
     runWeb ./test/scripts/
 else
-    runiOS ./test/scripts/
+    echo "$needCoverage"
+    runiOS ./test/scripts/ "$needCoverage"
 fi
 killserver

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/components/iconfont.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/iconfont.test.js b/test/scripts/components/iconfont.test.js
new file mode 100644
index 0000000..1019fc4
--- /dev/null
+++ b/test/scripts/components/iconfont.test.js
@@ -0,0 +1,34 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+var switchTag = 'XCUIElementTypeSwitch';
+
+var goal = 'iconfont';
+var interval = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/'+goal+'.js'))
+      .waitForElementByName(goal, interval, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.waitForElementByName('change', interval, 2000)
+      .click()
+      .sleep(500); 
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/components/input-event.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/input-event.test.js b/test/scripts/components/input-event.test.js
new file mode 100644
index 0000000..7a1868f
--- /dev/null
+++ b/test/scripts/components/input-event.test.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+var inputTag = 'XCUIElementTypeTextField';
+
+var goal = 'input-event';
+var interval = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/'+goal+'.js'))
+      .waitForElementByName(goal, interval, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    return driver
+      .waitForElementByClassName(inputTag, interval, 2000)
+      .sendKeys('testChange')
+      .sleep(500)
+      .sendKeys('\n')
+      .waitForElementByName('change:testChange', interval, 2000)
+
+
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/components/refresh-loading.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/refresh-loading.test.js b/test/scripts/components/refresh-loading.test.js
new file mode 100644
index 0000000..ca3f196
--- /dev/null
+++ b/test/scripts/components/refresh-loading.test.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+var goal = 'refresh-loading';
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/'+goal+'.js'))
+      .waitForElementByName("refresh:hide", util.getGETActionWaitTimeMills(), 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    return driver
+    .drag('toUp',0.4)
+    .waitForElementByName("refresh:show", util.getGETActionWaitTimeMills(), 2000)
+    .waitForElementByName("hideRefresh").click()
+    .waitForElementByName("refresh:hide", util.getGETActionWaitTimeMills(), 2000)
+
+    .drag('toDown',0.4)
+    .drag('toDown',0.4)
+    .waitForElementByName("loading:show", util.getGETActionWaitTimeMills(), 2000)
+    .waitForElementByName("hideLoading").click()
+    .waitForElementByName("loading:hide", util.getGETActionWaitTimeMills(), 2000)
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/components/switch-event.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/switch-event.test.js b/test/scripts/components/switch-event.test.js
new file mode 100644
index 0000000..93e1253
--- /dev/null
+++ b/test/scripts/components/switch-event.test.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+var switchTag = 'XCUIElementTypeSwitch';
+
+var goal = 'switch-event';
+var interval = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/'+goal+'.js'))
+      .waitForElementByName(goal, interval, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    return driver
+      .waitForElementByClassName(switchTag, interval, 2000)
+      .click()
+      .waitForElementByName('change response:true', interval, 2000)
+
+      .waitForElementByClassName(switchTag, interval, 2000)
+      .click()
+      .waitForElementByName('change response:false', interval, 2000)
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/components/web-event.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/web-event.test.js b/test/scripts/components/web-event.test.js
new file mode 100644
index 0000000..2ecee7a
--- /dev/null
+++ b/test/scripts/components/web-event.test.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+var goal = 'web-event';
+var interval = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/'+goal+'.js'))
+      .waitForElementByName(goal, interval, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    return driver
+      .waitForElementByName('page finish', interval, 2000)
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/modules/animation-translate.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/modules/animation-translate.test.js b/test/scripts/modules/animation-translate.test.js
new file mode 100644
index 0000000..6ef5d42
--- /dev/null
+++ b/test/scripts/modules/animation-translate.test.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+
+var goal = 'animation-translate';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+      .waitForElementByName(goal, timeout, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.waitForElementByName('translate', timeout, 2000)
+      .click()
+      .waitForElementByName('translate结束')  
+      .waitForElementByName('translateX', timeout, 2000) 
+      .click()
+      .waitForElementByName('translateX结束')
+      .waitForElementByName('translateY', timeout, 2000)
+      .click()
+      .waitForElementByName('translateY结束')
+      
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/modules/clipboard-event.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/modules/clipboard-event.test.js b/test/scripts/modules/clipboard-event.test.js
new file mode 100644
index 0000000..403bb8d
--- /dev/null
+++ b/test/scripts/modules/clipboard-event.test.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+
+var goal = 'clipboard-event';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+      .waitForElementByName(goal, timeout, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.waitForElementByName('setItem', timeout, 2000)
+      .click()
+      .waitForElementByName('getItem', timeout, 2000) 
+      .click()
+      .waitForElementByName('clipboard-value', timeout, 2000)
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/modules/downgrade-event.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/modules/downgrade-event.test.js b/test/scripts/modules/downgrade-event.test.js
new file mode 100644
index 0000000..ce169f7
--- /dev/null
+++ b/test/scripts/modules/downgrade-event.test.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+
+var goal = 'downgrade-event';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.sleep(1000).dismissAlert().catch(function(){});
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/modules/gesture-longpress.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/modules/gesture-longpress.test.js b/test/scripts/modules/gesture-longpress.test.js
new file mode 100644
index 0000000..e600404
--- /dev/null
+++ b/test/scripts/modules/gesture-longpress.test.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+
+var goal = 'gesture-longpress';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+      .waitForElementByName(goal, timeout, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    return driver.waitForElementByName('longpress', timeout, 2000)
+      .touch('press', { duration: 2 })
+      .sleep(1000)
+      .waitForElementById('result',timeout,1000)
+      .text()
+      .then((text) => {
+        assert.include(text, 'screenY')
+      })
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/modules/modal-event.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/modules/modal-event.test.js b/test/scripts/modules/modal-event.test.js
new file mode 100644
index 0000000..58f2499
--- /dev/null
+++ b/test/scripts/modules/modal-event.test.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+var goal = 'modal-event';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+      .waitForElementByName(goal, timeout, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.waitForElementByName('alertClick', timeout, 2000)
+      .click()
+      .waitForElementByName('alert success', timeout, 2000) 
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/modules/picker-event.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/modules/picker-event.test.js b/test/scripts/modules/picker-event.test.js
new file mode 100644
index 0000000..9184f9d
--- /dev/null
+++ b/test/scripts/modules/picker-event.test.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+
+var goal = 'picker-event';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+      .waitForElementByName(goal, timeout, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.waitForElementByName('showPicker', timeout, 2000)
+      .click()
+      .waitForElementByName('Done', timeout, 2000)
+      .click()
+      .waitForElementByName('2018-01-01') 
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/modules/storage-event.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/modules/storage-event.test.js b/test/scripts/modules/storage-event.test.js
new file mode 100644
index 0000000..8b855f8
--- /dev/null
+++ b/test/scripts/modules/storage-event.test.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+
+var goal = 'storage-event';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+      .waitForElementByName(goal, timeout, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.waitForElementByName('setItem', timeout, 2000)
+      .click()
+      .waitForElementByName('setItem success', timeout, 2000)
+      .waitForElementByName('getItem', timeout, 2000) 
+      .click()
+      .waitForElementByName('getItem:value', timeout, 2000)
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/modules/stream-result.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/modules/stream-result.test.js b/test/scripts/modules/stream-result.test.js
new file mode 100644
index 0000000..3503cdd
--- /dev/null
+++ b/test/scripts/modules/stream-result.test.js
@@ -0,0 +1,34 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+var switchTag = 'XCUIElementTypeSwitch';
+
+var goal = 'stream-result';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+      .waitForElementByName(goal, timeout, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.waitForElementByName('streamGet', timeout, 2000)
+      .click()
+      .waitForElementByName('response:success', timeout, 2000) 
+  })
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/util.js
----------------------------------------------------------------------
diff --git a/test/scripts/util.js b/test/scripts/util.js
index fd9fa43..6992429 100644
--- a/test/scripts/util.js
+++ b/test/scripts/util.js
@@ -156,6 +156,44 @@ module.exports = {
                     .sleep(1000)
                 })
             })
+
+            //direct : toUp,toDown,toLeft,toRight, dragStartPct: 偏移量,0~1
+            driverFactory.addPromiseChainMethod('drag', function(direct,dragStartPct) {
+                return this.getWindowSize()
+                    .then(size => {
+                        let {width,height} = size;
+                        if(!direct){direct='toUp';}if(!dragStartPct){dragStartPct=0;}
+                        let fromX,toX,fromY,toY;
+                        switch (direct) {
+                          case 'toUp':
+                            fromX = toX = Math.floor(width / 2);
+                            fromY = Math.floor(height * 1 / 4 + height * dragStartPct * 3/4);
+                            toY = Math.floor(height * 3 / 4 + height * dragStartPct * 1/4);
+                            break;
+                          case 'toLeft':
+                            fromY = toY = Math.floor(height / 2);
+                            fromX = Math.floor(width * 1 / 4 + width * dragStartPct * 3 / 4);
+                            toX = Math.floor(width * 3 / 4 + width * dragStartPct * 1 / 4);
+                            break;
+                          case 'toRight':
+                            fromY = toY = Math.floor(height / 2);
+                            toX = Math.floor(width * 1 / 4 + width * dragStartPct * 3 / 4);
+                            fromX = Math.floor(width * 3 / 4 + width * dragStartPct * 1 / 4);
+                            break;
+                          case 'toDown':
+                          default:
+                            fromX = toX = Math.floor(width / 2);
+                            toY = Math.floor(height * 1 / 4 + height * dragStartPct * 3/4);
+                            fromY = Math.floor(height * 3 / 4 + height * dragStartPct * 1/4);
+                            break;
+                        }
+                        return this.touch('drag', {
+                                fromX: fromX,fromY: fromY,toX: toX,toY: toY,duration: 0.1
+                            })
+                            .sleep(500)
+                    })
+            });
+
           driverFactory.addPromiseChainMethod('swipeLeft', function (distanceRatio, yRatio) {
                 return this
                   .getWindowSize()

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0bc569/test/scripts/zcover-generate.js
----------------------------------------------------------------------
diff --git a/test/scripts/zcover-generate.js b/test/scripts/zcover-generate.js
new file mode 100644
index 0000000..bc958a0
--- /dev/null
+++ b/test/scripts/zcover-generate.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("./util.js");
+
+var goal = 'cover-generate';
+var timeout = util.getGETActionWaitTimeMills();
+describe('weex '+goal+' test @ignore-android', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/modules/'+goal+'.js'))
+      .waitForElementByName(goal, timeout, 2000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+  it('#1 '+goal + ' event', () => {
+    //TODO :截图比对
+    return driver.waitForElementByName('generate', timeout, 2000)
+      .click()
+      .waitForElementByName('coverage success', timeout, 2000) 
+  })
+});
\ No newline at end of file