From c1b215cb94aab3f5bd2874dae3d66c01c0132297 Mon Sep 17 00:00:00 2001
From: pangxie1991 <chenyao1102@gmail.com>
Date: Thu, 2 Mar 2017 17:30:55 +0800
Subject: [PATCH 1/9] unit test init

---
 Makefile                                      |    4 +
 package.json                                  |    8 +-
 test/unit/coverage/lcov-report/base.css       |  213 ++
 test/unit/coverage/lcov-report/index.html     |  656 ++++++
 .../packages/badge-group/index.html           |   97 +
 .../packages/badge-group/index.js.html        |   81 +
 .../lcov-report/packages/badge/index.html     |   97 +
 .../lcov-report/packages/badge/index.js.html  |   81 +
 .../packages/badge/src/badge-group.vue.html   |  140 ++
 .../packages/badge/src/badge.vue.html         |  185 ++
 .../lcov-report/packages/badge/src/index.html |  106 +
 .../lcov-report/packages/button/index.html    |   97 +
 .../lcov-report/packages/button/index.js.html |   81 +
 .../packages/button/src/button.js.html        |  302 +++
 .../packages/button/src/index.html            |   93 +
 .../lcov-report/packages/card/index.html      |   97 +
 .../lcov-report/packages/card/index.js.html   |   81 +
 .../packages/card/src/card.vue.html           |  158 ++
 .../lcov-report/packages/card/src/index.html  |   93 +
 .../packages/cell-group/index.html            |   97 +
 .../packages/cell-group/index.js.html         |   81 +
 .../lcov-report/packages/cell/index.html      |   97 +
 .../lcov-report/packages/cell/index.js.html   |   81 +
 .../packages/cell/src/cell-group.vue.html     |   98 +
 .../packages/cell/src/cell.vue.html           |  194 ++
 .../lcov-report/packages/cell/src/index.html  |  106 +
 .../packages/checkbox-group/index.html        |   97 +
 .../packages/checkbox-group/index.js.html     |   81 +
 .../lcov-report/packages/checkbox/index.html  |   97 +
 .../packages/checkbox/index.js.html           |   81 +
 .../checkbox/src/checkbox-group.vue.html      |  131 ++
 .../packages/checkbox/src/checkbox.vue.html   |  360 +++
 .../packages/checkbox/src/index.html          |  110 +
 .../lcov-report/packages/dialog/index.html    |   97 +
 .../lcov-report/packages/dialog/index.js.html |   81 +
 .../packages/dialog/src/dialog.js.html        |  362 +++
 .../packages/dialog/src/dialog.vue.html       |  324 +++
 .../packages/dialog/src/index.html            |  110 +
 .../lcov-report/packages/field/index.html     |   97 +
 .../lcov-report/packages/field/index.js.html  |   81 +
 .../packages/field/src/field.vue.html         |  306 +++
 .../lcov-report/packages/field/src/index.html |   97 +
 .../lcov-report/packages/icon/index.html      |   97 +
 .../lcov-report/packages/icon/index.js.html   |   81 +
 .../packages/icon/src/icon.vue.html           |  104 +
 .../lcov-report/packages/icon/src/index.html  |   93 +
 .../lcov-report/packages/loading/index.html   |   97 +
 .../packages/loading/index.js.html            |   81 +
 .../packages/loading/src/index.html           |   93 +
 .../packages/loading/src/loading.vue.html     |   98 +
 .../lcov-report/packages/panel/index.html     |   97 +
 .../lcov-report/packages/panel/index.js.html  |   81 +
 .../lcov-report/packages/panel/src/index.html |   93 +
 .../packages/panel/src/panel.vue.html         |  149 ++
 .../lcov-report/packages/picker/index.html    |   97 +
 .../lcov-report/packages/picker/index.js.html |   81 +
 .../packages/picker/src/draggable.js.html     |  225 ++
 .../packages/picker/src/index.html            |  123 +
 .../picker/src/picker-column.vue.html         |  792 +++++++
 .../packages/picker/src/picker.vue.html       |  516 ++++
 .../lcov-report/packages/popup/index.html     |   97 +
 .../lcov-report/packages/popup/index.js.html  |   81 +
 .../lcov-report/packages/popup/src/index.html |   97 +
 .../packages/popup/src/popup.vue.html         |  282 +++
 .../packages/radio-group/index.html           |   97 +
 .../packages/radio-group/index.js.html        |   81 +
 .../lcov-report/packages/radio/index.html     |   97 +
 .../lcov-report/packages/radio/index.js.html  |   81 +
 .../lcov-report/packages/radio/src/index.html |  110 +
 .../packages/radio/src/radio-group.vue.html   |  131 ++
 .../packages/radio/src/radio.vue.html         |  267 +++
 .../lcov-report/packages/search/index.html    |   97 +
 .../lcov-report/packages/search/index.js.html |   81 +
 .../packages/search/src/index.html            |   93 +
 .../packages/search/src/search.vue.html       |  230 ++
 .../lcov-report/packages/steps/index.html     |   97 +
 .../lcov-report/packages/steps/index.js.html  |   81 +
 .../lcov-report/packages/steps/src/index.html |   93 +
 .../packages/steps/src/steps.vue.html         |  119 +
 .../lcov-report/packages/switch/index.html    |   97 +
 .../lcov-report/packages/switch/index.js.html |   81 +
 .../packages/switch/src/index.html            |   93 +
 .../packages/switch/src/switch.vue.html       |  251 ++
 .../lcov-report/packages/tag/index.html       |   97 +
 .../lcov-report/packages/tag/index.js.html    |   81 +
 .../lcov-report/packages/tag/src/index.html   |   93 +
 .../packages/tag/src/main.vue.html            |  113 +
 .../lcov-report/packages/waterfall/index.html |   97 +
 .../packages/waterfall/index.js.html          |   81 +
 .../packages/waterfall/src/directive.js.html  |  354 +++
 .../packages/waterfall/src/index.html         |  123 +
 .../packages/waterfall/src/main.js.html       |  110 +
 .../packages/waterfall/src/utils.js.html      |  293 +++
 test/unit/coverage/lcov-report/prettify.css   |    1 +
 test/unit/coverage/lcov-report/prettify.js    |    1 +
 .../lcov-report/sort-arrow-sprite.png         |  Bin 0 -> 209 bytes
 test/unit/coverage/lcov-report/sorter.js      |  158 ++
 test/unit/coverage/lcov-report/src/index.html |   97 +
 .../coverage/lcov-report/src/index.js.html    |  309 +++
 .../lcov-report/src/mixins/findParent.js.html |  134 ++
 .../lcov-report/src/mixins/index.html         |   93 +
 .../lcov-report/src/mixins/popup/index.html   |  106 +
 .../src/mixins/popup/index.js.html            |  539 +++++
 .../src/mixins/popup/popup-manager.js.html    |  464 ++++
 .../lcov-report/src/utils/dom.js.html         |  239 ++
 .../coverage/lcov-report/src/utils/index.html |  123 +
 .../lcov-report/src/utils/merge.js.html       |  113 +
 .../lcov-report/src/utils/transition.js.html  |  372 +++
 test/unit/coverage/lcov.info                  | 2065 +++++++++++++++++
 test/unit/get-webpack-conf.js                 |  130 ++
 test/unit/index.js                            |   11 +
 test/unit/karma.conf.js                       |   25 +
 112 files changed, 18189 insertions(+), 1 deletion(-)
 create mode 100644 test/unit/coverage/lcov-report/base.css
 create mode 100644 test/unit/coverage/lcov-report/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/badge-group/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/badge-group/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/badge/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/badge/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/badge/src/badge-group.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/badge/src/badge.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/badge/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/button/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/button/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/button/src/button.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/button/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/card/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/card/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/card/src/card.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/card/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/cell-group/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/cell-group/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/cell/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/cell/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/cell/src/cell-group.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/cell/src/cell.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/cell/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/checkbox-group/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/checkbox-group/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/checkbox/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/checkbox/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/checkbox/src/checkbox-group.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/checkbox/src/checkbox.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/checkbox/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/dialog/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/dialog/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/dialog/src/dialog.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/dialog/src/dialog.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/dialog/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/field/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/field/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/field/src/field.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/field/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/icon/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/icon/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/icon/src/icon.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/icon/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/loading/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/loading/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/loading/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/loading/src/loading.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/panel/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/panel/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/panel/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/panel/src/panel.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/picker/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/picker/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/picker/src/draggable.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/picker/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/picker/src/picker-column.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/picker/src/picker.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/popup/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/popup/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/popup/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/popup/src/popup.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/radio-group/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/radio-group/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/radio/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/radio/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/radio/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/radio/src/radio-group.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/radio/src/radio.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/search/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/search/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/search/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/search/src/search.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/steps/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/steps/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/steps/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/steps/src/steps.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/switch/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/switch/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/switch/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/switch/src/switch.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/tag/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/tag/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/tag/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/tag/src/main.vue.html
 create mode 100644 test/unit/coverage/lcov-report/packages/waterfall/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/waterfall/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/waterfall/src/directive.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/waterfall/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/packages/waterfall/src/main.js.html
 create mode 100644 test/unit/coverage/lcov-report/packages/waterfall/src/utils.js.html
 create mode 100644 test/unit/coverage/lcov-report/prettify.css
 create mode 100644 test/unit/coverage/lcov-report/prettify.js
 create mode 100644 test/unit/coverage/lcov-report/sort-arrow-sprite.png
 create mode 100644 test/unit/coverage/lcov-report/sorter.js
 create mode 100644 test/unit/coverage/lcov-report/src/index.html
 create mode 100644 test/unit/coverage/lcov-report/src/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/src/mixins/findParent.js.html
 create mode 100644 test/unit/coverage/lcov-report/src/mixins/index.html
 create mode 100644 test/unit/coverage/lcov-report/src/mixins/popup/index.html
 create mode 100644 test/unit/coverage/lcov-report/src/mixins/popup/index.js.html
 create mode 100644 test/unit/coverage/lcov-report/src/mixins/popup/popup-manager.js.html
 create mode 100644 test/unit/coverage/lcov-report/src/utils/dom.js.html
 create mode 100644 test/unit/coverage/lcov-report/src/utils/index.html
 create mode 100644 test/unit/coverage/lcov-report/src/utils/merge.js.html
 create mode 100644 test/unit/coverage/lcov-report/src/utils/transition.js.html
 create mode 100644 test/unit/coverage/lcov.info
 create mode 100644 test/unit/get-webpack-conf.js
 create mode 100644 test/unit/index.js
 create mode 100644 test/unit/karma.conf.js

diff --git a/Makefile b/Makefile
index ab0038d6a..1a6b62bb1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,4 @@
+.PHONY: test
 usage = "\
 Usage:                       make <option> \n\n\
 init componentname           初始化一个新组件,请忽视makefile的报错  \n\n\
@@ -12,3 +13,6 @@ init:
 
 dev:
 	npm run dev
+
+test:
+	npm run test
diff --git a/package.json b/package.json
index 16273447c..e25ecf0db 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,9 @@
     "dist": "npm run clean && npm run build:file && npm run lint && npm run build:zanui && npm run build:utils && npm run build:zanui-css",
     "builddocs": "webpack --progress --hide-modules --config  build/webpack.config.js && set NODE_ENV=production webpack --progress --hide-modules --config  build/webpack.config.js",
     "clean": "rimraf lib && rimraf packages/*/lib",
-    "lint": "eslint src/**/*.js packages/**/*.{js,vue} --quiet"
+    "lint": "eslint src/**/*.js packages/**/*.{js,vue} --quiet",
+    "test": "karma start test/unit/karma.conf.js; npm run coverage",
+    "coverage": "find test/unit/coverage/lcov-report -name 'index.html' | sed -n 1,1p  | xargs -I {} open {}  "
   },
   "repository": {
     "type": "git",
@@ -39,6 +41,7 @@
     "vue": "^2.1.8"
   },
   "devDependencies": {
+    "2webpack2": "^1.2.1",
     "autoprefixer": "^6.7.5",
     "babel-cli": "^6.14.0",
     "babel-core": "^6.17.0",
@@ -78,6 +81,8 @@
     "isparta-loader": "^2.0.0",
     "json-loader": "^0.5.4",
     "json-templater": "^1.0.4",
+    "karma-chrome-launcher": "^2.0.0",
+    "karma-coverage": "^1.1.1",
     "lerna": "2.0.0-beta.31",
     "lolex": "^1.5.1",
     "markdown-it": "^6.1.1",
@@ -100,6 +105,7 @@
     "postcss-utils": "^1.0.1",
     "precss": "^1.4.0",
     "prismjs": "^1.5.1",
+    "progress-bar-webpack-plugin": "^1.9.3",
     "rimraf": "^2.5.4",
     "run-sequence": "^1.2.2",
     "saladcss-bem": "^0.0.1",
diff --git a/test/unit/coverage/lcov-report/base.css b/test/unit/coverage/lcov-report/base.css
new file mode 100644
index 000000000..29737bcb0
--- /dev/null
+++ b/test/unit/coverage/lcov-report/base.css
@@ -0,0 +1,213 @@
+body, html {
+  margin:0; padding: 0;
+  height: 100%;
+}
+body {
+    font-family: Helvetica Neue, Helvetica, Arial;
+    font-size: 14px;
+    color:#333;
+}
+.small { font-size: 12px; }
+*, *:after, *:before {
+  -webkit-box-sizing:border-box;
+     -moz-box-sizing:border-box;
+          box-sizing:border-box;
+  }
+h1 { font-size: 20px; margin: 0;}
+h2 { font-size: 14px; }
+pre {
+    font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
+    margin: 0;
+    padding: 0;
+    -moz-tab-size: 2;
+    -o-tab-size:  2;
+    tab-size: 2;
+}
+a { color:#0074D9; text-decoration:none; }
+a:hover { text-decoration:underline; }
+.strong { font-weight: bold; }
+.space-top1 { padding: 10px 0 0 0; }
+.pad2y { padding: 20px 0; }
+.pad1y { padding: 10px 0; }
+.pad2x { padding: 0 20px; }
+.pad2 { padding: 20px; }
+.pad1 { padding: 10px; }
+.space-left2 { padding-left:55px; }
+.space-right2 { padding-right:20px; }
+.center { text-align:center; }
+.clearfix { display:block; }
+.clearfix:after {
+  content:'';
+  display:block;
+  height:0;
+  clear:both;
+  visibility:hidden;
+  }
+.fl { float: left; }
+@media only screen and (max-width:640px) {
+  .col3 { width:100%; max-width:100%; }
+  .hide-mobile { display:none!important; }
+}
+
+.quiet {
+  color: #7f7f7f;
+  color: rgba(0,0,0,0.5);
+}
+.quiet a { opacity: 0.7; }
+
+.fraction {
+  font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
+  font-size: 10px;
+  color: #555;
+  background: #E8E8E8;
+  padding: 4px 5px;
+  border-radius: 3px;
+  vertical-align: middle;
+}
+
+div.path a:link, div.path a:visited { color: #333; }
+table.coverage {
+  border-collapse: collapse;
+  margin: 10px 0 0 0;
+  padding: 0;
+}
+
+table.coverage td {
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+}
+table.coverage td.line-count {
+    text-align: right;
+    padding: 0 5px 0 20px;
+}
+table.coverage td.line-coverage {
+    text-align: right;
+    padding-right: 10px;
+    min-width:20px;
+}
+
+table.coverage td span.cline-any {
+    display: inline-block;
+    padding: 0 5px;
+    width: 100%;
+}
+.missing-if-branch {
+    display: inline-block;
+    margin-right: 5px;
+    border-radius: 3px;
+    position: relative;
+    padding: 0 4px;
+    background: #333;
+    color: yellow;
+}
+
+.skip-if-branch {
+    display: none;
+    margin-right: 10px;
+    position: relative;
+    padding: 0 4px;
+    background: #ccc;
+    color: white;
+}
+.missing-if-branch .typ, .skip-if-branch .typ {
+    color: inherit !important;
+}
+.coverage-summary {
+  border-collapse: collapse;
+  width: 100%;
+}
+.coverage-summary tr { border-bottom: 1px solid #bbb; }
+.keyline-all { border: 1px solid #ddd; }
+.coverage-summary td, .coverage-summary th { padding: 10px; }
+.coverage-summary tbody { border: 1px solid #bbb; }
+.coverage-summary td { border-right: 1px solid #bbb; }
+.coverage-summary td:last-child { border-right: none; }
+.coverage-summary th {
+  text-align: left;
+  font-weight: normal;
+  white-space: nowrap;
+}
+.coverage-summary th.file { border-right: none !important; }
+.coverage-summary th.pct { }
+.coverage-summary th.pic,
+.coverage-summary th.abs,
+.coverage-summary td.pct,
+.coverage-summary td.abs { text-align: right; }
+.coverage-summary td.file { white-space: nowrap;  }
+.coverage-summary td.pic { min-width: 120px !important;  }
+.coverage-summary tfoot td { }
+
+.coverage-summary .sorter {
+    height: 10px;
+    width: 7px;
+    display: inline-block;
+    margin-left: 0.5em;
+    background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
+}
+.coverage-summary .sorted .sorter {
+    background-position: 0 -20px;
+}
+.coverage-summary .sorted-desc .sorter {
+    background-position: 0 -10px;
+}
+.status-line {  height: 10px; }
+/* dark red */
+.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
+.low .chart { border:1px solid #C21F39 }
+/* medium red */
+.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
+/* light red */
+.low, .cline-no { background:#FCE1E5 }
+/* light green */
+.high, .cline-yes { background:rgb(230,245,208) }
+/* medium green */
+.cstat-yes { background:rgb(161,215,106) }
+/* dark green */
+.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
+.high .chart { border:1px solid rgb(77,146,33) }
+/* dark yellow (gold) */
+.medium .chart { border:1px solid #f9cd0b; }
+.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
+/* light yellow */
+.medium { background: #fff4c2; }
+/* light gray */
+span.cline-neutral { background: #eaeaea; }
+
+.cbranch-no { background:  yellow !important; color: #111; }
+
+.cstat-skip { background: #ddd; color: #111; }
+.fstat-skip { background: #ddd; color: #111 !important; }
+.cbranch-skip { background: #ddd !important; color: #111; }
+
+
+.cover-fill, .cover-empty {
+  display:inline-block;
+  height: 12px;
+}
+.chart {
+  line-height: 0;
+}
+.cover-empty {
+    background: white;
+}
+.cover-full {
+    border-right: none !important;
+}
+pre.prettyprint {
+    border: none !important;
+    padding: 0 !important;
+    margin: 0 !important;
+}
+.com { color: #999 !important; }
+.ignore-none { color: #999; font-weight: normal; }
+
+.wrapper {
+  min-height: 100%;
+  height: auto !important;
+  height: 100%;
+  margin: 0 auto -48px;
+}
+.footer, .push {
+  height: 48px;
+}
diff --git a/test/unit/coverage/lcov-report/index.html b/test/unit/coverage/lcov-report/index.html
new file mode 100644
index 000000000..3e83f8321
--- /dev/null
+++ b/test/unit/coverage/lcov-report/index.html
@@ -0,0 +1,656 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for All files</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="prettify.css" />
+    <link rel="stylesheet" href="base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      /
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">41.13% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>380/924</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">29.89% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>156/522</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">22.22% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>38/171</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">26.54% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>185/697</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">33 branches</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="packages/badge-group/"><a href="packages/badge-group/index.html">packages/badge-group/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/badge/"><a href="packages/badge/index.html">packages/badge/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file medium" data-value="packages/badge/src/"><a href="packages/badge/src/index.html">packages/badge/src/</a></td>
+	<td data-value="57.14" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 57%;"></div><div class="cover-empty" style="width:43%;"></div></div></td>
+	<td data-value="57.14" class="pct medium">57.14%</td>
+	<td data-value="7" class="abs medium">4/7</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="3" class="abs low">0/3</td>
+	<td data-value="40" class="pct low">40%</td>
+	<td data-value="5" class="abs low">2/5</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/button/"><a href="packages/button/index.html">packages/button/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="packages/button/src/"><a href="packages/button/src/index.html">packages/button/src/</a></td>
+	<td data-value="40" class="pic low"><div class="chart"><div class="cover-fill" style="width: 40%;"></div><div class="cover-empty" style="width:60%;"></div></div></td>
+	<td data-value="40" class="pct low">40%</td>
+	<td data-value="10" class="abs low">4/10</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="2" class="abs low">0/2</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="4" class="abs low">0/4</td>
+	<td data-value="33.33" class="pct low">33.33%</td>
+	<td data-value="9" class="abs low">3/9</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/card/"><a href="packages/card/index.html">packages/card/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/card/src/"><a href="packages/card/src/index.html">packages/card/src/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/cell-group/"><a href="packages/cell-group/index.html">packages/cell-group/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/cell/"><a href="packages/cell/index.html">packages/cell/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/cell/src/"><a href="packages/cell/src/index.html">packages/cell/src/</a></td>
+	<td data-value="80" class="pic high"><div class="chart"><div class="cover-fill" style="width: 80%;"></div><div class="cover-empty" style="width:20%;"></div></div></td>
+	<td data-value="80" class="pct high">80%</td>
+	<td data-value="5" class="abs high">4/5</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="66.67" class="pct medium">66.67%</td>
+	<td data-value="3" class="abs medium">2/3</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/checkbox-group/"><a href="packages/checkbox-group/index.html">packages/checkbox-group/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/checkbox/"><a href="packages/checkbox/index.html">packages/checkbox/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="packages/checkbox/src/"><a href="packages/checkbox/src/index.html">packages/checkbox/src/</a></td>
+	<td data-value="29.63" class="pic low"><div class="chart"><div class="cover-fill" style="width: 29%;"></div><div class="cover-empty" style="width:71%;"></div></div></td>
+	<td data-value="29.63" class="pct low">29.63%</td>
+	<td data-value="27" class="abs low">8/27</td>
+	<td data-value="14.29" class="pct low">14.29%</td>
+	<td data-value="28" class="abs low">4/28</td>
+	<td data-value="14.29" class="pct low">14.29%</td>
+	<td data-value="7" class="abs low">1/7</td>
+	<td data-value="13.64" class="pct low">13.64%</td>
+	<td data-value="22" class="abs low">3/22</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/dialog/"><a href="packages/dialog/index.html">packages/dialog/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="packages/dialog/src/"><a href="packages/dialog/src/index.html">packages/dialog/src/</a></td>
+	<td data-value="39.24" class="pic low"><div class="chart"><div class="cover-fill" style="width: 39%;"></div><div class="cover-empty" style="width:61%;"></div></div></td>
+	<td data-value="39.24" class="pct low">39.24%</td>
+	<td data-value="79" class="abs low">31/79</td>
+	<td data-value="20" class="pct low">20%</td>
+	<td data-value="40" class="abs low">8/40</td>
+	<td data-value="13.33" class="pct low">13.33%</td>
+	<td data-value="15" class="abs low">2/15</td>
+	<td data-value="27.69" class="pct low">27.69%</td>
+	<td data-value="65" class="abs low">18/65</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/field/"><a href="packages/field/index.html">packages/field/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file medium" data-value="packages/field/src/"><a href="packages/field/src/index.html">packages/field/src/</a></td>
+	<td data-value="54.55" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 54%;"></div><div class="cover-empty" style="width:46%;"></div></div></td>
+	<td data-value="54.55" class="pct medium">54.55%</td>
+	<td data-value="11" class="abs medium">6/11</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="20" class="pct low">20%</td>
+	<td data-value="5" class="abs low">1/5</td>
+	<td data-value="28.57" class="pct low">28.57%</td>
+	<td data-value="7" class="abs low">2/7</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/icon/"><a href="packages/icon/index.html">packages/icon/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/icon/src/"><a href="packages/icon/src/index.html">packages/icon/src/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/loading/"><a href="packages/loading/index.html">packages/loading/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/loading/src/"><a href="packages/loading/src/index.html">packages/loading/src/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/panel/"><a href="packages/panel/index.html">packages/panel/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/panel/src/"><a href="packages/panel/src/index.html">packages/panel/src/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/picker/"><a href="packages/picker/index.html">packages/picker/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="packages/picker/src/"><a href="packages/picker/src/index.html">packages/picker/src/</a></td>
+	<td data-value="16.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 16%;"></div><div class="cover-empty" style="width:84%;"></div></div></td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="144" class="abs low">24/144</td>
+	<td data-value="20" class="pct low">20%</td>
+	<td data-value="70" class="abs low">14/70</td>
+	<td data-value="7.5" class="pct low">7.5%</td>
+	<td data-value="40" class="abs low">3/40</td>
+	<td data-value="7.94" class="pct low">7.94%</td>
+	<td data-value="126" class="abs low">10/126</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/popup/"><a href="packages/popup/index.html">packages/popup/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="packages/popup/src/"><a href="packages/popup/src/index.html">packages/popup/src/</a></td>
+	<td data-value="42.86" class="pic low"><div class="chart"><div class="cover-fill" style="width: 42%;"></div><div class="cover-empty" style="width:58%;"></div></div></td>
+	<td data-value="42.86" class="pct low">42.86%</td>
+	<td data-value="14" class="abs low">6/14</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="8" class="abs medium">4/8</td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="6" class="abs low">1/6</td>
+	<td data-value="20" class="pct low">20%</td>
+	<td data-value="10" class="abs low">2/10</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/radio-group/"><a href="packages/radio-group/index.html">packages/radio-group/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/radio/"><a href="packages/radio/index.html">packages/radio/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file medium" data-value="packages/radio/src/"><a href="packages/radio/src/index.html">packages/radio/src/</a></td>
+	<td data-value="53.33" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 53%;"></div><div class="cover-empty" style="width:47%;"></div></div></td>
+	<td data-value="53.33" class="pct medium">53.33%</td>
+	<td data-value="15" class="abs medium">8/15</td>
+	<td data-value="22.22" class="pct low">22.22%</td>
+	<td data-value="18" class="abs low">4/18</td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="6" class="abs low">1/6</td>
+	<td data-value="30" class="pct low">30%</td>
+	<td data-value="10" class="abs low">3/10</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/search/"><a href="packages/search/index.html">packages/search/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="packages/search/src/"><a href="packages/search/src/index.html">packages/search/src/</a></td>
+	<td data-value="16.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 16%;"></div><div class="cover-empty" style="width:84%;"></div></div></td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="12" class="abs low">2/12</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="2" class="abs low">0/2</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="6" class="abs low">0/6</td>
+	<td data-value="10" class="pct low">10%</td>
+	<td data-value="10" class="abs low">1/10</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/steps/"><a href="packages/steps/index.html">packages/steps/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file medium" data-value="packages/steps/src/"><a href="packages/steps/src/index.html">packages/steps/src/</a></td>
+	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
+	<td data-value="66.67" class="pct medium">66.67%</td>
+	<td data-value="3" class="abs medium">2/3</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="2" class="abs medium">1/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/switch/"><a href="packages/switch/index.html">packages/switch/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="packages/switch/src/"><a href="packages/switch/src/index.html">packages/switch/src/</a></td>
+	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
+	<td data-value="18.18" class="pct low">18.18%</td>
+	<td data-value="11" class="abs low">2/11</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="10" class="abs low">0/10</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="3" class="abs low">0/3</td>
+	<td data-value="14.29" class="pct low">14.29%</td>
+	<td data-value="7" class="abs low">1/7</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/tag/"><a href="packages/tag/index.html">packages/tag/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/tag/src/"><a href="packages/tag/src/index.html">packages/tag/src/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="packages/waterfall/"><a href="packages/waterfall/index.html">packages/waterfall/</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="packages/waterfall/src/"><a href="packages/waterfall/src/index.html">packages/waterfall/src/</a></td>
+	<td data-value="25.47" class="pic low"><div class="chart"><div class="cover-fill" style="width: 25%;"></div><div class="cover-empty" style="width:75%;"></div></div></td>
+	<td data-value="25.47" class="pct low">25.47%</td>
+	<td data-value="106" class="abs low">27/106</td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="54" class="abs low">9/54</td>
+	<td data-value="21.05" class="pct low">21.05%</td>
+	<td data-value="19" class="abs low">4/19</td>
+	<td data-value="18.09" class="pct low">18.09%</td>
+	<td data-value="94" class="abs low">17/94</td>
+	</tr>
+
+<tr>
+	<td class="file medium" data-value="src/"><a href="src/index.html">src/</a></td>
+	<td data-value="68.06" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 68%;"></div><div class="cover-empty" style="width:32%;"></div></div></td>
+	<td data-value="68.06" class="pct medium">68.06%</td>
+	<td data-value="72" class="abs medium">49/72</td>
+	<td data-value="70" class="pct medium">70%</td>
+	<td data-value="10" class="abs medium">7/10</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="2" class="abs medium">1/2</td>
+	<td data-value="54.17" class="pct medium">54.17%</td>
+	<td data-value="48" class="abs medium">26/48</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="src/mixins/"><a href="src/mixins/index.html">src/mixins/</a></td>
+	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
+	<td data-value="18.18" class="pct low">18.18%</td>
+	<td data-value="11" class="abs low">2/11</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="4" class="abs low">0/4</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="11.11" class="pct low">11.11%</td>
+	<td data-value="9" class="abs low">1/9</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="src/mixins/popup/"><a href="src/mixins/popup/index.html">src/mixins/popup/</a></td>
+	<td data-value="14.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 14%;"></div><div class="cover-empty" style="width:86%;"></div></div></td>
+	<td data-value="14.18" class="pct low">14.18%</td>
+	<td data-value="134" class="abs low">19/134</td>
+	<td data-value="4.88" class="pct low">4.88%</td>
+	<td data-value="82" class="abs low">4/82</td>
+	<td data-value="4.76" class="pct low">4.76%</td>
+	<td data-value="21" class="abs low">1/21</td>
+	<td data-value="10" class="pct low">10%</td>
+	<td data-value="120" class="abs low">12/120</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="src/utils/"><a href="src/utils/index.html">src/utils/</a></td>
+	<td data-value="33.06" class="pic low"><div class="chart"><div class="cover-fill" style="width: 33%;"></div><div class="cover-empty" style="width:67%;"></div></div></td>
+	<td data-value="33.06" class="pct low">33.06%</td>
+	<td data-value="121" class="abs low">40/121</td>
+	<td data-value="9.8" class="pct low">9.8%</td>
+	<td data-value="102" class="abs low">10/102</td>
+	<td data-value="11.11" class="pct low">11.11%</td>
+	<td data-value="9" class="abs low">1/9</td>
+	<td data-value="31.68" class="pct low">31.68%</td>
+	<td data-value="101" class="abs low">32/101</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge-group/index.html b/test/unit/coverage/lcov-report/packages/badge-group/index.html
new file mode 100644
index 000000000..10a80d434
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/badge-group/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/badge-group/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/badge-group/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge-group/index.js.html b/test/unit/coverage/lcov-report/packages/badge-group/index.js.html
new file mode 100644
index 000000000..d0455d7e7
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/badge-group/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/badge-group/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/badge-group/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import BadgeGroup from '../badge/src/badge-group';
+&nbsp;
+export default BadgeGroup;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/index.html b/test/unit/coverage/lcov-report/packages/badge/index.html
new file mode 100644
index 000000000..eebfac6b6
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/badge/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/badge/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/badge/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/index.js.html b/test/unit/coverage/lcov-report/packages/badge/index.js.html
new file mode 100644
index 000000000..2ac8df9b2
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/badge/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/badge/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/badge/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Badge from './src/badge';
+&nbsp;
+export default Badge;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/src/badge-group.vue.html b/test/unit/coverage/lcov-report/packages/badge/src/badge-group.vue.html
new file mode 100644
index 000000000..e4452986f
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/badge/src/badge-group.vue.html
@@ -0,0 +1,140 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/badge/src/badge-group.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/badge/src/</a> badge-group.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">66.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/2</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+&nbsp;
+export default <span class="fstat-no" title="function not covered" >{</span>
+  name: 'zan-badge-group',
+&nbsp;
+  props: {
+    // 当前激活 tab 面板的 key
+    activeKey: {
+      type: [Number, String],
+      default: 0
+    }
+  },
+&nbsp;
+  data() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn {
+      computedActiveKey: this.activeKey
+    };
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/src/badge.vue.html b/test/unit/coverage/lcov-report/packages/badge/src/badge.vue.html
new file mode 100644
index 000000000..abd2bd7b5
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/badge/src/badge.vue.html
@@ -0,0 +1,185 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/badge/src/badge.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/badge/src/</a> badge.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">33.33% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/3</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-badge',
+  props: {
+    mark: {
+      type: [Number, String],
+      required: true
+    },
+    title: {
+      type: String,
+      required: true
+    },
+    url: {
+      type: String
+    },
+    info: {
+      type: String
+    }
+  },
+  methods: <span class="fstat-no" title="function not covered" >{</span>
+    handleClick() {
+<span class="cstat-no" title="statement not covered" >      t</span>his.$parent.computedActiveKey = this.mark;
+    }
+  },
+  computed: <span class="fstat-no" title="function not covered" >{</span>
+    classNames() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn {
+        'is-select': this.mark === this.$parent.computedActiveKey
+      };
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/src/index.html b/test/unit/coverage/lcov-report/packages/badge/src/index.html
new file mode 100644
index 000000000..b431285ed
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/badge/src/index.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/badge/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/badge/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">57.14% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>4/7</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">40% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/5</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file medium" data-value="badge-group.vue"><a href="badge-group.vue.html">badge-group.vue</a></td>
+	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
+	<td data-value="66.67" class="pct medium">66.67%</td>
+	<td data-value="3" class="abs medium">2/3</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="2" class="abs medium">1/2</td>
+	</tr>
+
+<tr>
+	<td class="file medium" data-value="badge.vue"><a href="badge.vue.html">badge.vue</a></td>
+	<td data-value="50" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 50%;"></div><div class="cover-empty" style="width:50%;"></div></div></td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="4" class="abs medium">2/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="2" class="abs low">0/2</td>
+	<td data-value="33.33" class="pct low">33.33%</td>
+	<td data-value="3" class="abs low">1/3</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/button/index.html b/test/unit/coverage/lcov-report/packages/button/index.html
new file mode 100644
index 000000000..e03d01426
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/button/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/button/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/button/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/button/index.js.html b/test/unit/coverage/lcov-report/packages/button/index.js.html
new file mode 100644
index 000000000..a891cd3c8
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/button/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/button/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/button/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Button from './src/button';
+&nbsp;
+export default Button;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/button/src/button.js.html b/test/unit/coverage/lcov-report/packages/button/src/button.js.html
new file mode 100644
index 000000000..676da2ce9
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/button/src/button.js.html
@@ -0,0 +1,302 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/button/src/button.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/button/src/</a> button.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">40% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>4/10</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">33.33% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>3/9</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
+ * @module components/button
+ * @desc 按钮
+ * @param {string} [type=default] - 显示类型,接受 default, primary, danger
+ * @param {boolean} [disabled=false] - 禁用
+ * @param {string} [size=normal] - 尺寸,接受 normal, mini, small, large
+ * @param {string} [native-type] - 原生 type 属性
+ * @param {slot} - 显示文本
+ *
+ * @example
+ * &lt;zan-button size="large" type="primary"&gt;按钮&lt;/zan-button&gt;
+ */
+&nbsp;
+const allowedSize = ['mini', 'small', 'normal', 'large'];
+const allowedType = ['default', 'danger', 'primary'];
+&nbsp;
+export default <span class="fstat-no" title="function not covered" >{</span>
+  name: 'zan-button',
+&nbsp;
+  props: {
+    disabled: Boolean,
+    loading: Boolean,
+    block: Boolean,
+    tag: {
+      type: String,
+      default: 'button'
+    },
+    nativeType: String,
+    type: <span class="fstat-no" title="function not covered" >{</span>
+      type: String,
+      default: 'default',
+      validator(value) {
+<span class="cstat-no" title="statement not covered" >        r</span>eturn allowedType.indexOf(value) &gt; -1;
+      }
+    },
+    size: <span class="fstat-no" title="function not covered" >{</span>
+      type: String,
+      default: 'normal',
+      validator(value) {
+<span class="cstat-no" title="statement not covered" >        r</span>eturn allowedSize.indexOf(value) &gt; -1;
+      }
+    }
+  },
+&nbsp;
+  methods: <span class="fstat-no" title="function not covered" >{</span>
+    handleClick() {
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('click');
+    }
+  },
+&nbsp;
+  render(h) <span class="cstat-no" title="statement not covered" >{</span>
+    let { type, nativeType, size, disabled, loading, block } = this;
+<span class="cstat-no" title="statement not covered" >    l</span>et Tag = this.tag;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    r</span>eturn (
+      &lt;Tag
+        type={nativeType}
+        disabled={disabled}
+        class={[
+          'zan-button',
+          'zan-button--' + type,
+          'zan-button--' + size,
+          {
+            'is-disabled': disabled,
+            'is-loading': loading,
+            'is-block': block
+          }
+        ]}
+        onClick={this.handleClick}
+      &gt;
+        {
+          loading ? &lt;i class="zan-icon-loading"&gt;&lt;/i&gt; : null
+        }
+        &lt;span class="zan-button-text"&gt;{this.$slots.default}&lt;/span&gt;
+      &lt;/Tag&gt;
+    );
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/button/src/index.html b/test/unit/coverage/lcov-report/packages/button/src/index.html
new file mode 100644
index 000000000..9bff78423
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/button/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/button/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/button/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">40% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>4/10</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">33.33% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>3/9</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="button.js"><a href="button.js.html">button.js</a></td>
+	<td data-value="40" class="pic low"><div class="chart"><div class="cover-fill" style="width: 40%;"></div><div class="cover-empty" style="width:60%;"></div></div></td>
+	<td data-value="40" class="pct low">40%</td>
+	<td data-value="10" class="abs low">4/10</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="2" class="abs low">0/2</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="4" class="abs low">0/4</td>
+	<td data-value="33.33" class="pct low">33.33%</td>
+	<td data-value="9" class="abs low">3/9</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/card/index.html b/test/unit/coverage/lcov-report/packages/card/index.html
new file mode 100644
index 000000000..a60358497
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/card/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/card/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/card/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/card/index.js.html b/test/unit/coverage/lcov-report/packages/card/index.js.html
new file mode 100644
index 000000000..7d02bab64
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/card/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/card/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/card/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Card from './src/card';
+&nbsp;
+export default Card;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/card/src/card.vue.html b/test/unit/coverage/lcov-report/packages/card/src/card.vue.html
new file mode 100644
index 000000000..09eb2fbdf
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/card/src/card.vue.html
@@ -0,0 +1,158 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/card/src/card.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/card/src/</a> card.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-card',
+  props: {
+    thumb: {
+      type: String,
+      required: true
+    },
+    title: String,
+    desc: String
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/card/src/index.html b/test/unit/coverage/lcov-report/packages/card/src/index.html
new file mode 100644
index 000000000..deedafc4b
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/card/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/card/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/card/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="card.vue"><a href="card.vue.html">card.vue</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell-group/index.html b/test/unit/coverage/lcov-report/packages/cell-group/index.html
new file mode 100644
index 000000000..91a17243e
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/cell-group/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/cell-group/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/cell-group/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell-group/index.js.html b/test/unit/coverage/lcov-report/packages/cell-group/index.js.html
new file mode 100644
index 000000000..26ffb57e6
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/cell-group/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/cell-group/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/cell-group/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import CellGroup from '../cell/src/cell-group';
+&nbsp;
+export default CellGroup;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/index.html b/test/unit/coverage/lcov-report/packages/cell/index.html
new file mode 100644
index 000000000..eb1dafbcc
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/cell/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/cell/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/cell/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/index.js.html b/test/unit/coverage/lcov-report/packages/cell/index.js.html
new file mode 100644
index 000000000..141a3d317
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/cell/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/cell/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/cell/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Cell from './src/cell';
+&nbsp;
+export default Cell;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/src/cell-group.vue.html b/test/unit/coverage/lcov-report/packages/cell/src/cell-group.vue.html
new file mode 100644
index 000000000..4cce02ecf
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/cell/src/cell-group.vue.html
@@ -0,0 +1,98 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/cell/src/cell-group.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/cell/src/</a> cell-group.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-cell-group'
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/src/cell.vue.html b/test/unit/coverage/lcov-report/packages/cell/src/cell.vue.html
new file mode 100644
index 000000000..1774657da
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/cell/src/cell.vue.html
@@ -0,0 +1,194 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/cell/src/cell.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/cell/src/</a> cell.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">66.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/2</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-cell',
+&nbsp;
+  props: {
+    icon: String,
+    title: String,
+    value: [String, Number],
+    url: String,
+    label: String,
+    isLink: Boolean
+  },
+&nbsp;
+  methods: <span class="fstat-no" title="function not covered" >{</span>
+    handleClick() {
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('click');
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/src/index.html b/test/unit/coverage/lcov-report/packages/cell/src/index.html
new file mode 100644
index 000000000..4e8fcda23
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/cell/src/index.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/cell/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/cell/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">80% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>4/5</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">66.67% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/3</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="cell-group.vue"><a href="cell-group.vue.html">cell-group.vue</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+<tr>
+	<td class="file medium" data-value="cell.vue"><a href="cell.vue.html">cell.vue</a></td>
+	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
+	<td data-value="66.67" class="pct medium">66.67%</td>
+	<td data-value="3" class="abs medium">2/3</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="2" class="abs medium">1/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox-group/index.html b/test/unit/coverage/lcov-report/packages/checkbox-group/index.html
new file mode 100644
index 000000000..15eedd98f
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/checkbox-group/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/checkbox-group/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/checkbox-group/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox-group/index.js.html b/test/unit/coverage/lcov-report/packages/checkbox-group/index.js.html
new file mode 100644
index 000000000..67e899dbd
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/checkbox-group/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/checkbox-group/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/checkbox-group/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import CheckboxGroup from 'packages/checkbox/src/checkbox-group';
+&nbsp;
+export default CheckboxGroup;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/index.html b/test/unit/coverage/lcov-report/packages/checkbox/index.html
new file mode 100644
index 000000000..08df8d036
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/checkbox/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/checkbox/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/checkbox/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/index.js.html b/test/unit/coverage/lcov-report/packages/checkbox/index.js.html
new file mode 100644
index 000000000..c8bd93f68
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/checkbox/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/checkbox/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/checkbox/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Checkbox from './src/checkbox';
+&nbsp;
+export default Checkbox;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox-group.vue.html b/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox-group.vue.html
new file mode 100644
index 000000000..fc19bb7b8
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox-group.vue.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/checkbox/src/checkbox-group.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/checkbox/src/</a> checkbox-group.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">66.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/2</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-checkbox-group',
+&nbsp;
+  props: {
+    value: {},
+    disabled: Boolean
+  },
+&nbsp;
+  watch: <span class="fstat-no" title="function not covered" >{</span>
+    value(val) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('change', val);
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox.vue.html b/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox.vue.html
new file mode 100644
index 000000000..aafa68979
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox.vue.html
@@ -0,0 +1,360 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/checkbox/src/checkbox.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/checkbox/src/</a> checkbox.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">25% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/24</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.29% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/28</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/20</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+import findParent from 'src/mixins/findParent';
+&nbsp;
+export default {
+  name: 'zan-checkbox',
+&nbsp;
+  mixins: [findParent],
+&nbsp;
+  props: {
+    disabled: Boolean,
+    value: {},
+    name: [String, Number]
+  },
+&nbsp;
+  computed: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
+    /**
+     * `checkbox`是否在`zan-checkbox-group`中
+     */
+    isGroup() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn !!this.findParentByComponentName('zan-checkbox-group');
+    },
+&nbsp;
+    /**
+     * `checkbox`当前值
+     */
+    currentValue: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
+      get() {
+<span class="cstat-no" title="statement not covered" >        r</span>eturn this.isGroup &amp;&amp; this.parentGroup ? this.parentGroup.value.indexOf(this.name) !== -1 : this.value;
+      },
+&nbsp;
+      set(val) {
+<span class="cstat-no" title="statement not covered" >        if (this.isGroup &amp;&amp; this.parentGroup) {</span>
+<span class="cstat-no" title="statement not covered" >          l</span>et parentValue = this.parentGroup.value.slice();
+<span class="cstat-no" title="statement not covered" >          if (val) {</span>
+<span class="cstat-no" title="statement not covered" >            if (parentValue.indexOf(this.name) === -1) {</span>
+<span class="cstat-no" title="statement not covered" >              p</span>arentValue.push(this.name);
+<span class="cstat-no" title="statement not covered" >              t</span>his.parentGroup.$emit('input', parentValue);
+            }
+          } else {
+<span class="cstat-no" title="statement not covered" >            l</span>et index = parentValue.indexOf(this.name);
+<span class="cstat-no" title="statement not covered" >            if (index !== -1) {</span>
+<span class="cstat-no" title="statement not covered" >              p</span>arentValue.splice(index, 1);
+<span class="cstat-no" title="statement not covered" >              t</span>his.parentGroup.$emit('input', parentValue);
+            }
+          }
+        } else {
+<span class="cstat-no" title="statement not covered" >          t</span>his.$emit('input', val);
+        }
+      }
+    },
+&nbsp;
+    /**
+     * `checkbox`是否被选中
+     */
+    isChecked() {
+<span class="cstat-no" title="statement not covered" >      if ({}.toString.call(this.currentValue) === '[object Boolean]') {</span>
+<span class="cstat-no" title="statement not covered" >        r</span>eturn this.currentValue;
+      } else <span class="cstat-no" title="statement not covered" >if (Array.isArray(this.currentValue)) {</span>
+<span class="cstat-no" title="statement not covered" >        r</span>eturn this.currentValue.indexOf(this.name) &gt; -1;
+      }
+    },
+&nbsp;
+    /**
+     * `checkbox`是否被禁用
+     */
+    isDisabled() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.isGroup &amp;&amp; this.parentGroup
+          ? this.parentGroup.disabled || this.disabled
+          : this.disabled;
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/src/index.html b/test/unit/coverage/lcov-report/packages/checkbox/src/index.html
new file mode 100644
index 000000000..13b5cc3f2
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/checkbox/src/index.html
@@ -0,0 +1,110 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/checkbox/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/checkbox/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">29.63% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>8/27</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.29% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/28</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.29% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/7</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">13.64% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>3/22</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file medium" data-value="checkbox-group.vue"><a href="checkbox-group.vue.html">checkbox-group.vue</a></td>
+	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
+	<td data-value="66.67" class="pct medium">66.67%</td>
+	<td data-value="3" class="abs medium">2/3</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="2" class="abs medium">1/2</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="checkbox.vue"><a href="checkbox.vue.html">checkbox.vue</a></td>
+	<td data-value="25" class="pic low"><div class="chart"><div class="cover-fill" style="width: 25%;"></div><div class="cover-empty" style="width:75%;"></div></div></td>
+	<td data-value="25" class="pct low">25%</td>
+	<td data-value="24" class="abs low">6/24</td>
+	<td data-value="14.29" class="pct low">14.29%</td>
+	<td data-value="28" class="abs low">4/28</td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="6" class="abs low">1/6</td>
+	<td data-value="10" class="pct low">10%</td>
+	<td data-value="20" class="abs low">2/20</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/index.html b/test/unit/coverage/lcov-report/packages/dialog/index.html
new file mode 100644
index 000000000..e761cfa09
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/dialog/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/dialog/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/dialog/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/index.js.html b/test/unit/coverage/lcov-report/packages/dialog/index.js.html
new file mode 100644
index 000000000..cd5301790
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/dialog/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/dialog/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/dialog/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Dialog from './src/dialog.js';
+&nbsp;
+export default Dialog;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/src/dialog.js.html b/test/unit/coverage/lcov-report/packages/dialog/src/dialog.js.html
new file mode 100644
index 000000000..05fcdf50f
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/dialog/src/dialog.js.html
@@ -0,0 +1,362 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/dialog/src/dialog.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/dialog/src/</a> dialog.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">42.59% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>23/54</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">15.38% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/26</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/10</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">32.61% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>15/46</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Vue from 'vue';
+import Dialog from './dialog.vue';
+import merge from 'src/utils/merge';
+&nbsp;
+const DialogConstructor = Vue.extend(Dialog);
+&nbsp;
+let currentDialog;
+let instance;
+let dialogQueue = [];
+&nbsp;
+const defaultCallback = <span class="fstat-no" title="function not covered" >action =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >  if (currentDialog) {</span>
+<span class="cstat-no" title="statement not covered" >    l</span>et callback = currentDialog.callback;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (typeof callback === 'function') {</span>
+<span class="cstat-no" title="statement not covered" >      c</span>allback(action);
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (currentDialog.resolve &amp;&amp; action === 'confirm') {</span>
+<span class="cstat-no" title="statement not covered" >      c</span>urrentDialog.resolve(action);
+    } else <span class="cstat-no" title="statement not covered" >if (currentDialog.reject &amp;&amp; action === 'cancel') {</span>
+<span class="cstat-no" title="statement not covered" >      c</span>urrentDialog.reject(action);
+    }
+  }
+};
+&nbsp;
+const initInstance = <span class="fstat-no" title="function not covered" >() =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >  i</span>nstance = new DialogConstructor({
+    el: document.createElement('div')
+  });
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  i</span>nstance.callback = defaultCallback;
+};
+&nbsp;
+const showNextDialog = <span class="fstat-no" title="function not covered" >() =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >  if (!instance) {</span>
+<span class="cstat-no" title="statement not covered" >    i</span>nitInstance();
+  }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  if (!instance.value &amp;&amp; dialogQueue.length &gt; 0) {</span>
+<span class="cstat-no" title="statement not covered" >    c</span>urrentDialog = dialogQueue.shift();
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    l</span>et options = currentDialog.options;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    for (let prop in options) {</span>
+<span class="cstat-no" title="statement not covered" >      if (options.hasOwnProperty(prop)) {</span>
+<span class="cstat-no" title="statement not covered" >        i</span>nstance[prop] = options[prop];
+      }
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (options.callback === undefined) {</span>
+<span class="cstat-no" title="statement not covered" >      i</span>nstance.callback = defaultCallback;
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    d</span>ocument.body.appendChild(instance.$el);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    V</span>ue.nextTick(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >      i</span>nstance.value = true;
+    });
+  }
+};
+&nbsp;
+var DialogBox = <span class="fstat-no" title="function not covered" >options =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >  r</span>eturn new Promise(<span class="fstat-no" title="function not covered" >(resolve, reject) =&gt; {</span> // eslint-disable-line
+<span class="cstat-no" title="statement not covered" >    d</span>ialogQueue.push({
+      options: merge({}, options),
+      callback: options.callback,
+      resolve: resolve,
+      reject: reject
+    });
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    s</span>howNextDialog();
+  });
+};
+&nbsp;
+DialogBox.alert = <span class="fstat-no" title="function not covered" >function(options) {</span>
+<span class="cstat-no" title="statement not covered" >  r</span>eturn DialogBox(merge({
+    type: 'alert',
+    closeOnClickOverlay: false,
+    showCancelButton: false
+  }, options));
+};
+&nbsp;
+DialogBox.confirm = <span class="fstat-no" title="function not covered" >function(options) {</span>
+<span class="cstat-no" title="statement not covered" >  r</span>eturn DialogBox(merge({
+    type: 'confirm',
+    closeOnClickOverlay: true,
+    showCancelButton: true
+  }, options));
+};
+&nbsp;
+DialogBox.close = <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" >  i</span>nstance.value = false;
+<span class="cstat-no" title="statement not covered" >  d</span>ialogQueue = [];
+<span class="cstat-no" title="statement not covered" >  c</span>urrentDialog = null;
+};
+&nbsp;
+export default DialogBox;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/src/dialog.vue.html b/test/unit/coverage/lcov-report/packages/dialog/src/dialog.vue.html
new file mode 100644
index 000000000..a651aa723
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/dialog/src/dialog.vue.html
@@ -0,0 +1,324 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/dialog/src/dialog.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/dialog/src/</a> dialog.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">32% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>8/25</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">28.57% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/14</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/5</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">15.79% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>3/19</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+import Popup from 'src/mixins/popup';
+&nbsp;
+const CANCEL_TEXT = '取消';
+const CONFIRM_TEXT = '确认';
+&nbsp;
+export default <span class="fstat-no" title="function not covered" >{</span>
+  name: 'zan-dialog',
+&nbsp;
+  mixins: [Popup],
+&nbsp;
+  props: {
+    overlay: {
+      default: true
+    },
+    closeOnClickOverlay: {
+      default: true
+    },
+    lockOnScroll: {
+      default: true
+    }
+  },
+&nbsp;
+  data() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn {
+      title: '',
+      message: '',
+      type: '',
+      showConfirmButton: true,
+      showCancelButton: false,
+      confirmButtonText: CONFIRM_TEXT,
+      cancelButtonText: CANCEL_TEXT,
+      callback: null
+    };
+  },
+&nbsp;
+  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
+    handleAction(action) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.value = false;
+<span class="cstat-no" title="statement not covered" >      t</span>his.callback &amp;&amp; this.callback(action);
+    },
+&nbsp;
+    close() <span class="cstat-no" title="statement not covered" >{</span>
+<span class="cstat-no" title="statement not covered" >      if (this.closing) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.closing = true;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.value = false;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      if (this.lockOnScroll) {</span>
+<span class="cstat-no" title="statement not covered" >        s</span>etTimeout(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >          if (this.modal &amp;&amp; this.bodyOverflow !== 'hidden') {</span>
+<span class="cstat-no" title="statement not covered" >            d</span>ocument.body.style.overflow = this.bodyOverflow;
+<span class="cstat-no" title="statement not covered" >            d</span>ocument.body.style.paddingRight = this.bodyPaddingRight;
+          }
+<span class="cstat-no" title="statement not covered" >          t</span>his.bodyOverflow = null;
+<span class="cstat-no" title="statement not covered" >          t</span>his.bodyPaddingRight = null;
+        }, 200);
+      }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.opened = false;
+<span class="cstat-no" title="statement not covered" >      t</span>his.doAfterClose();
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/src/index.html b/test/unit/coverage/lcov-report/packages/dialog/src/index.html
new file mode 100644
index 000000000..88c758237
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/dialog/src/index.html
@@ -0,0 +1,110 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/dialog/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/dialog/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">39.24% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>31/79</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>8/40</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">13.33% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>2/15</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">27.69% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>18/65</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="dialog.js"><a href="dialog.js.html">dialog.js</a></td>
+	<td data-value="42.59" class="pic low"><div class="chart"><div class="cover-fill" style="width: 42%;"></div><div class="cover-empty" style="width:58%;"></div></div></td>
+	<td data-value="42.59" class="pct low">42.59%</td>
+	<td data-value="54" class="abs low">23/54</td>
+	<td data-value="15.38" class="pct low">15.38%</td>
+	<td data-value="26" class="abs low">4/26</td>
+	<td data-value="10" class="pct low">10%</td>
+	<td data-value="10" class="abs low">1/10</td>
+	<td data-value="32.61" class="pct low">32.61%</td>
+	<td data-value="46" class="abs low">15/46</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="dialog.vue"><a href="dialog.vue.html">dialog.vue</a></td>
+	<td data-value="32" class="pic low"><div class="chart"><div class="cover-fill" style="width: 32%;"></div><div class="cover-empty" style="width:68%;"></div></div></td>
+	<td data-value="32" class="pct low">32%</td>
+	<td data-value="25" class="abs low">8/25</td>
+	<td data-value="28.57" class="pct low">28.57%</td>
+	<td data-value="14" class="abs low">4/14</td>
+	<td data-value="20" class="pct low">20%</td>
+	<td data-value="5" class="abs low">1/5</td>
+	<td data-value="15.79" class="pct low">15.79%</td>
+	<td data-value="19" class="abs low">3/19</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/field/index.html b/test/unit/coverage/lcov-report/packages/field/index.html
new file mode 100644
index 000000000..b68a46141
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/field/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/field/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/field/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/field/index.js.html b/test/unit/coverage/lcov-report/packages/field/index.js.html
new file mode 100644
index 000000000..e22067ecf
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/field/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/field/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/field/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Field from './src/field';
+&nbsp;
+export default Field;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/field/src/field.vue.html b/test/unit/coverage/lcov-report/packages/field/src/field.vue.html
new file mode 100644
index 000000000..8d8018e59
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/field/src/field.vue.html
@@ -0,0 +1,306 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/field/src/field.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/field/src/</a> field.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">54.55% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/11</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/5</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">28.57% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/7</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+import zCell from 'packages/cell';
+&nbsp;
+export default <span class="fstat-no" title="function not covered" >{</span>
+  name: 'zan-field',
+&nbsp;
+  components: {
+    zCell
+  },
+&nbsp;
+  props: {
+    type: {
+      type: String,
+      default: 'text'
+    },
+    placeholder: String,
+    value: String,
+    label: String,
+    disabled: Boolean,
+    readonly: Boolean,
+    maxlength: [String, Number]
+  },
+&nbsp;
+  data() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn {
+      currentValue: this.value
+    };
+  },
+&nbsp;
+  watch: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
+    value(val) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.currentValue = val;
+    },
+&nbsp;
+    currentValue(val) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', val);
+<span class="cstat-no" title="statement not covered" >      c</span>onsole.log(val);
+    }
+  },
+&nbsp;
+  methods: <span class="fstat-no" title="function not covered" >{</span>
+    handleInput(event) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.currentValue = event.target.value;
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/field/src/index.html b/test/unit/coverage/lcov-report/packages/field/src/index.html
new file mode 100644
index 000000000..7fbe868c5
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/field/src/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/field/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/field/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">54.55% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/11</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/5</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">28.57% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/7</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file medium" data-value="field.vue"><a href="field.vue.html">field.vue</a></td>
+	<td data-value="54.55" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 54%;"></div><div class="cover-empty" style="width:46%;"></div></div></td>
+	<td data-value="54.55" class="pct medium">54.55%</td>
+	<td data-value="11" class="abs medium">6/11</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="20" class="pct low">20%</td>
+	<td data-value="5" class="abs low">1/5</td>
+	<td data-value="28.57" class="pct low">28.57%</td>
+	<td data-value="7" class="abs low">2/7</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/icon/index.html b/test/unit/coverage/lcov-report/packages/icon/index.html
new file mode 100644
index 000000000..0055d9d70
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/icon/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/icon/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/icon/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/icon/index.js.html b/test/unit/coverage/lcov-report/packages/icon/index.js.html
new file mode 100644
index 000000000..92adb0fd6
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/icon/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/icon/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/icon/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Icon from './src/icon';
+&nbsp;
+export default Icon;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/icon/src/icon.vue.html b/test/unit/coverage/lcov-report/packages/icon/src/icon.vue.html
new file mode 100644
index 000000000..7c3d75de6
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/icon/src/icon.vue.html
@@ -0,0 +1,104 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/icon/src/icon.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/icon/src/</a> icon.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-icon',
+&nbsp;
+  props: {
+    name: String
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/icon/src/index.html b/test/unit/coverage/lcov-report/packages/icon/src/index.html
new file mode 100644
index 000000000..bb439e11e
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/icon/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/icon/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/icon/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="icon.vue"><a href="icon.vue.html">icon.vue</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/loading/index.html b/test/unit/coverage/lcov-report/packages/loading/index.html
new file mode 100644
index 000000000..1adb2d97c
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/loading/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/loading/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/loading/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/loading/index.js.html b/test/unit/coverage/lcov-report/packages/loading/index.js.html
new file mode 100644
index 000000000..8f350be67
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/loading/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/loading/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/loading/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Loading from './src/loading';
+&nbsp;
+export default Loading;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/loading/src/index.html b/test/unit/coverage/lcov-report/packages/loading/src/index.html
new file mode 100644
index 000000000..bbc06cde7
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/loading/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/loading/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/loading/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="loading.vue"><a href="loading.vue.html">loading.vue</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/loading/src/loading.vue.html b/test/unit/coverage/lcov-report/packages/loading/src/loading.vue.html
new file mode 100644
index 000000000..13c5feade
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/loading/src/loading.vue.html
@@ -0,0 +1,98 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/loading/src/loading.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/loading/src/</a> loading.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-loading'
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/panel/index.html b/test/unit/coverage/lcov-report/packages/panel/index.html
new file mode 100644
index 000000000..fa18df8d7
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/panel/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/panel/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/panel/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/panel/index.js.html b/test/unit/coverage/lcov-report/packages/panel/index.js.html
new file mode 100644
index 000000000..8155203bb
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/panel/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/panel/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/panel/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Panel from './src/panel';
+&nbsp;
+export default Panel;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/panel/src/index.html b/test/unit/coverage/lcov-report/packages/panel/src/index.html
new file mode 100644
index 000000000..aa2b0c8bc
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/panel/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/panel/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/panel/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="panel.vue"><a href="panel.vue.html">panel.vue</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/panel/src/panel.vue.html b/test/unit/coverage/lcov-report/packages/panel/src/panel.vue.html
new file mode 100644
index 000000000..cf38b984c
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/panel/src/panel.vue.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/panel/src/panel.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/panel/src/</a> panel.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-panel',
+  props: {
+    title: String,
+    desc: String,
+    status: String
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/index.html b/test/unit/coverage/lcov-report/packages/picker/index.html
new file mode 100644
index 000000000..dedc11366
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/picker/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/picker/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/picker/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/index.js.html b/test/unit/coverage/lcov-report/packages/picker/index.js.html
new file mode 100644
index 000000000..e79a15632
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/picker/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/picker/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/picker/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Picker from './src/picker';
+&nbsp;
+export default Picker;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/src/draggable.js.html b/test/unit/coverage/lcov-report/packages/picker/src/draggable.js.html
new file mode 100644
index 000000000..85929c8e8
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/picker/src/draggable.js.html
@@ -0,0 +1,225 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/picker/src/draggable.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/picker/src/</a> draggable.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">21.05% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>8/38</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">17.65% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>6/34</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.29% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/7</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">12.9% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>4/31</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Vue from 'vue';
+&nbsp;
+let isDragging = false;
+&nbsp;
+const supportTouch = !Vue.prototype.$isServer &amp;&amp; 'ontouchstart' in window;
+&nbsp;
+export default <span class="fstat-no" title="function not covered" >function(element, options) {</span>
+<span class="cstat-no" title="statement not covered" >  c</span>onst moveFn = <span class="fstat-no" title="function not covered" >function(event) {</span>
+<span class="cstat-no" title="statement not covered" >    if (options.drag) {</span>
+<span class="cstat-no" title="statement not covered" >      o</span>ptions.drag(supportTouch ? event.changedTouches[0] || event.touches[0] : event);
+    }
+  };
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  c</span>onst endFn = <span class="fstat-no" title="function not covered" >function(event) {</span>
+<span class="cstat-no" title="statement not covered" >    if (!supportTouch) {</span>
+<span class="cstat-no" title="statement not covered" >      d</span>ocument.removeEventListener('mousemove', moveFn);
+<span class="cstat-no" title="statement not covered" >      d</span>ocument.removeEventListener('mouseup', endFn);
+    }
+<span class="cstat-no" title="statement not covered" >    d</span>ocument.onselectstart = null;
+<span class="cstat-no" title="statement not covered" >    d</span>ocument.ondragstart = null;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    i</span>sDragging = false;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (options.end) {</span>
+<span class="cstat-no" title="statement not covered" >      o</span>ptions.end(supportTouch ? event.changedTouches[0] || event.touches[0] : event);
+    }
+  };
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  e</span>lement.addEventListener(supportTouch ? 'touchstart' : 'mousedown', <span class="fstat-no" title="function not covered" >function(event) {</span>
+<span class="cstat-no" title="statement not covered" >    if (isDragging) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+<span class="cstat-no" title="statement not covered" >    d</span>ocument.onselectstart = <span class="fstat-no" title="function not covered" >function() {</span> <span class="cstat-no" title="statement not covered" >r</span>eturn false; };
+<span class="cstat-no" title="statement not covered" >    d</span>ocument.ondragstart = <span class="fstat-no" title="function not covered" >function() {</span> <span class="cstat-no" title="statement not covered" >r</span>eturn false; };
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (!supportTouch) {</span>
+<span class="cstat-no" title="statement not covered" >      d</span>ocument.addEventListener('mousemove', moveFn);
+<span class="cstat-no" title="statement not covered" >      d</span>ocument.addEventListener('mouseup', endFn);
+    }
+<span class="cstat-no" title="statement not covered" >    i</span>sDragging = true;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (options.start) {</span>
+<span class="cstat-no" title="statement not covered" >      e</span>vent.preventDefault();
+<span class="cstat-no" title="statement not covered" >      o</span>ptions.start(supportTouch ? event.changedTouches[0] || event.touches[0] : event);
+    }
+  });
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  if (supportTouch) {</span>
+<span class="cstat-no" title="statement not covered" >    e</span>lement.addEventListener('touchmove', moveFn);
+<span class="cstat-no" title="statement not covered" >    e</span>lement.addEventListener('touchend', endFn);
+<span class="cstat-no" title="statement not covered" >    e</span>lement.addEventListener('touchcancel', endFn);
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/src/index.html b/test/unit/coverage/lcov-report/packages/picker/src/index.html
new file mode 100644
index 000000000..e9999e6ac
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/picker/src/index.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/picker/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/picker/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>24/144</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>14/70</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">7.5% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>3/40</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">7.94% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>10/126</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">3 branches</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="draggable.js"><a href="draggable.js.html">draggable.js</a></td>
+	<td data-value="21.05" class="pic low"><div class="chart"><div class="cover-fill" style="width: 21%;"></div><div class="cover-empty" style="width:79%;"></div></div></td>
+	<td data-value="21.05" class="pct low">21.05%</td>
+	<td data-value="38" class="abs low">8/38</td>
+	<td data-value="17.65" class="pct low">17.65%</td>
+	<td data-value="34" class="abs low">6/34</td>
+	<td data-value="14.29" class="pct low">14.29%</td>
+	<td data-value="7" class="abs low">1/7</td>
+	<td data-value="12.9" class="pct low">12.9%</td>
+	<td data-value="31" class="abs low">4/31</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="picker-column.vue"><a href="picker-column.vue.html">picker-column.vue</a></td>
+	<td data-value="12" class="pic low"><div class="chart"><div class="cover-fill" style="width: 12%;"></div><div class="cover-empty" style="width:88%;"></div></div></td>
+	<td data-value="12" class="pct low">12%</td>
+	<td data-value="75" class="abs low">9/75</td>
+	<td data-value="22.22" class="pct low">22.22%</td>
+	<td data-value="18" class="abs low">4/18</td>
+	<td data-value="5.26" class="pct low">5.26%</td>
+	<td data-value="19" class="abs low">1/19</td>
+	<td data-value="5.71" class="pct low">5.71%</td>
+	<td data-value="70" class="abs low">4/70</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="picker.vue"><a href="picker.vue.html">picker.vue</a></td>
+	<td data-value="22.58" class="pic low"><div class="chart"><div class="cover-fill" style="width: 22%;"></div><div class="cover-empty" style="width:78%;"></div></div></td>
+	<td data-value="22.58" class="pct low">22.58%</td>
+	<td data-value="31" class="abs low">7/31</td>
+	<td data-value="22.22" class="pct low">22.22%</td>
+	<td data-value="18" class="abs low">4/18</td>
+	<td data-value="7.14" class="pct low">7.14%</td>
+	<td data-value="14" class="abs low">1/14</td>
+	<td data-value="8" class="pct low">8%</td>
+	<td data-value="25" class="abs low">2/25</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/src/picker-column.vue.html b/test/unit/coverage/lcov-report/packages/picker/src/picker-column.vue.html
new file mode 100644
index 000000000..c31be9388
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/picker/src/picker-column.vue.html
@@ -0,0 +1,792 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/picker/src/picker-column.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/picker/src/</a> picker-column.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">12% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>9/75</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">22.22% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/18</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">5.26% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/19</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">5.71% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>4/70</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+import translateUtil from 'src/utils/transition';
+import draggable from './draggable';
+&nbsp;
+const DEFAULT_ITEM_HEIGHT = 44;
+&nbsp;
+export default <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
+  name: 'zan-picker-column',
+&nbsp;
+  props: {
+    /**
+     * 每一列可见备选元素的个数
+     */
+    visibileColumnCount: {
+      type: Number,
+      default: 5
+    },
+    /**
+     * 该列所有的可选值
+     */
+    values: <span class="fstat-no" title="function not covered" >{</span>
+      type: Array,
+      default() {
+<span class="cstat-no" title="statement not covered" >        r</span>eturn [];
+      }
+    },
+    /**
+     * 每列添加额外的`className`
+     */
+    className: {
+      type: String,
+      default: ''
+    },
+    /**
+     * 行高
+     */
+    itemHeight: {
+      type: Number,
+      default: DEFAULT_ITEM_HEIGHT
+    },
+    value: {}
+  },
+&nbsp;
+  data() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn {
+      currentValue: this.value,
+      currentValues: this.values,
+      isDragging: false
+    };
+  },
+&nbsp;
+  watch: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
+    values(val) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.currentValues = val;
+    },
+&nbsp;
+    currentValues(val) {
+<span class="cstat-no" title="statement not covered" >      if (this.valueIndex === -1) {</span>
+<span class="cstat-no" title="statement not covered" >        t</span>his.currentValue = (val || [])[0];
+      }
+    },
+&nbsp;
+    currentValue(val) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.doOnValueChange();
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('change', this);
+    }
+  },
+&nbsp;
+  computed: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span>
+    /**
+     * picker可见备选元素总高度
+     */
+    visibleContentHeight() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.itemHeight * this.visibileColumnCount;
+    },
+&nbsp;
+    /**
+     * 当前选中值在`values`中的索引
+     */
+    valueIndex() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.currentValues.indexOf(this.currentValue);
+    },
+&nbsp;
+    /**
+     * 计算picker的拖动范围
+     */
+    dragRange() {
+<span class="cstat-no" title="statement not covered" >      v</span>ar values = this.currentValues;
+<span class="cstat-no" title="statement not covered" >      v</span>ar visibileColumnCount = this.visibileColumnCount;
+<span class="cstat-no" title="statement not covered" >      v</span>ar itemHeight = this.itemHeight;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      r</span>eturn [ -itemHeight * (values.length - Math.ceil(visibileColumnCount / 2)), itemHeight * Math.floor(visibileColumnCount / 2) ];
+    },
+&nbsp;
+    /**
+     * 计算`classNames`
+     */
+    classNames() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.className.split(' ');
+    }
+  },
+&nbsp;
+  mounted() {
+<span class="cstat-no" title="statement not covered" >    t</span>his.initEvents();
+<span class="cstat-no" title="statement not covered" >    t</span>his.doOnValueChange();
+  },
+&nbsp;
+  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span>
+    /**
+     * 将当前`value`值转换成需要垂直方向需要`translate`的值
+     */
+    value2Translate(value) {
+<span class="cstat-no" title="statement not covered" >      l</span>et values = this.currentValues;
+<span class="cstat-no" title="statement not covered" >      l</span>et valueIndex = values.indexOf(value);
+<span class="cstat-no" title="statement not covered" >      l</span>et offset = Math.floor(this.visibileColumnCount / 2);
+<span class="cstat-no" title="statement not covered" >      l</span>et itemHeight = this.itemHeight;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      if (valueIndex !== -1) {</span>
+<span class="cstat-no" title="statement not covered" >        r</span>eturn (valueIndex - offset) * (-itemHeight);
+      }
+    },
+&nbsp;
+    /**
+     * 根据当前`translate`的值转换成当前选中的`value`
+     */
+    translate2Value(translate) {
+<span class="cstat-no" title="statement not covered" >      l</span>et itemHeight = this.itemHeight;
+<span class="cstat-no" title="statement not covered" >      t</span>ranslate = Math.round(translate / itemHeight) * itemHeight;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      l</span>et index = -(translate - Math.floor(this.visibileColumnCount / 2) * itemHeight) / itemHeight;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.currentValues[index];
+    },
+&nbsp;
+    /**
+     * 初始化拖动事件
+     */
+    initEvents() <span class="cstat-no" title="statement not covered" >{</span>
+<span class="cstat-no" title="statement not covered" >      v</span>ar el = this.$refs.wrapper;
+<span class="cstat-no" title="statement not covered" >      v</span>ar dragState = {};
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      v</span>ar velocityTranslate;
+<span class="cstat-no" title="statement not covered" >      v</span>ar prevTranslate;
+<span class="cstat-no" title="statement not covered" >      var pickerItems; // eslint-disable-line</span>
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      d</span>raggable(el, {
+        start: <span class="fstat-no" title="function not covered" >(event) =&gt; {</span>
+          // 存储当前状态
+<span class="cstat-no" title="statement not covered" >          d</span>ragState = {
+            range: this.dragRange,
+            start: new Date(),
+            startLeft: event.pageX,
+            startTop: event.pageY,
+            startTranslateTop: translateUtil.getElementTranslate(el).top
+          };
+<span class="cstat-no" title="statement not covered" >          pickerItems = el.querySelectorAll('.zan-picker-item'); // eslint-disable-line</span>
+        },
+&nbsp;
+        drag: <span class="fstat-no" title="function not covered" >(event) =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >          t</span>his.isDragging = true;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >          d</span>ragState.left = event.pageX;
+<span class="cstat-no" title="statement not covered" >          d</span>ragState.top = event.pageY;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >          l</span>et deltaY = dragState.top - dragState.startTop;
+<span class="cstat-no" title="statement not covered" >          l</span>et translate = dragState.startTranslateTop + deltaY;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >          t</span>ranslateUtil.translateElement(el, null, translate);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >          v</span>elocityTranslate = translate - prevTranslate || translate;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >          p</span>revTranslate = translate;
+        },
+&nbsp;
+        end: <span class="fstat-no" title="function not covered" >() =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >          if (this.isDragging) {</span>
+<span class="cstat-no" title="statement not covered" >            t</span>his.isDragging = false;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >            v</span>ar momentumRatio = 7;
+<span class="cstat-no" title="statement not covered" >            v</span>ar currentTranslate = translateUtil.getElementTranslate(el).top;
+<span class="cstat-no" title="statement not covered" >            v</span>ar duration = new Date() - dragState.start;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >            v</span>ar momentumTranslate;
+<span class="cstat-no" title="statement not covered" >            if (duration &lt; 300) {</span>
+<span class="cstat-no" title="statement not covered" >              m</span>omentumTranslate = currentTranslate + velocityTranslate * momentumRatio;
+            }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >            v</span>ar dragRange = dragState.range;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >            t</span>his.$nextTick(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >              v</span>ar translate;
+<span class="cstat-no" title="statement not covered" >              v</span>ar itemHeight = this.itemHeight;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >              if (momentumTranslate) {</span>
+<span class="cstat-no" title="statement not covered" >                t</span>ranslate = Math.round(momentumTranslate / itemHeight) * itemHeight;
+              } else {
+<span class="cstat-no" title="statement not covered" >                t</span>ranslate = Math.round(currentTranslate / itemHeight) * itemHeight;
+              }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >              t</span>ranslate = Math.max(Math.min(translate, dragRange[1]), dragRange[0]);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >              t</span>ranslateUtil.translateElement(el, null, translate);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >              t</span>his.currentValue = this.translate2Value(translate);
+            });
+          }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >          d</span>ragState = {};
+        }
+      });
+    },
+&nbsp;
+    /**
+     * `value`改变时调用
+     */
+    doOnValueChange() {
+<span class="cstat-no" title="statement not covered" >      l</span>et value = this.currentValue;
+<span class="cstat-no" title="statement not covered" >      l</span>et wrapper = this.$refs.wrapper;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', this.currentValue);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>ranslateUtil.translateElement(wrapper, null, this.value2Translate(value));
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/src/picker.vue.html b/test/unit/coverage/lcov-report/packages/picker/src/picker.vue.html
new file mode 100644
index 000000000..e459b2a4d
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/picker/src/picker.vue.html
@@ -0,0 +1,516 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/picker/src/picker.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/picker/src/</a> picker.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">22.58% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>7/31</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">22.22% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/18</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">7.14% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/14</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">8% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/25</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+import PickerColumn from './picker-column';
+&nbsp;
+const DEFAULT_ITEM_HEIGHT = 44;
+&nbsp;
+export default {
+  name: 'zan-picker',
+&nbsp;
+  components: {
+    PickerColumn
+  },
+&nbsp;
+  props: {
+    /**
+     * 每一列可见备选元素的个数
+     */
+    visibileColumnCount: {
+      type: Number,
+      default: 5
+    },
+    /**
+     * 选中元素区高度
+     */
+    itemHeight: {
+      type: Number,
+      default: DEFAULT_ITEM_HEIGHT
+    },
+    /**
+     * 对象数组,配置每一列显示的数据
+     */
+    columns: <span class="fstat-no" title="function not covered" >{</span>
+      type: Array,
+      default() {
+<span class="cstat-no" title="statement not covered" >        r</span>eturn [];
+      }
+    },
+    /**
+     * 否在组件顶部显示一个toolbar
+     */
+    showToolbar: {
+      type: Boolean,
+      default: true
+    }
+  },
+&nbsp;
+  computed: <span class="fstat-no" title="function not covered" >{</span>
+    values() {
+<span class="cstat-no" title="statement not covered" >      l</span>et columns = this.columns || [];
+<span class="cstat-no" title="statement not covered" >      l</span>et values = [];
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      c</span>olumns.forEach(<span class="fstat-no" title="function not covered" >column =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >        v</span>alues.push(column.value || column.values[column.defaultIndex || 0]);
+      });
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      r</span>eturn values;
+    }
+  },
+&nbsp;
+  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span></span></span></span></span>
+    /**
+     * 处理列`change`事件
+     */
+    columnValueChange() {
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('change', this, this.values);
+    },
+&nbsp;
+    /**
+     * 获取对应索引的列的实例
+     */
+    getColumn(index) {
+<span class="cstat-no" title="statement not covered" >      l</span>et children = this.$children.filter(<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >c</span></span>hild =&gt; child.$options.name === 'zan-picker-column');
+<span class="cstat-no" title="statement not covered" >      r</span>eturn children[index];
+    },
+&nbsp;
+    /**
+     * 获取对应列中选中的值
+     */
+    getColumnValue(index) {
+<span class="cstat-no" title="statement not covered" >      l</span>et column = this.getColumn(index);
+<span class="cstat-no" title="statement not covered" >      r</span>eturn column &amp;&amp; column.values[column.valueIndex];
+    },
+&nbsp;
+    /**
+     * 设置对应列中选中的值
+     */
+    setColumnValue(index, value) {
+<span class="cstat-no" title="statement not covered" >      l</span>et column = this.getColumn(index);
+<span class="cstat-no" title="statement not covered" >      if (column) {</span>
+<span class="cstat-no" title="statement not covered" >        c</span>olumn.currentValue = value;
+      }
+    },
+&nbsp;
+    /**
+     * 获取对应列中所有的备选值
+     */
+    getColumnValues(index) {
+<span class="cstat-no" title="statement not covered" >      l</span>et column = this.getColumn(index);
+<span class="cstat-no" title="statement not covered" >      r</span>eturn column &amp;&amp; column.currentValues;
+    },
+&nbsp;
+    /**
+     * 设置对应列中所有的备选值
+     */
+    setColumnValues(index, values) {
+<span class="cstat-no" title="statement not covered" >      l</span>et column = this.getColumn(index);
+<span class="cstat-no" title="statement not covered" >      if (column) {</span>
+<span class="cstat-no" title="statement not covered" >        c</span>olumn.currentValues = values;
+      }
+    },
+&nbsp;
+    /**
+     * 获取所有列中被选中的值,返回一个数组
+     */
+    getValues() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.values;
+    },
+&nbsp;
+    /**
+     * `values`为一个数组,设置所有列中被选中的值
+     */
+    setValues(values) <span class="cstat-no" title="statement not covered" >{</span>
+<span class="cstat-no" title="statement not covered" >      v</span>alues.forEach(<span class="fstat-no" title="function not covered" >(value, index) =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >        t</span>his.setColumnValue(index, value);
+      });
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/popup/index.html b/test/unit/coverage/lcov-report/packages/popup/index.html
new file mode 100644
index 000000000..e9bbd81ec
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/popup/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/popup/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/popup/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/popup/index.js.html b/test/unit/coverage/lcov-report/packages/popup/index.js.html
new file mode 100644
index 000000000..80eb3874e
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/popup/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/popup/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/popup/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Popup from './src/popup';
+&nbsp;
+export default Popup;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/popup/src/index.html b/test/unit/coverage/lcov-report/packages/popup/src/index.html
new file mode 100644
index 000000000..9d6b75eab
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/popup/src/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/popup/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/popup/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">42.86% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/14</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/8</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/10</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="popup.vue"><a href="popup.vue.html">popup.vue</a></td>
+	<td data-value="42.86" class="pic low"><div class="chart"><div class="cover-fill" style="width: 42%;"></div><div class="cover-empty" style="width:58%;"></div></div></td>
+	<td data-value="42.86" class="pct low">42.86%</td>
+	<td data-value="14" class="abs low">6/14</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="8" class="abs medium">4/8</td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="6" class="abs low">1/6</td>
+	<td data-value="20" class="pct low">20%</td>
+	<td data-value="10" class="abs low">2/10</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/popup/src/popup.vue.html b/test/unit/coverage/lcov-report/packages/popup/src/popup.vue.html
new file mode 100644
index 000000000..5072652e2
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/popup/src/popup.vue.html
@@ -0,0 +1,282 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/popup/src/popup.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/popup/src/</a> popup.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">42.86% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/14</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/8</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/10</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+import Popup from 'src/mixins/popup';
+&nbsp;
+export default <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
+  name: 'zan-popup',
+&nbsp;
+  mixins: [Popup],
+&nbsp;
+  props: {
+    overlay: {
+      default: true
+    },
+&nbsp;
+    lockOnScroll: {
+      default: false
+    },
+&nbsp;
+    closeOnClickOverlay: {
+      default: true
+    },
+&nbsp;
+    transition: {
+      type: String,
+      default: 'popup-slide'
+    },
+&nbsp;
+    position: {
+      type: String,
+      default: ''
+    }
+  },
+&nbsp;
+  data() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn {
+      currentValue: false,
+      currentTransition: this.transition
+    };
+  },
+&nbsp;
+  watch: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
+    currentValue(val) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', val);
+    },
+&nbsp;
+    value(val) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.currentValue = val;
+    }
+  },
+&nbsp;
+  beforeMount() {
+<span class="cstat-no" title="statement not covered" >    if (this.transition !== 'popup-fade') {</span>
+<span class="cstat-no" title="statement not covered" >      t</span>his.currentTransition = `popup-slide-${this.position}`;
+    }
+  },
+&nbsp;
+  mounted() {
+<span class="cstat-no" title="statement not covered" >    if (this.value) {</span>
+<span class="cstat-no" title="statement not covered" >      t</span>his.currentValue = true;
+<span class="cstat-no" title="statement not covered" >      t</span>his.open();
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio-group/index.html b/test/unit/coverage/lcov-report/packages/radio-group/index.html
new file mode 100644
index 000000000..2bddf9253
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/radio-group/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/radio-group/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/radio-group/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio-group/index.js.html b/test/unit/coverage/lcov-report/packages/radio-group/index.js.html
new file mode 100644
index 000000000..3d3f3d728
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/radio-group/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/radio-group/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/radio-group/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import RadioGroup from 'packages/radio/src/radio-group';
+&nbsp;
+export default RadioGroup;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/index.html b/test/unit/coverage/lcov-report/packages/radio/index.html
new file mode 100644
index 000000000..8910e05cb
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/radio/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/radio/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/radio/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/index.js.html b/test/unit/coverage/lcov-report/packages/radio/index.js.html
new file mode 100644
index 000000000..55126b0c0
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/radio/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/radio/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/radio/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Radio from './src/radio';
+&nbsp;
+export default Radio;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/src/index.html b/test/unit/coverage/lcov-report/packages/radio/src/index.html
new file mode 100644
index 000000000..4a0161c0d
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/radio/src/index.html
@@ -0,0 +1,110 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/radio/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/radio/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">53.33% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>8/15</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">22.22% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/18</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">30% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>3/10</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file medium" data-value="radio-group.vue"><a href="radio-group.vue.html">radio-group.vue</a></td>
+	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
+	<td data-value="66.67" class="pct medium">66.67%</td>
+	<td data-value="3" class="abs medium">2/3</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="2" class="abs medium">1/2</td>
+	</tr>
+
+<tr>
+	<td class="file medium" data-value="radio.vue"><a href="radio.vue.html">radio.vue</a></td>
+	<td data-value="50" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 50%;"></div><div class="cover-empty" style="width:50%;"></div></div></td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="12" class="abs medium">6/12</td>
+	<td data-value="22.22" class="pct low">22.22%</td>
+	<td data-value="18" class="abs low">4/18</td>
+	<td data-value="20" class="pct low">20%</td>
+	<td data-value="5" class="abs low">1/5</td>
+	<td data-value="25" class="pct low">25%</td>
+	<td data-value="8" class="abs low">2/8</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/src/radio-group.vue.html b/test/unit/coverage/lcov-report/packages/radio/src/radio-group.vue.html
new file mode 100644
index 000000000..9cbd59967
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/radio/src/radio-group.vue.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/radio/src/radio-group.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/radio/src/</a> radio-group.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">66.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/2</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-radio-group',
+&nbsp;
+  props: {
+    value: {},
+    disabled: Boolean
+  },
+&nbsp;
+  watch: <span class="fstat-no" title="function not covered" >{</span>
+    value(value) {
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('change', value);
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/src/radio.vue.html b/test/unit/coverage/lcov-report/packages/radio/src/radio.vue.html
new file mode 100644
index 000000000..f3e027c2e
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/radio/src/radio.vue.html
@@ -0,0 +1,267 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/radio/src/radio.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/radio/src/</a> radio.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/12</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">22.22% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/18</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/5</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">25% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/8</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+import findParent from 'src/mixins/findParent';
+&nbsp;
+export default {
+  name: 'zan-radio',
+&nbsp;
+  mixins: [findParent],
+&nbsp;
+  props: {
+    disabled: Boolean,
+    value: {},
+    name: [String, Number]
+  },
+&nbsp;
+  computed: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
+    isGroup() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn !!this.findParentByComponentName('zan-radio-group');
+    },
+&nbsp;
+    currentValue: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
+      get() {
+<span class="cstat-no" title="statement not covered" >        r</span>eturn this.isGroup &amp;&amp; this.parentGroup ? this.parentGroup.value : this.value;
+      },
+&nbsp;
+      set(val) {
+<span class="cstat-no" title="statement not covered" >        if (this.isGroup &amp;&amp; this.parentGroup) {</span>
+<span class="cstat-no" title="statement not covered" >          t</span>his.parentGroup.$emit('input', val);
+        } else {
+<span class="cstat-no" title="statement not covered" >          t</span>his.$emit('input', val);
+        }
+      }
+    },
+&nbsp;
+    isDisabled() {
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.isGroup &amp;&amp; this.parentGroup
+          ? this.parentGroup.disabled || this.disabled
+          : this.disabled;
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/search/index.html b/test/unit/coverage/lcov-report/packages/search/index.html
new file mode 100644
index 000000000..a7b626b3e
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/search/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/search/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/search/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/search/index.js.html b/test/unit/coverage/lcov-report/packages/search/index.js.html
new file mode 100644
index 000000000..1449e4075
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/search/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/search/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/search/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Search from './src/search';
+&nbsp;
+export default Search;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/search/src/index.html b/test/unit/coverage/lcov-report/packages/search/src/index.html
new file mode 100644
index 000000000..b5d3a6a7c
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/search/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/search/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/search/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/12</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/10</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="search.vue"><a href="search.vue.html">search.vue</a></td>
+	<td data-value="16.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 16%;"></div><div class="cover-empty" style="width:84%;"></div></div></td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="12" class="abs low">2/12</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="2" class="abs low">0/2</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="6" class="abs low">0/6</td>
+	<td data-value="10" class="pct low">10%</td>
+	<td data-value="10" class="abs low">1/10</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/search/src/search.vue.html b/test/unit/coverage/lcov-report/packages/search/src/search.vue.html
new file mode 100644
index 000000000..a173bee10
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/search/src/search.vue.html
@@ -0,0 +1,230 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/search/src/search.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/search/src/</a> search.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/12</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/10</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+export default <span class="fstat-no" title="function not covered" >{</span>
+  name: 'zan-search',
+  props: {
+    placeholder: {
+      type: String
+    }
+  },
+  data() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn {
+      value: '',
+      focusStatus: false,
+      isFocus: false
+    };
+  },
+  directives: {
+    refocus: {
+      update: <span class="fstat-no" title="function not covered" >function(el, state) {</span>
+<span class="cstat-no" title="statement not covered" >        if (state.value) { <span class="cstat-no" title="statement not covered" >e</span>l.focus(); }</span>
+      }
+    }
+  },
+  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span>
+    handleFocus() {
+      // 进入input焦点,出现close和取消
+<span class="cstat-no" title="statement not covered" >      t</span>his.isFocus = true;
+    },
+    handleClean() {
+      // 点击close后清空vlaue后,再聚焦input框
+<span class="cstat-no" title="statement not covered" >      t</span>his.value = '';
+<span class="cstat-no" title="statement not covered" >      t</span>his.focusStatus = true;
+    },
+    handleBack() {
+      // 点击取消后,清空所有回复最初状态
+<span class="cstat-no" title="statement not covered" >      t</span>his.value = '';
+<span class="cstat-no" title="statement not covered" >      t</span>his.focusStatus = false;
+<span class="cstat-no" title="statement not covered" >      t</span>his.isFocus = false;
+    },
+    handleSearch() {
+      // input输入回车后,发送回调
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('search', this.value);
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/steps/index.html b/test/unit/coverage/lcov-report/packages/steps/index.html
new file mode 100644
index 000000000..f9fa3ebfe
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/steps/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/steps/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/steps/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/steps/index.js.html b/test/unit/coverage/lcov-report/packages/steps/index.js.html
new file mode 100644
index 000000000..fb25e9177
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/steps/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/steps/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/steps/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Steps from './src/steps';
+&nbsp;
+export default Steps;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/steps/src/index.html b/test/unit/coverage/lcov-report/packages/steps/src/index.html
new file mode 100644
index 000000000..c54791d8d
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/steps/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/steps/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/steps/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">66.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/2</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file medium" data-value="steps.vue"><a href="steps.vue.html">steps.vue</a></td>
+	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
+	<td data-value="66.67" class="pct medium">66.67%</td>
+	<td data-value="3" class="abs medium">2/3</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="2" class="abs medium">1/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/steps/src/steps.vue.html b/test/unit/coverage/lcov-report/packages/steps/src/steps.vue.html
new file mode 100644
index 000000000..bc655f702
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/steps/src/steps.vue.html
@@ -0,0 +1,119 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/steps/src/steps.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/steps/src/</a> steps.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">66.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/2</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+&nbsp;
+export default <span class="fstat-no" title="function not covered" >{</span>
+  name: 'Sample',
+  props: ['author'],
+  data() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn {
+      name: 'World'
+    };
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/switch/index.html b/test/unit/coverage/lcov-report/packages/switch/index.html
new file mode 100644
index 000000000..4075ed6f9
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/switch/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/switch/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/switch/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/switch/index.js.html b/test/unit/coverage/lcov-report/packages/switch/index.js.html
new file mode 100644
index 000000000..f613686c9
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/switch/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/switch/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/switch/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Switch from './src/switch';
+&nbsp;
+export default Switch;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/switch/src/index.html b/test/unit/coverage/lcov-report/packages/switch/src/index.html
new file mode 100644
index 000000000..b457469a5
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/switch/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/switch/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/switch/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">18.18% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/11</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/10</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.29% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/7</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="switch.vue"><a href="switch.vue.html">switch.vue</a></td>
+	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
+	<td data-value="18.18" class="pct low">18.18%</td>
+	<td data-value="11" class="abs low">2/11</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="10" class="abs low">0/10</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="3" class="abs low">0/3</td>
+	<td data-value="14.29" class="pct low">14.29%</td>
+	<td data-value="7" class="abs low">1/7</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/switch/src/switch.vue.html b/test/unit/coverage/lcov-report/packages/switch/src/switch.vue.html
new file mode 100644
index 000000000..b072ea9a8
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/switch/src/switch.vue.html
@@ -0,0 +1,251 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/switch/src/switch.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/switch/src/</a> switch.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">18.18% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/11</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/10</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.29% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/7</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+//
+//
+&nbsp;
+/**
+ * zan-switch
+ * @module components/switch
+ * @desc 开关
+ * @param {boolean} [checked=false] - 开关状态
+ * @param {boolean} [disabled=false] - 禁用
+ * @param {boolean} [loading=false] - loading状态
+ * @param {callback} [onChange] - 开关状态改变回调函数。
+ *
+ * @example
+ * &lt;zan-switch checked="true" disabled="false"&gt;&lt;/zan-switch&gt;
+ */
+export default {
+  name: 'zan-switch',
+  props: {
+    checked: {
+      type: Boolean,
+      default: false
+    },
+    disabled: {
+      type: Boolean,
+      default: false
+    },
+    loading: {
+      type: Boolean,
+      default: false
+    },
+    onChange: {
+      type: Function,
+      default: <span class="fstat-no" title="function not covered" >function() {</span>}
+    }
+  },
+  computed: {
+    switchState: <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" >      l</span>et switchState = this.checked ? ['is-on'] : ['is-off'];
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      if (this.disabled) <span class="cstat-no" title="statement not covered" >s</span></span>witchState.push('is-disabled');
+<span class="cstat-no" title="statement not covered" >      if (this.loading) <span class="cstat-no" title="statement not covered" >s</span></span>witchState.push('is-loading');
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      r</span>eturn switchState;
+    }
+  },
+  methods: {
+    /*
+     * 开关状态交互。
+     */
+    toggleState: <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" >      if (this.disabled || this.loading) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+<span class="cstat-no" title="statement not covered" >      t</span>his.onChange(!this.checked);
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/tag/index.html b/test/unit/coverage/lcov-report/packages/tag/index.html
new file mode 100644
index 000000000..713b3ae96
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/tag/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/tag/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/tag/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/tag/index.js.html b/test/unit/coverage/lcov-report/packages/tag/index.js.html
new file mode 100644
index 000000000..7926a4bbf
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/tag/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/tag/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/tag/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Tag from './src/main';
+&nbsp;
+export default Tag;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/tag/src/index.html b/test/unit/coverage/lcov-report/packages/tag/src/index.html
new file mode 100644
index 000000000..192a70655
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/tag/src/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/tag/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/tag/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="main.vue"><a href="main.vue.html">main.vue</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/tag/src/main.vue.html b/test/unit/coverage/lcov-report/packages/tag/src/main.vue.html
new file mode 100644
index 000000000..51ee48337
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/tag/src/main.vue.html
@@ -0,0 +1,113 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/tag/src/main.vue</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/tag/src/</a> main.vue
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/1</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
+//
+//
+//
+//
+//
+&nbsp;
+export default {
+  name: 'zan-tag',
+  props: {
+    type: String,
+    mark: Boolean,
+    plain: Boolean
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/index.html b/test/unit/coverage/lcov-report/packages/waterfall/index.html
new file mode 100644
index 000000000..995e12f5c
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/waterfall/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/waterfall/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> packages/waterfall/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/index.js.html b/test/unit/coverage/lcov-report/packages/waterfall/index.js.html
new file mode 100644
index 000000000..93aaf1946
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/waterfall/index.js.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/waterfall/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">packages/waterfall/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Waterfall from './src/main.js';
+&nbsp;
+export default Waterfall;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/src/directive.js.html b/test/unit/coverage/lcov-report/packages/waterfall/src/directive.js.html
new file mode 100644
index 000000000..9ab52916b
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/waterfall/src/directive.js.html
@@ -0,0 +1,354 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/waterfall/src/directive.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/waterfall/src/</a> directive.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">20.37% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>11/54</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">15.38% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/26</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">22.22% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>2/9</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.58% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>7/48</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">2×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Utils from './utils.js';
+&nbsp;
+const CONTEXT = '@@Waterfall';
+const OFFSET = 300;
+&nbsp;
+// 绑定事件到元素上
+// 读取基本的控制变量
+<span class="fstat-no" title="function not covered" >function doBindEvent() <span class="cstat-no" title="statement not covered" >{</span></span>
+<span class="cstat-no" title="statement not covered" >  t</span>his.scrollEventListener = Utils.debounce(handleScrollEvent.bind(this), 200);
+<span class="cstat-no" title="statement not covered" >  t</span>his.scrollEventTarget = Utils.getScrollEventTarget(this.el);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  v</span>ar disabledExpr = this.el.getAttribute('waterfall-disabled');
+<span class="cstat-no" title="statement not covered" >  v</span>ar disabled = false;
+<span class="cstat-no" title="statement not covered" >  if (disabledExpr) {</span>
+<span class="cstat-no" title="statement not covered" >    t</span>his.vm.$watch(disabledExpr, <span class="fstat-no" title="function not covered" >(value) =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >      t</span>his.disabled = value;
+    });
+<span class="cstat-no" title="statement not covered" >    d</span>isabled = Boolean(this.vm[disabledExpr]);
+  }
+<span class="cstat-no" title="statement not covered" >  t</span>his.disabled = disabled;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  v</span>ar offset = this.el.getAttribute('waterfall-offset');
+<span class="cstat-no" title="statement not covered" >  t</span>his.offset = Number(offset) || OFFSET;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  t</span>his.scrollEventTarget.addEventListener('scroll', this.scrollEventListener);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  t</span>his.scrollEventListener();
+}
+&nbsp;
+// 处理滚动函数
+<span class="fstat-no" title="function not covered" >function handleScrollEvent() {</span>
+<span class="cstat-no" title="statement not covered" >  l</span>et element = this.el;
+<span class="cstat-no" title="statement not covered" >  l</span>et scrollEventTarget = this.scrollEventTarget;
+&nbsp;
+  // 已被禁止的滚动处理
+<span class="cstat-no" title="statement not covered" >  if (this.disabled) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  l</span>et targetScrollTop = Utils.getScrollTop(scrollEventTarget);
+<span class="cstat-no" title="statement not covered" >  l</span>et targetBottom = targetScrollTop + Utils.getVisibleHeight(scrollEventTarget);
+&nbsp;
+  // 判断是否到了底
+<span class="cstat-no" title="statement not covered" >  l</span>et needLoadMoreToLower = false;
+<span class="cstat-no" title="statement not covered" >  if (element === scrollEventTarget) {</span>
+<span class="cstat-no" title="statement not covered" >    n</span>eedLoadMoreToLower = scrollEventTarget.scollHeight - targetBottom &lt; this.offset;
+  } else {
+<span class="cstat-no" title="statement not covered" >    l</span>et elementBottom = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget) + Utils.getVisibleHeight(element);
+<span class="cstat-no" title="statement not covered" >    n</span>eedLoadMoreToLower = elementBottom - Utils.getVisibleHeight(scrollEventTarget) &lt; this.offset;
+  }
+<span class="cstat-no" title="statement not covered" >  if (needLoadMoreToLower) {</span>
+<span class="cstat-no" title="statement not covered" >    t</span>his.cb['lower'] &amp;&amp; this.cb['lower']({ target: scrollEventTarget, top: targetScrollTop });
+  }
+&nbsp;
+  // 判断是否到了顶
+<span class="cstat-no" title="statement not covered" >  l</span>et needLoadMoreToUpper = false;
+<span class="cstat-no" title="statement not covered" >  if (element === scrollEventTarget) {</span>
+<span class="cstat-no" title="statement not covered" >    n</span>eedLoadMoreToUpper = targetScrollTop &lt; this.offset;
+  } else {
+<span class="cstat-no" title="statement not covered" >    l</span>et elementTop = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget);
+<span class="cstat-no" title="statement not covered" >    n</span>eedLoadMoreToUpper = elementTop + this.offset &gt; 0;
+  }
+<span class="cstat-no" title="statement not covered" >  if (needLoadMoreToUpper) {</span>
+<span class="cstat-no" title="statement not covered" >    t</span>his.cb['upper'] &amp;&amp; this.cb['upper']({ target: scrollEventTarget, top: targetScrollTop });
+  }
+}
+&nbsp;
+export default function(type) {
+  return <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
+    bind(el, binding, vnode) {
+<span class="cstat-no" title="statement not covered" >      if (!el[CONTEXT]) {</span>
+<span class="cstat-no" title="statement not covered" >        e</span>l[CONTEXT] = {
+          el,
+          vm: vnode.context,
+          cb: {}
+        };
+      }
+<span class="cstat-no" title="statement not covered" >      e</span>l[CONTEXT].cb[type] = binding.value;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      v</span>node.context.$on('hook:mounted', <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" >        if (Utils.isAttached(el)) {</span>
+<span class="cstat-no" title="statement not covered" >          d</span>oBindEvent.call(el[CONTEXT]);
+        }
+      });
+    },
+&nbsp;
+    update(el) {
+<span class="cstat-no" title="statement not covered" >      e</span>l[CONTEXT].scrollEventListener();
+    },
+&nbsp;
+    unbind(el) {
+<span class="cstat-no" title="statement not covered" >      c</span>onst context = el[CONTEXT];
+<span class="cstat-no" title="statement not covered" >      c</span>ontext.scrollEventTarget.removeEventListener('scroll', context.scrollEventListener);
+    }
+  };
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/src/index.html b/test/unit/coverage/lcov-report/packages/waterfall/src/index.html
new file mode 100644
index 000000000..ba936205e
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/waterfall/src/index.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/waterfall/src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> packages/waterfall/src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">25.47% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>27/106</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>9/54</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">21.05% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>4/19</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">18.09% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>17/94</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="directive.js"><a href="directive.js.html">directive.js</a></td>
+	<td data-value="20.37" class="pic low"><div class="chart"><div class="cover-fill" style="width: 20%;"></div><div class="cover-empty" style="width:80%;"></div></div></td>
+	<td data-value="20.37" class="pct low">20.37%</td>
+	<td data-value="54" class="abs low">11/54</td>
+	<td data-value="15.38" class="pct low">15.38%</td>
+	<td data-value="26" class="abs low">4/26</td>
+	<td data-value="22.22" class="pct low">22.22%</td>
+	<td data-value="9" class="abs low">2/9</td>
+	<td data-value="14.58" class="pct low">14.58%</td>
+	<td data-value="48" class="abs low">7/48</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="main.js"><a href="main.js.html">main.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="14" class="abs high">14/14</td>
+	<td data-value="83.33" class="pct high">83.33%</td>
+	<td data-value="6" class="abs high">5/6</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="2" class="abs high">2/2</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="9" class="abs high">9/9</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="utils.js"><a href="utils.js.html">utils.js</a></td>
+	<td data-value="5.26" class="pic low"><div class="chart"><div class="cover-fill" style="width: 5%;"></div><div class="cover-empty" style="width:95%;"></div></div></td>
+	<td data-value="5.26" class="pct low">5.26%</td>
+	<td data-value="38" class="abs low">2/38</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="22" class="abs low">0/22</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="8" class="abs low">0/8</td>
+	<td data-value="2.7" class="pct low">2.7%</td>
+	<td data-value="37" class="abs low">1/37</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/src/main.js.html b/test/unit/coverage/lcov-report/packages/waterfall/src/main.js.html
new file mode 100644
index 000000000..4a1a84843
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/waterfall/src/main.js.html
@@ -0,0 +1,110 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/waterfall/src/main.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/waterfall/src/</a> main.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>14/14</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">83.33% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>5/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>2/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>9/9</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Waterfall from './directive.js';
+import Vue from 'vue';
+&nbsp;
+const install = function(Vue) {
+  Vue.directive('WaterfallLower', Waterfall('lower'));
+  Vue.directive('WaterfallUpper', Waterfall('upper'));
+};
+&nbsp;
+<span class="missing-if-branch" title="else path not taken" >E</span>if (!Vue.prototype.$isServer) {
+  Vue.use(install);
+}
+&nbsp;
+Waterfall.install = install;
+export default Waterfall;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/src/utils.js.html b/test/unit/coverage/lcov-report/packages/waterfall/src/utils.js.html
new file mode 100644
index 000000000..a55d5c597
--- /dev/null
+++ b/test/unit/coverage/lcov-report/packages/waterfall/src/utils.js.html
@@ -0,0 +1,293 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for packages/waterfall/src/utils.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">packages/waterfall/src/</a> utils.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">5.26% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/38</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/22</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/8</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">2.7% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/37</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span></span></span>
+  debounce(func, wait, immediate) {
+<span class="cstat-no" title="statement not covered" >    v</span>ar timeout, args, context, timestamp, result;
+<span class="cstat-no" title="statement not covered" >    r</span>eturn <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" >      c</span>ontext = this;
+<span class="cstat-no" title="statement not covered" >      a</span>rgs = arguments;
+<span class="cstat-no" title="statement not covered" >      t</span>imestamp = new Date();
+<span class="cstat-no" title="statement not covered" >      v</span>ar later = <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" >        v</span>ar last = (new Date()) - timestamp;
+<span class="cstat-no" title="statement not covered" >        if (last &lt; wait) {</span>
+<span class="cstat-no" title="statement not covered" >          t</span>imeout = setTimeout(later, wait - last);
+        } else {
+<span class="cstat-no" title="statement not covered" >          t</span>imeout = null;
+<span class="cstat-no" title="statement not covered" >          r</span>esult = func.apply(context, args);
+        }
+      };
+<span class="cstat-no" title="statement not covered" >      if (!timeout) {</span>
+<span class="cstat-no" title="statement not covered" >        t</span>imeout = setTimeout(later, wait);
+      }
+<span class="cstat-no" title="statement not covered" >      r</span>eturn result;
+    };
+  },
+&nbsp;
+  // 找到最近的触发滚动事件的元素
+  getScrollEventTarget(element) {
+<span class="cstat-no" title="statement not covered" >    v</span>ar currentNode = element;
+    // bugfix, see http://w3help.org/zh-cn/causes/SD9013 and http://stackoverflow.com/questions/17016740/onscroll-function-is-not-working-for-chrome
+<span class="cstat-no" title="statement not covered" >    while (currentNode &amp;&amp; currentNode.tagName !== 'HTML' &amp;&amp; currentNode.tagName !== 'BODY' &amp;&amp; currentNode.nodeType === 1) {</span>
+<span class="cstat-no" title="statement not covered" >      v</span>ar overflowY = this.getComputedStyle(currentNode).overflowY;
+<span class="cstat-no" title="statement not covered" >      if (overflowY === 'scroll' || overflowY === 'auto') {</span>
+<span class="cstat-no" title="statement not covered" >        r</span>eturn currentNode;
+      }
+<span class="cstat-no" title="statement not covered" >      c</span>urrentNode = currentNode.parentNode;
+    }
+<span class="cstat-no" title="statement not covered" >    r</span>eturn window;
+  },
+&nbsp;
+  // 判断元素是否被加入到页面节点内
+  isAttached(element) {
+<span class="cstat-no" title="statement not covered" >    v</span>ar currentNode = element.parentNode;
+<span class="cstat-no" title="statement not covered" >    while (currentNode) {</span>
+<span class="cstat-no" title="statement not covered" >      if (currentNode.tagName === 'HTML') {</span>
+<span class="cstat-no" title="statement not covered" >        r</span>eturn true;
+      }
+<span class="cstat-no" title="statement not covered" >      if (currentNode.nodeType === 11) {</span>
+<span class="cstat-no" title="statement not covered" >        r</span>eturn false;
+      }
+<span class="cstat-no" title="statement not covered" >      c</span>urrentNode = currentNode.parentNode;
+    }
+<span class="cstat-no" title="statement not covered" >    r</span>eturn false;
+  },
+&nbsp;
+  // 获取滚动高度
+  getScrollTop(element) {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn 'scrollTop' in element ? element.scrollTop : element.pageYOffset;
+  },
+&nbsp;
+  // 获取元素距离顶部高度
+  getElementTop(element) {
+<span class="cstat-no" title="statement not covered" >    if (element === window) {</span>
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.getScrollTop(window);
+    }
+<span class="cstat-no" title="statement not covered" >    r</span>eturn element.getBoundingClientRect().top + this.getScrollTop(window);
+  },
+&nbsp;
+  getVisibleHeight(element) {
+<span class="cstat-no" title="statement not covered" >    if (element === window) {</span>
+<span class="cstat-no" title="statement not covered" >      r</span>eturn element.innerHeight;
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    r</span>eturn element.getBoundingClientRect().height;
+  },
+&nbsp;
+  getComputedStyle: document.defaultView.getComputedStyle.bind(document.defaultView)
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/prettify.css b/test/unit/coverage/lcov-report/prettify.css
new file mode 100644
index 000000000..b317a7cda
--- /dev/null
+++ b/test/unit/coverage/lcov-report/prettify.css
@@ -0,0 +1 @@
+.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
diff --git a/test/unit/coverage/lcov-report/prettify.js b/test/unit/coverage/lcov-report/prettify.js
new file mode 100644
index 000000000..ef51e0386
--- /dev/null
+++ b/test/unit/coverage/lcov-report/prettify.js
@@ -0,0 +1 @@
+window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
diff --git a/test/unit/coverage/lcov-report/sort-arrow-sprite.png b/test/unit/coverage/lcov-report/sort-arrow-sprite.png
new file mode 100644
index 0000000000000000000000000000000000000000..03f704a609c6fd0dbfdac63466a7d7c958b5cbf3
GIT binary patch
literal 209
zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb
z6^}Hx2)<t4^o6Wx*F;wxHx}=5N#Su@S-w&C^o$MC9b5+$B=T4;r?cPm)%Fj&wd;}X
zP9-IMj(10vstZN_m^jtm<9|ljB!x{5tE86~eE-nSz|0W&!@{XNS*HVNJ%gvKpUXO@
GgeCxf+epL!

literal 0
HcmV?d00001

diff --git a/test/unit/coverage/lcov-report/sorter.js b/test/unit/coverage/lcov-report/sorter.js
new file mode 100644
index 000000000..6c5034e40
--- /dev/null
+++ b/test/unit/coverage/lcov-report/sorter.js
@@ -0,0 +1,158 @@
+var addSorting = (function () {
+    "use strict";
+    var cols,
+        currentSort = {
+            index: 0,
+            desc: false
+        };
+
+    // returns the summary table element
+    function getTable() { return document.querySelector('.coverage-summary'); }
+    // returns the thead element of the summary table
+    function getTableHeader() { return getTable().querySelector('thead tr'); }
+    // returns the tbody element of the summary table
+    function getTableBody() { return getTable().querySelector('tbody'); }
+    // returns the th element for nth column
+    function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
+
+    // loads all columns
+    function loadColumns() {
+        var colNodes = getTableHeader().querySelectorAll('th'),
+            colNode,
+            cols = [],
+            col,
+            i;
+
+        for (i = 0; i < colNodes.length; i += 1) {
+            colNode = colNodes[i];
+            col = {
+                key: colNode.getAttribute('data-col'),
+                sortable: !colNode.getAttribute('data-nosort'),
+                type: colNode.getAttribute('data-type') || 'string'
+            };
+            cols.push(col);
+            if (col.sortable) {
+                col.defaultDescSort = col.type === 'number';
+                colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
+            }
+        }
+        return cols;
+    }
+    // attaches a data attribute to every tr element with an object
+    // of data values keyed by column name
+    function loadRowData(tableRow) {
+        var tableCols = tableRow.querySelectorAll('td'),
+            colNode,
+            col,
+            data = {},
+            i,
+            val;
+        for (i = 0; i < tableCols.length; i += 1) {
+            colNode = tableCols[i];
+            col = cols[i];
+            val = colNode.getAttribute('data-value');
+            if (col.type === 'number') {
+                val = Number(val);
+            }
+            data[col.key] = val;
+        }
+        return data;
+    }
+    // loads all row data
+    function loadData() {
+        var rows = getTableBody().querySelectorAll('tr'),
+            i;
+
+        for (i = 0; i < rows.length; i += 1) {
+            rows[i].data = loadRowData(rows[i]);
+        }
+    }
+    // sorts the table using the data for the ith column
+    function sortByIndex(index, desc) {
+        var key = cols[index].key,
+            sorter = function (a, b) {
+                a = a.data[key];
+                b = b.data[key];
+                return a < b ? -1 : a > b ? 1 : 0;
+            },
+            finalSorter = sorter,
+            tableBody = document.querySelector('.coverage-summary tbody'),
+            rowNodes = tableBody.querySelectorAll('tr'),
+            rows = [],
+            i;
+
+        if (desc) {
+            finalSorter = function (a, b) {
+                return -1 * sorter(a, b);
+            };
+        }
+
+        for (i = 0; i < rowNodes.length; i += 1) {
+            rows.push(rowNodes[i]);
+            tableBody.removeChild(rowNodes[i]);
+        }
+
+        rows.sort(finalSorter);
+
+        for (i = 0; i < rows.length; i += 1) {
+            tableBody.appendChild(rows[i]);
+        }
+    }
+    // removes sort indicators for current column being sorted
+    function removeSortIndicators() {
+        var col = getNthColumn(currentSort.index),
+            cls = col.className;
+
+        cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
+        col.className = cls;
+    }
+    // adds sort indicators for current column being sorted
+    function addSortIndicators() {
+        getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
+    }
+    // adds event listeners for all sorter widgets
+    function enableUI() {
+        var i,
+            el,
+            ithSorter = function ithSorter(i) {
+                var col = cols[i];
+
+                return function () {
+                    var desc = col.defaultDescSort;
+
+                    if (currentSort.index === i) {
+                        desc = !currentSort.desc;
+                    }
+                    sortByIndex(i, desc);
+                    removeSortIndicators();
+                    currentSort.index = i;
+                    currentSort.desc = desc;
+                    addSortIndicators();
+                };
+            };
+        for (i =0 ; i < cols.length; i += 1) {
+            if (cols[i].sortable) {
+                // add the click event handler on the th so users
+                // dont have to click on those tiny arrows
+                el = getNthColumn(i).querySelector('.sorter').parentElement;
+                if (el.addEventListener) {
+                    el.addEventListener('click', ithSorter(i));
+                } else {
+                    el.attachEvent('onclick', ithSorter(i));
+                }
+            }
+        }
+    }
+    // adds sorting functionality to the UI
+    return function () {
+        if (!getTable()) {
+            return;
+        }
+        cols = loadColumns();
+        loadData(cols);
+        addSortIndicators();
+        enableUI();
+    };
+})();
+
+window.addEventListener('load', addSorting);
diff --git a/test/unit/coverage/lcov-report/src/index.html b/test/unit/coverage/lcov-report/src/index.html
new file mode 100644
index 000000000..d2ccfa8b7
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../prettify.css" />
+    <link rel="stylesheet" href="../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../index.html">all files</a> src/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">68.06% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>49/72</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">70% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>7/10</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">54.17% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>26/48</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file medium" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="68.06" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 68%;"></div><div class="cover-empty" style="width:32%;"></div></div></td>
+	<td data-value="68.06" class="pct medium">68.06%</td>
+	<td data-value="72" class="abs medium">49/72</td>
+	<td data-value="70" class="pct medium">70%</td>
+	<td data-value="10" class="abs medium">7/10</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="2" class="abs medium">1/2</td>
+	<td data-value="54.17" class="pct medium">54.17%</td>
+	<td data-value="48" class="abs medium">26/48</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/index.js.html b/test/unit/coverage/lcov-report/src/index.js.html
new file mode 100644
index 000000000..18587284d
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/index.js.html
@@ -0,0 +1,309 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../prettify.css" />
+    <link rel="stylesheet" href="../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../index.html">all files</a> / <a href="index.html">src/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">68.06% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>49/72</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">70% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>7/10</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/2</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">54.17% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>26/48</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Button from '../packages/button/index.js';
+import Switch from '../packages/switch/index.js';
+import Field from '../packages/field/index.js';
+import Radio from '../packages/radio/index.js';
+import Cell from '../packages/cell/index.js';
+import Icon from '../packages/icon/index.js';
+import CellGroup from '../packages/cell-group/index.js';
+import Popup from '../packages/popup/index.js';
+import Dialog from '../packages/dialog/index.js';
+import Picker from '../packages/picker/index.js';
+import RadioGroup from '../packages/radio-group/index.js';
+import Waterfall from '../packages/waterfall/index.js';
+import Loading from '../packages/loading/index.js';
+import Panel from '../packages/panel/index.js';
+import Card from '../packages/card/index.js';
+import Steps from '../packages/steps/index.js';
+import Tag from '../packages/tag/index.js';
+import Checkbox from '../packages/checkbox/index.js';
+import CheckboxGroup from '../packages/checkbox-group/index.js';
+import BadgeGroup from '../packages/badge-group/index.js';
+import Badge from '../packages/badge/index.js';
+import Search from '../packages/search/index.js';
+&nbsp;
+const install = <span class="fstat-no" title="function not covered" >function(Vue) {</span>
+<span class="cstat-no" title="statement not covered" >  if (install.installed) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Button.name, Button);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Switch.name, Switch);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Field.name, Field);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Radio.name, Radio);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Cell.name, Cell);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Icon.name, Icon);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(CellGroup.name, CellGroup);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Popup.name, Popup);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Picker.name, Picker);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(RadioGroup.name, RadioGroup);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Loading.name, Loading);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Panel.name, Panel);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Card.name, Card);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Steps.name, Steps);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Tag.name, Tag);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Checkbox.name, Checkbox);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(CheckboxGroup.name, CheckboxGroup);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(BadgeGroup.name, BadgeGroup);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Badge.name, Badge);
+<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Search.name, Search);
+};
+&nbsp;
+// auto install
+<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof window !== 'undefined' &amp;&amp; window.Vue) {
+<span class="cstat-no" title="statement not covered" >  i</span>nstall(window.Vue);
+}
+&nbsp;
+module.exports = {
+  install,
+  version: '0.0.7',
+  Button,
+  Switch,
+  Field,
+  Radio,
+  Cell,
+  Icon,
+  CellGroup,
+  Popup,
+  Dialog,
+  Picker,
+  RadioGroup,
+  Waterfall,
+  Loading,
+  Panel,
+  Card,
+  Steps,
+  Tag,
+  Checkbox,
+  CheckboxGroup,
+  BadgeGroup,
+  Badge,
+  Search
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/findParent.js.html b/test/unit/coverage/lcov-report/src/mixins/findParent.js.html
new file mode 100644
index 000000000..43d59e092
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/mixins/findParent.js.html
@@ -0,0 +1,134 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/mixins/findParent.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">src/mixins/</a> findParent.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">18.18% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/11</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">11.11% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/9</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
+ * 根据父组件名找到对应`parent`
+ */
+export default {
+  methods: <span class="fstat-no" title="function not covered" >{</span>
+    findParentByComponentName(name) {
+<span class="cstat-no" title="statement not covered" >      if (this.parentGroup) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      l</span>et parent = this.$parent;
+<span class="cstat-no" title="statement not covered" >      while (parent) {</span>
+<span class="cstat-no" title="statement not covered" >        if (parent.$options.name === name) {</span>
+<span class="cstat-no" title="statement not covered" >          t</span>his.parentGroup = parent;
+<span class="cstat-no" title="statement not covered" >          b</span>reak;
+        } else {
+<span class="cstat-no" title="statement not covered" >          p</span>arent = parent.$parent;
+        }
+      }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      r</span>eturn this.parentGroup;
+    }
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/index.html b/test/unit/coverage/lcov-report/src/mixins/index.html
new file mode 100644
index 000000000..9e4c3a589
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/mixins/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/mixins/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> src/mixins/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">18.18% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/11</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">11.11% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/9</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="findParent.js"><a href="findParent.js.html">findParent.js</a></td>
+	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
+	<td data-value="18.18" class="pct low">18.18%</td>
+	<td data-value="11" class="abs low">2/11</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="4" class="abs low">0/4</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="11.11" class="pct low">11.11%</td>
+	<td data-value="9" class="abs low">1/9</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/popup/index.html b/test/unit/coverage/lcov-report/src/mixins/popup/index.html
new file mode 100644
index 000000000..864b5eaf3
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/mixins/popup/index.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/mixins/popup/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> src/mixins/popup/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.18% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>19/134</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">4.88% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/82</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">4.76% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/21</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>12/120</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="index.js"><a href="index.js.html">index.js</a></td>
+	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
+	<td data-value="18.18" class="pct low">18.18%</td>
+	<td data-value="66" class="abs low">12/66</td>
+	<td data-value="10.26" class="pct low">10.26%</td>
+	<td data-value="39" class="abs low">4/39</td>
+	<td data-value="10" class="pct low">10%</td>
+	<td data-value="10" class="abs low">1/10</td>
+	<td data-value="10.71" class="pct low">10.71%</td>
+	<td data-value="56" class="abs low">6/56</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="popup-manager.js"><a href="popup-manager.js.html">popup-manager.js</a></td>
+	<td data-value="10.29" class="pic low"><div class="chart"><div class="cover-fill" style="width: 10%;"></div><div class="cover-empty" style="width:90%;"></div></div></td>
+	<td data-value="10.29" class="pct low">10.29%</td>
+	<td data-value="68" class="abs low">7/68</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="43" class="abs low">0/43</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="11" class="abs low">0/11</td>
+	<td data-value="9.38" class="pct low">9.38%</td>
+	<td data-value="64" class="abs low">6/64</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/popup/index.js.html b/test/unit/coverage/lcov-report/src/mixins/popup/index.js.html
new file mode 100644
index 000000000..2e8f0a0b0
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/mixins/popup/index.js.html
@@ -0,0 +1,539 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/mixins/popup/index.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">src/mixins/popup/</a> index.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">18.18% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>12/66</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10.26% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>4/39</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/10</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10.71% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>6/56</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Vue from 'vue';
+import merge from 'src/utils/merge';
+import PopupManager from './popup-manager';
+&nbsp;
+let idSeed = 1;
+&nbsp;
+const getDOM = <span class="fstat-no" title="function not covered" >function(dom) {</span>
+<span class="cstat-no" title="statement not covered" >  if (dom.nodeType === 3) {</span>
+<span class="cstat-no" title="statement not covered" >    d</span>om = dom.nextElementSibling || dom.nextSibling;
+<span class="cstat-no" title="statement not covered" >    g</span>etDOM(dom);
+  }
+<span class="cstat-no" title="statement not covered" >  r</span>eturn dom;
+};
+&nbsp;
+export default <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
+  props: {
+    /**
+     * popup当前显示状态
+     */
+    value: {
+      type: Boolean,
+      default: false
+    },
+    /**
+     * 是否显示遮罩层
+     */
+    overlay: {
+      type: Boolean,
+      default: false
+    },
+    /**
+     * 点击遮罩层是否关闭popup
+     */
+    closeOnClickOverlay: {
+      type: Boolean,
+      default: false
+    },
+    zIndex: [String, Number],
+    /**
+     * popup滚动时是否body内容也滚动
+     * 默认为不滚动
+     */
+    lockOnScroll: {
+      type: Boolean,
+      default: true
+    }
+  },
+&nbsp;
+  watch: <span class="fstat-no" title="function not covered" >{</span>
+    value(val) {
+<span class="cstat-no" title="statement not covered" >      if (val) {</span>
+<span class="cstat-no" title="statement not covered" >        if (this.opening) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+<span class="cstat-no" title="statement not covered" >        t</span>his.open();
+      } else {
+<span class="cstat-no" title="statement not covered" >        if (this.closing) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+<span class="cstat-no" title="statement not covered" >        t</span>his.close();
+      }
+    }
+  },
+&nbsp;
+  beforeMount() {
+<span class="cstat-no" title="statement not covered" >    t</span>his._popupId = 'popup-' + idSeed++;
+<span class="cstat-no" title="statement not covered" >    P</span>opupManager.register(this._popupId, this);
+  },
+&nbsp;
+  data() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn {
+      opening: false,
+      opened: false,
+      closing: false,
+      bodyOverflow: null
+    };
+  },
+&nbsp;
+  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
+    /**
+     * 显示popup
+     */
+    open(options) {
+<span class="cstat-no" title="statement not covered" >      if (this.opened) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.opening = true;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', true);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      c</span>onst dom = getDOM(this.$el);
+<span class="cstat-no" title="statement not covered" >      c</span>onst props = merge({}, this, options);
+<span class="cstat-no" title="statement not covered" >      c</span>onst zIndex = props.zIndex;
+&nbsp;
+      // 如果属性中传入了`zIndex`,则覆盖`PopupManager`中对应的`zIndex`
+<span class="cstat-no" title="statement not covered" >      if (zIndex) {</span>
+<span class="cstat-no" title="statement not covered" >        P</span>opupManager.zIndex = zIndex;
+      }
+&nbsp;
+      // 如果显示遮罩层
+<span class="cstat-no" title="statement not covered" >      if (this.overlay) {</span>
+<span class="cstat-no" title="statement not covered" >        if (this.closing) {</span>
+<span class="cstat-no" title="statement not covered" >          P</span>opupManager.closeModal(this._popupId);
+<span class="cstat-no" title="statement not covered" >          t</span>his.closing = false;
+        }
+<span class="cstat-no" title="statement not covered" >        P</span>opupManager.openModal(this._popupId, PopupManager.nextZIndex(), dom);
+&nbsp;
+        // 如果滚动时需要锁定
+<span class="cstat-no" title="statement not covered" >        if (this.lockOnScroll) {</span>
+          // 将原来的`bodyOverflow`存起来
+<span class="cstat-no" title="statement not covered" >          if (!this.bodyOverflow) {</span>
+<span class="cstat-no" title="statement not covered" >            t</span>his.bodyOverflow = document.body.style.overflow;
+          }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >          d</span>ocument.body.style.overlay = 'hidden';
+        }
+      }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      d</span>om.style.zIndex = PopupManager.nextZIndex();
+<span class="cstat-no" title="statement not covered" >      t</span>his.opened = true;
+<span class="cstat-no" title="statement not covered" >      t</span>his.opening = false;
+    },
+&nbsp;
+    /**
+     * 关闭popup
+     */
+    close() <span class="cstat-no" title="statement not covered" >{</span>
+<span class="cstat-no" title="statement not covered" >      if (this.closing) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.closing = true;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', false);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      if (this.lockOnScroll) {</span>
+<span class="cstat-no" title="statement not covered" >        s</span>etTimeout(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >          if (this.modal &amp;&amp; this.bodyOverflow !== 'hidden') {</span>
+<span class="cstat-no" title="statement not covered" >            d</span>ocument.body.style.overflow = this.bodyOverflow;
+          }
+<span class="cstat-no" title="statement not covered" >          t</span>his.bodyOverflow = null;
+        }, 200);
+      }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >      t</span>his.opened = false;
+<span class="cstat-no" title="statement not covered" >      t</span>his.doAfterClose();
+    },
+&nbsp;
+    doAfterClose() {
+<span class="cstat-no" title="statement not covered" >      t</span>his.closing = false;
+<span class="cstat-no" title="statement not covered" >      P</span>opupManager.closeModal(this._popupId);
+    }
+  },
+&nbsp;
+  beforeDestroy() {
+<span class="cstat-no" title="statement not covered" >    P</span>opupManager.deregister(this._popupId);
+<span class="cstat-no" title="statement not covered" >    P</span>opupManager.closeModal(this._popupId);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (this.modal &amp;&amp; this.bodyOverflow !== null &amp;&amp; this.bodyOverflow !== 'hidden') {</span>
+<span class="cstat-no" title="statement not covered" >      d</span>ocument.body.style.overflow = this.bodyOverflow;
+    }
+<span class="cstat-no" title="statement not covered" >    t</span>his.bodyOverflow = null;
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/popup/popup-manager.js.html b/test/unit/coverage/lcov-report/src/mixins/popup/popup-manager.js.html
new file mode 100644
index 000000000..e93e50a36
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/mixins/popup/popup-manager.js.html
@@ -0,0 +1,464 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/mixins/popup/popup-manager.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">all files</a> / <a href="index.html">src/mixins/popup/</a> popup-manager.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10.29% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>7/68</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/43</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/11</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">9.38% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>6/64</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { addClass, removeClass } from 'src/utils/dom';
+&nbsp;
+let hasModal = false;
+&nbsp;
+const getModal = <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" >  l</span>et modalDom = PopupManager.modalDom;
+<span class="cstat-no" title="statement not covered" >  if (modalDom) {</span>
+<span class="cstat-no" title="statement not covered" >    h</span>asModal = true;
+  } else {
+<span class="cstat-no" title="statement not covered" >    h</span>asModal = false;
+<span class="cstat-no" title="statement not covered" >    m</span>odalDom = document.createElement('div');
+<span class="cstat-no" title="statement not covered" >    P</span>opupManager.modalDom = modalDom;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    m</span>odalDom.addEventListener('touchmove', <span class="fstat-no" title="function not covered" >function(event) {</span>
+<span class="cstat-no" title="statement not covered" >      e</span>vent.preventDefault();
+<span class="cstat-no" title="statement not covered" >      e</span>vent.stopPropagation();
+    });
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    m</span>odalDom.addEventListener('click', <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" >      P</span>opupManager.handleOverlayClick &amp;&amp; PopupManager.handleOverlayClick();
+    });
+  }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  r</span>eturn modalDom;
+};
+&nbsp;
+const instances = {};
+&nbsp;
+const PopupManager = <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span></span></span></span>
+  zIndex: 2000,
+&nbsp;
+  modalStack: [],
+&nbsp;
+  nextZIndex() {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn this.zIndex++;
+  },
+&nbsp;
+  getInstance(id) {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn instances[id];
+  },
+&nbsp;
+  register(id, instance) {
+<span class="cstat-no" title="statement not covered" >    if (id &amp;&amp; instance) {</span>
+<span class="cstat-no" title="statement not covered" >      i</span>nstances[id] = instance;
+    }
+  },
+&nbsp;
+  deregister(id) {
+<span class="cstat-no" title="statement not covered" >    if (id) {</span>
+<span class="cstat-no" title="statement not covered" >      i</span>nstances[id] = null;
+<span class="cstat-no" title="statement not covered" >      d</span>elete instances[id];
+    }
+  },
+&nbsp;
+  /**
+   * 遮罩层点击回调,`closeOnClickOverlay`为`true`时会关闭当前`popup`
+   */
+  handleOverlayClick() {
+<span class="cstat-no" title="statement not covered" >    c</span>onst topModal = PopupManager.modalStack[PopupManager.modalStack.length - 1];
+<span class="cstat-no" title="statement not covered" >    if (!topModal) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    c</span>onst instance = PopupManager.getInstance(topModal.id);
+<span class="cstat-no" title="statement not covered" >    if (instance &amp;&amp; instance.closeOnClickOverlay) {</span>
+<span class="cstat-no" title="statement not covered" >      i</span>nstance.close();
+    }
+  },
+&nbsp;
+  openModal(id, zIndex, dom) {
+<span class="cstat-no" title="statement not covered" >    if (!id || zIndex === undefined) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    c</span>onst modalStack = this.modalStack;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    for (let i = 0, len = modalStack.length; i &lt; len; i++) {</span>
+<span class="cstat-no" title="statement not covered" >      c</span>onst item = modalStack[i];
+<span class="cstat-no" title="statement not covered" >      if (item.id === id) {</span>
+<span class="cstat-no" title="statement not covered" >        r</span>eturn;
+      }
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    c</span>onst modalDom = getModal();
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    a</span>ddClass(modalDom, 'zan-modal');
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (dom &amp;&amp; dom.parentNode &amp;&amp; dom.parentNode.nodeType !== 11) {</span>
+<span class="cstat-no" title="statement not covered" >      d</span>om.parentNode.appendChild(modalDom);
+    } else {
+<span class="cstat-no" title="statement not covered" >      d</span>ocument.body.appendChild(modalDom);
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (zIndex) {</span>
+<span class="cstat-no" title="statement not covered" >      m</span>odalDom.style.zIndex = zIndex;
+    }
+<span class="cstat-no" title="statement not covered" >    m</span>odalDom.style.display = '';
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    t</span>his.modalStack.push({ id: id, zIndex: zIndex });
+  },
+&nbsp;
+  closeModal(id) <span class="cstat-no" title="statement not covered" >{</span>
+<span class="cstat-no" title="statement not covered" >    c</span>onst modalStack = this.modalStack;
+<span class="cstat-no" title="statement not covered" >    c</span>onst modalDom = getModal();
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (modalStack.length &gt; 0) {</span>
+<span class="cstat-no" title="statement not covered" >      c</span>onst topItem = modalStack[modalStack.length - 1];
+<span class="cstat-no" title="statement not covered" >      if (topItem.id === id) {</span>
+<span class="cstat-no" title="statement not covered" >        m</span>odalStack.pop();
+<span class="cstat-no" title="statement not covered" >        if (modalStack.length &gt; 0) {</span>
+<span class="cstat-no" title="statement not covered" >          m</span>odalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;
+        }
+      } else {
+<span class="cstat-no" title="statement not covered" >        for (let i = modalStack.length - 1; i &gt;= 0; i--) {</span>
+<span class="cstat-no" title="statement not covered" >          if (modalStack[i].id === id) {</span>
+<span class="cstat-no" title="statement not covered" >            m</span>odalStack.splice(i, 1);
+<span class="cstat-no" title="statement not covered" >            b</span>reak;
+          }
+        }
+      }
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (modalStack.length === 0) {</span>
+<span class="cstat-no" title="statement not covered" >      s</span>etTimeout(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >        if (modalStack.length === 0) {</span>
+<span class="cstat-no" title="statement not covered" >          if (modalDom.parentNode) <span class="cstat-no" title="statement not covered" >m</span></span>odalDom.parentNode.removeChild(modalDom);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >          m</span>odalDom.style.display = 'none';
+<span class="cstat-no" title="statement not covered" >          t</span>his.modalDom = null;
+        }
+      }, 200);
+    }
+  }
+};
+&nbsp;
+export default PopupManager;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/utils/dom.js.html b/test/unit/coverage/lcov-report/src/utils/dom.js.html
new file mode 100644
index 000000000..5783903b0
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/utils/dom.js.html
@@ -0,0 +1,239 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/utils/dom.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">src/utils/</a> dom.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">18.18% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>8/44</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/34</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">14.29% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>5/35</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const trim = <span class="fstat-no" title="function not covered" >function(string) {</span>
+<span class="cstat-no" title="statement not covered" >  r</span>eturn (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
+};
+&nbsp;
+export <span class="fstat-no" title="function not covered" >function hasClass(el, cls) {</span>
+<span class="cstat-no" title="statement not covered" >  if (!el || !cls) <span class="cstat-no" title="statement not covered" >r</span></span>eturn false;
+<span class="cstat-no" title="statement not covered" >  if (cls.indexOf(' ') !== -1) <span class="cstat-no" title="statement not covered" >t</span></span>hrow new Error('className should not contain space.');
+<span class="cstat-no" title="statement not covered" >  if (el.classList) {</span>
+<span class="cstat-no" title="statement not covered" >    r</span>eturn el.classList.contains(cls);
+  } else {
+<span class="cstat-no" title="statement not covered" >    r</span>eturn (' ' + el.className + ' ').indexOf(' ' + cls + ' ') &gt; -1;
+  }
+};
+&nbsp;
+export <span class="fstat-no" title="function not covered" >function addClass(el, cls) {</span>
+<span class="cstat-no" title="statement not covered" >  if (!el) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+<span class="cstat-no" title="statement not covered" >  v</span>ar curClass = el.className;
+<span class="cstat-no" title="statement not covered" >  v</span>ar classes = (cls || '').split(' ');
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  for (var i = 0, j = classes.length; i &lt; j; i++) {</span>
+<span class="cstat-no" title="statement not covered" >    v</span>ar clsName = classes[i];
+<span class="cstat-no" title="statement not covered" >    if (!clsName) <span class="cstat-no" title="statement not covered" >c</span></span>ontinue;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (el.classList) {</span>
+<span class="cstat-no" title="statement not covered" >      e</span>l.classList.add(clsName);
+    } else {
+<span class="cstat-no" title="statement not covered" >      if (!hasClass(el, clsName)) {</span>
+<span class="cstat-no" title="statement not covered" >        c</span>urClass += ' ' + clsName;
+      }
+    }
+  }
+<span class="cstat-no" title="statement not covered" >  if (!el.classList) {</span>
+<span class="cstat-no" title="statement not covered" >    e</span>l.className = curClass;
+  }
+};
+&nbsp;
+export <span class="fstat-no" title="function not covered" >function removeClass(el, cls) {</span>
+<span class="cstat-no" title="statement not covered" >  if (!el || !cls) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+<span class="cstat-no" title="statement not covered" >  v</span>ar classes = cls.split(' ');
+<span class="cstat-no" title="statement not covered" >  v</span>ar curClass = ' ' + el.className + ' ';
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  for (var i = 0, j = classes.length; i &lt; j; i++) {</span>
+<span class="cstat-no" title="statement not covered" >    v</span>ar clsName = classes[i];
+<span class="cstat-no" title="statement not covered" >    if (!clsName) <span class="cstat-no" title="statement not covered" >c</span></span>ontinue;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (el.classList) {</span>
+<span class="cstat-no" title="statement not covered" >      e</span>l.classList.remove(clsName);
+    } else {
+<span class="cstat-no" title="statement not covered" >      if (hasClass(el, clsName)) {</span>
+<span class="cstat-no" title="statement not covered" >        c</span>urClass = curClass.replace(' ' + clsName + ' ', ' ');
+      }
+    }
+  }
+<span class="cstat-no" title="statement not covered" >  if (!el.classList) {</span>
+<span class="cstat-no" title="statement not covered" >    e</span>l.className = trim(curClass);
+  }
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/utils/index.html b/test/unit/coverage/lcov-report/src/utils/index.html
new file mode 100644
index 000000000..310734535
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/utils/index.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/utils/</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> src/utils/
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">33.06% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>40/121</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">9.8% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>10/102</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">11.11% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/9</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">31.68% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>32/101</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file low" data-value="dom.js"><a href="dom.js.html">dom.js</a></td>
+	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
+	<td data-value="18.18" class="pct low">18.18%</td>
+	<td data-value="44" class="abs low">8/44</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="34" class="abs low">0/34</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="4" class="abs low">0/4</td>
+	<td data-value="14.29" class="pct low">14.29%</td>
+	<td data-value="35" class="abs low">5/35</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="merge.js"><a href="merge.js.html">merge.js</a></td>
+	<td data-value="16.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 16%;"></div><div class="cover-empty" style="width:84%;"></div></div></td>
+	<td data-value="16.67" class="pct low">16.67%</td>
+	<td data-value="12" class="abs low">2/12</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="6" class="abs low">0/6</td>
+	<td data-value="0" class="pct low">0%</td>
+	<td data-value="1" class="abs low">0/1</td>
+	<td data-value="10" class="pct low">10%</td>
+	<td data-value="10" class="abs low">1/10</td>
+	</tr>
+
+<tr>
+	<td class="file low" data-value="transition.js"><a href="transition.js.html">transition.js</a></td>
+	<td data-value="46.15" class="pic low"><div class="chart"><div class="cover-fill" style="width: 46%;"></div><div class="cover-empty" style="width:54%;"></div></div></td>
+	<td data-value="46.15" class="pct low">46.15%</td>
+	<td data-value="65" class="abs low">30/65</td>
+	<td data-value="16.13" class="pct low">16.13%</td>
+	<td data-value="62" class="abs low">10/62</td>
+	<td data-value="25" class="pct low">25%</td>
+	<td data-value="4" class="abs low">1/4</td>
+	<td data-value="46.43" class="pct low">46.43%</td>
+	<td data-value="56" class="abs low">26/56</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/utils/merge.js.html b/test/unit/coverage/lcov-report/src/utils/merge.js.html
new file mode 100644
index 000000000..e9136ebb7
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/utils/merge.js.html
@@ -0,0 +1,113 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/utils/merge.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">src/utils/</a> merge.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.67% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>2/12</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">10% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>1/10</span>
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17</td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default <span class="fstat-no" title="function not covered" >function(target, ...<span class="cstat-no" title="statement not covered" >sources) <span class="cstat-no" title="statement not covered" >{</span></span></span>
+<span class="cstat-no" title="statement not covered" >  for (let i = 0; i &lt; sources.length; i++) {</span>
+<span class="cstat-no" title="statement not covered" >    l</span>et source = sources[i] || {};
+<span class="cstat-no" title="statement not covered" >    for (let prop in source) {</span>
+<span class="cstat-no" title="statement not covered" >      if (source.hasOwnProperty(prop)) {</span>
+<span class="cstat-no" title="statement not covered" >        l</span>et value = source[prop];
+<span class="cstat-no" title="statement not covered" >        if (value !== undefined) {</span>
+<span class="cstat-no" title="statement not covered" >          t</span>arget[prop] = value;
+        }
+      }
+    }
+  }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >  r</span>eturn target;
+};
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov-report/src/utils/transition.js.html b/test/unit/coverage/lcov-report/src/utils/transition.js.html
new file mode 100644
index 000000000..6e3ec62af
--- /dev/null
+++ b/test/unit/coverage/lcov-report/src/utils/transition.js.html
@@ -0,0 +1,372 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for src/utils/transition.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">all files</a> / <a href="index.html">src/utils/</a> transition.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">46.15% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>30/65</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">16.13% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>10/62</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">25% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">46.43% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>26/56</span>
+      </div>
+      <div class='fl pad1y'>
+        <span class="strong">1 branch</span>
+        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
+      </div>
+    </div>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1×</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Vue from 'vue';
+&nbsp;
+var exportObj = {};
+&nbsp;
+<span class="missing-if-branch" title="else path not taken" >E</span>if (!Vue.prototype.$isServer) {
+  var docStyle = document.documentElement.style;
+  var engine;
+  var translate3d = false;
+&nbsp;
+  <span class="missing-if-branch" title="if path not taken" >I</span>i</span>f (window.opera &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >Object.prototype.toString.call(window.opera) === '[object Opera]') {
+<span class="cstat-no" title="statement not covered" >    e</span>ngine = 'presto';
+  } else <span class="missing-if-branch" title="if path not taken" >I</span>if ('MozAppearance' in docStyle) {
+<span class="cstat-no" title="statement not covered" >    e</span>ngine = 'gecko';
+  } else <span class="missing-if-branch" title="else path not taken" >E</span>if ('WebkitAppearance' in docStyle) {
+    engine = 'webkit';
+  } else <span class="cstat-no" title="statement not covered" >if (typeof navigator.cpuClass === 'string') {</span>
+<span class="cstat-no" title="statement not covered" >    e</span>ngine = 'trident';
+  }
+&nbsp;
+  var cssPrefix = {trident: '-ms-', gecko: '-moz-', webkit: '-webkit-', presto: '-o-'}[engine];
+&nbsp;
+  var vendorPrefix = {trident: 'ms', gecko: 'Moz', webkit: 'Webkit', presto: 'O'}[engine];
+&nbsp;
+  var helperElem = document.createElement('div');
+  var perspectiveProperty = vendorPrefix + 'Perspective';
+  var transformProperty = vendorPrefix + 'Transform';
+  var transformStyleName = cssPrefix + 'transform';
+  var transitionProperty = vendorPrefix + 'Transition';
+  var transitionStyleName = cssPrefix + 'transition';
+  var transitionEndProperty = vendorPrefix.toLowerCase() + 'TransitionEnd';
+&nbsp;
+  <span class="missing-if-branch" title="else path not taken" >E</span>if (helperElem.style[perspectiveProperty] !== undefined) {
+    translate3d = true;
+  }
+&nbsp;
+  var getTranslate = <span class="fstat-no" title="function not covered" >function(element) {</span>
+<span class="cstat-no" title="statement not covered" >    v</span>ar result = {left: 0, top: 0};
+<span class="cstat-no" title="statement not covered" >    if (element === null || element.style === null) <span class="cstat-no" title="statement not covered" >r</span></span>eturn result;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    v</span>ar transform = element.style[transformProperty];
+<span class="cstat-no" title="statement not covered" >    v</span>ar matches = /translate\(\s*(-?\d+(\.?\d+?)?)px,\s*(-?\d+(\.\d+)?)px\)\s*translateZ\(0px\)/ig.exec(transform);
+<span class="cstat-no" title="statement not covered" >    if (matches) {</span>
+<span class="cstat-no" title="statement not covered" >      r</span>esult.left = +matches[1];
+<span class="cstat-no" title="statement not covered" >      r</span>esult.top = +matches[3];
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    r</span>eturn result;
+  };
+&nbsp;
+  var translateElement = <span class="fstat-no" title="function not covered" >function(element, x, y) {</span>
+<span class="cstat-no" title="statement not covered" >    if (x === null &amp;&amp; y === null) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (element === null || element === undefined || element.style === null) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (!element.style[transformProperty] &amp;&amp; x === 0 &amp;&amp; y === 0) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (x === null || y === null) {</span>
+<span class="cstat-no" title="statement not covered" >      v</span>ar translate = getTranslate(element);
+<span class="cstat-no" title="statement not covered" >      if (x === null) {</span>
+<span class="cstat-no" title="statement not covered" >        x</span> = translate.left;
+      }
+<span class="cstat-no" title="statement not covered" >      if (y === null) {</span>
+<span class="cstat-no" title="statement not covered" >        y</span> = translate.top;
+      }
+    }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    c</span>ancelTranslateElement(element);
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (translate3d) {</span>
+<span class="cstat-no" title="statement not covered" >      e</span>lement.style[transformProperty] += ' translate(' + (x ? (x + 'px') : '0px') + ',' + (y ? (y + 'px') : '0px') + ') translateZ(0px)';
+    } else {
+<span class="cstat-no" title="statement not covered" >      e</span>lement.style[transformProperty] += ' translate(' + (x ? (x + 'px') : '0px') + ',' + (y ? (y + 'px') : '0px') + ')';
+    }
+  };
+&nbsp;
+  var cancelTranslateElement = <span class="fstat-no" title="function not covered" >function(element) {</span>
+<span class="cstat-no" title="statement not covered" >    if (element === null || element.style === null) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    v</span>ar transformValue = element.style[transformProperty];
+&nbsp;
+<span class="cstat-no" title="statement not covered" >    if (transformValue) {</span>
+<span class="cstat-no" title="statement not covered" >      t</span>ransformValue = transformValue.replace(/translate\(\s*(-?\d+(\.?\d+?)?)px,\s*(-?\d+(\.\d+)?)px\)\s*translateZ\(0px\)/g, '');
+<span class="cstat-no" title="statement not covered" >      e</span>lement.style[transformProperty] = transformValue;
+    }
+  };
+&nbsp;
+  exportObj = {
+    transformProperty: transformProperty,
+    transformStyleName: transformStyleName,
+    transitionProperty: transitionProperty,
+    transitionStyleName: transitionStyleName,
+    transitionEndProperty: transitionEndProperty,
+    getElementTranslate: getTranslate,
+    translateElement: translateElement,
+    cancelTranslateElement: cancelTranslateElement
+  };
+};
+&nbsp;
+export default exportObj;
+&nbsp;
+&nbsp;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+</body>
+</html>
diff --git a/test/unit/coverage/lcov.info b/test/unit/coverage/lcov.info
new file mode 100644
index 000000000..9a4d7f086
--- /dev/null
+++ b/test/unit/coverage/lcov.info
@@ -0,0 +1,2065 @@
+TN:
+SF:/Users/chenyao/youzan/oxygen/src/index.js
+FN:91,_interopRequireDefault
+FN:93,install
+FNF:2
+FNH:1
+FNDA:22,_interopRequireDefault
+FNDA:0,install
+DA:0,22
+DA:1,1
+DA:2,1
+DA:3,1
+DA:4,1
+DA:5,1
+DA:6,1
+DA:7,1
+DA:8,1
+DA:9,1
+DA:10,1
+DA:11,1
+DA:12,1
+DA:13,1
+DA:14,1
+DA:15,1
+DA:16,1
+DA:17,1
+DA:18,1
+DA:19,1
+DA:20,1
+DA:21,1
+DA:22,1
+DA:24,1
+DA:25,0
+DA:27,0
+DA:28,0
+DA:29,0
+DA:30,0
+DA:31,0
+DA:32,0
+DA:33,0
+DA:34,0
+DA:35,0
+DA:36,0
+DA:37,0
+DA:38,0
+DA:39,0
+DA:40,0
+DA:41,0
+DA:42,0
+DA:43,0
+DA:44,0
+DA:45,0
+DA:46,0
+DA:50,1
+DA:51,0
+DA:54,1
+LF:48
+LH:26
+BRDA:91,1,0,22
+BRDA:91,1,1,0
+BRDA:91,2,0,22
+BRDA:91,2,1,22
+BRDA:94,3,0,0
+BRDA:94,3,1,0
+BRDA:119,4,0,0
+BRDA:119,4,1,1
+BRDA:119,5,0,1
+BRDA:119,5,1,1
+BRF:10
+BRH:7
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/button/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,1
+BRDA:11,1,1,0
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/button/src/button.js
+FN:37,validator
+FN:44,validator
+FN:51,handleClick
+FN:56,render
+FNF:4
+FNH:0
+FNDA:0,validator
+FNDA:0,validator
+FNDA:0,handleClick
+FNDA:0,render
+DA:0,1
+DA:14,1
+DA:15,1
+DA:33,0
+DA:40,0
+DA:47,0
+DA:51,0
+DA:53,0
+DA:55,0
+LF:9
+LH:3
+BRDA:82,1,0,0
+BRDA:82,1,1,0
+BRF:2
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/switch/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/switch/src/switch.vue
+FN:44,_default
+FN:48,switchState
+FN:61,toggleState
+FNF:3
+FNH:0
+FNDA:0,_default
+FNDA:0,switchState
+FNDA:0,toggleState
+DA:0,1
+DA:44,0
+DA:46,0
+DA:47,0
+DA:49,0
+DA:57,0
+DA:58,0
+LF:7
+LH:1
+BRDA:49,1,0,0
+BRDA:49,1,1,0
+BRDA:51,2,0,0
+BRDA:51,2,1,0
+BRDA:52,3,0,0
+BRDA:52,3,1,0
+BRDA:62,4,0,0
+BRDA:62,4,1,0
+BRDA:62,5,0,0
+BRDA:62,5,1,0
+BRF:10
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/field/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/field/src/field.vue
+FN:11,_interopRequireDefault
+FN:33,data
+FN:41,value
+FN:44,currentValue
+FN:51,handleInput
+FNF:5
+FNH:1
+FNDA:1,_interopRequireDefault
+FNDA:0,data
+FNDA:0,value
+FNDA:0,currentValue
+FNDA:0,handleInput
+DA:0,1
+DA:34,1
+DA:57,0
+DA:64,0
+DA:68,0
+DA:69,0
+DA:75,0
+LF:7
+LH:2
+BRDA:11,1,0,1
+BRDA:11,1,1,0
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/cell/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/cell/src/cell.vue
+FN:43,handleClick
+FNF:1
+FNH:0
+FNDA:0,handleClick
+DA:0,1
+DA:39,0
+LF:2
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/radio/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/radio/src/radio.vue
+FN:11,_interopRequireDefault
+FN:25,isGroup
+FN:31,get
+FN:34,set
+FN:43,isDisabled
+FNF:5
+FNH:1
+FNDA:1,_interopRequireDefault
+FNDA:0,isGroup
+FNDA:0,get
+FNDA:0,set
+FNDA:0,isDisabled
+DA:0,1
+DA:27,1
+DA:42,0
+DA:47,0
+DA:51,0
+DA:52,0
+DA:54,0
+DA:60,0
+LF:8
+LH:2
+BRDA:11,1,0,1
+BRDA:11,1,1,0
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRDA:32,3,0,0
+BRDA:32,3,1,0
+BRDA:32,4,0,0
+BRDA:32,4,1,0
+BRDA:35,5,0,0
+BRDA:35,5,1,0
+BRDA:35,6,0,0
+BRDA:35,6,1,0
+BRDA:44,7,0,0
+BRDA:44,7,1,0
+BRDA:44,8,0,0
+BRDA:44,8,1,0
+BRDA:44,9,0,0
+BRDA:44,9,1,0
+BRF:18
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/src/mixins/findParent.js
+FN:11,findParentByComponentName
+FNF:1
+FNH:0
+FNDA:0,findParentByComponentName
+DA:0,1
+DA:7,0
+DA:9,0
+DA:10,0
+DA:11,0
+DA:12,0
+DA:13,0
+DA:15,0
+DA:19,0
+LF:9
+LH:1
+BRDA:12,1,0,0
+BRDA:12,1,1,0
+BRDA:16,2,0,0
+BRDA:16,2,1,0
+BRF:4
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/icon/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/icon/src/icon.vue
+FNF:0
+FNH:0
+DA:0,1
+LF:1
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/cell-group/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/cell/src/cell-group.vue
+FNF:0
+FNH:0
+DA:0,1
+LF:1
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/popup/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/popup/src/popup.vue
+FN:11,_interopRequireDefault
+FN:42,data
+FN:51,currentValue
+FN:54,value
+FN:59,beforeMount
+FN:64,mounted
+FNF:6
+FNH:1
+FNDA:1,_interopRequireDefault
+FNDA:0,data
+FNDA:0,currentValue
+FNDA:0,value
+FNDA:0,beforeMount
+FNDA:0,mounted
+DA:0,1
+DA:10,1
+DA:42,0
+DA:50,0
+DA:54,0
+DA:59,0
+DA:60,0
+DA:65,0
+DA:66,0
+DA:67,0
+LF:10
+LH:2
+BRDA:11,1,0,1
+BRDA:11,1,1,0
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRDA:60,3,0,0
+BRDA:60,3,1,0
+BRDA:65,4,0,0
+BRDA:65,4,1,0
+BRF:8
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/src/mixins/popup/index.js
+FN:19,_interopRequireDefault
+FN:23,getDOM
+FN:66,value
+FN:77,beforeMount
+FN:81,data
+FN:95,open
+FN:139,close
+FN:149,(anonymous_8)
+FN:160,doAfterClose
+FN:166,beforeDestroy
+FNF:10
+FNH:1
+FNDA:3,_interopRequireDefault
+FNDA:0,getDOM
+FNDA:0,value
+FNDA:0,beforeMount
+FNDA:0,data
+FNDA:0,open
+FNDA:0,close
+FNDA:0,(anonymous_8)
+FNDA:0,doAfterClose
+FNDA:0,beforeDestroy
+DA:0,3
+DA:1,1
+DA:2,1
+DA:3,1
+DA:5,1
+DA:7,1
+DA:8,0
+DA:9,0
+DA:10,0
+DA:12,0
+DA:51,0
+DA:52,0
+DA:53,0
+DA:55,0
+DA:56,0
+DA:62,0
+DA:63,0
+DA:67,0
+DA:80,0
+DA:82,0
+DA:84,0
+DA:86,0
+DA:87,0
+DA:88,0
+DA:91,0
+DA:92,0
+DA:96,0
+DA:97,0
+DA:98,0
+DA:99,0
+DA:101,0
+DA:104,0
+DA:106,0
+DA:107,0
+DA:110,0
+DA:114,0
+DA:115,0
+DA:116,0
+DA:122,0
+DA:123,0
+DA:125,0
+DA:127,0
+DA:129,0
+DA:130,0
+DA:131,0
+DA:132,0
+DA:134,0
+DA:138,0
+DA:139,0
+DA:143,0
+DA:144,0
+DA:149,0
+DA:150,0
+DA:152,0
+DA:153,0
+DA:155,0
+LF:56
+LH:6
+BRDA:19,1,0,2
+BRDA:19,1,1,1
+BRDA:19,2,0,3
+BRDA:19,2,1,3
+BRDA:24,3,0,0
+BRDA:24,3,1,0
+BRDA:25,4,0,0
+BRDA:25,4,1,0
+BRDA:67,5,0,0
+BRDA:67,5,1,0
+BRDA:68,6,0,0
+BRDA:68,6,1,0
+BRDA:71,7,0,0
+BRDA:71,7,1,0
+BRDA:96,8,0,0
+BRDA:96,8,1,0
+BRDA:107,9,0,0
+BRDA:107,9,1,0
+BRDA:112,10,0,0
+BRDA:112,10,1,0
+BRDA:113,11,0,0
+BRDA:113,11,1,0
+BRDA:120,12,0,0
+BRDA:120,12,1,0
+BRDA:122,13,0,0
+BRDA:122,13,1,0
+BRDA:142,14,0,0
+BRDA:142,14,1,0
+BRDA:148,15,0,0
+BRDA:148,15,1,0
+BRDA:150,16,0,0
+BRDA:150,16,1,0
+BRDA:150,17,0,0
+BRDA:150,17,1,0
+BRDA:170,18,0,0
+BRDA:170,18,1,0
+BRDA:170,19,0,0
+BRDA:170,19,1,0
+BRDA:170,19,2,0
+BRF:39
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/src/utils/merge.js
+FN:7,(anonymous_1)
+FNF:1
+FNH:0
+FNDA:0,(anonymous_1)
+DA:0,1
+DA:1,0
+DA:2,0
+DA:3,0
+DA:4,0
+DA:5,0
+DA:6,0
+DA:7,0
+DA:8,0
+DA:14,0
+LF:10
+LH:1
+BRDA:13,1,0,0
+BRDA:13,1,1,0
+BRDA:15,2,0,0
+BRDA:15,2,1,0
+BRDA:17,3,0,0
+BRDA:17,3,1,0
+BRF:6
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/src/mixins/popup/popup-manager.js
+FN:11,getModal
+FN:20,(anonymous_2)
+FN:25,(anonymous_3)
+FN:40,nextZIndex
+FN:43,getInstance
+FN:46,register
+FN:51,deregister
+FN:62,handleOverlayClick
+FN:71,openModal
+FN:100,closeModal
+FN:124,(anonymous_11)
+FNF:11
+FNH:0
+FNDA:0,getModal
+FNDA:0,(anonymous_2)
+FNDA:0,(anonymous_3)
+FNDA:0,nextZIndex
+FNDA:0,getInstance
+FNDA:0,register
+FNDA:0,deregister
+FNDA:0,handleOverlayClick
+FNDA:0,openModal
+FNDA:0,closeModal
+FNDA:0,(anonymous_11)
+DA:0,1
+DA:1,1
+DA:3,1
+DA:5,1
+DA:6,0
+DA:7,0
+DA:8,0
+DA:10,0
+DA:11,0
+DA:12,0
+DA:14,0
+DA:15,0
+DA:16,0
+DA:19,0
+DA:20,0
+DA:24,0
+DA:27,1
+DA:29,1
+DA:35,0
+DA:39,0
+DA:43,0
+DA:44,0
+DA:49,0
+DA:50,0
+DA:51,0
+DA:59,0
+DA:60,0
+DA:62,0
+DA:63,0
+DA:64,0
+DA:69,0
+DA:71,0
+DA:73,0
+DA:74,0
+DA:75,0
+DA:76,0
+DA:80,0
+DA:82,0
+DA:84,0
+DA:85,0
+DA:87,0
+DA:90,0
+DA:91,0
+DA:93,0
+DA:95,0
+DA:98,0
+DA:99,0
+DA:100,0
+DA:102,0
+DA:103,0
+DA:104,0
+DA:105,0
+DA:106,0
+DA:107,0
+DA:110,0
+DA:111,0
+DA:112,0
+DA:113,0
+DA:119,0
+DA:120,0
+DA:121,0
+DA:122,0
+DA:124,0
+DA:125,0
+LF:64
+LH:6
+BRDA:13,1,0,0
+BRDA:13,1,1,0
+BRDA:26,2,0,0
+BRDA:26,2,1,0
+BRDA:47,3,0,0
+BRDA:47,3,1,0
+BRDA:47,4,0,0
+BRDA:47,4,1,0
+BRDA:52,5,0,0
+BRDA:52,5,1,0
+BRDA:64,6,0,0
+BRDA:64,6,1,0
+BRDA:67,7,0,0
+BRDA:67,7,1,0
+BRDA:67,8,0,0
+BRDA:67,8,1,0
+BRDA:72,9,0,0
+BRDA:72,9,1,0
+BRDA:72,10,0,0
+BRDA:72,10,1,0
+BRDA:78,11,0,0
+BRDA:78,11,1,0
+BRDA:87,12,0,0
+BRDA:87,12,1,0
+BRDA:87,13,0,0
+BRDA:87,13,1,0
+BRDA:87,13,2,0
+BRDA:93,14,0,0
+BRDA:93,14,1,0
+BRDA:106,15,0,0
+BRDA:106,15,1,0
+BRDA:108,16,0,0
+BRDA:108,16,1,0
+BRDA:110,17,0,0
+BRDA:110,17,1,0
+BRDA:115,18,0,0
+BRDA:115,18,1,0
+BRDA:123,19,0,0
+BRDA:123,19,1,0
+BRDA:125,20,0,0
+BRDA:125,20,1,0
+BRDA:126,21,0,0
+BRDA:126,21,1,0
+BRF:43
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/src/utils/dom.js
+FN:9,trim
+FN:13,hasClass
+FN:23,addClass
+FN:45,removeClass
+FNF:4
+FNH:0
+FNDA:0,trim
+FNDA:0,hasClass
+FNDA:0,addClass
+FNDA:0,removeClass
+DA:0,1
+DA:1,1
+DA:2,0
+DA:5,1
+DA:6,0
+DA:7,0
+DA:8,0
+DA:9,0
+DA:11,0
+DA:15,1
+DA:16,0
+DA:17,0
+DA:18,0
+DA:20,0
+DA:21,0
+DA:22,0
+DA:24,0
+DA:25,0
+DA:27,0
+DA:28,0
+DA:32,0
+DA:33,0
+DA:37,1
+DA:38,0
+DA:39,0
+DA:40,0
+DA:42,0
+DA:43,0
+DA:44,0
+DA:46,0
+DA:47,0
+DA:49,0
+DA:50,0
+DA:54,0
+DA:55,0
+LF:35
+LH:5
+BRDA:10,1,0,0
+BRDA:10,1,1,0
+BRDA:14,2,0,0
+BRDA:14,2,1,0
+BRDA:14,3,0,0
+BRDA:14,3,1,0
+BRDA:15,4,0,0
+BRDA:15,4,1,0
+BRDA:16,5,0,0
+BRDA:16,5,1,0
+BRDA:24,6,0,0
+BRDA:24,6,1,0
+BRDA:26,7,0,0
+BRDA:26,7,1,0
+BRDA:30,8,0,0
+BRDA:30,8,1,0
+BRDA:32,9,0,0
+BRDA:32,9,1,0
+BRDA:35,10,0,0
+BRDA:35,10,1,0
+BRDA:40,11,0,0
+BRDA:40,11,1,0
+BRDA:46,12,0,0
+BRDA:46,12,1,0
+BRDA:46,13,0,0
+BRDA:46,13,1,0
+BRDA:52,14,0,0
+BRDA:52,14,1,0
+BRDA:54,15,0,0
+BRDA:54,15,1,0
+BRDA:57,16,0,0
+BRDA:57,16,1,0
+BRDA:62,17,0,0
+BRDA:62,17,1,0
+BRF:34
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/dialog/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,1
+BRDA:11,1,1,0
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/dialog/src/dialog.js
+FN:23,_interopRequireDefault
+FN:31,defaultCallback
+FN:47,initInstance
+FN:55,showNextDialog
+FN:77,(anonymous_5)
+FN:83,DialogBox
+FN:84,(anonymous_7)
+FN:97,(anonymous_8)
+FN:105,(anonymous_9)
+FN:113,(anonymous_10)
+FNF:10
+FNH:1
+FNDA:4,_interopRequireDefault
+FNDA:0,defaultCallback
+FNDA:0,initInstance
+FNDA:0,showNextDialog
+FNDA:0,(anonymous_5)
+FNDA:0,DialogBox
+FNDA:0,(anonymous_7)
+FNDA:0,(anonymous_8)
+FNDA:0,(anonymous_9)
+FNDA:0,(anonymous_10)
+DA:0,4
+DA:1,1
+DA:2,1
+DA:3,1
+DA:5,1
+DA:7,1
+DA:8,1
+DA:9,1
+DA:11,1
+DA:12,0
+DA:13,0
+DA:15,0
+DA:16,0
+DA:19,0
+DA:20,0
+DA:21,0
+DA:22,0
+DA:27,1
+DA:28,0
+DA:32,0
+DA:35,1
+DA:36,0
+DA:37,0
+DA:40,0
+DA:41,0
+DA:43,0
+DA:45,0
+DA:46,0
+DA:47,0
+DA:51,0
+DA:52,0
+DA:55,0
+DA:57,0
+DA:58,0
+DA:63,1
+DA:64,0
+DA:65,0
+DA:72,0
+DA:76,1
+DA:77,0
+DA:84,1
+DA:85,0
+DA:92,1
+DA:93,0
+DA:94,0
+DA:95,0
+LF:46
+LH:15
+BRDA:23,1,0,2
+BRDA:23,1,1,2
+BRDA:23,2,0,4
+BRDA:23,2,1,4
+BRDA:32,3,0,0
+BRDA:32,3,1,0
+BRDA:35,4,0,0
+BRDA:35,4,1,0
+BRDA:39,5,0,0
+BRDA:39,5,1,0
+BRDA:39,6,0,0
+BRDA:39,6,1,0
+BRDA:41,7,0,0
+BRDA:41,7,1,0
+BRDA:41,8,0,0
+BRDA:41,8,1,0
+BRDA:56,9,0,0
+BRDA:56,9,1,0
+BRDA:60,10,0,0
+BRDA:60,10,1,0
+BRDA:60,11,0,0
+BRDA:60,11,1,0
+BRDA:66,12,0,0
+BRDA:66,12,1,0
+BRDA:71,13,0,0
+BRDA:71,13,1,0
+BRF:26
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/dialog/src/dialog.vue
+FN:11,_interopRequireDefault
+FN:52,data
+FN:67,handleAction
+FN:71,close
+FN:81,(anonymous_5)
+FNF:5
+FNH:1
+FNDA:1,_interopRequireDefault
+FNDA:0,data
+FNDA:0,handleAction
+FNDA:0,close
+FNDA:0,(anonymous_5)
+DA:0,1
+DA:21,1
+DA:24,1
+DA:44,0
+DA:58,0
+DA:59,0
+DA:62,0
+DA:63,0
+DA:65,0
+DA:67,0
+DA:69,0
+DA:70,0
+DA:71,0
+DA:72,0
+DA:73,0
+DA:75,0
+DA:76,0
+DA:80,0
+DA:81,0
+LF:19
+LH:3
+BRDA:11,1,0,1
+BRDA:11,1,1,0
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRDA:69,3,0,0
+BRDA:69,3,1,0
+BRDA:74,4,0,0
+BRDA:74,4,1,0
+BRDA:80,5,0,0
+BRDA:80,5,1,0
+BRDA:82,6,0,0
+BRDA:82,6,1,0
+BRDA:82,7,0,0
+BRDA:82,7,1,0
+BRF:14
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/picker/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/picker/src/picker.vue
+FN:11,_interopRequireDefault
+FN:62,_default
+FN:76,values
+FN:80,(anonymous_4)
+FN:92,columnValueChange
+FN:100,getColumn
+FN:101,(anonymous_7)
+FN:111,getColumnValue
+FN:120,setColumnValue
+FN:131,getColumnValues
+FN:140,setColumnValues
+FN:151,getValues
+FN:159,setValues
+FN:162,(anonymous_14)
+FNF:14
+FNH:1
+FNDA:1,_interopRequireDefault
+FNDA:0,_default
+FNDA:0,values
+FNDA:0,(anonymous_4)
+FNDA:0,columnValueChange
+FNDA:0,getColumn
+FNDA:0,(anonymous_7)
+FNDA:0,getColumnValue
+FNDA:0,setColumnValue
+FNDA:0,getColumnValues
+FNDA:0,setColumnValues
+FNDA:0,getValues
+FNDA:0,setValues
+FNDA:0,(anonymous_14)
+DA:0,1
+DA:23,1
+DA:55,0
+DA:69,0
+DA:70,0
+DA:72,0
+DA:73,0
+DA:76,0
+DA:85,0
+DA:92,0
+DA:93,0
+DA:100,0
+DA:101,0
+DA:108,0
+DA:109,0
+DA:110,0
+DA:118,0
+DA:119,0
+DA:126,0
+DA:127,0
+DA:128,0
+DA:136,0
+DA:142,0
+DA:143,0
+DA:144,0
+LF:25
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRDA:77,3,0,0
+BRDA:77,3,1,0
+BRDA:81,4,0,0
+BRDA:81,4,1,0
+BRDA:81,5,0,0
+BRDA:81,5,1,0
+BRDA:113,6,0,0
+BRDA:113,6,1,0
+BRDA:122,7,0,0
+BRDA:122,7,1,0
+BRDA:133,8,0,0
+BRDA:133,8,1,0
+BRDA:142,9,0,0
+BRDA:142,9,1,0
+BRF:18
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/picker/src/picker-column.vue
+FN:15,_interopRequireDefault
+FN:50,_default
+FN:71,data
+FN:81,values
+FN:84,currentValues
+FN:89,currentValue
+FN:100,visibleContentHeight
+FN:108,valueIndex
+FN:116,dragRange
+FN:128,classNames
+FN:133,mounted
+FN:143,value2Translate
+FN:158,translate2Value
+FN:171,initEvents
+FN:182,start
+FN:194,drag
+FN:210,end
+FN:225,(anonymous_18)
+FN:252,doOnValueChange
+FNF:19
+FNH:1
+FNDA:2,_interopRequireDefault
+FNDA:0,_default
+FNDA:0,data
+FNDA:0,values
+FNDA:0,currentValues
+FNDA:0,currentValue
+FNDA:0,visibleContentHeight
+FNDA:0,valueIndex
+FNDA:0,dragRange
+FNDA:0,classNames
+FNDA:0,mounted
+FNDA:0,value2Translate
+FNDA:0,translate2Value
+FNDA:0,initEvents
+FNDA:0,start
+FNDA:0,drag
+FNDA:0,end
+FNDA:0,(anonymous_18)
+FNDA:0,doOnValueChange
+DA:0,2
+DA:16,1
+DA:17,1
+DA:19,1
+DA:38,0
+DA:59,0
+DA:68,0
+DA:72,0
+DA:73,0
+DA:78,0
+DA:80,0
+DA:89,0
+DA:96,0
+DA:103,0
+DA:104,0
+DA:105,0
+DA:107,0
+DA:114,0
+DA:119,0
+DA:120,0
+DA:128,0
+DA:129,0
+DA:130,0
+DA:131,0
+DA:133,0
+DA:134,0
+DA:142,0
+DA:143,0
+DA:145,0
+DA:147,0
+DA:153,0
+DA:154,0
+DA:155,0
+DA:157,0
+DA:158,0
+DA:159,0
+DA:161,0
+DA:164,0
+DA:171,0
+DA:175,0
+DA:177,0
+DA:178,0
+DA:180,0
+DA:181,0
+DA:183,0
+DA:185,0
+DA:187,0
+DA:191,0
+DA:192,0
+DA:194,0
+DA:195,0
+DA:196,0
+DA:198,0
+DA:199,0
+DA:200,0
+DA:203,0
+DA:205,0
+DA:206,0
+DA:207,0
+DA:209,0
+DA:210,0
+DA:212,0
+DA:215,0
+DA:217,0
+DA:219,0
+DA:223,0
+DA:232,0
+DA:233,0
+DA:235,0
+DA:237,0
+LF:70
+LH:4
+BRDA:15,1,0,2
+BRDA:15,1,1,0
+BRDA:15,2,0,2
+BRDA:15,2,1,2
+BRDA:85,3,0,0
+BRDA:85,3,1,0
+BRDA:86,4,0,0
+BRDA:86,4,1,0
+BRDA:149,5,0,0
+BRDA:149,5,1,0
+BRDA:205,6,0,0
+BRDA:205,6,1,0
+BRDA:211,7,0,0
+BRDA:211,7,1,0
+BRDA:219,8,0,0
+BRDA:219,8,1,0
+BRDA:229,9,0,0
+BRDA:229,9,1,0
+BRF:18
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/src/utils/transition.js
+FN:11,_interopRequireDefault
+FN:46,getTranslate
+FN:60,translateElement
+FN:86,cancelTranslateElement
+FNF:4
+FNH:1
+FNDA:1,_interopRequireDefault
+FNDA:0,getTranslate
+FNDA:0,translateElement
+FNDA:0,cancelTranslateElement
+DA:0,1
+DA:1,1
+DA:3,1
+DA:5,1
+DA:6,1
+DA:7,1
+DA:8,1
+DA:10,1
+DA:11,0
+DA:12,1
+DA:13,0
+DA:14,1
+DA:15,1
+DA:16,0
+DA:17,0
+DA:20,1
+DA:22,1
+DA:24,1
+DA:25,1
+DA:26,1
+DA:27,1
+DA:28,1
+DA:29,1
+DA:30,1
+DA:32,1
+DA:33,1
+DA:36,1
+DA:37,0
+DA:38,0
+DA:40,0
+DA:41,0
+DA:42,0
+DA:43,0
+DA:44,0
+DA:47,0
+DA:50,1
+DA:51,0
+DA:53,0
+DA:55,0
+DA:57,0
+DA:58,0
+DA:59,0
+DA:60,0
+DA:62,0
+DA:63,0
+DA:67,0
+DA:69,0
+DA:70,0
+DA:72,0
+DA:76,1
+DA:77,0
+DA:79,0
+DA:81,0
+DA:82,0
+DA:83,0
+DA:87,1
+LF:56
+LH:26
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRDA:15,3,0,1
+BRDA:15,3,1,0
+BRDA:20,4,0,0
+BRDA:20,4,1,1
+BRDA:20,5,0,1
+BRDA:20,5,1,0
+BRDA:22,6,0,0
+BRDA:22,6,1,1
+BRDA:24,7,0,1
+BRDA:24,7,1,0
+BRDA:26,8,0,0
+BRDA:26,8,1,0
+BRDA:42,9,0,1
+BRDA:42,9,1,0
+BRDA:48,10,0,0
+BRDA:48,10,1,0
+BRDA:48,11,0,0
+BRDA:48,11,1,0
+BRDA:52,12,0,0
+BRDA:52,12,1,0
+BRDA:61,13,0,0
+BRDA:61,13,1,0
+BRDA:61,14,0,0
+BRDA:61,14,1,0
+BRDA:63,15,0,0
+BRDA:63,15,1,0
+BRDA:63,16,0,0
+BRDA:63,16,1,0
+BRDA:63,16,2,0
+BRDA:65,17,0,0
+BRDA:65,17,1,0
+BRDA:65,18,0,0
+BRDA:65,18,1,0
+BRDA:65,18,2,0
+BRDA:67,19,0,0
+BRDA:67,19,1,0
+BRDA:67,20,0,0
+BRDA:67,20,1,0
+BRDA:69,21,0,0
+BRDA:69,21,1,0
+BRDA:72,22,0,0
+BRDA:72,22,1,0
+BRDA:79,23,0,0
+BRDA:79,23,1,0
+BRDA:80,24,0,0
+BRDA:80,24,1,0
+BRDA:80,25,0,0
+BRDA:80,25,1,0
+BRDA:82,26,0,0
+BRDA:82,26,1,0
+BRDA:82,27,0,0
+BRDA:82,27,1,0
+BRDA:87,28,0,0
+BRDA:87,28,1,0
+BRDA:87,29,0,0
+BRDA:87,29,1,0
+BRDA:91,30,0,0
+BRDA:91,30,1,0
+BRF:62
+BRH:10
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/picker/src/draggable.js
+FN:7,(anonymous_1)
+FN:8,moveFn
+FN:14,endFn
+FN:29,(anonymous_4)
+FN:31,(anonymous_5)
+FN:34,(anonymous_6)
+FN:61,_interopRequireDefault
+FNF:7
+FNH:1
+FNDA:0,(anonymous_1)
+FNDA:0,moveFn
+FNDA:0,endFn
+FNDA:0,(anonymous_4)
+FNDA:0,(anonymous_5)
+FNDA:0,(anonymous_6)
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+DA:3,1
+DA:5,1
+DA:8,0
+DA:9,0
+DA:10,0
+DA:14,0
+DA:15,0
+DA:16,0
+DA:17,0
+DA:19,0
+DA:20,0
+DA:22,0
+DA:24,0
+DA:25,0
+DA:29,0
+DA:30,0
+DA:31,0
+DA:32,0
+DA:34,0
+DA:35,0
+DA:36,0
+DA:38,0
+DA:40,0
+DA:41,0
+DA:42,0
+DA:46,0
+DA:47,0
+DA:48,0
+DA:49,0
+LF:31
+LH:4
+BRDA:9,1,0,0
+BRDA:9,1,1,0
+BRDA:10,2,0,0
+BRDA:10,2,1,0
+BRDA:10,3,0,0
+BRDA:10,3,1,0
+BRDA:15,4,0,0
+BRDA:15,4,1,0
+BRDA:24,5,0,0
+BRDA:24,5,1,0
+BRDA:25,6,0,0
+BRDA:25,6,1,0
+BRDA:25,7,0,0
+BRDA:25,7,1,0
+BRDA:29,8,0,0
+BRDA:29,8,1,0
+BRDA:30,9,0,0
+BRDA:30,9,1,0
+BRDA:38,10,0,0
+BRDA:38,10,1,0
+BRDA:44,11,0,0
+BRDA:44,11,1,0
+BRDA:46,12,0,0
+BRDA:46,12,1,0
+BRDA:46,13,0,0
+BRDA:46,13,1,0
+BRDA:50,14,0,0
+BRDA:50,14,1,0
+BRDA:61,15,0,0
+BRDA:61,15,1,1
+BRDA:61,16,0,1
+BRDA:61,16,1,1
+BRDA:65,17,0,1
+BRDA:65,17,1,1
+BRF:34
+BRH:6
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/radio-group/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/radio/src/radio-group.vue
+FN:22,value
+FNF:1
+FNH:0
+FNDA:0,value
+DA:0,1
+DA:18,0
+LF:2
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/waterfall/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,1
+BRDA:11,1,1,0
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/waterfall/src/main.js
+FN:15,_interopRequireDefault
+FN:17,install
+FNF:2
+FNH:2
+FNDA:2,_interopRequireDefault
+FNDA:1,install
+DA:0,2
+DA:1,1
+DA:2,1
+DA:4,1
+DA:5,1
+DA:6,1
+DA:9,1
+DA:10,1
+DA:13,1
+LF:9
+LH:9
+BRDA:15,1,0,1
+BRDA:15,1,1,1
+BRDA:15,2,0,2
+BRDA:15,2,1,2
+BRDA:22,3,0,1
+BRDA:22,3,1,0
+BRF:6
+BRH:5
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/waterfall/src/directive.js
+FN:7,(anonymous_1)
+FN:9,bind
+FN:19,(anonymous_3)
+FN:25,update
+FN:28,unbind
+FN:39,_interopRequireDefault
+FN:46,doBindEvent
+FN:55,(anonymous_8)
+FN:71,handleScrollEvent
+FNF:9
+FNH:2
+FNDA:2,(anonymous_1)
+FNDA:0,bind
+FNDA:0,(anonymous_3)
+FNDA:0,update
+FNDA:0,unbind
+FNDA:1,_interopRequireDefault
+FNDA:0,doBindEvent
+FNDA:0,(anonymous_8)
+FNDA:0,handleScrollEvent
+DA:0,1
+DA:1,1
+DA:3,1
+DA:4,1
+DA:8,1
+DA:9,0
+DA:10,0
+DA:12,0
+DA:13,0
+DA:14,0
+DA:15,0
+DA:16,0
+DA:18,0
+DA:20,0
+DA:22,0
+DA:23,0
+DA:25,0
+DA:27,0
+DA:31,1
+DA:32,0
+DA:33,0
+DA:36,0
+DA:38,0
+DA:39,0
+DA:42,0
+DA:43,0
+DA:44,0
+DA:46,0
+DA:47,0
+DA:49,0
+DA:50,0
+DA:54,0
+DA:55,0
+DA:56,0
+DA:58,0
+DA:59,0
+DA:61,0
+DA:62,0
+DA:67,2
+DA:69,0
+DA:70,0
+DA:76,0
+DA:78,0
+DA:79,0
+DA:80,0
+DA:86,0
+DA:90,0
+DA:91,0
+LF:48
+LH:7
+BRDA:10,1,0,0
+BRDA:10,1,1,0
+BRDA:20,2,0,0
+BRDA:20,2,1,0
+BRDA:39,3,0,1
+BRDA:39,3,1,0
+BRDA:39,4,0,1
+BRDA:39,4,1,1
+BRDA:54,5,0,0
+BRDA:54,5,1,0
+BRDA:63,6,0,0
+BRDA:63,6,1,0
+BRDA:76,7,0,0
+BRDA:76,7,1,0
+BRDA:83,8,0,0
+BRDA:83,8,1,0
+BRDA:89,9,0,0
+BRDA:89,9,1,0
+BRDA:90,10,0,0
+BRDA:90,10,1,0
+BRDA:95,11,0,0
+BRDA:95,11,1,0
+BRDA:101,12,0,0
+BRDA:101,12,1,0
+BRDA:102,13,0,0
+BRDA:102,13,1,0
+BRF:26
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/waterfall/src/utils.js
+FN:7,debounce
+FN:9,(anonymous_2)
+FN:13,later
+FN:31,getScrollEventTarget
+FN:46,isAttached
+FN:62,getScrollTop
+FN:68,getElementTop
+FN:74,getVisibleHeight
+FNF:8
+FNH:0
+FNDA:0,debounce
+FNDA:0,(anonymous_2)
+FNDA:0,later
+FNDA:0,getScrollEventTarget
+FNDA:0,isAttached
+FNDA:0,getScrollTop
+FNDA:0,getElementTop
+FNDA:0,getVisibleHeight
+DA:0,1
+DA:3,0
+DA:4,0
+DA:5,0
+DA:6,0
+DA:7,0
+DA:8,0
+DA:9,0
+DA:10,0
+DA:11,0
+DA:13,0
+DA:14,0
+DA:17,0
+DA:18,0
+DA:20,0
+DA:26,0
+DA:28,0
+DA:29,0
+DA:30,0
+DA:31,0
+DA:33,0
+DA:35,0
+DA:40,0
+DA:41,0
+DA:42,0
+DA:43,0
+DA:45,0
+DA:46,0
+DA:48,0
+DA:50,0
+DA:55,0
+DA:60,0
+DA:61,0
+DA:63,0
+DA:67,0
+DA:68,0
+DA:71,0
+LF:37
+LH:1
+BRDA:15,1,0,0
+BRDA:15,1,1,0
+BRDA:22,2,0,0
+BRDA:22,2,1,0
+BRDA:34,3,0,0
+BRDA:34,3,1,0
+BRDA:34,3,2,0
+BRDA:34,3,3,0
+BRDA:36,4,0,0
+BRDA:36,4,1,0
+BRDA:36,5,0,0
+BRDA:36,5,1,0
+BRDA:49,6,0,0
+BRDA:49,6,1,0
+BRDA:52,7,0,0
+BRDA:52,7,1,0
+BRDA:63,8,0,0
+BRDA:63,8,1,0
+BRDA:69,9,0,0
+BRDA:69,9,1,0
+BRDA:75,10,0,0
+BRDA:75,10,1,0
+BRF:22
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/loading/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/loading/src/loading.vue
+FNF:0
+FNH:0
+DA:0,1
+LF:1
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/panel/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/panel/src/panel.vue
+FNF:0
+FNH:0
+DA:0,1
+LF:1
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/card/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/card/src/card.vue
+FNF:0
+FNH:0
+DA:0,1
+LF:1
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/steps/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/steps/src/steps.vue
+FN:17,data
+FNF:1
+FNH:0
+FNDA:0,data
+DA:0,1
+DA:13,0
+LF:2
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/tag/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/tag/src/main.vue
+FNF:0
+FNH:0
+DA:0,1
+LF:1
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/checkbox/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/checkbox/src/checkbox.vue
+FN:11,_interopRequireDefault
+FN:28,isGroup
+FN:37,get
+FN:40,set
+FN:64,isChecked
+FN:76,isDisabled
+FNF:6
+FNH:1
+FNDA:1,_interopRequireDefault
+FNDA:0,isGroup
+FNDA:0,get
+FNDA:0,set
+FNDA:0,isChecked
+FNDA:0,isDisabled
+DA:0,1
+DA:26,1
+DA:44,0
+DA:52,0
+DA:56,0
+DA:57,0
+DA:58,0
+DA:59,0
+DA:60,0
+DA:61,0
+DA:64,0
+DA:65,0
+DA:66,0
+DA:67,0
+DA:71,0
+DA:80,0
+DA:81,0
+DA:82,0
+DA:83,0
+DA:91,0
+LF:20
+LH:2
+BRDA:11,1,0,1
+BRDA:11,1,1,0
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRDA:38,3,0,0
+BRDA:38,3,1,0
+BRDA:38,4,0,0
+BRDA:38,4,1,0
+BRDA:41,5,0,0
+BRDA:41,5,1,0
+BRDA:41,6,0,0
+BRDA:41,6,1,0
+BRDA:43,7,0,0
+BRDA:43,7,1,0
+BRDA:44,8,0,0
+BRDA:44,8,1,0
+BRDA:50,9,0,0
+BRDA:50,9,1,0
+BRDA:65,10,0,0
+BRDA:65,10,1,0
+BRDA:67,11,0,0
+BRDA:67,11,1,0
+BRDA:77,12,0,0
+BRDA:77,12,1,0
+BRDA:77,13,0,0
+BRDA:77,13,1,0
+BRDA:77,14,0,0
+BRDA:77,14,1,0
+BRF:28
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/checkbox-group/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/checkbox/src/checkbox-group.vue
+FN:22,value
+FNF:1
+FNH:0
+FNDA:0,value
+DA:0,1
+DA:18,0
+LF:2
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/badge-group/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/badge/src/badge-group.vue
+FN:24,data
+FNF:1
+FNH:0
+FNDA:0,data
+DA:0,1
+DA:20,0
+LF:2
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/badge/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/badge/src/badge.vue
+FN:33,handleClick
+FN:38,classNames
+FNF:2
+FNH:0
+FNDA:0,handleClick
+FNDA:0,classNames
+DA:0,1
+DA:29,0
+DA:34,0
+LF:3
+LH:1
+BRF:0
+BRH:0
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/search/index.js
+FN:11,_interopRequireDefault
+FNF:1
+FNH:1
+FNDA:1,_interopRequireDefault
+DA:0,1
+DA:1,1
+LF:2
+LH:2
+BRDA:11,1,0,0
+BRDA:11,1,1,1
+BRDA:11,2,0,1
+BRDA:11,2,1,1
+BRF:4
+BRH:4
+end_of_record
+TN:
+SF:/Users/chenyao/youzan/oxygen/packages/search/src/search.vue
+FN:24,data
+FN:34,update
+FN:42,handleFocus
+FN:46,handleClean
+FN:51,handleBack
+FN:57,handleSearch
+FNF:6
+FNH:0
+FNDA:0,data
+FNDA:0,update
+FNDA:0,handleFocus
+FNDA:0,handleClean
+FNDA:0,handleBack
+FNDA:0,handleSearch
+DA:0,1
+DA:20,0
+DA:29,0
+DA:36,0
+DA:40,0
+DA:41,0
+DA:45,0
+DA:46,0
+DA:47,0
+DA:51,0
+LF:10
+LH:1
+BRDA:35,1,0,0
+BRDA:35,1,1,0
+BRF:2
+BRH:0
+end_of_record
diff --git a/test/unit/get-webpack-conf.js b/test/unit/get-webpack-conf.js
new file mode 100644
index 000000000..8421187b4
--- /dev/null
+++ b/test/unit/get-webpack-conf.js
@@ -0,0 +1,130 @@
+const path = require('path');
+const to2 = require('2webpack2');
+const ProgressBarPlugin = require('progress-bar-webpack-plugin');
+
+let webpackConfig = {
+  output: {
+    path: path.resolve(process.cwd(), 'dist'),
+    publicPath: '/dist/',
+    filename: '[name].js',
+    chunkFilename: '[id].js'
+  },
+  plugins: [
+    new ProgressBarPlugin()
+  ],
+  resolve: {
+    extensions: [
+      '',
+      '.js',
+      '.json',
+      '.vue'
+    ],
+    alias: {
+      src: path.resolve(process.cwd(), 'src'),
+      packages: path.resolve(process.cwd(), 'packages'),
+      examples: path.resolve(process.cwd(), 'examples'),
+      'element-ui': path.resolve(process.cwd()),
+      vue$: 'vue/dist/vue.common.js'
+    }
+  },
+  resolveLoader: {},
+  module: {
+    loaders: [
+      {
+        test: /\.(jsx?|babel|es6)$/,
+        include: path.resolve(process.cwd()),
+        exclude: /node_modules|utils\/popper\.js|utils\/date.\js/,
+        loaders: [
+          'babel-loader'
+        ]
+      },
+      {
+        test: /\.json$/,
+        loaders: [
+          'json-loader'
+        ]
+      },
+      {
+        test: /\.css$/,
+        loaders: [
+          'style-loader',
+          'css-loader',
+          'postcss-loader'
+        ]
+      },
+      {
+        test: /\.html$/,
+        loaders: [
+          'html-loader?minimize=false'
+        ]
+      },
+      {
+        test: /\.otf|ttf|woff2?|eot(\?\S*)?$/,
+        loader: 'url-loader',
+        query: {
+          limit: 10000,
+          name: 'static/[name].[hash:7].[ext]'
+        }
+      },
+      {
+        test: /\.svg(\?\S*)?$/,
+        loader: 'url-loader',
+        query: {
+          limit: 10000,
+          name: 'static/[name].[hash:7].[ext]'
+        }
+      },
+      {
+        test: /\.(gif|png|jpe?g)(\?\S*)?$/,
+        loader: 'url-loader',
+        query: {
+          limit: 10000,
+          name: 'static/[name].[hash:7].[ext]'
+        }
+      },
+      {
+        test: /\.vue$/,
+        loaders: [
+          'vue-loader'
+        ]
+      }
+    ],
+    preLoaders: [
+      {
+        test: /\.js$/,
+        loader: 'isparta',
+        exclude: /node_modules|utils\/popper\.js|utils\/date.\js/,
+        include: /src|packages/
+      },
+      {
+        test: /\.jsx?$/,
+        exclude: /node_modules|bower_components/,
+        loader: 'eslint-loader'
+      },
+      {
+        test: /\.vue$/,
+        exclude: /node_modules|bower_components/,
+        loader: 'eslint-loader'
+      }
+    ],
+    postLoaders: []
+  },
+  devtool: '#inline-source-map',
+  vue: {
+    loaders: {
+      css: 'vue-style-loader!css-loader?sourceMap',
+      less: 'vue-style-loader!css-loader?sourceMap!less-loader?sourceMap',
+      sass: 'vue-style-loader!css-loader?sourceMap!sass-loader?indentedSyntax&sourceMap',
+      scss: 'vue-style-loader!css-loader?sourceMap!sass-loader?sourceMap',
+      stylus: 'vue-style-loader!css-loader?sourceMap!stylus-loader?sourceMap',
+      styl: 'vue-style-loader!css-loader?sourceMap!stylus-loader?sourceMap',
+      js: 'isparta-loader!eslint-loader'
+    },
+    preserveWhitespace: false
+  },
+  eslint: {
+    emitWarning: true
+  }
+};
+
+module.exports = to2(webpackConfig, {quiet: true, context: true});
diff --git a/test/unit/index.js b/test/unit/index.js
new file mode 100644
index 000000000..2ec49224c
--- /dev/null
+++ b/test/unit/index.js
@@ -0,0 +1,11 @@
+require('packages/zanui-css/src/index.css');
+
+// require all test files (files that ends with .spec.js)
+const testsReq = require.context('./specs', true, /\.spec$/);
+testsReq.keys().forEach(testsReq);
+
+// require all src files except main.js for coverage.
+// you can also change this to match only the subset of files that
+// you want coverage for.
+const srcReq = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/);
+srcReq.keys().forEach(srcReq);
diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js
new file mode 100644
index 000000000..ab02fe3d7
--- /dev/null
+++ b/test/unit/karma.conf.js
@@ -0,0 +1,25 @@
+var webpackConfig = require('./get-webpack-conf');
+
+module.exports = function(config) {
+  config.set({
+    browsers: ['Chrome'],
+    frameworks: ['mocha', 'sinon-chai'],
+    reporters: ['spec', 'coverage'],
+    files: ['./index.js'],
+    preprocessors: {
+      './index.js': ['webpack', 'sourcemap']
+    },
+    webpack: webpackConfig,
+    webpackMiddleware: {
+      noInfo: true
+    },
+    coverageReporter: {
+      dir: './coverage',
+      reporters: [
+        { type: 'lcov', subdir: '.' },
+        { type: 'text-summary' }
+      ]
+    },
+    singleRun: false
+  });
+};

From ae50008f71a1f6df5f02e7aca346a4969f3082f4 Mon Sep 17 00:00:00 2001
From: pangxie1991 <chenyao1102@gmail.com>
Date: Thu, 2 Mar 2017 17:31:34 +0800
Subject: [PATCH 2/9] git ignore

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 4c1cab8de..0d251c948 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@ lib/*
 node_modules
 example/dist
 dist
+coverage

From 3a65a1e31d306f9c06e3ce427119db7145640e4d Mon Sep 17 00:00:00 2001
From: pangxie1991 <chenyao1102@gmail.com>
Date: Thu, 2 Mar 2017 17:34:30 +0800
Subject: [PATCH 3/9] gitignore

---
 .gitignore | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 0d251c948..2429e12e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,4 @@ lib/*
 node_modules
 example/dist
 dist
-coverage
+test/unit/coverage*

From d791bea5d5c4980e19c15ac2774412f262d52527 Mon Sep 17 00:00:00 2001
From: pangxie1991 <chenyao1102@gmail.com>
Date: Thu, 2 Mar 2017 17:37:40 +0800
Subject: [PATCH 4/9] gitignore

---
 .gitignore | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 2429e12e3..064cf9568 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,4 @@ lib/*
 node_modules
 example/dist
 dist
-test/unit/coverage*
+test/unit/coverage/*

From af2213de9131c92e923e6fccdef284f21b619700 Mon Sep 17 00:00:00 2001
From: pangxie1991 <chenyao1102@gmail.com>
Date: Thu, 2 Mar 2017 17:41:16 +0800
Subject: [PATCH 5/9] ignore coverage

---
 .gitignore                                    |    2 +-
 test/unit/coverage/lcov-report/base.css       |  213 --
 test/unit/coverage/lcov-report/index.html     |  656 ------
 .../packages/badge-group/index.html           |   97 -
 .../packages/badge-group/index.js.html        |   81 -
 .../lcov-report/packages/badge/index.html     |   97 -
 .../lcov-report/packages/badge/index.js.html  |   81 -
 .../packages/badge/src/badge-group.vue.html   |  140 --
 .../packages/badge/src/badge.vue.html         |  185 --
 .../lcov-report/packages/badge/src/index.html |  106 -
 .../lcov-report/packages/button/index.html    |   97 -
 .../lcov-report/packages/button/index.js.html |   81 -
 .../packages/button/src/button.js.html        |  302 ---
 .../packages/button/src/index.html            |   93 -
 .../lcov-report/packages/card/index.html      |   97 -
 .../lcov-report/packages/card/index.js.html   |   81 -
 .../packages/card/src/card.vue.html           |  158 --
 .../lcov-report/packages/card/src/index.html  |   93 -
 .../packages/cell-group/index.html            |   97 -
 .../packages/cell-group/index.js.html         |   81 -
 .../lcov-report/packages/cell/index.html      |   97 -
 .../lcov-report/packages/cell/index.js.html   |   81 -
 .../packages/cell/src/cell-group.vue.html     |   98 -
 .../packages/cell/src/cell.vue.html           |  194 --
 .../lcov-report/packages/cell/src/index.html  |  106 -
 .../packages/checkbox-group/index.html        |   97 -
 .../packages/checkbox-group/index.js.html     |   81 -
 .../lcov-report/packages/checkbox/index.html  |   97 -
 .../packages/checkbox/index.js.html           |   81 -
 .../checkbox/src/checkbox-group.vue.html      |  131 --
 .../packages/checkbox/src/checkbox.vue.html   |  360 ---
 .../packages/checkbox/src/index.html          |  110 -
 .../lcov-report/packages/dialog/index.html    |   97 -
 .../lcov-report/packages/dialog/index.js.html |   81 -
 .../packages/dialog/src/dialog.js.html        |  362 ---
 .../packages/dialog/src/dialog.vue.html       |  324 ---
 .../packages/dialog/src/index.html            |  110 -
 .../lcov-report/packages/field/index.html     |   97 -
 .../lcov-report/packages/field/index.js.html  |   81 -
 .../packages/field/src/field.vue.html         |  306 ---
 .../lcov-report/packages/field/src/index.html |   97 -
 .../lcov-report/packages/icon/index.html      |   97 -
 .../lcov-report/packages/icon/index.js.html   |   81 -
 .../packages/icon/src/icon.vue.html           |  104 -
 .../lcov-report/packages/icon/src/index.html  |   93 -
 .../lcov-report/packages/loading/index.html   |   97 -
 .../packages/loading/index.js.html            |   81 -
 .../packages/loading/src/index.html           |   93 -
 .../packages/loading/src/loading.vue.html     |   98 -
 .../lcov-report/packages/panel/index.html     |   97 -
 .../lcov-report/packages/panel/index.js.html  |   81 -
 .../lcov-report/packages/panel/src/index.html |   93 -
 .../packages/panel/src/panel.vue.html         |  149 --
 .../lcov-report/packages/picker/index.html    |   97 -
 .../lcov-report/packages/picker/index.js.html |   81 -
 .../packages/picker/src/draggable.js.html     |  225 --
 .../packages/picker/src/index.html            |  123 -
 .../picker/src/picker-column.vue.html         |  792 -------
 .../packages/picker/src/picker.vue.html       |  516 ----
 .../lcov-report/packages/popup/index.html     |   97 -
 .../lcov-report/packages/popup/index.js.html  |   81 -
 .../lcov-report/packages/popup/src/index.html |   97 -
 .../packages/popup/src/popup.vue.html         |  282 ---
 .../packages/radio-group/index.html           |   97 -
 .../packages/radio-group/index.js.html        |   81 -
 .../lcov-report/packages/radio/index.html     |   97 -
 .../lcov-report/packages/radio/index.js.html  |   81 -
 .../lcov-report/packages/radio/src/index.html |  110 -
 .../packages/radio/src/radio-group.vue.html   |  131 --
 .../packages/radio/src/radio.vue.html         |  267 ---
 .../lcov-report/packages/search/index.html    |   97 -
 .../lcov-report/packages/search/index.js.html |   81 -
 .../packages/search/src/index.html            |   93 -
 .../packages/search/src/search.vue.html       |  230 --
 .../lcov-report/packages/steps/index.html     |   97 -
 .../lcov-report/packages/steps/index.js.html  |   81 -
 .../lcov-report/packages/steps/src/index.html |   93 -
 .../packages/steps/src/steps.vue.html         |  119 -
 .../lcov-report/packages/switch/index.html    |   97 -
 .../lcov-report/packages/switch/index.js.html |   81 -
 .../packages/switch/src/index.html            |   93 -
 .../packages/switch/src/switch.vue.html       |  251 --
 .../lcov-report/packages/tag/index.html       |   97 -
 .../lcov-report/packages/tag/index.js.html    |   81 -
 .../lcov-report/packages/tag/src/index.html   |   93 -
 .../packages/tag/src/main.vue.html            |  113 -
 .../lcov-report/packages/waterfall/index.html |   97 -
 .../packages/waterfall/index.js.html          |   81 -
 .../packages/waterfall/src/directive.js.html  |  354 ---
 .../packages/waterfall/src/index.html         |  123 -
 .../packages/waterfall/src/main.js.html       |  110 -
 .../packages/waterfall/src/utils.js.html      |  293 ---
 test/unit/coverage/lcov-report/prettify.css   |    1 -
 test/unit/coverage/lcov-report/prettify.js    |    1 -
 .../lcov-report/sort-arrow-sprite.png         |  Bin 209 -> 0 bytes
 test/unit/coverage/lcov-report/sorter.js      |  158 --
 test/unit/coverage/lcov-report/src/index.html |   97 -
 .../coverage/lcov-report/src/index.js.html    |  309 ---
 .../lcov-report/src/mixins/findParent.js.html |  134 --
 .../lcov-report/src/mixins/index.html         |   93 -
 .../lcov-report/src/mixins/popup/index.html   |  106 -
 .../src/mixins/popup/index.js.html            |  539 -----
 .../src/mixins/popup/popup-manager.js.html    |  464 ----
 .../lcov-report/src/utils/dom.js.html         |  239 --
 .../coverage/lcov-report/src/utils/index.html |  123 -
 .../lcov-report/src/utils/merge.js.html       |  113 -
 .../lcov-report/src/utils/transition.js.html  |  372 ---
 test/unit/coverage/lcov.info                  | 2065 -----------------
 108 files changed, 1 insertion(+), 18013 deletions(-)
 delete mode 100644 test/unit/coverage/lcov-report/base.css
 delete mode 100644 test/unit/coverage/lcov-report/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/badge-group/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/badge-group/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/badge/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/badge/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/badge/src/badge-group.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/badge/src/badge.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/badge/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/button/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/button/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/button/src/button.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/button/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/card/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/card/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/card/src/card.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/card/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/cell-group/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/cell-group/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/cell/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/cell/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/cell/src/cell-group.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/cell/src/cell.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/cell/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/checkbox-group/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/checkbox-group/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/checkbox/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/checkbox/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/checkbox/src/checkbox-group.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/checkbox/src/checkbox.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/checkbox/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/dialog/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/dialog/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/dialog/src/dialog.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/dialog/src/dialog.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/dialog/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/field/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/field/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/field/src/field.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/field/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/icon/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/icon/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/icon/src/icon.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/icon/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/loading/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/loading/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/loading/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/loading/src/loading.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/panel/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/panel/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/panel/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/panel/src/panel.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/picker/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/picker/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/picker/src/draggable.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/picker/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/picker/src/picker-column.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/picker/src/picker.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/popup/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/popup/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/popup/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/popup/src/popup.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/radio-group/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/radio-group/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/radio/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/radio/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/radio/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/radio/src/radio-group.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/radio/src/radio.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/search/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/search/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/search/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/search/src/search.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/steps/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/steps/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/steps/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/steps/src/steps.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/switch/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/switch/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/switch/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/switch/src/switch.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/tag/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/tag/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/tag/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/tag/src/main.vue.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/waterfall/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/waterfall/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/waterfall/src/directive.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/waterfall/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/waterfall/src/main.js.html
 delete mode 100644 test/unit/coverage/lcov-report/packages/waterfall/src/utils.js.html
 delete mode 100644 test/unit/coverage/lcov-report/prettify.css
 delete mode 100644 test/unit/coverage/lcov-report/prettify.js
 delete mode 100644 test/unit/coverage/lcov-report/sort-arrow-sprite.png
 delete mode 100644 test/unit/coverage/lcov-report/sorter.js
 delete mode 100644 test/unit/coverage/lcov-report/src/index.html
 delete mode 100644 test/unit/coverage/lcov-report/src/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/src/mixins/findParent.js.html
 delete mode 100644 test/unit/coverage/lcov-report/src/mixins/index.html
 delete mode 100644 test/unit/coverage/lcov-report/src/mixins/popup/index.html
 delete mode 100644 test/unit/coverage/lcov-report/src/mixins/popup/index.js.html
 delete mode 100644 test/unit/coverage/lcov-report/src/mixins/popup/popup-manager.js.html
 delete mode 100644 test/unit/coverage/lcov-report/src/utils/dom.js.html
 delete mode 100644 test/unit/coverage/lcov-report/src/utils/index.html
 delete mode 100644 test/unit/coverage/lcov-report/src/utils/merge.js.html
 delete mode 100644 test/unit/coverage/lcov-report/src/utils/transition.js.html
 delete mode 100644 test/unit/coverage/lcov.info

diff --git a/.gitignore b/.gitignore
index 064cf9568..cec8de443 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,4 @@ lib/*
 node_modules
 example/dist
 dist
-test/unit/coverage/*
+test/unit/coverage
diff --git a/test/unit/coverage/lcov-report/base.css b/test/unit/coverage/lcov-report/base.css
deleted file mode 100644
index 29737bcb0..000000000
--- a/test/unit/coverage/lcov-report/base.css
+++ /dev/null
@@ -1,213 +0,0 @@
-body, html {
-  margin:0; padding: 0;
-  height: 100%;
-}
-body {
-    font-family: Helvetica Neue, Helvetica, Arial;
-    font-size: 14px;
-    color:#333;
-}
-.small { font-size: 12px; }
-*, *:after, *:before {
-  -webkit-box-sizing:border-box;
-     -moz-box-sizing:border-box;
-          box-sizing:border-box;
-  }
-h1 { font-size: 20px; margin: 0;}
-h2 { font-size: 14px; }
-pre {
-    font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
-    margin: 0;
-    padding: 0;
-    -moz-tab-size: 2;
-    -o-tab-size:  2;
-    tab-size: 2;
-}
-a { color:#0074D9; text-decoration:none; }
-a:hover { text-decoration:underline; }
-.strong { font-weight: bold; }
-.space-top1 { padding: 10px 0 0 0; }
-.pad2y { padding: 20px 0; }
-.pad1y { padding: 10px 0; }
-.pad2x { padding: 0 20px; }
-.pad2 { padding: 20px; }
-.pad1 { padding: 10px; }
-.space-left2 { padding-left:55px; }
-.space-right2 { padding-right:20px; }
-.center { text-align:center; }
-.clearfix { display:block; }
-.clearfix:after {
-  content:'';
-  display:block;
-  height:0;
-  clear:both;
-  visibility:hidden;
-  }
-.fl { float: left; }
-@media only screen and (max-width:640px) {
-  .col3 { width:100%; max-width:100%; }
-  .hide-mobile { display:none!important; }
-}
-
-.quiet {
-  color: #7f7f7f;
-  color: rgba(0,0,0,0.5);
-}
-.quiet a { opacity: 0.7; }
-
-.fraction {
-  font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
-  font-size: 10px;
-  color: #555;
-  background: #E8E8E8;
-  padding: 4px 5px;
-  border-radius: 3px;
-  vertical-align: middle;
-}
-
-div.path a:link, div.path a:visited { color: #333; }
-table.coverage {
-  border-collapse: collapse;
-  margin: 10px 0 0 0;
-  padding: 0;
-}
-
-table.coverage td {
-  margin: 0;
-  padding: 0;
-  vertical-align: top;
-}
-table.coverage td.line-count {
-    text-align: right;
-    padding: 0 5px 0 20px;
-}
-table.coverage td.line-coverage {
-    text-align: right;
-    padding-right: 10px;
-    min-width:20px;
-}
-
-table.coverage td span.cline-any {
-    display: inline-block;
-    padding: 0 5px;
-    width: 100%;
-}
-.missing-if-branch {
-    display: inline-block;
-    margin-right: 5px;
-    border-radius: 3px;
-    position: relative;
-    padding: 0 4px;
-    background: #333;
-    color: yellow;
-}
-
-.skip-if-branch {
-    display: none;
-    margin-right: 10px;
-    position: relative;
-    padding: 0 4px;
-    background: #ccc;
-    color: white;
-}
-.missing-if-branch .typ, .skip-if-branch .typ {
-    color: inherit !important;
-}
-.coverage-summary {
-  border-collapse: collapse;
-  width: 100%;
-}
-.coverage-summary tr { border-bottom: 1px solid #bbb; }
-.keyline-all { border: 1px solid #ddd; }
-.coverage-summary td, .coverage-summary th { padding: 10px; }
-.coverage-summary tbody { border: 1px solid #bbb; }
-.coverage-summary td { border-right: 1px solid #bbb; }
-.coverage-summary td:last-child { border-right: none; }
-.coverage-summary th {
-  text-align: left;
-  font-weight: normal;
-  white-space: nowrap;
-}
-.coverage-summary th.file { border-right: none !important; }
-.coverage-summary th.pct { }
-.coverage-summary th.pic,
-.coverage-summary th.abs,
-.coverage-summary td.pct,
-.coverage-summary td.abs { text-align: right; }
-.coverage-summary td.file { white-space: nowrap;  }
-.coverage-summary td.pic { min-width: 120px !important;  }
-.coverage-summary tfoot td { }
-
-.coverage-summary .sorter {
-    height: 10px;
-    width: 7px;
-    display: inline-block;
-    margin-left: 0.5em;
-    background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
-}
-.coverage-summary .sorted .sorter {
-    background-position: 0 -20px;
-}
-.coverage-summary .sorted-desc .sorter {
-    background-position: 0 -10px;
-}
-.status-line {  height: 10px; }
-/* dark red */
-.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
-.low .chart { border:1px solid #C21F39 }
-/* medium red */
-.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
-/* light red */
-.low, .cline-no { background:#FCE1E5 }
-/* light green */
-.high, .cline-yes { background:rgb(230,245,208) }
-/* medium green */
-.cstat-yes { background:rgb(161,215,106) }
-/* dark green */
-.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
-.high .chart { border:1px solid rgb(77,146,33) }
-/* dark yellow (gold) */
-.medium .chart { border:1px solid #f9cd0b; }
-.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
-/* light yellow */
-.medium { background: #fff4c2; }
-/* light gray */
-span.cline-neutral { background: #eaeaea; }
-
-.cbranch-no { background:  yellow !important; color: #111; }
-
-.cstat-skip { background: #ddd; color: #111; }
-.fstat-skip { background: #ddd; color: #111 !important; }
-.cbranch-skip { background: #ddd !important; color: #111; }
-
-
-.cover-fill, .cover-empty {
-  display:inline-block;
-  height: 12px;
-}
-.chart {
-  line-height: 0;
-}
-.cover-empty {
-    background: white;
-}
-.cover-full {
-    border-right: none !important;
-}
-pre.prettyprint {
-    border: none !important;
-    padding: 0 !important;
-    margin: 0 !important;
-}
-.com { color: #999 !important; }
-.ignore-none { color: #999; font-weight: normal; }
-
-.wrapper {
-  min-height: 100%;
-  height: auto !important;
-  height: 100%;
-  margin: 0 auto -48px;
-}
-.footer, .push {
-  height: 48px;
-}
diff --git a/test/unit/coverage/lcov-report/index.html b/test/unit/coverage/lcov-report/index.html
deleted file mode 100644
index 3e83f8321..000000000
--- a/test/unit/coverage/lcov-report/index.html
+++ /dev/null
@@ -1,656 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for All files</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="prettify.css" />
-    <link rel="stylesheet" href="base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      /
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">41.13% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>380/924</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">29.89% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>156/522</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">22.22% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>38/171</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">26.54% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>185/697</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">33 branches</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="packages/badge-group/"><a href="packages/badge-group/index.html">packages/badge-group/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/badge/"><a href="packages/badge/index.html">packages/badge/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file medium" data-value="packages/badge/src/"><a href="packages/badge/src/index.html">packages/badge/src/</a></td>
-	<td data-value="57.14" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 57%;"></div><div class="cover-empty" style="width:43%;"></div></div></td>
-	<td data-value="57.14" class="pct medium">57.14%</td>
-	<td data-value="7" class="abs medium">4/7</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="3" class="abs low">0/3</td>
-	<td data-value="40" class="pct low">40%</td>
-	<td data-value="5" class="abs low">2/5</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/button/"><a href="packages/button/index.html">packages/button/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="packages/button/src/"><a href="packages/button/src/index.html">packages/button/src/</a></td>
-	<td data-value="40" class="pic low"><div class="chart"><div class="cover-fill" style="width: 40%;"></div><div class="cover-empty" style="width:60%;"></div></div></td>
-	<td data-value="40" class="pct low">40%</td>
-	<td data-value="10" class="abs low">4/10</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="2" class="abs low">0/2</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="4" class="abs low">0/4</td>
-	<td data-value="33.33" class="pct low">33.33%</td>
-	<td data-value="9" class="abs low">3/9</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/card/"><a href="packages/card/index.html">packages/card/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/card/src/"><a href="packages/card/src/index.html">packages/card/src/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/cell-group/"><a href="packages/cell-group/index.html">packages/cell-group/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/cell/"><a href="packages/cell/index.html">packages/cell/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/cell/src/"><a href="packages/cell/src/index.html">packages/cell/src/</a></td>
-	<td data-value="80" class="pic high"><div class="chart"><div class="cover-fill" style="width: 80%;"></div><div class="cover-empty" style="width:20%;"></div></div></td>
-	<td data-value="80" class="pct high">80%</td>
-	<td data-value="5" class="abs high">4/5</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="66.67" class="pct medium">66.67%</td>
-	<td data-value="3" class="abs medium">2/3</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/checkbox-group/"><a href="packages/checkbox-group/index.html">packages/checkbox-group/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/checkbox/"><a href="packages/checkbox/index.html">packages/checkbox/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="packages/checkbox/src/"><a href="packages/checkbox/src/index.html">packages/checkbox/src/</a></td>
-	<td data-value="29.63" class="pic low"><div class="chart"><div class="cover-fill" style="width: 29%;"></div><div class="cover-empty" style="width:71%;"></div></div></td>
-	<td data-value="29.63" class="pct low">29.63%</td>
-	<td data-value="27" class="abs low">8/27</td>
-	<td data-value="14.29" class="pct low">14.29%</td>
-	<td data-value="28" class="abs low">4/28</td>
-	<td data-value="14.29" class="pct low">14.29%</td>
-	<td data-value="7" class="abs low">1/7</td>
-	<td data-value="13.64" class="pct low">13.64%</td>
-	<td data-value="22" class="abs low">3/22</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/dialog/"><a href="packages/dialog/index.html">packages/dialog/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="packages/dialog/src/"><a href="packages/dialog/src/index.html">packages/dialog/src/</a></td>
-	<td data-value="39.24" class="pic low"><div class="chart"><div class="cover-fill" style="width: 39%;"></div><div class="cover-empty" style="width:61%;"></div></div></td>
-	<td data-value="39.24" class="pct low">39.24%</td>
-	<td data-value="79" class="abs low">31/79</td>
-	<td data-value="20" class="pct low">20%</td>
-	<td data-value="40" class="abs low">8/40</td>
-	<td data-value="13.33" class="pct low">13.33%</td>
-	<td data-value="15" class="abs low">2/15</td>
-	<td data-value="27.69" class="pct low">27.69%</td>
-	<td data-value="65" class="abs low">18/65</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/field/"><a href="packages/field/index.html">packages/field/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file medium" data-value="packages/field/src/"><a href="packages/field/src/index.html">packages/field/src/</a></td>
-	<td data-value="54.55" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 54%;"></div><div class="cover-empty" style="width:46%;"></div></div></td>
-	<td data-value="54.55" class="pct medium">54.55%</td>
-	<td data-value="11" class="abs medium">6/11</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="20" class="pct low">20%</td>
-	<td data-value="5" class="abs low">1/5</td>
-	<td data-value="28.57" class="pct low">28.57%</td>
-	<td data-value="7" class="abs low">2/7</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/icon/"><a href="packages/icon/index.html">packages/icon/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/icon/src/"><a href="packages/icon/src/index.html">packages/icon/src/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/loading/"><a href="packages/loading/index.html">packages/loading/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/loading/src/"><a href="packages/loading/src/index.html">packages/loading/src/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/panel/"><a href="packages/panel/index.html">packages/panel/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/panel/src/"><a href="packages/panel/src/index.html">packages/panel/src/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/picker/"><a href="packages/picker/index.html">packages/picker/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="packages/picker/src/"><a href="packages/picker/src/index.html">packages/picker/src/</a></td>
-	<td data-value="16.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 16%;"></div><div class="cover-empty" style="width:84%;"></div></div></td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="144" class="abs low">24/144</td>
-	<td data-value="20" class="pct low">20%</td>
-	<td data-value="70" class="abs low">14/70</td>
-	<td data-value="7.5" class="pct low">7.5%</td>
-	<td data-value="40" class="abs low">3/40</td>
-	<td data-value="7.94" class="pct low">7.94%</td>
-	<td data-value="126" class="abs low">10/126</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/popup/"><a href="packages/popup/index.html">packages/popup/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="packages/popup/src/"><a href="packages/popup/src/index.html">packages/popup/src/</a></td>
-	<td data-value="42.86" class="pic low"><div class="chart"><div class="cover-fill" style="width: 42%;"></div><div class="cover-empty" style="width:58%;"></div></div></td>
-	<td data-value="42.86" class="pct low">42.86%</td>
-	<td data-value="14" class="abs low">6/14</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="8" class="abs medium">4/8</td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="6" class="abs low">1/6</td>
-	<td data-value="20" class="pct low">20%</td>
-	<td data-value="10" class="abs low">2/10</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/radio-group/"><a href="packages/radio-group/index.html">packages/radio-group/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/radio/"><a href="packages/radio/index.html">packages/radio/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file medium" data-value="packages/radio/src/"><a href="packages/radio/src/index.html">packages/radio/src/</a></td>
-	<td data-value="53.33" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 53%;"></div><div class="cover-empty" style="width:47%;"></div></div></td>
-	<td data-value="53.33" class="pct medium">53.33%</td>
-	<td data-value="15" class="abs medium">8/15</td>
-	<td data-value="22.22" class="pct low">22.22%</td>
-	<td data-value="18" class="abs low">4/18</td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="6" class="abs low">1/6</td>
-	<td data-value="30" class="pct low">30%</td>
-	<td data-value="10" class="abs low">3/10</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/search/"><a href="packages/search/index.html">packages/search/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="packages/search/src/"><a href="packages/search/src/index.html">packages/search/src/</a></td>
-	<td data-value="16.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 16%;"></div><div class="cover-empty" style="width:84%;"></div></div></td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="12" class="abs low">2/12</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="2" class="abs low">0/2</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="6" class="abs low">0/6</td>
-	<td data-value="10" class="pct low">10%</td>
-	<td data-value="10" class="abs low">1/10</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/steps/"><a href="packages/steps/index.html">packages/steps/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file medium" data-value="packages/steps/src/"><a href="packages/steps/src/index.html">packages/steps/src/</a></td>
-	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
-	<td data-value="66.67" class="pct medium">66.67%</td>
-	<td data-value="3" class="abs medium">2/3</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/switch/"><a href="packages/switch/index.html">packages/switch/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="packages/switch/src/"><a href="packages/switch/src/index.html">packages/switch/src/</a></td>
-	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
-	<td data-value="18.18" class="pct low">18.18%</td>
-	<td data-value="11" class="abs low">2/11</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="10" class="abs low">0/10</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="3" class="abs low">0/3</td>
-	<td data-value="14.29" class="pct low">14.29%</td>
-	<td data-value="7" class="abs low">1/7</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/tag/"><a href="packages/tag/index.html">packages/tag/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/tag/src/"><a href="packages/tag/src/index.html">packages/tag/src/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="packages/waterfall/"><a href="packages/waterfall/index.html">packages/waterfall/</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="packages/waterfall/src/"><a href="packages/waterfall/src/index.html">packages/waterfall/src/</a></td>
-	<td data-value="25.47" class="pic low"><div class="chart"><div class="cover-fill" style="width: 25%;"></div><div class="cover-empty" style="width:75%;"></div></div></td>
-	<td data-value="25.47" class="pct low">25.47%</td>
-	<td data-value="106" class="abs low">27/106</td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="54" class="abs low">9/54</td>
-	<td data-value="21.05" class="pct low">21.05%</td>
-	<td data-value="19" class="abs low">4/19</td>
-	<td data-value="18.09" class="pct low">18.09%</td>
-	<td data-value="94" class="abs low">17/94</td>
-	</tr>
-
-<tr>
-	<td class="file medium" data-value="src/"><a href="src/index.html">src/</a></td>
-	<td data-value="68.06" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 68%;"></div><div class="cover-empty" style="width:32%;"></div></div></td>
-	<td data-value="68.06" class="pct medium">68.06%</td>
-	<td data-value="72" class="abs medium">49/72</td>
-	<td data-value="70" class="pct medium">70%</td>
-	<td data-value="10" class="abs medium">7/10</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
-	<td data-value="54.17" class="pct medium">54.17%</td>
-	<td data-value="48" class="abs medium">26/48</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="src/mixins/"><a href="src/mixins/index.html">src/mixins/</a></td>
-	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
-	<td data-value="18.18" class="pct low">18.18%</td>
-	<td data-value="11" class="abs low">2/11</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="4" class="abs low">0/4</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="11.11" class="pct low">11.11%</td>
-	<td data-value="9" class="abs low">1/9</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="src/mixins/popup/"><a href="src/mixins/popup/index.html">src/mixins/popup/</a></td>
-	<td data-value="14.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 14%;"></div><div class="cover-empty" style="width:86%;"></div></div></td>
-	<td data-value="14.18" class="pct low">14.18%</td>
-	<td data-value="134" class="abs low">19/134</td>
-	<td data-value="4.88" class="pct low">4.88%</td>
-	<td data-value="82" class="abs low">4/82</td>
-	<td data-value="4.76" class="pct low">4.76%</td>
-	<td data-value="21" class="abs low">1/21</td>
-	<td data-value="10" class="pct low">10%</td>
-	<td data-value="120" class="abs low">12/120</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="src/utils/"><a href="src/utils/index.html">src/utils/</a></td>
-	<td data-value="33.06" class="pic low"><div class="chart"><div class="cover-fill" style="width: 33%;"></div><div class="cover-empty" style="width:67%;"></div></div></td>
-	<td data-value="33.06" class="pct low">33.06%</td>
-	<td data-value="121" class="abs low">40/121</td>
-	<td data-value="9.8" class="pct low">9.8%</td>
-	<td data-value="102" class="abs low">10/102</td>
-	<td data-value="11.11" class="pct low">11.11%</td>
-	<td data-value="9" class="abs low">1/9</td>
-	<td data-value="31.68" class="pct low">31.68%</td>
-	<td data-value="101" class="abs low">32/101</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge-group/index.html b/test/unit/coverage/lcov-report/packages/badge-group/index.html
deleted file mode 100644
index 10a80d434..000000000
--- a/test/unit/coverage/lcov-report/packages/badge-group/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/badge-group/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/badge-group/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge-group/index.js.html b/test/unit/coverage/lcov-report/packages/badge-group/index.js.html
deleted file mode 100644
index d0455d7e7..000000000
--- a/test/unit/coverage/lcov-report/packages/badge-group/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/badge-group/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/badge-group/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import BadgeGroup from '../badge/src/badge-group';
-&nbsp;
-export default BadgeGroup;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/index.html b/test/unit/coverage/lcov-report/packages/badge/index.html
deleted file mode 100644
index eebfac6b6..000000000
--- a/test/unit/coverage/lcov-report/packages/badge/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/badge/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/badge/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/index.js.html b/test/unit/coverage/lcov-report/packages/badge/index.js.html
deleted file mode 100644
index 2ac8df9b2..000000000
--- a/test/unit/coverage/lcov-report/packages/badge/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/badge/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/badge/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Badge from './src/badge';
-&nbsp;
-export default Badge;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/src/badge-group.vue.html b/test/unit/coverage/lcov-report/packages/badge/src/badge-group.vue.html
deleted file mode 100644
index e4452986f..000000000
--- a/test/unit/coverage/lcov-report/packages/badge/src/badge-group.vue.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/badge/src/badge-group.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/badge/src/</a> badge-group.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">66.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/2</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-&nbsp;
-export default <span class="fstat-no" title="function not covered" >{</span>
-  name: 'zan-badge-group',
-&nbsp;
-  props: {
-    // 当前激活 tab 面板的 key
-    activeKey: {
-      type: [Number, String],
-      default: 0
-    }
-  },
-&nbsp;
-  data() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn {
-      computedActiveKey: this.activeKey
-    };
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/src/badge.vue.html b/test/unit/coverage/lcov-report/packages/badge/src/badge.vue.html
deleted file mode 100644
index abd2bd7b5..000000000
--- a/test/unit/coverage/lcov-report/packages/badge/src/badge.vue.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/badge/src/badge.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/badge/src/</a> badge.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">33.33% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/3</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-badge',
-  props: {
-    mark: {
-      type: [Number, String],
-      required: true
-    },
-    title: {
-      type: String,
-      required: true
-    },
-    url: {
-      type: String
-    },
-    info: {
-      type: String
-    }
-  },
-  methods: <span class="fstat-no" title="function not covered" >{</span>
-    handleClick() {
-<span class="cstat-no" title="statement not covered" >      t</span>his.$parent.computedActiveKey = this.mark;
-    }
-  },
-  computed: <span class="fstat-no" title="function not covered" >{</span>
-    classNames() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn {
-        'is-select': this.mark === this.$parent.computedActiveKey
-      };
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/badge/src/index.html b/test/unit/coverage/lcov-report/packages/badge/src/index.html
deleted file mode 100644
index b431285ed..000000000
--- a/test/unit/coverage/lcov-report/packages/badge/src/index.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/badge/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/badge/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">57.14% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>4/7</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">40% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/5</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file medium" data-value="badge-group.vue"><a href="badge-group.vue.html">badge-group.vue</a></td>
-	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
-	<td data-value="66.67" class="pct medium">66.67%</td>
-	<td data-value="3" class="abs medium">2/3</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
-	</tr>
-
-<tr>
-	<td class="file medium" data-value="badge.vue"><a href="badge.vue.html">badge.vue</a></td>
-	<td data-value="50" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 50%;"></div><div class="cover-empty" style="width:50%;"></div></div></td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="4" class="abs medium">2/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="2" class="abs low">0/2</td>
-	<td data-value="33.33" class="pct low">33.33%</td>
-	<td data-value="3" class="abs low">1/3</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/button/index.html b/test/unit/coverage/lcov-report/packages/button/index.html
deleted file mode 100644
index e03d01426..000000000
--- a/test/unit/coverage/lcov-report/packages/button/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/button/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/button/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/button/index.js.html b/test/unit/coverage/lcov-report/packages/button/index.js.html
deleted file mode 100644
index a891cd3c8..000000000
--- a/test/unit/coverage/lcov-report/packages/button/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/button/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/button/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Button from './src/button';
-&nbsp;
-export default Button;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/button/src/button.js.html b/test/unit/coverage/lcov-report/packages/button/src/button.js.html
deleted file mode 100644
index 676da2ce9..000000000
--- a/test/unit/coverage/lcov-report/packages/button/src/button.js.html
+++ /dev/null
@@ -1,302 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/button/src/button.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/button/src/</a> button.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">40% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>4/10</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">33.33% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>3/9</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
- * @module components/button
- * @desc 按钮
- * @param {string} [type=default] - 显示类型,接受 default, primary, danger
- * @param {boolean} [disabled=false] - 禁用
- * @param {string} [size=normal] - 尺寸,接受 normal, mini, small, large
- * @param {string} [native-type] - 原生 type 属性
- * @param {slot} - 显示文本
- *
- * @example
- * &lt;zan-button size="large" type="primary"&gt;按钮&lt;/zan-button&gt;
- */
-&nbsp;
-const allowedSize = ['mini', 'small', 'normal', 'large'];
-const allowedType = ['default', 'danger', 'primary'];
-&nbsp;
-export default <span class="fstat-no" title="function not covered" >{</span>
-  name: 'zan-button',
-&nbsp;
-  props: {
-    disabled: Boolean,
-    loading: Boolean,
-    block: Boolean,
-    tag: {
-      type: String,
-      default: 'button'
-    },
-    nativeType: String,
-    type: <span class="fstat-no" title="function not covered" >{</span>
-      type: String,
-      default: 'default',
-      validator(value) {
-<span class="cstat-no" title="statement not covered" >        r</span>eturn allowedType.indexOf(value) &gt; -1;
-      }
-    },
-    size: <span class="fstat-no" title="function not covered" >{</span>
-      type: String,
-      default: 'normal',
-      validator(value) {
-<span class="cstat-no" title="statement not covered" >        r</span>eturn allowedSize.indexOf(value) &gt; -1;
-      }
-    }
-  },
-&nbsp;
-  methods: <span class="fstat-no" title="function not covered" >{</span>
-    handleClick() {
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('click');
-    }
-  },
-&nbsp;
-  render(h) <span class="cstat-no" title="statement not covered" >{</span>
-    let { type, nativeType, size, disabled, loading, block } = this;
-<span class="cstat-no" title="statement not covered" >    l</span>et Tag = this.tag;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    r</span>eturn (
-      &lt;Tag
-        type={nativeType}
-        disabled={disabled}
-        class={[
-          'zan-button',
-          'zan-button--' + type,
-          'zan-button--' + size,
-          {
-            'is-disabled': disabled,
-            'is-loading': loading,
-            'is-block': block
-          }
-        ]}
-        onClick={this.handleClick}
-      &gt;
-        {
-          loading ? &lt;i class="zan-icon-loading"&gt;&lt;/i&gt; : null
-        }
-        &lt;span class="zan-button-text"&gt;{this.$slots.default}&lt;/span&gt;
-      &lt;/Tag&gt;
-    );
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/button/src/index.html b/test/unit/coverage/lcov-report/packages/button/src/index.html
deleted file mode 100644
index 9bff78423..000000000
--- a/test/unit/coverage/lcov-report/packages/button/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/button/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/button/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">40% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>4/10</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">33.33% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>3/9</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="button.js"><a href="button.js.html">button.js</a></td>
-	<td data-value="40" class="pic low"><div class="chart"><div class="cover-fill" style="width: 40%;"></div><div class="cover-empty" style="width:60%;"></div></div></td>
-	<td data-value="40" class="pct low">40%</td>
-	<td data-value="10" class="abs low">4/10</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="2" class="abs low">0/2</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="4" class="abs low">0/4</td>
-	<td data-value="33.33" class="pct low">33.33%</td>
-	<td data-value="9" class="abs low">3/9</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/card/index.html b/test/unit/coverage/lcov-report/packages/card/index.html
deleted file mode 100644
index a60358497..000000000
--- a/test/unit/coverage/lcov-report/packages/card/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/card/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/card/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/card/index.js.html b/test/unit/coverage/lcov-report/packages/card/index.js.html
deleted file mode 100644
index 7d02bab64..000000000
--- a/test/unit/coverage/lcov-report/packages/card/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/card/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/card/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Card from './src/card';
-&nbsp;
-export default Card;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/card/src/card.vue.html b/test/unit/coverage/lcov-report/packages/card/src/card.vue.html
deleted file mode 100644
index 09eb2fbdf..000000000
--- a/test/unit/coverage/lcov-report/packages/card/src/card.vue.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/card/src/card.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/card/src/</a> card.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-card',
-  props: {
-    thumb: {
-      type: String,
-      required: true
-    },
-    title: String,
-    desc: String
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/card/src/index.html b/test/unit/coverage/lcov-report/packages/card/src/index.html
deleted file mode 100644
index deedafc4b..000000000
--- a/test/unit/coverage/lcov-report/packages/card/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/card/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/card/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="card.vue"><a href="card.vue.html">card.vue</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell-group/index.html b/test/unit/coverage/lcov-report/packages/cell-group/index.html
deleted file mode 100644
index 91a17243e..000000000
--- a/test/unit/coverage/lcov-report/packages/cell-group/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/cell-group/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/cell-group/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell-group/index.js.html b/test/unit/coverage/lcov-report/packages/cell-group/index.js.html
deleted file mode 100644
index 26ffb57e6..000000000
--- a/test/unit/coverage/lcov-report/packages/cell-group/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/cell-group/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/cell-group/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import CellGroup from '../cell/src/cell-group';
-&nbsp;
-export default CellGroup;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/index.html b/test/unit/coverage/lcov-report/packages/cell/index.html
deleted file mode 100644
index eb1dafbcc..000000000
--- a/test/unit/coverage/lcov-report/packages/cell/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/cell/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/cell/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/index.js.html b/test/unit/coverage/lcov-report/packages/cell/index.js.html
deleted file mode 100644
index 141a3d317..000000000
--- a/test/unit/coverage/lcov-report/packages/cell/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/cell/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/cell/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Cell from './src/cell';
-&nbsp;
-export default Cell;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/src/cell-group.vue.html b/test/unit/coverage/lcov-report/packages/cell/src/cell-group.vue.html
deleted file mode 100644
index 4cce02ecf..000000000
--- a/test/unit/coverage/lcov-report/packages/cell/src/cell-group.vue.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/cell/src/cell-group.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/cell/src/</a> cell-group.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-cell-group'
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/src/cell.vue.html b/test/unit/coverage/lcov-report/packages/cell/src/cell.vue.html
deleted file mode 100644
index 1774657da..000000000
--- a/test/unit/coverage/lcov-report/packages/cell/src/cell.vue.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/cell/src/cell.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/cell/src/</a> cell.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">66.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/2</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-cell',
-&nbsp;
-  props: {
-    icon: String,
-    title: String,
-    value: [String, Number],
-    url: String,
-    label: String,
-    isLink: Boolean
-  },
-&nbsp;
-  methods: <span class="fstat-no" title="function not covered" >{</span>
-    handleClick() {
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('click');
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/cell/src/index.html b/test/unit/coverage/lcov-report/packages/cell/src/index.html
deleted file mode 100644
index 4e8fcda23..000000000
--- a/test/unit/coverage/lcov-report/packages/cell/src/index.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/cell/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/cell/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">80% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>4/5</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">66.67% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/3</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="cell-group.vue"><a href="cell-group.vue.html">cell-group.vue</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-<tr>
-	<td class="file medium" data-value="cell.vue"><a href="cell.vue.html">cell.vue</a></td>
-	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
-	<td data-value="66.67" class="pct medium">66.67%</td>
-	<td data-value="3" class="abs medium">2/3</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox-group/index.html b/test/unit/coverage/lcov-report/packages/checkbox-group/index.html
deleted file mode 100644
index 15eedd98f..000000000
--- a/test/unit/coverage/lcov-report/packages/checkbox-group/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/checkbox-group/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/checkbox-group/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox-group/index.js.html b/test/unit/coverage/lcov-report/packages/checkbox-group/index.js.html
deleted file mode 100644
index 67e899dbd..000000000
--- a/test/unit/coverage/lcov-report/packages/checkbox-group/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/checkbox-group/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/checkbox-group/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import CheckboxGroup from 'packages/checkbox/src/checkbox-group';
-&nbsp;
-export default CheckboxGroup;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/index.html b/test/unit/coverage/lcov-report/packages/checkbox/index.html
deleted file mode 100644
index 08df8d036..000000000
--- a/test/unit/coverage/lcov-report/packages/checkbox/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/checkbox/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/checkbox/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/index.js.html b/test/unit/coverage/lcov-report/packages/checkbox/index.js.html
deleted file mode 100644
index c8bd93f68..000000000
--- a/test/unit/coverage/lcov-report/packages/checkbox/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/checkbox/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/checkbox/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Checkbox from './src/checkbox';
-&nbsp;
-export default Checkbox;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox-group.vue.html b/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox-group.vue.html
deleted file mode 100644
index fc19bb7b8..000000000
--- a/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox-group.vue.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/checkbox/src/checkbox-group.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/checkbox/src/</a> checkbox-group.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">66.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/2</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-checkbox-group',
-&nbsp;
-  props: {
-    value: {},
-    disabled: Boolean
-  },
-&nbsp;
-  watch: <span class="fstat-no" title="function not covered" >{</span>
-    value(val) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('change', val);
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox.vue.html b/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox.vue.html
deleted file mode 100644
index aafa68979..000000000
--- a/test/unit/coverage/lcov-report/packages/checkbox/src/checkbox.vue.html
+++ /dev/null
@@ -1,360 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/checkbox/src/checkbox.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/checkbox/src/</a> checkbox.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">25% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/24</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.29% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/28</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/20</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-import findParent from 'src/mixins/findParent';
-&nbsp;
-export default {
-  name: 'zan-checkbox',
-&nbsp;
-  mixins: [findParent],
-&nbsp;
-  props: {
-    disabled: Boolean,
-    value: {},
-    name: [String, Number]
-  },
-&nbsp;
-  computed: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
-    /**
-     * `checkbox`是否在`zan-checkbox-group`中
-     */
-    isGroup() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn !!this.findParentByComponentName('zan-checkbox-group');
-    },
-&nbsp;
-    /**
-     * `checkbox`当前值
-     */
-    currentValue: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
-      get() {
-<span class="cstat-no" title="statement not covered" >        r</span>eturn this.isGroup &amp;&amp; this.parentGroup ? this.parentGroup.value.indexOf(this.name) !== -1 : this.value;
-      },
-&nbsp;
-      set(val) {
-<span class="cstat-no" title="statement not covered" >        if (this.isGroup &amp;&amp; this.parentGroup) {</span>
-<span class="cstat-no" title="statement not covered" >          l</span>et parentValue = this.parentGroup.value.slice();
-<span class="cstat-no" title="statement not covered" >          if (val) {</span>
-<span class="cstat-no" title="statement not covered" >            if (parentValue.indexOf(this.name) === -1) {</span>
-<span class="cstat-no" title="statement not covered" >              p</span>arentValue.push(this.name);
-<span class="cstat-no" title="statement not covered" >              t</span>his.parentGroup.$emit('input', parentValue);
-            }
-          } else {
-<span class="cstat-no" title="statement not covered" >            l</span>et index = parentValue.indexOf(this.name);
-<span class="cstat-no" title="statement not covered" >            if (index !== -1) {</span>
-<span class="cstat-no" title="statement not covered" >              p</span>arentValue.splice(index, 1);
-<span class="cstat-no" title="statement not covered" >              t</span>his.parentGroup.$emit('input', parentValue);
-            }
-          }
-        } else {
-<span class="cstat-no" title="statement not covered" >          t</span>his.$emit('input', val);
-        }
-      }
-    },
-&nbsp;
-    /**
-     * `checkbox`是否被选中
-     */
-    isChecked() {
-<span class="cstat-no" title="statement not covered" >      if ({}.toString.call(this.currentValue) === '[object Boolean]') {</span>
-<span class="cstat-no" title="statement not covered" >        r</span>eturn this.currentValue;
-      } else <span class="cstat-no" title="statement not covered" >if (Array.isArray(this.currentValue)) {</span>
-<span class="cstat-no" title="statement not covered" >        r</span>eturn this.currentValue.indexOf(this.name) &gt; -1;
-      }
-    },
-&nbsp;
-    /**
-     * `checkbox`是否被禁用
-     */
-    isDisabled() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.isGroup &amp;&amp; this.parentGroup
-          ? this.parentGroup.disabled || this.disabled
-          : this.disabled;
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/checkbox/src/index.html b/test/unit/coverage/lcov-report/packages/checkbox/src/index.html
deleted file mode 100644
index 13b5cc3f2..000000000
--- a/test/unit/coverage/lcov-report/packages/checkbox/src/index.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/checkbox/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/checkbox/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">29.63% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>8/27</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.29% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/28</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.29% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/7</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">13.64% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>3/22</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file medium" data-value="checkbox-group.vue"><a href="checkbox-group.vue.html">checkbox-group.vue</a></td>
-	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
-	<td data-value="66.67" class="pct medium">66.67%</td>
-	<td data-value="3" class="abs medium">2/3</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="checkbox.vue"><a href="checkbox.vue.html">checkbox.vue</a></td>
-	<td data-value="25" class="pic low"><div class="chart"><div class="cover-fill" style="width: 25%;"></div><div class="cover-empty" style="width:75%;"></div></div></td>
-	<td data-value="25" class="pct low">25%</td>
-	<td data-value="24" class="abs low">6/24</td>
-	<td data-value="14.29" class="pct low">14.29%</td>
-	<td data-value="28" class="abs low">4/28</td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="6" class="abs low">1/6</td>
-	<td data-value="10" class="pct low">10%</td>
-	<td data-value="20" class="abs low">2/20</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/index.html b/test/unit/coverage/lcov-report/packages/dialog/index.html
deleted file mode 100644
index e761cfa09..000000000
--- a/test/unit/coverage/lcov-report/packages/dialog/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/dialog/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/dialog/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/index.js.html b/test/unit/coverage/lcov-report/packages/dialog/index.js.html
deleted file mode 100644
index cd5301790..000000000
--- a/test/unit/coverage/lcov-report/packages/dialog/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/dialog/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/dialog/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Dialog from './src/dialog.js';
-&nbsp;
-export default Dialog;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/src/dialog.js.html b/test/unit/coverage/lcov-report/packages/dialog/src/dialog.js.html
deleted file mode 100644
index 05fcdf50f..000000000
--- a/test/unit/coverage/lcov-report/packages/dialog/src/dialog.js.html
+++ /dev/null
@@ -1,362 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/dialog/src/dialog.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/dialog/src/</a> dialog.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">42.59% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>23/54</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">15.38% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/26</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/10</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">32.61% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>15/46</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Vue from 'vue';
-import Dialog from './dialog.vue';
-import merge from 'src/utils/merge';
-&nbsp;
-const DialogConstructor = Vue.extend(Dialog);
-&nbsp;
-let currentDialog;
-let instance;
-let dialogQueue = [];
-&nbsp;
-const defaultCallback = <span class="fstat-no" title="function not covered" >action =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  if (currentDialog) {</span>
-<span class="cstat-no" title="statement not covered" >    l</span>et callback = currentDialog.callback;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (typeof callback === 'function') {</span>
-<span class="cstat-no" title="statement not covered" >      c</span>allback(action);
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (currentDialog.resolve &amp;&amp; action === 'confirm') {</span>
-<span class="cstat-no" title="statement not covered" >      c</span>urrentDialog.resolve(action);
-    } else <span class="cstat-no" title="statement not covered" >if (currentDialog.reject &amp;&amp; action === 'cancel') {</span>
-<span class="cstat-no" title="statement not covered" >      c</span>urrentDialog.reject(action);
-    }
-  }
-};
-&nbsp;
-const initInstance = <span class="fstat-no" title="function not covered" >() =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  i</span>nstance = new DialogConstructor({
-    el: document.createElement('div')
-  });
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  i</span>nstance.callback = defaultCallback;
-};
-&nbsp;
-const showNextDialog = <span class="fstat-no" title="function not covered" >() =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  if (!instance) {</span>
-<span class="cstat-no" title="statement not covered" >    i</span>nitInstance();
-  }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  if (!instance.value &amp;&amp; dialogQueue.length &gt; 0) {</span>
-<span class="cstat-no" title="statement not covered" >    c</span>urrentDialog = dialogQueue.shift();
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    l</span>et options = currentDialog.options;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    for (let prop in options) {</span>
-<span class="cstat-no" title="statement not covered" >      if (options.hasOwnProperty(prop)) {</span>
-<span class="cstat-no" title="statement not covered" >        i</span>nstance[prop] = options[prop];
-      }
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (options.callback === undefined) {</span>
-<span class="cstat-no" title="statement not covered" >      i</span>nstance.callback = defaultCallback;
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    d</span>ocument.body.appendChild(instance.$el);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    V</span>ue.nextTick(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >      i</span>nstance.value = true;
-    });
-  }
-};
-&nbsp;
-var DialogBox = <span class="fstat-no" title="function not covered" >options =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  r</span>eturn new Promise(<span class="fstat-no" title="function not covered" >(resolve, reject) =&gt; {</span> // eslint-disable-line
-<span class="cstat-no" title="statement not covered" >    d</span>ialogQueue.push({
-      options: merge({}, options),
-      callback: options.callback,
-      resolve: resolve,
-      reject: reject
-    });
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    s</span>howNextDialog();
-  });
-};
-&nbsp;
-DialogBox.alert = <span class="fstat-no" title="function not covered" >function(options) {</span>
-<span class="cstat-no" title="statement not covered" >  r</span>eturn DialogBox(merge({
-    type: 'alert',
-    closeOnClickOverlay: false,
-    showCancelButton: false
-  }, options));
-};
-&nbsp;
-DialogBox.confirm = <span class="fstat-no" title="function not covered" >function(options) {</span>
-<span class="cstat-no" title="statement not covered" >  r</span>eturn DialogBox(merge({
-    type: 'confirm',
-    closeOnClickOverlay: true,
-    showCancelButton: true
-  }, options));
-};
-&nbsp;
-DialogBox.close = <span class="fstat-no" title="function not covered" >function() {</span>
-<span class="cstat-no" title="statement not covered" >  i</span>nstance.value = false;
-<span class="cstat-no" title="statement not covered" >  d</span>ialogQueue = [];
-<span class="cstat-no" title="statement not covered" >  c</span>urrentDialog = null;
-};
-&nbsp;
-export default DialogBox;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/src/dialog.vue.html b/test/unit/coverage/lcov-report/packages/dialog/src/dialog.vue.html
deleted file mode 100644
index a651aa723..000000000
--- a/test/unit/coverage/lcov-report/packages/dialog/src/dialog.vue.html
+++ /dev/null
@@ -1,324 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/dialog/src/dialog.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/dialog/src/</a> dialog.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">32% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>8/25</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">28.57% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/14</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/5</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">15.79% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>3/19</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-import Popup from 'src/mixins/popup';
-&nbsp;
-const CANCEL_TEXT = '取消';
-const CONFIRM_TEXT = '确认';
-&nbsp;
-export default <span class="fstat-no" title="function not covered" >{</span>
-  name: 'zan-dialog',
-&nbsp;
-  mixins: [Popup],
-&nbsp;
-  props: {
-    overlay: {
-      default: true
-    },
-    closeOnClickOverlay: {
-      default: true
-    },
-    lockOnScroll: {
-      default: true
-    }
-  },
-&nbsp;
-  data() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn {
-      title: '',
-      message: '',
-      type: '',
-      showConfirmButton: true,
-      showCancelButton: false,
-      confirmButtonText: CONFIRM_TEXT,
-      cancelButtonText: CANCEL_TEXT,
-      callback: null
-    };
-  },
-&nbsp;
-  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
-    handleAction(action) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.value = false;
-<span class="cstat-no" title="statement not covered" >      t</span>his.callback &amp;&amp; this.callback(action);
-    },
-&nbsp;
-    close() <span class="cstat-no" title="statement not covered" >{</span>
-<span class="cstat-no" title="statement not covered" >      if (this.closing) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.closing = true;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.value = false;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      if (this.lockOnScroll) {</span>
-<span class="cstat-no" title="statement not covered" >        s</span>etTimeout(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >          if (this.modal &amp;&amp; this.bodyOverflow !== 'hidden') {</span>
-<span class="cstat-no" title="statement not covered" >            d</span>ocument.body.style.overflow = this.bodyOverflow;
-<span class="cstat-no" title="statement not covered" >            d</span>ocument.body.style.paddingRight = this.bodyPaddingRight;
-          }
-<span class="cstat-no" title="statement not covered" >          t</span>his.bodyOverflow = null;
-<span class="cstat-no" title="statement not covered" >          t</span>his.bodyPaddingRight = null;
-        }, 200);
-      }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.opened = false;
-<span class="cstat-no" title="statement not covered" >      t</span>his.doAfterClose();
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/dialog/src/index.html b/test/unit/coverage/lcov-report/packages/dialog/src/index.html
deleted file mode 100644
index 88c758237..000000000
--- a/test/unit/coverage/lcov-report/packages/dialog/src/index.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/dialog/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/dialog/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">39.24% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>31/79</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>8/40</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">13.33% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>2/15</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">27.69% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>18/65</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="dialog.js"><a href="dialog.js.html">dialog.js</a></td>
-	<td data-value="42.59" class="pic low"><div class="chart"><div class="cover-fill" style="width: 42%;"></div><div class="cover-empty" style="width:58%;"></div></div></td>
-	<td data-value="42.59" class="pct low">42.59%</td>
-	<td data-value="54" class="abs low">23/54</td>
-	<td data-value="15.38" class="pct low">15.38%</td>
-	<td data-value="26" class="abs low">4/26</td>
-	<td data-value="10" class="pct low">10%</td>
-	<td data-value="10" class="abs low">1/10</td>
-	<td data-value="32.61" class="pct low">32.61%</td>
-	<td data-value="46" class="abs low">15/46</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="dialog.vue"><a href="dialog.vue.html">dialog.vue</a></td>
-	<td data-value="32" class="pic low"><div class="chart"><div class="cover-fill" style="width: 32%;"></div><div class="cover-empty" style="width:68%;"></div></div></td>
-	<td data-value="32" class="pct low">32%</td>
-	<td data-value="25" class="abs low">8/25</td>
-	<td data-value="28.57" class="pct low">28.57%</td>
-	<td data-value="14" class="abs low">4/14</td>
-	<td data-value="20" class="pct low">20%</td>
-	<td data-value="5" class="abs low">1/5</td>
-	<td data-value="15.79" class="pct low">15.79%</td>
-	<td data-value="19" class="abs low">3/19</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/field/index.html b/test/unit/coverage/lcov-report/packages/field/index.html
deleted file mode 100644
index b68a46141..000000000
--- a/test/unit/coverage/lcov-report/packages/field/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/field/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/field/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/field/index.js.html b/test/unit/coverage/lcov-report/packages/field/index.js.html
deleted file mode 100644
index e22067ecf..000000000
--- a/test/unit/coverage/lcov-report/packages/field/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/field/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/field/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Field from './src/field';
-&nbsp;
-export default Field;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/field/src/field.vue.html b/test/unit/coverage/lcov-report/packages/field/src/field.vue.html
deleted file mode 100644
index 8d8018e59..000000000
--- a/test/unit/coverage/lcov-report/packages/field/src/field.vue.html
+++ /dev/null
@@ -1,306 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/field/src/field.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/field/src/</a> field.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">54.55% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/11</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/5</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">28.57% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/7</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-import zCell from 'packages/cell';
-&nbsp;
-export default <span class="fstat-no" title="function not covered" >{</span>
-  name: 'zan-field',
-&nbsp;
-  components: {
-    zCell
-  },
-&nbsp;
-  props: {
-    type: {
-      type: String,
-      default: 'text'
-    },
-    placeholder: String,
-    value: String,
-    label: String,
-    disabled: Boolean,
-    readonly: Boolean,
-    maxlength: [String, Number]
-  },
-&nbsp;
-  data() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn {
-      currentValue: this.value
-    };
-  },
-&nbsp;
-  watch: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
-    value(val) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.currentValue = val;
-    },
-&nbsp;
-    currentValue(val) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', val);
-<span class="cstat-no" title="statement not covered" >      c</span>onsole.log(val);
-    }
-  },
-&nbsp;
-  methods: <span class="fstat-no" title="function not covered" >{</span>
-    handleInput(event) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.currentValue = event.target.value;
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/field/src/index.html b/test/unit/coverage/lcov-report/packages/field/src/index.html
deleted file mode 100644
index 7fbe868c5..000000000
--- a/test/unit/coverage/lcov-report/packages/field/src/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/field/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/field/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">54.55% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/11</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/5</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">28.57% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/7</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file medium" data-value="field.vue"><a href="field.vue.html">field.vue</a></td>
-	<td data-value="54.55" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 54%;"></div><div class="cover-empty" style="width:46%;"></div></div></td>
-	<td data-value="54.55" class="pct medium">54.55%</td>
-	<td data-value="11" class="abs medium">6/11</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="20" class="pct low">20%</td>
-	<td data-value="5" class="abs low">1/5</td>
-	<td data-value="28.57" class="pct low">28.57%</td>
-	<td data-value="7" class="abs low">2/7</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/icon/index.html b/test/unit/coverage/lcov-report/packages/icon/index.html
deleted file mode 100644
index 0055d9d70..000000000
--- a/test/unit/coverage/lcov-report/packages/icon/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/icon/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/icon/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/icon/index.js.html b/test/unit/coverage/lcov-report/packages/icon/index.js.html
deleted file mode 100644
index 92adb0fd6..000000000
--- a/test/unit/coverage/lcov-report/packages/icon/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/icon/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/icon/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Icon from './src/icon';
-&nbsp;
-export default Icon;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/icon/src/icon.vue.html b/test/unit/coverage/lcov-report/packages/icon/src/icon.vue.html
deleted file mode 100644
index 7c3d75de6..000000000
--- a/test/unit/coverage/lcov-report/packages/icon/src/icon.vue.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/icon/src/icon.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/icon/src/</a> icon.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-icon',
-&nbsp;
-  props: {
-    name: String
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/icon/src/index.html b/test/unit/coverage/lcov-report/packages/icon/src/index.html
deleted file mode 100644
index bb439e11e..000000000
--- a/test/unit/coverage/lcov-report/packages/icon/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/icon/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/icon/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="icon.vue"><a href="icon.vue.html">icon.vue</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/loading/index.html b/test/unit/coverage/lcov-report/packages/loading/index.html
deleted file mode 100644
index 1adb2d97c..000000000
--- a/test/unit/coverage/lcov-report/packages/loading/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/loading/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/loading/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/loading/index.js.html b/test/unit/coverage/lcov-report/packages/loading/index.js.html
deleted file mode 100644
index 8f350be67..000000000
--- a/test/unit/coverage/lcov-report/packages/loading/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/loading/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/loading/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Loading from './src/loading';
-&nbsp;
-export default Loading;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/loading/src/index.html b/test/unit/coverage/lcov-report/packages/loading/src/index.html
deleted file mode 100644
index bbc06cde7..000000000
--- a/test/unit/coverage/lcov-report/packages/loading/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/loading/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/loading/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="loading.vue"><a href="loading.vue.html">loading.vue</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/loading/src/loading.vue.html b/test/unit/coverage/lcov-report/packages/loading/src/loading.vue.html
deleted file mode 100644
index 13c5feade..000000000
--- a/test/unit/coverage/lcov-report/packages/loading/src/loading.vue.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/loading/src/loading.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/loading/src/</a> loading.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-loading'
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/panel/index.html b/test/unit/coverage/lcov-report/packages/panel/index.html
deleted file mode 100644
index fa18df8d7..000000000
--- a/test/unit/coverage/lcov-report/packages/panel/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/panel/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/panel/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/panel/index.js.html b/test/unit/coverage/lcov-report/packages/panel/index.js.html
deleted file mode 100644
index 8155203bb..000000000
--- a/test/unit/coverage/lcov-report/packages/panel/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/panel/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/panel/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Panel from './src/panel';
-&nbsp;
-export default Panel;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/panel/src/index.html b/test/unit/coverage/lcov-report/packages/panel/src/index.html
deleted file mode 100644
index aa2b0c8bc..000000000
--- a/test/unit/coverage/lcov-report/packages/panel/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/panel/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/panel/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="panel.vue"><a href="panel.vue.html">panel.vue</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/panel/src/panel.vue.html b/test/unit/coverage/lcov-report/packages/panel/src/panel.vue.html
deleted file mode 100644
index cf38b984c..000000000
--- a/test/unit/coverage/lcov-report/packages/panel/src/panel.vue.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/panel/src/panel.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/panel/src/</a> panel.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-panel',
-  props: {
-    title: String,
-    desc: String,
-    status: String
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/index.html b/test/unit/coverage/lcov-report/packages/picker/index.html
deleted file mode 100644
index dedc11366..000000000
--- a/test/unit/coverage/lcov-report/packages/picker/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/picker/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/picker/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/index.js.html b/test/unit/coverage/lcov-report/packages/picker/index.js.html
deleted file mode 100644
index e79a15632..000000000
--- a/test/unit/coverage/lcov-report/packages/picker/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/picker/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/picker/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Picker from './src/picker';
-&nbsp;
-export default Picker;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/src/draggable.js.html b/test/unit/coverage/lcov-report/packages/picker/src/draggable.js.html
deleted file mode 100644
index 85929c8e8..000000000
--- a/test/unit/coverage/lcov-report/packages/picker/src/draggable.js.html
+++ /dev/null
@@ -1,225 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/picker/src/draggable.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/picker/src/</a> draggable.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">21.05% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>8/38</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">17.65% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>6/34</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.29% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/7</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">12.9% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>4/31</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Vue from 'vue';
-&nbsp;
-let isDragging = false;
-&nbsp;
-const supportTouch = !Vue.prototype.$isServer &amp;&amp; 'ontouchstart' in window;
-&nbsp;
-export default <span class="fstat-no" title="function not covered" >function(element, options) {</span>
-<span class="cstat-no" title="statement not covered" >  c</span>onst moveFn = <span class="fstat-no" title="function not covered" >function(event) {</span>
-<span class="cstat-no" title="statement not covered" >    if (options.drag) {</span>
-<span class="cstat-no" title="statement not covered" >      o</span>ptions.drag(supportTouch ? event.changedTouches[0] || event.touches[0] : event);
-    }
-  };
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  c</span>onst endFn = <span class="fstat-no" title="function not covered" >function(event) {</span>
-<span class="cstat-no" title="statement not covered" >    if (!supportTouch) {</span>
-<span class="cstat-no" title="statement not covered" >      d</span>ocument.removeEventListener('mousemove', moveFn);
-<span class="cstat-no" title="statement not covered" >      d</span>ocument.removeEventListener('mouseup', endFn);
-    }
-<span class="cstat-no" title="statement not covered" >    d</span>ocument.onselectstart = null;
-<span class="cstat-no" title="statement not covered" >    d</span>ocument.ondragstart = null;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    i</span>sDragging = false;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (options.end) {</span>
-<span class="cstat-no" title="statement not covered" >      o</span>ptions.end(supportTouch ? event.changedTouches[0] || event.touches[0] : event);
-    }
-  };
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  e</span>lement.addEventListener(supportTouch ? 'touchstart' : 'mousedown', <span class="fstat-no" title="function not covered" >function(event) {</span>
-<span class="cstat-no" title="statement not covered" >    if (isDragging) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-<span class="cstat-no" title="statement not covered" >    d</span>ocument.onselectstart = <span class="fstat-no" title="function not covered" >function() {</span> <span class="cstat-no" title="statement not covered" >r</span>eturn false; };
-<span class="cstat-no" title="statement not covered" >    d</span>ocument.ondragstart = <span class="fstat-no" title="function not covered" >function() {</span> <span class="cstat-no" title="statement not covered" >r</span>eturn false; };
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (!supportTouch) {</span>
-<span class="cstat-no" title="statement not covered" >      d</span>ocument.addEventListener('mousemove', moveFn);
-<span class="cstat-no" title="statement not covered" >      d</span>ocument.addEventListener('mouseup', endFn);
-    }
-<span class="cstat-no" title="statement not covered" >    i</span>sDragging = true;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (options.start) {</span>
-<span class="cstat-no" title="statement not covered" >      e</span>vent.preventDefault();
-<span class="cstat-no" title="statement not covered" >      o</span>ptions.start(supportTouch ? event.changedTouches[0] || event.touches[0] : event);
-    }
-  });
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  if (supportTouch) {</span>
-<span class="cstat-no" title="statement not covered" >    e</span>lement.addEventListener('touchmove', moveFn);
-<span class="cstat-no" title="statement not covered" >    e</span>lement.addEventListener('touchend', endFn);
-<span class="cstat-no" title="statement not covered" >    e</span>lement.addEventListener('touchcancel', endFn);
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/src/index.html b/test/unit/coverage/lcov-report/packages/picker/src/index.html
deleted file mode 100644
index e9999e6ac..000000000
--- a/test/unit/coverage/lcov-report/packages/picker/src/index.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/picker/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/picker/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>24/144</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>14/70</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">7.5% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>3/40</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">7.94% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>10/126</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">3 branches</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="draggable.js"><a href="draggable.js.html">draggable.js</a></td>
-	<td data-value="21.05" class="pic low"><div class="chart"><div class="cover-fill" style="width: 21%;"></div><div class="cover-empty" style="width:79%;"></div></div></td>
-	<td data-value="21.05" class="pct low">21.05%</td>
-	<td data-value="38" class="abs low">8/38</td>
-	<td data-value="17.65" class="pct low">17.65%</td>
-	<td data-value="34" class="abs low">6/34</td>
-	<td data-value="14.29" class="pct low">14.29%</td>
-	<td data-value="7" class="abs low">1/7</td>
-	<td data-value="12.9" class="pct low">12.9%</td>
-	<td data-value="31" class="abs low">4/31</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="picker-column.vue"><a href="picker-column.vue.html">picker-column.vue</a></td>
-	<td data-value="12" class="pic low"><div class="chart"><div class="cover-fill" style="width: 12%;"></div><div class="cover-empty" style="width:88%;"></div></div></td>
-	<td data-value="12" class="pct low">12%</td>
-	<td data-value="75" class="abs low">9/75</td>
-	<td data-value="22.22" class="pct low">22.22%</td>
-	<td data-value="18" class="abs low">4/18</td>
-	<td data-value="5.26" class="pct low">5.26%</td>
-	<td data-value="19" class="abs low">1/19</td>
-	<td data-value="5.71" class="pct low">5.71%</td>
-	<td data-value="70" class="abs low">4/70</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="picker.vue"><a href="picker.vue.html">picker.vue</a></td>
-	<td data-value="22.58" class="pic low"><div class="chart"><div class="cover-fill" style="width: 22%;"></div><div class="cover-empty" style="width:78%;"></div></div></td>
-	<td data-value="22.58" class="pct low">22.58%</td>
-	<td data-value="31" class="abs low">7/31</td>
-	<td data-value="22.22" class="pct low">22.22%</td>
-	<td data-value="18" class="abs low">4/18</td>
-	<td data-value="7.14" class="pct low">7.14%</td>
-	<td data-value="14" class="abs low">1/14</td>
-	<td data-value="8" class="pct low">8%</td>
-	<td data-value="25" class="abs low">2/25</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/src/picker-column.vue.html b/test/unit/coverage/lcov-report/packages/picker/src/picker-column.vue.html
deleted file mode 100644
index c31be9388..000000000
--- a/test/unit/coverage/lcov-report/packages/picker/src/picker-column.vue.html
+++ /dev/null
@@ -1,792 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/picker/src/picker-column.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/picker/src/</a> picker-column.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">12% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>9/75</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">22.22% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/18</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">5.26% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/19</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">5.71% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>4/70</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-import translateUtil from 'src/utils/transition';
-import draggable from './draggable';
-&nbsp;
-const DEFAULT_ITEM_HEIGHT = 44;
-&nbsp;
-export default <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
-  name: 'zan-picker-column',
-&nbsp;
-  props: {
-    /**
-     * 每一列可见备选元素的个数
-     */
-    visibileColumnCount: {
-      type: Number,
-      default: 5
-    },
-    /**
-     * 该列所有的可选值
-     */
-    values: <span class="fstat-no" title="function not covered" >{</span>
-      type: Array,
-      default() {
-<span class="cstat-no" title="statement not covered" >        r</span>eturn [];
-      }
-    },
-    /**
-     * 每列添加额外的`className`
-     */
-    className: {
-      type: String,
-      default: ''
-    },
-    /**
-     * 行高
-     */
-    itemHeight: {
-      type: Number,
-      default: DEFAULT_ITEM_HEIGHT
-    },
-    value: {}
-  },
-&nbsp;
-  data() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn {
-      currentValue: this.value,
-      currentValues: this.values,
-      isDragging: false
-    };
-  },
-&nbsp;
-  watch: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
-    values(val) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.currentValues = val;
-    },
-&nbsp;
-    currentValues(val) {
-<span class="cstat-no" title="statement not covered" >      if (this.valueIndex === -1) {</span>
-<span class="cstat-no" title="statement not covered" >        t</span>his.currentValue = (val || [])[0];
-      }
-    },
-&nbsp;
-    currentValue(val) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.doOnValueChange();
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('change', this);
-    }
-  },
-&nbsp;
-  computed: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span>
-    /**
-     * picker可见备选元素总高度
-     */
-    visibleContentHeight() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.itemHeight * this.visibileColumnCount;
-    },
-&nbsp;
-    /**
-     * 当前选中值在`values`中的索引
-     */
-    valueIndex() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.currentValues.indexOf(this.currentValue);
-    },
-&nbsp;
-    /**
-     * 计算picker的拖动范围
-     */
-    dragRange() {
-<span class="cstat-no" title="statement not covered" >      v</span>ar values = this.currentValues;
-<span class="cstat-no" title="statement not covered" >      v</span>ar visibileColumnCount = this.visibileColumnCount;
-<span class="cstat-no" title="statement not covered" >      v</span>ar itemHeight = this.itemHeight;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      r</span>eturn [ -itemHeight * (values.length - Math.ceil(visibileColumnCount / 2)), itemHeight * Math.floor(visibileColumnCount / 2) ];
-    },
-&nbsp;
-    /**
-     * 计算`classNames`
-     */
-    classNames() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.className.split(' ');
-    }
-  },
-&nbsp;
-  mounted() {
-<span class="cstat-no" title="statement not covered" >    t</span>his.initEvents();
-<span class="cstat-no" title="statement not covered" >    t</span>his.doOnValueChange();
-  },
-&nbsp;
-  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span>
-    /**
-     * 将当前`value`值转换成需要垂直方向需要`translate`的值
-     */
-    value2Translate(value) {
-<span class="cstat-no" title="statement not covered" >      l</span>et values = this.currentValues;
-<span class="cstat-no" title="statement not covered" >      l</span>et valueIndex = values.indexOf(value);
-<span class="cstat-no" title="statement not covered" >      l</span>et offset = Math.floor(this.visibileColumnCount / 2);
-<span class="cstat-no" title="statement not covered" >      l</span>et itemHeight = this.itemHeight;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      if (valueIndex !== -1) {</span>
-<span class="cstat-no" title="statement not covered" >        r</span>eturn (valueIndex - offset) * (-itemHeight);
-      }
-    },
-&nbsp;
-    /**
-     * 根据当前`translate`的值转换成当前选中的`value`
-     */
-    translate2Value(translate) {
-<span class="cstat-no" title="statement not covered" >      l</span>et itemHeight = this.itemHeight;
-<span class="cstat-no" title="statement not covered" >      t</span>ranslate = Math.round(translate / itemHeight) * itemHeight;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      l</span>et index = -(translate - Math.floor(this.visibileColumnCount / 2) * itemHeight) / itemHeight;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.currentValues[index];
-    },
-&nbsp;
-    /**
-     * 初始化拖动事件
-     */
-    initEvents() <span class="cstat-no" title="statement not covered" >{</span>
-<span class="cstat-no" title="statement not covered" >      v</span>ar el = this.$refs.wrapper;
-<span class="cstat-no" title="statement not covered" >      v</span>ar dragState = {};
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      v</span>ar velocityTranslate;
-<span class="cstat-no" title="statement not covered" >      v</span>ar prevTranslate;
-<span class="cstat-no" title="statement not covered" >      var pickerItems; // eslint-disable-line</span>
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      d</span>raggable(el, {
-        start: <span class="fstat-no" title="function not covered" >(event) =&gt; {</span>
-          // 存储当前状态
-<span class="cstat-no" title="statement not covered" >          d</span>ragState = {
-            range: this.dragRange,
-            start: new Date(),
-            startLeft: event.pageX,
-            startTop: event.pageY,
-            startTranslateTop: translateUtil.getElementTranslate(el).top
-          };
-<span class="cstat-no" title="statement not covered" >          pickerItems = el.querySelectorAll('.zan-picker-item'); // eslint-disable-line</span>
-        },
-&nbsp;
-        drag: <span class="fstat-no" title="function not covered" >(event) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >          t</span>his.isDragging = true;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >          d</span>ragState.left = event.pageX;
-<span class="cstat-no" title="statement not covered" >          d</span>ragState.top = event.pageY;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >          l</span>et deltaY = dragState.top - dragState.startTop;
-<span class="cstat-no" title="statement not covered" >          l</span>et translate = dragState.startTranslateTop + deltaY;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >          t</span>ranslateUtil.translateElement(el, null, translate);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >          v</span>elocityTranslate = translate - prevTranslate || translate;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >          p</span>revTranslate = translate;
-        },
-&nbsp;
-        end: <span class="fstat-no" title="function not covered" >() =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >          if (this.isDragging) {</span>
-<span class="cstat-no" title="statement not covered" >            t</span>his.isDragging = false;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >            v</span>ar momentumRatio = 7;
-<span class="cstat-no" title="statement not covered" >            v</span>ar currentTranslate = translateUtil.getElementTranslate(el).top;
-<span class="cstat-no" title="statement not covered" >            v</span>ar duration = new Date() - dragState.start;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >            v</span>ar momentumTranslate;
-<span class="cstat-no" title="statement not covered" >            if (duration &lt; 300) {</span>
-<span class="cstat-no" title="statement not covered" >              m</span>omentumTranslate = currentTranslate + velocityTranslate * momentumRatio;
-            }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >            v</span>ar dragRange = dragState.range;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >            t</span>his.$nextTick(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >              v</span>ar translate;
-<span class="cstat-no" title="statement not covered" >              v</span>ar itemHeight = this.itemHeight;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >              if (momentumTranslate) {</span>
-<span class="cstat-no" title="statement not covered" >                t</span>ranslate = Math.round(momentumTranslate / itemHeight) * itemHeight;
-              } else {
-<span class="cstat-no" title="statement not covered" >                t</span>ranslate = Math.round(currentTranslate / itemHeight) * itemHeight;
-              }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >              t</span>ranslate = Math.max(Math.min(translate, dragRange[1]), dragRange[0]);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >              t</span>ranslateUtil.translateElement(el, null, translate);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >              t</span>his.currentValue = this.translate2Value(translate);
-            });
-          }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >          d</span>ragState = {};
-        }
-      });
-    },
-&nbsp;
-    /**
-     * `value`改变时调用
-     */
-    doOnValueChange() {
-<span class="cstat-no" title="statement not covered" >      l</span>et value = this.currentValue;
-<span class="cstat-no" title="statement not covered" >      l</span>et wrapper = this.$refs.wrapper;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', this.currentValue);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>ranslateUtil.translateElement(wrapper, null, this.value2Translate(value));
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/picker/src/picker.vue.html b/test/unit/coverage/lcov-report/packages/picker/src/picker.vue.html
deleted file mode 100644
index e459b2a4d..000000000
--- a/test/unit/coverage/lcov-report/packages/picker/src/picker.vue.html
+++ /dev/null
@@ -1,516 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/picker/src/picker.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/picker/src/</a> picker.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">22.58% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>7/31</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">22.22% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/18</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">7.14% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/14</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">8% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/25</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-import PickerColumn from './picker-column';
-&nbsp;
-const DEFAULT_ITEM_HEIGHT = 44;
-&nbsp;
-export default {
-  name: 'zan-picker',
-&nbsp;
-  components: {
-    PickerColumn
-  },
-&nbsp;
-  props: {
-    /**
-     * 每一列可见备选元素的个数
-     */
-    visibileColumnCount: {
-      type: Number,
-      default: 5
-    },
-    /**
-     * 选中元素区高度
-     */
-    itemHeight: {
-      type: Number,
-      default: DEFAULT_ITEM_HEIGHT
-    },
-    /**
-     * 对象数组,配置每一列显示的数据
-     */
-    columns: <span class="fstat-no" title="function not covered" >{</span>
-      type: Array,
-      default() {
-<span class="cstat-no" title="statement not covered" >        r</span>eturn [];
-      }
-    },
-    /**
-     * 否在组件顶部显示一个toolbar
-     */
-    showToolbar: {
-      type: Boolean,
-      default: true
-    }
-  },
-&nbsp;
-  computed: <span class="fstat-no" title="function not covered" >{</span>
-    values() {
-<span class="cstat-no" title="statement not covered" >      l</span>et columns = this.columns || [];
-<span class="cstat-no" title="statement not covered" >      l</span>et values = [];
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      c</span>olumns.forEach(<span class="fstat-no" title="function not covered" >column =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >        v</span>alues.push(column.value || column.values[column.defaultIndex || 0]);
-      });
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      r</span>eturn values;
-    }
-  },
-&nbsp;
-  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span></span></span></span></span>
-    /**
-     * 处理列`change`事件
-     */
-    columnValueChange() {
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('change', this, this.values);
-    },
-&nbsp;
-    /**
-     * 获取对应索引的列的实例
-     */
-    getColumn(index) {
-<span class="cstat-no" title="statement not covered" >      l</span>et children = this.$children.filter(<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >c</span></span>hild =&gt; child.$options.name === 'zan-picker-column');
-<span class="cstat-no" title="statement not covered" >      r</span>eturn children[index];
-    },
-&nbsp;
-    /**
-     * 获取对应列中选中的值
-     */
-    getColumnValue(index) {
-<span class="cstat-no" title="statement not covered" >      l</span>et column = this.getColumn(index);
-<span class="cstat-no" title="statement not covered" >      r</span>eturn column &amp;&amp; column.values[column.valueIndex];
-    },
-&nbsp;
-    /**
-     * 设置对应列中选中的值
-     */
-    setColumnValue(index, value) {
-<span class="cstat-no" title="statement not covered" >      l</span>et column = this.getColumn(index);
-<span class="cstat-no" title="statement not covered" >      if (column) {</span>
-<span class="cstat-no" title="statement not covered" >        c</span>olumn.currentValue = value;
-      }
-    },
-&nbsp;
-    /**
-     * 获取对应列中所有的备选值
-     */
-    getColumnValues(index) {
-<span class="cstat-no" title="statement not covered" >      l</span>et column = this.getColumn(index);
-<span class="cstat-no" title="statement not covered" >      r</span>eturn column &amp;&amp; column.currentValues;
-    },
-&nbsp;
-    /**
-     * 设置对应列中所有的备选值
-     */
-    setColumnValues(index, values) {
-<span class="cstat-no" title="statement not covered" >      l</span>et column = this.getColumn(index);
-<span class="cstat-no" title="statement not covered" >      if (column) {</span>
-<span class="cstat-no" title="statement not covered" >        c</span>olumn.currentValues = values;
-      }
-    },
-&nbsp;
-    /**
-     * 获取所有列中被选中的值,返回一个数组
-     */
-    getValues() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.values;
-    },
-&nbsp;
-    /**
-     * `values`为一个数组,设置所有列中被选中的值
-     */
-    setValues(values) <span class="cstat-no" title="statement not covered" >{</span>
-<span class="cstat-no" title="statement not covered" >      v</span>alues.forEach(<span class="fstat-no" title="function not covered" >(value, index) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >        t</span>his.setColumnValue(index, value);
-      });
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/popup/index.html b/test/unit/coverage/lcov-report/packages/popup/index.html
deleted file mode 100644
index e9bbd81ec..000000000
--- a/test/unit/coverage/lcov-report/packages/popup/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/popup/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/popup/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/popup/index.js.html b/test/unit/coverage/lcov-report/packages/popup/index.js.html
deleted file mode 100644
index 80eb3874e..000000000
--- a/test/unit/coverage/lcov-report/packages/popup/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/popup/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/popup/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Popup from './src/popup';
-&nbsp;
-export default Popup;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/popup/src/index.html b/test/unit/coverage/lcov-report/packages/popup/src/index.html
deleted file mode 100644
index 9d6b75eab..000000000
--- a/test/unit/coverage/lcov-report/packages/popup/src/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/popup/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/popup/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">42.86% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/14</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/8</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/10</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="popup.vue"><a href="popup.vue.html">popup.vue</a></td>
-	<td data-value="42.86" class="pic low"><div class="chart"><div class="cover-fill" style="width: 42%;"></div><div class="cover-empty" style="width:58%;"></div></div></td>
-	<td data-value="42.86" class="pct low">42.86%</td>
-	<td data-value="14" class="abs low">6/14</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="8" class="abs medium">4/8</td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="6" class="abs low">1/6</td>
-	<td data-value="20" class="pct low">20%</td>
-	<td data-value="10" class="abs low">2/10</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/popup/src/popup.vue.html b/test/unit/coverage/lcov-report/packages/popup/src/popup.vue.html
deleted file mode 100644
index 5072652e2..000000000
--- a/test/unit/coverage/lcov-report/packages/popup/src/popup.vue.html
+++ /dev/null
@@ -1,282 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/popup/src/popup.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/popup/src/</a> popup.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">42.86% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/14</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/8</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/10</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-import Popup from 'src/mixins/popup';
-&nbsp;
-export default <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
-  name: 'zan-popup',
-&nbsp;
-  mixins: [Popup],
-&nbsp;
-  props: {
-    overlay: {
-      default: true
-    },
-&nbsp;
-    lockOnScroll: {
-      default: false
-    },
-&nbsp;
-    closeOnClickOverlay: {
-      default: true
-    },
-&nbsp;
-    transition: {
-      type: String,
-      default: 'popup-slide'
-    },
-&nbsp;
-    position: {
-      type: String,
-      default: ''
-    }
-  },
-&nbsp;
-  data() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn {
-      currentValue: false,
-      currentTransition: this.transition
-    };
-  },
-&nbsp;
-  watch: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
-    currentValue(val) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', val);
-    },
-&nbsp;
-    value(val) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.currentValue = val;
-    }
-  },
-&nbsp;
-  beforeMount() {
-<span class="cstat-no" title="statement not covered" >    if (this.transition !== 'popup-fade') {</span>
-<span class="cstat-no" title="statement not covered" >      t</span>his.currentTransition = `popup-slide-${this.position}`;
-    }
-  },
-&nbsp;
-  mounted() {
-<span class="cstat-no" title="statement not covered" >    if (this.value) {</span>
-<span class="cstat-no" title="statement not covered" >      t</span>his.currentValue = true;
-<span class="cstat-no" title="statement not covered" >      t</span>his.open();
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio-group/index.html b/test/unit/coverage/lcov-report/packages/radio-group/index.html
deleted file mode 100644
index 2bddf9253..000000000
--- a/test/unit/coverage/lcov-report/packages/radio-group/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/radio-group/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/radio-group/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio-group/index.js.html b/test/unit/coverage/lcov-report/packages/radio-group/index.js.html
deleted file mode 100644
index 3d3f3d728..000000000
--- a/test/unit/coverage/lcov-report/packages/radio-group/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/radio-group/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/radio-group/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import RadioGroup from 'packages/radio/src/radio-group';
-&nbsp;
-export default RadioGroup;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/index.html b/test/unit/coverage/lcov-report/packages/radio/index.html
deleted file mode 100644
index 8910e05cb..000000000
--- a/test/unit/coverage/lcov-report/packages/radio/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/radio/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/radio/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/index.js.html b/test/unit/coverage/lcov-report/packages/radio/index.js.html
deleted file mode 100644
index 55126b0c0..000000000
--- a/test/unit/coverage/lcov-report/packages/radio/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/radio/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/radio/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Radio from './src/radio';
-&nbsp;
-export default Radio;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/src/index.html b/test/unit/coverage/lcov-report/packages/radio/src/index.html
deleted file mode 100644
index 4a0161c0d..000000000
--- a/test/unit/coverage/lcov-report/packages/radio/src/index.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/radio/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/radio/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">53.33% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>8/15</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">22.22% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/18</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">30% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>3/10</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file medium" data-value="radio-group.vue"><a href="radio-group.vue.html">radio-group.vue</a></td>
-	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
-	<td data-value="66.67" class="pct medium">66.67%</td>
-	<td data-value="3" class="abs medium">2/3</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
-	</tr>
-
-<tr>
-	<td class="file medium" data-value="radio.vue"><a href="radio.vue.html">radio.vue</a></td>
-	<td data-value="50" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 50%;"></div><div class="cover-empty" style="width:50%;"></div></div></td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="12" class="abs medium">6/12</td>
-	<td data-value="22.22" class="pct low">22.22%</td>
-	<td data-value="18" class="abs low">4/18</td>
-	<td data-value="20" class="pct low">20%</td>
-	<td data-value="5" class="abs low">1/5</td>
-	<td data-value="25" class="pct low">25%</td>
-	<td data-value="8" class="abs low">2/8</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/src/radio-group.vue.html b/test/unit/coverage/lcov-report/packages/radio/src/radio-group.vue.html
deleted file mode 100644
index 9cbd59967..000000000
--- a/test/unit/coverage/lcov-report/packages/radio/src/radio-group.vue.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/radio/src/radio-group.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/radio/src/</a> radio-group.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">66.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/2</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-radio-group',
-&nbsp;
-  props: {
-    value: {},
-    disabled: Boolean
-  },
-&nbsp;
-  watch: <span class="fstat-no" title="function not covered" >{</span>
-    value(value) {
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('change', value);
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/radio/src/radio.vue.html b/test/unit/coverage/lcov-report/packages/radio/src/radio.vue.html
deleted file mode 100644
index f3e027c2e..000000000
--- a/test/unit/coverage/lcov-report/packages/radio/src/radio.vue.html
+++ /dev/null
@@ -1,267 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/radio/src/radio.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/radio/src/</a> radio.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/12</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">22.22% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/18</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/5</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">25% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/8</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-import findParent from 'src/mixins/findParent';
-&nbsp;
-export default {
-  name: 'zan-radio',
-&nbsp;
-  mixins: [findParent],
-&nbsp;
-  props: {
-    disabled: Boolean,
-    value: {},
-    name: [String, Number]
-  },
-&nbsp;
-  computed: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
-    isGroup() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn !!this.findParentByComponentName('zan-radio-group');
-    },
-&nbsp;
-    currentValue: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span>
-      get() {
-<span class="cstat-no" title="statement not covered" >        r</span>eturn this.isGroup &amp;&amp; this.parentGroup ? this.parentGroup.value : this.value;
-      },
-&nbsp;
-      set(val) {
-<span class="cstat-no" title="statement not covered" >        if (this.isGroup &amp;&amp; this.parentGroup) {</span>
-<span class="cstat-no" title="statement not covered" >          t</span>his.parentGroup.$emit('input', val);
-        } else {
-<span class="cstat-no" title="statement not covered" >          t</span>his.$emit('input', val);
-        }
-      }
-    },
-&nbsp;
-    isDisabled() {
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.isGroup &amp;&amp; this.parentGroup
-          ? this.parentGroup.disabled || this.disabled
-          : this.disabled;
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/search/index.html b/test/unit/coverage/lcov-report/packages/search/index.html
deleted file mode 100644
index a7b626b3e..000000000
--- a/test/unit/coverage/lcov-report/packages/search/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/search/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/search/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/search/index.js.html b/test/unit/coverage/lcov-report/packages/search/index.js.html
deleted file mode 100644
index 1449e4075..000000000
--- a/test/unit/coverage/lcov-report/packages/search/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/search/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/search/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Search from './src/search';
-&nbsp;
-export default Search;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/search/src/index.html b/test/unit/coverage/lcov-report/packages/search/src/index.html
deleted file mode 100644
index b5d3a6a7c..000000000
--- a/test/unit/coverage/lcov-report/packages/search/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/search/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/search/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/12</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/10</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="search.vue"><a href="search.vue.html">search.vue</a></td>
-	<td data-value="16.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 16%;"></div><div class="cover-empty" style="width:84%;"></div></div></td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="12" class="abs low">2/12</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="2" class="abs low">0/2</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="6" class="abs low">0/6</td>
-	<td data-value="10" class="pct low">10%</td>
-	<td data-value="10" class="abs low">1/10</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/search/src/search.vue.html b/test/unit/coverage/lcov-report/packages/search/src/search.vue.html
deleted file mode 100644
index a173bee10..000000000
--- a/test/unit/coverage/lcov-report/packages/search/src/search.vue.html
+++ /dev/null
@@ -1,230 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/search/src/search.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/search/src/</a> search.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/12</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/10</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-export default <span class="fstat-no" title="function not covered" >{</span>
-  name: 'zan-search',
-  props: {
-    placeholder: {
-      type: String
-    }
-  },
-  data() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn {
-      value: '',
-      focusStatus: false,
-      isFocus: false
-    };
-  },
-  directives: {
-    refocus: {
-      update: <span class="fstat-no" title="function not covered" >function(el, state) {</span>
-<span class="cstat-no" title="statement not covered" >        if (state.value) { <span class="cstat-no" title="statement not covered" >e</span>l.focus(); }</span>
-      }
-    }
-  },
-  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span>
-    handleFocus() {
-      // 进入input焦点,出现close和取消
-<span class="cstat-no" title="statement not covered" >      t</span>his.isFocus = true;
-    },
-    handleClean() {
-      // 点击close后清空vlaue后,再聚焦input框
-<span class="cstat-no" title="statement not covered" >      t</span>his.value = '';
-<span class="cstat-no" title="statement not covered" >      t</span>his.focusStatus = true;
-    },
-    handleBack() {
-      // 点击取消后,清空所有回复最初状态
-<span class="cstat-no" title="statement not covered" >      t</span>his.value = '';
-<span class="cstat-no" title="statement not covered" >      t</span>his.focusStatus = false;
-<span class="cstat-no" title="statement not covered" >      t</span>his.isFocus = false;
-    },
-    handleSearch() {
-      // input输入回车后,发送回调
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('search', this.value);
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/steps/index.html b/test/unit/coverage/lcov-report/packages/steps/index.html
deleted file mode 100644
index f9fa3ebfe..000000000
--- a/test/unit/coverage/lcov-report/packages/steps/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/steps/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/steps/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/steps/index.js.html b/test/unit/coverage/lcov-report/packages/steps/index.js.html
deleted file mode 100644
index fb25e9177..000000000
--- a/test/unit/coverage/lcov-report/packages/steps/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/steps/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/steps/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Steps from './src/steps';
-&nbsp;
-export default Steps;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/steps/src/index.html b/test/unit/coverage/lcov-report/packages/steps/src/index.html
deleted file mode 100644
index c54791d8d..000000000
--- a/test/unit/coverage/lcov-report/packages/steps/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/steps/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/steps/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">66.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/2</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file medium" data-value="steps.vue"><a href="steps.vue.html">steps.vue</a></td>
-	<td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td>
-	<td data-value="66.67" class="pct medium">66.67%</td>
-	<td data-value="3" class="abs medium">2/3</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/steps/src/steps.vue.html b/test/unit/coverage/lcov-report/packages/steps/src/steps.vue.html
deleted file mode 100644
index bc655f702..000000000
--- a/test/unit/coverage/lcov-report/packages/steps/src/steps.vue.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/steps/src/steps.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/steps/src/</a> steps.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">66.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/2</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-&nbsp;
-export default <span class="fstat-no" title="function not covered" >{</span>
-  name: 'Sample',
-  props: ['author'],
-  data() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn {
-      name: 'World'
-    };
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/switch/index.html b/test/unit/coverage/lcov-report/packages/switch/index.html
deleted file mode 100644
index 4075ed6f9..000000000
--- a/test/unit/coverage/lcov-report/packages/switch/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/switch/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/switch/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/switch/index.js.html b/test/unit/coverage/lcov-report/packages/switch/index.js.html
deleted file mode 100644
index f613686c9..000000000
--- a/test/unit/coverage/lcov-report/packages/switch/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/switch/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/switch/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Switch from './src/switch';
-&nbsp;
-export default Switch;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/switch/src/index.html b/test/unit/coverage/lcov-report/packages/switch/src/index.html
deleted file mode 100644
index b457469a5..000000000
--- a/test/unit/coverage/lcov-report/packages/switch/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/switch/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/switch/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">18.18% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/11</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/10</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.29% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/7</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="switch.vue"><a href="switch.vue.html">switch.vue</a></td>
-	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
-	<td data-value="18.18" class="pct low">18.18%</td>
-	<td data-value="11" class="abs low">2/11</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="10" class="abs low">0/10</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="3" class="abs low">0/3</td>
-	<td data-value="14.29" class="pct low">14.29%</td>
-	<td data-value="7" class="abs low">1/7</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/switch/src/switch.vue.html b/test/unit/coverage/lcov-report/packages/switch/src/switch.vue.html
deleted file mode 100644
index b072ea9a8..000000000
--- a/test/unit/coverage/lcov-report/packages/switch/src/switch.vue.html
+++ /dev/null
@@ -1,251 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/switch/src/switch.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/switch/src/</a> switch.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">18.18% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/11</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/10</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/3</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.29% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/7</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-//
-//
-&nbsp;
-/**
- * zan-switch
- * @module components/switch
- * @desc 开关
- * @param {boolean} [checked=false] - 开关状态
- * @param {boolean} [disabled=false] - 禁用
- * @param {boolean} [loading=false] - loading状态
- * @param {callback} [onChange] - 开关状态改变回调函数。
- *
- * @example
- * &lt;zan-switch checked="true" disabled="false"&gt;&lt;/zan-switch&gt;
- */
-export default {
-  name: 'zan-switch',
-  props: {
-    checked: {
-      type: Boolean,
-      default: false
-    },
-    disabled: {
-      type: Boolean,
-      default: false
-    },
-    loading: {
-      type: Boolean,
-      default: false
-    },
-    onChange: {
-      type: Function,
-      default: <span class="fstat-no" title="function not covered" >function() {</span>}
-    }
-  },
-  computed: {
-    switchState: <span class="fstat-no" title="function not covered" >function() {</span>
-<span class="cstat-no" title="statement not covered" >      l</span>et switchState = this.checked ? ['is-on'] : ['is-off'];
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      if (this.disabled) <span class="cstat-no" title="statement not covered" >s</span></span>witchState.push('is-disabled');
-<span class="cstat-no" title="statement not covered" >      if (this.loading) <span class="cstat-no" title="statement not covered" >s</span></span>witchState.push('is-loading');
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      r</span>eturn switchState;
-    }
-  },
-  methods: {
-    /*
-     * 开关状态交互。
-     */
-    toggleState: <span class="fstat-no" title="function not covered" >function() {</span>
-<span class="cstat-no" title="statement not covered" >      if (this.disabled || this.loading) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-<span class="cstat-no" title="statement not covered" >      t</span>his.onChange(!this.checked);
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/tag/index.html b/test/unit/coverage/lcov-report/packages/tag/index.html
deleted file mode 100644
index 713b3ae96..000000000
--- a/test/unit/coverage/lcov-report/packages/tag/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/tag/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/tag/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/tag/index.js.html b/test/unit/coverage/lcov-report/packages/tag/index.js.html
deleted file mode 100644
index 7926a4bbf..000000000
--- a/test/unit/coverage/lcov-report/packages/tag/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/tag/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/tag/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Tag from './src/main';
-&nbsp;
-export default Tag;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/tag/src/index.html b/test/unit/coverage/lcov-report/packages/tag/src/index.html
deleted file mode 100644
index 192a70655..000000000
--- a/test/unit/coverage/lcov-report/packages/tag/src/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/tag/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/tag/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="main.vue"><a href="main.vue.html">main.vue</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/tag/src/main.vue.html b/test/unit/coverage/lcov-report/packages/tag/src/main.vue.html
deleted file mode 100644
index 51ee48337..000000000
--- a/test/unit/coverage/lcov-report/packages/tag/src/main.vue.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/tag/src/main.vue</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/tag/src/</a> main.vue
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/0</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/1</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//
-//
-//
-//
-//
-//
-&nbsp;
-export default {
-  name: 'zan-tag',
-  props: {
-    type: String,
-    mark: Boolean,
-    plain: Boolean
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/index.html b/test/unit/coverage/lcov-report/packages/waterfall/index.html
deleted file mode 100644
index 995e12f5c..000000000
--- a/test/unit/coverage/lcov-report/packages/waterfall/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/waterfall/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> packages/waterfall/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="6" class="abs high">6/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="4" class="abs high">4/4</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="1" class="abs high">1/1</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/index.js.html b/test/unit/coverage/lcov-report/packages/waterfall/index.js.html
deleted file mode 100644
index 93aaf1946..000000000
--- a/test/unit/coverage/lcov-report/packages/waterfall/index.js.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/waterfall/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">packages/waterfall/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>6/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Waterfall from './src/main.js';
-&nbsp;
-export default Waterfall;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/src/directive.js.html b/test/unit/coverage/lcov-report/packages/waterfall/src/directive.js.html
deleted file mode 100644
index 9ab52916b..000000000
--- a/test/unit/coverage/lcov-report/packages/waterfall/src/directive.js.html
+++ /dev/null
@@ -1,354 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/waterfall/src/directive.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/waterfall/src/</a> directive.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">20.37% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>11/54</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">15.38% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/26</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">22.22% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>2/9</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.58% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>7/48</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Utils from './utils.js';
-&nbsp;
-const CONTEXT = '@@Waterfall';
-const OFFSET = 300;
-&nbsp;
-// 绑定事件到元素上
-// 读取基本的控制变量
-<span class="fstat-no" title="function not covered" >function doBindEvent() <span class="cstat-no" title="statement not covered" >{</span></span>
-<span class="cstat-no" title="statement not covered" >  t</span>his.scrollEventListener = Utils.debounce(handleScrollEvent.bind(this), 200);
-<span class="cstat-no" title="statement not covered" >  t</span>his.scrollEventTarget = Utils.getScrollEventTarget(this.el);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  v</span>ar disabledExpr = this.el.getAttribute('waterfall-disabled');
-<span class="cstat-no" title="statement not covered" >  v</span>ar disabled = false;
-<span class="cstat-no" title="statement not covered" >  if (disabledExpr) {</span>
-<span class="cstat-no" title="statement not covered" >    t</span>his.vm.$watch(disabledExpr, <span class="fstat-no" title="function not covered" >(value) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >      t</span>his.disabled = value;
-    });
-<span class="cstat-no" title="statement not covered" >    d</span>isabled = Boolean(this.vm[disabledExpr]);
-  }
-<span class="cstat-no" title="statement not covered" >  t</span>his.disabled = disabled;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  v</span>ar offset = this.el.getAttribute('waterfall-offset');
-<span class="cstat-no" title="statement not covered" >  t</span>his.offset = Number(offset) || OFFSET;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  t</span>his.scrollEventTarget.addEventListener('scroll', this.scrollEventListener);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  t</span>his.scrollEventListener();
-}
-&nbsp;
-// 处理滚动函数
-<span class="fstat-no" title="function not covered" >function handleScrollEvent() {</span>
-<span class="cstat-no" title="statement not covered" >  l</span>et element = this.el;
-<span class="cstat-no" title="statement not covered" >  l</span>et scrollEventTarget = this.scrollEventTarget;
-&nbsp;
-  // 已被禁止的滚动处理
-<span class="cstat-no" title="statement not covered" >  if (this.disabled) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  l</span>et targetScrollTop = Utils.getScrollTop(scrollEventTarget);
-<span class="cstat-no" title="statement not covered" >  l</span>et targetBottom = targetScrollTop + Utils.getVisibleHeight(scrollEventTarget);
-&nbsp;
-  // 判断是否到了底
-<span class="cstat-no" title="statement not covered" >  l</span>et needLoadMoreToLower = false;
-<span class="cstat-no" title="statement not covered" >  if (element === scrollEventTarget) {</span>
-<span class="cstat-no" title="statement not covered" >    n</span>eedLoadMoreToLower = scrollEventTarget.scollHeight - targetBottom &lt; this.offset;
-  } else {
-<span class="cstat-no" title="statement not covered" >    l</span>et elementBottom = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget) + Utils.getVisibleHeight(element);
-<span class="cstat-no" title="statement not covered" >    n</span>eedLoadMoreToLower = elementBottom - Utils.getVisibleHeight(scrollEventTarget) &lt; this.offset;
-  }
-<span class="cstat-no" title="statement not covered" >  if (needLoadMoreToLower) {</span>
-<span class="cstat-no" title="statement not covered" >    t</span>his.cb['lower'] &amp;&amp; this.cb['lower']({ target: scrollEventTarget, top: targetScrollTop });
-  }
-&nbsp;
-  // 判断是否到了顶
-<span class="cstat-no" title="statement not covered" >  l</span>et needLoadMoreToUpper = false;
-<span class="cstat-no" title="statement not covered" >  if (element === scrollEventTarget) {</span>
-<span class="cstat-no" title="statement not covered" >    n</span>eedLoadMoreToUpper = targetScrollTop &lt; this.offset;
-  } else {
-<span class="cstat-no" title="statement not covered" >    l</span>et elementTop = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget);
-<span class="cstat-no" title="statement not covered" >    n</span>eedLoadMoreToUpper = elementTop + this.offset &gt; 0;
-  }
-<span class="cstat-no" title="statement not covered" >  if (needLoadMoreToUpper) {</span>
-<span class="cstat-no" title="statement not covered" >    t</span>his.cb['upper'] &amp;&amp; this.cb['upper']({ target: scrollEventTarget, top: targetScrollTop });
-  }
-}
-&nbsp;
-export default function(type) {
-  return <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
-    bind(el, binding, vnode) {
-<span class="cstat-no" title="statement not covered" >      if (!el[CONTEXT]) {</span>
-<span class="cstat-no" title="statement not covered" >        e</span>l[CONTEXT] = {
-          el,
-          vm: vnode.context,
-          cb: {}
-        };
-      }
-<span class="cstat-no" title="statement not covered" >      e</span>l[CONTEXT].cb[type] = binding.value;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      v</span>node.context.$on('hook:mounted', <span class="fstat-no" title="function not covered" >function() {</span>
-<span class="cstat-no" title="statement not covered" >        if (Utils.isAttached(el)) {</span>
-<span class="cstat-no" title="statement not covered" >          d</span>oBindEvent.call(el[CONTEXT]);
-        }
-      });
-    },
-&nbsp;
-    update(el) {
-<span class="cstat-no" title="statement not covered" >      e</span>l[CONTEXT].scrollEventListener();
-    },
-&nbsp;
-    unbind(el) {
-<span class="cstat-no" title="statement not covered" >      c</span>onst context = el[CONTEXT];
-<span class="cstat-no" title="statement not covered" >      c</span>ontext.scrollEventTarget.removeEventListener('scroll', context.scrollEventListener);
-    }
-  };
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/src/index.html b/test/unit/coverage/lcov-report/packages/waterfall/src/index.html
deleted file mode 100644
index ba936205e..000000000
--- a/test/unit/coverage/lcov-report/packages/waterfall/src/index.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/waterfall/src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> packages/waterfall/src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">25.47% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>27/106</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>9/54</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">21.05% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>4/19</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">18.09% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>17/94</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="directive.js"><a href="directive.js.html">directive.js</a></td>
-	<td data-value="20.37" class="pic low"><div class="chart"><div class="cover-fill" style="width: 20%;"></div><div class="cover-empty" style="width:80%;"></div></div></td>
-	<td data-value="20.37" class="pct low">20.37%</td>
-	<td data-value="54" class="abs low">11/54</td>
-	<td data-value="15.38" class="pct low">15.38%</td>
-	<td data-value="26" class="abs low">4/26</td>
-	<td data-value="22.22" class="pct low">22.22%</td>
-	<td data-value="9" class="abs low">2/9</td>
-	<td data-value="14.58" class="pct low">14.58%</td>
-	<td data-value="48" class="abs low">7/48</td>
-	</tr>
-
-<tr>
-	<td class="file high" data-value="main.js"><a href="main.js.html">main.js</a></td>
-	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="14" class="abs high">14/14</td>
-	<td data-value="83.33" class="pct high">83.33%</td>
-	<td data-value="6" class="abs high">5/6</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="9" class="abs high">9/9</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="utils.js"><a href="utils.js.html">utils.js</a></td>
-	<td data-value="5.26" class="pic low"><div class="chart"><div class="cover-fill" style="width: 5%;"></div><div class="cover-empty" style="width:95%;"></div></div></td>
-	<td data-value="5.26" class="pct low">5.26%</td>
-	<td data-value="38" class="abs low">2/38</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="22" class="abs low">0/22</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="8" class="abs low">0/8</td>
-	<td data-value="2.7" class="pct low">2.7%</td>
-	<td data-value="37" class="abs low">1/37</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/src/main.js.html b/test/unit/coverage/lcov-report/packages/waterfall/src/main.js.html
deleted file mode 100644
index 4a1a84843..000000000
--- a/test/unit/coverage/lcov-report/packages/waterfall/src/main.js.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/waterfall/src/main.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/waterfall/src/</a> main.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>14/14</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">83.33% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>5/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>2/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">100% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>9/9</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Waterfall from './directive.js';
-import Vue from 'vue';
-&nbsp;
-const install = function(Vue) {
-  Vue.directive('WaterfallLower', Waterfall('lower'));
-  Vue.directive('WaterfallUpper', Waterfall('upper'));
-};
-&nbsp;
-<span class="missing-if-branch" title="else path not taken" >E</span>if (!Vue.prototype.$isServer) {
-  Vue.use(install);
-}
-&nbsp;
-Waterfall.install = install;
-export default Waterfall;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/packages/waterfall/src/utils.js.html b/test/unit/coverage/lcov-report/packages/waterfall/src/utils.js.html
deleted file mode 100644
index a55d5c597..000000000
--- a/test/unit/coverage/lcov-report/packages/waterfall/src/utils.js.html
+++ /dev/null
@@ -1,293 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for packages/waterfall/src/utils.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">packages/waterfall/src/</a> utils.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">5.26% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/38</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/22</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/8</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">2.7% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/37</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span></span></span>
-  debounce(func, wait, immediate) {
-<span class="cstat-no" title="statement not covered" >    v</span>ar timeout, args, context, timestamp, result;
-<span class="cstat-no" title="statement not covered" >    r</span>eturn <span class="fstat-no" title="function not covered" >function() {</span>
-<span class="cstat-no" title="statement not covered" >      c</span>ontext = this;
-<span class="cstat-no" title="statement not covered" >      a</span>rgs = arguments;
-<span class="cstat-no" title="statement not covered" >      t</span>imestamp = new Date();
-<span class="cstat-no" title="statement not covered" >      v</span>ar later = <span class="fstat-no" title="function not covered" >function() {</span>
-<span class="cstat-no" title="statement not covered" >        v</span>ar last = (new Date()) - timestamp;
-<span class="cstat-no" title="statement not covered" >        if (last &lt; wait) {</span>
-<span class="cstat-no" title="statement not covered" >          t</span>imeout = setTimeout(later, wait - last);
-        } else {
-<span class="cstat-no" title="statement not covered" >          t</span>imeout = null;
-<span class="cstat-no" title="statement not covered" >          r</span>esult = func.apply(context, args);
-        }
-      };
-<span class="cstat-no" title="statement not covered" >      if (!timeout) {</span>
-<span class="cstat-no" title="statement not covered" >        t</span>imeout = setTimeout(later, wait);
-      }
-<span class="cstat-no" title="statement not covered" >      r</span>eturn result;
-    };
-  },
-&nbsp;
-  // 找到最近的触发滚动事件的元素
-  getScrollEventTarget(element) {
-<span class="cstat-no" title="statement not covered" >    v</span>ar currentNode = element;
-    // bugfix, see http://w3help.org/zh-cn/causes/SD9013 and http://stackoverflow.com/questions/17016740/onscroll-function-is-not-working-for-chrome
-<span class="cstat-no" title="statement not covered" >    while (currentNode &amp;&amp; currentNode.tagName !== 'HTML' &amp;&amp; currentNode.tagName !== 'BODY' &amp;&amp; currentNode.nodeType === 1) {</span>
-<span class="cstat-no" title="statement not covered" >      v</span>ar overflowY = this.getComputedStyle(currentNode).overflowY;
-<span class="cstat-no" title="statement not covered" >      if (overflowY === 'scroll' || overflowY === 'auto') {</span>
-<span class="cstat-no" title="statement not covered" >        r</span>eturn currentNode;
-      }
-<span class="cstat-no" title="statement not covered" >      c</span>urrentNode = currentNode.parentNode;
-    }
-<span class="cstat-no" title="statement not covered" >    r</span>eturn window;
-  },
-&nbsp;
-  // 判断元素是否被加入到页面节点内
-  isAttached(element) {
-<span class="cstat-no" title="statement not covered" >    v</span>ar currentNode = element.parentNode;
-<span class="cstat-no" title="statement not covered" >    while (currentNode) {</span>
-<span class="cstat-no" title="statement not covered" >      if (currentNode.tagName === 'HTML') {</span>
-<span class="cstat-no" title="statement not covered" >        r</span>eturn true;
-      }
-<span class="cstat-no" title="statement not covered" >      if (currentNode.nodeType === 11) {</span>
-<span class="cstat-no" title="statement not covered" >        r</span>eturn false;
-      }
-<span class="cstat-no" title="statement not covered" >      c</span>urrentNode = currentNode.parentNode;
-    }
-<span class="cstat-no" title="statement not covered" >    r</span>eturn false;
-  },
-&nbsp;
-  // 获取滚动高度
-  getScrollTop(element) {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn 'scrollTop' in element ? element.scrollTop : element.pageYOffset;
-  },
-&nbsp;
-  // 获取元素距离顶部高度
-  getElementTop(element) {
-<span class="cstat-no" title="statement not covered" >    if (element === window) {</span>
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.getScrollTop(window);
-    }
-<span class="cstat-no" title="statement not covered" >    r</span>eturn element.getBoundingClientRect().top + this.getScrollTop(window);
-  },
-&nbsp;
-  getVisibleHeight(element) {
-<span class="cstat-no" title="statement not covered" >    if (element === window) {</span>
-<span class="cstat-no" title="statement not covered" >      r</span>eturn element.innerHeight;
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    r</span>eturn element.getBoundingClientRect().height;
-  },
-&nbsp;
-  getComputedStyle: document.defaultView.getComputedStyle.bind(document.defaultView)
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/prettify.css b/test/unit/coverage/lcov-report/prettify.css
deleted file mode 100644
index b317a7cda..000000000
--- a/test/unit/coverage/lcov-report/prettify.css
+++ /dev/null
@@ -1 +0,0 @@
-.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
diff --git a/test/unit/coverage/lcov-report/prettify.js b/test/unit/coverage/lcov-report/prettify.js
deleted file mode 100644
index ef51e0386..000000000
--- a/test/unit/coverage/lcov-report/prettify.js
+++ /dev/null
@@ -1 +0,0 @@
-window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
diff --git a/test/unit/coverage/lcov-report/sort-arrow-sprite.png b/test/unit/coverage/lcov-report/sort-arrow-sprite.png
deleted file mode 100644
index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 209
zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb
z6^}Hx2)<t4^o6Wx*F;wxHx}=5N#Su@S-w&C^o$MC9b5+$B=T4;r?cPm)%Fj&wd;}X
zP9-IMj(10vstZN_m^jtm<9|ljB!x{5tE86~eE-nSz|0W&!@{XNS*HVNJ%gvKpUXO@
GgeCxf+epL!

diff --git a/test/unit/coverage/lcov-report/sorter.js b/test/unit/coverage/lcov-report/sorter.js
deleted file mode 100644
index 6c5034e40..000000000
--- a/test/unit/coverage/lcov-report/sorter.js
+++ /dev/null
@@ -1,158 +0,0 @@
-var addSorting = (function () {
-    "use strict";
-    var cols,
-        currentSort = {
-            index: 0,
-            desc: false
-        };
-
-    // returns the summary table element
-    function getTable() { return document.querySelector('.coverage-summary'); }
-    // returns the thead element of the summary table
-    function getTableHeader() { return getTable().querySelector('thead tr'); }
-    // returns the tbody element of the summary table
-    function getTableBody() { return getTable().querySelector('tbody'); }
-    // returns the th element for nth column
-    function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
-
-    // loads all columns
-    function loadColumns() {
-        var colNodes = getTableHeader().querySelectorAll('th'),
-            colNode,
-            cols = [],
-            col,
-            i;
-
-        for (i = 0; i < colNodes.length; i += 1) {
-            colNode = colNodes[i];
-            col = {
-                key: colNode.getAttribute('data-col'),
-                sortable: !colNode.getAttribute('data-nosort'),
-                type: colNode.getAttribute('data-type') || 'string'
-            };
-            cols.push(col);
-            if (col.sortable) {
-                col.defaultDescSort = col.type === 'number';
-                colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
-            }
-        }
-        return cols;
-    }
-    // attaches a data attribute to every tr element with an object
-    // of data values keyed by column name
-    function loadRowData(tableRow) {
-        var tableCols = tableRow.querySelectorAll('td'),
-            colNode,
-            col,
-            data = {},
-            i,
-            val;
-        for (i = 0; i < tableCols.length; i += 1) {
-            colNode = tableCols[i];
-            col = cols[i];
-            val = colNode.getAttribute('data-value');
-            if (col.type === 'number') {
-                val = Number(val);
-            }
-            data[col.key] = val;
-        }
-        return data;
-    }
-    // loads all row data
-    function loadData() {
-        var rows = getTableBody().querySelectorAll('tr'),
-            i;
-
-        for (i = 0; i < rows.length; i += 1) {
-            rows[i].data = loadRowData(rows[i]);
-        }
-    }
-    // sorts the table using the data for the ith column
-    function sortByIndex(index, desc) {
-        var key = cols[index].key,
-            sorter = function (a, b) {
-                a = a.data[key];
-                b = b.data[key];
-                return a < b ? -1 : a > b ? 1 : 0;
-            },
-            finalSorter = sorter,
-            tableBody = document.querySelector('.coverage-summary tbody'),
-            rowNodes = tableBody.querySelectorAll('tr'),
-            rows = [],
-            i;
-
-        if (desc) {
-            finalSorter = function (a, b) {
-                return -1 * sorter(a, b);
-            };
-        }
-
-        for (i = 0; i < rowNodes.length; i += 1) {
-            rows.push(rowNodes[i]);
-            tableBody.removeChild(rowNodes[i]);
-        }
-
-        rows.sort(finalSorter);
-
-        for (i = 0; i < rows.length; i += 1) {
-            tableBody.appendChild(rows[i]);
-        }
-    }
-    // removes sort indicators for current column being sorted
-    function removeSortIndicators() {
-        var col = getNthColumn(currentSort.index),
-            cls = col.className;
-
-        cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
-        col.className = cls;
-    }
-    // adds sort indicators for current column being sorted
-    function addSortIndicators() {
-        getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
-    }
-    // adds event listeners for all sorter widgets
-    function enableUI() {
-        var i,
-            el,
-            ithSorter = function ithSorter(i) {
-                var col = cols[i];
-
-                return function () {
-                    var desc = col.defaultDescSort;
-
-                    if (currentSort.index === i) {
-                        desc = !currentSort.desc;
-                    }
-                    sortByIndex(i, desc);
-                    removeSortIndicators();
-                    currentSort.index = i;
-                    currentSort.desc = desc;
-                    addSortIndicators();
-                };
-            };
-        for (i =0 ; i < cols.length; i += 1) {
-            if (cols[i].sortable) {
-                // add the click event handler on the th so users
-                // dont have to click on those tiny arrows
-                el = getNthColumn(i).querySelector('.sorter').parentElement;
-                if (el.addEventListener) {
-                    el.addEventListener('click', ithSorter(i));
-                } else {
-                    el.attachEvent('onclick', ithSorter(i));
-                }
-            }
-        }
-    }
-    // adds sorting functionality to the UI
-    return function () {
-        if (!getTable()) {
-            return;
-        }
-        cols = loadColumns();
-        loadData(cols);
-        addSortIndicators();
-        enableUI();
-    };
-})();
-
-window.addEventListener('load', addSorting);
diff --git a/test/unit/coverage/lcov-report/src/index.html b/test/unit/coverage/lcov-report/src/index.html
deleted file mode 100644
index d2ccfa8b7..000000000
--- a/test/unit/coverage/lcov-report/src/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../prettify.css" />
-    <link rel="stylesheet" href="../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../index.html">all files</a> src/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">68.06% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>49/72</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">70% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>7/10</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">54.17% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>26/48</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file medium" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="68.06" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 68%;"></div><div class="cover-empty" style="width:32%;"></div></div></td>
-	<td data-value="68.06" class="pct medium">68.06%</td>
-	<td data-value="72" class="abs medium">49/72</td>
-	<td data-value="70" class="pct medium">70%</td>
-	<td data-value="10" class="abs medium">7/10</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
-	<td data-value="54.17" class="pct medium">54.17%</td>
-	<td data-value="48" class="abs medium">26/48</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/index.js.html b/test/unit/coverage/lcov-report/src/index.js.html
deleted file mode 100644
index 18587284d..000000000
--- a/test/unit/coverage/lcov-report/src/index.js.html
+++ /dev/null
@@ -1,309 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../prettify.css" />
-    <link rel="stylesheet" href="../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../index.html">all files</a> / <a href="index.html">src/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">68.06% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>49/72</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">70% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>7/10</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">50% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/2</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">54.17% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>26/48</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line medium'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Button from '../packages/button/index.js';
-import Switch from '../packages/switch/index.js';
-import Field from '../packages/field/index.js';
-import Radio from '../packages/radio/index.js';
-import Cell from '../packages/cell/index.js';
-import Icon from '../packages/icon/index.js';
-import CellGroup from '../packages/cell-group/index.js';
-import Popup from '../packages/popup/index.js';
-import Dialog from '../packages/dialog/index.js';
-import Picker from '../packages/picker/index.js';
-import RadioGroup from '../packages/radio-group/index.js';
-import Waterfall from '../packages/waterfall/index.js';
-import Loading from '../packages/loading/index.js';
-import Panel from '../packages/panel/index.js';
-import Card from '../packages/card/index.js';
-import Steps from '../packages/steps/index.js';
-import Tag from '../packages/tag/index.js';
-import Checkbox from '../packages/checkbox/index.js';
-import CheckboxGroup from '../packages/checkbox-group/index.js';
-import BadgeGroup from '../packages/badge-group/index.js';
-import Badge from '../packages/badge/index.js';
-import Search from '../packages/search/index.js';
-&nbsp;
-const install = <span class="fstat-no" title="function not covered" >function(Vue) {</span>
-<span class="cstat-no" title="statement not covered" >  if (install.installed) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Button.name, Button);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Switch.name, Switch);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Field.name, Field);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Radio.name, Radio);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Cell.name, Cell);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Icon.name, Icon);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(CellGroup.name, CellGroup);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Popup.name, Popup);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Picker.name, Picker);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(RadioGroup.name, RadioGroup);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Loading.name, Loading);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Panel.name, Panel);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Card.name, Card);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Steps.name, Steps);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Tag.name, Tag);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Checkbox.name, Checkbox);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(CheckboxGroup.name, CheckboxGroup);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(BadgeGroup.name, BadgeGroup);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Badge.name, Badge);
-<span class="cstat-no" title="statement not covered" >  V</span>ue.component(Search.name, Search);
-};
-&nbsp;
-// auto install
-<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof window !== 'undefined' &amp;&amp; window.Vue) {
-<span class="cstat-no" title="statement not covered" >  i</span>nstall(window.Vue);
-}
-&nbsp;
-module.exports = {
-  install,
-  version: '0.0.7',
-  Button,
-  Switch,
-  Field,
-  Radio,
-  Cell,
-  Icon,
-  CellGroup,
-  Popup,
-  Dialog,
-  Picker,
-  RadioGroup,
-  Waterfall,
-  Loading,
-  Panel,
-  Card,
-  Steps,
-  Tag,
-  Checkbox,
-  CheckboxGroup,
-  BadgeGroup,
-  Badge,
-  Search
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/findParent.js.html b/test/unit/coverage/lcov-report/src/mixins/findParent.js.html
deleted file mode 100644
index 43d59e092..000000000
--- a/test/unit/coverage/lcov-report/src/mixins/findParent.js.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/mixins/findParent.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">src/mixins/</a> findParent.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">18.18% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/11</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">11.11% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/9</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
- * 根据父组件名找到对应`parent`
- */
-export default {
-  methods: <span class="fstat-no" title="function not covered" >{</span>
-    findParentByComponentName(name) {
-<span class="cstat-no" title="statement not covered" >      if (this.parentGroup) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      l</span>et parent = this.$parent;
-<span class="cstat-no" title="statement not covered" >      while (parent) {</span>
-<span class="cstat-no" title="statement not covered" >        if (parent.$options.name === name) {</span>
-<span class="cstat-no" title="statement not covered" >          t</span>his.parentGroup = parent;
-<span class="cstat-no" title="statement not covered" >          b</span>reak;
-        } else {
-<span class="cstat-no" title="statement not covered" >          p</span>arent = parent.$parent;
-        }
-      }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      r</span>eturn this.parentGroup;
-    }
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/index.html b/test/unit/coverage/lcov-report/src/mixins/index.html
deleted file mode 100644
index 9e4c3a589..000000000
--- a/test/unit/coverage/lcov-report/src/mixins/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/mixins/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> src/mixins/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">18.18% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/11</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">11.11% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/9</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="findParent.js"><a href="findParent.js.html">findParent.js</a></td>
-	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
-	<td data-value="18.18" class="pct low">18.18%</td>
-	<td data-value="11" class="abs low">2/11</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="4" class="abs low">0/4</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="11.11" class="pct low">11.11%</td>
-	<td data-value="9" class="abs low">1/9</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/popup/index.html b/test/unit/coverage/lcov-report/src/mixins/popup/index.html
deleted file mode 100644
index 864b5eaf3..000000000
--- a/test/unit/coverage/lcov-report/src/mixins/popup/index.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/mixins/popup/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> src/mixins/popup/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.18% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>19/134</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">4.88% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/82</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">4.76% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/21</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>12/120</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="index.js"><a href="index.js.html">index.js</a></td>
-	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
-	<td data-value="18.18" class="pct low">18.18%</td>
-	<td data-value="66" class="abs low">12/66</td>
-	<td data-value="10.26" class="pct low">10.26%</td>
-	<td data-value="39" class="abs low">4/39</td>
-	<td data-value="10" class="pct low">10%</td>
-	<td data-value="10" class="abs low">1/10</td>
-	<td data-value="10.71" class="pct low">10.71%</td>
-	<td data-value="56" class="abs low">6/56</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="popup-manager.js"><a href="popup-manager.js.html">popup-manager.js</a></td>
-	<td data-value="10.29" class="pic low"><div class="chart"><div class="cover-fill" style="width: 10%;"></div><div class="cover-empty" style="width:90%;"></div></div></td>
-	<td data-value="10.29" class="pct low">10.29%</td>
-	<td data-value="68" class="abs low">7/68</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="43" class="abs low">0/43</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="11" class="abs low">0/11</td>
-	<td data-value="9.38" class="pct low">9.38%</td>
-	<td data-value="64" class="abs low">6/64</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/popup/index.js.html b/test/unit/coverage/lcov-report/src/mixins/popup/index.js.html
deleted file mode 100644
index 2e8f0a0b0..000000000
--- a/test/unit/coverage/lcov-report/src/mixins/popup/index.js.html
+++ /dev/null
@@ -1,539 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/mixins/popup/index.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">src/mixins/popup/</a> index.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">18.18% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>12/66</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10.26% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>4/39</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/10</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10.71% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>6/56</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Vue from 'vue';
-import merge from 'src/utils/merge';
-import PopupManager from './popup-manager';
-&nbsp;
-let idSeed = 1;
-&nbsp;
-const getDOM = <span class="fstat-no" title="function not covered" >function(dom) {</span>
-<span class="cstat-no" title="statement not covered" >  if (dom.nodeType === 3) {</span>
-<span class="cstat-no" title="statement not covered" >    d</span>om = dom.nextElementSibling || dom.nextSibling;
-<span class="cstat-no" title="statement not covered" >    g</span>etDOM(dom);
-  }
-<span class="cstat-no" title="statement not covered" >  r</span>eturn dom;
-};
-&nbsp;
-export default <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
-  props: {
-    /**
-     * popup当前显示状态
-     */
-    value: {
-      type: Boolean,
-      default: false
-    },
-    /**
-     * 是否显示遮罩层
-     */
-    overlay: {
-      type: Boolean,
-      default: false
-    },
-    /**
-     * 点击遮罩层是否关闭popup
-     */
-    closeOnClickOverlay: {
-      type: Boolean,
-      default: false
-    },
-    zIndex: [String, Number],
-    /**
-     * popup滚动时是否body内容也滚动
-     * 默认为不滚动
-     */
-    lockOnScroll: {
-      type: Boolean,
-      default: true
-    }
-  },
-&nbsp;
-  watch: <span class="fstat-no" title="function not covered" >{</span>
-    value(val) {
-<span class="cstat-no" title="statement not covered" >      if (val) {</span>
-<span class="cstat-no" title="statement not covered" >        if (this.opening) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-<span class="cstat-no" title="statement not covered" >        t</span>his.open();
-      } else {
-<span class="cstat-no" title="statement not covered" >        if (this.closing) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-<span class="cstat-no" title="statement not covered" >        t</span>his.close();
-      }
-    }
-  },
-&nbsp;
-  beforeMount() {
-<span class="cstat-no" title="statement not covered" >    t</span>his._popupId = 'popup-' + idSeed++;
-<span class="cstat-no" title="statement not covered" >    P</span>opupManager.register(this._popupId, this);
-  },
-&nbsp;
-  data() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn {
-      opening: false,
-      opened: false,
-      closing: false,
-      bodyOverflow: null
-    };
-  },
-&nbsp;
-  methods: <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span>
-    /**
-     * 显示popup
-     */
-    open(options) {
-<span class="cstat-no" title="statement not covered" >      if (this.opened) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.opening = true;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', true);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      c</span>onst dom = getDOM(this.$el);
-<span class="cstat-no" title="statement not covered" >      c</span>onst props = merge({}, this, options);
-<span class="cstat-no" title="statement not covered" >      c</span>onst zIndex = props.zIndex;
-&nbsp;
-      // 如果属性中传入了`zIndex`,则覆盖`PopupManager`中对应的`zIndex`
-<span class="cstat-no" title="statement not covered" >      if (zIndex) {</span>
-<span class="cstat-no" title="statement not covered" >        P</span>opupManager.zIndex = zIndex;
-      }
-&nbsp;
-      // 如果显示遮罩层
-<span class="cstat-no" title="statement not covered" >      if (this.overlay) {</span>
-<span class="cstat-no" title="statement not covered" >        if (this.closing) {</span>
-<span class="cstat-no" title="statement not covered" >          P</span>opupManager.closeModal(this._popupId);
-<span class="cstat-no" title="statement not covered" >          t</span>his.closing = false;
-        }
-<span class="cstat-no" title="statement not covered" >        P</span>opupManager.openModal(this._popupId, PopupManager.nextZIndex(), dom);
-&nbsp;
-        // 如果滚动时需要锁定
-<span class="cstat-no" title="statement not covered" >        if (this.lockOnScroll) {</span>
-          // 将原来的`bodyOverflow`存起来
-<span class="cstat-no" title="statement not covered" >          if (!this.bodyOverflow) {</span>
-<span class="cstat-no" title="statement not covered" >            t</span>his.bodyOverflow = document.body.style.overflow;
-          }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >          d</span>ocument.body.style.overlay = 'hidden';
-        }
-      }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      d</span>om.style.zIndex = PopupManager.nextZIndex();
-<span class="cstat-no" title="statement not covered" >      t</span>his.opened = true;
-<span class="cstat-no" title="statement not covered" >      t</span>his.opening = false;
-    },
-&nbsp;
-    /**
-     * 关闭popup
-     */
-    close() <span class="cstat-no" title="statement not covered" >{</span>
-<span class="cstat-no" title="statement not covered" >      if (this.closing) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.closing = true;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.$emit('input', false);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      if (this.lockOnScroll) {</span>
-<span class="cstat-no" title="statement not covered" >        s</span>etTimeout(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >          if (this.modal &amp;&amp; this.bodyOverflow !== 'hidden') {</span>
-<span class="cstat-no" title="statement not covered" >            d</span>ocument.body.style.overflow = this.bodyOverflow;
-          }
-<span class="cstat-no" title="statement not covered" >          t</span>his.bodyOverflow = null;
-        }, 200);
-      }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >      t</span>his.opened = false;
-<span class="cstat-no" title="statement not covered" >      t</span>his.doAfterClose();
-    },
-&nbsp;
-    doAfterClose() {
-<span class="cstat-no" title="statement not covered" >      t</span>his.closing = false;
-<span class="cstat-no" title="statement not covered" >      P</span>opupManager.closeModal(this._popupId);
-    }
-  },
-&nbsp;
-  beforeDestroy() {
-<span class="cstat-no" title="statement not covered" >    P</span>opupManager.deregister(this._popupId);
-<span class="cstat-no" title="statement not covered" >    P</span>opupManager.closeModal(this._popupId);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (this.modal &amp;&amp; this.bodyOverflow !== null &amp;&amp; this.bodyOverflow !== 'hidden') {</span>
-<span class="cstat-no" title="statement not covered" >      d</span>ocument.body.style.overflow = this.bodyOverflow;
-    }
-<span class="cstat-no" title="statement not covered" >    t</span>his.bodyOverflow = null;
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/mixins/popup/popup-manager.js.html b/test/unit/coverage/lcov-report/src/mixins/popup/popup-manager.js.html
deleted file mode 100644
index e93e50a36..000000000
--- a/test/unit/coverage/lcov-report/src/mixins/popup/popup-manager.js.html
+++ /dev/null
@@ -1,464 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/mixins/popup/popup-manager.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../../prettify.css" />
-    <link rel="stylesheet" href="../../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../../index.html">all files</a> / <a href="index.html">src/mixins/popup/</a> popup-manager.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10.29% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>7/68</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/43</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/11</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">9.38% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>6/64</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { addClass, removeClass } from 'src/utils/dom';
-&nbsp;
-let hasModal = false;
-&nbsp;
-const getModal = <span class="fstat-no" title="function not covered" >function() {</span>
-<span class="cstat-no" title="statement not covered" >  l</span>et modalDom = PopupManager.modalDom;
-<span class="cstat-no" title="statement not covered" >  if (modalDom) {</span>
-<span class="cstat-no" title="statement not covered" >    h</span>asModal = true;
-  } else {
-<span class="cstat-no" title="statement not covered" >    h</span>asModal = false;
-<span class="cstat-no" title="statement not covered" >    m</span>odalDom = document.createElement('div');
-<span class="cstat-no" title="statement not covered" >    P</span>opupManager.modalDom = modalDom;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    m</span>odalDom.addEventListener('touchmove', <span class="fstat-no" title="function not covered" >function(event) {</span>
-<span class="cstat-no" title="statement not covered" >      e</span>vent.preventDefault();
-<span class="cstat-no" title="statement not covered" >      e</span>vent.stopPropagation();
-    });
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    m</span>odalDom.addEventListener('click', <span class="fstat-no" title="function not covered" >function() {</span>
-<span class="cstat-no" title="statement not covered" >      P</span>opupManager.handleOverlayClick &amp;&amp; PopupManager.handleOverlayClick();
-    });
-  }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  r</span>eturn modalDom;
-};
-&nbsp;
-const instances = {};
-&nbsp;
-const PopupManager = <span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >{</span></span></span></span></span></span></span>
-  zIndex: 2000,
-&nbsp;
-  modalStack: [],
-&nbsp;
-  nextZIndex() {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn this.zIndex++;
-  },
-&nbsp;
-  getInstance(id) {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn instances[id];
-  },
-&nbsp;
-  register(id, instance) {
-<span class="cstat-no" title="statement not covered" >    if (id &amp;&amp; instance) {</span>
-<span class="cstat-no" title="statement not covered" >      i</span>nstances[id] = instance;
-    }
-  },
-&nbsp;
-  deregister(id) {
-<span class="cstat-no" title="statement not covered" >    if (id) {</span>
-<span class="cstat-no" title="statement not covered" >      i</span>nstances[id] = null;
-<span class="cstat-no" title="statement not covered" >      d</span>elete instances[id];
-    }
-  },
-&nbsp;
-  /**
-   * 遮罩层点击回调,`closeOnClickOverlay`为`true`时会关闭当前`popup`
-   */
-  handleOverlayClick() {
-<span class="cstat-no" title="statement not covered" >    c</span>onst topModal = PopupManager.modalStack[PopupManager.modalStack.length - 1];
-<span class="cstat-no" title="statement not covered" >    if (!topModal) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    c</span>onst instance = PopupManager.getInstance(topModal.id);
-<span class="cstat-no" title="statement not covered" >    if (instance &amp;&amp; instance.closeOnClickOverlay) {</span>
-<span class="cstat-no" title="statement not covered" >      i</span>nstance.close();
-    }
-  },
-&nbsp;
-  openModal(id, zIndex, dom) {
-<span class="cstat-no" title="statement not covered" >    if (!id || zIndex === undefined) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    c</span>onst modalStack = this.modalStack;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    for (let i = 0, len = modalStack.length; i &lt; len; i++) {</span>
-<span class="cstat-no" title="statement not covered" >      c</span>onst item = modalStack[i];
-<span class="cstat-no" title="statement not covered" >      if (item.id === id) {</span>
-<span class="cstat-no" title="statement not covered" >        r</span>eturn;
-      }
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    c</span>onst modalDom = getModal();
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    a</span>ddClass(modalDom, 'zan-modal');
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (dom &amp;&amp; dom.parentNode &amp;&amp; dom.parentNode.nodeType !== 11) {</span>
-<span class="cstat-no" title="statement not covered" >      d</span>om.parentNode.appendChild(modalDom);
-    } else {
-<span class="cstat-no" title="statement not covered" >      d</span>ocument.body.appendChild(modalDom);
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (zIndex) {</span>
-<span class="cstat-no" title="statement not covered" >      m</span>odalDom.style.zIndex = zIndex;
-    }
-<span class="cstat-no" title="statement not covered" >    m</span>odalDom.style.display = '';
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    t</span>his.modalStack.push({ id: id, zIndex: zIndex });
-  },
-&nbsp;
-  closeModal(id) <span class="cstat-no" title="statement not covered" >{</span>
-<span class="cstat-no" title="statement not covered" >    c</span>onst modalStack = this.modalStack;
-<span class="cstat-no" title="statement not covered" >    c</span>onst modalDom = getModal();
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (modalStack.length &gt; 0) {</span>
-<span class="cstat-no" title="statement not covered" >      c</span>onst topItem = modalStack[modalStack.length - 1];
-<span class="cstat-no" title="statement not covered" >      if (topItem.id === id) {</span>
-<span class="cstat-no" title="statement not covered" >        m</span>odalStack.pop();
-<span class="cstat-no" title="statement not covered" >        if (modalStack.length &gt; 0) {</span>
-<span class="cstat-no" title="statement not covered" >          m</span>odalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;
-        }
-      } else {
-<span class="cstat-no" title="statement not covered" >        for (let i = modalStack.length - 1; i &gt;= 0; i--) {</span>
-<span class="cstat-no" title="statement not covered" >          if (modalStack[i].id === id) {</span>
-<span class="cstat-no" title="statement not covered" >            m</span>odalStack.splice(i, 1);
-<span class="cstat-no" title="statement not covered" >            b</span>reak;
-          }
-        }
-      }
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (modalStack.length === 0) {</span>
-<span class="cstat-no" title="statement not covered" >      s</span>etTimeout(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >        if (modalStack.length === 0) {</span>
-<span class="cstat-no" title="statement not covered" >          if (modalDom.parentNode) <span class="cstat-no" title="statement not covered" >m</span></span>odalDom.parentNode.removeChild(modalDom);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >          m</span>odalDom.style.display = 'none';
-<span class="cstat-no" title="statement not covered" >          t</span>his.modalDom = null;
-        }
-      }, 200);
-    }
-  }
-};
-&nbsp;
-export default PopupManager;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/utils/dom.js.html b/test/unit/coverage/lcov-report/src/utils/dom.js.html
deleted file mode 100644
index 5783903b0..000000000
--- a/test/unit/coverage/lcov-report/src/utils/dom.js.html
+++ /dev/null
@@ -1,239 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/utils/dom.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">src/utils/</a> dom.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">18.18% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>8/44</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/34</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">14.29% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>5/35</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const trim = <span class="fstat-no" title="function not covered" >function(string) {</span>
-<span class="cstat-no" title="statement not covered" >  r</span>eturn (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
-};
-&nbsp;
-export <span class="fstat-no" title="function not covered" >function hasClass(el, cls) {</span>
-<span class="cstat-no" title="statement not covered" >  if (!el || !cls) <span class="cstat-no" title="statement not covered" >r</span></span>eturn false;
-<span class="cstat-no" title="statement not covered" >  if (cls.indexOf(' ') !== -1) <span class="cstat-no" title="statement not covered" >t</span></span>hrow new Error('className should not contain space.');
-<span class="cstat-no" title="statement not covered" >  if (el.classList) {</span>
-<span class="cstat-no" title="statement not covered" >    r</span>eturn el.classList.contains(cls);
-  } else {
-<span class="cstat-no" title="statement not covered" >    r</span>eturn (' ' + el.className + ' ').indexOf(' ' + cls + ' ') &gt; -1;
-  }
-};
-&nbsp;
-export <span class="fstat-no" title="function not covered" >function addClass(el, cls) {</span>
-<span class="cstat-no" title="statement not covered" >  if (!el) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-<span class="cstat-no" title="statement not covered" >  v</span>ar curClass = el.className;
-<span class="cstat-no" title="statement not covered" >  v</span>ar classes = (cls || '').split(' ');
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  for (var i = 0, j = classes.length; i &lt; j; i++) {</span>
-<span class="cstat-no" title="statement not covered" >    v</span>ar clsName = classes[i];
-<span class="cstat-no" title="statement not covered" >    if (!clsName) <span class="cstat-no" title="statement not covered" >c</span></span>ontinue;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (el.classList) {</span>
-<span class="cstat-no" title="statement not covered" >      e</span>l.classList.add(clsName);
-    } else {
-<span class="cstat-no" title="statement not covered" >      if (!hasClass(el, clsName)) {</span>
-<span class="cstat-no" title="statement not covered" >        c</span>urClass += ' ' + clsName;
-      }
-    }
-  }
-<span class="cstat-no" title="statement not covered" >  if (!el.classList) {</span>
-<span class="cstat-no" title="statement not covered" >    e</span>l.className = curClass;
-  }
-};
-&nbsp;
-export <span class="fstat-no" title="function not covered" >function removeClass(el, cls) {</span>
-<span class="cstat-no" title="statement not covered" >  if (!el || !cls) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-<span class="cstat-no" title="statement not covered" >  v</span>ar classes = cls.split(' ');
-<span class="cstat-no" title="statement not covered" >  v</span>ar curClass = ' ' + el.className + ' ';
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  for (var i = 0, j = classes.length; i &lt; j; i++) {</span>
-<span class="cstat-no" title="statement not covered" >    v</span>ar clsName = classes[i];
-<span class="cstat-no" title="statement not covered" >    if (!clsName) <span class="cstat-no" title="statement not covered" >c</span></span>ontinue;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (el.classList) {</span>
-<span class="cstat-no" title="statement not covered" >      e</span>l.classList.remove(clsName);
-    } else {
-<span class="cstat-no" title="statement not covered" >      if (hasClass(el, clsName)) {</span>
-<span class="cstat-no" title="statement not covered" >        c</span>urClass = curClass.replace(' ' + clsName + ' ', ' ');
-      }
-    }
-  }
-<span class="cstat-no" title="statement not covered" >  if (!el.classList) {</span>
-<span class="cstat-no" title="statement not covered" >    e</span>l.className = trim(curClass);
-  }
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/utils/index.html b/test/unit/coverage/lcov-report/src/utils/index.html
deleted file mode 100644
index 310734535..000000000
--- a/test/unit/coverage/lcov-report/src/utils/index.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/utils/</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> src/utils/
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">33.06% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>40/121</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">9.8% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>10/102</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">11.11% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/9</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">31.68% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>32/101</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
-	<td class="file low" data-value="dom.js"><a href="dom.js.html">dom.js</a></td>
-	<td data-value="18.18" class="pic low"><div class="chart"><div class="cover-fill" style="width: 18%;"></div><div class="cover-empty" style="width:82%;"></div></div></td>
-	<td data-value="18.18" class="pct low">18.18%</td>
-	<td data-value="44" class="abs low">8/44</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="34" class="abs low">0/34</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="4" class="abs low">0/4</td>
-	<td data-value="14.29" class="pct low">14.29%</td>
-	<td data-value="35" class="abs low">5/35</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="merge.js"><a href="merge.js.html">merge.js</a></td>
-	<td data-value="16.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 16%;"></div><div class="cover-empty" style="width:84%;"></div></div></td>
-	<td data-value="16.67" class="pct low">16.67%</td>
-	<td data-value="12" class="abs low">2/12</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="6" class="abs low">0/6</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="10" class="pct low">10%</td>
-	<td data-value="10" class="abs low">1/10</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="transition.js"><a href="transition.js.html">transition.js</a></td>
-	<td data-value="46.15" class="pic low"><div class="chart"><div class="cover-fill" style="width: 46%;"></div><div class="cover-empty" style="width:54%;"></div></div></td>
-	<td data-value="46.15" class="pct low">46.15%</td>
-	<td data-value="65" class="abs low">30/65</td>
-	<td data-value="16.13" class="pct low">16.13%</td>
-	<td data-value="62" class="abs low">10/62</td>
-	<td data-value="25" class="pct low">25%</td>
-	<td data-value="4" class="abs low">1/4</td>
-	<td data-value="46.43" class="pct low">46.43%</td>
-	<td data-value="56" class="abs low">26/56</td>
-	</tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/utils/merge.js.html b/test/unit/coverage/lcov-report/src/utils/merge.js.html
deleted file mode 100644
index e9136ebb7..000000000
--- a/test/unit/coverage/lcov-report/src/utils/merge.js.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/utils/merge.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">src/utils/</a> merge.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.67% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>2/12</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>0/6</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">0% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>0/1</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">10% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>1/10</span>
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17</td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default <span class="fstat-no" title="function not covered" >function(target, ...<span class="cstat-no" title="statement not covered" >sources) <span class="cstat-no" title="statement not covered" >{</span></span></span>
-<span class="cstat-no" title="statement not covered" >  for (let i = 0; i &lt; sources.length; i++) {</span>
-<span class="cstat-no" title="statement not covered" >    l</span>et source = sources[i] || {};
-<span class="cstat-no" title="statement not covered" >    for (let prop in source) {</span>
-<span class="cstat-no" title="statement not covered" >      if (source.hasOwnProperty(prop)) {</span>
-<span class="cstat-no" title="statement not covered" >        l</span>et value = source[prop];
-<span class="cstat-no" title="statement not covered" >        if (value !== undefined) {</span>
-<span class="cstat-no" title="statement not covered" >          t</span>arget[prop] = value;
-        }
-      }
-    }
-  }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >  r</span>eturn target;
-};
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov-report/src/utils/transition.js.html b/test/unit/coverage/lcov-report/src/utils/transition.js.html
deleted file mode 100644
index 6e3ec62af..000000000
--- a/test/unit/coverage/lcov-report/src/utils/transition.js.html
+++ /dev/null
@@ -1,372 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for src/utils/transition.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-<body>
-<div class='wrapper'>
-  <div class='pad1'>
-    <h1>
-      <a href="../../index.html">all files</a> / <a href="index.html">src/utils/</a> transition.js
-    </h1>
-    <div class='clearfix'>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">46.15% </span>
-        <span class="quiet">Statements</span>
-        <span class='fraction'>30/65</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">16.13% </span>
-        <span class="quiet">Branches</span>
-        <span class='fraction'>10/62</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">25% </span>
-        <span class="quiet">Functions</span>
-        <span class='fraction'>1/4</span>
-      </div>
-      <div class='fl pad1y space-right2'>
-        <span class="strong">46.43% </span>
-        <span class="quiet">Lines</span>
-        <span class='fraction'>26/56</span>
-      </div>
-      <div class='fl pad1y'>
-        <span class="strong">1 branch</span>
-        <span class="quiet">Ignored</span>  &nbsp;&nbsp;&nbsp;&nbsp;
-      </div>
-    </div>
-  </div>
-  <div class='status-line low'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1×</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Vue from 'vue';
-&nbsp;
-var exportObj = {};
-&nbsp;
-<span class="missing-if-branch" title="else path not taken" >E</span>if (!Vue.prototype.$isServer) {
-  var docStyle = document.documentElement.style;
-  var engine;
-  var translate3d = false;
-&nbsp;
-  <span class="missing-if-branch" title="if path not taken" >I</span>i</span>f (window.opera &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >Object.prototype.toString.call(window.opera) === '[object Opera]') {
-<span class="cstat-no" title="statement not covered" >    e</span>ngine = 'presto';
-  } else <span class="missing-if-branch" title="if path not taken" >I</span>if ('MozAppearance' in docStyle) {
-<span class="cstat-no" title="statement not covered" >    e</span>ngine = 'gecko';
-  } else <span class="missing-if-branch" title="else path not taken" >E</span>if ('WebkitAppearance' in docStyle) {
-    engine = 'webkit';
-  } else <span class="cstat-no" title="statement not covered" >if (typeof navigator.cpuClass === 'string') {</span>
-<span class="cstat-no" title="statement not covered" >    e</span>ngine = 'trident';
-  }
-&nbsp;
-  var cssPrefix = {trident: '-ms-', gecko: '-moz-', webkit: '-webkit-', presto: '-o-'}[engine];
-&nbsp;
-  var vendorPrefix = {trident: 'ms', gecko: 'Moz', webkit: 'Webkit', presto: 'O'}[engine];
-&nbsp;
-  var helperElem = document.createElement('div');
-  var perspectiveProperty = vendorPrefix + 'Perspective';
-  var transformProperty = vendorPrefix + 'Transform';
-  var transformStyleName = cssPrefix + 'transform';
-  var transitionProperty = vendorPrefix + 'Transition';
-  var transitionStyleName = cssPrefix + 'transition';
-  var transitionEndProperty = vendorPrefix.toLowerCase() + 'TransitionEnd';
-&nbsp;
-  <span class="missing-if-branch" title="else path not taken" >E</span>if (helperElem.style[perspectiveProperty] !== undefined) {
-    translate3d = true;
-  }
-&nbsp;
-  var getTranslate = <span class="fstat-no" title="function not covered" >function(element) {</span>
-<span class="cstat-no" title="statement not covered" >    v</span>ar result = {left: 0, top: 0};
-<span class="cstat-no" title="statement not covered" >    if (element === null || element.style === null) <span class="cstat-no" title="statement not covered" >r</span></span>eturn result;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    v</span>ar transform = element.style[transformProperty];
-<span class="cstat-no" title="statement not covered" >    v</span>ar matches = /translate\(\s*(-?\d+(\.?\d+?)?)px,\s*(-?\d+(\.\d+)?)px\)\s*translateZ\(0px\)/ig.exec(transform);
-<span class="cstat-no" title="statement not covered" >    if (matches) {</span>
-<span class="cstat-no" title="statement not covered" >      r</span>esult.left = +matches[1];
-<span class="cstat-no" title="statement not covered" >      r</span>esult.top = +matches[3];
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    r</span>eturn result;
-  };
-&nbsp;
-  var translateElement = <span class="fstat-no" title="function not covered" >function(element, x, y) {</span>
-<span class="cstat-no" title="statement not covered" >    if (x === null &amp;&amp; y === null) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (element === null || element === undefined || element.style === null) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (!element.style[transformProperty] &amp;&amp; x === 0 &amp;&amp; y === 0) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (x === null || y === null) {</span>
-<span class="cstat-no" title="statement not covered" >      v</span>ar translate = getTranslate(element);
-<span class="cstat-no" title="statement not covered" >      if (x === null) {</span>
-<span class="cstat-no" title="statement not covered" >        x</span> = translate.left;
-      }
-<span class="cstat-no" title="statement not covered" >      if (y === null) {</span>
-<span class="cstat-no" title="statement not covered" >        y</span> = translate.top;
-      }
-    }
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    c</span>ancelTranslateElement(element);
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (translate3d) {</span>
-<span class="cstat-no" title="statement not covered" >      e</span>lement.style[transformProperty] += ' translate(' + (x ? (x + 'px') : '0px') + ',' + (y ? (y + 'px') : '0px') + ') translateZ(0px)';
-    } else {
-<span class="cstat-no" title="statement not covered" >      e</span>lement.style[transformProperty] += ' translate(' + (x ? (x + 'px') : '0px') + ',' + (y ? (y + 'px') : '0px') + ')';
-    }
-  };
-&nbsp;
-  var cancelTranslateElement = <span class="fstat-no" title="function not covered" >function(element) {</span>
-<span class="cstat-no" title="statement not covered" >    if (element === null || element.style === null) <span class="cstat-no" title="statement not covered" >r</span></span>eturn;
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    v</span>ar transformValue = element.style[transformProperty];
-&nbsp;
-<span class="cstat-no" title="statement not covered" >    if (transformValue) {</span>
-<span class="cstat-no" title="statement not covered" >      t</span>ransformValue = transformValue.replace(/translate\(\s*(-?\d+(\.?\d+?)?)px,\s*(-?\d+(\.\d+)?)px\)\s*translateZ\(0px\)/g, '');
-<span class="cstat-no" title="statement not covered" >      e</span>lement.style[transformProperty] = transformValue;
-    }
-  };
-&nbsp;
-  exportObj = {
-    transformProperty: transformProperty,
-    transformStyleName: transformStyleName,
-    transitionProperty: transitionProperty,
-    transitionStyleName: transitionStyleName,
-    transitionEndProperty: transitionEndProperty,
-    getElementTranslate: getTranslate,
-    translateElement: translateElement,
-    cancelTranslateElement: cancelTranslateElement
-  };
-};
-&nbsp;
-export default exportObj;
-&nbsp;
-&nbsp;
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
-  Code coverage
-  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Mar 02 2017 17:21:26 GMT+0800 (CST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
-        if (typeof prettyPrint === 'function') {
-            prettyPrint();
-        }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/test/unit/coverage/lcov.info b/test/unit/coverage/lcov.info
deleted file mode 100644
index 9a4d7f086..000000000
--- a/test/unit/coverage/lcov.info
+++ /dev/null
@@ -1,2065 +0,0 @@
-TN:
-SF:/Users/chenyao/youzan/oxygen/src/index.js
-FN:91,_interopRequireDefault
-FN:93,install
-FNF:2
-FNH:1
-FNDA:22,_interopRequireDefault
-FNDA:0,install
-DA:0,22
-DA:1,1
-DA:2,1
-DA:3,1
-DA:4,1
-DA:5,1
-DA:6,1
-DA:7,1
-DA:8,1
-DA:9,1
-DA:10,1
-DA:11,1
-DA:12,1
-DA:13,1
-DA:14,1
-DA:15,1
-DA:16,1
-DA:17,1
-DA:18,1
-DA:19,1
-DA:20,1
-DA:21,1
-DA:22,1
-DA:24,1
-DA:25,0
-DA:27,0
-DA:28,0
-DA:29,0
-DA:30,0
-DA:31,0
-DA:32,0
-DA:33,0
-DA:34,0
-DA:35,0
-DA:36,0
-DA:37,0
-DA:38,0
-DA:39,0
-DA:40,0
-DA:41,0
-DA:42,0
-DA:43,0
-DA:44,0
-DA:45,0
-DA:46,0
-DA:50,1
-DA:51,0
-DA:54,1
-LF:48
-LH:26
-BRDA:91,1,0,22
-BRDA:91,1,1,0
-BRDA:91,2,0,22
-BRDA:91,2,1,22
-BRDA:94,3,0,0
-BRDA:94,3,1,0
-BRDA:119,4,0,0
-BRDA:119,4,1,1
-BRDA:119,5,0,1
-BRDA:119,5,1,1
-BRF:10
-BRH:7
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/button/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,1
-BRDA:11,1,1,0
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/button/src/button.js
-FN:37,validator
-FN:44,validator
-FN:51,handleClick
-FN:56,render
-FNF:4
-FNH:0
-FNDA:0,validator
-FNDA:0,validator
-FNDA:0,handleClick
-FNDA:0,render
-DA:0,1
-DA:14,1
-DA:15,1
-DA:33,0
-DA:40,0
-DA:47,0
-DA:51,0
-DA:53,0
-DA:55,0
-LF:9
-LH:3
-BRDA:82,1,0,0
-BRDA:82,1,1,0
-BRF:2
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/switch/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/switch/src/switch.vue
-FN:44,_default
-FN:48,switchState
-FN:61,toggleState
-FNF:3
-FNH:0
-FNDA:0,_default
-FNDA:0,switchState
-FNDA:0,toggleState
-DA:0,1
-DA:44,0
-DA:46,0
-DA:47,0
-DA:49,0
-DA:57,0
-DA:58,0
-LF:7
-LH:1
-BRDA:49,1,0,0
-BRDA:49,1,1,0
-BRDA:51,2,0,0
-BRDA:51,2,1,0
-BRDA:52,3,0,0
-BRDA:52,3,1,0
-BRDA:62,4,0,0
-BRDA:62,4,1,0
-BRDA:62,5,0,0
-BRDA:62,5,1,0
-BRF:10
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/field/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/field/src/field.vue
-FN:11,_interopRequireDefault
-FN:33,data
-FN:41,value
-FN:44,currentValue
-FN:51,handleInput
-FNF:5
-FNH:1
-FNDA:1,_interopRequireDefault
-FNDA:0,data
-FNDA:0,value
-FNDA:0,currentValue
-FNDA:0,handleInput
-DA:0,1
-DA:34,1
-DA:57,0
-DA:64,0
-DA:68,0
-DA:69,0
-DA:75,0
-LF:7
-LH:2
-BRDA:11,1,0,1
-BRDA:11,1,1,0
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/cell/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/cell/src/cell.vue
-FN:43,handleClick
-FNF:1
-FNH:0
-FNDA:0,handleClick
-DA:0,1
-DA:39,0
-LF:2
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/radio/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/radio/src/radio.vue
-FN:11,_interopRequireDefault
-FN:25,isGroup
-FN:31,get
-FN:34,set
-FN:43,isDisabled
-FNF:5
-FNH:1
-FNDA:1,_interopRequireDefault
-FNDA:0,isGroup
-FNDA:0,get
-FNDA:0,set
-FNDA:0,isDisabled
-DA:0,1
-DA:27,1
-DA:42,0
-DA:47,0
-DA:51,0
-DA:52,0
-DA:54,0
-DA:60,0
-LF:8
-LH:2
-BRDA:11,1,0,1
-BRDA:11,1,1,0
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRDA:32,3,0,0
-BRDA:32,3,1,0
-BRDA:32,4,0,0
-BRDA:32,4,1,0
-BRDA:35,5,0,0
-BRDA:35,5,1,0
-BRDA:35,6,0,0
-BRDA:35,6,1,0
-BRDA:44,7,0,0
-BRDA:44,7,1,0
-BRDA:44,8,0,0
-BRDA:44,8,1,0
-BRDA:44,9,0,0
-BRDA:44,9,1,0
-BRF:18
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/src/mixins/findParent.js
-FN:11,findParentByComponentName
-FNF:1
-FNH:0
-FNDA:0,findParentByComponentName
-DA:0,1
-DA:7,0
-DA:9,0
-DA:10,0
-DA:11,0
-DA:12,0
-DA:13,0
-DA:15,0
-DA:19,0
-LF:9
-LH:1
-BRDA:12,1,0,0
-BRDA:12,1,1,0
-BRDA:16,2,0,0
-BRDA:16,2,1,0
-BRF:4
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/icon/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/icon/src/icon.vue
-FNF:0
-FNH:0
-DA:0,1
-LF:1
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/cell-group/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/cell/src/cell-group.vue
-FNF:0
-FNH:0
-DA:0,1
-LF:1
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/popup/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/popup/src/popup.vue
-FN:11,_interopRequireDefault
-FN:42,data
-FN:51,currentValue
-FN:54,value
-FN:59,beforeMount
-FN:64,mounted
-FNF:6
-FNH:1
-FNDA:1,_interopRequireDefault
-FNDA:0,data
-FNDA:0,currentValue
-FNDA:0,value
-FNDA:0,beforeMount
-FNDA:0,mounted
-DA:0,1
-DA:10,1
-DA:42,0
-DA:50,0
-DA:54,0
-DA:59,0
-DA:60,0
-DA:65,0
-DA:66,0
-DA:67,0
-LF:10
-LH:2
-BRDA:11,1,0,1
-BRDA:11,1,1,0
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRDA:60,3,0,0
-BRDA:60,3,1,0
-BRDA:65,4,0,0
-BRDA:65,4,1,0
-BRF:8
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/src/mixins/popup/index.js
-FN:19,_interopRequireDefault
-FN:23,getDOM
-FN:66,value
-FN:77,beforeMount
-FN:81,data
-FN:95,open
-FN:139,close
-FN:149,(anonymous_8)
-FN:160,doAfterClose
-FN:166,beforeDestroy
-FNF:10
-FNH:1
-FNDA:3,_interopRequireDefault
-FNDA:0,getDOM
-FNDA:0,value
-FNDA:0,beforeMount
-FNDA:0,data
-FNDA:0,open
-FNDA:0,close
-FNDA:0,(anonymous_8)
-FNDA:0,doAfterClose
-FNDA:0,beforeDestroy
-DA:0,3
-DA:1,1
-DA:2,1
-DA:3,1
-DA:5,1
-DA:7,1
-DA:8,0
-DA:9,0
-DA:10,0
-DA:12,0
-DA:51,0
-DA:52,0
-DA:53,0
-DA:55,0
-DA:56,0
-DA:62,0
-DA:63,0
-DA:67,0
-DA:80,0
-DA:82,0
-DA:84,0
-DA:86,0
-DA:87,0
-DA:88,0
-DA:91,0
-DA:92,0
-DA:96,0
-DA:97,0
-DA:98,0
-DA:99,0
-DA:101,0
-DA:104,0
-DA:106,0
-DA:107,0
-DA:110,0
-DA:114,0
-DA:115,0
-DA:116,0
-DA:122,0
-DA:123,0
-DA:125,0
-DA:127,0
-DA:129,0
-DA:130,0
-DA:131,0
-DA:132,0
-DA:134,0
-DA:138,0
-DA:139,0
-DA:143,0
-DA:144,0
-DA:149,0
-DA:150,0
-DA:152,0
-DA:153,0
-DA:155,0
-LF:56
-LH:6
-BRDA:19,1,0,2
-BRDA:19,1,1,1
-BRDA:19,2,0,3
-BRDA:19,2,1,3
-BRDA:24,3,0,0
-BRDA:24,3,1,0
-BRDA:25,4,0,0
-BRDA:25,4,1,0
-BRDA:67,5,0,0
-BRDA:67,5,1,0
-BRDA:68,6,0,0
-BRDA:68,6,1,0
-BRDA:71,7,0,0
-BRDA:71,7,1,0
-BRDA:96,8,0,0
-BRDA:96,8,1,0
-BRDA:107,9,0,0
-BRDA:107,9,1,0
-BRDA:112,10,0,0
-BRDA:112,10,1,0
-BRDA:113,11,0,0
-BRDA:113,11,1,0
-BRDA:120,12,0,0
-BRDA:120,12,1,0
-BRDA:122,13,0,0
-BRDA:122,13,1,0
-BRDA:142,14,0,0
-BRDA:142,14,1,0
-BRDA:148,15,0,0
-BRDA:148,15,1,0
-BRDA:150,16,0,0
-BRDA:150,16,1,0
-BRDA:150,17,0,0
-BRDA:150,17,1,0
-BRDA:170,18,0,0
-BRDA:170,18,1,0
-BRDA:170,19,0,0
-BRDA:170,19,1,0
-BRDA:170,19,2,0
-BRF:39
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/src/utils/merge.js
-FN:7,(anonymous_1)
-FNF:1
-FNH:0
-FNDA:0,(anonymous_1)
-DA:0,1
-DA:1,0
-DA:2,0
-DA:3,0
-DA:4,0
-DA:5,0
-DA:6,0
-DA:7,0
-DA:8,0
-DA:14,0
-LF:10
-LH:1
-BRDA:13,1,0,0
-BRDA:13,1,1,0
-BRDA:15,2,0,0
-BRDA:15,2,1,0
-BRDA:17,3,0,0
-BRDA:17,3,1,0
-BRF:6
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/src/mixins/popup/popup-manager.js
-FN:11,getModal
-FN:20,(anonymous_2)
-FN:25,(anonymous_3)
-FN:40,nextZIndex
-FN:43,getInstance
-FN:46,register
-FN:51,deregister
-FN:62,handleOverlayClick
-FN:71,openModal
-FN:100,closeModal
-FN:124,(anonymous_11)
-FNF:11
-FNH:0
-FNDA:0,getModal
-FNDA:0,(anonymous_2)
-FNDA:0,(anonymous_3)
-FNDA:0,nextZIndex
-FNDA:0,getInstance
-FNDA:0,register
-FNDA:0,deregister
-FNDA:0,handleOverlayClick
-FNDA:0,openModal
-FNDA:0,closeModal
-FNDA:0,(anonymous_11)
-DA:0,1
-DA:1,1
-DA:3,1
-DA:5,1
-DA:6,0
-DA:7,0
-DA:8,0
-DA:10,0
-DA:11,0
-DA:12,0
-DA:14,0
-DA:15,0
-DA:16,0
-DA:19,0
-DA:20,0
-DA:24,0
-DA:27,1
-DA:29,1
-DA:35,0
-DA:39,0
-DA:43,0
-DA:44,0
-DA:49,0
-DA:50,0
-DA:51,0
-DA:59,0
-DA:60,0
-DA:62,0
-DA:63,0
-DA:64,0
-DA:69,0
-DA:71,0
-DA:73,0
-DA:74,0
-DA:75,0
-DA:76,0
-DA:80,0
-DA:82,0
-DA:84,0
-DA:85,0
-DA:87,0
-DA:90,0
-DA:91,0
-DA:93,0
-DA:95,0
-DA:98,0
-DA:99,0
-DA:100,0
-DA:102,0
-DA:103,0
-DA:104,0
-DA:105,0
-DA:106,0
-DA:107,0
-DA:110,0
-DA:111,0
-DA:112,0
-DA:113,0
-DA:119,0
-DA:120,0
-DA:121,0
-DA:122,0
-DA:124,0
-DA:125,0
-LF:64
-LH:6
-BRDA:13,1,0,0
-BRDA:13,1,1,0
-BRDA:26,2,0,0
-BRDA:26,2,1,0
-BRDA:47,3,0,0
-BRDA:47,3,1,0
-BRDA:47,4,0,0
-BRDA:47,4,1,0
-BRDA:52,5,0,0
-BRDA:52,5,1,0
-BRDA:64,6,0,0
-BRDA:64,6,1,0
-BRDA:67,7,0,0
-BRDA:67,7,1,0
-BRDA:67,8,0,0
-BRDA:67,8,1,0
-BRDA:72,9,0,0
-BRDA:72,9,1,0
-BRDA:72,10,0,0
-BRDA:72,10,1,0
-BRDA:78,11,0,0
-BRDA:78,11,1,0
-BRDA:87,12,0,0
-BRDA:87,12,1,0
-BRDA:87,13,0,0
-BRDA:87,13,1,0
-BRDA:87,13,2,0
-BRDA:93,14,0,0
-BRDA:93,14,1,0
-BRDA:106,15,0,0
-BRDA:106,15,1,0
-BRDA:108,16,0,0
-BRDA:108,16,1,0
-BRDA:110,17,0,0
-BRDA:110,17,1,0
-BRDA:115,18,0,0
-BRDA:115,18,1,0
-BRDA:123,19,0,0
-BRDA:123,19,1,0
-BRDA:125,20,0,0
-BRDA:125,20,1,0
-BRDA:126,21,0,0
-BRDA:126,21,1,0
-BRF:43
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/src/utils/dom.js
-FN:9,trim
-FN:13,hasClass
-FN:23,addClass
-FN:45,removeClass
-FNF:4
-FNH:0
-FNDA:0,trim
-FNDA:0,hasClass
-FNDA:0,addClass
-FNDA:0,removeClass
-DA:0,1
-DA:1,1
-DA:2,0
-DA:5,1
-DA:6,0
-DA:7,0
-DA:8,0
-DA:9,0
-DA:11,0
-DA:15,1
-DA:16,0
-DA:17,0
-DA:18,0
-DA:20,0
-DA:21,0
-DA:22,0
-DA:24,0
-DA:25,0
-DA:27,0
-DA:28,0
-DA:32,0
-DA:33,0
-DA:37,1
-DA:38,0
-DA:39,0
-DA:40,0
-DA:42,0
-DA:43,0
-DA:44,0
-DA:46,0
-DA:47,0
-DA:49,0
-DA:50,0
-DA:54,0
-DA:55,0
-LF:35
-LH:5
-BRDA:10,1,0,0
-BRDA:10,1,1,0
-BRDA:14,2,0,0
-BRDA:14,2,1,0
-BRDA:14,3,0,0
-BRDA:14,3,1,0
-BRDA:15,4,0,0
-BRDA:15,4,1,0
-BRDA:16,5,0,0
-BRDA:16,5,1,0
-BRDA:24,6,0,0
-BRDA:24,6,1,0
-BRDA:26,7,0,0
-BRDA:26,7,1,0
-BRDA:30,8,0,0
-BRDA:30,8,1,0
-BRDA:32,9,0,0
-BRDA:32,9,1,0
-BRDA:35,10,0,0
-BRDA:35,10,1,0
-BRDA:40,11,0,0
-BRDA:40,11,1,0
-BRDA:46,12,0,0
-BRDA:46,12,1,0
-BRDA:46,13,0,0
-BRDA:46,13,1,0
-BRDA:52,14,0,0
-BRDA:52,14,1,0
-BRDA:54,15,0,0
-BRDA:54,15,1,0
-BRDA:57,16,0,0
-BRDA:57,16,1,0
-BRDA:62,17,0,0
-BRDA:62,17,1,0
-BRF:34
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/dialog/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,1
-BRDA:11,1,1,0
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/dialog/src/dialog.js
-FN:23,_interopRequireDefault
-FN:31,defaultCallback
-FN:47,initInstance
-FN:55,showNextDialog
-FN:77,(anonymous_5)
-FN:83,DialogBox
-FN:84,(anonymous_7)
-FN:97,(anonymous_8)
-FN:105,(anonymous_9)
-FN:113,(anonymous_10)
-FNF:10
-FNH:1
-FNDA:4,_interopRequireDefault
-FNDA:0,defaultCallback
-FNDA:0,initInstance
-FNDA:0,showNextDialog
-FNDA:0,(anonymous_5)
-FNDA:0,DialogBox
-FNDA:0,(anonymous_7)
-FNDA:0,(anonymous_8)
-FNDA:0,(anonymous_9)
-FNDA:0,(anonymous_10)
-DA:0,4
-DA:1,1
-DA:2,1
-DA:3,1
-DA:5,1
-DA:7,1
-DA:8,1
-DA:9,1
-DA:11,1
-DA:12,0
-DA:13,0
-DA:15,0
-DA:16,0
-DA:19,0
-DA:20,0
-DA:21,0
-DA:22,0
-DA:27,1
-DA:28,0
-DA:32,0
-DA:35,1
-DA:36,0
-DA:37,0
-DA:40,0
-DA:41,0
-DA:43,0
-DA:45,0
-DA:46,0
-DA:47,0
-DA:51,0
-DA:52,0
-DA:55,0
-DA:57,0
-DA:58,0
-DA:63,1
-DA:64,0
-DA:65,0
-DA:72,0
-DA:76,1
-DA:77,0
-DA:84,1
-DA:85,0
-DA:92,1
-DA:93,0
-DA:94,0
-DA:95,0
-LF:46
-LH:15
-BRDA:23,1,0,2
-BRDA:23,1,1,2
-BRDA:23,2,0,4
-BRDA:23,2,1,4
-BRDA:32,3,0,0
-BRDA:32,3,1,0
-BRDA:35,4,0,0
-BRDA:35,4,1,0
-BRDA:39,5,0,0
-BRDA:39,5,1,0
-BRDA:39,6,0,0
-BRDA:39,6,1,0
-BRDA:41,7,0,0
-BRDA:41,7,1,0
-BRDA:41,8,0,0
-BRDA:41,8,1,0
-BRDA:56,9,0,0
-BRDA:56,9,1,0
-BRDA:60,10,0,0
-BRDA:60,10,1,0
-BRDA:60,11,0,0
-BRDA:60,11,1,0
-BRDA:66,12,0,0
-BRDA:66,12,1,0
-BRDA:71,13,0,0
-BRDA:71,13,1,0
-BRF:26
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/dialog/src/dialog.vue
-FN:11,_interopRequireDefault
-FN:52,data
-FN:67,handleAction
-FN:71,close
-FN:81,(anonymous_5)
-FNF:5
-FNH:1
-FNDA:1,_interopRequireDefault
-FNDA:0,data
-FNDA:0,handleAction
-FNDA:0,close
-FNDA:0,(anonymous_5)
-DA:0,1
-DA:21,1
-DA:24,1
-DA:44,0
-DA:58,0
-DA:59,0
-DA:62,0
-DA:63,0
-DA:65,0
-DA:67,0
-DA:69,0
-DA:70,0
-DA:71,0
-DA:72,0
-DA:73,0
-DA:75,0
-DA:76,0
-DA:80,0
-DA:81,0
-LF:19
-LH:3
-BRDA:11,1,0,1
-BRDA:11,1,1,0
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRDA:69,3,0,0
-BRDA:69,3,1,0
-BRDA:74,4,0,0
-BRDA:74,4,1,0
-BRDA:80,5,0,0
-BRDA:80,5,1,0
-BRDA:82,6,0,0
-BRDA:82,6,1,0
-BRDA:82,7,0,0
-BRDA:82,7,1,0
-BRF:14
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/picker/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/picker/src/picker.vue
-FN:11,_interopRequireDefault
-FN:62,_default
-FN:76,values
-FN:80,(anonymous_4)
-FN:92,columnValueChange
-FN:100,getColumn
-FN:101,(anonymous_7)
-FN:111,getColumnValue
-FN:120,setColumnValue
-FN:131,getColumnValues
-FN:140,setColumnValues
-FN:151,getValues
-FN:159,setValues
-FN:162,(anonymous_14)
-FNF:14
-FNH:1
-FNDA:1,_interopRequireDefault
-FNDA:0,_default
-FNDA:0,values
-FNDA:0,(anonymous_4)
-FNDA:0,columnValueChange
-FNDA:0,getColumn
-FNDA:0,(anonymous_7)
-FNDA:0,getColumnValue
-FNDA:0,setColumnValue
-FNDA:0,getColumnValues
-FNDA:0,setColumnValues
-FNDA:0,getValues
-FNDA:0,setValues
-FNDA:0,(anonymous_14)
-DA:0,1
-DA:23,1
-DA:55,0
-DA:69,0
-DA:70,0
-DA:72,0
-DA:73,0
-DA:76,0
-DA:85,0
-DA:92,0
-DA:93,0
-DA:100,0
-DA:101,0
-DA:108,0
-DA:109,0
-DA:110,0
-DA:118,0
-DA:119,0
-DA:126,0
-DA:127,0
-DA:128,0
-DA:136,0
-DA:142,0
-DA:143,0
-DA:144,0
-LF:25
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRDA:77,3,0,0
-BRDA:77,3,1,0
-BRDA:81,4,0,0
-BRDA:81,4,1,0
-BRDA:81,5,0,0
-BRDA:81,5,1,0
-BRDA:113,6,0,0
-BRDA:113,6,1,0
-BRDA:122,7,0,0
-BRDA:122,7,1,0
-BRDA:133,8,0,0
-BRDA:133,8,1,0
-BRDA:142,9,0,0
-BRDA:142,9,1,0
-BRF:18
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/picker/src/picker-column.vue
-FN:15,_interopRequireDefault
-FN:50,_default
-FN:71,data
-FN:81,values
-FN:84,currentValues
-FN:89,currentValue
-FN:100,visibleContentHeight
-FN:108,valueIndex
-FN:116,dragRange
-FN:128,classNames
-FN:133,mounted
-FN:143,value2Translate
-FN:158,translate2Value
-FN:171,initEvents
-FN:182,start
-FN:194,drag
-FN:210,end
-FN:225,(anonymous_18)
-FN:252,doOnValueChange
-FNF:19
-FNH:1
-FNDA:2,_interopRequireDefault
-FNDA:0,_default
-FNDA:0,data
-FNDA:0,values
-FNDA:0,currentValues
-FNDA:0,currentValue
-FNDA:0,visibleContentHeight
-FNDA:0,valueIndex
-FNDA:0,dragRange
-FNDA:0,classNames
-FNDA:0,mounted
-FNDA:0,value2Translate
-FNDA:0,translate2Value
-FNDA:0,initEvents
-FNDA:0,start
-FNDA:0,drag
-FNDA:0,end
-FNDA:0,(anonymous_18)
-FNDA:0,doOnValueChange
-DA:0,2
-DA:16,1
-DA:17,1
-DA:19,1
-DA:38,0
-DA:59,0
-DA:68,0
-DA:72,0
-DA:73,0
-DA:78,0
-DA:80,0
-DA:89,0
-DA:96,0
-DA:103,0
-DA:104,0
-DA:105,0
-DA:107,0
-DA:114,0
-DA:119,0
-DA:120,0
-DA:128,0
-DA:129,0
-DA:130,0
-DA:131,0
-DA:133,0
-DA:134,0
-DA:142,0
-DA:143,0
-DA:145,0
-DA:147,0
-DA:153,0
-DA:154,0
-DA:155,0
-DA:157,0
-DA:158,0
-DA:159,0
-DA:161,0
-DA:164,0
-DA:171,0
-DA:175,0
-DA:177,0
-DA:178,0
-DA:180,0
-DA:181,0
-DA:183,0
-DA:185,0
-DA:187,0
-DA:191,0
-DA:192,0
-DA:194,0
-DA:195,0
-DA:196,0
-DA:198,0
-DA:199,0
-DA:200,0
-DA:203,0
-DA:205,0
-DA:206,0
-DA:207,0
-DA:209,0
-DA:210,0
-DA:212,0
-DA:215,0
-DA:217,0
-DA:219,0
-DA:223,0
-DA:232,0
-DA:233,0
-DA:235,0
-DA:237,0
-LF:70
-LH:4
-BRDA:15,1,0,2
-BRDA:15,1,1,0
-BRDA:15,2,0,2
-BRDA:15,2,1,2
-BRDA:85,3,0,0
-BRDA:85,3,1,0
-BRDA:86,4,0,0
-BRDA:86,4,1,0
-BRDA:149,5,0,0
-BRDA:149,5,1,0
-BRDA:205,6,0,0
-BRDA:205,6,1,0
-BRDA:211,7,0,0
-BRDA:211,7,1,0
-BRDA:219,8,0,0
-BRDA:219,8,1,0
-BRDA:229,9,0,0
-BRDA:229,9,1,0
-BRF:18
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/src/utils/transition.js
-FN:11,_interopRequireDefault
-FN:46,getTranslate
-FN:60,translateElement
-FN:86,cancelTranslateElement
-FNF:4
-FNH:1
-FNDA:1,_interopRequireDefault
-FNDA:0,getTranslate
-FNDA:0,translateElement
-FNDA:0,cancelTranslateElement
-DA:0,1
-DA:1,1
-DA:3,1
-DA:5,1
-DA:6,1
-DA:7,1
-DA:8,1
-DA:10,1
-DA:11,0
-DA:12,1
-DA:13,0
-DA:14,1
-DA:15,1
-DA:16,0
-DA:17,0
-DA:20,1
-DA:22,1
-DA:24,1
-DA:25,1
-DA:26,1
-DA:27,1
-DA:28,1
-DA:29,1
-DA:30,1
-DA:32,1
-DA:33,1
-DA:36,1
-DA:37,0
-DA:38,0
-DA:40,0
-DA:41,0
-DA:42,0
-DA:43,0
-DA:44,0
-DA:47,0
-DA:50,1
-DA:51,0
-DA:53,0
-DA:55,0
-DA:57,0
-DA:58,0
-DA:59,0
-DA:60,0
-DA:62,0
-DA:63,0
-DA:67,0
-DA:69,0
-DA:70,0
-DA:72,0
-DA:76,1
-DA:77,0
-DA:79,0
-DA:81,0
-DA:82,0
-DA:83,0
-DA:87,1
-LF:56
-LH:26
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRDA:15,3,0,1
-BRDA:15,3,1,0
-BRDA:20,4,0,0
-BRDA:20,4,1,1
-BRDA:20,5,0,1
-BRDA:20,5,1,0
-BRDA:22,6,0,0
-BRDA:22,6,1,1
-BRDA:24,7,0,1
-BRDA:24,7,1,0
-BRDA:26,8,0,0
-BRDA:26,8,1,0
-BRDA:42,9,0,1
-BRDA:42,9,1,0
-BRDA:48,10,0,0
-BRDA:48,10,1,0
-BRDA:48,11,0,0
-BRDA:48,11,1,0
-BRDA:52,12,0,0
-BRDA:52,12,1,0
-BRDA:61,13,0,0
-BRDA:61,13,1,0
-BRDA:61,14,0,0
-BRDA:61,14,1,0
-BRDA:63,15,0,0
-BRDA:63,15,1,0
-BRDA:63,16,0,0
-BRDA:63,16,1,0
-BRDA:63,16,2,0
-BRDA:65,17,0,0
-BRDA:65,17,1,0
-BRDA:65,18,0,0
-BRDA:65,18,1,0
-BRDA:65,18,2,0
-BRDA:67,19,0,0
-BRDA:67,19,1,0
-BRDA:67,20,0,0
-BRDA:67,20,1,0
-BRDA:69,21,0,0
-BRDA:69,21,1,0
-BRDA:72,22,0,0
-BRDA:72,22,1,0
-BRDA:79,23,0,0
-BRDA:79,23,1,0
-BRDA:80,24,0,0
-BRDA:80,24,1,0
-BRDA:80,25,0,0
-BRDA:80,25,1,0
-BRDA:82,26,0,0
-BRDA:82,26,1,0
-BRDA:82,27,0,0
-BRDA:82,27,1,0
-BRDA:87,28,0,0
-BRDA:87,28,1,0
-BRDA:87,29,0,0
-BRDA:87,29,1,0
-BRDA:91,30,0,0
-BRDA:91,30,1,0
-BRF:62
-BRH:10
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/picker/src/draggable.js
-FN:7,(anonymous_1)
-FN:8,moveFn
-FN:14,endFn
-FN:29,(anonymous_4)
-FN:31,(anonymous_5)
-FN:34,(anonymous_6)
-FN:61,_interopRequireDefault
-FNF:7
-FNH:1
-FNDA:0,(anonymous_1)
-FNDA:0,moveFn
-FNDA:0,endFn
-FNDA:0,(anonymous_4)
-FNDA:0,(anonymous_5)
-FNDA:0,(anonymous_6)
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-DA:3,1
-DA:5,1
-DA:8,0
-DA:9,0
-DA:10,0
-DA:14,0
-DA:15,0
-DA:16,0
-DA:17,0
-DA:19,0
-DA:20,0
-DA:22,0
-DA:24,0
-DA:25,0
-DA:29,0
-DA:30,0
-DA:31,0
-DA:32,0
-DA:34,0
-DA:35,0
-DA:36,0
-DA:38,0
-DA:40,0
-DA:41,0
-DA:42,0
-DA:46,0
-DA:47,0
-DA:48,0
-DA:49,0
-LF:31
-LH:4
-BRDA:9,1,0,0
-BRDA:9,1,1,0
-BRDA:10,2,0,0
-BRDA:10,2,1,0
-BRDA:10,3,0,0
-BRDA:10,3,1,0
-BRDA:15,4,0,0
-BRDA:15,4,1,0
-BRDA:24,5,0,0
-BRDA:24,5,1,0
-BRDA:25,6,0,0
-BRDA:25,6,1,0
-BRDA:25,7,0,0
-BRDA:25,7,1,0
-BRDA:29,8,0,0
-BRDA:29,8,1,0
-BRDA:30,9,0,0
-BRDA:30,9,1,0
-BRDA:38,10,0,0
-BRDA:38,10,1,0
-BRDA:44,11,0,0
-BRDA:44,11,1,0
-BRDA:46,12,0,0
-BRDA:46,12,1,0
-BRDA:46,13,0,0
-BRDA:46,13,1,0
-BRDA:50,14,0,0
-BRDA:50,14,1,0
-BRDA:61,15,0,0
-BRDA:61,15,1,1
-BRDA:61,16,0,1
-BRDA:61,16,1,1
-BRDA:65,17,0,1
-BRDA:65,17,1,1
-BRF:34
-BRH:6
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/radio-group/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/radio/src/radio-group.vue
-FN:22,value
-FNF:1
-FNH:0
-FNDA:0,value
-DA:0,1
-DA:18,0
-LF:2
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/waterfall/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,1
-BRDA:11,1,1,0
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/waterfall/src/main.js
-FN:15,_interopRequireDefault
-FN:17,install
-FNF:2
-FNH:2
-FNDA:2,_interopRequireDefault
-FNDA:1,install
-DA:0,2
-DA:1,1
-DA:2,1
-DA:4,1
-DA:5,1
-DA:6,1
-DA:9,1
-DA:10,1
-DA:13,1
-LF:9
-LH:9
-BRDA:15,1,0,1
-BRDA:15,1,1,1
-BRDA:15,2,0,2
-BRDA:15,2,1,2
-BRDA:22,3,0,1
-BRDA:22,3,1,0
-BRF:6
-BRH:5
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/waterfall/src/directive.js
-FN:7,(anonymous_1)
-FN:9,bind
-FN:19,(anonymous_3)
-FN:25,update
-FN:28,unbind
-FN:39,_interopRequireDefault
-FN:46,doBindEvent
-FN:55,(anonymous_8)
-FN:71,handleScrollEvent
-FNF:9
-FNH:2
-FNDA:2,(anonymous_1)
-FNDA:0,bind
-FNDA:0,(anonymous_3)
-FNDA:0,update
-FNDA:0,unbind
-FNDA:1,_interopRequireDefault
-FNDA:0,doBindEvent
-FNDA:0,(anonymous_8)
-FNDA:0,handleScrollEvent
-DA:0,1
-DA:1,1
-DA:3,1
-DA:4,1
-DA:8,1
-DA:9,0
-DA:10,0
-DA:12,0
-DA:13,0
-DA:14,0
-DA:15,0
-DA:16,0
-DA:18,0
-DA:20,0
-DA:22,0
-DA:23,0
-DA:25,0
-DA:27,0
-DA:31,1
-DA:32,0
-DA:33,0
-DA:36,0
-DA:38,0
-DA:39,0
-DA:42,0
-DA:43,0
-DA:44,0
-DA:46,0
-DA:47,0
-DA:49,0
-DA:50,0
-DA:54,0
-DA:55,0
-DA:56,0
-DA:58,0
-DA:59,0
-DA:61,0
-DA:62,0
-DA:67,2
-DA:69,0
-DA:70,0
-DA:76,0
-DA:78,0
-DA:79,0
-DA:80,0
-DA:86,0
-DA:90,0
-DA:91,0
-LF:48
-LH:7
-BRDA:10,1,0,0
-BRDA:10,1,1,0
-BRDA:20,2,0,0
-BRDA:20,2,1,0
-BRDA:39,3,0,1
-BRDA:39,3,1,0
-BRDA:39,4,0,1
-BRDA:39,4,1,1
-BRDA:54,5,0,0
-BRDA:54,5,1,0
-BRDA:63,6,0,0
-BRDA:63,6,1,0
-BRDA:76,7,0,0
-BRDA:76,7,1,0
-BRDA:83,8,0,0
-BRDA:83,8,1,0
-BRDA:89,9,0,0
-BRDA:89,9,1,0
-BRDA:90,10,0,0
-BRDA:90,10,1,0
-BRDA:95,11,0,0
-BRDA:95,11,1,0
-BRDA:101,12,0,0
-BRDA:101,12,1,0
-BRDA:102,13,0,0
-BRDA:102,13,1,0
-BRF:26
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/waterfall/src/utils.js
-FN:7,debounce
-FN:9,(anonymous_2)
-FN:13,later
-FN:31,getScrollEventTarget
-FN:46,isAttached
-FN:62,getScrollTop
-FN:68,getElementTop
-FN:74,getVisibleHeight
-FNF:8
-FNH:0
-FNDA:0,debounce
-FNDA:0,(anonymous_2)
-FNDA:0,later
-FNDA:0,getScrollEventTarget
-FNDA:0,isAttached
-FNDA:0,getScrollTop
-FNDA:0,getElementTop
-FNDA:0,getVisibleHeight
-DA:0,1
-DA:3,0
-DA:4,0
-DA:5,0
-DA:6,0
-DA:7,0
-DA:8,0
-DA:9,0
-DA:10,0
-DA:11,0
-DA:13,0
-DA:14,0
-DA:17,0
-DA:18,0
-DA:20,0
-DA:26,0
-DA:28,0
-DA:29,0
-DA:30,0
-DA:31,0
-DA:33,0
-DA:35,0
-DA:40,0
-DA:41,0
-DA:42,0
-DA:43,0
-DA:45,0
-DA:46,0
-DA:48,0
-DA:50,0
-DA:55,0
-DA:60,0
-DA:61,0
-DA:63,0
-DA:67,0
-DA:68,0
-DA:71,0
-LF:37
-LH:1
-BRDA:15,1,0,0
-BRDA:15,1,1,0
-BRDA:22,2,0,0
-BRDA:22,2,1,0
-BRDA:34,3,0,0
-BRDA:34,3,1,0
-BRDA:34,3,2,0
-BRDA:34,3,3,0
-BRDA:36,4,0,0
-BRDA:36,4,1,0
-BRDA:36,5,0,0
-BRDA:36,5,1,0
-BRDA:49,6,0,0
-BRDA:49,6,1,0
-BRDA:52,7,0,0
-BRDA:52,7,1,0
-BRDA:63,8,0,0
-BRDA:63,8,1,0
-BRDA:69,9,0,0
-BRDA:69,9,1,0
-BRDA:75,10,0,0
-BRDA:75,10,1,0
-BRF:22
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/loading/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/loading/src/loading.vue
-FNF:0
-FNH:0
-DA:0,1
-LF:1
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/panel/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/panel/src/panel.vue
-FNF:0
-FNH:0
-DA:0,1
-LF:1
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/card/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/card/src/card.vue
-FNF:0
-FNH:0
-DA:0,1
-LF:1
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/steps/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/steps/src/steps.vue
-FN:17,data
-FNF:1
-FNH:0
-FNDA:0,data
-DA:0,1
-DA:13,0
-LF:2
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/tag/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/tag/src/main.vue
-FNF:0
-FNH:0
-DA:0,1
-LF:1
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/checkbox/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/checkbox/src/checkbox.vue
-FN:11,_interopRequireDefault
-FN:28,isGroup
-FN:37,get
-FN:40,set
-FN:64,isChecked
-FN:76,isDisabled
-FNF:6
-FNH:1
-FNDA:1,_interopRequireDefault
-FNDA:0,isGroup
-FNDA:0,get
-FNDA:0,set
-FNDA:0,isChecked
-FNDA:0,isDisabled
-DA:0,1
-DA:26,1
-DA:44,0
-DA:52,0
-DA:56,0
-DA:57,0
-DA:58,0
-DA:59,0
-DA:60,0
-DA:61,0
-DA:64,0
-DA:65,0
-DA:66,0
-DA:67,0
-DA:71,0
-DA:80,0
-DA:81,0
-DA:82,0
-DA:83,0
-DA:91,0
-LF:20
-LH:2
-BRDA:11,1,0,1
-BRDA:11,1,1,0
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRDA:38,3,0,0
-BRDA:38,3,1,0
-BRDA:38,4,0,0
-BRDA:38,4,1,0
-BRDA:41,5,0,0
-BRDA:41,5,1,0
-BRDA:41,6,0,0
-BRDA:41,6,1,0
-BRDA:43,7,0,0
-BRDA:43,7,1,0
-BRDA:44,8,0,0
-BRDA:44,8,1,0
-BRDA:50,9,0,0
-BRDA:50,9,1,0
-BRDA:65,10,0,0
-BRDA:65,10,1,0
-BRDA:67,11,0,0
-BRDA:67,11,1,0
-BRDA:77,12,0,0
-BRDA:77,12,1,0
-BRDA:77,13,0,0
-BRDA:77,13,1,0
-BRDA:77,14,0,0
-BRDA:77,14,1,0
-BRF:28
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/checkbox-group/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/checkbox/src/checkbox-group.vue
-FN:22,value
-FNF:1
-FNH:0
-FNDA:0,value
-DA:0,1
-DA:18,0
-LF:2
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/badge-group/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/badge/src/badge-group.vue
-FN:24,data
-FNF:1
-FNH:0
-FNDA:0,data
-DA:0,1
-DA:20,0
-LF:2
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/badge/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/badge/src/badge.vue
-FN:33,handleClick
-FN:38,classNames
-FNF:2
-FNH:0
-FNDA:0,handleClick
-FNDA:0,classNames
-DA:0,1
-DA:29,0
-DA:34,0
-LF:3
-LH:1
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/search/index.js
-FN:11,_interopRequireDefault
-FNF:1
-FNH:1
-FNDA:1,_interopRequireDefault
-DA:0,1
-DA:1,1
-LF:2
-LH:2
-BRDA:11,1,0,0
-BRDA:11,1,1,1
-BRDA:11,2,0,1
-BRDA:11,2,1,1
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/chenyao/youzan/oxygen/packages/search/src/search.vue
-FN:24,data
-FN:34,update
-FN:42,handleFocus
-FN:46,handleClean
-FN:51,handleBack
-FN:57,handleSearch
-FNF:6
-FNH:0
-FNDA:0,data
-FNDA:0,update
-FNDA:0,handleFocus
-FNDA:0,handleClean
-FNDA:0,handleBack
-FNDA:0,handleSearch
-DA:0,1
-DA:20,0
-DA:29,0
-DA:36,0
-DA:40,0
-DA:41,0
-DA:45,0
-DA:46,0
-DA:47,0
-DA:51,0
-LF:10
-LH:1
-BRDA:35,1,0,0
-BRDA:35,1,1,0
-BRF:2
-BRH:0
-end_of_record

From 8c3eb819b0f5277aa35fa187f396b6c24e99820e Mon Sep 17 00:00:00 2001
From: pangxie1991 <chenyao1102@gmail.com>
Date: Fri, 3 Mar 2017 11:07:16 +0800
Subject: [PATCH 6/9] vue creater

---
 test/unit/creater.js | 55 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)
 create mode 100644 test/unit/creater.js

diff --git a/test/unit/creater.js b/test/unit/creater.js
new file mode 100644
index 000000000..68f5779aa
--- /dev/null
+++ b/test/unit/creater.js
@@ -0,0 +1,55 @@
+import Vue from 'vue';
+
+let id = 0;
+
+class Creater {
+  constructor(Compo, propsData) {
+    let Ctor = Vue.extend(Compo);
+    this.vueInstance = new Ctor({ propsData });
+  }
+
+  mount() {
+    const elem = exports.createElm();
+    this.vueInstance.$mount(elem);
+  }
+
+  triggerEvent(name, ...opts) {
+    let eventName;
+    let elem = this.vueInstance.$el;
+
+    if (/^mouse|click/.test(name)) {
+      eventName = 'MouseEvents';
+    } else if (/^key/.test(name)) {
+      eventName = 'KeyboardEvent';
+    } else {
+      eventName = 'HTMLEvents';
+    }
+    const evt = document.createEvent(eventName);
+
+    evt.initEvent(name, ...opts);
+    elem.dispatchEvent
+      ? elem.dispatchEvent(evt)
+      : elem.fireEvent('on' + name, evt);
+
+    return elem;
+  }
+
+  destroy() {
+    this.vueInstance.$el &&
+    this.vueInstance.$el.parentNode &&
+    this.vueInstance.$el.parentNode.removeChild(this.$el);
+  }
+}
+
+exports.createElm = function() {
+  const elm = document.createElement('div');
+
+  elm.id = 'app' + ++id;
+  document.body.appendChild(elm);
+
+  return elm;
+};
+
+exports.createVue = function(Compo, propsData = {}) {
+  return new Creater(Compo, propsData);
+};

From ef57909f096279b9059a707682524099178fda46 Mon Sep 17 00:00:00 2001
From: niunai <colonD.wny@gmail.com>
Date: Fri, 3 Mar 2017 14:45:03 +0800
Subject: [PATCH 7/9] =?UTF-8?q?=E6=9B=B4=E6=96=B0eslint=E8=A7=84=E5=88=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .eslintrc.js | 162 ++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 135 insertions(+), 27 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index 84db110c0..a8901f812 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,34 +1,142 @@
 module.exports = {
-  root: true,
-  parser: 'babel-eslint',
   parserOptions: {
+    ecmaVersion: 6,
+    ecmaFeatures: {
+      experimentalObjectRestSpread: true,
+      jsx: true
+    },
     sourceType: 'module'
   },
-  // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
-  extends: 'standard',
-  // required to lint *.vue files
-  plugins: [
-    'html'
-  ],
-  // add your custom rules here
-  'rules': {
-    // allow paren-less arrow functions
-    'arrow-parens': 0,
-    // allow async-await
-    'generator-star-spacing': 0,
-    // allow debugger during development
-    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
-    'semi': ['error', 'always'],
-    'space-before-function-paren': ['error', 'never'],
-    'no-useless-escape': 0,
-    'no-extra-boolean-cast': 0,
-    'no-new': 0
+
+  env: {
+    es6: true,
+    node: true
   },
-  "globals": {
-    "zanui": true,
-    "location": true,
-    "Swiper": true,
-    "wysihtml5": true,
-    "wysihtml5ParserRules": true
+
+  plugins: ['vue'],
+
+  globals: {
+    zanui: true,
+    document: false,
+    navigator: false,
+    window: false
+  },
+
+  rules: {
+    'accessor-pairs': 2,
+    'arrow-spacing': [2, { 'before': true, 'after': true }],
+    'block-spacing': [2, 'always'],
+    'brace-style': [2, '1tbs', { 'allowSingleLine': true }],
+    'camelcase': [2, { 'properties': 'always' }],
+    'comma-dangle': [2, 'never'],
+    'comma-spacing': [2, { 'before': false, 'after': true }],
+    'comma-style': [2, 'last'],
+    'constructor-super': 2,
+    'curly': [2, 'multi-line'],
+    'dot-location': [2, 'property'],
+    'eol-last': 2,
+    'eqeqeq': [2, 'allow-null'],
+    'generator-star-spacing': [2, { 'before': true, 'after': true }],
+    'handle-callback-err': [2, '^(err|error)$' ],
+    'indent': [2, 2, { 'SwitchCase': 1 }],
+    'jsx-quotes': [2, 'prefer-single'],
+    'key-spacing': [2, { 'beforeColon': false, 'afterColon': true }],
+    'keyword-spacing': [2, { 'before': true, 'after': true }],
+    'new-cap': [2, { 'newIsCap': true, 'capIsNew': false }],
+    'new-parens': 2,
+    'no-array-constructor': 2,
+    'no-caller': 2,
+    'no-class-assign': 2,
+    'no-cond-assign': 2,
+    'no-const-assign': 2,
+    'no-control-regex': 2,
+    'no-delete-var': 2,
+    'no-dupe-args': 2,
+    'no-dupe-class-members': 2,
+    'no-dupe-keys': 2,
+    'no-duplicate-case': 2,
+    'no-empty-character-class': 2,
+    'no-empty-pattern': 2,
+    'no-eval': 2,
+    'no-ex-assign': 2,
+    'no-extend-native': 2,
+    'no-extra-bind': 2,
+    'no-extra-boolean-cast': 2,
+    'no-extra-parens': [2, 'functions'],
+    'no-fallthrough': 2,
+    'no-floating-decimal': 2,
+    'no-func-assign': 2,
+    'no-implied-eval': 2,
+    'no-inner-declarations': [2, 'functions'],
+    'no-invalid-regexp': 2,
+    'no-irregular-whitespace': 2,
+    'no-iterator': 2,
+    'no-label-var': 2,
+    'no-labels': [2, { 'allowLoop': false, 'allowSwitch': false }],
+    'no-lone-blocks': 2,
+    'no-mixed-spaces-and-tabs': 2,
+    'no-multi-spaces': 2,
+    'no-multi-str': 2,
+    'no-multiple-empty-lines': [2, { 'max': 1 }],
+    'no-native-reassign': 2,
+    'no-negated-in-lhs': 2,
+    'no-new-object': 2,
+    'no-new-require': 2,
+    'no-new-symbol': 2,
+    'no-new-wrappers': 2,
+    'no-obj-calls': 2,
+    'no-octal': 2,
+    'no-octal-escape': 2,
+    'no-path-concat': 2,
+    'no-proto': 2,
+    'no-redeclare': 2,
+    'no-regex-spaces': 2,
+    'no-return-assign': [2, 'except-parens'],
+    'no-self-assign': 2,
+    'no-self-compare': 2,
+    'no-sequences': 2,
+    'no-shadow-restricted-names': 2,
+    'no-spaced-func': 2,
+    'no-sparse-arrays': 2,
+    'no-this-before-super': 2,
+    'no-throw-literal': 2,
+    'no-trailing-spaces': 2,
+    'no-undef': 2,
+    'no-undef-init': 2,
+    'no-unexpected-multiline': 2,
+    'no-unmodified-loop-condition': 2,
+    'no-unneeded-ternary': [2, { 'defaultAssignment': false }],
+    'no-unreachable': 2,
+    'no-unsafe-finally': 2,
+    'no-unused-vars': [2, { 'vars': 'all', 'args': 'none' }],
+    'no-useless-call': 2,
+    'no-useless-computed-key': 2,
+    'no-useless-constructor': 2,
+    'no-useless-escape': 0,
+    'no-whitespace-before-property': 2,
+    'no-with': 2,
+    'one-var': [2, { 'initialized': 'never' }],
+    'operator-linebreak': [2, 'after', { 'overrides': { '?': 'before', ':': 'before' } }],
+    'padded-blocks': [2, 'never'],
+    'quotes': [2, 'single', { 'avoidEscape': true, 'allowTemplateLiterals': true }],
+    'semi': [2, 'always'],
+    'semi-spacing': [2, { 'before': false, 'after': true }],
+    'space-before-blocks': [2, 'always'],
+    'space-before-function-paren': [2, 'never'],
+    'space-in-parens': [2, 'never'],
+    'space-infix-ops': 2,
+    'space-unary-ops': [2, { 'words': true, 'nonwords': false }],
+    'spaced-comment': [2, 'always', { 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] }],
+    'template-curly-spacing': [2, 'never'],
+    'use-isnan': 2,
+    'valid-typeof': 2,
+    'wrap-iife': [2, 'any'],
+    'yield-star-spacing': [2, 'both'],
+    'yoda': [2, 'never'],
+    'prefer-const': 2,
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
+    'object-curly-spacing': [2, 'always', { objectsInObjects: false }],
+    'array-bracket-spacing': [2, 'never'],
+    'vue/jsx-uses-vars': 2
   }
 }

From cead595693166079b504830f68eed8c7e7eeea72 Mon Sep 17 00:00:00 2001
From: niunai <colonD.wny@gmail.com>
Date: Fri, 3 Mar 2017 14:47:16 +0800
Subject: [PATCH 8/9] css indent 2 spaces

---
 .editorconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.editorconfig b/.editorconfig
index 492fca883..39cb692c8 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -16,7 +16,7 @@ indent_size = 2
 [*.vue]
 indent_size = 2
 
-[*.pcss]
+[*.css]
 indent_size = 2
 
 [Makefile]

From 144e49ef3898df6982f353508d2b4be45b9851e6 Mon Sep 17 00:00:00 2001
From: pangxie1991 <chenyao1102@gmail.com>
Date: Fri, 3 Mar 2017 15:03:35 +0800
Subject: [PATCH 9/9] unit test

---
 .eslintrc.js                   |  5 ++
 package.json                   |  3 +-
 test/unit/creater.js           | 14 +++---
 test/unit/get-webpack-conf.js  |  4 +-
 test/unit/specs/switch.spec.js | 83 ++++++++++++++++++++++++++++++++++
 5 files changed, 101 insertions(+), 8 deletions(-)
 create mode 100644 test/unit/specs/switch.spec.js

diff --git a/.eslintrc.js b/.eslintrc.js
index 84db110c0..1703d284a 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -24,7 +24,12 @@ module.exports = {
     'no-extra-boolean-cast': 0,
     'no-new': 0
   },
+  "env": {
+    "mocha": true
+  },
   "globals": {
+    "expect": true,
+    "sinon": true,
     "zanui": true,
     "location": true,
     "Swiper": true,
diff --git a/package.json b/package.json
index e25ecf0db..8b69faed3 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,8 @@
     "builddocs": "webpack --progress --hide-modules --config  build/webpack.config.js && set NODE_ENV=production webpack --progress --hide-modules --config  build/webpack.config.js",
     "clean": "rimraf lib && rimraf packages/*/lib",
     "lint": "eslint src/**/*.js packages/**/*.{js,vue} --quiet",
-    "test": "karma start test/unit/karma.conf.js; npm run coverage",
+    "test": "karma start test/unit/karma.conf.js --single-run; npm run coverage",
+    "test:watch": "karma start test/unit/karma.conf.js",
     "coverage": "find test/unit/coverage/lcov-report -name 'index.html' | sed -n 1,1p  | xargs -I {} open {}  "
   },
   "repository": {
diff --git a/test/unit/creater.js b/test/unit/creater.js
index 68f5779aa..e35013380 100644
--- a/test/unit/creater.js
+++ b/test/unit/creater.js
@@ -5,17 +5,19 @@ let id = 0;
 class Creater {
   constructor(Compo, propsData) {
     let Ctor = Vue.extend(Compo);
-    this.vueInstance = new Ctor({ propsData });
+    this.vue = new Ctor({ propsData });
+    this.el = null;
   }
 
   mount() {
     const elem = exports.createElm();
-    this.vueInstance.$mount(elem);
+    this.vue.$mount(elem);
+    this.el = this.vue.$el;
   }
 
   triggerEvent(name, ...opts) {
     let eventName;
-    let elem = this.vueInstance.$el;
+    let elem = this.el;
 
     if (/^mouse|click/.test(name)) {
       eventName = 'MouseEvents';
@@ -35,9 +37,9 @@ class Creater {
   }
 
   destroy() {
-    this.vueInstance.$el &&
-    this.vueInstance.$el.parentNode &&
-    this.vueInstance.$el.parentNode.removeChild(this.$el);
+    this.el &&
+    this.el.parentNode &&
+    this.el.parentNode.removeChild(this.el);
   }
 }
 
diff --git a/test/unit/get-webpack-conf.js b/test/unit/get-webpack-conf.js
index 8421187b4..e7a38aacc 100644
--- a/test/unit/get-webpack-conf.js
+++ b/test/unit/get-webpack-conf.js
@@ -1,6 +1,8 @@
 const path = require('path');
 const to2 = require('2webpack2');
+// const webpack = require('webpack');
 const ProgressBarPlugin = require('progress-bar-webpack-plugin');
+const getPostcssPlugin = require('../../build/utils/postcss_pipe');
 
 let webpackConfig = {
   output: {
@@ -12,6 +14,7 @@ let webpackConfig = {
   plugins: [
     new ProgressBarPlugin()
   ],
+  postcss: getPostcssPlugin,
   resolve: {
     extensions: [
       '',
@@ -23,7 +26,6 @@ let webpackConfig = {
       src: path.resolve(process.cwd(), 'src'),
       packages: path.resolve(process.cwd(), 'packages'),
       examples: path.resolve(process.cwd(), 'examples'),
-      'element-ui': path.resolve(process.cwd()),
       vue$: 'vue/dist/vue.common.js'
     }
   },
diff --git a/test/unit/specs/switch.spec.js b/test/unit/specs/switch.spec.js
new file mode 100644
index 000000000..5e529d42a
--- /dev/null
+++ b/test/unit/specs/switch.spec.js
@@ -0,0 +1,83 @@
+import Switch from 'packages/switch';
+import { createVue } from '../creater';
+
+describe('Switch', () => {
+  let vm;
+  afterEach(() => {
+    vm && vm.destroy();
+  });
+
+  it('create', () => {
+    vm = createVue(Switch, {
+      checked: true
+    });
+    vm.mount();
+
+    expect(vm.el.classList.contains('zan-switch')).to.true;
+    expect(vm.el.classList.contains('is-on')).to.true;
+  });
+
+  it('create off switch', () => {
+    vm = createVue(Switch, {
+      checked: false
+    });
+    vm.mount();
+
+    expect(vm.el.classList.contains('zan-switch')).to.true;
+  });
+
+  it('switch click default', done => {
+    vm = createVue({
+      data() {
+        return {
+          checked: false
+        };
+      },
+      components: {
+        'zan-switch': Switch
+      },
+      template: `
+        <zan-switch :checked="checked"></zan-switch>
+      `
+    });
+    vm.mount();
+    expect(vm.el.classList.contains('zan-switch')).to.true;
+    expect(vm.el.classList.contains('is-off')).to.true;
+    vm.el.click();
+
+    setTimeout(() => {
+      expect(vm.el.classList.contains('is-off')).to.true;
+      done();
+    });
+  });
+
+  it('switch click', done => {
+    vm = createVue({
+      data() {
+        return {
+          checked: false
+        };
+      },
+      components: {
+        'zan-switch': Switch
+      },
+      template: `
+        <zan-switch :checked="checked" :onChange="handleClick"></zan-switch>
+      `,
+      methods: {
+        handleClick(e) {
+          this.checked = !this.checked;
+        }
+      }
+    });
+    vm.mount();
+    expect(vm.el.classList.contains('zan-switch')).to.true;
+    expect(vm.el.classList.contains('is-off')).to.true;
+    vm.el.click();
+
+    setTimeout(() => {
+      expect(vm.el.classList.contains('is-on')).to.true;
+      done();
+    });
+  });
+});